sonamu 0.10.12 → 0.10.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/dist/ai/agents/agent.d.ts +1 -1
  2. package/dist/ai/agents/agent.d.ts.map +1 -1
  3. package/dist/ai/agents/agent.js +5 -6
  4. package/dist/ai/agents/types.d.ts +1 -1
  5. package/dist/ai/agents/types.d.ts.map +1 -1
  6. package/dist/ai/providers/rtzr/api.js +18 -18
  7. package/dist/ai/providers/rtzr/error.d.ts.map +1 -1
  8. package/dist/ai/providers/rtzr/error.js +17 -15
  9. package/dist/ai/providers/rtzr/model.d.ts.map +1 -1
  10. package/dist/ai/providers/rtzr/model.js +3 -2
  11. package/dist/ai/providers/rtzr/options.d.ts.map +1 -1
  12. package/dist/ai/providers/rtzr/options.js +16 -16
  13. package/dist/ai/providers/rtzr/provider.d.ts.map +1 -1
  14. package/dist/ai/providers/rtzr/provider.js +9 -9
  15. package/dist/ai/providers/rtzr/utils.d.ts.map +1 -1
  16. package/dist/ai/providers/rtzr/utils.js +1 -1
  17. package/dist/api/caster.d.ts.map +1 -1
  18. package/dist/api/caster.js +17 -17
  19. package/dist/api/code-converters.d.ts +4 -2
  20. package/dist/api/code-converters.d.ts.map +1 -1
  21. package/dist/api/code-converters.js +100 -19
  22. package/dist/api/config.d.ts +16 -1
  23. package/dist/api/config.d.ts.map +1 -1
  24. package/dist/api/config.js +28 -21
  25. package/dist/api/context.d.ts +2 -2
  26. package/dist/api/context.d.ts.map +1 -1
  27. package/dist/api/context.js +1 -1
  28. package/dist/api/decorators.d.ts.map +1 -1
  29. package/dist/api/decorators.js +18 -11
  30. package/dist/api/http-validator.d.ts +36 -0
  31. package/dist/api/http-validator.d.ts.map +1 -0
  32. package/dist/api/http-validator.js +72 -0
  33. package/dist/api/index.js +6 -4
  34. package/dist/api/sonamu.d.ts +59 -20
  35. package/dist/api/sonamu.d.ts.map +1 -1
  36. package/dist/api/sonamu.js +250 -106
  37. package/dist/api/websocket-helpers.d.ts +7 -5
  38. package/dist/api/websocket-helpers.d.ts.map +1 -1
  39. package/dist/api/websocket-helpers.js +6 -6
  40. package/dist/auth/audit-log/builders.d.ts.map +1 -1
  41. package/dist/auth/audit-log/builders.js +1 -1
  42. package/dist/auth/audit-log/client-ip.d.ts +1 -1
  43. package/dist/auth/audit-log/client-ip.d.ts.map +1 -1
  44. package/dist/auth/audit-log/client-ip.js +4 -2
  45. package/dist/auth/audit-log/events.d.ts +5 -1
  46. package/dist/auth/audit-log/events.d.ts.map +1 -1
  47. package/dist/auth/audit-log/events.js +1 -1
  48. package/dist/auth/audit-log/plugin.d.ts +0 -8
  49. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  50. package/dist/auth/audit-log/plugin.js +48 -52
  51. package/dist/auth/audit-log-ingestor.d.ts.map +1 -1
  52. package/dist/auth/audit-log-ingestor.js +16 -12
  53. package/dist/auth/auth-generator.d.ts.map +1 -1
  54. package/dist/auth/auth-generator.js +1 -1
  55. package/dist/auth/better-auth-request.d.ts.map +1 -1
  56. package/dist/auth/better-auth-request.js +6 -5
  57. package/dist/auth/knex-adapter.js +1 -1
  58. package/dist/auth/plugins/entity-definitions/index.d.ts +13 -1
  59. package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
  60. package/dist/auth/plugins/entity-definitions/index.js +1 -1
  61. package/dist/auth/plugins/wrappers/admin.d.ts +1 -1
  62. package/dist/bin/build-config.d.ts +25 -0
  63. package/dist/bin/build-config.d.ts.map +1 -1
  64. package/dist/bin/build-config.js +105 -2
  65. package/dist/bin/cli.js +131 -27
  66. package/dist/bin/compiler-policy.d.ts +3 -0
  67. package/dist/bin/compiler-policy.d.ts.map +1 -0
  68. package/dist/bin/compiler-policy.js +24 -0
  69. package/dist/bin/fixture.d.ts.map +1 -1
  70. package/dist/bin/fixture.js +5 -3
  71. package/dist/bin/test-command.d.ts +22 -1
  72. package/dist/bin/test-command.d.ts.map +1 -1
  73. package/dist/bin/test-command.js +18 -10
  74. package/dist/bin/ts-loader-registration.d.ts +7 -1
  75. package/dist/bin/ts-loader-registration.d.ts.map +1 -1
  76. package/dist/bin/ts-loader-registration.js +13 -4
  77. package/dist/cache/decorator.d.ts.map +1 -1
  78. package/dist/cache/decorator.js +11 -4
  79. package/dist/compress/compress.d.ts.map +1 -1
  80. package/dist/compress/compress.js +1 -1
  81. package/dist/cone/cone-generator.d.ts +14 -1
  82. package/dist/cone/cone-generator.d.ts.map +1 -1
  83. package/dist/cone/cone-generator.js +13 -9
  84. package/dist/database/_batch_update.js +1 -1
  85. package/dist/database/base-model.d.ts +22 -10
  86. package/dist/database/base-model.d.ts.map +1 -1
  87. package/dist/database/base-model.js +26 -16
  88. package/dist/database/base-model.types.d.ts +15 -3
  89. package/dist/database/base-model.types.d.ts.map +1 -1
  90. package/dist/database/db.d.ts +12 -2
  91. package/dist/database/db.d.ts.map +1 -1
  92. package/dist/database/db.js +10 -7
  93. package/dist/database/knex.d.ts.map +1 -1
  94. package/dist/database/knex.js +17 -14
  95. package/dist/database/puri.d.ts +11 -9
  96. package/dist/database/puri.d.ts.map +1 -1
  97. package/dist/database/puri.js +93 -79
  98. package/dist/database/puri.types.d.ts +21 -21
  99. package/dist/database/puri.types.d.ts.map +1 -1
  100. package/dist/database/puri.types.js +1 -1
  101. package/dist/database/upsert-builder.d.ts +12 -10
  102. package/dist/database/upsert-builder.d.ts.map +1 -1
  103. package/dist/database/upsert-builder.js +20 -12
  104. package/dist/dict/sd.d.ts.map +1 -1
  105. package/dist/dict/sd.js +1 -1
  106. package/dist/dict/sonamu-dictionary.d.ts.map +1 -1
  107. package/dist/dict/sonamu-dictionary.js +1 -1
  108. package/dist/dict/utils.d.ts.map +1 -1
  109. package/dist/dict/utils.js +7 -2
  110. package/dist/entity/entity-manager.d.ts +13 -4
  111. package/dist/entity/entity-manager.d.ts.map +1 -1
  112. package/dist/entity/entity-manager.js +19 -11
  113. package/dist/entity/entity-template-cone.d.ts +73 -5
  114. package/dist/entity/entity-template-cone.d.ts.map +1 -1
  115. package/dist/entity/entity-template-cone.js +4 -2
  116. package/dist/entity/entity.d.ts +6 -2
  117. package/dist/entity/entity.d.ts.map +1 -1
  118. package/dist/entity/entity.js +30 -28
  119. package/dist/env.d.ts +3 -1
  120. package/dist/env.d.ts.map +1 -1
  121. package/dist/env.js +1 -1
  122. package/dist/exceptions/error-handler.d.ts.map +1 -1
  123. package/dist/exceptions/error-handler.js +7 -2
  124. package/dist/exceptions/so-exceptions.d.ts +24 -20
  125. package/dist/exceptions/so-exceptions.d.ts.map +1 -1
  126. package/dist/exceptions/so-exceptions.js +4 -2
  127. package/dist/filter/utils.d.ts +7 -2
  128. package/dist/filter/utils.d.ts.map +1 -1
  129. package/dist/filter/utils.js +8 -6
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.d.ts.map +1 -1
  132. package/dist/index.js +12 -6
  133. package/dist/logger/configure.d.ts.map +1 -1
  134. package/dist/logger/configure.js +10 -10
  135. package/dist/migration/code-generation.d.ts.map +1 -1
  136. package/dist/migration/code-generation.js +50 -46
  137. package/dist/migration/index-where-predicate.d.ts.map +1 -1
  138. package/dist/migration/index-where-predicate.js +22 -8
  139. package/dist/migration/migration-set.d.ts.map +1 -1
  140. package/dist/migration/migration-set.js +1 -1
  141. package/dist/migration/migrator.d.ts +3 -2
  142. package/dist/migration/migrator.d.ts.map +1 -1
  143. package/dist/migration/migrator.js +27 -21
  144. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  145. package/dist/migration/postgresql-schema-reader.js +51 -36
  146. package/dist/migration/slack-confirm.d.ts.map +1 -1
  147. package/dist/migration/slack-confirm.js +1 -1
  148. package/dist/naite/naite-reporter.js +2 -2
  149. package/dist/naite/naite.d.ts +74 -15
  150. package/dist/naite/naite.d.ts.map +1 -1
  151. package/dist/naite/naite.js +5 -19
  152. package/dist/runtime-type.d.ts +6 -0
  153. package/dist/runtime-type.d.ts.map +1 -0
  154. package/dist/runtime-type.js +26 -0
  155. package/dist/ssr/hmr-opt-out.d.ts +26 -0
  156. package/dist/ssr/hmr-opt-out.d.ts.map +1 -0
  157. package/dist/ssr/hmr-opt-out.js +59 -0
  158. package/dist/ssr/renderer.d.ts.map +1 -1
  159. package/dist/ssr/renderer.js +4 -1
  160. package/dist/storage/base-file.js +14 -14
  161. package/dist/storage/buffered-file.d.ts +2 -2
  162. package/dist/storage/buffered-file.d.ts.map +1 -1
  163. package/dist/storage/buffered-file.js +12 -12
  164. package/dist/storage/s3-driver.d.ts.map +1 -1
  165. package/dist/storage/s3-driver.js +1 -1
  166. package/dist/storage/uploaded-file.d.ts +2 -2
  167. package/dist/storage/uploaded-file.d.ts.map +1 -1
  168. package/dist/storage/uploaded-file.js +8 -8
  169. package/dist/stream/sse.js +11 -11
  170. package/dist/stream/ws-core.d.ts +1 -1
  171. package/dist/stream/ws-core.d.ts.map +1 -1
  172. package/dist/stream/ws-delivery.d.ts +1 -1
  173. package/dist/stream/ws-delivery.d.ts.map +1 -1
  174. package/dist/stream/ws-delivery.js +6 -4
  175. package/dist/stream/ws-local-connection-store.d.ts.map +1 -1
  176. package/dist/stream/ws-local-connection-store.js +4 -2
  177. package/dist/stream/ws-presence-store.js +1 -1
  178. package/dist/stream/ws-registry.d.ts +4 -4
  179. package/dist/stream/ws-registry.d.ts.map +1 -1
  180. package/dist/stream/ws-registry.js +4 -2
  181. package/dist/stream/ws-telemetry.d.ts +16 -12
  182. package/dist/stream/ws-telemetry.d.ts.map +1 -1
  183. package/dist/stream/ws-telemetry.js +22 -18
  184. package/dist/stream/ws.d.ts +18 -12
  185. package/dist/stream/ws.d.ts.map +1 -1
  186. package/dist/stream/ws.js +26 -22
  187. package/dist/syncer/api-parser.js +1 -1
  188. package/dist/syncer/checksum.d.ts.map +1 -1
  189. package/dist/syncer/checksum.js +7 -8
  190. package/dist/syncer/code-generator.d.ts.map +1 -1
  191. package/dist/syncer/code-generator.js +13 -14
  192. package/dist/syncer/entity-operations.d.ts.map +1 -1
  193. package/dist/syncer/entity-operations.js +5 -6
  194. package/dist/syncer/file-copy.d.ts +5 -0
  195. package/dist/syncer/file-copy.d.ts.map +1 -0
  196. package/dist/syncer/file-copy.js +36 -0
  197. package/dist/syncer/file-patterns.d.ts +1 -0
  198. package/dist/syncer/file-patterns.d.ts.map +1 -1
  199. package/dist/syncer/file-patterns.js +5 -2
  200. package/dist/syncer/file-tracking.d.ts.map +1 -1
  201. package/dist/syncer/file-tracking.js +5 -4
  202. package/dist/syncer/filesystem-dependencies.d.ts +15 -0
  203. package/dist/syncer/filesystem-dependencies.d.ts.map +1 -0
  204. package/dist/syncer/filesystem-dependencies.js +53 -0
  205. package/dist/syncer/module-loader.d.ts +1 -1
  206. package/dist/syncer/module-loader.d.ts.map +1 -1
  207. package/dist/syncer/module-loader.js +6 -4
  208. package/dist/syncer/syncer-actions.d.ts +4 -0
  209. package/dist/syncer/syncer-actions.d.ts.map +1 -1
  210. package/dist/syncer/syncer-actions.js +34 -17
  211. package/dist/syncer/syncer.d.ts +17 -6
  212. package/dist/syncer/syncer.d.ts.map +1 -1
  213. package/dist/syncer/syncer.js +71 -29
  214. package/dist/syncer/watcher.d.ts.map +1 -1
  215. package/dist/syncer/watcher.js +3 -3
  216. package/dist/tasks/decorator.d.ts +6 -6
  217. package/dist/tasks/decorator.d.ts.map +1 -1
  218. package/dist/tasks/decorator.js +4 -4
  219. package/dist/tasks/step-wrapper.d.ts +6 -4
  220. package/dist/tasks/step-wrapper.d.ts.map +1 -1
  221. package/dist/tasks/step-wrapper.js +5 -5
  222. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  223. package/dist/tasks/workflow-manager.js +13 -7
  224. package/dist/template/entity-converter.d.ts +1 -1
  225. package/dist/template/entity-converter.d.ts.map +1 -1
  226. package/dist/template/entity-converter.js +2 -2
  227. package/dist/template/helpers.d.ts +8 -6
  228. package/dist/template/helpers.d.ts.map +1 -1
  229. package/dist/template/helpers.js +1 -1
  230. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  231. package/dist/template/implementations/generated.template.js +4 -4
  232. package/dist/template/implementations/generated_http.template.d.ts +7 -4
  233. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  234. package/dist/template/implementations/generated_http.template.js +21 -21
  235. package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
  236. package/dist/template/implementations/generated_sso.template.js +6 -3
  237. package/dist/template/implementations/http_validators.template.d.ts +18 -0
  238. package/dist/template/implementations/http_validators.template.d.ts.map +1 -0
  239. package/dist/template/implementations/http_validators.template.js +127 -0
  240. package/dist/template/implementations/model.template.d.ts.map +1 -1
  241. package/dist/template/implementations/model.template.js +1 -1
  242. package/dist/template/implementations/queries.template.js +1 -1
  243. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  244. package/dist/template/implementations/sd.template.js +79 -39
  245. package/dist/template/implementations/services.template.d.ts.map +1 -1
  246. package/dist/template/implementations/services.template.js +6 -4
  247. package/dist/template/implementations/view_form.template.d.ts +6 -1
  248. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  249. package/dist/template/implementations/view_form.template.js +23 -15
  250. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  251. package/dist/template/implementations/view_list.template.js +11 -6
  252. package/dist/template/template-manager.d.ts.map +1 -1
  253. package/dist/template/template-manager.js +9 -7
  254. package/dist/template/template-types.d.ts +12 -5
  255. package/dist/template/template-types.d.ts.map +1 -1
  256. package/dist/template/template-types.js +1 -1
  257. package/dist/template/template.d.ts +2 -2
  258. package/dist/template/template.d.ts.map +1 -1
  259. package/dist/template/template.js +6 -4
  260. package/dist/template/zod-converter.d.ts +0 -19
  261. package/dist/template/zod-converter.d.ts.map +1 -1
  262. package/dist/template/zod-converter.js +100 -84
  263. package/dist/testing/_relation-graph.d.ts.map +1 -1
  264. package/dist/testing/_relation-graph.js +2 -1
  265. package/dist/testing/bootstrap.d.ts.map +1 -1
  266. package/dist/testing/bootstrap.js +9 -6
  267. package/dist/testing/data-explorer.d.ts +32 -7
  268. package/dist/testing/data-explorer.d.ts.map +1 -1
  269. package/dist/testing/data-explorer.js +77 -31
  270. package/dist/testing/dev-test-routes.d.ts +8 -1
  271. package/dist/testing/dev-test-routes.d.ts.map +1 -1
  272. package/dist/testing/dev-test-routes.js +125 -108
  273. package/dist/testing/dev-vitest-manager.d.ts +54 -8
  274. package/dist/testing/dev-vitest-manager.d.ts.map +1 -1
  275. package/dist/testing/dev-vitest-manager.js +24 -9
  276. package/dist/testing/faker-mappings.d.ts +412 -1
  277. package/dist/testing/faker-mappings.d.ts.map +1 -1
  278. package/dist/testing/faker-mappings.js +1 -1
  279. package/dist/testing/filesystem.d.ts +2 -0
  280. package/dist/testing/filesystem.d.ts.map +1 -0
  281. package/dist/testing/filesystem.js +7 -0
  282. package/dist/testing/fixture-generator.d.ts +25 -8
  283. package/dist/testing/fixture-generator.d.ts.map +1 -1
  284. package/dist/testing/fixture-generator.js +132 -73
  285. package/dist/testing/fixture-loader.d.ts +3 -1
  286. package/dist/testing/fixture-loader.d.ts.map +1 -1
  287. package/dist/testing/fixture-loader.js +1 -20
  288. package/dist/testing/fixture-manager.d.ts +8 -7
  289. package/dist/testing/fixture-manager.d.ts.map +1 -1
  290. package/dist/testing/fixture-manager.js +91 -59
  291. package/dist/testing/global-setup.d.ts.map +1 -1
  292. package/dist/testing/global-setup.js +5 -2
  293. package/dist/testing/index.d.ts +2 -0
  294. package/dist/testing/index.d.ts.map +1 -1
  295. package/dist/testing/index.js +6 -3
  296. package/dist/types/types.d.ts +101 -99
  297. package/dist/types/types.d.ts.map +1 -1
  298. package/dist/types/types.js +234 -225
  299. package/dist/ui/ai-api.d.ts.map +1 -1
  300. package/dist/ui/ai-api.js +1 -1
  301. package/dist/ui/ai-client.d.ts.map +1 -1
  302. package/dist/ui/ai-client.js +28 -18
  303. package/dist/ui/api.d.ts.map +1 -1
  304. package/dist/ui/api.js +135 -128
  305. package/dist/ui/async-route.d.ts +3 -0
  306. package/dist/ui/async-route.d.ts.map +1 -0
  307. package/dist/ui/async-route.js +12 -0
  308. package/dist/ui/cdd-service.d.ts +9 -7
  309. package/dist/ui/cdd-service.d.ts.map +1 -1
  310. package/dist/ui/cdd-service.js +7 -5
  311. package/dist/ui/migrations-api.d.ts.map +1 -1
  312. package/dist/ui/migrations-api.js +17 -15
  313. package/dist/ui-web/assets/index-DV1AAq6W.js +178 -0
  314. package/dist/ui-web/index.html +1 -1
  315. package/dist/utils/formatter.d.ts.map +1 -1
  316. package/dist/utils/formatter.js +7 -5
  317. package/dist/utils/fs-utils.d.ts +3 -3
  318. package/dist/utils/fs-utils.d.ts.map +1 -1
  319. package/dist/utils/fs-utils.js +6 -6
  320. package/dist/utils/model.d.ts +3 -5
  321. package/dist/utils/model.d.ts.map +1 -1
  322. package/dist/utils/model.js +1 -1
  323. package/dist/utils/object-utils.d.ts +1 -1
  324. package/dist/utils/object-utils.d.ts.map +1 -1
  325. package/dist/utils/object-utils.js +17 -16
  326. package/dist/utils/process-utils.d.ts.map +1 -1
  327. package/dist/utils/process-utils.js +4 -2
  328. package/dist/utils/runtime-value.d.ts +13 -0
  329. package/dist/utils/runtime-value.d.ts.map +1 -0
  330. package/dist/utils/runtime-value.js +40 -0
  331. package/dist/utils/sql-parser.d.ts +8 -1
  332. package/dist/utils/sql-parser.d.ts.map +1 -1
  333. package/dist/utils/sql-parser.js +6 -3
  334. package/dist/utils/type-utils.d.ts.map +1 -1
  335. package/dist/utils/type-utils.js +10 -8
  336. package/dist/utils/utils.d.ts +2 -2
  337. package/dist/utils/utils.d.ts.map +1 -1
  338. package/dist/utils/utils.js +11 -8
  339. package/dist/utils/zod-error.d.ts.map +1 -1
  340. package/dist/utils/zod-error.js +7 -4
  341. package/dist/vector/chunking.d.ts.map +1 -1
  342. package/dist/vector/chunking.js +1 -1
  343. package/dist/vector/embedding.d.ts.map +1 -1
  344. package/dist/vector/embedding.js +1 -1
  345. package/dist/vector/types.d.ts +3 -2
  346. package/dist/vector/types.d.ts.map +1 -1
  347. package/package.json +5 -3
  348. package/src/ai/agents/agent.ts +5 -5
  349. package/src/ai/agents/types.ts +1 -1
  350. package/src/ai/providers/rtzr/__tests__/model.test.ts +2 -2
  351. package/src/ai/providers/rtzr/error.ts +5 -3
  352. package/src/ai/providers/rtzr/model.ts +3 -2
  353. package/src/ai/providers/rtzr/options.ts +10 -5
  354. package/src/ai/providers/rtzr/provider.ts +10 -10
  355. package/src/ai/providers/rtzr/utils.ts +3 -1
  356. package/src/api/__tests__/config.test.ts +11 -21
  357. package/src/api/__tests__/sonamu.http-validator.test.ts +512 -0
  358. package/src/api/__tests__/sonamu.websocket.test.ts +51 -41
  359. package/src/api/__tests__/zod-compiler-policy.test.ts +95 -0
  360. package/src/api/caster.ts +6 -8
  361. package/src/api/code-converters.ts +136 -36
  362. package/src/api/config.ts +62 -4
  363. package/src/api/context.ts +3 -3
  364. package/src/api/decorators.ts +28 -17
  365. package/src/api/http-validator.ts +149 -0
  366. package/src/api/sonamu.ts +459 -152
  367. package/src/api/websocket-helpers.ts +24 -17
  368. package/src/auth/audit-log/builders.ts +3 -2
  369. package/src/auth/audit-log/client-ip.ts +4 -2
  370. package/src/auth/audit-log/events.ts +15 -1
  371. package/src/auth/audit-log/plugin.ts +129 -200
  372. package/src/auth/audit-log-ingestor.ts +19 -15
  373. package/src/auth/auth-generator.ts +10 -5
  374. package/src/auth/better-auth-request.ts +4 -3
  375. package/src/auth/knex-adapter.ts +8 -2
  376. package/src/auth/plugins/entity-definitions/index.ts +6 -5
  377. package/src/bin/__tests__/http-validator-benchmark.test.ts +94 -0
  378. package/src/bin/__tests__/test-command.test.ts +9 -15
  379. package/src/bin/__tests__/ts-loader-register.test.ts +15 -17
  380. package/src/bin/__tests__/zod-compiler-build.test.ts +307 -0
  381. package/src/bin/build-config.ts +167 -0
  382. package/src/bin/cli.ts +153 -36
  383. package/src/bin/compiler-policy.ts +35 -0
  384. package/src/bin/fixture.ts +14 -3
  385. package/src/bin/test-command.ts +74 -29
  386. package/src/bin/ts-loader-registration.ts +22 -4
  387. package/src/cache/decorator.ts +10 -3
  388. package/src/compress/compress.ts +17 -4
  389. package/src/cone/cone-generator.ts +34 -6
  390. package/src/database/__tests__/db.test.ts +1 -0
  391. package/src/database/__tests__/puri.test.ts +16 -15
  392. package/src/database/__tests__/transaction-scope.test.ts +5 -0
  393. package/src/database/_batch_update.ts +1 -0
  394. package/src/database/base-model.ts +81 -50
  395. package/src/database/base-model.types.ts +6 -6
  396. package/src/database/db.ts +29 -19
  397. package/src/database/knex.ts +30 -17
  398. package/src/database/puri-subset.test-d.ts +17 -0
  399. package/src/database/puri.ts +181 -143
  400. package/src/database/puri.types.test-d.ts +31 -1
  401. package/src/database/puri.types.ts +23 -21
  402. package/src/database/upsert-builder.ts +75 -53
  403. package/src/dict/sd.ts +15 -5
  404. package/src/dict/sonamu-dictionary.ts +6 -6
  405. package/src/dict/utils.ts +9 -1
  406. package/src/entity/entity-manager.ts +26 -9
  407. package/src/entity/entity-template-cone.ts +5 -10
  408. package/src/entity/entity.ts +50 -34
  409. package/src/env.ts +7 -3
  410. package/src/exceptions/error-handler.ts +17 -2
  411. package/src/exceptions/so-exceptions.ts +26 -20
  412. package/src/filter/utils.ts +21 -11
  413. package/src/index.ts +3 -0
  414. package/src/logger/configure.ts +26 -18
  415. package/src/migration/__tests__/migrator.test.ts +50 -57
  416. package/src/migration/code-generation.ts +132 -104
  417. package/src/migration/index-where-predicate.ts +51 -24
  418. package/src/migration/migration-set.ts +11 -5
  419. package/src/migration/migrator.ts +68 -41
  420. package/src/migration/postgresql-schema-reader.ts +52 -47
  421. package/src/migration/slack-confirm.ts +17 -15
  422. package/src/naite/naite-reporter.ts +1 -1
  423. package/src/naite/naite.ts +97 -24
  424. package/src/runtime-type.ts +34 -0
  425. package/src/ssr/hmr-opt-out.ts +78 -0
  426. package/src/ssr/renderer.ts +6 -0
  427. package/src/storage/base-file.ts +13 -13
  428. package/src/storage/buffered-file.ts +11 -11
  429. package/src/storage/s3-driver.ts +4 -1
  430. package/src/storage/uploaded-file.ts +8 -8
  431. package/src/stream/__tests__/ws-contracts.test.ts +4 -2
  432. package/src/stream/__tests__/ws-telemetry.test.ts +1 -1
  433. package/src/stream/__tests__/ws.test.ts +30 -6
  434. package/src/stream/sse.ts +12 -11
  435. package/src/stream/ws-core.ts +1 -1
  436. package/src/stream/ws-delivery.ts +16 -7
  437. package/src/stream/ws-local-connection-store.ts +2 -3
  438. package/src/stream/ws-presence-store.ts +6 -1
  439. package/src/stream/ws-registry.ts +16 -7
  440. package/src/stream/ws-telemetry.ts +66 -43
  441. package/src/stream/ws.ts +73 -39
  442. package/src/syncer/__tests__/api-parser.websocket-type-ref.test.ts +3 -2
  443. package/src/syncer/__tests__/http-validator-registry.test.ts +137 -0
  444. package/src/syncer/api-parser.ts +67 -27
  445. package/src/syncer/checksum.ts +17 -11
  446. package/src/syncer/code-generator.ts +25 -17
  447. package/src/syncer/entity-operations.ts +3 -5
  448. package/src/syncer/file-copy.ts +46 -0
  449. package/src/syncer/file-patterns.ts +11 -8
  450. package/src/syncer/file-tracking.ts +3 -4
  451. package/src/syncer/filesystem-dependencies.ts +73 -0
  452. package/src/syncer/module-loader.ts +8 -4
  453. package/src/syncer/syncer-actions.ts +56 -18
  454. package/src/syncer/syncer.ts +116 -43
  455. package/src/syncer/watcher.ts +8 -4
  456. package/src/tasks/decorator.ts +20 -12
  457. package/src/tasks/step-wrapper.ts +19 -9
  458. package/src/tasks/workflow-manager.ts +15 -9
  459. package/src/template/__tests__/http_validators.template.test.ts +160 -0
  460. package/src/template/__tests__/services.template.mutation.test.ts +24 -23
  461. package/src/template/__tests__/services.template.websocket.test.ts +21 -25
  462. package/src/template/entity-converter.ts +5 -2
  463. package/src/template/helpers.ts +8 -9
  464. package/src/template/implementations/generated.template.ts +5 -4
  465. package/src/template/implementations/generated_http.template.ts +61 -15
  466. package/src/template/implementations/generated_sso.template.ts +15 -4
  467. package/src/template/implementations/http_validators.template.ts +175 -0
  468. package/src/template/implementations/model.template.ts +3 -1
  469. package/src/template/implementations/sd.template.ts +81 -41
  470. package/src/template/implementations/services.template.ts +2 -2
  471. package/src/template/implementations/view_form.template.ts +56 -39
  472. package/src/template/implementations/view_list.template.ts +31 -23
  473. package/src/template/template-manager.ts +15 -13
  474. package/src/template/template-types.ts +13 -5
  475. package/src/template/template.ts +4 -3
  476. package/src/template/zod-converter.ts +206 -91
  477. package/src/testing/__tests__/dev-test-routes.test.ts +85 -25
  478. package/src/testing/__tests__/dev-vitest-manager.test.ts +15 -15
  479. package/src/testing/_relation-graph.ts +4 -1
  480. package/src/testing/bootstrap.ts +12 -5
  481. package/src/testing/data-explorer.ts +102 -53
  482. package/src/testing/dev-test-routes.ts +87 -50
  483. package/src/testing/dev-vitest-manager.ts +88 -32
  484. package/src/testing/faker-mappings.ts +2 -2
  485. package/src/testing/filesystem.ts +1 -0
  486. package/src/testing/fixture-generator.ts +191 -131
  487. package/src/testing/fixture-loader.ts +5 -1
  488. package/src/testing/fixture-manager.ts +129 -90
  489. package/src/testing/global-setup.ts +7 -3
  490. package/src/testing/index.ts +5 -0
  491. package/src/types/__tests__/entity-json-schema-search-text.test.ts +9 -3
  492. package/src/types/types.ts +184 -158
  493. package/src/ui/ai-api.ts +9 -7
  494. package/src/ui/ai-client.ts +61 -56
  495. package/src/ui/api.ts +727 -616
  496. package/src/ui/async-route.ts +4 -0
  497. package/src/ui/cdd-service.ts +35 -12
  498. package/src/ui/migrations-api.ts +63 -51
  499. package/src/utils/formatter.ts +7 -3
  500. package/src/utils/fs-utils.ts +5 -5
  501. package/src/utils/model.ts +4 -5
  502. package/src/utils/object-utils.ts +32 -22
  503. package/src/utils/process-utils.ts +4 -1
  504. package/src/utils/runtime-value.ts +43 -0
  505. package/src/utils/sql-parser.ts +13 -6
  506. package/src/utils/type-utils.ts +9 -7
  507. package/src/utils/utils.ts +19 -21
  508. package/src/utils/zod-error.ts +4 -2
  509. package/src/vector/chunking.ts +6 -1
  510. package/src/vector/embedding.ts +2 -1
  511. package/src/vector/types.ts +4 -2
  512. package/tsdown.api.config.ts +5 -2
  513. package/dist/ui-web/assets/index-C0m1pk6K.js +0 -177
@@ -3,15 +3,16 @@ export type StepFunction<TArgs extends unknown[], TResult> = (...args: TArgs) =>
3
3
  export type RunnableStep<TArgs extends unknown[], TResult> = {
4
4
  run: StepFunction<TArgs, Promise<TResult>>;
5
5
  };
6
+ interface StepConfig {
7
+ name: string;
8
+ }
6
9
  export type MethodNames<T, TKey extends keyof T> = T[TKey] extends (...args: infer _TArgs) => infer _TResult ? TKey : never;
7
- export type MethodArguments<T, TKey extends keyof T> = T[TKey] extends (...args: infer TArgs) => unknown ? TArgs : never;
10
+ export type MethodArguments<T, TKey extends keyof T> = T[TKey] extends (...args: infer TArgs) => infer _TResult ? TArgs : never;
8
11
  export type MethodReturnType<T, TKey extends keyof T> = T[TKey] extends (this: T, ...args: infer _TArgs) => infer TResult ? TResult : never;
9
12
  export declare class StepWrapper {
10
13
  #private;
11
14
  constructor(stepApi: StepApi);
12
- get<T, TKey extends keyof T, TArgs extends MethodArguments<T, TKey>, TResult extends MethodReturnType<T, TKey>>(config: {
13
- name: string;
14
- }, object: T, name: MethodNames<T, TKey>): RunnableStep<TArgs, TResult>;
15
+ get<T, TKey extends keyof T, TArgs extends MethodArguments<T, TKey>, TResult extends MethodReturnType<T, TKey>>(config: StepConfig, object: T, name: MethodNames<T, TKey>): RunnableStep<TArgs, TResult>;
15
16
  get<T, TKey extends keyof T, TArgs extends MethodArguments<T, TKey>, TResult extends MethodReturnType<T, TKey>>(object: T, name: MethodNames<T, TKey>): RunnableStep<TArgs, TResult>;
16
17
  define<TArgs extends unknown[], TResult>(config: {
17
18
  name: string;
@@ -20,4 +21,5 @@ export declare class StepWrapper {
20
21
  };
21
22
  sleep(name: string, duration: DurationString): Promise<void>;
22
23
  }
24
+ export {};
23
25
  //# sourceMappingURL=step-wrapper.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"step-wrapper.d.ts","sourceRoot":"","sources":["../../src/tasks/step-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG/E,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;AACzF,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI;IAC3D,GAAG,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACjE,GAAG,IAAI,EAAE,MAAM,MAAM,KAClB,MAAM,QAAQ,GACf,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACrE,GAAG,IAAI,EAAE,MAAM,KAAK,KACjB,OAAO,GACR,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACtE,IAAI,EAAE,CAAC,EACP,GAAG,IAAI,EAAE,MAAM,MAAM,KAClB,MAAM,OAAO,GACd,OAAO,GACP,KAAK,CAAC;AAEV,qBAAa,WAAW;;gBAGV,OAAO,EAAE,OAAO;IAI5B,GAAG,CACD,CAAC,EACD,IAAI,SAAS,MAAM,CAAC,EACpB,KAAK,SAAS,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EACtC,OAAO,SAAS,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,EACzC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAChG,GAAG,CACD,CAAC,EACD,IAAI,SAAS,MAAM,CAAC,EACpB,KAAK,SAAS,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EACtC,OAAO,SAAS,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,EACzC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAiCtE,MAAM,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACrC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EACxB,EAAE,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;;IASlC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc;CAG7C"}
1
+ {"version":3,"file":"step-wrapper.d.ts","sourceRoot":"","sources":["../../src/tasks/step-wrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAG/E,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC;AACzF,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,IAAI;IAC3D,GAAG,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAC5C,CAAC;AAEF,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACjE,GAAG,IAAI,EAAE,MAAM,MAAM,KAClB,MAAM,QAAQ,GACf,IAAI,GACJ,KAAK,CAAC;AAEV,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACrE,GAAG,IAAI,EAAE,MAAM,KAAK,KACjB,MAAM,QAAQ,GACf,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,MAAM,gBAAgB,CAAC,CAAC,EAAE,IAAI,SAAS,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CACtE,IAAI,EAAE,CAAC,EACP,GAAG,IAAI,EAAE,MAAM,MAAM,KAClB,MAAM,OAAO,GACd,OAAO,GACP,KAAK,CAAC;AAEV,qBAAa,WAAW;;gBAGV,OAAO,EAAE,OAAO;IAI5B,GAAG,CACD,CAAC,EACD,IAAI,SAAS,MAAM,CAAC,EACpB,KAAK,SAAS,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EACtC,OAAO,SAAS,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,EACzC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAC1F,GAAG,CACD,CAAC,EACD,IAAI,SAAS,MAAM,CAAC,EACpB,KAAK,SAAS,eAAe,CAAC,CAAC,EAAE,IAAI,CAAC,EACtC,OAAO,SAAS,gBAAgB,CAAC,CAAC,EAAE,IAAI,CAAC,EACzC,MAAM,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;IAuCtE,MAAM,CAAC,KAAK,SAAS,OAAO,EAAE,EAAE,OAAO,EACrC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EACxB,EAAE,EAAE,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC;;;IASlC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc;CAG7C"}
@@ -8,16 +8,16 @@ var init_step_wrapper = __esmMin((() => {
8
8
  constructor(stepApi) {
9
9
  this.#stepApi = stepApi;
10
10
  }
11
- get(...args) {
11
+ get(...definitionArgs) {
12
12
  let config;
13
13
  let fn;
14
- if (args.length === 2) {
15
- const [rawObject, methodName] = args;
14
+ if (definitionArgs.length === 2) {
15
+ const [rawObject, methodName] = definitionArgs;
16
16
  const method = rawObject[methodName];
17
17
  config = { name: inflection.underscore(methodName.toString()) };
18
18
  fn = (...args) => method.bind(rawObject)(...args);
19
19
  } else {
20
- const [rawConfig, rawObject, name] = args;
20
+ const [rawConfig, rawObject, name] = definitionArgs;
21
21
  const method = rawObject[name];
22
22
  config = { name: rawConfig.name ?? inflection.underscore(name.toString()) };
23
23
  fn = (...args) => method.bind(rawObject)(...args);
@@ -40,4 +40,4 @@ var init_step_wrapper = __esmMin((() => {
40
40
  init_step_wrapper();
41
41
  export { StepWrapper, init_step_wrapper };
42
42
 
43
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC13cmFwcGVyLmpzIiwibmFtZXMiOlsiI3N0ZXBBcGkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFza3Mvc3RlcC13cmFwcGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRHVyYXRpb25TdHJpbmcsIHR5cGUgU3RlcEFwaSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgU3RlcEZ1bmN0aW9uPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9ICguLi5hcmdzOiBUQXJncykgPT4gVFJlc3VsdDtcbmV4cG9ydCB0eXBlIFJ1bm5hYmxlU3RlcDxUQXJncyBleHRlbmRzIHVua25vd25bXSwgVFJlc3VsdD4gPSB7XG4gIHJ1bjogU3RlcEZ1bmN0aW9uPFRBcmdzLCBQcm9taXNlPFRSZXN1bHQ+Pjtcbn07XG5cbmV4cG9ydCB0eXBlIE1ldGhvZE5hbWVzPFQsIFRLZXkgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbVEtleV0gZXh0ZW5kcyAoXG4gIC4uLmFyZ3M6IGluZmVyIF9UQXJnc1xuKSA9PiBpbmZlciBfVFJlc3VsdFxuICA/IFRLZXlcbiAgOiBuZXZlcjtcblxuZXhwb3J0IHR5cGUgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXkgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbVEtleV0gZXh0ZW5kcyAoXG4gIC4uLmFyZ3M6IGluZmVyIFRBcmdzXG4pID0+IHVua25vd25cbiAgPyBUQXJnc1xuICA6IG5ldmVyO1xuXG5leHBvcnQgdHlwZSBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXkgZXh0ZW5kcyBrZXlvZiBUPiA9IFRbVEtleV0gZXh0ZW5kcyAoXG4gIHRoaXM6IFQsXG4gIC4uLmFyZ3M6IGluZmVyIF9UQXJnc1xuKSA9PiBpbmZlciBUUmVzdWx0XG4gID8gVFJlc3VsdFxuICA6IG5ldmVyO1xuXG5leHBvcnQgY2xhc3MgU3RlcFdyYXBwZXIge1xuICByZWFkb25seSAjc3RlcEFwaTogU3RlcEFwaTtcblxuICBjb25zdHJ1Y3RvcihzdGVwQXBpOiBTdGVwQXBpKSB7XG4gICAgdGhpcy4jc3RlcEFwaSA9IHN0ZXBBcGk7XG4gIH1cblxuICBnZXQ8XG4gICAgVCxcbiAgICBUS2V5IGV4dGVuZHMga2V5b2YgVCxcbiAgICBUQXJncyBleHRlbmRzIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5PixcbiAgICBUUmVzdWx0IGV4dGVuZHMgTWV0aG9kUmV0dXJuVHlwZTxULCBUS2V5PixcbiAgPihjb25maWc6IHsgbmFtZTogc3RyaW5nIH0sIG9iamVjdDogVCwgbmFtZTogTWV0aG9kTmFtZXM8VCwgVEtleT4pOiBSdW5uYWJsZVN0ZXA8VEFyZ3MsIFRSZXN1bHQ+O1xuICBnZXQ8XG4gICAgVCxcbiAgICBUS2V5IGV4dGVuZHMga2V5b2YgVCxcbiAgICBUQXJncyBleHRlbmRzIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5PixcbiAgICBUUmVzdWx0IGV4dGVuZHMgTWV0aG9kUmV0dXJuVHlwZTxULCBUS2V5PixcbiAgPihvYmplY3Q6IFQsIG5hbWU6IE1ldGhvZE5hbWVzPFQsIFRLZXk+KTogUnVubmFibGVTdGVwPFRBcmdzLCBUUmVzdWx0PjtcbiAgZ2V0PFxuICAgIFQsXG4gICAgVEtleSBleHRlbmRzIGtleW9mIFQsXG4gICAgVEFyZ3MgZXh0ZW5kcyBNZXRob2RBcmd1bWVudHM8VCwgVEtleT4sXG4gICAgVFJlc3VsdCBleHRlbmRzIE1ldGhvZFJldHVyblR5cGU8VCwgVEtleT4sXG4gID4oXG4gICAgLi4uYXJnczogW3sgbmFtZTogc3RyaW5nIH0sIFQsIE1ldGhvZE5hbWVzPFQsIFRLZXk+XSB8IFtULCBNZXRob2ROYW1lczxULCBUS2V5Pl1cbiAgKTogUnVubmFibGVTdGVwPFRBcmdzLCBUUmVzdWx0PiB7XG4gICAgbGV0IGNvbmZpZzogeyBuYW1lOiBzdHJpbmcgfTtcbiAgICBsZXQgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgRXhjbHVkZTxUUmVzdWx0LCBuZXZlcj4+O1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICBjb25zdCBbcmF3T2JqZWN0LCBtZXRob2ROYW1lXSA9IGFyZ3M7XG4gICAgICBjb25zdCBtZXRob2QgPSByYXdPYmplY3RbbWV0aG9kTmFtZV0gYXMgQ2FsbGFibGVGdW5jdGlvbjtcbiAgICAgIGNvbmZpZyA9IHsgbmFtZTogaW5mbGVjdGlvbi51bmRlcnNjb3JlKG1ldGhvZE5hbWUudG9TdHJpbmcoKSkgfTtcblxuICAgICAgZm4gPSAoLi4uYXJnczogVEFyZ3MpID0+IG1ldGhvZC5iaW5kKHJhd09iamVjdCkoLi4uYXJncyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFtyYXdDb25maWcsIHJhd09iamVjdCwgbmFtZV0gPSBhcmdzO1xuICAgICAgY29uc3QgbWV0aG9kID0gcmF3T2JqZWN0W25hbWVdIGFzIENhbGxhYmxlRnVuY3Rpb247XG5cbiAgICAgIGNvbmZpZyA9IHsgbmFtZTogcmF3Q29uZmlnLm5hbWUgPz8gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG5hbWUudG9TdHJpbmcoKSkgfTtcbiAgICAgIGZuID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBtZXRob2QuYmluZChyYXdPYmplY3QpKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgZGVmaW5lPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgICBjb25maWc6IHsgbmFtZTogc3RyaW5nIH0sXG4gICAgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4sXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgc2xlZXAobmFtZTogc3RyaW5nLCBkdXJhdGlvbjogRHVyYXRpb25TdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy4jc3RlcEFwaS5zbGVlcChuYW1lLCBkdXJhdGlvbik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Q0EyQmEsY0FBYixNQUF5QjtFQUN2QjtFQUVBLFlBQVksU0FBa0I7R0FDNUIsS0FBS0EsV0FBVztFQUNsQjtFQWNBLElBTUUsR0FBRyxNQUMyQjtHQUM5QixJQUFJO0dBQ0osSUFBSTtHQUVKLElBQUksS0FBSyxXQUFXLEdBQUc7SUFDckIsTUFBTSxDQUFDLFdBQVcsY0FBYztJQUNoQyxNQUFNLFNBQVMsVUFBVTtJQUN6QixTQUFTLEVBQUUsTUFBTSxXQUFXLFdBQVcsV0FBVyxTQUFTLENBQUMsRUFBRTtJQUU5RCxNQUFNLEdBQUcsU0FBZ0IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtHQUN6RCxPQUFPO0lBQ0wsTUFBTSxDQUFDLFdBQVcsV0FBVyxRQUFRO0lBQ3JDLE1BQU0sU0FBUyxVQUFVO0lBRXpCLFNBQVMsRUFBRSxNQUFNLFVBQVUsUUFBUSxXQUFXLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRTtJQUMxRSxNQUFNLEdBQUcsU0FBZ0IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtHQUN6RDtHQUVBLE9BQU8sRUFDTCxPQUFPLFNBQWtCLEdBQUcsU0FBZ0I7SUFDMUMsT0FBTyxRQUFRLElBQUksY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDO0dBQzlDLEVBQUEsQ0FBRyxLQUFLLE1BQU0sS0FBS0EsUUFBUSxFQUM3QjtFQUNGO0VBRUEsT0FDRSxRQUNBLElBQ0E7R0FDQSxPQUFPLEVBQ0wsT0FBTyxTQUFrQixHQUFHLFNBQWdCO0lBQzFDLE9BQU8sUUFBUSxJQUFJLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQztHQUM5QyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUtBLFFBQVEsRUFDN0I7RUFDRjtFQUVBLE1BQU0sTUFBYyxVQUEwQjtHQUM1QyxPQUFPLEtBQUtBLFNBQVMsTUFBTSxNQUFNLFFBQVE7RUFDM0M7Q0FDRiJ9
43
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC13cmFwcGVyLmpzIiwibmFtZXMiOlsiI3N0ZXBBcGkiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFza3Mvc3RlcC13cmFwcGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgRHVyYXRpb25TdHJpbmcsIHR5cGUgU3RlcEFwaSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcblxuZXhwb3J0IHR5cGUgU3RlcEZ1bmN0aW9uPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PiA9ICguLi5hcmdzOiBUQXJncykgPT4gVFJlc3VsdDtcbmV4cG9ydCB0eXBlIFJ1bm5hYmxlU3RlcDxUQXJncyBleHRlbmRzIHVua25vd25bXSwgVFJlc3VsdD4gPSB7XG4gIHJ1bjogU3RlcEZ1bmN0aW9uPFRBcmdzLCBQcm9taXNlPFRSZXN1bHQ+Pjtcbn07XG5cbmludGVyZmFjZSBTdGVwQ29uZmlnIHtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBNZXRob2ROYW1lczxULCBUS2V5IGV4dGVuZHMga2V5b2YgVD4gPSBUW1RLZXldIGV4dGVuZHMgKFxuICAuLi5hcmdzOiBpbmZlciBfVEFyZ3NcbikgPT4gaW5mZXIgX1RSZXN1bHRcbiAgPyBUS2V5XG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5IGV4dGVuZHMga2V5b2YgVD4gPSBUW1RLZXldIGV4dGVuZHMgKFxuICAuLi5hcmdzOiBpbmZlciBUQXJnc1xuKSA9PiBpbmZlciBfVFJlc3VsdFxuICA/IFRBcmdzXG4gIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIE1ldGhvZFJldHVyblR5cGU8VCwgVEtleSBleHRlbmRzIGtleW9mIFQ+ID0gVFtUS2V5XSBleHRlbmRzIChcbiAgdGhpczogVCxcbiAgLi4uYXJnczogaW5mZXIgX1RBcmdzXG4pID0+IGluZmVyIFRSZXN1bHRcbiAgPyBUUmVzdWx0XG4gIDogbmV2ZXI7XG5cbmV4cG9ydCBjbGFzcyBTdGVwV3JhcHBlciB7XG4gIHJlYWRvbmx5ICNzdGVwQXBpOiBTdGVwQXBpO1xuXG4gIGNvbnN0cnVjdG9yKHN0ZXBBcGk6IFN0ZXBBcGkpIHtcbiAgICB0aGlzLiNzdGVwQXBpID0gc3RlcEFwaTtcbiAgfVxuXG4gIGdldDxcbiAgICBULFxuICAgIFRLZXkgZXh0ZW5kcyBrZXlvZiBULFxuICAgIFRBcmdzIGV4dGVuZHMgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXk+LFxuICAgIFRSZXN1bHQgZXh0ZW5kcyBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXk+LFxuICA+KGNvbmZpZzogU3RlcENvbmZpZywgb2JqZWN0OiBULCBuYW1lOiBNZXRob2ROYW1lczxULCBUS2V5Pik6IFJ1bm5hYmxlU3RlcDxUQXJncywgVFJlc3VsdD47XG4gIGdldDxcbiAgICBULFxuICAgIFRLZXkgZXh0ZW5kcyBrZXlvZiBULFxuICAgIFRBcmdzIGV4dGVuZHMgTWV0aG9kQXJndW1lbnRzPFQsIFRLZXk+LFxuICAgIFRSZXN1bHQgZXh0ZW5kcyBNZXRob2RSZXR1cm5UeXBlPFQsIFRLZXk+LFxuICA+KG9iamVjdDogVCwgbmFtZTogTWV0aG9kTmFtZXM8VCwgVEtleT4pOiBSdW5uYWJsZVN0ZXA8VEFyZ3MsIFRSZXN1bHQ+O1xuICBnZXQ8XG4gICAgVCxcbiAgICBUS2V5IGV4dGVuZHMga2V5b2YgVCxcbiAgICBUQXJncyBleHRlbmRzIE1ldGhvZEFyZ3VtZW50czxULCBUS2V5PixcbiAgICBUUmVzdWx0IGV4dGVuZHMgTWV0aG9kUmV0dXJuVHlwZTxULCBUS2V5PixcbiAgPihcbiAgICAuLi5kZWZpbml0aW9uQXJnczogW1N0ZXBDb25maWcsIFQsIE1ldGhvZE5hbWVzPFQsIFRLZXk+XSB8IFtULCBNZXRob2ROYW1lczxULCBUS2V5Pl1cbiAgKTogUnVubmFibGVTdGVwPFRBcmdzLCBUUmVzdWx0PiB7XG4gICAgbGV0IGNvbmZpZzogU3RlcENvbmZpZztcbiAgICBsZXQgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgRXhjbHVkZTxUUmVzdWx0LCBuZXZlcj4+O1xuXG4gICAgaWYgKGRlZmluaXRpb25BcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgY29uc3QgW3Jhd09iamVjdCwgbWV0aG9kTmFtZV0gPSBkZWZpbml0aW9uQXJncztcbiAgICAgIGNvbnN0IG1ldGhvZCA9XG4gICAgICAgIC8qIFNBRkVUWTog7J6R7JeFIOuNsOy9lOugiOydtO2EsOyZgCDsm4ztgaztlIzroZwg7KCV7J2Y6rCAIOydtCDqsJLsnZgg7YOA7J6F7J2EIOuztOyepe2VnOuLpC4gKi8gcmF3T2JqZWN0W1xuICAgICAgICAgIG1ldGhvZE5hbWVcbiAgICAgICAgXSBhcyBDYWxsYWJsZUZ1bmN0aW9uO1xuICAgICAgY29uZmlnID0geyBuYW1lOiBpbmZsZWN0aW9uLnVuZGVyc2NvcmUobWV0aG9kTmFtZS50b1N0cmluZygpKSB9O1xuXG4gICAgICBmbiA9ICguLi5hcmdzOiBUQXJncykgPT4gbWV0aG9kLmJpbmQocmF3T2JqZWN0KSguLi5hcmdzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3Jhd0NvbmZpZywgcmF3T2JqZWN0LCBuYW1lXSA9IGRlZmluaXRpb25BcmdzO1xuICAgICAgY29uc3QgbWV0aG9kID1cbiAgICAgICAgLyogU0FGRVRZOiDsnpHsl4Ug642w7L2U66CI7J207YSw7JmAIOybjO2BrO2UjOuhnCDsoJXsnZjqsIAg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyByYXdPYmplY3RbXG4gICAgICAgICAgbmFtZVxuICAgICAgICBdIGFzIENhbGxhYmxlRnVuY3Rpb247XG5cbiAgICAgIGNvbmZpZyA9IHsgbmFtZTogcmF3Q29uZmlnLm5hbWUgPz8gaW5mbGVjdGlvbi51bmRlcnNjb3JlKG5hbWUudG9TdHJpbmcoKSkgfTtcbiAgICAgIGZuID0gKC4uLmFyZ3M6IFRBcmdzKSA9PiBtZXRob2QuYmluZChyYXdPYmplY3QpKC4uLmFyZ3MpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgZGVmaW5lPFRBcmdzIGV4dGVuZHMgdW5rbm93bltdLCBUUmVzdWx0PihcbiAgICBjb25maWc6IHsgbmFtZTogc3RyaW5nIH0sXG4gICAgZm46IFN0ZXBGdW5jdGlvbjxUQXJncywgVFJlc3VsdD4sXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBydW46ICgoc3RlcEFwaTogU3RlcEFwaSwgLi4uYXJnczogVEFyZ3MpID0+IHtcbiAgICAgICAgcmV0dXJuIHN0ZXBBcGkucnVuKGNvbmZpZywgKCkgPT4gZm4oLi4uYXJncykpO1xuICAgICAgfSkuYmluZChudWxsLCB0aGlzLiNzdGVwQXBpKSxcbiAgICB9O1xuICB9XG5cbiAgc2xlZXAobmFtZTogc3RyaW5nLCBkdXJhdGlvbjogRHVyYXRpb25TdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy4jc3RlcEFwaS5zbGVlcChuYW1lLCBkdXJhdGlvbik7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Q0ErQmEsY0FBYixNQUF5QjtFQUN2QjtFQUVBLFlBQVksU0FBa0I7R0FDNUIsS0FBS0EsV0FBVztFQUNsQjtFQWNBLElBTUUsR0FBRyxnQkFDMkI7R0FDOUIsSUFBSTtHQUNKLElBQUk7R0FFSixJQUFJLGVBQWUsV0FBVyxHQUFHO0lBQy9CLE1BQU0sQ0FBQyxXQUFXLGNBQWM7SUFDaEMsTUFBTSxTQUM0QyxVQUM5QztJQUVKLFNBQVMsRUFBRSxNQUFNLFdBQVcsV0FBVyxXQUFXLFNBQVMsQ0FBQyxFQUFFO0lBRTlELE1BQU0sR0FBRyxTQUFnQixPQUFPLEtBQUssU0FBUyxDQUFDLENBQUMsR0FBRyxJQUFJO0dBQ3pELE9BQU87SUFDTCxNQUFNLENBQUMsV0FBVyxXQUFXLFFBQVE7SUFDckMsTUFBTSxTQUM0QyxVQUM5QztJQUdKLFNBQVMsRUFBRSxNQUFNLFVBQVUsUUFBUSxXQUFXLFdBQVcsS0FBSyxTQUFTLENBQUMsRUFBRTtJQUMxRSxNQUFNLEdBQUcsU0FBZ0IsT0FBTyxLQUFLLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSTtHQUN6RDtHQUVBLE9BQU8sRUFDTCxPQUFPLFNBQWtCLEdBQUcsU0FBZ0I7SUFDMUMsT0FBTyxRQUFRLElBQUksY0FBYyxHQUFHLEdBQUcsSUFBSSxDQUFDO0dBQzlDLEVBQUEsQ0FBRyxLQUFLLE1BQU0sS0FBS0EsUUFBUSxFQUM3QjtFQUNGO0VBRUEsT0FDRSxRQUNBLElBQ0E7R0FDQSxPQUFPLEVBQ0wsT0FBTyxTQUFrQixHQUFHLFNBQWdCO0lBQzFDLE9BQU8sUUFBUSxJQUFJLGNBQWMsR0FBRyxHQUFHLElBQUksQ0FBQztHQUM5QyxFQUFBLENBQUcsS0FBSyxNQUFNLEtBQUtBLFFBQVEsRUFDN0I7RUFDRjtFQUVBLE1BQU0sTUFBYyxVQUEwQjtHQUM1QyxPQUFPLEtBQUtBLFNBQVMsTUFBTSxNQUFNLFFBQVE7RUFDM0M7Q0FDRiJ9
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-manager.d.ts","sourceRoot":"","sources":["../../src/tasks/workflow-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workflow-manager.d.ts","sourceRoot":"","sources":["../../src/tasks/workflow-manager.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { convertDomainToCategory, init_category } from "../logger/category.js";
3
+ import { init_runtime_value, isFunctionValue } from "../utils/runtime-value.js";
3
4
  import { createMockSSEFactory, init_sse } from "../stream/sse.js";
4
5
  import { Sonamu, init_sonamu } from "../api/sonamu.js";
5
6
  import { Naite, init_naite } from "../naite/naite.js";
@@ -17,6 +18,7 @@ __esmMin((() => {
17
18
  init_category();
18
19
  init_naite();
19
20
  init_sse();
21
+ init_runtime_value();
20
22
  init_step_wrapper();
21
23
  WorkflowManager = class {
22
24
  #backend;
@@ -51,10 +53,10 @@ __esmMin((() => {
51
53
  * 정의된 워크플로우 및 워크플로우에 대한 scheduled tasks를 동기화합니다.
52
54
  */
53
55
  async synchronize(workflowMap) {
54
- await Promise.allSettled(Array.from(this.#workflowsMap.entries()).filter(([key]) => !workflowMap.has(key)).flatMap(([_, workflows]) => workflows.map((workflow) => {
56
+ await Promise.allSettled(Array.from(this.#workflowsMap.entries()).filter(([key]) => !workflowMap.has(key)).flatMap(([, workflows]) => workflows.map((workflow) => {
55
57
  return Promise.allSettled([...workflow.schedules.map((schedule) => this.unscheduleTask(schedule.name)), this.unregisterWorkflow(workflow)]);
56
58
  })));
57
- await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key]) => !this.#workflowsMap.has(key)).flatMap(([_, workflows]) => workflows.map((workflow) => {
59
+ await Promise.allSettled(Array.from(workflowMap.entries()).filter(([key]) => !this.#workflowsMap.has(key)).flatMap(([, workflows]) => workflows.map((workflow) => {
58
60
  this.registerWorkflow({
59
61
  id: workflow.id,
60
62
  name: workflow.name,
@@ -69,7 +71,7 @@ __esmMin((() => {
69
71
  const previousWorkflows = this.#workflowsMap.get(key);
70
72
  assert(previousWorkflows, "previous workflows not found");
71
73
  return [key, [previousWorkflows, newWorkflows]];
72
- }).map(async ([_, [previousWorkflows, newWorkflows]]) => {
74
+ }).map(async ([, [previousWorkflows, newWorkflows]]) => {
73
75
  await Promise.allSettled(previousWorkflows.filter((prevItem) => !newWorkflows.some((newItem) => newItem.id === prevItem.id)).map((prevItem) => {
74
76
  return Promise.allSettled([...prevItem.schedules.map((schedule) => this.unscheduleTask(schedule.name)), this.unregisterWorkflow(prevItem)]);
75
77
  }));
@@ -96,7 +98,7 @@ __esmMin((() => {
96
98
  async scheduleTask(workflow, schedule$1) {
97
99
  if (!this.#worker) return;
98
100
  const task = schedule(schedule$1.expression, (async ({ name, version }, { input }) => {
99
- const inputData = await (typeof input === "function" ? Promise.resolve(input()) : Promise.resolve(input));
101
+ const inputData = await (isFunctionValue(input) ? Promise.resolve(input()) : Promise.resolve(input));
100
102
  return this.run({
101
103
  name,
102
104
  version: version ?? null
@@ -128,8 +130,12 @@ __esmMin((() => {
128
130
  const fn = async (params) => {
129
131
  const baseContext = {
130
132
  transport: "http",
131
- request: null,
132
- reply: null,
133
+ get request() {
134
+ throw new Error("HTTP request is unavailable in workflow context");
135
+ },
136
+ get reply() {
137
+ throw new Error("HTTP reply is unavailable in workflow context");
138
+ },
133
139
  headers: {},
134
140
  createSSE: (schema) => createMockSSEFactory(schema),
135
141
  naiteStore: Naite.createStore(),
@@ -187,4 +193,4 @@ __esmMin((() => {
187
193
  }))();
188
194
  export { WorkflowManager };
189
195
 
190
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5qcyIsIm5hbWVzIjpbIiNiYWNrZW5kIiwiI293IiwiI3dvcmtlciIsIiN3b3JrZmxvd3NNYXAiLCIjc2NoZWR1bGVkVGFza3MiLCJjcm9uU2NoZWR1bGUiLCJzY2hlZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQmFja2VuZFBvc3RncmVzLCBPcGVuV29ya2Zsb3cgfSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2VyIH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVSZXRyeVBvbGljeSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSdW5uYWJsZVdvcmtmbG93LFxuICB0eXBlIFNjaGVtYUlucHV0LFxuICB0eXBlIFNjaGVtYU91dHB1dCxcbiAgdHlwZSBTdGFuZGFyZFNjaGVtYVYxLFxuICB0eXBlIFN0ZXBBcGksXG4gIHR5cGUgV29ya2Zsb3dSdW5IYW5kbGUsXG4gIHR5cGUgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBzY2hlZHVsZSBhcyBjcm9uU2NoZWR1bGUgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFNjaGVkdWxlZFRhc2sgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBDb250ZXh0IH0gZnJvbSBcIi4uL2FwaS9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgY29udmVydERvbWFpblRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1NTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBFeGVjdXRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFdvcmtmbG93TWV0YWRhdGEgfSBmcm9tIFwiLi9kZWNvcmF0b3JcIjtcbmltcG9ydCB7IFN0ZXBXcmFwcGVyIH0gZnJvbSBcIi4vc3RlcC13cmFwcGVyXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya2Zsb3dPcHRpb25zIHtcbiAgLy8gd29ya2Vy7JeQ7IScIOuPmeyLnCDsi6TtlontlaAg7YOc7Iqk7YGsIOyImCwg6riw67O47J2AIDFcbiAgY29uY3VycmVuY3k/OiBudW1iZXI7XG5cbiAgLy8gd29ya2Vy7JeQ7IScIOyCrOyaqe2VoCBwdWIvc3ViIOyXrOu2gCwg6riw67O47J2AIHRydWVcbiAgdXNlUHViU3ViPzogYm9vbGVhbjtcblxuICAvLyBwdWIvc3Vi7Jy866GcIO2DnOyKpO2BrOulvCDsiJjsi6DtlojsnYQg65WMIOybjO2BrO2UjOuhnOyasCDsi6TtlonquYzsp4Ag7KeA7JewIOyLnOqwhCwg6riw67O47J2AIDUwMG1zXG4gIGxpc3RlbkRlbGF5PzogbnVtYmVyO1xufVxuXG4vLyBXb3JrZmxvdyDtlajsiJjsnZgg7YOA7J6FLCBAc29uYW11LWtpdC90YXNrc+yZgCDri6Trpbgg7KCQ7J2AIHN0ZXDsnYQg7ZWc67KIIOqwkOyLvCDtmJXtg5wuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0Z1bmN0aW9uPElucHV0LCBPdXRwdXQ+ID0gKFxuICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICBsb2dnZXI6IExvZ2dlcjtcbiAgICBpbnB1dDogSW5wdXQ7XG4gICAgc3RlcDogU3RlcFdyYXBwZXI7XG4gICAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgfT4sXG4pID0+IFByb21pc2U8T3V0cHV0PiB8IE91dHB1dDtcblxuLy8gV29ya2Zsb3frpbwg65Ox66Gd7ZWgIOuVjOulvCDsnITtlZwg7YOA7J6FXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8XG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkLFxuPiA9IE9taXQ8XG4gIFdvcmtmbG93U3BlYzxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQsIFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0Pj4sXG4gIFwidmVyc2lvblwiXG4+ICYge1xuICBpZDogc3RyaW5nO1xuICB2ZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBmdW5jdGlvbjogV29ya2Zsb3dGdW5jdGlvbjxTY2hlbWFPdXRwdXQ8VFNjaGVtYSwgSW5wdXQ+LCBPdXRwdXQ+O1xufTtcblxuZXhwb3J0IGNsYXNzIFdvcmtmbG93TWFuYWdlciB7XG4gIC8vIGJhY2tlbmQg7J247Iqk7YS07IqkXG4gIHJlYWRvbmx5ICNiYWNrZW5kOiBCYWNrZW5kUG9zdGdyZXM7XG5cbiAgLy8gT3BlbldvcmtmbG93IOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjb3c6IE9wZW5Xb3JrZmxvdztcblxuICAvLyBXb3JrZXIg7J247Iqk7YS07IqkICjsl4bsnYQg7IiYIOyeiOycvOupsCwg7J20IOuVjOuKlCDrtoTsgrDrkJwg7ISc67KEIO2ZmOqyveyXkOyEnCBEQuyXkCBwdWJsaXNo66eMIO2VnOuLpOqzoCDqsIDsoJXtlagpXG4gICN3b3JrZXI6IFdvcmtlciB8IG51bGw7XG5cbiAgLy8g7YyM7J28IOqyveuhnCAtPiDtjIzsnbzsl5Ag7KCV7J2Y65CcIOybjO2BrO2UjOuhnOyasCDrqZTtg4DrjbDsnbTthLAg66qp66GdXG4gICN3b3JrZmxvd3NNYXA6IE1hcDxzdHJpbmcsIFdvcmtmbG93TWV0YWRhdGFbXT47XG5cbiAgLy8gVGFzayDsnbTrpoQgLT4gVGFzayDsoJXrs7Qg67CPIElucHV0IOqwkiwgV29ya2Zsb3cgSURcbiAgI3NjaGVkdWxlZFRhc2tzOiBNYXA8XG4gICAgc3RyaW5nLFxuICAgIHtcbiAgICAgIHRhc2s6IFNjaGVkdWxlZFRhc2s7XG4gICAgICBpbnB1dEZuOiBFeGVjdXRhYmxlPFNjaGVtYUlucHV0PHVua25vd24sIHVua25vd24+PjtcbiAgICAgIHdvcmtmbG93SWQ6IHN0cmluZztcbiAgICB9XG4gID47XG5cbiAgLy8gQmFja2VuZFBvc3RncmVz7JeQ7IScIOyymOumrO2VmOuKlCDqsoPrk6TsnbQg7J6I7Ja07IScIEtuZXgg7Luk64Sl7IWY7J20IOyVhOuLiOudvCDshKTsoJXqsJLsnYQg64Sj7Ja07KSY7JW87ZWoLlxuICBjb25zdHJ1Y3RvcihkYkNvbmY6IEtuZXguQ29uZmlnLCBydW5NaWdyYXRpb25zOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGJhY2tlbmQgPSBuZXcgQmFja2VuZFBvc3RncmVzKGRiQ29uZiwgeyBydW5NaWdyYXRpb25zIH0pO1xuXG4gICAgdGhpcy4jYmFja2VuZCA9IGJhY2tlbmQ7XG4gICAgdGhpcy4jb3cgPSBuZXcgT3BlbldvcmtmbG93KHsgYmFja2VuZCB9KTtcbiAgICB0aGlzLiN3b3JrZXIgPSBudWxsO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzID0gbmV3IE1hcCgpO1xuICB9XG5cbiAgLy8gU29uYW11IFVJIEFQSeyXkOyEnCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJIOuqqeuhnSDsobDtmowsIOy3qOyGjCDrk7Hsl5Ag7IKs7Jqp7ZWp64uI64ukLlxuICBnZXQgYmFja2VuZCgpOiBCYWNrZW5kUG9zdGdyZXMge1xuICAgIHJldHVybiB0aGlzLiNiYWNrZW5kO1xuICB9XG5cbiAgZ2V0IHdvcmtmbG93RGVmaW5pdGlvbnMoKSB7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLnZhbHVlcygpKVxuICAgICAgLmZsYXQoKVxuICAgICAgLm1hcCgod2YpID0+ICh7XG4gICAgICAgIGlkOiB3Zi5pZCxcbiAgICAgICAgbmFtZTogd2YubmFtZSxcbiAgICAgICAgdmVyc2lvbjogd2YudmVyc2lvbixcbiAgICAgICAgc2NoZWR1bGVzOiB3Zi5zY2hlZHVsZXMubWFwKChzKSA9PiAoe1xuICAgICAgICAgIG5hbWU6IHMubmFtZSxcbiAgICAgICAgICBleHByZXNzaW9uOiBzLmV4cHJlc3Npb24sXG4gICAgICAgIH0pKSxcbiAgICAgICAgcmV0cnlQb2xpY3k6IHdmLnJldHJ5UG9saWN5ID8gc2VyaWFsaXplUmV0cnlQb2xpY3kod2YucmV0cnlQb2xpY3kpIDogdW5kZWZpbmVkLFxuICAgICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg67CPIOybjO2BrO2UjOuhnOyasOyXkCDrjIDtlZwgc2NoZWR1bGVkIHRhc2tz66W8IOuPmeq4sO2ZlO2VqeuLiOuLpC5cbiAgICovXG4gIGFzeW5jIHN5bmNocm9uaXplKHdvcmtmbG93TWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+KSB7XG4gICAgLy8gMS4g7IKt7KCc65CcIO2MjOydvOydgCDsnbzqtIQg7IKt7KCcXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiN3b3JrZmxvd3NNYXAuZW50cmllcygpKVxuICAgICAgICAuZmlsdGVyKChba2V5XSkgPT4gIXdvcmtmbG93TWFwLmhhcyhrZXkpKVxuICAgICAgICAuZmxhdE1hcCgoW18sIHdvcmtmbG93c10pID0+XG4gICAgICAgICAgd29ya2Zsb3dzLm1hcCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgICAgICAgICAuLi53b3JrZmxvdy5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHdvcmtmbG93KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyAyLiDsg4jroZwg7LaU6rCA65CcIO2MjOydvOydgCDsnbzqtIQg65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAuZmxhdE1hcCgoW18sIHdvcmtmbG93c10pID0+XG4gICAgICAgICAgd29ya2Zsb3dzLm1hcCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXb3JrZmxvdyh7XG4gICAgICAgICAgICAgIGlkOiB3b3JrZmxvdy5pZCxcbiAgICAgICAgICAgICAgbmFtZTogd29ya2Zsb3cubmFtZSxcbiAgICAgICAgICAgICAgdmVyc2lvbjogd29ya2Zsb3cudmVyc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgICBzY2hlbWE6IHdvcmtmbG93LnNjaGVtYSxcbiAgICAgICAgICAgICAgZnVuY3Rpb246IHdvcmtmbG93LmZuLFxuICAgICAgICAgICAgICByZXRyeVBvbGljeTogd29ya2Zsb3cucmV0cnlQb2xpY3ksXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgICAgd29ya2Zsb3cuc2NoZWR1bGVzLm1hcCgoc2NoZWR1bGUpID0+IHRoaXMuc2NoZWR1bGVUYXNrKHdvcmtmbG93LCBzY2hlZHVsZSkpLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKSxcbiAgICApO1xuXG4gICAgLy8gMy4g6riw7KG06rO8IOuLpOuluCDqsoPsnYQgZGlmZuy5nCDri6TsnYwsIOyCreygnCDtm4Qg7J6s65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiB0aGlzLiN3b3JrZmxvd3NNYXAuaGFzKGtleSkpXG4gICAgICAgIC5tYXA8W3N0cmluZywgW1dvcmtmbG93TWV0YWRhdGFbXSwgV29ya2Zsb3dNZXRhZGF0YVtdXV0+KChba2V5LCBuZXdXb3JrZmxvd3NdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcHJldmlvdXNXb3JrZmxvd3MgPSB0aGlzLiN3b3JrZmxvd3NNYXAuZ2V0KGtleSk7XG4gICAgICAgICAgYXNzZXJ0KHByZXZpb3VzV29ya2Zsb3dzLCBcInByZXZpb3VzIHdvcmtmbG93cyBub3QgZm91bmRcIik7XG4gICAgICAgICAgcmV0dXJuIFtrZXksIFtwcmV2aW91c1dvcmtmbG93cywgbmV3V29ya2Zsb3dzXV07XG4gICAgICAgIH0pXG4gICAgICAgIC5tYXAoYXN5bmMgKFtfLCBbcHJldmlvdXNXb3JrZmxvd3MsIG5ld1dvcmtmbG93c11dKSA9PiB7XG4gICAgICAgICAgLy8g6riw7KG0IOqyg+uTpOydhCDsgq3soJzrtoDthLAg7ZW07JW87ZWoLlxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIHByZXZpb3VzV29ya2Zsb3dzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKHByZXZJdGVtKSA9PiAhbmV3V29ya2Zsb3dzLnNvbWUoKG5ld0l0ZW0pID0+IG5ld0l0ZW0uaWQgPT09IHByZXZJdGVtLmlkKSlcbiAgICAgICAgICAgICAgLm1hcCgocHJldkl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFtcbiAgICAgICAgICAgICAgICAgIC4uLnByZXZJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnVuc2NoZWR1bGVUYXNrKHNjaGVkdWxlLm5hbWUpKSxcbiAgICAgICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHByZXZJdGVtKSxcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIC8vIOyDiOuhnCDstpTqsIDrkJwg6rKD65Ok7J2EIOuTseuhnVxuICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgICAgICAgIG5ld1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChuZXdJdGVtKSA9PiAhcHJldmlvdXNXb3JrZmxvd3Muc29tZSgocHJldkl0ZW0pID0+IHByZXZJdGVtLmlkID09PSBuZXdJdGVtLmlkKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKGFzeW5jIChuZXdJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgICAgIGlkOiBuZXdJdGVtLmlkLFxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3SXRlbS5uYW1lLFxuICAgICAgICAgICAgICAgICAgdmVyc2lvbjogbmV3SXRlbS52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgICAgICBzY2hlbWE6IG5ld0l0ZW0uc2NoZW1hLFxuICAgICAgICAgICAgICAgICAgZnVuY3Rpb246IG5ld0l0ZW0uZm4sXG4gICAgICAgICAgICAgICAgICByZXRyeVBvbGljeTogbmV3SXRlbS5yZXRyeVBvbGljeSxcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICAgICAgICBuZXdJdGVtLnNjaGVkdWxlcy5tYXAoKHNjaGVkdWxlKSA9PiB0aGlzLnNjaGVkdWxlVGFzayhuZXdJdGVtLCBzY2hlZHVsZSkpLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLiN3b3JrZmxvd3NNYXAgPSB3b3JrZmxvd01hcDtcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDsi6TtlolcbiAgcnVuPElucHV0LCBPdXRwdXQsIFRTY2hlbWEgZXh0ZW5kcyBTdGFuZGFyZFNjaGVtYVYxIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBvcHRpb25zOiBPbWl0PFdvcmtmbG93Q3JlYXRlT3B0aW9uczxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hPiwgXCJmdW5jdGlvblwiIHwgXCJzY2hlbWFcIiB8IFwiaWRcIj4sXG4gICAgaW5wdXQ6IFNjaGVtYUlucHV0PFRTY2hlbWEsIElucHV0PixcbiAgKTogUHJvbWlzZTxXb3JrZmxvd1J1bkhhbmRsZTxPdXRwdXQ+PiB7XG4gICAgcmV0dXJuIHRoaXMuI293LnJ1bldvcmtmbG93KFxuICAgICAge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgICAgaW5wdXQsXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+ulvCDrk7HroZ1cbiAgYXN5bmMgc2NoZWR1bGVUYXNrKFxuICAgIHdvcmtmbG93OiBQaWNrPFdvcmtmbG93TWV0YWRhdGEsIFwiaWRcIiB8IFwibmFtZVwiIHwgXCJ2ZXJzaW9uXCI+LFxuICAgIHNjaGVkdWxlOiBXb3JrZmxvd01ldGFkYXRhW1wic2NoZWR1bGVzXCJdW251bWJlcl0sXG4gICkge1xuICAgIC8vIFdvcmtlcuqwgCDtmZzshLHtmZTrkJwg64W465Oc7JeQ7ISc66eMIOyymOumrFxuICAgIGlmICghdGhpcy4jd29ya2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGFzayA9IGNyb25TY2hlZHVsZShcbiAgICAgIHNjaGVkdWxlLmV4cHJlc3Npb24sXG4gICAgICAoYXN5bmMgKFxuICAgICAgICB7IG5hbWUsIHZlcnNpb24gfTogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICAgICAgeyBpbnB1dCB9OiBXb3JrZmxvd01ldGFkYXRhW1wic2NoZWR1bGVzXCJdW251bWJlcl0sXG4gICAgICApID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXREYXRhID0gYXdhaXQgKHR5cGVvZiBpbnB1dCA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoaW5wdXQoKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShpbnB1dCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bih7IG5hbWUsIHZlcnNpb246IHZlcnNpb24gPz8gbnVsbCB9LCBpbnB1dERhdGEpO1xuICAgICAgfSkuYmluZCh0aGlzLCB3b3JrZmxvdywgc2NoZWR1bGUpLFxuICAgICAge1xuICAgICAgICBuYW1lOiBzY2hlZHVsZS5uYW1lLFxuICAgICAgICB0aW1lem9uZTogU29uYW11LmNvbmZpZy5hcGkudGltZXpvbmUsXG4gICAgICAgIG5vT3ZlcmxhcDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5zZXQoc2NoZWR1bGUubmFtZSwge1xuICAgICAgdGFzayxcbiAgICAgIGlucHV0Rm46IHNjaGVkdWxlLmlucHV0LFxuICAgICAgd29ya2Zsb3dJZDogd29ya2Zsb3cuaWQsXG4gICAgfSk7XG4gICAgYXdhaXQgdGFzay5zdGFydCgpO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr66W8IOykkeyngFxuICBhc3luYyB1bnNjaGVkdWxlVGFzayhuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2tJdGVtID0gdGhpcy4jc2NoZWR1bGVkVGFza3MuZ2V0KG5hbWUpO1xuICAgIGlmICghdGFza0l0ZW0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzY2hlZHVsZWQgdGFzayBub3QgZm91bmRcIiwgbmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuZGVsZXRlKG5hbWUpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suc3RvcCgpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg65Ox66Gd7ZW07JW8IO2VqC5cbiAgcmVnaXN0ZXJXb3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dDcmVhdGVPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICApOiBSdW5uYWJsZVdvcmtmbG93PFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PiB7XG4gICAgY29uc3QgZm4gPSBhc3luYyAoXG4gICAgICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICAgICAgaW5wdXQ6IFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD47XG4gICAgICAgIHN0ZXA6IFN0ZXBBcGk7XG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICB9PixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJhc2VDb250ZXh0ID0ge1xuICAgICAgICB0cmFuc3BvcnQ6IFwiaHR0cFwiIGFzIGNvbnN0LFxuICAgICAgICByZXF1ZXN0OiBudWxsLFxuICAgICAgICByZXBseTogbnVsbCxcbiAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgIGNyZWF0ZVNTRTogKHNjaGVtYTogWm9kT2JqZWN0KSA9PiBjcmVhdGVNb2NrU1NFRmFjdG9yeShzY2hlbWEpLFxuICAgICAgICBuYWl0ZVN0b3JlOiBOYWl0ZS5jcmVhdGVTdG9yZSgpLFxuICAgICAgICBsb2NhbGU6IFwiXCIsXG4gICAgICAgIHVzZXI6IG51bGwsXG4gICAgICAgIHNlc3Npb246IG51bGwsXG4gICAgICB9IGFzIHVua25vd24gYXMgQ29udGV4dDtcblxuICAgICAgY29uc3QgY29udGV4dFByb3ZpZGVyID0gU29uYW11LmNvbmZpZy50YXNrcz8uY29udGV4dFByb3ZpZGVyO1xuICAgICAgY29uc3QgY29udGV4dDogQ29udGV4dCA9IGNvbnRleHRQcm92aWRlclxuICAgICAgICA/IGF3YWl0IFByb21pc2UucmVzb2x2ZShjb250ZXh0UHJvdmlkZXIoYmFzZUNvbnRleHQpKVxuICAgICAgICA6IGJhc2VDb250ZXh0O1xuXG4gICAgICBjb25zdCBzdGVwID0gbmV3IFN0ZXBXcmFwcGVyKHBhcmFtcy5zdGVwKTtcbiAgICAgIHJldHVybiBTb25hbXUuYXN5bmNMb2NhbFN0b3JhZ2UucnVuKHsgY29udGV4dCB9LCAoKSA9PlxuICAgICAgICBvcHRpb25zLmZ1bmN0aW9uKHtcbiAgICAgICAgICBpbnB1dDogcGFyYW1zLmlucHV0LFxuICAgICAgICAgIHN0ZXAsXG4gICAgICAgICAgdmVyc2lvbjogcGFyYW1zLnZlcnNpb24sXG4gICAgICAgICAgbG9nZ2VyOiBnZXRMb2dnZXIoY29udmVydERvbWFpblRvQ2F0ZWdvcnkob3B0aW9ucy5uYW1lLCBcIndvcmtmbG93XCIpKSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICBjb25zdCB3b3JrZmxvdyA9IHRoaXMuI293LmRlZmluZVdvcmtmbG93KFxuICAgICAge1xuICAgICAgICBuYW1lOiBvcHRpb25zLm5hbWUsXG4gICAgICAgIHZlcnNpb246IG9wdGlvbnMudmVyc2lvbiA/PyB1bmRlZmluZWQsXG4gICAgICAgIHNjaGVtYTogb3B0aW9ucy5zY2hlbWEsXG4gICAgICAgIHJldHJ5UG9saWN5OiBvcHRpb25zLnJldHJ5UG9saWN5LFxuICAgICAgfSxcbiAgICAgIGZuLFxuICAgICk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSDtlbTsoJwsIOq0gOugqOuQnCDsiqTsvIDspITsnYAg67OE64+E66GcIO2VtOygnO2VtOyVvCDtlaguXG4gIGFzeW5jIHVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcIm5hbWVcIiB8IFwidmVyc2lvblwiIHwgXCJpZFwiPikge1xuICAgIHRoaXMuI293LnVucmVnaXN0ZXJXb3JrZmxvdyh3b3JrZmxvdy5uYW1lLCB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOyEpOyglSDtm4Qg7Iuc7J6RXG4gIHNldHVwV29ya2VyKG9wdGlvbnM6IFdvcmtmbG93T3B0aW9ucykge1xuICAgIHRoaXMuI3dvcmtlciA9IHRoaXMuI293Lm5ld1dvcmtlcihvcHRpb25zKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuqwgCDsnojsnLzrqbQgV29ya2Vy6rmM7KeAIOy0iOq4sO2ZlCwg7JWE64uI66m0IOuwseyXlOuTnOunjCDstIjquLDtmZRcbiAgYXN5bmMgc3RhcnRXb3JrZXIoKSB7XG4gICAgYXdhaXQgdGhpcy4jYmFja2VuZC5pbml0aWFsaXplKCk7XG4gICAgYXdhaXQgdGhpcy4jd29ya2VyPy5zdGFydCgpO1xuICB9XG5cbiAgLy8gV29ya2Vy66W8IOykkeyngFxuICBhc3luYyBzdG9wV29ya2VyKCkge1xuICAgIGF3YWl0IHRoaXMuI3dvcmtlcj8uc3RvcCgpO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr65Ok7J2EIOuqqOuRkCDspJHsp4BcbiAgYXN5bmMgc3RvcFNjaGVkdWxlcygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3NjaGVkdWxlZFRhc2tzLnZhbHVlcygpKS5tYXAoKHsgdGFzayB9KSA9PiBQcm9taXNlLnJlc29sdmUodGFzay5zdG9wKCkpKSxcbiAgICApO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr65Ok7J2EIOuqqOuRkCDsoJXrpqxcbiAgYXN5bmMgZGVzdHJveVNjaGVkdWxlcygpIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHRoaXMuI3NjaGVkdWxlZFRhc2tzLnZhbHVlcygpKS5tYXAoKHsgdGFzayB9KSA9PiBQcm9taXNlLnJlc29sdmUodGFzay5kZXN0cm95KCkpKSxcbiAgICApO1xuICAgIHRoaXMuI3NjaGVkdWxlZFRhc2tzLmNsZWFyKCk7XG4gIH1cblxuICBhc3luYyBkZXN0cm95KCkge1xuICAgIGF3YWl0IHRoaXMuc3RvcFNjaGVkdWxlcygpO1xuICAgIGF3YWl0IHRoaXMuc3RvcFdvcmtlcigpO1xuICAgIGF3YWl0IHRoaXMuZGVzdHJveVNjaGVkdWxlcygpO1xuICAgIGF3YWl0IHRoaXMuI2JhY2tlbmQuc3RvcCgpO1xuICB9XG5cbiAgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCkge1xuICAgIHJldHVybiB0aGlzLmRlc3Ryb3koKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7YUFzQnNDO2VBQ3NCO1lBQ3RCO1VBQ2M7bUJBR1I7Q0FxQy9CLGtCQUFiLE1BQTZCO0VBRTNC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
196
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya2Zsb3ctbWFuYWdlci5qcyIsIm5hbWVzIjpbIiNiYWNrZW5kIiwiI293IiwiI3dvcmtlciIsIiN3b3JrZmxvd3NNYXAiLCIjc2NoZWR1bGVkVGFza3MiLCJjcm9uU2NoZWR1bGUiLCJzY2hlZHVsZSJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YXNrcy93b3JrZmxvdy1tYW5hZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgdHlwZSBMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQmFja2VuZFBvc3RncmVzLCBPcGVuV29ya2Zsb3cgfSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3NcIjtcbmltcG9ydCB7IHR5cGUgV29ya2VyIH0gZnJvbSBcIkBzb25hbXUta2l0L3Rhc2tzXCI7XG5pbXBvcnQgeyBzZXJpYWxpemVSZXRyeVBvbGljeSB9IGZyb20gXCJAc29uYW11LWtpdC90YXNrcy9pbnRlcm5hbFwiO1xuaW1wb3J0IHtcbiAgdHlwZSBSdW5uYWJsZVdvcmtmbG93LFxuICB0eXBlIFNjaGVtYUlucHV0LFxuICB0eXBlIFNjaGVtYU91dHB1dCxcbiAgdHlwZSBTdGFuZGFyZFNjaGVtYVYxLFxuICB0eXBlIFN0ZXBBcGksXG4gIHR5cGUgV29ya2Zsb3dSdW5IYW5kbGUsXG4gIHR5cGUgV29ya2Zsb3dTcGVjLFxufSBmcm9tIFwiQHNvbmFtdS1raXQvdGFza3MvaW50ZXJuYWxcIjtcbmltcG9ydCB7IHR5cGUgS25leCB9IGZyb20gXCJrbmV4XCI7XG5pbXBvcnQgeyBzY2hlZHVsZSBhcyBjcm9uU2NoZWR1bGUgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFNjaGVkdWxlZFRhc2sgfSBmcm9tIFwibm9kZS1jcm9uXCI7XG5pbXBvcnQgeyB0eXBlIFpvZE9iamVjdCB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgdHlwZSBDb250ZXh0IH0gZnJvbSBcIi4uL2FwaS9jb250ZXh0XCI7XG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vYXBpL3NvbmFtdVwiO1xuaW1wb3J0IHsgY29udmVydERvbWFpblRvQ2F0ZWdvcnkgfSBmcm9tIFwiLi4vbG9nZ2VyL2NhdGVnb3J5XCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlTW9ja1NTRUZhY3RvcnkgfSBmcm9tIFwiLi4vc3RyZWFtL3NzZVwiO1xuaW1wb3J0IHsgdHlwZSBFeGVjdXRhYmxlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgdHlwZSBXb3JrZmxvd01ldGFkYXRhIH0gZnJvbSBcIi4vZGVjb3JhdG9yXCI7XG5pbXBvcnQgeyBTdGVwV3JhcHBlciB9IGZyb20gXCIuL3N0ZXAtd3JhcHBlclwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtmbG93T3B0aW9ucyB7XG4gIC8vIHdvcmtlcuyXkOyEnCDrj5nsi5wg7Iuk7ZaJ7ZWgIO2DnOyKpO2BrCDsiJgsIOq4sOuzuOydgCAxXG4gIGNvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8vIHdvcmtlcuyXkOyEnCDsgqzsmqntlaAgcHViL3N1YiDsl6zrtoAsIOq4sOuzuOydgCB0cnVlXG4gIHVzZVB1YlN1Yj86IGJvb2xlYW47XG5cbiAgLy8gcHViL3N1YuycvOuhnCDtg5zsiqTtgazrpbwg7IiY7Iug7ZaI7J2EIOuVjCDsm4ztgaztlIzroZzsmrAg7Iuk7ZaJ6rmM7KeAIOyngOyXsCDsi5zqsIQsIOq4sOuzuOydgCA1MDBtc1xuICBsaXN0ZW5EZWxheT86IG51bWJlcjtcbn1cblxuLy8gV29ya2Zsb3cg7ZWo7IiY7J2YIO2DgOyehSwgQHNvbmFtdS1raXQvdGFza3PsmYAg64uk66W4IOygkOydgCBzdGVw7J2EIO2VnOuyiCDqsJDsi7wg7ZiV7YOcLlxuZXhwb3J0IHR5cGUgV29ya2Zsb3dGdW5jdGlvbjxJbnB1dCwgT3V0cHV0PiA9IChcbiAgcGFyYW1zOiBSZWFkb25seTx7XG4gICAgbG9nZ2VyOiBMb2dnZXI7XG4gICAgaW5wdXQ6IElucHV0O1xuICAgIHN0ZXA6IFN0ZXBXcmFwcGVyO1xuICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gIH0+LFxuKSA9PiBQcm9taXNlPE91dHB1dD4gfCBPdXRwdXQ7XG5cbi8vIFdvcmtmbG9366W8IOuTseuhne2VoCDrlYzrpbwg7JyE7ZWcIO2DgOyehVxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDcmVhdGVPcHRpb25zPFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZCxcbj4gPSBPbWl0PFxuICBXb3JrZmxvd1NwZWM8U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0LCBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4+LFxuICBcInZlcnNpb25cIlxuPiAmIHtcbiAgaWQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nIHwgbnVsbDtcbiAgZnVuY3Rpb246IFdvcmtmbG93RnVuY3Rpb248U2NoZW1hT3V0cHV0PFRTY2hlbWEsIElucHV0PiwgT3V0cHV0Pjtcbn07XG5cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd01hbmFnZXIge1xuICAvLyBiYWNrZW5kIOyduOyKpO2EtOyKpFxuICByZWFkb25seSAjYmFja2VuZDogQmFja2VuZFBvc3RncmVzO1xuXG4gIC8vIE9wZW5Xb3JrZmxvdyDsnbjsiqTthLTsiqRcbiAgcmVhZG9ubHkgI293OiBPcGVuV29ya2Zsb3c7XG5cbiAgLy8gV29ya2VyIOyduOyKpO2EtOyKpCAo7JeG7J2EIOyImCDsnojsnLzrqbAsIOydtCDrlYzripQg67aE7IKw65CcIOyEnOuyhCDtmZjqsr3sl5DshJwgRELsl5AgcHVibGlzaOunjCDtlZzri6Tqs6Ag6rCA7KCV7ZWoKVxuICAjd29ya2VyOiBXb3JrZXIgfCBudWxsO1xuXG4gIC8vIO2MjOydvCDqsr3roZwgLT4g7YyM7J287JeQIOygleydmOuQnCDsm4ztgaztlIzroZzsmrAg66mU7YOA642w7J207YSwIOuqqeuhnVxuICAjd29ya2Zsb3dzTWFwOiBNYXA8c3RyaW5nLCBXb3JrZmxvd01ldGFkYXRhW10+O1xuXG4gIC8vIFRhc2sg7J2066aEIC0+IFRhc2sg7KCV67O0IOuwjyBJbnB1dCDqsJIsIFdvcmtmbG93IElEXG4gICNzY2hlZHVsZWRUYXNrczogTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICB0YXNrOiBTY2hlZHVsZWRUYXNrO1xuICAgICAgaW5wdXRGbjogRXhlY3V0YWJsZTxTY2hlbWFJbnB1dDx1bmtub3duLCB1bmtub3duPj47XG4gICAgICB3b3JrZmxvd0lkOiBzdHJpbmc7XG4gICAgfVxuICA+O1xuXG4gIC8vIEJhY2tlbmRQb3N0Z3Jlc+yXkOyEnCDsspjrpqztlZjripQg6rKD65Ok7J20IOyeiOyWtOyEnCBLbmV4IOy7pOuEpeyFmOydtCDslYTri4jrnbwg7ISk7KCV6rCS7J2EIOuEo+yWtOykmOyVvO2VqC5cbiAgY29uc3RydWN0b3IoZGJDb25mOiBLbmV4LkNvbmZpZywgcnVuTWlncmF0aW9uczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBiYWNrZW5kID0gbmV3IEJhY2tlbmRQb3N0Z3JlcyhkYkNvbmYsIHsgcnVuTWlncmF0aW9ucyB9KTtcblxuICAgIHRoaXMuI2JhY2tlbmQgPSBiYWNrZW5kO1xuICAgIHRoaXMuI293ID0gbmV3IE9wZW5Xb3JrZmxvdyh7IGJhY2tlbmQgfSk7XG4gICAgdGhpcy4jd29ya2VyID0gbnVsbDtcblxuICAgIHRoaXMuI3dvcmtmbG93c01hcCA9IG5ldyBNYXAoKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBVSSBBUEnsl5DshJwg7JuM7YGs7ZSM66Gc7JqwIOyLpO2WiSDrqqnroZ0g7KGw7ZqMLCDst6jshowg65Ox7JeQIOyCrOyaqe2VqeuLiOuLpC5cbiAgZ2V0IGJhY2tlbmQoKTogQmFja2VuZFBvc3RncmVzIHtcbiAgICByZXR1cm4gdGhpcy4jYmFja2VuZDtcbiAgfVxuXG4gIGdldCB3b3JrZmxvd0RlZmluaXRpb25zKCkge1xuICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuI3dvcmtmbG93c01hcC52YWx1ZXMoKSlcbiAgICAgIC5mbGF0KClcbiAgICAgIC5tYXAoKHdmKSA9PiAoe1xuICAgICAgICBpZDogd2YuaWQsXG4gICAgICAgIG5hbWU6IHdmLm5hbWUsXG4gICAgICAgIHZlcnNpb246IHdmLnZlcnNpb24sXG4gICAgICAgIHNjaGVkdWxlczogd2Yuc2NoZWR1bGVzLm1hcCgocykgPT4gKHtcbiAgICAgICAgICBuYW1lOiBzLm5hbWUsXG4gICAgICAgICAgZXhwcmVzc2lvbjogcy5leHByZXNzaW9uLFxuICAgICAgICB9KSksXG4gICAgICAgIHJldHJ5UG9saWN5OiB3Zi5yZXRyeVBvbGljeSA/IHNlcmlhbGl6ZVJldHJ5UG9saWN5KHdmLnJldHJ5UG9saWN5KSA6IHVuZGVmaW5lZCxcbiAgICAgIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDsoJXsnZjrkJwg7JuM7YGs7ZSM66Gc7JqwIOuwjyDsm4ztgaztlIzroZzsmrDsl5Ag64yA7ZWcIHNjaGVkdWxlZCB0YXNrc+ulvCDrj5nquLDtmZTtlanri4jri6QuXG4gICAqL1xuICBhc3luYyBzeW5jaHJvbml6ZSh3b3JrZmxvd01hcDogTWFwPHN0cmluZywgV29ya2Zsb3dNZXRhZGF0YVtdPikge1xuICAgIC8vIDEuIOyCreygnOuQnCDtjIzsnbzsnYAg7J286rSEIOyCreygnFxuICAgIGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcbiAgICAgIEFycmF5LmZyb20odGhpcy4jd29ya2Zsb3dzTWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+ICF3b3JrZmxvd01hcC5oYXMoa2V5KSlcbiAgICAgICAgLmZsYXRNYXAoKFssIHdvcmtmbG93c10pID0+XG4gICAgICAgICAgd29ya2Zsb3dzLm1hcCgod29ya2Zsb3cpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbFNldHRsZWQoW1xuICAgICAgICAgICAgICAuLi53b3JrZmxvdy5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgIHRoaXMudW5yZWdpc3RlcldvcmtmbG93KHdvcmtmbG93KSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyAyLiDsg4jroZwg7LaU6rCA65CcIO2MjOydvOydgCDsnbzqtIQg65Ox66GdXG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh3b3JrZmxvd01hcC5lbnRyaWVzKCkpXG4gICAgICAgIC5maWx0ZXIoKFtrZXldKSA9PiAhdGhpcy4jd29ya2Zsb3dzTWFwLmhhcyhrZXkpKVxuICAgICAgICAuZmxhdE1hcCgoWywgd29ya2Zsb3dzXSkgPT5cbiAgICAgICAgICB3b3JrZmxvd3MubWFwKCh3b3JrZmxvdykgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlcldvcmtmbG93KHtcbiAgICAgICAgICAgICAgaWQ6IHdvcmtmbG93LmlkLFxuICAgICAgICAgICAgICBuYW1lOiB3b3JrZmxvdy5uYW1lLFxuICAgICAgICAgICAgICB2ZXJzaW9uOiB3b3JrZmxvdy52ZXJzaW9uID8/IG51bGwsXG4gICAgICAgICAgICAgIHNjaGVtYTogd29ya2Zsb3cuc2NoZW1hLFxuICAgICAgICAgICAgICBmdW5jdGlvbjogd29ya2Zsb3cuZm4sXG4gICAgICAgICAgICAgIHJldHJ5UG9saWN5OiB3b3JrZmxvdy5yZXRyeVBvbGljeSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICB3b3JrZmxvdy5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sod29ya2Zsb3csIHNjaGVkdWxlKSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pLFxuICAgICAgICApLFxuICAgICk7XG5cbiAgICAvLyAzLiDquLDsobTqs7wg64uk66W4IOqyg+ydhCBkaWZm7LmcIOuLpOydjCwg7IKt7KCcIO2bhCDsnqzrk7HroZ1cbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICBBcnJheS5mcm9tKHdvcmtmbG93TWFwLmVudHJpZXMoKSlcbiAgICAgICAgLmZpbHRlcigoW2tleV0pID0+IHRoaXMuI3dvcmtmbG93c01hcC5oYXMoa2V5KSlcbiAgICAgICAgLm1hcDxbc3RyaW5nLCBbV29ya2Zsb3dNZXRhZGF0YVtdLCBXb3JrZmxvd01ldGFkYXRhW11dXT4oKFtrZXksIG5ld1dvcmtmbG93c10pID0+IHtcbiAgICAgICAgICBjb25zdCBwcmV2aW91c1dvcmtmbG93cyA9IHRoaXMuI3dvcmtmbG93c01hcC5nZXQoa2V5KTtcbiAgICAgICAgICBhc3NlcnQocHJldmlvdXNXb3JrZmxvd3MsIFwicHJldmlvdXMgd29ya2Zsb3dzIG5vdCBmb3VuZFwiKTtcbiAgICAgICAgICByZXR1cm4gW2tleSwgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXTtcbiAgICAgICAgfSlcbiAgICAgICAgLm1hcChhc3luYyAoWywgW3ByZXZpb3VzV29ya2Zsb3dzLCBuZXdXb3JrZmxvd3NdXSkgPT4ge1xuICAgICAgICAgIC8vIOq4sOyhtCDqsoPrk6TsnYQg7IKt7KCc67aA7YSwIO2VtOyVvO2VqC5cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBwcmV2aW91c1dvcmtmbG93c1xuICAgICAgICAgICAgICAuZmlsdGVyKChwcmV2SXRlbSkgPT4gIW5ld1dvcmtmbG93cy5zb21lKChuZXdJdGVtKSA9PiBuZXdJdGVtLmlkID09PSBwcmV2SXRlbS5pZCkpXG4gICAgICAgICAgICAgIC5tYXAoKHByZXZJdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChbXG4gICAgICAgICAgICAgICAgICAuLi5wcmV2SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy51bnNjaGVkdWxlVGFzayhzY2hlZHVsZS5uYW1lKSksXG4gICAgICAgICAgICAgICAgICB0aGlzLnVucmVnaXN0ZXJXb3JrZmxvdyhwcmV2SXRlbSksXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyDsg4jroZwg7LaU6rCA65CcIOqyg+uTpOydhCDrk7HroZ1cbiAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoXG4gICAgICAgICAgICBuZXdXb3JrZmxvd3NcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAobmV3SXRlbSkgPT4gIXByZXZpb3VzV29ya2Zsb3dzLnNvbWUoKHByZXZJdGVtKSA9PiBwcmV2SXRlbS5pZCA9PT0gbmV3SXRlbS5pZCksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChhc3luYyAobmV3SXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJXb3JrZmxvdyh7XG4gICAgICAgICAgICAgICAgICBpZDogbmV3SXRlbS5pZCxcbiAgICAgICAgICAgICAgICAgIG5hbWU6IG5ld0l0ZW0ubmFtZSxcbiAgICAgICAgICAgICAgICAgIHZlcnNpb246IG5ld0l0ZW0udmVyc2lvbiA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgc2NoZW1hOiBuZXdJdGVtLnNjaGVtYSxcbiAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uOiBuZXdJdGVtLmZuLFxuICAgICAgICAgICAgICAgICAgcmV0cnlQb2xpY3k6IG5ld0l0ZW0ucmV0cnlQb2xpY3ksXG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgICAgICAgICAgICAgbmV3SXRlbS5zY2hlZHVsZXMubWFwKChzY2hlZHVsZSkgPT4gdGhpcy5zY2hlZHVsZVRhc2sobmV3SXRlbSwgc2NoZWR1bGUpKSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICApO1xuXG4gICAgdGhpcy4jd29ya2Zsb3dzTWFwID0gd29ya2Zsb3dNYXA7XG4gIH1cblxuICAvLyDsm4ztgaztlIzroZzsmrDrpbwg7Iuk7ZaJXG4gIHJ1bjxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogT21pdDxXb3JrZmxvd0NyZWF0ZU9wdGlvbnM8SW5wdXQsIE91dHB1dCwgVFNjaGVtYT4sIFwiZnVuY3Rpb25cIiB8IFwic2NoZW1hXCIgfCBcImlkXCI+LFxuICAgIGlucHV0OiBTY2hlbWFJbnB1dDxUU2NoZW1hLCBJbnB1dD4sXG4gICk6IFByb21pc2U8V29ya2Zsb3dSdW5IYW5kbGU8T3V0cHV0Pj4ge1xuICAgIHJldHVybiB0aGlzLiNvdy5ydW5Xb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICAgIGlucHV0LFxuICAgICk7XG4gIH1cblxuICAvLyBjcm9uIHRhc2vrpbwg65Ox66GdXG4gIGFzeW5jIHNjaGVkdWxlVGFzayhcbiAgICB3b3JrZmxvdzogUGljazxXb3JrZmxvd01ldGFkYXRhLCBcImlkXCIgfCBcIm5hbWVcIiB8IFwidmVyc2lvblwiPixcbiAgICBzY2hlZHVsZTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICApIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2sgPSBjcm9uU2NoZWR1bGUoXG4gICAgICBzY2hlZHVsZS5leHByZXNzaW9uLFxuICAgICAgKGFzeW5jIChcbiAgICAgICAgeyBuYW1lLCB2ZXJzaW9uIH06IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIj4sXG4gICAgICAgIHsgaW5wdXQgfTogV29ya2Zsb3dNZXRhZGF0YVtcInNjaGVkdWxlc1wiXVtudW1iZXJdLFxuICAgICAgKSA9PiB7XG4gICAgICAgIGNvbnN0IGlucHV0RGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uVmFsdWUoaW5wdXQpXG4gICAgICAgICAgPyBQcm9taXNlLnJlc29sdmUoaW5wdXQoKSlcbiAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZShpbnB1dCkpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnJ1bih7IG5hbWUsIHZlcnNpb246IHZlcnNpb24gPz8gbnVsbCB9LCBpbnB1dERhdGEpO1xuICAgICAgfSkuYmluZCh0aGlzLCB3b3JrZmxvdywgc2NoZWR1bGUpLFxuICAgICAge1xuICAgICAgICBuYW1lOiBzY2hlZHVsZS5uYW1lLFxuICAgICAgICB0aW1lem9uZTogU29uYW11LmNvbmZpZy5hcGkudGltZXpvbmUsXG4gICAgICAgIG5vT3ZlcmxhcDogZmFsc2UsXG4gICAgICB9LFxuICAgICk7XG5cbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5zZXQoc2NoZWR1bGUubmFtZSwge1xuICAgICAgdGFzayxcbiAgICAgIGlucHV0Rm46IHNjaGVkdWxlLmlucHV0LFxuICAgICAgd29ya2Zsb3dJZDogd29ya2Zsb3cuaWQsXG4gICAgfSk7XG4gICAgYXdhaXQgdGFzay5zdGFydCgpO1xuICB9XG5cbiAgLy8gY3JvbiB0YXNr66W8IOykkeyngFxuICBhc3luYyB1bnNjaGVkdWxlVGFzayhuYW1lOiBzdHJpbmcpIHtcbiAgICAvLyBXb3JrZXLqsIAg7Zmc7ISx7ZmU65CcIOuFuOuTnOyXkOyEnOunjCDsspjrpqxcbiAgICBpZiAoIXRoaXMuI3dvcmtlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRhc2tJdGVtID0gdGhpcy4jc2NoZWR1bGVkVGFza3MuZ2V0KG5hbWUpO1xuICAgIGlmICghdGFza0l0ZW0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCJzY2hlZHVsZWQgdGFzayBub3QgZm91bmRcIiwgbmFtZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy4jc2NoZWR1bGVkVGFza3MuZGVsZXRlKG5hbWUpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suc3RvcCgpO1xuICAgIGF3YWl0IHRhc2tJdGVtLnRhc2suZGVzdHJveSgpO1xuICB9XG5cbiAgLy8g7JuM7YGs7ZSM66Gc7Jqw66W8IOuTseuhnSwg6rSA66Co65CcIOyKpOy8gOykhOydgCDrs4Trj4TroZwg65Ox66Gd7ZW07JW8IO2VqC5cbiAgcmVnaXN0ZXJXb3JrZmxvdzxJbnB1dCwgT3V0cHV0LCBUU2NoZW1hIGV4dGVuZHMgU3RhbmRhcmRTY2hlbWFWMSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgb3B0aW9uczogV29ya2Zsb3dDcmVhdGVPcHRpb25zPElucHV0LCBPdXRwdXQsIFRTY2hlbWE+LFxuICApOiBSdW5uYWJsZVdvcmtmbG93PFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD4sIE91dHB1dCwgU2NoZW1hSW5wdXQ8VFNjaGVtYSwgSW5wdXQ+PiB7XG4gICAgY29uc3QgZm4gPSBhc3luYyAoXG4gICAgICBwYXJhbXM6IFJlYWRvbmx5PHtcbiAgICAgICAgaW5wdXQ6IFNjaGVtYU91dHB1dDxUU2NoZW1hLCBJbnB1dD47XG4gICAgICAgIHN0ZXA6IFN0ZXBBcGk7XG4gICAgICAgIHZlcnNpb246IHN0cmluZyB8IG51bGw7XG4gICAgICB9PixcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IGJhc2VDb250ZXh0OiBDb250ZXh0ID0ge1xuICAgICAgICB0cmFuc3BvcnQ6IFwiaHR0cFwiIGFzIGNvbnN0LFxuICAgICAgICAvLyDsm4ztgaztlIzroZzsmrDsl5DripQgSFRUUCDsmpTssq3snbQg7JeG7Jy866+A66GcIOyemOuqu+uQnCDsoJHqt7zsnYQg7KaJ7IucIOuTnOufrOuDheuLiOuLpC5cbiAgICAgICAgZ2V0IHJlcXVlc3QoKTogQ29udGV4dFtcInJlcXVlc3RcIl0ge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkhUVFAgcmVxdWVzdCBpcyB1bmF2YWlsYWJsZSBpbiB3b3JrZmxvdyBjb250ZXh0XCIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgcmVwbHkoKTogQ29udGV4dFtcInJlcGx5XCJdIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJIVFRQIHJlcGx5IGlzIHVuYXZhaWxhYmxlIGluIHdvcmtmbG93IGNvbnRleHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICBjcmVhdGVTU0U6IDxUIGV4dGVuZHMgWm9kT2JqZWN0PihzY2hlbWE6IFQpID0+IGNyZWF0ZU1vY2tTU0VGYWN0b3J5KHNjaGVtYSksXG4gICAgICAgIG5haXRlU3RvcmU6IE5haXRlLmNyZWF0ZVN0b3JlKCksXG4gICAgICAgIGxvY2FsZTogXCJcIixcbiAgICAgICAgdXNlcjogbnVsbCxcbiAgICAgICAgc2Vzc2lvbjogbnVsbCxcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IGNvbnRleHRQcm92aWRlciA9IFNvbmFtdS5jb25maWcudGFza3M/LmNvbnRleHRQcm92aWRlcjtcbiAgICAgIGNvbnN0IGNvbnRleHQ6IENvbnRleHQgPSBjb250ZXh0UHJvdmlkZXJcbiAgICAgICAgPyBhd2FpdCBQcm9taXNlLnJlc29sdmUoY29udGV4dFByb3ZpZGVyKGJhc2VDb250ZXh0KSlcbiAgICAgICAgOiBiYXNlQ29udGV4dDtcblxuICAgICAgY29uc3Qgc3RlcCA9IG5ldyBTdGVwV3JhcHBlcihwYXJhbXMuc3RlcCk7XG4gICAgICByZXR1cm4gU29uYW11LmFzeW5jTG9jYWxTdG9yYWdlLnJ1bih7IGNvbnRleHQgfSwgKCkgPT5cbiAgICAgICAgb3B0aW9ucy5mdW5jdGlvbih7XG4gICAgICAgICAgaW5wdXQ6IHBhcmFtcy5pbnB1dCxcbiAgICAgICAgICBzdGVwLFxuICAgICAgICAgIHZlcnNpb246IHBhcmFtcy52ZXJzaW9uLFxuICAgICAgICAgIGxvZ2dlcjogZ2V0TG9nZ2VyKGNvbnZlcnREb21haW5Ub0NhdGVnb3J5KG9wdGlvbnMubmFtZSwgXCJ3b3JrZmxvd1wiKSksXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3cgPSB0aGlzLiNvdy5kZWZpbmVXb3JrZmxvdyhcbiAgICAgIHtcbiAgICAgICAgbmFtZTogb3B0aW9ucy5uYW1lLFxuICAgICAgICB2ZXJzaW9uOiBvcHRpb25zLnZlcnNpb24gPz8gdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IG9wdGlvbnMuc2NoZW1hLFxuICAgICAgICByZXRyeVBvbGljeTogb3B0aW9ucy5yZXRyeVBvbGljeSxcbiAgICAgIH0sXG4gICAgICBmbixcbiAgICApO1xuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxuXG4gIC8vIOybjO2BrO2UjOuhnOyasOulvCDrk7HroZ0g7ZW07KCcLCDqtIDroKjrkJwg7Iqk7LyA7KSE7J2AIOuzhOuPhOuhnCDtlbTsoJztlbTslbwg7ZWoLlxuICBhc3luYyB1bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3c6IFBpY2s8V29ya2Zsb3dNZXRhZGF0YSwgXCJuYW1lXCIgfCBcInZlcnNpb25cIiB8IFwiaWRcIj4pIHtcbiAgICB0aGlzLiNvdy51bnJlZ2lzdGVyV29ya2Zsb3cod29ya2Zsb3cubmFtZSwgd29ya2Zsb3cudmVyc2lvbiA/PyBudWxsKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDshKTsoJUg7ZuEIOyLnOyekVxuICBzZXR1cFdvcmtlcihvcHRpb25zOiBXb3JrZmxvd09wdGlvbnMpIHtcbiAgICB0aGlzLiN3b3JrZXIgPSB0aGlzLiNvdy5uZXdXb3JrZXIob3B0aW9ucyk7XG4gIH1cblxuICAvLyBXb3JrZXLqsIAg7J6I7Jy866m0IFdvcmtlcuq5jOyngCDstIjquLDtmZQsIOyVhOuLiOuptCDrsLHsl5Trk5zrp4wg7LSI6riw7ZmUXG4gIGFzeW5jIHN0YXJ0V29ya2VyKCkge1xuICAgIGF3YWl0IHRoaXMuI2JhY2tlbmQuaW5pdGlhbGl6ZSgpO1xuICAgIGF3YWl0IHRoaXMuI3dvcmtlcj8uc3RhcnQoKTtcbiAgfVxuXG4gIC8vIFdvcmtlcuulvCDspJHsp4BcbiAgYXN5bmMgc3RvcFdvcmtlcigpIHtcbiAgICBhd2FpdCB0aGlzLiN3b3JrZXI/LnN0b3AoKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KSR7KeAXG4gIGFzeW5jIHN0b3BTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suc3RvcCgpKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIGNyb24gdGFza+uTpOydhCDrqqjrkZAg7KCV66asXG4gIGFzeW5jIGRlc3Ryb3lTY2hlZHVsZXMoKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuICAgICAgQXJyYXkuZnJvbSh0aGlzLiNzY2hlZHVsZWRUYXNrcy52YWx1ZXMoKSkubWFwKCh7IHRhc2sgfSkgPT4gUHJvbWlzZS5yZXNvbHZlKHRhc2suZGVzdHJveSgpKSksXG4gICAgKTtcbiAgICB0aGlzLiNzY2hlZHVsZWRUYXNrcy5jbGVhcigpO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveSgpIHtcbiAgICBhd2FpdCB0aGlzLnN0b3BTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLnN0b3BXb3JrZXIoKTtcbiAgICBhd2FpdCB0aGlzLmRlc3Ryb3lTY2hlZHVsZXMoKTtcbiAgICBhd2FpdCB0aGlzLiNiYWNrZW5kLnN0b3AoKTtcbiAgfVxuXG4gIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcbiAgICByZXR1cm4gdGhpcy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OzthQXNCc0M7ZUFDc0I7WUFDdEI7VUFDYztvQkFFSTttQkFFWjtDQXFDL0Isa0JBQWIsTUFBNkI7RUFFM0I7RUFHQTtFQUdBO0VBR0E7RUFHQTtFQVVBLFlBQVksUUFBcUIsZ0JBQXlCLE1BQU07R0FDOUQsTUFBTSxVQUFVLElBQUksZ0JBQWdCLFFBQVEsRUFBRSxjQUFjLENBQUM7R0FFN0QsS0FBS0EsV0FBVztHQUNoQixLQUFLQyxNQUFNLElBQUksYUFBYSxFQUFFLFFBQVEsQ0FBQztHQUN2QyxLQUFLQyxVQUFVO0dBRWYsS0FBS0MsZ0NBQWdCLElBQUksSUFBSTtHQUM3QixLQUFLQyxrQ0FBa0IsSUFBSSxJQUFJO0VBQ2pDO0VBR0EsSUFBSSxVQUEyQjtHQUM3QixPQUFPLEtBQUtKO0VBQ2Q7RUFFQSxJQUFJLHNCQUFzQjtHQUN4QixPQUFPLE1BQU0sS0FBSyxLQUFLRyxjQUFjLE9BQU8sQ0FBQyxDQUFDLENBQzNDLEtBQUssQ0FBQyxDQUNOLEtBQUssUUFBUTtJQUNaLElBQUksR0FBRztJQUNQLE1BQU0sR0FBRztJQUNULFNBQVMsR0FBRztJQUNaLFdBQVcsR0FBRyxVQUFVLEtBQUssT0FBTztLQUNsQyxNQUFNLEVBQUU7S0FDUixZQUFZLEVBQUU7SUFDaEIsRUFBRTtJQUNGLGFBQWEsR0FBRyxjQUFjLHFC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
@@ -1,4 +1,4 @@
1
- import z from "zod";
1
+ import { z } from "zod";
2
2
  import { type EntityPropNode, type RenderingNode } from "../types/types";
3
3
  /**
4
4
  * 엔티티의 특정 subset을 RenderingNode로 변환합니다.
@@ -1 +1 @@
1
- {"version":3,"file":"entity-converter.d.ts","sourceRoot":"","sources":["../../src/template/entity-converter.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,KAAK,CAAC;AAKpB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzE;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyDhG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsCvF"}
1
+ {"version":3,"file":"entity-converter.d.ts","sourceRoot":"","sources":["../../src/template/entity-converter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGzE;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4DhG;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAsCvF"}
@@ -3,7 +3,7 @@ import { SD, init_sd } from "../dict/sd.js";
3
3
  import { ServiceUnavailableException, init_so_exceptions } from "../exceptions/so-exceptions.js";
4
4
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
5
5
  import { init_zod_converter, propToZodType, zodTypeToRenderingNode } from "./zod-converter.js";
6
- import z from "zod";
6
+ import { z } from "zod";
7
7
  import assert from "assert";
8
8
  //#region src/template/entity-converter.ts
9
9
  /**
@@ -82,4 +82,4 @@ var init_entity_converter = __esmMin((() => {
82
82
  init_entity_converter();
83
83
  export { getColumnsNode, init_entity_converter, propNodeToZodType };
84
84
 
85
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvZW50aXR5LWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IHogZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBTRCB9IGZyb20gXCIuLi9kaWN0L3NkXCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uIH0gZnJvbSBcIi4uL2V4Y2VwdGlvbnMvc28tZXhjZXB0aW9uc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlQcm9wTm9kZSwgdHlwZSBSZW5kZXJpbmdOb2RlIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBwcm9wVG9ab2RUeXBlLCB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIH0gZnJvbSBcIi4vem9kLWNvbnZlcnRlclwiO1xuXG4vKipcbiAqIOyXlO2LsO2LsOydmCDtirnsoJUgc3Vic2V07J2EIFJlbmRlcmluZ05vZGXroZwg67OA7ZmY7ZWp64uI64ukLlxuICogc3Vic2V07J2YIO2VhOuTnOuTpOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VnCDtm4QgVUkg66CM642U66eB7JqpIOuFuOuTnOuhnCDrp4zrk63ri4jri6QuXG4gKiBvYmplY3TsmYAgYXJyYXnsnZgg6rK97JqwIOyggeygiO2VnCBwaWNrIO2VhOuTnOulvCDsnpDrj5nsnLzroZwg7ISg7YOd7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Q29sdW1uc05vZGUoZW50aXR5SWQ6IHN0cmluZywgc3Vic2V0S2V5OiBzdHJpbmcpOiBQcm9taXNlPFJlbmRlcmluZ05vZGU+IHtcbiAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICBjb25zdCBzdWJzZXREZWYgPSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuICBpZiAoc3Vic2V0RGVmID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgU2VydmljZVVuYXZhaWxhYmxlRXhjZXB0aW9uKFNEKFwic29uYW11LmVycm9yLnN1YnNldE5vdEZvdW5kXCIpKHN1YnNldEtleSkpO1xuICB9XG4gIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoc3Vic2V0RGVmKTtcbiAgY29uc3Qgcm9vdFByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICB9O1xuXG4gIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIHpvZCDsiqTtgqTrp4jrpbwg66Gc65Oc7ZWgIOuVjCDsgqzsmqntlZjripQg7YOA7J6FXG4gIGNvbnN0IGNvbHVtbnNab2RUeXBlID0gKGF3YWl0IHByb3BOb2RlVG9ab2RUeXBlKHJvb3RQcm9wTm9kZSkpIGFzIHouWm9kT2JqZWN0PGFueT47XG5cbiAgY29uc3QgY29sdW1uc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGNvbHVtbnNab2RUeXBlKTtcbiAgYXNzZXJ0KGNvbHVtbnNOb2RlLmNoaWxkcmVuICE9PSB1bmRlZmluZWQsIFwiY29sdW1uc05vZGUuY2hpbGRyZW4gaXMgdW5kZWZpbmVkXCIpO1xuICBjb2x1bW5zTm9kZS5jaGlsZHJlbiA9IGNvbHVtbnNOb2RlLmNoaWxkcmVuLm1hcCgoY2hpbGQpID0+IHtcbiAgICBpZiAoY2hpbGQucmVuZGVyVHlwZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgYXNzZXJ0KGNoaWxkLmNoaWxkcmVuICE9PSB1bmRlZmluZWQsIFwiY2hpbGQuY2hpbGRyZW4gaXMgdW5kZWZpbmVkXCIpO1xuICAgICAgY29uc3QgcGlja2VkQ29sID0gY2hpbGQuY2hpbGRyZW4uZmluZCgoY2MpID0+IFtcInRpdGxlXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhjYy5uYW1lKSk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3QtcGlja1wiLFxuICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgcGlja2VkOiBwaWNrZWRDb2wubmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBjaGlsZC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiZcbiAgICAgIGNoaWxkLmVsZW1lbnQgJiZcbiAgICAgIGNoaWxkLmVsZW1lbnQucmVuZGVyVHlwZSA9PT0gXCJvYmplY3RcIlxuICAgICkge1xuICAgICAgY29uc3QgcGlja2VkQ29sID0gY2hpbGQuZWxlbWVudD8uY2hpbGRyZW4/LmZpbmQoKGNjKSA9PiBbXCJ0aXRsZVwiLCBcIm5hbWVcIl0uaW5jbHVkZXMoY2MubmFtZSkpO1xuICAgICAgaWYgKHBpY2tlZENvbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNoaWxkLFxuICAgICAgICAgIGVsZW1lbnQ6IHtcbiAgICAgICAgICAgIC4uLmNoaWxkLmVsZW1lbnQsXG4gICAgICAgICAgICByZW5kZXJUeXBlOiBcIm9iamVjdC1waWNrXCIsXG4gICAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgICAgcGlja2VkOiBwaWNrZWRDb2wubmFtZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcblxuICByZXR1cm4gY29sdW1uc05vZGU7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDshLgg6rCA7KeAIG5vZGVUeXBl7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZShwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwicGxhaW5cIikge1xuICAgIHJldHVybiBwcm9wVG9ab2RUeXBlKHByb3BOb2RlLnByb3ApO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcImFycmF5XCIpIHtcbiAgICBpZiAocHJvcE5vZGUucHJvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcbiAgICB9IGVsc2UgaWYgKHByb3BOb2RlLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGF3YWl0IHByb3BOb2RlVG9ab2RUeXBlKHtcbiAgICAgICAgICAuLi5wcm9wTm9kZSxcbiAgICAgICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgfSlcbiAgICAgICkuYXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaW5uZXJUeXBlID0gYXdhaXQgcHJvcFRvWm9kVHlwZShwcm9wTm9kZS5wcm9wKTtcbiAgICAgIGlmIChwcm9wTm9kZS5wcm9wLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiB6LmFycmF5KGlubmVyVHlwZSkubnVsbGFibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB6LmFycmF5KGlubmVyVHlwZSk7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgY29uc3QgZW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW4ubWFwKGFzeW5jIChjaGlsZFByb3BOb2RlKSA9PiB7XG4gICAgICAgIGFzc2VydChjaGlsZFByb3BOb2RlLnByb3A/Lm5hbWUgIT09IHVuZGVmaW5lZCwgXCJjaGlsZFByb3BOb2RlLnByb3AubmFtZSBpcyB1bmRlZmluZWRcIik7XG4gICAgICAgIHJldHVybiBbY2hpbGRQcm9wTm9kZS5wcm9wLm5hbWUsIGF3YWl0IHByb3BOb2RlVG9ab2RUeXBlKGNoaWxkUHJvcE5vZGUpXSBhcyBjb25zdDtcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgb2JqID0gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpO1xuXG4gICAgaWYgKHByb3BOb2RlLnByb3A/Lm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gei5vYmplY3Qob2JqKS5udWxsYWJsZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gei5vYmplY3Qob2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgRXJyb3I7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQWVBLGVBQXNCLGVBQWUsVUFBa0IsV0FBMkM7Q0FDaEcsTUFBTSxTQUFTLGNBQWMsSUFBSSxRQUFRO0NBQ3pDLE1BQU0sWUFBWSxPQUFPLFFBQVE7Q0FDakMsSUFBSSxjQUFjLFFBQ2hCLE1BQU0sSUFBSSw0QkFBNEIsR0FBRyw2QkFBNkIsQ0FBQyxDQUFDLFNBQVMsQ0FBQztDQVdwRixNQUFNLGNBQWMsdUJBQXVCLE1BRmIsa0JBQWtCO0VBTDlDLFVBQVU7RUFDVixVQUhnQixPQUFPLHNCQUFzQixTQUduQztDQUlvQyxDQUFZLENBRUg7Q0FDekQsT0FBTyxZQUFZLGFBQWEsUUFBVyxtQ0FBbUM7Q0FDOUUsWUFBWSxXQUFXLFlBQVksU0FBUyxLQUFLLFVBQVU7RUFDekQsSUFBSSxNQUFNLGVBQWUsVUFBVTtHQUNqQyxPQUFPLE1BQU0sYUFBYSxRQUFXLDZCQUE2QjtHQUNsRSxNQUFNLFlBQVksTUFBTSxTQUFTLE1BQU0sT0FBTyxDQUFDLFNBQVMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztHQUNqRixJQUFJLFdBQ0YsT0FBTztJQUNMLEdBQUc7SUFDSCxZQUFZO0lBQ1osUUFBUSxFQUNOLFFBQVEsVUFBVSxLQUNwQjtHQUNGO1FBRUEsT0FBTztFQUVYLE9BQU8sSUFDTCxNQUFNLGVBQWUsV0FDckIsTUFBTSxXQUNOLE1BQU0sUUFBUSxlQUFlLFVBQzdCO0dBQ0EsTUFBTSxZQUFZLE1BQU0sU0FBUyxVQUFVLE1BQU0sT0FBTyxDQUFDLFNBQVMsTUFBTSxDQUFDLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztHQUMzRixJQUFJLFdBQ0YsT0FBTztJQUNMLEdBQUc7SUFDSCxTQUFTO0tBQ1AsR0FBRyxNQUFNO0tBQ1QsWUFBWTtLQUNaLFFBQVEsRUFDTixRQUFRLFVBQVUsS0FDcEI7SUFDRjtHQUNGO1FBRUEsT0FBTztFQUVYO0VBQ0EsT0FBTztDQUNULENBQUM7Q0FFRCxPQUFPO0FBQ1Q7Ozs7O0FBTUEsZUFBc0Isa0JBQWtCLFVBQWlEO0NBQ3ZGLElBQUksU0FBUyxhQUFhLFNBQ3hCLE9BQU8sY0FBYyxTQUFTLElBQUk7TUFDN0IsSUFBSSxTQUFTLGFBQWEsU0FDL0IsSUFBSSxTQUFTLFNBQVMsUUFDcEIsTUFBTSxJQUFJLE1BQU07TUFDWCxJQUFJLFNBQVMsU0FBUyxTQUFTLEdBQ3BDLFFBQ0UsTUFBTSxrQkFBa0I7RUFDdEIsR0FBRztFQUNILFVBQVU7Q0FDWixDQUFDLEVBQUEsQ0FDRCxNQUFNO01BQ0g7RUFDTCxNQUFNLFlBQVksTUFBTSxjQUFjLFNBQVMsSUFBSTtFQUNuRCxJQUFJLFNBQVMsS0FBSyxhQUFhLE1BQzdCLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQyxDQUFDLFNBQVM7T0FFbkMsT0FBTyxFQUFFLE1BQU0sU0FBUztDQUU1QjtNQUNLLElBQUksU0FBUyxhQUFhLFVBQVU7RUFDekMsTUFBTSxVQUFVLE1BQU0sUUFBUSxJQUM1QixTQUFTLFNBQVMsSUFBSSxPQUFPLGtCQUFrQjtHQUM3QyxPQUFPLGNBQWMsTUFBTSxTQUFTLFFBQVcsc0NBQXNDO0dBQ3JGLE9BQU8sQ0FBQyxjQUFjLEtBQUssTUFBTSxNQUFNLGtCQUFrQixhQUFhLENBQUM7RUFDekUsQ0FBQyxDQUNIO0VBQ0EsTUFBTSxNQUFNLE9BQU8sWUFBWSxPQUFPO0VBRXRDLElBQUksU0FBUyxNQUFNLGFBQWEsTUFDOUIsT0FBTyxFQUFFLE9BQU8sR0FBRyxDQUFDLENBQUMsU0FBUztPQUU5QixPQUFPLEVBQUUsT0FBTyxHQUFHO0NBRXZCLE9BQ0UsTUFBTTtBQUVWOztTQWhIK0I7cUJBQ3lCO29CQUNpQjtvQkFFRiJ9
85
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LWNvbnZlcnRlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvZW50aXR5LWNvbnZlcnRlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIjtcblxuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vZGljdC9zZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbiB9IGZyb20gXCIuLi9leGNlcHRpb25zL3NvLWV4Y2VwdGlvbnNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5UHJvcE5vZGUsIHR5cGUgUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgcHJvcFRvWm9kVHlwZSwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9IGZyb20gXCIuL3pvZC1jb252ZXJ0ZXJcIjtcblxuLyoqXG4gKiDsl5Tti7Dti7DsnZgg7Yq57KCVIHN1YnNldOydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHN1YnNldOydmCDtlYTrk5zrk6TsnYQgWm9kIO2DgOyeheycvOuhnCDrs4DtmZjtlZwg7ZuEIFVJIOugjOuNlOungeyaqSDrhbjrk5zroZwg66eM65Ot64uI64ukLlxuICogb2JqZWN07JmAIGFycmF57J2YIOqyveyasCDsoIHsoIjtlZwgcGljayDtlYTrk5zrpbwg7J6Q64+Z7Jy866GcIOyEoO2Dne2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENvbHVtbnNOb2RlKGVudGl0eUlkOiBzdHJpbmcsIHN1YnNldEtleTogc3RyaW5nKTogUHJvbWlzZTxSZW5kZXJpbmdOb2RlPiB7XG4gIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3Qgc3Vic2V0RGVmID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcbiAgaWYgKHN1YnNldERlZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFNlcnZpY2VVbmF2YWlsYWJsZUV4Y2VwdGlvbihTRChcInNvbmFtdS5lcnJvci5zdWJzZXROb3RGb3VuZFwiKShzdWJzZXRLZXkpKTtcbiAgfVxuICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKHN1YnNldERlZik7XG4gIGNvbnN0IHJvb3RQcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgfTtcblxuICAvLyBveGxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAtLSB6b2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VoCDrlYwg7IKs7Jqp7ZWY64qUIO2DgOyehVxuICBjb25zdCBjb2x1bW5zWm9kVHlwZSA9XG4gICAgLyogU0FGRVRZOiDshKDtlokgWm9kIOyiheulmCDrtoTquLDsmYAg7YWc7ZSM66a/IOyeheugpSDqs4Tslb3snbQg7J20IOqwkuydmCDtg4DsnoXsnYQg67O07J6l7ZWc64ukLiAqLyAoYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoXG4gICAgICByb290UHJvcE5vZGUsXG4gICAgKSkgYXMgei5ab2RPYmplY3Q8YW55PjtcblxuICBjb25zdCBjb2x1bW5zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoY29sdW1uc1pvZFR5cGUpO1xuICBhc3NlcnQoY29sdW1uc05vZGUuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjb2x1bW5zTm9kZS5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gIGNvbHVtbnNOb2RlLmNoaWxkcmVuID0gY29sdW1uc05vZGUuY2hpbGRyZW4ubWFwKChjaGlsZCkgPT4ge1xuICAgIGlmIChjaGlsZC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICBhc3NlcnQoY2hpbGQuY2hpbGRyZW4gIT09IHVuZGVmaW5lZCwgXCJjaGlsZC5jaGlsZHJlbiBpcyB1bmRlZmluZWRcIik7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5jaGlsZHJlbi5maW5kKChjYykgPT4gW1widGl0bGVcIiwgXCJuYW1lXCJdLmluY2x1ZGVzKGNjLm5hbWUpKTtcbiAgICAgIGlmIChwaWNrZWRDb2wpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jaGlsZCxcbiAgICAgICAgICByZW5kZXJUeXBlOiBcIm9iamVjdC1waWNrXCIsXG4gICAgICAgICAgY29uZmlnOiB7XG4gICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGNoaWxkLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJlxuICAgICAgY2hpbGQuZWxlbWVudCAmJlxuICAgICAgY2hpbGQuZWxlbWVudC5yZW5kZXJUeXBlID09PSBcIm9iamVjdFwiXG4gICAgKSB7XG4gICAgICBjb25zdCBwaWNrZWRDb2wgPSBjaGlsZC5lbGVtZW50Py5jaGlsZHJlbj8uZmluZCgoY2MpID0+IFtcInRpdGxlXCIsIFwibmFtZVwiXS5pbmNsdWRlcyhjYy5uYW1lKSk7XG4gICAgICBpZiAocGlja2VkQ29sKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY2hpbGQsXG4gICAgICAgICAgZWxlbWVudDoge1xuICAgICAgICAgICAgLi4uY2hpbGQuZWxlbWVudCxcbiAgICAgICAgICAgIHJlbmRlclR5cGU6IFwib2JqZWN0LXBpY2tcIixcbiAgICAgICAgICAgIGNvbmZpZzoge1xuICAgICAgICAgICAgICBwaWNrZWQ6IHBpY2tlZENvbC5uYW1lLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH0pO1xuXG4gIHJldHVybiBjb2x1bW5zTm9kZTtcbn1cblxuLyoqXG4gKiBFbnRpdHlQcm9wTm9kZeulvCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIHBsYWluLCBhcnJheSwgb2JqZWN0IOyEuCDqsIDsp4Agbm9kZVR5cGXsnYQg7J6s6reA7KCB7Jy866GcIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb3BOb2RlVG9ab2RUeXBlKHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSk6IFByb21pc2U8ei5ab2RUeXBlQW55PiB7XG4gIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJwbGFpblwiKSB7XG4gICAgcmV0dXJuIHByb3BUb1pvZFR5cGUocHJvcE5vZGUucHJvcCk7XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgIGlmIChwcm9wTm9kZS5wcm9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH0gZWxzZSBpZiAocHJvcE5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoe1xuICAgICAgICAgIC4uLnByb3BOb2RlLFxuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICB9KVxuICAgICAgKS5hcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpbm5lclR5cGUgPSBhd2FpdCBwcm9wVG9ab2RUeXBlKHByb3BOb2RlLnByb3ApO1xuICAgICAgaWYgKHByb3BOb2RlLnByb3AubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKS5udWxsYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHouYXJyYXkoaW5uZXJUeXBlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAocHJvcE5vZGUubm9kZVR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlbi5tYXAoYXN5bmMgKGNoaWxkUHJvcE5vZGUpID0+IHtcbiAgICAgICAgYXNzZXJ0KGNoaWxkUHJvcE5vZGUucHJvcD8ubmFtZSAhPT0gdW5kZWZpbmVkLCBcImNoaWxkUHJvcE5vZGUucHJvcC5uYW1lIGlzIHVuZGVmaW5lZFwiKTtcbiAgICAgICAgcmV0dXJuIFtjaGlsZFByb3BOb2RlLnByb3AubmFtZSwgYXdhaXQgcHJvcE5vZGVUb1pvZFR5cGUoY2hpbGRQcm9wTm9kZSldIGFzIGNvbnN0O1xuICAgICAgfSksXG4gICAgKTtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcyk7XG5cbiAgICBpZiAocHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopLm51bGxhYmxlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB6Lm9iamVjdChvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBZUEsZUFBc0IsZUFBZSxVQUFrQixXQUEyQztDQUNoRyxNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7Q0FDekMsTUFBTSxZQUFZLE9BQU8sUUFBUTtDQUNqQyxJQUFJLGNBQWMsUUFDaEIsTUFBTSxJQUFJLDRCQUE0QixHQUFHLDZCQUE2QixDQUFDLENBQUMsU0FBUyxDQUFDO0NBY3BGLE1BQU0sY0FBYyx1QkFBdUIsTUFKb0Isa0JBQzNEO0VBUEYsVUFBVTtFQUNWLFVBSGdCLE9BQU8sc0JBQXNCLFNBR25DO0NBTVIsQ0FDRixDQUV1RDtDQUN6RCxPQUFPLFlBQVksYUFBYSxRQUFXLG1DQUFtQztDQUM5RSxZQUFZLFdBQVcsWUFBWSxTQUFTLEtBQUssVUFBVTtFQUN6RCxJQUFJLE1BQU0sZUFBZSxVQUFVO0dBQ2pDLE9BQU8sTUFBTSxhQUFhLFFBQVcsNkJBQTZCO0dBQ2xFLE1BQU0sWUFBWSxNQUFNLFNBQVMsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQ2pGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFlBQVk7SUFDWixRQUFRLEVBQ04sUUFBUSxVQUFVLEtBQ3BCO0dBQ0Y7UUFFQSxPQUFPO0VBRVgsT0FBTyxJQUNMLE1BQU0sZUFBZSxXQUNyQixNQUFNLFdBQ04sTUFBTSxRQUFRLGVBQWUsVUFDN0I7R0FDQSxNQUFNLFlBQVksTUFBTSxTQUFTLFVBQVUsTUFBTSxPQUFPLENBQUMsU0FBUyxNQUFNLENBQUMsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0dBQzNGLElBQUksV0FDRixPQUFPO0lBQ0wsR0FBRztJQUNILFNBQVM7S0FDUCxHQUFHLE1BQU07S0FDVCxZQUFZO0tBQ1osUUFBUSxFQUNOLFFBQVEsVUFBVSxLQUNwQjtJQUNGO0dBQ0Y7UUFFQSxPQUFPO0VBRVg7RUFDQSxPQUFPO0NBQ1QsQ0FBQztDQUVELE9BQU87QUFDVDs7Ozs7QUFNQSxlQUFzQixrQkFBa0IsVUFBaUQ7Q0FDdkYsSUFBSSxTQUFTLGFBQWEsU0FDeEIsT0FBTyxjQUFjLFNBQVMsSUFBSTtNQUM3QixJQUFJLFNBQVMsYUFBYSxTQUMvQixJQUFJLFNBQVMsU0FBUyxRQUNwQixNQUFNLElBQUksTUFBTTtNQUNYLElBQUksU0FBUyxTQUFTLFNBQVMsR0FDcEMsUUFDRSxNQUFNLGtCQUFrQjtFQUN0QixHQUFHO0VBQ0gsVUFBVTtDQUNaLENBQUMsRUFBQSxDQUNELE1BQU07TUFDSDtFQUNMLE1BQU0sWUFBWSxNQUFNLGNBQWMsU0FBUyxJQUFJO0VBQ25ELElBQUksU0FBUyxLQUFLLGFBQWEsTUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDLENBQUMsU0FBUztPQUVuQyxPQUFPLEVBQUUsTUFBTSxTQUFTO0NBRTVCO01BQ0ssSUFBSSxTQUFTLGFBQWEsVUFBVTtFQUN6QyxNQUFNLFVBQVUsTUFBTSxRQUFRLElBQzVCLFNBQVMsU0FBUyxJQUFJLE9BQU8sa0JBQWtCO0dBQzdDLE9BQU8sY0FBYyxNQUFNLFNBQVMsUUFBVyxzQ0FBc0M7R0FDckYsT0FBTyxDQUFDLGNBQWMsS0FBSyxNQUFNLE1BQU0sa0JBQWtCLGFBQWEsQ0FBQztFQUN6RSxDQUFDLENBQ0g7RUFDQSxNQUFNLE1BQU0sT0FBTyxZQUFZLE9BQU87RUFFdEMsSUFBSSxTQUFTLE1BQU0sYUFBYSxNQUM5QixPQUFPLEVBQUUsT0FBTyxHQUFHLENBQUMsQ0FBQyxTQUFTO09BRTlCLE9BQU8sRUFBRSxPQUFPLEdBQUc7Q0FFdkIsT0FDRSxNQUFNO0FBRVY7O1NBbkgrQjtxQkFDeUI7b0JBQ2lCO29CQUVGIn0=
@@ -1,5 +1,11 @@
1
1
  import { type EntityNamesRecord } from "../entity/entity-manager";
2
2
  import { type RelationProp } from "../types/types";
3
+ interface EnumColumnInfo {
4
+ id: string;
5
+ targetEntityNames: EntityNamesRecord;
6
+ targetEntityId: string;
7
+ title: string;
8
+ }
3
9
  /**
4
10
  * Enum의 표시용 라벨을 가져옵니다.
5
11
  * OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
@@ -9,12 +15,7 @@ export declare function getLabel(entityId: string, enumId: string): string;
9
15
  * 컬럼 이름으로부터 Enum 정보를 추출합니다.
10
16
  * Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
11
17
  */
12
- export declare function getEnumInfoFromColName(entityId: string, colName: string): {
13
- id: string;
14
- targetEntityNames: EntityNamesRecord;
15
- targetEntityId: string;
16
- title: string;
17
- };
18
+ export declare function getEnumInfoFromColName(entityId: string, colName: string): EnumColumnInfo;
18
19
  /**
19
20
  * 컬럼 이름으로부터 Relation prop 정보를 가져옵니다.
20
21
  * 관계형 prop이 아닌 경우 에러를 발생시킵니다.
@@ -35,4 +36,5 @@ export declare function getRelationNameFromColumnName(entityId: string, colName:
35
36
  * 중괄호 카운팅 방식으로 중첩된 객체도 정확히 파싱합니다.
36
37
  */
37
38
  export declare function extractObjectDeclaration(sourceCode: string, varName: string): string;
39
+ export {};
38
40
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/template/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd;IACD,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf,CAuBA;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAY1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAsCvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0EpF"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/template/helpers.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,UAAU,cAAc;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAcjE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAuBxF;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,YAAY,CAY1F;AAED;;;;;;;;GAQG;AACH,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAsCvF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA0EpF"}
@@ -141,4 +141,4 @@ var init_helpers = __esmMin((() => {
141
141
  init_helpers();
142
142
  export { extractObjectDeclaration, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers };
143
143
 
144
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIEVudW3snZgg7ZGc7Iuc7JqpIOudvOuyqOydhCDqsIDsoLjsmLXri4jri6QuXG4gKiBPcmRlckJ5LCBTZWFyY2hGaWVsZCDrk7Eg7Yq57IiY7ZWcIOqyveyasOyZgCDsnbzrsJggRW51beydhCDqtazrtoTtlZjsl6wg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZW50aXR5SWQ6IHN0cmluZywgZW51bUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZW51bUlkLmVuZHNXaXRoKFwiT3JkZXJCeVwiKSkge1xuICAgIHJldHVybiBcIuygleugrFwiO1xuICB9IGVsc2UgaWYgKGVudW1JZC5lbmRzV2l0aChcIlNlYXJjaEZpZWxkXCIpKSB7XG4gICAgcmV0dXJuIFwi6rKA7IOJXCI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW51bVByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZChcbiAgICAgIChwcm9wKSA9PiBgJHtlbnRpdHlJZH0ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcC5uYW1lKX1gID09PSBlbnVtSWQsXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3A/LmRlc2MpIHtcbiAgICAgIHJldHVybiBlbnVtUHJvcC5kZXNjO1xuICAgIH1cbiAgICByZXR1cm4gZW51bUlkO1xuICB9XG59XG5cbi8qKlxuICog7Lus65+8IOydtOumhOycvOuhnOu2gO2EsCBFbnVtIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBFbnRpdHnsnZggcHJvcCDspJEgZW51bSDtg4DsnoXsnbgg6rKD7J2EIOywvuyVhCDqtIDroKgg7KCV67O066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gIGVudGl0eUlkOiBzdHJpbmcsXG4gIGNvbE5hbWU6IHN0cmluZyxcbik6IHtcbiAgaWQ6IHN0cmluZztcbiAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB0YXJnZXRFbnRpdHlJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXQSxTQUFnQixTQUFTLFVBQWtCLFFBQXdCO0NBQ2pFLElBQUksT0FBTyxTQUFTLFNBQVMsR0FDM0IsT0FBTztNQUNGLElBQUksT0FBTyxTQUFTLGFBQWEsR0FDdEMsT0FBTztNQUNGO0VBQ0wsTUFBTSxXQUFXLGNBQWMsSUFBSSxRQUFRLENBQUMsQ0FBQyxNQUFNLE1BQ2hELFNBQVMsR0FBRyxXQUFXLFdBQVcsU0FBUyxLQUFLLElBQUksUUFBUSxNQUMvRDtFQUNBLElBQUksVUFBVSxNQUNaLE9BQU8sU0FBUztFQUVsQixPQUFPO0NBQ1Q7QUFDRjs7Ozs7QUFNQSxTQUFnQix1QkFDZCxVQUNBLFNBTUE7Q0FFQSxNQUFNLE9BRGEsY0FBYyxJQUFJLFFBQ3hCLENBQUEsQ0FBVyxNQUFNLE1BQU0sTUFBTSxFQUFFLFNBQVMsT0FBTztDQUM1RCxJQUFJLFFBQVEsV0FBVyxJQUFJLEdBQ3pCLE9BQU87RUFDTCxJQUFJLEtBQUs7RUFDVCxnQkFBZ0I7RUFDaEIsbUJBQW1CLGNBQWMsZUFBZSxRQUFRO0VBQ3hELE9BQU8sS0FBSyxRQUFRLEtBQUs7Q0FDM0I7TUFDSztFQUNMLE1BQU0sY0FBYyxXQUFXLFNBQzdCLEdBQUcsV0FBVyxXQUFXLFFBQVEsRUFBRSxHQUFHLFdBQVcsV0FBVyxPQUFPLEtBQ25FLEtBQ0Y7RUFFQSxPQUFPO0dBQ0wsSUFBSTtHQUNKLGdC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
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG5pbnRlcmZhY2UgRW51bUNvbHVtbkluZm8ge1xuICBpZDogc3RyaW5nO1xuICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TmFtZXNSZWNvcmQ7XG4gIHRhcmdldEVudGl0eUlkOiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW51beydmCDtkZzsi5zsmqkg652867Ko7J2EIOqwgOyguOyYteuLiOuLpC5cbiAqIE9yZGVyQnksIFNlYXJjaEZpZWxkIOuTsSDtirnsiJjtlZwg6rK97Jqw7JmAIOydvOuwmCBFbnVt7J2EIOq1rOu2hO2VmOyXrCDsspjrpqztlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMYWJlbChlbnRpdHlJZDogc3RyaW5nLCBlbnVtSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChlbnVtSWQuZW5kc1dpdGgoXCJPcmRlckJ5XCIpKSB7XG4gICAgcmV0dXJuIFwi7KCV66CsXCI7XG4gIH0gZWxzZSBpZiAoZW51bUlkLmVuZHNXaXRoKFwiU2VhcmNoRmllbGRcIikpIHtcbiAgICByZXR1cm4gXCLqsoDsg4lcIjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBlbnVtUHJvcCA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKS5wcm9wcy5maW5kKFxuICAgICAgKHByb3ApID0+IGAke2VudGl0eUlkfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShwcm9wLm5hbWUpfWAgPT09IGVudW1JZCxcbiAgICApO1xuICAgIGlmIChlbnVtUHJvcD8uZGVzYykge1xuICAgICAgcmV0dXJuIGVudW1Qcm9wLmRlc2M7XG4gICAgfVxuICAgIHJldHVybiBlbnVtSWQ7XG4gIH1cbn1cblxuLyoqXG4gKiDsu6zrn7wg7J2066aE7Jy866Gc67aA7YSwIEVudW0g7KCV67O066W8IOy2lOy2nO2VqeuLiOuLpC5cbiAqIEVudGl0eeydmCBwcm9wIOykkSBlbnVtIO2DgOyeheyduCDqsoPsnYQg7LC+7JWEIOq0gOugqCDsoJXrs7Trpbwg67CY7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZDogc3RyaW5nLCBjb2xOYW1lOiBzdHJpbmcpOiBFbnVtQ29sdW1uSW5mbyB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFrQkEsU0FBZ0IsU0FBUyxVQUFrQixRQUF3QjtDQUNqRSxJQUFJLE9BQU8sU0FBUyxTQUFTLEdBQzNCLE9BQU87TUFDRixJQUFJLE9BQU8sU0FBUyxhQUFhLEdBQ3RDLE9BQU87TUFDRjtFQUNMLE1BQU0sV0FBVyxjQUFjLElBQUksUUFBUSxDQUFDLENBQUMsTUFBTSxNQUNoRCxTQUFTLEdBQUcsV0FBVyxXQUFXLFNBQVMsS0FBSyxJQUFJLFFBQVEsTUFDL0Q7RUFDQSxJQUFJLFVBQVUsTUFDWixPQUFPLFNBQVM7RUFFbEIsT0FBTztDQUNUO0FBQ0Y7Ozs7O0FBTUEsU0FBZ0IsdUJBQXVCLFVBQWtCLFNBQWlDO0NBRXhGLE1BQU0sT0FEYSxjQUFjLElBQUksUUFDeEIsQ0FBQSxDQUFXLE1BQU0sTUFBTSxNQUFNLEVBQUUsU0FBUyxPQUFPO0NBQzVELElBQUksUUFBUSxXQUFXLElBQUksR0FDekIsT0FBTztFQUNMLElBQUksS0FBSztFQUNULGdCQUFnQjtFQUNoQixtQkFBbUIsY0FBYyxlQUFlLFFBQVE7RUFDeEQsT0FBTyxLQUFLLFFBQVEsS0FBSztDQUMzQjtNQUNLO0VBQ0wsTUFBTSxjQUFjLFdBQVcsU0FDN0IsR0FBRyxXQUFXLFdBQVcsUUFBUSxFQUFFLEdBQUcsV0FBVyxXQUFXLE9BQU8s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
@@ -1 +1 @@
1
- {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA8GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAqI9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
1
+ {"version":3,"file":"generated.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/generated.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAMlD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGvC,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AACF,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB;;;;IAOhB,MAAM;;;;;;;IA+GN,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAmBrD,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,EAAO,GAAG,UAAU;IAqI9E,2BAA2B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAsE9D,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;CA8CvD"}
@@ -1,6 +1,6 @@
1
1
  import { init_utils, nonNullable } from "../../utils/utils.js";
2
- import { Sonamu } from "../../api/sonamu.js";
3
2
  import { init_types, isVirtualCodeProp, isVirtualQueryProp } from "../../types/types.js";
3
+ import { Sonamu } from "../../api/sonamu.js";
4
4
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
5
5
  import { Naite, init_naite } from "../../naite/naite.js";
6
6
  import { init_api } from "../../api/index.js";
@@ -73,7 +73,7 @@ var Template__generated = class extends Template {
73
73
  const cdImportKeys = sourceCode.importKeys.filter((importKey) => allTypeKeys.includes(importKey));
74
74
  if (cdImportKeys.length > 0) {
75
75
  sourceCode.lines = [...cdImportKeys.flatMap((importKey) => {
76
- const entity = entities.find((entity) => entity.types[importKey]);
76
+ const entity = entities.find((candidateEntity) => candidateEntity.types[importKey]);
77
77
  if (!entity) throw new Error(`ZodType not found ${importKey}`);
78
78
  const zodType = entity.types[importKey];
79
79
  assert(zodType);
@@ -118,7 +118,7 @@ var Template__generated = class extends Template {
118
118
  if (Object.keys(entity.enumLabels).length === 0) return null;
119
119
  return {
120
120
  label: `Enums: ${entity.id}`,
121
- lines: Object.entries(entity.enumLabels).filter(([_, enumLabel]) => Object.keys(enumLabel).length > 0).flatMap(([enumId, enumLabel]) => [
121
+ lines: Object.entries(entity.enumLabels).filter(([, enumLabel]) => Object.keys(enumLabel).length > 0).flatMap(([enumId, enumLabel]) => [
122
122
  `export const ${enumId} = z.enum([${Object.keys(enumLabel).map((el) => `"${el}"`)}]).describe("${enumId}");`,
123
123
  `export type ${enumId} = z.infer<typeof ${enumId}>;`,
124
124
  `export const ${enumId}Label = ${JSON.stringify(enumLabel)};`
@@ -244,4 +244,4 @@ z.object({
244
244
  //#endregion
245
245
  export { Template__generated };
246
246
 
247
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUsIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSB1bmlxdWUoXG4gICAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpib2R5XCIsIGJvZHkpO1xuXG4gICAgLy8gaW1wb3J0XG4gICAgLy8gc291cmNlQ29kZS5pbXBvcnRLZXlz7JeQIOuCtOyepSDtg4DsnoXsnZgg7Iqk7YKk66eI6rCAIOyeiOycvOuptCBzb25hbXUgaW1wb3J07JeQIOy2lOqwgFxuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFOYW1lcyA9IE9iamVjdC52YWx1ZXMoQlVJTFRfSU5fVFlQRVMpLm1hcChcbiAgICAgIChpbmZvKSA9PiBpbmZvLnNjaGVtYU5hbWUgYXMgc3RyaW5nLFxuICAgICk7XG4gICAgY29uc3QgYnVpbHRJblNjaGVtYXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKChrZXkpID0+IGJ1aWx0SW5TY2hlbWFOYW1lcy5pbmNsdWRlcyhrZXkpKTtcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgICAgXCJBcHBseVNvbmFtdUZpbHRlclwiLFxuICAgICAgLi4uYnVpbHRJblNjaGVtYXMsXG4gICAgXS5maWx0ZXIoKG1vZCkgPT4gYm9keS5pbmNsdWRlcyhtb2QpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXG4gICAgICAgIFwiLyoqXCIsXG4gICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICBcIiAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIGBpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVJbXBvcnRzLmpvaW4oXCIsXCIpfSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRW51bXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lczogT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIEpTT04gcHJvcHNcbiAgICAgKiAtIGpzb24g7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwianNvblwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBqc29uQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChqc29uQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19qc29uX186IHJlYWRvbmx5IFske2pzb25Db2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztTQUlrQztvQkFFeUI7V0FDbEI7V0FDZ0M7V0FFMUI7Y0FDVDttQkFDbUQ7QUFPekYsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7RUFDWixNQUFNLFdBQVc7Q0FDbkI7Q0FFQSxtQkFBbUI7RUFDakIsTUFBTSxF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
247
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLyogU0FGRVRZOiByZWR1Y2Ug64iE7IKw6riw64qUIGxhYmVs7J2EIOygnOyZuO2VnCBTb3VyY2VDb2Rl7J2YIOuRkCDrsLDsl7TroZwg7LSI6riw7ZmU65Cc64ukLiAqLyB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGNhbmRpZGF0ZUVudGl0eSkgPT4gY2FuZGlkYXRlRW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSwgc291cmNlQ29kZS5pbXBvcnRLZXlzKX07YCxcbiAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBzb3VyY2VDb2RlLmxpbmVzID0gWy4uLmN1c3RvbVNjYWxhckxpbmVzLCAuLi5zb3VyY2VDb2RlLmxpbmVzXTtcbiAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyA9IHVuaXF1ZShcbiAgICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+XG4gICAgICAgIC8qIFNBRkVUWTogQlVJTFRfSU5fVFlQRVPsnZgg66qo65OgIO2VreuqqeydgCDsg53shLEg7L2U65Oc7JeQIOyTuCBzY2hlbWFOYW1l7J2EIOqwgOynhOuLpC4gKi8gaW5mby5zY2hlbWFOYW1lIGFzIHN0cmluZyxcbiAgICApO1xuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoa2V5KSA9PiBidWlsdEluU2NoZW1hTmFtZXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgY29uc3Qgc29uYW11SW1wb3J0cyA9IFtcbiAgICAgIFwiekFycmF5YWJsZVwiLFxuICAgICAgXCJTUUxEYXRlVGltZVN0cmluZ1wiLFxuICAgICAgXCJTdWJzZXRRdWVyeVwiLFxuICAgICAgXCJTb25hbXVRdWVyeU1vZGVcIixcbiAgICAgIFwiQXBwbHlTb25hbXVGaWx0ZXJcIixcbiAgICAgIC4uLmJ1aWx0SW5TY2hlbWFzLFxuICAgIF0uZmlsdGVyKChtb2QpID0+IGJvZHkuaW5jbHVkZXMobW9kKSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKCksXG4gICAgICBib2R5LFxuICAgICAgaW1wb3J0S2V5czogc291cmNlQ29kZS5pbXBvcnRLZXlzLFxuICAgICAgY3VzdG9tSGVhZGVyczogW1xuICAgICAgICBcIi8qKlwiLFxuICAgICAgICBcIiAqIEBnZW5lcmF0ZWRcIixcbiAgICAgICAgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIixcbiAgICAgICAgXCIgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCIvKiBveGxpbnQtZGlzYWJsZSAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBgaW1wb3J0IHsgeiB9IGZyb20gJ3pvZCc7YCxcbiAgICAgICAgYGltcG9ydCB7ICR7c29uYW11SW1wb3J0cy5qb2luKFwiLFwiKX0gfSBmcm9tIFwic29uYW11XCI7YCxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxuXG4gIGdldEVudW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LmVudW1MYWJlbHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEVudW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXM6IE9iamVjdC5lbnRyaWVzKGVudGl0eS5lbnVtTGFiZWxzKVxuICAgICAgICAuZmlsdGVyKChbLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIEpTT04gcHJvcHNcbiAgICAgKiAtIGpzb24g7YOA7J6F7J24IOy7rOufvFxuICAgICAqL1xuICAgIGNvbnN0IGpzb25Db2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwianNvblwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBqc29uQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChqc29uQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19qc29uX186IHJlYWRvbmx5IFske2pzb25Db2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIilcbiAgICAgICAgICAgIH19YFxuICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICBcIjtcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZVNjaGVtYTogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZUxpc3RQYXJhbXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIC8vIFByb3Ag7JeG64qUIE1E7J24IOqyveyasCDsg53shLEg7KCc7Jm4XG4gICAgaWYgKGVudGl0eS5wcm9wcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfUJhc2VMaXN0UGFyYW1zYDtcblxuICAgIGNvbnN0IGZpbHRlclByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocHJvcCkgPT4gcHJvcC50b0ZpbHRlciA9PT0gdHJ1ZSk7XG5cbiAgICBjb25zdCBwcm9wTm9kZXM6IEVudGl0eVByb3BOb2RlW10gPSBmaWx0ZXJQcm9wcy5tYXAoKHByb3ApID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIgYXMgY29uc3QsXG4gICAgICAgIHByb3AsXG4gICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGZpbHRlckJvZHkgPSBwcm9wTm9kZXNcbiAgICAgIC5tYXAoKHByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cykpXG4gICAgICAuam9pbihcIlxcblwiKTtcblxuICAgIC8vIEZpbHRlclF1ZXJ5IO2DgOyeheydhCDsnITtlZwg7KCc7Jm47ZWgIHByb3BzIOy2lOy2nCAodmlydHVhbOunjCDsoJzsmbgpXG4gICAgY29uc3QgZXhjbHVkZWRQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJ2aXJ0dWFsXCIpLm1hcCgocCkgPT4gcC5uYW1lKTtcblxuICAgIC8vIG51bWVyaWMg7YOA7J6F7J24IHByb3BzIOy2lOy2nFxuICAgIGNvbnN0IG51bWVyaWNQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHApID0+IHAudHlwZSA9PT0gXCJudW1lcmljXCIpO1xuXG4gICAgLy8gQXBwbHlTb25hbXVGaWx0ZXIg7YOA7J6FIOyduOyekCDsg53shLFcbiAgICBjb25zdCBlbnRpdHlUeXBlID0gYCR7ZW50aXR5LmlkfUJhc2VTY2hlbWFgO1xuICAgIGNvbnN0IG51bWVyaWNLZXlzVW5pb24gPVxuICAgICAgbnVtZXJpY1Byb3BzLmxlbmd0aCA+IDAgPyBudW1lcmljUHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3AubmFtZX1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG4gICAgY29uc3Qgb21pdEtleXNVbmlvbiA9XG4gICAgICBleGNsdWRlZFByb3BzLmxlbmd0aCA+IDAgPyBleGNsdWRlZFByb3BzLm1hcCgobikgPT4gYFwiJHtufVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcblxuICAgIC8vIFBLIO2DgOyeheyXkCDrlLDrpbggaWQgWm9kIO2DgOyehSDqsrDsoJVcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiXG4gICAgICAgID8gXCJ6QXJyYXlhYmxlKHouc3RyaW5nKCkpXCJcbiAgICAgICAgOiBcInpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKVwiO1xuXG4gICAgY29uc3Qgc2NoZW1hQm9keSA9IGBcbnoub2JqZWN0KHtcbiAgbnVtOiB6Lm51bWJlcigpLmludCgpLm5vbm5lZ2F0aXZlKCksXG4gIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICBzZWFyY2g6ICR7ZW50aXR5LmlkfVNlYXJjaEZpZWxkLFxuICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICBvcmRlckJ5OiAke2VudGl0eS5pZH1PcmRlckJ5LFxuICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbiAgc29uYW11RmlsdGVyOiB6LmN1c3RvbTxBcHBseVNvbmFtdUZpbHRlcjwke2VudGl0eVR5cGV9LCAke29taXRLZXlzVW5pb259LCAke251bWVyaWNLZXlzVW5pb259Pj4oKSwke2ZpbHRlckJvZHl9XG59KS5wYXJ0aWFsKCk7XG5gLnRyaW0oKTtcblxuICAgIGNvbnN0IGxpbmVzID0gW1xuICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtzY2hlbWFCb2R5fTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlTGlzdFBhcmFtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGltcG9ydEtleXMsXG4gICAgICBsaW5lcyxcbiAgICB9O1xuICB9XG5cbiAgZ2V0U3Vic2V0U291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICBpZiAoT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc3Vic2V0S2V5cyA9IE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKTtcbiAgICBjb25zdCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAgIC4uLnN1YnNldEtleXMuZmxhdE1hcCgoc3Vic2V0S2V5KSA9PiB7XG4gICAgICAgIC8vIOyEnOu4jOyFi+yXkOyEnCBGaWVsZEV4cHJbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgZmllbGRFeHBycyA9IGVudGl0eS5zdWJzZXRzW3N1YnNldEtleV07XG5cbiAgICAgICAgLy8gRmllbGRFeHByW13roZwgRW50aXR5UHJvcE5vZGVbXSDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgcHJvcE5vZGVzID0gZW50aXR5LmZpZWxkRXhwcnNUb1Byb3BOb2RlcyhmaWVsZEV4cHJzKTtcbiAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9YDtcbiAgICAgICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgIGNoaWxkcmVuOiBwcm9wTm9kZXMsXG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gRW50aXR5UHJvcE5vZGVbXeuhnCBab2RUeXBlRGVmKHN0cmluZynsnYQg6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGJvZHkgPSBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZSwgaW1wb3J0S2V5cyk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke2JvZHkucmVwbGFjZSgvLCQvLCBcIlwiKX07YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgICAgIF07XG4gICAgICB9KSxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0TWFwcGluZyA9IHtgLFxuICAgICAgLi4uc3Vic2V0S2V5cy5tYXAoKHN1YnNldEtleSkgPT4gYCAgJHtzdWJzZXRLZXl9OiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0JHtzdWJzZXRLZXl9O2ApLFxuICAgICAgXCJ9O1wiLFxuICAgICAgYGV4cG9ydCBjb25zdCAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5lbnVtKFske3N1YnNldEtleXNcbiAgICAgICAgLm1hcCgoaykgPT4gYFwiJHtrfVwiYClcbiAgICAgICAgLmpvaW4oXCIsXCIpfV0pO2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXk+O2AsXG4gICAgICBcIlwiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBTdWJzZXRzOiAke2VudGl0eS5pZH1gLFxuICAgICAgbGluZXMsXG4gICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoaW1wb3J0S2V5cyksXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztTQUlrQztvQkFFeUI7V0FDbEI7V0FDZ0M7V0FFMUI7Y0FDVDttQkFDbUQ7QUFPekYsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7RUFDWixNQUFNLFdBQVc7Q0FDbkI7Q0FFQSxtQkFBbUI7RUFDakIsTUFBTSxFQUFFLFFBQVEsT0FBTyxPQUFPO0VBQzlCLE9BQU87R0FDTCxRQUFRLEdBQUcsSUFBSTtHQUNmLE1BQU07RUFDUjtDQUNGO0NBQ0EsU0FBUztFQUVQLE1BQU0sV0FEWSxjQUFjLFVBQ2YsQ0FBQSxDQUFVLEtBQUssT0FBTyxjQUFjLElBQUksRUFBRSxDQUFDO0VBRzVELE1BQU0sY0FBYyxTQUFTLFNBQVMsV0FBVztHQUMvQyxPQUFPO0lBQ0wsS0FBSyxtQkFBbUIsTUFBTTtJQUM5QixLQUFLLHdCQUF3QixNQUFNO0lBQ25DLEtBQUssNEJBQTRCLE1BQU07SUFDdkMsS0FBSyxvQkFBb0IsTUFBTTtHQUNqQyxDQUFDLENBQUMsT0FBTyxXQUFXO0VBQ3RCLENBQUM7RUFDRCxNQUFNLEVBQUUsbUNBQW1DLFdBQVc7RUFHdEQsTUFBTSxrQkFBa0I7R0FBQztHQUFTO0dBQWM7R0FBa0I7R0FBVztFQUFlO0VBQzVGLFlBQVksTUFBTSxHQUFHLE1BQU07R0FDekIsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLE1BQU0sR0FBRztHQUNoQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sTUFBTSxHQUFHO0dBQ2hDLE1BQU0sU0FBUyxnQkFBZ0IsUUFBUSxJQUFJO0dBQzNDLE1BQU0sU0FBUyxnQkFBZ0IsUUFBUSxJQUFJO0dBQzNDLElBQUksU0FBUyxRQUNYLE9BQU87UUFDRixJQUFJLFNBQVMsUUFDbEIsT0FBTztRQUVQLE9BQU87RUFFWCxDQUFDO0VBRUQsTUFBTSxhQUFhLFlBQVksUUFDNUIsUUFBUSxPQUFPO0dBQ2QsSUFB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