sonamu 0.12.0 → 0.13.0

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 (275) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +1 -2
  2. package/dist/ai/agents/agent.js +2 -3
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/index.js +1 -2
  5. package/dist/ai/providers/rtzr/api.js +1 -2
  6. package/dist/ai/providers/rtzr/error.js +2 -3
  7. package/dist/ai/providers/rtzr/model.js +1 -2
  8. package/dist/ai/providers/rtzr/options.js +1 -2
  9. package/dist/ai/providers/rtzr/provider.js +1 -2
  10. package/dist/ai/providers/rtzr/utils.js +1 -2
  11. package/dist/api/base-frame.js +4 -4
  12. package/dist/api/caster.d.ts +1 -1
  13. package/dist/api/caster.d.ts.map +1 -1
  14. package/dist/api/caster.js +9 -9
  15. package/dist/api/code-converters.js +6 -5
  16. package/dist/api/config.d.ts +1 -1
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +2 -3
  19. package/dist/api/context.d.ts +2 -3
  20. package/dist/api/context.d.ts.map +1 -1
  21. package/dist/api/context.js +2 -3
  22. package/dist/api/decorators.js +2 -3
  23. package/dist/api/http-validator.js +2 -3
  24. package/dist/api/index.js +8 -3
  25. package/dist/api/secret.js +1 -2
  26. package/dist/api/sonamu.d.ts +3 -5
  27. package/dist/api/sonamu.d.ts.map +1 -1
  28. package/dist/api/sonamu.js +19 -18
  29. package/dist/api/validator.js +1 -2
  30. package/dist/api/websocket-helpers.js +2 -3
  31. package/dist/auth/audit-log/builders.js +1 -2
  32. package/dist/auth/audit-log/client-ip.js +2 -3
  33. package/dist/auth/audit-log/events.js +1 -2
  34. package/dist/auth/audit-log/plugin.d.ts.map +1 -1
  35. package/dist/auth/audit-log/plugin.js +2 -3
  36. package/dist/auth/audit-log-ingestor.js +2 -3
  37. package/dist/auth/auth-generator.js +2 -3
  38. package/dist/auth/better-auth-entities.js +1 -2
  39. package/dist/auth/better-auth-request.js +2 -3
  40. package/dist/auth/index.js +2 -3
  41. package/dist/auth/knex-adapter.js +2 -3
  42. package/dist/auth/plugins/entity-definitions/admin.js +1 -2
  43. package/dist/auth/plugins/entity-definitions/anonymous.js +1 -2
  44. package/dist/auth/plugins/entity-definitions/api-key.js +1 -2
  45. package/dist/auth/plugins/entity-definitions/audit-log.js +1 -2
  46. package/dist/auth/plugins/entity-definitions/index.js +1 -2
  47. package/dist/auth/plugins/entity-definitions/jwt.js +1 -2
  48. package/dist/auth/plugins/entity-definitions/organization.js +1 -2
  49. package/dist/auth/plugins/entity-definitions/passkey.js +1 -2
  50. package/dist/auth/plugins/entity-definitions/phone-number.js +1 -2
  51. package/dist/auth/plugins/entity-definitions/sso.js +1 -2
  52. package/dist/auth/plugins/entity-definitions/two-factor.js +1 -2
  53. package/dist/auth/plugins/entity-definitions/username.js +1 -2
  54. package/dist/auth/plugins/wrappers/admin.d.ts +33 -32
  55. package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
  56. package/dist/auth/plugins/wrappers/admin.js +2 -3
  57. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  58. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  59. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  60. package/dist/auth/plugins/wrappers/organization.js +2 -3
  61. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  62. package/dist/auth/plugins/wrappers/phone-number.d.ts +43 -1
  63. package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
  64. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  65. package/dist/auth/plugins/wrappers/sso.d.ts +138 -187
  66. package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -1
  67. package/dist/auth/plugins/wrappers/sso.js +1 -2
  68. package/dist/auth/plugins/wrappers/two-factor.d.ts +51 -10
  69. package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
  70. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  71. package/dist/auth/plugins/wrappers/username.d.ts +39 -5
  72. package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
  73. package/dist/auth/plugins/wrappers/username.js +2 -3
  74. package/dist/bin/build-config.js +5 -5
  75. package/dist/bin/compiler-policy.js +2 -3
  76. package/dist/bin/fixture.js +7 -5
  77. package/dist/bin/hmr-hook-register.js +1 -2
  78. package/dist/bin/migrate-targets.js +2 -3
  79. package/dist/bin/test-command.js +2 -3
  80. package/dist/bin/ts-loader-register.js +2 -3
  81. package/dist/bin/ts-loader-registration.js +2 -3
  82. package/dist/bin/typecheck-web.js +2 -3
  83. package/dist/cache/cache-manager.js +1 -2
  84. package/dist/cache/decorator.js +2 -3
  85. package/dist/cache/drivers.js +1 -2
  86. package/dist/cache/index.js +2 -3
  87. package/dist/cache-control/cache-control.js +1 -2
  88. package/dist/code-formatting/index.js +2 -3
  89. package/dist/code-formatting/oxfmt.js +2 -3
  90. package/dist/code-formatting/oxlint.js +2 -3
  91. package/dist/compress/compress.js +1 -2
  92. package/dist/compress/index.js +2 -2
  93. package/dist/compress/types.d.ts +1 -1
  94. package/dist/compress/types.d.ts.map +1 -1
  95. package/dist/cone/cone-generator.js +2 -3
  96. package/dist/database/_batch_update.js +1 -2
  97. package/dist/database/base-model.js +4 -4
  98. package/dist/database/db.js +4 -4
  99. package/dist/database/knex.js +2 -3
  100. package/dist/database/puri-wrapper.js +2 -3
  101. package/dist/database/puri.js +23 -22
  102. package/dist/database/puri.types.js +1 -2
  103. package/dist/database/transaction-context.js +1 -2
  104. package/dist/database/upsert-builder.js +2 -3
  105. package/dist/dict/en.js +2 -3
  106. package/dist/dict/index.js +3 -3
  107. package/dist/dict/ko.js +2 -3
  108. package/dist/dict/rc-keys.js +1 -2
  109. package/dist/dict/sd.js +2 -3
  110. package/dist/dict/sonamu-dictionary.js +7 -6
  111. package/dist/dict/utils.js +2 -3
  112. package/dist/entity/entity-manager.d.ts +66 -66
  113. package/dist/entity/entity-manager.js +4 -4
  114. package/dist/entity/entity-template-cone.js +2 -3
  115. package/dist/entity/entity.js +21 -18
  116. package/dist/env.js +1 -2
  117. package/dist/exceptions/error-handler.d.ts.map +1 -1
  118. package/dist/exceptions/error-handler.js +2 -3
  119. package/dist/exceptions/so-exceptions.js +2 -3
  120. package/dist/filter/index.js +3 -2
  121. package/dist/filter/types.js +1 -2
  122. package/dist/filter/utils.js +7 -6
  123. package/dist/index.js +39 -5
  124. package/dist/logger/category.js +2 -3
  125. package/dist/logger/configure.js +5 -5
  126. package/dist/migration/code-generation.js +23 -16
  127. package/dist/migration/index-where-predicate.js +2 -3
  128. package/dist/migration/migration-set.js +2 -3
  129. package/dist/migration/migrator.js +2 -3
  130. package/dist/migration/postgresql-schema-reader.js +6 -9
  131. package/dist/migration/slack-confirm.js +2 -3
  132. package/dist/naite/naite-reporter.js +2 -3
  133. package/dist/naite/naite.js +10 -8
  134. package/dist/runtime-type.js +2 -3
  135. package/dist/ssr/hmr-opt-out.js +1 -2
  136. package/dist/ssr/index.js +7 -4
  137. package/dist/ssr/registry.js +1 -2
  138. package/dist/ssr/renderer.js +2 -3
  139. package/dist/storage/base-file.js +1 -2
  140. package/dist/storage/buffered-file.js +2 -3
  141. package/dist/storage/drivers.js +1 -2
  142. package/dist/storage/index.js +2 -3
  143. package/dist/storage/s3-driver.js +1 -2
  144. package/dist/storage/storage-manager.js +2 -3
  145. package/dist/storage/uploaded-file.js +2 -3
  146. package/dist/stream/__tests__/ws-test-helpers.js +2 -3
  147. package/dist/stream/index.js +11 -2
  148. package/dist/stream/sse.js +1 -2
  149. package/dist/stream/ws-audience-resolver.js +2 -3
  150. package/dist/stream/ws-audience.js +1 -2
  151. package/dist/stream/ws-cluster-bus.js +1 -2
  152. package/dist/stream/ws-delivery.js +2 -3
  153. package/dist/stream/ws-frame.js +1 -2
  154. package/dist/stream/ws-local-connection-store.js +2 -3
  155. package/dist/stream/ws-presence-index.js +1 -2
  156. package/dist/stream/ws-presence-store.js +2 -3
  157. package/dist/stream/ws-registry.js +2 -3
  158. package/dist/stream/ws-session-id.js +1 -2
  159. package/dist/stream/ws-telemetry-memory.js +3 -4
  160. package/dist/stream/ws-telemetry-trace.js +1 -2
  161. package/dist/stream/ws-telemetry.js +2 -3
  162. package/dist/stream/ws.js +2 -3
  163. package/dist/syncer/api-parser.js +2 -3
  164. package/dist/syncer/checksum.js +4 -4
  165. package/dist/syncer/code-generator.js +4 -4
  166. package/dist/syncer/entity-operations.js +2 -3
  167. package/dist/syncer/event-batcher.js +1 -2
  168. package/dist/syncer/file-copy.js +2 -3
  169. package/dist/syncer/file-patterns.js +2 -3
  170. package/dist/syncer/file-tracking.js +2 -3
  171. package/dist/syncer/filesystem-dependencies.js +1 -2
  172. package/dist/syncer/index.js +8 -2
  173. package/dist/syncer/module-loader.js +8 -6
  174. package/dist/syncer/syncer-actions.js +8 -7
  175. package/dist/syncer/syncer.js +13 -8
  176. package/dist/syncer/watcher.js +2 -3
  177. package/dist/tasks/decorator.js +1 -2
  178. package/dist/tasks/step-wrapper.js +2 -3
  179. package/dist/tasks/workflow-manager.js +2 -3
  180. package/dist/template/entity-converter.js +17 -16
  181. package/dist/template/helpers.js +2 -3
  182. package/dist/template/implementations/entity.template.js +2 -3
  183. package/dist/template/implementations/entry-server.template.js +2 -3
  184. package/dist/template/implementations/generated.template.js +2 -3
  185. package/dist/template/implementations/generated_http.template.js +6 -6
  186. package/dist/template/implementations/generated_sso.template.js +2 -3
  187. package/dist/template/implementations/http_validators.template.js +2 -3
  188. package/dist/template/implementations/init_types.template.js +2 -3
  189. package/dist/template/implementations/model.template.js +4 -4
  190. package/dist/template/implementations/model_test.template.js +2 -3
  191. package/dist/template/implementations/queries.template.js +2 -3
  192. package/dist/template/implementations/sd.template.js +2 -3
  193. package/dist/template/implementations/services.template.js +2 -3
  194. package/dist/template/implementations/view_form.template.js +12 -9
  195. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  196. package/dist/template/implementations/view_list.template.d.ts.map +1 -1
  197. package/dist/template/implementations/view_list.template.js +19 -17
  198. package/dist/template/implementations/view_search_input.template.js +2 -3
  199. package/dist/template/index.js +9 -3
  200. package/dist/template/template-manager.js +2 -3
  201. package/dist/template/template-types.js +1 -2
  202. package/dist/template/template.js +2 -3
  203. package/dist/template/zod-converter.js +54 -47
  204. package/dist/testing/_relation-graph.js +2 -3
  205. package/dist/testing/bootstrap.js +2 -3
  206. package/dist/testing/data-explorer.js +2 -3
  207. package/dist/testing/dev-test-routes.js +2 -3
  208. package/dist/testing/dev-vitest-manager.js +15 -12
  209. package/dist/testing/faker-mappings.js +1 -2
  210. package/dist/testing/filesystem.js +2 -3
  211. package/dist/testing/fixture-generator.js +2 -3
  212. package/dist/testing/fixture-loader.js +1 -2
  213. package/dist/testing/fixture-manager.js +12 -9
  214. package/dist/testing/global-setup.js +5 -5
  215. package/dist/testing/index.js +6 -3
  216. package/dist/testing/naite-vitest-reporter.js +1 -2
  217. package/dist/testing/parallel-db-manager.js +2 -3
  218. package/dist/testing/vitest-helpers.js +2 -3
  219. package/dist/tooling/__tests__/helpers/sonamu-test-root.js +2 -3
  220. package/dist/tooling/cdd-service.js +1 -2
  221. package/dist/tooling/cli-tooling.js +1 -2
  222. package/dist/tooling/fixture-service.js +1 -2
  223. package/dist/tooling/index.js +1 -2
  224. package/dist/tooling/test-run-client.js +2 -3
  225. package/dist/tsdown.api.config.js +1 -2
  226. package/dist/types/types.js +2 -3
  227. package/dist/ui/ai-api.d.ts.map +1 -1
  228. package/dist/ui/ai-api.js +4 -5
  229. package/dist/ui/ai-client.d.ts +2 -2
  230. package/dist/ui/ai-client.d.ts.map +1 -1
  231. package/dist/ui/ai-client.js +9 -8
  232. package/dist/ui/api.d.ts.map +1 -1
  233. package/dist/ui/api.js +11 -8
  234. package/dist/ui/async-route.js +1 -2
  235. package/dist/ui/cdd-service.js +22 -21
  236. package/dist/ui/migrations-api.js +6 -5
  237. package/dist/ui-web/assets/index-QDMyy31K.js +180 -0
  238. package/dist/ui-web/assets/index-dV7akMFB.css +1 -0
  239. package/dist/ui-web/index.html +2 -2
  240. package/dist/utils/async-utils.js +1 -2
  241. package/dist/utils/class-name.js +1 -2
  242. package/dist/utils/console-util.js +1 -2
  243. package/dist/utils/controller.js +2 -3
  244. package/dist/utils/esm-utils.js +1 -2
  245. package/dist/utils/fs-utils.js +2 -3
  246. package/dist/utils/lodash-able.js +1 -2
  247. package/dist/utils/model.js +1 -2
  248. package/dist/utils/object-utils.js +2 -3
  249. package/dist/utils/path-utils.js +2 -3
  250. package/dist/utils/process-utils.js +2 -3
  251. package/dist/utils/runtime-value.js +1 -2
  252. package/dist/utils/sql-parser.js +2 -3
  253. package/dist/utils/type-utils.js +8 -8
  254. package/dist/utils/utils.js +2 -3
  255. package/dist/utils/zod-error.js +2 -3
  256. package/dist/vector/chunking.js +1 -2
  257. package/dist/vector/config.js +1 -2
  258. package/dist/vector/embedding.js +4 -4
  259. package/package.json +63 -63
  260. package/src/ai/agents/agent.ts +1 -1
  261. package/src/api/__tests__/sonamu.plugins.test.ts +11 -1
  262. package/src/api/__tests__/sonamu.websocket.test.ts +6 -10
  263. package/src/api/config.ts +1 -1
  264. package/src/api/context.ts +2 -8
  265. package/src/api/sonamu.ts +26 -21
  266. package/src/auth/audit-log/plugin.ts +2 -0
  267. package/src/compress/types.ts +1 -1
  268. package/src/exceptions/error-handler.ts +3 -2
  269. package/src/template/implementations/model.template.ts +3 -3
  270. package/src/template/implementations/view_list.template.ts +12 -13
  271. package/src/ui/ai-api.ts +4 -2
  272. package/src/ui/ai-client.ts +2 -2
  273. package/src/ui/api.ts +58 -62
  274. package/dist/ui-web/assets/index-BMdIyKXS.css +0 -1
  275. package/dist/ui-web/assets/index-LpE8u19O.js +0 -178
@@ -1,6 +1,6 @@
1
1
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
2
2
  import { Template, init_template } from "../template.js";
3
- //#region src/template/implementations/view_id_all_select.template.ts
3
+ // src/template/implementations/view_id_all_select.template.ts
4
4
  init_entity_manager();
5
5
  init_template();
6
6
  var Template__view_id_all_select = class extends Template {
@@ -30,7 +30,6 @@ ${JSON.stringify({
30
30
  };
31
31
  }
32
32
  };
33
- //#endregion
34
33
  export { Template__view_id_all_select };
35
34
 
36
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hbGxfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYWxsX3NlbGVjdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9SWRBbGxTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hbGxfc2VsZWN0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuLypcbnZpZXdfaWRfYWxsX3NlbGVjdFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztvQkFBMkQ7Y0FHckI7QUFFdEMsSUFBYSwrQkFBYixjQUFrRCxTQUFTO0NBQ3pELGNBQWM7RUFDWixNQUFNLG9CQUFvQjtDQUM1QjtDQUVBLGlCQUFpQixPQUEwQjtFQUN6QyxPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVE7RUFDckM7Q0FDRjtDQUVBLE9BQU8sRUFBRSxZQUFtRDtFQUMxRCxNQUFNLFFBQVEsY0FBYyxlQUFlLFFBQVE7RUFFbkQsT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUIsS0FBSztHQUM5QixNQUFNOzs7RUFHVixLQUFLLFVBQVU7SUFDZixLQUFLLEtBQUs7SUFDVixTQUFTO0dBQ1gsQ0FBQyxFQUFFOztRQUVLLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hbGxfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYWxsX3NlbGVjdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9SWRBbGxTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hbGxfc2VsZWN0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuLypcbnZpZXdfaWRfYWxsX3NlbGVjdFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUEyRCxvQkFBQTtBQUdyQixjQUFBO0FBRXRDLElBQWEsK0JBQWIsY0FBa0QsU0FBUztDQUN6RCxjQUFjO0VBQ1osTUFBTSxvQkFBb0I7Q0FDNUI7Q0FFQSxpQkFBaUIsT0FBMEI7RUFDekMsT0FBTztHQUNMLFFBQVE7R0FDUixNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRO0VBQ3JDO0NBQ0Y7Q0FFQSxPQUFPLEVBQUUsWUFBbUQ7RUFDMUQsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLEtBQUs7R0FDOUIsTUFBTTs7O0VBR1YsS0FBSyxVQUFVO0lBQ2YsS0FBSyxLQUFLO0lBQ1YsU0FBUztHQUNYLENBQUMsRUFBRTs7UUFFSyxLQUFLO0dBQ1AsWUFBWSxDQUFDO0VBQ2Y7Q0FDRjtBQUNGIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAO7E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWvC,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,cAEC;IAED,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;QAErC,MAAM;QACN,IAAI;MAEP;IAEQ,mBAAmB,IAAI,MAAM,EAAE,GAAG,IAAI,CAE9C;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW,UAInF;IAED,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuFR;IAED,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAsBnB;IAED,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,UA+BhF;IAED,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,UAgC1E;IAED,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE;;;;;MAkBlC;IAEK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;OAyftD;CACF"}
1
+ {"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAO7E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWvC,qBAAa,mBAAoB,SAAQ,QAAQ;IAC/C,cAEC;IAED,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;QAErC,MAAM;QACN,IAAI;MAEP;IAEQ,mBAAmB,IAAI,MAAM,EAAE,GAAG,IAAI,CAE9C;IAED,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW,UAInF;IAED,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM,CAuFR;IAED,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAsBnB;IAED,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,UA+BhF;IAED,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB,UAgC1E;IAED,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE;;;;;MAkBlC;IAEK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;OAwftD;CACF"}
@@ -4,7 +4,7 @@ import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropF
4
4
  import inflection from "inflection";
5
5
  import { z } from "zod";
6
6
  import { flat } from "radashi";
7
- //#region src/template/implementations/view_list.template.ts
7
+ // src/template/implementations/view_list.template.ts
8
8
  init_entity_manager();
9
9
  init_helpers();
10
10
  init_template();
@@ -40,7 +40,8 @@ var Template__view_list = class extends Template {
40
40
  case "string-id": return `<>{${colName}}</>`;
41
41
  case "number-fk_id":
42
42
  case "string-fk_id": try {
43
- return `<>${getRelationPropFromColName(entityId, col.name.includes(".") ? (col.name.split(".").pop() ?? col.name).replace("_id", "") : col.name.replace("_id", "")).with}#{${colName}}</>`;
43
+ const baseName = col.name.includes(".") ? (col.name.split(".").pop() ?? col.name).replace("_id", "") : col.name.replace("_id", "");
44
+ return `<>${getRelationPropFromColName(entityId, baseName).with}#{${colName}}</>`;
44
45
  } catch {
45
46
  return `<>{${colName}}</>`;
46
47
  }
@@ -76,11 +77,12 @@ var Template__view_list = class extends Template {
76
77
  return [`import { ${enumId}Label } from '@/services/sonamu.generated';`];
77
78
  } else if (col.renderType === "object") try {
78
79
  const relProp = getRelationPropFromColName(entityId, col.name);
79
- return flat((col.children ?? []).map((child) => {
80
+ const result = (col.children ?? []).map((child) => {
80
81
  entityId = relProp.with;
81
82
  names = EntityManager.getNamesFromId(relProp.with);
82
83
  return this.renderColumnImport(entityId, child, names);
83
- }));
84
+ });
85
+ return flat(result);
84
86
  } catch {
85
87
  return [null];
86
88
  }
@@ -92,17 +94,18 @@ var Template__view_list = class extends Template {
92
94
  }
93
95
  renderFilterImport(entityId, col, names) {
94
96
  if (col.name === "search") return `import { ${names.capital}SearchInput } from "@/components/${names.fs}/${names.capital}SearchInput";`;
95
- else if (col.renderType === "enums") if (col.name === "orderBy") {
96
- const componentId = `${names.capital}${inflection.camelize(col.name)}Select`;
97
- return `import { ${componentId} } from "@/components/${names.fs}/${componentId}";`;
98
- } else try {
99
- const { id, targetEntityNames: targetMDNames } = getEnumInfoFromColName(entityId, col.name);
100
- const componentId = `${id}Select`;
101
- return `import { ${componentId} } from "@/components/${targetMDNames.fs}/${componentId}";`;
102
- } catch {
103
- return "";
104
- }
105
- else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
97
+ else if (col.renderType === "enums") {
98
+ if (col.name === "orderBy") {
99
+ const componentId = `${names.capital}${inflection.camelize(col.name)}Select`;
100
+ return `import { ${componentId} } from "@/components/${names.fs}/${componentId}";`;
101
+ } else try {
102
+ const { id, targetEntityNames: targetMDNames } = getEnumInfoFromColName(entityId, col.name);
103
+ const componentId = `${id}Select`;
104
+ return `import { ${componentId} } from "@/components/${targetMDNames.fs}/${componentId}";`;
105
+ } catch {
106
+ return "";
107
+ }
108
+ } else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
106
109
  const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
107
110
  const targetNames = EntityManager.getNamesFromId(relProp.with);
108
111
  const componentId = `${relProp.with}IdAsyncSelect`;
@@ -552,7 +555,6 @@ ${filterColumns.some((col) => col.name === "orderBy") ? ` <Enum
552
555
  };
553
556
  }
554
557
  };
555
- //#endregion
556
558
  export { Template__view_list };
557
559
 
558
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19saXN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJpbmdOb2RlLCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSxcbiAgZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUsXG4gIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lLFxufSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5mdW5jdGlvbiBnZXRDb25maWdFbnVtSWQoY29uZmlnOiBSZW5kZXJpbmdOb2RlW1wiY29uZmlnXCJdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb25maWcgfHwgIShcImVudW1JZFwiIGluIGNvbmZpZykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29uZmlnLmVudW1JZCkgPT09IFwiW29iamVjdCBTdHJpbmddXCJcbiAgICA/IFN0cmluZyhjb25maWcuZW51bUlkKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfbGlzdCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2xpc3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9pbmRleC50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5saXN0TWFuYWdlXCIsIFwiY29tbW9uLmFsbFwiXTtcbiAgfVxuXG4gIHdyYXBUYyhib2R5OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjb2xsYXBzaW5nOiBib29sZWFuID0gdHJ1ZSwgY2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgcmV0dXJuIGA8VGFibGUuQ2VsbCBrZXk9XCIke2tleX1cIiR7Y29sbGFwc2luZyA/IFwiIGNvbGxhcHNpbmdcIiA6IFwiXCJ9JHtcbiAgICAgIGNsYXNzTmFtZSA/IGAgY2xhc3NOYW1lPXtcXGAke2NsYXNzTmFtZX1cXGB9YCA6IFwiXCJcbiAgICB9PiR7Ym9keX08L1RhYmxlLkNlbGw+YDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGNvbDogUmVuZGVyaW5nTm9kZSxcbiAgICBuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsXG4gICAgcGFyZW50T2JqOiBzdHJpbmcgPSBcInJvd1wiLFxuICAgIHdpdGhvdXROYW1lOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZyB7XG4gICAgLy8g7KSR7LKpIOqyveuhnCDsspjrpqwgKOyYiDogXCJ1c2VyLm5hbWVcIiAtPiBcInJvdy51c2VyPy5uYW1lXCIpXG4gICAgbGV0IGNvbE5hbWU6IHN0cmluZztcbiAgICBpZiAod2l0aG91dE5hbWUpIHtcbiAgICAgIGNvbE5hbWUgPSBwYXJlbnRPYmo7XG4gICAgfSBlbHNlIGlmIChjb2wubmFtZS5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIC8vIOykkeyyqSDqsr3roZzripQgb3B0aW9uYWwgY2hhaW5pbmfsnLzroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGNvbC5uYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgIGNvbE5hbWUgPSBgJHtwYXJlbnRPYmp9LiR7cGFydHMuam9pbihcIj8uXCIpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbE5hbWUgPSBgJHtwYXJlbnRPYmp9LiR7Y29sLm5hbWV9YDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWRhdGVcIjpcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKVxuICAgICAgICAgICAgPyAoY29sLm5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGNvbC5uYW1lKS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpXG4gICAgICAgICAgICA6IGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIik7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcEZrID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDw+JHtyZWxQcm9wRmsud2l0aH0jeyR7Y29sTmFtZX19PC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICBpZiAoY29sLm51bGxhYmxlIHx8IGNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4+eyR7Y29sTmFtZX0gPyBkYXRldGltZUYoJHtjb2xOYW1lfSkgOiAnLSd9PC9zcGFuPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3Bhbj57ZGF0ZXRpbWVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwic3RyaW5nLWRhdGV0aW1lXCI6XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUgfHwgY29sLm5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3Bhbj57JHtjb2xOYW1lfSA/IGRhdGVGKCR7Y29sTmFtZX0pIDogJy0nfTwvc3Bhbj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4+e2RhdGVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sTmFtZX0gPyA8QmFkZ2UgdmFyaWFudD1cImRlZmF1bHRcIj5PPC9CYWRnZT4gOiA8QmFkZ2UgdmFyaWFudD1cInNlY29uZGFyeVwiPlg8L0JhZGdlPn08Lz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9JHtlbnVtSWR9TGFiZWxbJHtjb2xOYW1lfV19PC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj57ICR7Y29sTmFtZX0/Lm1hcCgociwgaSkgPT4gJHtcbiAgICAgICAgICBjb2wubnVsbGFibGUgPyBgciAmJiBgIDogXCJcIlxuICAgICAgICB9PGltZyBrZXk9e2l9IHNyYz17cn0gYWx0PXtcXGAke2NvbC5sYWJlbCA/PyBjb2wubmFtZX0gXFwke2kgKyAxfVxcYH0gY2xhc3NOYW1lPVwiaC04IHctOCBvYmplY3QtY292ZXIgcm91bmRlZFwiIC8+KSB9PC9kaXY+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+eyR7Y29sTmFtZX0gPyA8aW1nIHNyYz17JHtjb2xOYW1lfS51cmx9IGFsdD17JHtjb2xOYW1lfS5uYW1lfSBjbGFzc05hbWU9XCJoLTggdy04IG9iamVjdC1jb3ZlciByb3VuZGVkXCIgLz4gOiAnLSd9PC9kaXY+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj57ICR7Y29sTmFtZX0/Lm1hcCgociwgaSkgPT4gJHtcbiAgICAgICAgICBjb2wubnVsbGFibGUgPyBgciAmJiBgIDogXCJcIlxuICAgICAgICB9PGltZyBrZXk9e2l9IHNyYz17ci51cmx9IGFsdD17XFxgJHtjb2wubGFiZWwgPz8gY29sLm5hbWV9IFxcJHtpICsgMX1cXGB9IGNsYXNzTmFtZT1cImgtOCB3LTggb2JqZWN0LWNvdmVyIHJvdW5kZWRcIiAvPikgfTwvZGl2PmA7XG4gICAgICBjYXNlIFwibnVtYmVyLXBsYWluXCI6XG4gICAgICAgIHJldHVybiBgPD57JHtjb2wubnVsbGFibGUgfHwgY29sLm5hbWUuaW5jbHVkZXMoXCIuXCIpID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9bnVtRigke2NvbE5hbWV9KX08Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57JHtjb2wubnVsbGFibGUgPyBgJHtjb2xOYW1lfSA/IGAgOiBcIlwifUpTT04uc3RyaW5naWZ5KCR7Y29sTmFtZX0pJHtjb2wubnVsbGFibGUgPyBgIDogJy0nYCA6IFwiXCJ9fTwvc3Bhbj5gO1xuICAgICAgY2FzZSBcIm9iamVjdC1waWNrXCI6IHtcbiAgICAgICAgY29uc3QgcGlja2VkQ2hpbGQgPSBjb2wuY2hpbGRyZW4/LmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09PSBjb2wuY29uZmlnPy5waWNrZWQpO1xuICAgICAgICBpZiAoIXBpY2tlZENoaWxkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvYmplY3QtcGljayDshKDtg50g7Iuk7YyoICjsmKTruIzsoJ3tirg6ICR7Y29sLm5hbWV9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbihcbiAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICBwaWNrZWRDaGlsZCxcbiAgICAgICAgICBuYW1lcyxcbiAgICAgICAgICBgJHtjb2xOYW1lfSR7Y29sLm51bGxhYmxlID8gXCI/XCIgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8PnsgLyogYXJyYXkgJHtjb2xOYW1lfSAqLyB9PC8+YDtcbiAgICAgIGNhc2UgXCJ2ZWN0b3JcIjpcbiAgICAgICAgLy8gdmVjdG9yIO2DgOyeheydgCDssKjsm5Ag7IiY66eMIO2RnOyLnCAo7Iuk7KCcIOuNsOydtO2EsOuKlCDrhIjrrLQg6rmAKVxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gPyBgIDogXCJcIn1bVmVjdG9yOiB7JHtjb2xOYW1lfSR7Y29sLm51bGxhYmxlID8gXCJcIiA6IFwiID8/IFtdXCJ9Lmxlbmd0aH1kXSR7Y29sLm51bGxhYmxlID8gXCIgOiAnLSdcIiA6IFwiXCJ9fTwvPmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIAg7Lus65+8ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgY29sOiBSZW5kZXJpbmdOb2RlLFxuICAgIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgKTogKHN0cmluZyB8IG51bGwpW10ge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUobmFtZXMuY2FwaXRhbCwgY29sLm5hbWUpO1xuICAgICAgcmV0dXJuIFtgaW1wb3J0IHsgJHtlbnVtSWR9TGFiZWwgfSBmcm9tICdAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWQnO2BdO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoY29sLmNoaWxkcmVuID8/IFtdKS5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgZW50aXR5SWQgPSByZWxQcm9wLndpdGg7XG4gICAgICAgICAgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjaGlsZCwgbmFtZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZsYXQocmVzdWx0KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgaWYgKCFjb2wuZWxlbWVudCkgcmV0dXJuIFtudWxsXTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sLmVsZW1lbnQsIG5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGxdO1xuICB9XG5cbiAgcmVuZGVyRmlsdGVySW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICByZXR1cm4gYGltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dCB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0XCI7YDtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgY29sLm5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRNRE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7cmVsUHJvcC53aXRofUlkQXN5bmNTZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgOuKpe2VnCDtlYTthLAg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyRmlsdGVyKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NsZWFyYWJsZSA9IGNvbC5vcHRpb25hbCA9PT0gdHJ1ZSAmJiBjb2wubmFtZSAhPT0gXCJvcmRlckJ5XCI7XG4gICAgbGV0IGNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGNvbXBvbmVudElkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwifSAvPmA7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtyZWxQcm9wLndpdGh9SWRBc3luY1NlbGVjdGA7XG4gICAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICBpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwiXG4gICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDroIzrjZQg67aI6rCA64ql7ZWcIO2VhO2EsCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0KGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSkge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgIG9yZGVyQnk6IFwiXCIsXG4gICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICBoYXNTZWFyY2g6IGZhbHNlLFxuICAgICAgaGFzT3JkZXJCeTogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlckJ5Wm9kVHlwZSA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpPy56b2RUeXBlO1xuICAgIGlmIChvcmRlckJ5Wm9kVHlwZSAmJiBvcmRlckJ5Wm9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgZGVmLm9yZGVyQnkgPSBPYmplY3Qua2V5cyhvcmRlckJ5Wm9kVHlwZS5lbnVtKVswXTtcbiAgICAgIGRlZi5oYXNPcmRlckJ5ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoWm9kVHlwZSA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJzZWFyY2hcIik/LnpvZFR5cGU7XG4gICAgaWYgKHNlYXJjaFpvZFR5cGUgJiYgc2VhcmNoWm9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgZGVmLnNlYXJjaCA9IE9iamVjdC5rZXlzKHNlYXJjaFpvZFR5cGUuZW51bSlbMF07XG4gICAgICBkZWYuaGFzU2VhcmNoID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfbGlzdFwiXSkge1xuICAgIGNvbnN0IHsgZ2V0Q29sdW1uc05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3QgeyBnZXRab2RUeXBlQnlJZCwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcblxuICAgIGNvbnN0IGNvbHVtbnNOb2RlID0gYXdhaXQgZ2V0Q29sdW1uc05vZGUoZW50aXR5SWQsIFwiQVwiKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfUxpc3RQYXJhbXNgKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUobGlzdFBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAvLyBQSyDtg4DsnoUg6rCQ7KeAXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcblxuICAgIC8vIOyLpOygnCDrpqzsiqTtirgg7Lus65+8XG4gICAgY29uc3QgY29sdW1ucyA9IC8qIFNBRkVUWTogQ29sdW1ucyDroIzrjZTrp4Eg64W465Oc7J2YIOyekOyLneydgCDrqqjrkZAg7Lus65+8IOuFuOuTnOuLpC4gKi8gKFxuICAgICAgY29sdW1uc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdXG4gICAgKVxuXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IChhLm5hbWUgPT09IFwiaWRcIiA/IC0xIDogYi5uYW1lID09PSBcImlkXCIgPyAxIDogMCkpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSB0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyk7XG5cbiAgICAgICAgLy8g652867KoIOyDneyEsTogY29tbW9uIO2VhOuTnChjcmVhdGVkX2F0KeuKlCBTRChcImNvbW1vbi57ZmllbGR9XCIpLCBlbnRpdHkg7ZWE65Oc64qUIFNEKFwiZW50aXR5LntFbnRpdHl9LntmaWVsZH1cIilcbiAgICAgICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgbGFiZWwgPSAnXCJJRFwiJztcbiAgICAgICAgfSBlbHNlIGlmIChbXCJjcmVhdGVkX2F0XCJdLmluY2x1ZGVzKGNvbC5uYW1lKSkge1xuICAgICAgICAgIC8vIGNhbWVsQ2FzZeuhnCDrs4DtmZggKGNyZWF0ZWRfYXQgLT4gY3JlYXRlZEF0KVxuICAgICAgICAgIGNvbnN0IGNhbWVsTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBjaGFyKSA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgIGxhYmVsID0gYFNEKFwiY29tbW9uLiR7Y2FtZWxOYW1lfVwiKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBsYWJlbCA9IGBTRChcImVudGl0eS4ke25hbWVzLmNhcGl0YWx9LiR7bGFiZWxOYW1lfVwiKWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbC5uYW1lLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHRjOiBgKHJvdykgPT4gJHtyZW5kZXJlZH1gLFxuICAgICAgICAgIGZpdDpcbiAgICAgICAgICAgIGNvbC5uYW1lID09PSBcImlkXCIgfHxcbiAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1pZFwiIHx8XG4gICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8XG4gICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIixcbiAgICAgICAgICBhbGlnbjogY29sLm5hbWUgPT09IFwiaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItaWRcIiA/IFwiY2VudGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7xcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID1cbiAgICAgIC8qIFNBRkVUWTogTGlzdFBhcmFtcyDroIzrjZTrp4Eg64W465Oc7J2YIOyekOyLneydgCDrqqjrkZAg7ZWE7YSwIOy7rOufvCDrhbjrk5zri6QuICovIChcbiAgICAgICAgbGlzdFBhcmFtc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdXG4gICAgICApXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgKGNvbCkgPT5cbiAgICAgICAgICAgIGNvbC5uYW1lICE9PSBcImlkXCIgJiZcbiAgICAgICAgICAgIGNvbC5uYW1lICE9PSBcInF1ZXJ5TW9kZVwiICYmXG4gICAgICAgICAgICBbXCJlbnVtc1wiLCBcIm51bWJlci1pZFwiLCBcIm51bWJlci1ma19pZFwiLCBcInN0cmluZy1ma19pZFwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSksXG4gICAgICAgIClcbiAgICAgICAgLy8gb3JkZXJCeeqwgCDqsIDsnqUg65Kk66GcIOyYpOqyjCDsiJzshJwg7KGw7KCVXG4gICAgICAgIC50b1NvcnRlZCgoYSkgPT4ge1xuICAgICAgICAgIHJldHVybiBhLm5hbWUgPT09IFwib3JkZXJCeVwiID8gMSA6IC0xO1xuICAgICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7zsnYQg7ZSE66asIO2FnO2UjOumv+ycvOuhnCDshKTsoJVcbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSBbXTtcblxuICAgIC8vIOy7rOufvOyXkOyEnCDsgqzsmqntlZjripQgZW51beuTpCDsiJjsp5FcbiAgICBjb25zdCBjb2x1bW5FbnVtczogc3RyaW5nW10gPSBbXTtcbiAgICAoY29sdW1uc05vZGUuY2hpbGRyZW4gPz8gW10pLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBjb2x1bW5FbnVtcy5wdXNoKGVudW1JZCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIOuUlO2PtO2KuCDtjIzrnbzrr7jthLBcbiAgICAvLyBjb25zdCBkZWYgPSB0aGlzLmdldERlZmF1bHQoZmlsdGVyQ29sdW1ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7IHVzZVN0YXRlLCBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVJvdXRlLCB1c2VOYXZpZ2F0ZSB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCI7XG5cbmltcG9ydCB7IENhcmQsIENhcmRDb250ZW50LCBDYXJkSGVhZGVyIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgQmFkZ2UgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBQYWdpbmF0aW9uLCBUYWJsZSwgVGFibGVCb2R5LCBUYWJsZUNlbGwsIHR5cGUgVGFibGVDb2wsIFRhYmxlSGVhZCwgVGFibGVIZWFkZXIsIFRhYmxlUm93IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgRW51bVNlbGVjdCB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IEFsZXJ0RGlhbG9nLCBBbGVydERpYWxvZ0FjdGlvbiwgQWxlcnREaWFsb2dDYW5jZWwsIEFsZXJ0RGlhbG9nQ29udGVudCwgQWxlcnREaWFsb2dEZXNjcmlwdGlvbiwgQWxlcnREaWFsb2dGb290ZXIsIEFsZXJ0RGlhbG9nSGVhZGVyLCBBbGVydERpYWxvZ1RpdGxlIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgSW5wdXQgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IFNvbmFtdUZpbHRlck1vZGFsLCBTb25hbXVGaWx0ZXJQb3BvdmVyLCBleHRyYWN0RmllbGRNZXRhRnJvbVNjaGVtYSwgdHlwZSBSdWxlIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuXG5pbXBvcnQgeyB1c2VMaXN0UGFyYW1zLCBudW1GLCBkYXRlRiwgZGF0ZXRpbWVGIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0QSwgJHtuYW1lcy5jYXBpdGFsfUJhc2VTY2hlbWEgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiO1xuaW1wb3J0IHsgJHsoKCkgPT4ge1xuICAgICAgICAvLyDquLDrs7ggZW51bSDsiJjsp5EgKGZpbHRlckNvbHVtbnPsl5Ag7J6I64qUIOqyg+unjClcbiAgICAgICAgY29uc3QgYmFzZUVudW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBpZiAoZmlsdGVyQ29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIikpIHtcbiAgICAgICAgICBiYXNlRW51bXMucHVzaChgJHtuYW1lcy5jYXBpdGFsfU9yZGVyQnlgLCBgJHtuYW1lcy5jYXBpdGFsfU9yZGVyQnlMYWJlbGApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJDb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwic2VhcmNoXCIpKSB7XG4gICAgICAgICAgYmFzZUVudW1zLnB1c2goYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGAsIGAke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRMYWJlbGApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7ZWE7YSwIGVudW0g7IiY7KeRIChjb25maWcuZW51bUlkIOyasOyEoCwg7JeG7Jy866m0IGdldEVudW1JbmZvRnJvbUNvbE5hbWUpXG4gICAgICAgIC8vIFNBRkVUWTog66eI7KeA66eJIEJvb2xlYW4g7ZWE7YSw6rCAIG51bGzsnYQg7KCc6rGw7ZW0IGVudW0g7Iud67OE7J6QIOusuOyekOyXtOunjCDrgqjquLTri6QuXG4gICAgICAgIGNvbnN0IGZpbHRlckVudW1JZHMgPSBmaWx0ZXJDb2x1bW5zXG4gICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgIChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIgJiYgY29sLm5hbWUgIT09IFwic2VhcmNoXCIgJiYgY29sLm5hbWUgIT09IFwib3JkZXJCeVwiLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZ0VudW1JZCA9IGdldENvbmZpZ0VudW1JZChjb2wuY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWdFbnVtSWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZ0VudW1JZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHsgaWQ6IGVudW1JZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICByZXR1cm4gZW51bUlkO1xuICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcihCb29sZWFuKSBhcyBzdHJpbmdbXTtcblxuICAgICAgICAvLyDrqqjrk6AgZW51bSDtlansuZjqs6Ag7KSR67O1IOygnOqxsFxuICAgICAgICBjb25zdCBhbGxFbnVtcyA9IFsuLi5uZXcgU2V0KFsuLi5maWx0ZXJFbnVtSWRzLCAuLi5jb2x1bW5FbnVtc10pXTtcbiAgICAgICAgY29uc3QgZW51bUltcG9ydHMgPSBhbGxFbnVtcy5mbGF0TWFwKChlbnVtSWQpID0+IFtgJHtlbnVtSWR9YCwgYCR7ZW51bUlkfUxhYmVsYF0pO1xuXG4gICAgICAgIHJldHVybiBbLi4uYmFzZUVudW1zLCAuLi5lbnVtSW1wb3J0c10uam9pbihcIiwgXCIpO1xuICAgICAgfSkoKX0gfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyBJZEFzeW5jU2VsZWN0IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuJHsoKCkgPT4ge1xuICAvLyBGSyDtlYTrk5zsnZggQXN5bmNJZENvbmZpZyBpbXBvcnRcbiAgY29uc3QgZmtDb2x1bW5zID0gZmlsdGVyQ29sdW1ucy5maWx0ZXIoXG4gICAgKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIsXG4gICk7XG4gIGNvbnN0IGNvbmZpZ05hbWVzID0gZmtDb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4gYCR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWdgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0pXG4gICAgLmZpbHRlcihCb29sZWFuKTtcbiAgcmV0dXJuIGNvbmZpZ05hbWVzLmxlbmd0aCA+IDBcbiAgICA/IGBpbXBvcnQgeyAke2NvbmZpZ05hbWVzLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtgXG4gICAgOiBcIlwiO1xufSkoKX1cblxuaW1wb3J0IEVkaXRJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NxdWFyZS1wZW5cIjtcbmltcG9ydCBUcmFzaEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvdHJhc2gtMlwiO1xuaW1wb3J0IEZpbHRlckljb24gZnJvbSBcIn5pY29ucy9tZGkvZmlsdGVyLXZhcmlhbnRcIjtcbmltcG9ydCBMaXN0SWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtYXQtbGlzdC1idWxsZXRlZFwiO1xuaW1wb3J0IFNlYXJjaEljb24gZnJvbSBcIn5pY29ucy9tZGkvbWFnbmlmeVwiO1xuaW1wb3J0IHsgU0QgfSBmcm9tIFwiQC9pMThuL3NkLmdlbmVyYXRlZFwiO1xuXG5leHBvcnQgY29uc3QgUm91dGUgPSBjcmVhdGVGaWxlUm91dGUoXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH0vXCIpKHtcXG4gIGhlYWQ6ICgpID0+ICh7XFxuICAgIG1ldGE6IFtcXG4gICAgICB7IHRpdGxlOiBcIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNhcGl0YWx9IExpc3RcIiB9LFxcbiAgICAgIHsgbmFtZTogXCJkZXNjcmlwdGlvblwiLCBjb250ZW50OiBTRChcImVudGl0eS5saXN0TWFuYWdlXCIpKFwiJHtlbnRpdHkudGl0bGUgPz8gbmFtZXMuY2FwaXRhbH1cIikgfSxcXG4gICAgXSxcXG4gIH0pLFxcbiAgY29tcG9uZW50OiAke25hbWVzLmNhcGl0YWx9TGlzdCxcXG59KTtcXG5cXG50eXBlICR7bmFtZXMuY2FwaXRhbH1MaXN0UHJvcHMgPSB7fTtcblxuZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUxpc3Qoe306ICR7bmFtZXMuY2FwaXRhbH1MaXN0UHJvcHMpIHtcbiAgY29uc3QgbmF2aWdhdGUgPSB1c2VOYXZpZ2F0ZSgpO1xuXG4gIC8vIOyDge2DnCDqtIDrpqxcbiAgY29uc3QgW3NlbGVjdGVkSXRlbXMsIHNldFNlbGVjdGVkSXRlbXNdID0gdXNlU3RhdGU8U2V0PCR7aWRUc1R5cGV9Pj4obmV3IFNldCgpKTtcbiAgY29uc3QgW2RlbGV0ZURpYWxvZ09wZW4sIHNldERlbGV0ZURpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbaXRlbVRvRGVsZXRlLCBzZXRJdGVtVG9EZWxldGVdID0gdXNlU3RhdGU8eyBpZDogJHtpZFRzVHlwZX07IG5hbWU/OiBzdHJpbmcgfSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZmlsdGVyTW9kYWxPcGVuLCBzZXRGaWx0ZXJNb2RhbE9wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbYXBwbGllZFJ1bGVzLCBzZXRBcHBsaWVkUnVsZXNdID0gdXNlU3RhdGU8UnVsZVtdPihbXSk7XG5cbiAgLy8g66as7Iqk7Yq4IO2VhO2EsFxuICBjb25zdCB7IGxpc3RQYXJhbXMsIHJlZ2lzdGVyLCBzZXRMaXN0UGFyYW1zIH0gPSB1c2VMaXN0UGFyYW1zKCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zLCB7XG4gICAgbnVtOiAxMCxcbiAgICBwYWdlOiAxLFxuICAgIGtleXdvcmQ6IFwiXCIsJHtcbiAgICAgIGZpbHRlckNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJzZWFyY2hcIilcbiAgICAgICAgPyBgXG4gICAgc2VhcmNoOiAke25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGQub3B0aW9uc1swXSxgXG4gICAgICAgIDogXCJcIlxuICAgIH0ke1xuICAgICAgZmlsdGVyQ29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIilcbiAgICAgICAgPyBgXG4gICAgb3JkZXJCeTogJHtuYW1lcy5jYXBpdGFsfU9yZGVyQnkub3B0aW9uc1swXSxgXG4gICAgICAgIDogXCJcIlxuICAgIH1cbiAgICBzb25hbXVGaWx0ZXI6IHt9LFxuICB9KTtcblxuICAvLyDrpqzsiqTtirgg7L+866asXG4gIGNvbnN0IHsgZGF0YSwgcmVmZXRjaCwgaXNMb2FkaW5nIH0gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2Uke25hbWVzLmNhcGl0YWxQbHVyYWx9KFwiQVwiLCBsaXN0UGFyYW1zKTtcbiAgY29uc3QgeyByb3dzLCB0b3RhbCB9ID0gZGF0YSA/PyB7fTtcblxuICAvLyDtmITsnqwg6rK966Gc7JmAIO2DgOydtO2LgFxuICBjb25zdCBQQUdFID0ge1xuICAgIHJvdXRlOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiLFxuICAgIHRpdGxlOiBTRChcImVudGl0eS5saXN0XCIpKFNEKFwiZW50aXR5LiR7bmFtZXMuY2FwaXRhbH1cIikpLFxuICB9O1xuXG4gIC8vIOy7rOufvCDsoJXsnZhcbiAgdHlwZSAke25hbWVzLmNhcGl0YWx9Um93ID0gTm9uTnVsbGFibGU8dHlwZW9mIHJvd3M+W251bWJlcl07XG4gIGNvbnN0IGNvbHVtbnM6IFRhYmxlQ29sPCR7bmFtZXMuY2FwaXRhbH1Sb3c+W10gPSBbXG4ke2NvbHVtbnNcbiAgLm1hcChcbiAgICAoY29sKSA9PiBgICAgIHtcbiAgICAgIGxhYmVsOiAke2NvbC5sYWJlbH0sXG4gICAgICB0YzogJHtjb2wudGN9LCR7XG4gICAgICAgIGNvbC5maXRcbiAgICAgICAgICA/IGBcbiAgICAgIGZpdDogdHJ1ZSxgXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9JHtcbiAgICAgICAgY29sLmFsaWduXG4gICAgICAgICAgPyBgXG4gICAgICBhbGlnbjogXCIke2NvbC5hbGlnbn1cIixgXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG4gICAgfWAsXG4gIClcbiAgLmpvaW4oXCIsXFxuXCIpfSxcbiAgICB7XG4gICAgICBsYWJlbDogU0QoXCJjb21tb24ubWFuYWdlXCIpLFxuICAgICAgZml0OiB0cnVlLFxuICAgICAgYWxpZ246IFwiY2VudGVyXCIsXG4gICAgICB0YzogKHJvdykgPT4gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGdhcC0xXCI+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cInllbGxvd1wiXG4gICAgICAgICAgICBzaXplPVwieHNcIlxuICAgICAgICAgICAgaWNvbj17PEVkaXRJY29uIC8+fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gbmF2aWdhdGUoeyB0bzogXFxgXFwke1BBR0Uucm91dGV9L2Zvcm1cXGAsIHNlYXJjaDogeyBpZDogcm93LmlkIH0gfSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwicmVkXCJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICBpY29uPXs8VHJhc2hJY29uIC8+fVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlRGVsZXRlQ2xpY2socm93LmlkKX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICksXG4gICAgfSxcbiAgXTtcblxuICAvLyDshKDtg50g7ZW465Ok65+sXG4gIGNvbnN0IGhhbmRsZVRvZ2dsZUl0ZW0gPSAoaWQ6ICR7aWRUc1R5cGV9KSA9PiB7XG4gICAgY29uc3QgbmV3U2VsZWN0aW9uID0gbmV3IFNldChzZWxlY3RlZEl0ZW1zKTtcbiAgICBpZiAobmV3U2VsZWN0aW9uLmhhcyhpZCkpIHtcbiAgICAgIG5ld1NlbGVjdGlvbi5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdTZWxlY3Rpb24uYWRkKGlkKTtcbiAgICB9XG4gICAgc2V0U2VsZWN0ZWRJdGVtcyhuZXdTZWxlY3Rpb24pO1xuICB9O1xuXG4gIGNvbnN0IGlzQWxsU2VsZWN0ZWQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChyb3dzPy5sZW5ndGggPz8gMCkgPiAwICYmIHJvd3MhLmV2ZXJ5KChyb3cpID0+IHNlbGVjdGVkSXRlbXMuaGFzKHJvdy5pZCkpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbCA9IChjaGVja2VkOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIHNldFNlbGVjdGVkSXRlbXMobmV3IFNldChyb3dzPy5tYXAoKHJvdykgPT4gcm93LmlkKSA/PyBbXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RlZEl0ZW1zKG5ldyBTZXQoKSk7XG4gICAgfVxuICB9O1xuXG4gIC8vIOyCreygnCDtlbjrk6Trn6xcbiAgY29uc3QgaGFuZGxlRGVsZXRlQ2xpY2sgPSAoaWQ6ICR7aWRUc1R5cGV9LCBuYW1lPzogc3RyaW5nKSA9PiB7XG4gICAgc2V0SXRlbVRvRGVsZXRlKHsgaWQsIG5hbWUgfSk7XG4gICAgc2V0RGVsZXRlRGlhbG9nT3Blbih0cnVlKTtcbiAgfTtcblxuICBjb25zdCBoYW5kbGVDb25maXJtRGVsZXRlID0gKCkgPT4ge1xuICAgIGlmIChpdGVtVG9EZWxldGUpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmRlbChbaXRlbVRvRGVsZXRlLmlkXSkudGhlbigoKSA9PiB7XG4gICAgICAgIHJlZmV0Y2goKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzZXREZWxldGVEaWFsb2dPcGVuKGZhbHNlKTtcbiAgICBzZXRJdGVtVG9EZWxldGUobnVsbCk7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LVsxODAwcHhdIG14LWF1dG8gcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02IG1iLThcIj5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgIDxMaXN0SWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCBoLTVcIj57UEFHRS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJzaGFkb3ctc20gYm9yZGVyLWJvcmRlci80MCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInBiLTAgcHgtMCBwdC0wXCI+XG4gICAgICAgICAgICAgIHsvKiBGaWx0ZXJzICovfVxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJnLWdyYXktMTAwIHB4LTYgcHktNCBzcGFjZS15LTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGZsZXgtd3JhcFwiPlxuJHtcbiAgZmlsdGVyQ29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5uYW1lID09PSBcInNlYXJjaFwiKVxuICAgID8gYCAgICAgICAgICAgICAgICAgIDxFbnVtU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGVudW09eyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZH1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXske25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFwic2VhcmNoXCIpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoVHlwZVwiKX1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy01MCBoLTggYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgLz5gXG4gICAgOiBcIlwiXG59XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicmVsYXRpdmUgZmxleC0xIG1heC13LXhzXCI+XG4gICAgICAgICAgICAgICAgICAgIDxJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcihcImtleXdvcmRcIil9XG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1NEKFwiY29tbW9uLnNlYXJjaFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggcHItOCB0ZXh0LXhzIGJnLXdoaXRlIGJvcmRlci1ncmF5LTMwMFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwiZ2hvc3RcIlxuICAgICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj17PFNlYXJjaEljb24gLz59XG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiYWJzb2x1dGUgcmlnaHQtMCB0b3AtMCBoLTggdy04IGhvdmVyOmJnLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1sLWF1dG8gZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCBweC00IGJnLXByaW1hcnkgaG92ZXI6YmctcHJpbWFyeS85MCB0ZXh0LXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZSh7IHRvOiBcXGBcXCR7UEFHRS5yb3V0ZX0vZm9ybVxcYCB9KX1cbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57U0QoXCJjb21tb24uY3JlYXRlXCIpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgICAgIDxTb25hbXVGaWx0ZXJQb3BvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgcnVsZXM9e2FwcGxpZWRSdWxlc31cbiAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1ldGE9e2V4dHJhY3RGaWVsZE1ldGFGcm9tU2NoZW1hKFxuICAgICAgICAgICAgICAgICAgICAgICAgJHtuYW1lcy5jYXBpdGFsfUJhc2VTY2hlbWEsXG4gICAgICAgICAgICAgICAgICAgICAgICBTRCBhcyAoa2V5OiBzdHJpbmcpID0+IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb249ezxGaWx0ZXJJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gc2V0RmlsdGVyTW9kYWxPcGVuKHRydWUpfVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04XCJcbiAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzXCI+e1NEKFwicmMuc29uYW11RmlsdGVyLnRpdGxlXCIpfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHthcHBsaWVkUnVsZXMubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxCYWRnZSB2YXJpYW50PVwic2Vjb25kYXJ5XCIgY2xhc3NOYW1lPVwibWwtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthcHBsaWVkUnVsZXMubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L0JhZGdlPlxuICAgICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9Tb25hbXVGaWx0ZXJQb3BvdmVyPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0zIGZsZXgtd3JhcFwiPlxuJHtmaWx0ZXJDb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwic2VhcmNoXCIgJiYgY29sLm5hbWUgIT09IFwib3JkZXJCeVwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gY29uZmlnLmVudW1JZOqwgCDsnojsnLzrqbQg7Jqw7ISgIOyCrOyaqSwg7JeG7Jy866m0IGdldEVudW1JbmZvRnJvbUNvbE5hbWUg7Iuc64+EXG4gICAgICAgIGNvbnN0IGVudW1JZCA9IGdldENvbmZpZ0VudW1JZChjb2wuY29uZmlnKSA/PyBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSkuaWQ7XG4gICAgICAgIHJldHVybiBgICAgICAgICAgICAgICAgICAgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAga2V5PXtcXGAke2NvbC5uYW1lfS1cXCR7bGlzdFBhcmFtcy4ke2NvbC5uYW1lfX1cXGB9XG4gICAgICAgICAgICAgICAgICAgIGVudW09eyR7ZW51bUlkfX1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXske2VudW1JZH1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFwiJHtjb2wubmFtZX1cIil9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiJHtjb2wubGFiZWx9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNTAgaC04IGJnLXdoaXRlIGJvcmRlci1ncmF5LTMwMCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gRksg7ZWE65OcIChJZEFzeW5jU2VsZWN0KVxuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIGAgICAgICAgICAgICAgICAgICA8SWRBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjb25maWc9eyR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldD1cIkFcIlxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoXCIke2NvbC5uYW1lfVwiKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIke2NvbC5sYWJlbCA/PyByZWxQcm9wLndpdGh9XCJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJhYmxlXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNTAgaC04IHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIjtcbiAgfSlcbiAgLmZpbHRlcihCb29sZWFuKVxuICAuam9pbihcIlxcblwiKX1cbiR7XG4gIGZpbHRlckNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpXG4gICAgPyBgICAgICAgICAgICAgICAgICAgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtuYW1lcy5jYXBpdGFsfU9yZGVyQnl9XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17JHtuYW1lcy5jYXBpdGFsfU9yZGVyQnlMYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFwib3JkZXJCeVwiKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e1NEKFwiY29tbW9uLnNvcnRcIil9XG4gICAgICAgICAgICAgICAgICAgIHRleHRQcmVmaXg9e1xcYFxcJHtTRChcImNvbW1vbi5zb3J0XCIpfTogXFxgfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTUwIGgtOCBiZy13aGl0ZSBib3JkZXItZ3JheS0zMDAgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAvPmBcbiAgICA6IFwiXCJcbn1cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1tdXRlZC1mb3JlZ3JvdW5kXCI+e1NEKFwiY29tbW9uLnJlc3VsdHNcIikodG90YWwgPz8gMCl9PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cblxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInB4LTYgcGItNiBwdC02IGJnLXdoaXRlXCI+XG4gICAgICAgICAgICAgIHsvKiBUYWJsZSAqL31cbiAgICAgICAgICAgICAgPFRhYmxlPlxuICAgICAgICAgICAgICAgIDxUYWJsZUhlYWRlcj5cbiAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdyBjbGFzc05hbWU9XCJob3ZlcjpiZy10cmFuc3BhcmVudCBiZy1ncmF5LTEwMFwiPlxuICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkIGNsYXNzTmFtZT1cImgtOSB0ZXh0LXhzIHctWzQwcHhdXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtpc0FsbFNlbGVjdGVkKCl9XG4gICAgICAgICAgICAgICAgICAgICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVTZWxlY3RBbGx9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIHtjb2x1bW5zLm1hcCgoY29sLCBpZHgpID0+IChcbiAgICAgICAgICAgICAgICAgICAgICA8VGFibGVIZWFkIGtleT17aWR4fSBmaXQ9e2NvbC5maXR9IGFsaWduPXtjb2wuYWxpZ259PlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbC5sYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cbiAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkZXI+XG4gICAgICAgICAgICAgICAgPFRhYmxlQm9keT5cbiAgICAgICAgICAgICAgICAgIHshaXNMb2FkaW5nICYmIHJvd3MgJiYgcm93cy5tYXAoKHJvdykgPT4gKFxuICAgICAgICAgICAgICAgICAgICA8RnJhZ21lbnQga2V5PXtyb3cuaWR9PlxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwgY2xhc3NOYW1lPVwicHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RlZEl0ZW1zLmhhcyhyb3cuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9eygpID0+IGhhbmRsZVRvZ2dsZUl0ZW0ocm93LmlkKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgICAgICA8VGFibGVDZWxsIGtleT17aWR4fSBmaXQ9e2NvbC5maXR9IGFsaWduPXtjb2wuYWxpZ259IGNsYXNzTmFtZT1cInB5LTNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Y29sLnRjKHJvdyl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVDZWxsPlxuICAgICAgICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZVJvdz5cbiAgICAgICAgICAgICAgICAgICAgPC9GcmFnbWVudD5cbiAgICAgICAgICAgICAgICAgICkpfVxuICAgICAgICAgICAgICAgIDwvVGFibGVCb2R5PlxuICAgICAgICAgICAgICA8L1RhYmxlPlxuXG4gICAgICAgICAgICAgIHsvKiBQYWdpbmF0aW9uICovfVxuICAgICAgICAgICAgICA8UGFnaW5hdGlvblxuICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcihcInBhZ2VcIil9XG4gICAgICAgICAgICAgICAgdG90YWw9e3RvdGFsID8/IDB9XG4gICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlPXtsaXN0UGFyYW1zLm51bSA/PyAxMH1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICB7LyogRGVsZXRlIERpYWxvZyAqL31cbiAgICAgIDxBbGVydERpYWxvZyBvcGVuPXtkZWxldGVEaWFsb2dPcGVufSBvbk9wZW5DaGFuZ2U9e3NldERlbGV0ZURpYWxvZ09wZW59PlxuICAgICAgICA8QWxlcnREaWFsb2dDb250ZW50PlxuICAgICAgICAgIDxBbGVydERpYWxvZ0hlYWRlcj5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ1RpdGxlPntTRChcImRlbGV0ZS5jb25maXJtLnRpdGxlXCIpfTwvQWxlcnREaWFsb2dUaXRsZT5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0Rlc2NyaXB0aW9uPntTRChcImRlbGV0ZS5jb25maXJtLmRlc2NyaXB0aW9uXCIpfTwvQWxlcnREaWFsb2dEZXNjcmlwdGlvbj5cbiAgICAgICAgICA8L0FsZXJ0RGlhbG9nSGVhZGVyPlxuICAgICAgICAgIDxBbGVydERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0NhbmNlbD57U0QoXCJjb21tb24uY2FuY2VsXCIpfTwvQWxlcnREaWFsb2dDYW5jZWw+XG4gICAgICAgICAgICA8QWxlcnREaWFsb2dBY3Rpb24gb25DbGljaz17aGFuZGxlQ29uZmlybURlbGV0ZX0+XG4gICAgICAgICAgICAgIHtTRChcImNvbW1vbi5kZWxldGVcIil9XG4gICAgICAgICAgICA8L0FsZXJ0RGlhbG9nQWN0aW9uPlxuICAgICAgICAgIDwvQWxlcnREaWFsb2dGb290ZXI+XG4gICAgICAgIDwvQWxlcnREaWFsb2dDb250ZW50PlxuICAgICAgPC9BbGVydERpYWxvZz5cblxuICAgICAgey8qIFNvbmFtdSBGaWx0ZXIgTW9kYWwgKi99XG4gICAgICA8U29uYW11RmlsdGVyTW9kYWxcbiAgICAgICAgYmFzZVNjaGVtYT17JHtuYW1lcy5jYXBpdGFsfUJhc2VTY2hlbWF9XG4gICAgICAgIG9wZW49e2ZpbHRlck1vZGFsT3Blbn1cbiAgICAgICAgb25PcGVuQ2hhbmdlPXtzZXRGaWx0ZXJNb2RhbE9wZW59XG4gICAgICAgIGluaXRpYWxSdWxlcz17YXBwbGllZFJ1bGVzfVxuICAgICAgICBvbkFwcGx5PXsoZmlsdGVycywgcnVsZXMpID0+IHtcbiAgICAgICAgICBzZXRMaXN0UGFyYW1zKHsgLi4ubGlzdFBhcmFtcywgc29uYW11RmlsdGVyOiBmaWx0ZXJzLCBwYWdlOiAxIH0pO1xuICAgICAgICAgIHNldEFwcGxpZWRSdWxlcyhydWxlcyk7XG4gICAgICAgIH19XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIHByZVRlbXBsYXRlcyxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7b0JBSTJEO2FBT3hDO2NBRW1CO0FBRXRDLFNBQVMsZ0JBQWdCLFFBQXFEO0NBQzVFLElBQUksQ0FBQyxVQUFVLEVBQUUsWUFBWSxTQUMzQjtDQUVGLE9BQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxPQUFPLE1BQU0sTUFBTSxvQkFDckQsT0FBTyxPQUFPLE1BQU0sSUFDcEI7QUFDTjtBQUVBLElBQWEsc0JBQWIsY0FBeUMsU0FBUztDQUNoRCxjQUFjO0VBQ1osTUFBTSxXQUFXO0NBQ25CO0NBRUEsaUJBQWlCLE9BQTBCO0VBQ3pDLE9BQU87R0FDTCxRQUFRO0dBQ1IsTUFBTSxHQUFHLE1BQU0sU0FBUztFQUMxQjtDQUNGO0NBRUEsc0JBQWdEO0VBQzlDLE9BQU8sQ0FBQyxxQkFBcUIsWUFBWTtDQUMzQztDQUVBLE9BQU8sTUFBYyxLQUFhLGFBQXNCLE1BQU0sWUFBb0IsSUFBSTtFQUNwRixPQUFPLG9CQUFvQixJQUFJLEdB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OztrQ0F5Qm1CLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O21DQXVCUixTQUFTOzs7Ozs7O1FBT3BDLE1BQU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3QnBCLGNBQWMsTUFBTSxRQUFRLElBQUksU0FBUyxRQUFRLElBQzdDOzRCQUNzQixNQUFNLFFBQVE7OEJBQ1osTUFBTSxRQUFROzs7O3dCQUt0QyxHQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzswQkEwQnlCLE1BQU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF1QnRDLGNBQ0MsUUFBUSxRQUFRLElBQUksU0FBUyxZQUFZLElBQUksU0FBUyxTQUFTLENBQUMsQ0FDaEUsS0FBSyxRQUFRO0lBQ1osSUFBSSxJQUFJLGVBQWUsU0FDckIsSUFBSTtLQUVGLE1BQU0sU0FBUyxnQkFBZ0IsSUFBSSxNQUFNLEtBQUssdUJBQXVCLFVBQVUsSUFBSSxJQUFJLENBQUMsQ0FBQztLQUN6RixPQUFPOzZCQUNjLElBQUksS0FBSyxpQkFBaUIsSUFBSSxLQUFLOzRCQUNwQyxPQUFPOzhCQUNMLE9BQU87b0NBQ0QsSUFBSSxLQUFLO21DQUNWLElBQUksTUFBTTs7OztJQUl2QyxRQUFRO0tBQ04sT0FBTztJQUNUO0lBR0YsSUFBSSxJQUFJLGVBQWUsa0JBQWtCLElBQUksZUFBZSxnQkFDMUQsSUFBSTtLQUNGLE1BQU0sVUFBVSwyQkFBMkIsVUFBVSxJQUFJLEtBQUssUUFBUSxPQUFPLEVBQUUsQ0FBQztLQUNoRixPQUFPOzhCQUNlLFFBQVEsS0FBSzs7b0NBRVAsSUFBSSxLQUFLO21DQUNWLElBQUksU0FBUyxRQUFRLEtBQUs7Ozs7SUFJdkQsUUFBUTtLQUNOLE9BQU87SUFDVDtJQUVGLE9BQU87R0FDVCxDQUFDLENBQUMsQ0FDRCxPQUFPLE9BQU8sQ0FBQyxDQUNmLEtBQUssSUFBSSxFQUFFO0VBRVosY0FBYyxNQUFNLFFBQVEsSUFBSSxTQUFTLFNBQVMsSUFDOUM7NEJBQ3NCLE1BQU0sUUFBUTs4QkFDWixNQUFNLFFBQVE7Ozs7O3dCQU10QyxHQUNMOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkEwRXFCLE1BQU0sUUFBUTs7Ozs7Ozs7Ozs7O1FBWTVCLEtBQUs7R0FDUCxZQUFZLENBQUM7R0FDYjtFQUNGO0NBQ0Y7QUFDRiJ9
560
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19saXN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19saXN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyBmbGF0IH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJpbmdOb2RlLCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSxcbiAgZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUsXG4gIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lLFxufSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJlZFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5mdW5jdGlvbiBnZXRDb25maWdFbnVtSWQoY29uZmlnOiBSZW5kZXJpbmdOb2RlW1wiY29uZmlnXCJdKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFjb25maWcgfHwgIShcImVudW1JZFwiIGluIGNvbmZpZykpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoY29uZmlnLmVudW1JZCkgPT09IFwiW29iamVjdCBTdHJpbmddXCJcbiAgICA/IFN0cmluZyhjb25maWcuZW51bUlkKVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfbGlzdCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2xpc3RcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9pbmRleC50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5saXN0TWFuYWdlXCIsIFwiY29tbW9uLmFsbFwiXTtcbiAgfVxuXG4gIHdyYXBUYyhib2R5OiBzdHJpbmcsIGtleTogc3RyaW5nLCBjb2xsYXBzaW5nOiBib29sZWFuID0gdHJ1ZSwgY2xhc3NOYW1lOiBzdHJpbmcgPSBcIlwiKSB7XG4gICAgcmV0dXJuIGA8VGFibGUuQ2VsbCBrZXk9XCIke2tleX1cIiR7Y29sbGFwc2luZyA/IFwiIGNvbGxhcHNpbmdcIiA6IFwiXCJ9JHtcbiAgICAgIGNsYXNzTmFtZSA/IGAgY2xhc3NOYW1lPXtcXGAke2NsYXNzTmFtZX1cXGB9YCA6IFwiXCJcbiAgICB9PiR7Ym9keX08L1RhYmxlLkNlbGw+YDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihcbiAgICBlbnRpdHlJZDogc3RyaW5nLFxuICAgIGNvbDogUmVuZGVyaW5nTm9kZSxcbiAgICBuYW1lczogRW50aXR5TmFtZXNSZWNvcmQsXG4gICAgcGFyZW50T2JqOiBzdHJpbmcgPSBcInJvd1wiLFxuICAgIHdpdGhvdXROYW1lOiBib29sZWFuID0gZmFsc2UsXG4gICk6IHN0cmluZyB7XG4gICAgLy8g7KSR7LKpIOqyveuhnCDsspjrpqwgKOyYiDogXCJ1c2VyLm5hbWVcIiAtPiBcInJvdy51c2VyPy5uYW1lXCIpXG4gICAgbGV0IGNvbE5hbWU6IHN0cmluZztcbiAgICBpZiAod2l0aG91dE5hbWUpIHtcbiAgICAgIGNvbE5hbWUgPSBwYXJlbnRPYmo7XG4gICAgfSBlbHNlIGlmIChjb2wubmFtZS5pbmNsdWRlcyhcIi5cIikpIHtcbiAgICAgIC8vIOykkeyyqSDqsr3roZzripQgb3B0aW9uYWwgY2hhaW5pbmfsnLzroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGNvbC5uYW1lLnNwbGl0KFwiLlwiKTtcbiAgICAgIGNvbE5hbWUgPSBgJHtwYXJlbnRPYmp9LiR7cGFydHMuam9pbihcIj8uXCIpfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbE5hbWUgPSBgJHtwYXJlbnRPYmp9LiR7Y29sLm5hbWV9YDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWRhdGVcIjpcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKVxuICAgICAgICAgICAgPyAoY29sLm5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpID8/IGNvbC5uYW1lKS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpXG4gICAgICAgICAgICA6IGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIik7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcEZrID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDw+JHtyZWxQcm9wRmsud2l0aH0jeyR7Y29sTmFtZX19PC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICBpZiAoY29sLm51bGxhYmxlIHx8IGNvbC5uYW1lLmluY2x1ZGVzKFwiLlwiKSkge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4+eyR7Y29sTmFtZX0gPyBkYXRldGltZUYoJHtjb2xOYW1lfSkgOiAnLSd9PC9zcGFuPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3Bhbj57ZGF0ZXRpbWVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwic3RyaW5nLWRhdGV0aW1lXCI6XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUgfHwgY29sLm5hbWUuaW5jbHVkZXMoXCIuXCIpKSB7XG4gICAgICAgICAgcmV0dXJuIGA8c3Bhbj57JHtjb2xOYW1lfSA/IGRhdGVGKCR7Y29sTmFtZX0pIDogJy0nfTwvc3Bhbj5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPHNwYW4+e2RhdGVGKCR7Y29sTmFtZX0pfTwvc3Bhbj5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sTmFtZX0gPyA8QmFkZ2UgdmFyaWFudD1cImRlZmF1bHRcIj5PPC9CYWRnZT4gOiA8QmFkZ2UgdmFyaWFudD1cInNlY29uZGFyeVwiPlg8L0JhZGdlPn08Lz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9JHtlbnVtSWR9TGFiZWxbJHtjb2xOYW1lfV19PC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8Pnske2NvbE5hbWV9fTwvPmA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheS1pbWFnZXNcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj57ICR7Y29sTmFtZX0/Lm1hcCgociwgaSkgPT4gJHtcbiAgICAgICAgICBjb2wubnVsbGFibGUgPyBgciAmJiBgIDogXCJcIlxuICAgICAgICB9PGltZyBrZXk9e2l9IHNyYz17cn0gYWx0PXtcXGAke2NvbC5sYWJlbCA/PyBjb2wubmFtZX0gXFwke2kgKyAxfVxcYH0gY2xhc3NOYW1lPVwiaC04IHctOCBvYmplY3QtY292ZXIgcm91bmRlZFwiIC8+KSB9PC9kaXY+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+eyR7Y29sTmFtZX0gPyA8aW1nIHNyYz17JHtjb2xOYW1lfS51cmx9IGFsdD17JHtjb2xOYW1lfS5uYW1lfSBjbGFzc05hbWU9XCJoLTggdy04IG9iamVjdC1jb3ZlciByb3VuZGVkXCIgLz4gOiAnLSd9PC9kaXY+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZ2FwLTFcIj57ICR7Y29sTmFtZX0/Lm1hcCgociwgaSkgPT4gJHtcbiAgICAgICAgICBjb2wubnVsbGFibGUgPyBgciAmJiBgIDogXCJcIlxuICAgICAgICB9PGltZyBrZXk9e2l9IHNyYz17ci51cmx9IGFsdD17XFxgJHtjb2wubGFiZWwgPz8gY29sLm5hbWV9IFxcJHtpICsgMX1cXGB9IGNsYXNzTmFtZT1cImgtOCB3LTggb2JqZWN0LWNvdmVyIHJvdW5kZWRcIiAvPikgfTwvZGl2PmA7XG4gICAgICBjYXNlIFwibnVtYmVyLXBsYWluXCI6XG4gICAgICAgIHJldHVybiBgPD57JHtjb2wubnVsbGFibGUgfHwgY29sLm5hbWUuaW5jbHVkZXMoXCIuXCIpID8gYCR7Y29sTmFtZX0gJiYgYCA6IFwiXCJ9bnVtRigke2NvbE5hbWV9KX08Lz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57JHtjb2wubnVsbGFibGUgPyBgJHtjb2xOYW1lfSA/IGAgOiBcIlwifUpTT04uc3RyaW5naWZ5KCR7Y29sTmFtZX0pJHtjb2wubnVsbGFibGUgPyBgIDogJy0nYCA6IFwiXCJ9fTwvc3Bhbj5gO1xuICAgICAgY2FzZSBcIm9iamVjdC1waWNrXCI6IHtcbiAgICAgICAgY29uc3QgcGlja2VkQ2hpbGQgPSBjb2wuY2hpbGRyZW4/LmZpbmQoKGNoaWxkKSA9PiBjaGlsZC5uYW1lID09PSBjb2wuY29uZmlnPy5waWNrZWQpO1xuICAgICAgICBpZiAoIXBpY2tlZENoaWxkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBvYmplY3QtcGljayDshKDtg50g7Iuk7YyoICjsmKTruIzsoJ3tirg6ICR7Y29sLm5hbWV9KWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbihcbiAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICBwaWNrZWRDaGlsZCxcbiAgICAgICAgICBuYW1lcyxcbiAgICAgICAgICBgJHtjb2xOYW1lfSR7Y29sLm51bGxhYmxlID8gXCI/XCIgOiBcIlwifWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8PnsgLyogYXJyYXkgJHtjb2xOYW1lfSAqLyB9PC8+YDtcbiAgICAgIGNhc2UgXCJ2ZWN0b3JcIjpcbiAgICAgICAgLy8gdmVjdG9yIO2DgOyeheydgCDssKjsm5Ag7IiY66eMIO2RnOyLnCAo7Iuk7KCcIOuNsOydtO2EsOuKlCDrhIjrrLQg6rmAKVxuICAgICAgICByZXR1cm4gYDw+eyR7Y29sLm51bGxhYmxlID8gYCR7Y29sTmFtZX0gPyBgIDogXCJcIn1bVmVjdG9yOiB7JHtjb2xOYW1lfSR7Y29sLm51bGxhYmxlID8gXCJcIiA6IFwiID8/IFtdXCJ9Lmxlbmd0aH1kXSR7Y29sLm51bGxhYmxlID8gXCIgOiAnLSdcIiA6IFwiXCJ9fTwvPmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIAg7Lus65+8ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KFxuICAgIGVudGl0eUlkOiBzdHJpbmcsXG4gICAgY29sOiBSZW5kZXJpbmdOb2RlLFxuICAgIG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgKTogKHN0cmluZyB8IG51bGwpW10ge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkOiBlbnVtSWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUobmFtZXMuY2FwaXRhbCwgY29sLm5hbWUpO1xuICAgICAgcmV0dXJuIFtgaW1wb3J0IHsgJHtlbnVtSWR9TGFiZWwgfSBmcm9tICdAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWQnO2BdO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSAoY29sLmNoaWxkcmVuID8/IFtdKS5tYXAoKGNoaWxkKSA9PiB7XG4gICAgICAgICAgZW50aXR5SWQgPSByZWxQcm9wLndpdGg7XG4gICAgICAgICAgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjaGlsZCwgbmFtZXMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZsYXQocmVzdWx0KTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gW251bGxdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgaWYgKCFjb2wuZWxlbWVudCkgcmV0dXJuIFtudWxsXTtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sLmVsZW1lbnQsIG5hbWVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW251bGxdO1xuICB9XG5cbiAgcmVuZGVyRmlsdGVySW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICByZXR1cm4gYGltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dCB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0XCI7YDtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHtuYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShcbiAgICAgICAgICAgIGVudGl0eUlkLFxuICAgICAgICAgICAgY29sLm5hbWUsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke2lkfVNlbGVjdGA7XG4gICAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRNRE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudElkID0gYCR7cmVsUHJvcC53aXRofUlkQXN5bmNTZWxlY3RgO1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7ICR7Y29tcG9uZW50SWR9IH0gZnJvbSBcIkAvY29tcG9uZW50cy8ke3RhcmdldE5hbWVzLmZzfS8ke2NvbXBvbmVudElkfVwiO2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihg66CM642UIOu2iOqwgOuKpe2VnCDtlYTthLAg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyRmlsdGVyKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgaWYgKGNvbC5uYW1lID09PSBcInNlYXJjaFwiKSB7XG4gICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG5cbiAgICBjb25zdCBpc0NsZWFyYWJsZSA9IGNvbC5vcHRpb25hbCA9PT0gdHJ1ZSAmJiBjb2wubmFtZSAhPT0gXCJvcmRlckJ5XCI7XG4gICAgbGV0IGNvbXBvbmVudElkOiBzdHJpbmc7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpIHtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGNvbXBvbmVudElkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwifSAvPmA7XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgY29tcG9uZW50SWQgPSBgJHtyZWxQcm9wLndpdGh9SWRBc3luY1NlbGVjdGA7XG4gICAgICAgIHJldHVybiBgPCR7Y29tcG9uZW50SWR9IHsuLi5yZWdpc3RlcignJHtjb2wubmFtZX0nKX0gJHtcbiAgICAgICAgICBpc0NsZWFyYWJsZSA/IFwiY2xlYXJhYmxlXCIgOiBcIlwiXG4gICAgICAgIH0gc3Vic2V0PVwiQVwiIC8+YDtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGDroIzrjZQg67aI6rCA64ql7ZWcIO2VhO2EsCDsnoTtj6ztirggJHtjb2wubmFtZX0gJHtjb2wucmVuZGVyVHlwZX1gKTtcbiAgICB9XG4gIH1cblxuICBnZXREZWZhdWx0KGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSkge1xuICAgIGNvbnN0IGRlZiA9IHtcbiAgICAgIG9yZGVyQnk6IFwiXCIsXG4gICAgICBzZWFyY2g6IFwiXCIsXG4gICAgICBoYXNTZWFyY2g6IGZhbHNlLFxuICAgICAgaGFzT3JkZXJCeTogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCBvcmRlckJ5Wm9kVHlwZSA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJvcmRlckJ5XCIpPy56b2RUeXBlO1xuICAgIGlmIChvcmRlckJ5Wm9kVHlwZSAmJiBvcmRlckJ5Wm9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgZGVmLm9yZGVyQnkgPSBPYmplY3Qua2V5cyhvcmRlckJ5Wm9kVHlwZS5lbnVtKVswXTtcbiAgICAgIGRlZi5oYXNPcmRlckJ5ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3Qgc2VhcmNoWm9kVHlwZSA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJzZWFyY2hcIik/LnpvZFR5cGU7XG4gICAgaWYgKHNlYXJjaFpvZFR5cGUgJiYgc2VhcmNoWm9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgZGVmLnNlYXJjaCA9IE9iamVjdC5rZXlzKHNlYXJjaFpvZFR5cGUuZW51bSlbMF07XG4gICAgICBkZWYuaGFzU2VhcmNoID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfbGlzdFwiXSkge1xuICAgIGNvbnN0IHsgZ2V0Q29sdW1uc05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL2VudGl0eS1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3QgeyBnZXRab2RUeXBlQnlJZCwgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcblxuICAgIGNvbnN0IGNvbHVtbnNOb2RlID0gYXdhaXQgZ2V0Q29sdW1uc05vZGUoZW50aXR5SWQsIFwiQVwiKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zWm9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKGAke2VudGl0eUlkfUxpc3RQYXJhbXNgKTtcbiAgICBjb25zdCBsaXN0UGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUobGlzdFBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG5cbiAgICAvLyBQSyDtg4DsnoUg6rCQ7KeAXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcblxuICAgIC8vIOyLpOygnCDrpqzsiqTtirgg7Lus65+8XG4gICAgY29uc3QgY29sdW1ucyA9IC8qIFNBRkVUWTogQ29sdW1ucyDroIzrjZTrp4Eg64W465Oc7J2YIOyekOyLneydgCDrqqjrkZAg7Lus65+8IOuFuOuTnOuLpC4gKi8gKFxuICAgICAgY29sdW1uc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdXG4gICAgKVxuXG4gICAgICAudG9Tb3J0ZWQoKGEsIGIpID0+IChhLm5hbWUgPT09IFwiaWRcIiA/IC0xIDogYi5uYW1lID09PSBcImlkXCIgPyAxIDogMCkpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcmVuZGVyZWQgPSB0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyk7XG5cbiAgICAgICAgLy8g652867KoIOyDneyEsTogY29tbW9uIO2VhOuTnChjcmVhdGVkX2F0KeuKlCBTRChcImNvbW1vbi57ZmllbGR9XCIpLCBlbnRpdHkg7ZWE65Oc64qUIFNEKFwiZW50aXR5LntFbnRpdHl9LntmaWVsZH1cIilcbiAgICAgICAgbGV0IGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgbGFiZWwgPSAnXCJJRFwiJztcbiAgICAgICAgfSBlbHNlIGlmIChbXCJjcmVhdGVkX2F0XCJdLmluY2x1ZGVzKGNvbC5uYW1lKSkge1xuICAgICAgICAgIC8vIGNhbWVsQ2FzZeuhnCDrs4DtmZggKGNyZWF0ZWRfYXQgLT4gY3JlYXRlZEF0KVxuICAgICAgICAgIGNvbnN0IGNhbWVsTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBjaGFyKSA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpO1xuICAgICAgICAgIGxhYmVsID0gYFNEKFwiY29tbW9uLiR7Y2FtZWxOYW1lfVwiKWA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBsYWJlbCA9IGBTRChcImVudGl0eS4ke25hbWVzLmNhcGl0YWx9LiR7bGFiZWxOYW1lfVwiKWA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbC5uYW1lLFxuICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgIHRjOiBgKHJvdykgPT4gJHtyZW5kZXJlZH1gLFxuICAgICAgICAgIGZpdDpcbiAgICAgICAgICAgIGNvbC5uYW1lID09PSBcImlkXCIgfHxcbiAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1pZFwiIHx8XG4gICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJkYXRldGltZVwiIHx8XG4gICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIixcbiAgICAgICAgICBhbGlnbjogY29sLm5hbWUgPT09IFwiaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItaWRcIiA/IFwiY2VudGVyXCIgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgIC8vIO2VhO2EsCDsu6zrn7xcbiAgICBjb25zdCBmaWx0ZXJDb2x1bW5zID0gLyogU0FGRVRZOiBMaXN0UGFyYW1zIOugjOuNlOungSDrhbjrk5zsnZgg7J6Q7Iud7J2AIOuqqOuRkCDtlYTthLAg7Lus65+8IOuFuOuTnOuLpC4gKi8gKFxuICAgICAgbGlzdFBhcmFtc05vZGUuY2hpbGRyZW4gYXMgUmVuZGVyaW5nTm9kZVtdXG4gICAgKVxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNvbCkgPT5cbiAgICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiICYmXG4gICAgICAgICAgY29sLm5hbWUgIT09IFwicXVlcnlNb2RlXCIgJiZcbiAgICAgICAgICBbXCJlbnVtc1wiLCBcIm51bWJlci1pZFwiLCBcIm51bWJlci1ma19pZFwiLCBcInN0cmluZy1ma19pZFwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSksXG4gICAgICApXG4gICAgICAvLyBvcmRlckJ56rCAIOqwgOyepSDrkqTroZwg7Jik6rKMIOyInOyEnCDsobDsoJVcbiAgICAgIC50b1NvcnRlZCgoYSkgPT4ge1xuICAgICAgICByZXR1cm4gYS5uYW1lID09PSBcIm9yZGVyQnlcIiA/IDEgOiAtMTtcbiAgICAgIH0pO1xuXG4gICAgLy8g7ZWE7YSwIOy7rOufvOydhCDtlITrpqwg7YWc7ZSM66a/7Jy866GcIOyEpOyglVxuICAgIGNvbnN0IHByZVRlbXBsYXRlczogUmVuZGVyZWRUZW1wbGF0ZVtcInByZVRlbXBsYXRlc1wiXSA9IFtdO1xuXG4gICAgLy8g7Lus65+87JeQ7IScIOyCrOyaqe2VmOuKlCBlbnVt65OkIOyImOynkVxuICAgIGNvbnN0IGNvbHVtbkVudW1zOiBzdHJpbmdbXSA9IFtdO1xuICAgIChjb2x1bW5zTm9kZS5jaGlsZHJlbiA/PyBbXSkuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQ6IGVudW1JZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGNvbHVtbkVudW1zLnB1c2goZW51bUlkKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8g65SU7Y+07Yq4IO2MjOudvOuvuO2EsFxuICAgIC8vIGNvbnN0IGRlZiA9IHRoaXMuZ2V0RGVmYXVsdChmaWx0ZXJDb2x1bW5zKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgdXNlU3RhdGUsIEZyYWdtZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVGaWxlUm91dGUsIHVzZU5hdmlnYXRlIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcblxuaW1wb3J0IHsgQ2FyZCwgQ2FyZENvbnRlbnQsIENhcmRIZWFkZXIgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBCYWRnZSB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IFBhZ2luYXRpb24sIFRhYmxlLCBUYWJsZUJvZHksIFRhYmxlQ2VsbCwgdHlwZSBUYWJsZUNvbCwgVGFibGVIZWFkLCBUYWJsZUhlYWRlciwgVGFibGVSb3cgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBFbnVtU2VsZWN0IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgQWxlcnREaWFsb2csIEFsZXJ0RGlhbG9nQWN0aW9uLCBBbGVydERpYWxvZ0NhbmNlbCwgQWxlcnREaWFsb2dDb250ZW50LCBBbGVydERpYWxvZ0Rlc2NyaXB0aW9uLCBBbGVydERpYWxvZ0Zvb3RlciwgQWxlcnREaWFsb2dIZWFkZXIsIEFsZXJ0RGlhbG9nVGl0bGUgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyBJbnB1dCB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgU29uYW11RmlsdGVyTW9kYWwsIFNvbmFtdUZpbHRlclBvcG92ZXIsIGV4dHJhY3RGaWVsZE1ldGFGcm9tU2NoZW1hLCB0eXBlIFJ1bGUgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5cbmltcG9ydCB7IHVzZUxpc3RQYXJhbXMsIG51bUYsIGRhdGVGLCBkYXRldGltZUYgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9saWJcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBLCAke25hbWVzLmNhcGl0YWx9QmFzZVNjaGVtYSB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7XG5pbXBvcnQgeyAkeygoKSA9PiB7XG4gICAgICAgIC8vIOq4sOuzuCBlbnVtIOyImOynkSAoZmlsdGVyQ29sdW1uc+yXkCDsnojripQg6rKD66eMKVxuICAgICAgICBjb25zdCBiYXNlRW51bXM6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChmaWx0ZXJDb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSkge1xuICAgICAgICAgIGJhc2VFbnVtcy5wdXNoKGAke25hbWVzLmNhcGl0YWx9T3JkZXJCeWAsIGAke25hbWVzLmNhcGl0YWx9T3JkZXJCeUxhYmVsYCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlckNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wubmFtZSA9PT0gXCJzZWFyY2hcIikpIHtcbiAgICAgICAgICBiYXNlRW51bXMucHVzaChgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkYCwgYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZExhYmVsYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtlYTthLAgZW51bSDsiJjsp5EgKGNvbmZpZy5lbnVtSWQg7Jqw7ISgLCDsl4bsnLzrqbQgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSlcbiAgICAgICAgLy8gU0FGRVRZOiDrp4jsp4Drp4kgQm9vbGVhbiDtlYTthLDqsIAgbnVsbOydhCDsoJzqsbDtlbQgZW51bSDsi53rs4TsnpAg66y47J6Q7Je066eMIOuCqOq4tOuLpC5cbiAgICAgICAgY29uc3QgZmlsdGVyRW51bUlkcyA9IGZpbHRlckNvbHVtbnNcbiAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIiAmJiBjb2wubmFtZSAhPT0gXCJzZWFyY2hcIiAmJiBjb2wubmFtZSAhPT0gXCJvcmRlckJ5XCIsXG4gICAgICAgICAgKVxuICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29uZmlnRW51bUlkID0gZ2V0Q29uZmlnRW51bUlkKGNvbC5jb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ0VudW1JZCkge1xuICAgICAgICAgICAgICByZXR1cm4gY29uZmlnRW51bUlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgeyBpZDogZW51bUlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgIHJldHVybiBlbnVtSWQ7XG4gICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIHN0cmluZ1tdO1xuXG4gICAgICAgIC8vIOuqqOuToCBlbnVtIO2Vqey5mOqzoCDspJHrs7Ug7KCc6rGwXG4gICAgICAgIGNvbnN0IGFsbEVudW1zID0gWy4uLm5ldyBTZXQoWy4uLmZpbHRlckVudW1JZHMsIC4uLmNvbHVtbkVudW1zXSldO1xuICAgICAgICBjb25zdCBlbnVtSW1wb3J0cyA9IGFsbEVudW1zLmZsYXRNYXAoKGVudW1JZCkgPT4gW2Ake2VudW1JZH1gLCBgJHtlbnVtSWR9TGFiZWxgXSk7XG5cbiAgICAgICAgcmV0dXJuIFsuLi5iYXNlRW51bXMsIC4uLmVudW1JbXBvcnRzXS5qb2luKFwiLCBcIik7XG4gICAgICB9KSgpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IElkQXN5bmNTZWxlY3QgfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG4keygoKSA9PiB7XG4gIC8vIEZLIO2VhOuTnOydmCBBc3luY0lkQ29uZmlnIGltcG9ydFxuICBjb25zdCBma0NvbHVtbnMgPSBmaWx0ZXJDb2x1bW5zLmZpbHRlcihcbiAgICAoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIixcbiAgKTtcbiAgY29uc3QgY29uZmlnTmFtZXMgPSBma0NvbHVtbnNcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIHJldHVybiBgJHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ2A7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfSlcbiAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICByZXR1cm4gY29uZmlnTmFtZXMubGVuZ3RoID4gMFxuICAgID8gYGltcG9ydCB7ICR7Y29uZmlnTmFtZXMuam9pbihcIiwgXCIpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO2BcbiAgICA6IFwiXCI7XG59KSgpfVxuXG5pbXBvcnQgRWRpdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc3F1YXJlLXBlblwiO1xuaW1wb3J0IFRyYXNoSWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS90cmFzaC0yXCI7XG5pbXBvcnQgRmlsdGVySWNvbiBmcm9tIFwifmljb25zL21kaS9maWx0ZXItdmFyaWFudFwiO1xuaW1wb3J0IExpc3RJY29uIGZyb20gXCJ+aWNvbnMvbWRpL2Zvcm1hdC1saXN0LWJ1bGxldGVkXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwifmljb25zL21kaS9tYWduaWZ5XCI7XG5pbXBvcnQgeyBTRCB9IGZyb20gXCJAL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9cIikoe1xcbiAgaGVhZDogKCkgPT4gKHtcXG4gICAgbWV0YTogW1xcbiAgICAgIHsgdGl0bGU6IFwiJHtlbnRpdHkudGl0bGUgPz8gbmFtZXMuY2FwaXRhbH0gTGlzdFwiIH0sXFxuICAgICAgeyBuYW1lOiBcImRlc2NyaXB0aW9uXCIsIGNvbnRlbnQ6IFNEKFwiZW50aXR5Lmxpc3RNYW5hZ2VcIikoXCIke2VudGl0eS50aXRsZSA/PyBuYW1lcy5jYXBpdGFsfVwiKSB9LFxcbiAgICBdLFxcbiAgfSksXFxuICBjb21wb25lbnQ6ICR7bmFtZXMuY2FwaXRhbH1MaXN0LFxcbn0pO1xcblxcbnR5cGUgJHtuYW1lcy5jYXBpdGFsfUxpc3RQcm9wcyA9IHt9O1xuXG5mdW5jdGlvbiAke25hbWVzLmNhcGl0YWx9TGlzdCh7fTogJHtuYW1lcy5jYXBpdGFsfUxpc3RQcm9wcykge1xuICBjb25zdCBuYXZpZ2F0ZSA9IHVzZU5hdmlnYXRlKCk7XG5cbiAgLy8g7IOB7YOcIOq0gOumrFxuICBjb25zdCBbc2VsZWN0ZWRJdGVtcywgc2V0U2VsZWN0ZWRJdGVtc10gPSB1c2VTdGF0ZTxTZXQ8JHtpZFRzVHlwZX0+PihuZXcgU2V0KCkpO1xuICBjb25zdCBbZGVsZXRlRGlhbG9nT3Blbiwgc2V0RGVsZXRlRGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpdGVtVG9EZWxldGUsIHNldEl0ZW1Ub0RlbGV0ZV0gPSB1c2VTdGF0ZTx7IGlkOiAke2lkVHNUeXBlfTsgbmFtZT86IHN0cmluZyB9IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IFtmaWx0ZXJNb2RhbE9wZW4sIHNldEZpbHRlck1vZGFsT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFthcHBsaWVkUnVsZXMsIHNldEFwcGxpZWRSdWxlc10gPSB1c2VTdGF0ZTxSdWxlW10+KFtdKTtcblxuICAvLyDrpqzsiqTtirgg7ZWE7YSwXG4gIGNvbnN0IHsgbGlzdFBhcmFtcywgcmVnaXN0ZXIsIHNldExpc3RQYXJhbXMgfSA9IHVzZUxpc3RQYXJhbXMoJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXMsIHtcbiAgICBudW06IDEwLFxuICAgIHBhZ2U6IDEsXG4gICAga2V5d29yZDogXCJcIiwke1xuICAgICAgZmlsdGVyQ29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5uYW1lID09PSBcInNlYXJjaFwiKVxuICAgICAgICA/IGBcbiAgICBzZWFyY2g6ICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZC5vcHRpb25zWzBdLGBcbiAgICAgICAgOiBcIlwiXG4gICAgfSR7XG4gICAgICBmaWx0ZXJDb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKVxuICAgICAgICA/IGBcbiAgICBvcmRlckJ5OiAke25hbWVzLmNhcGl0YWx9T3JkZXJCeS5vcHRpb25zWzBdLGBcbiAgICAgICAgOiBcIlwiXG4gICAgfVxuICAgIHNvbmFtdUZpbHRlcjoge30sXG4gIH0pO1xuXG4gIC8vIOumrOyKpO2KuCDsv7zrpqxcbiAgY29uc3QgeyBkYXRhLCByZWZldGNoLCBpc0xvYWRpbmcgfSA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZSR7bmFtZXMuY2FwaXRhbFBsdXJhbH0oXCJBXCIsIGxpc3RQYXJhbXMpO1xuICBjb25zdCB7IHJvd3MsIHRvdGFsIH0gPSBkYXRhID8/IHt9O1xuXG4gIC8vIO2YhOyerCDqsr3roZzsmYAg7YOA7J207YuAXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgcm91dGU6IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIsXG4gICAgdGl0bGU6IFNEKFwiZW50aXR5Lmxpc3RcIikoU0QoXCJlbnRpdHkuJHtuYW1lcy5jYXBpdGFsfVwiKSksXG4gIH07XG5cbiAgLy8g7Lus65+8IOygleydmFxuICB0eXBlICR7bmFtZXMuY2FwaXRhbH1Sb3cgPSBOb25OdWxsYWJsZTx0eXBlb2Ygcm93cz5bbnVtYmVyXTtcbiAgY29uc3QgY29sdW1uczogVGFibGVDb2w8JHtuYW1lcy5jYXBpdGFsfVJvdz5bXSA9IFtcbiR7Y29sdW1uc1xuICAubWFwKFxuICAgIChjb2wpID0+IGAgICAge1xuICAgICAgbGFiZWw6ICR7Y29sLmxhYmVsfSxcbiAgICAgIHRjOiAke2NvbC50Y30sJHtcbiAgICAgICAgY29sLmZpdFxuICAgICAgICAgID8gYFxuICAgICAgZml0OiB0cnVlLGBcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH0ke1xuICAgICAgICBjb2wuYWxpZ25cbiAgICAgICAgICA/IGBcbiAgICAgIGFsaWduOiBcIiR7Y29sLmFsaWdufVwiLGBcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbiAgICB9YCxcbiAgKVxuICAuam9pbihcIixcXG5cIil9LFxuICAgIHtcbiAgICAgIGxhYmVsOiBTRChcImNvbW1vbi5tYW5hZ2VcIiksXG4gICAgICBmaXQ6IHRydWUsXG4gICAgICBhbGlnbjogXCJjZW50ZXJcIixcbiAgICAgIHRjOiAocm93KSA9PiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICB2YXJpYW50PVwieWVsbG93XCJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgICBpY29uPXs8RWRpdEljb24gLz59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBuYXZpZ2F0ZSh7IHRvOiBcXGBcXCR7UEFHRS5yb3V0ZX0vZm9ybVxcYCwgc2VhcmNoOiB7IGlkOiByb3cuaWQgfSB9KX1cbiAgICAgICAgICAvPlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJyZWRcIlxuICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgIGljb249ezxUcmFzaEljb24gLz59XG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVEZWxldGVDbGljayhyb3cuaWQpfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSxcbiAgICB9LFxuICBdO1xuXG4gIC8vIOyEoO2DnSDtlbjrk6Trn6xcbiAgY29uc3QgaGFuZGxlVG9nZ2xlSXRlbSA9IChpZDogJHtpZFRzVHlwZX0pID0+IHtcbiAgICBjb25zdCBuZXdTZWxlY3Rpb24gPSBuZXcgU2V0KHNlbGVjdGVkSXRlbXMpO1xuICAgIGlmIChuZXdTZWxlY3Rpb24uaGFzKGlkKSkge1xuICAgICAgbmV3U2VsZWN0aW9uLmRlbGV0ZShpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1NlbGVjdGlvbi5hZGQoaWQpO1xuICAgIH1cbiAgICBzZXRTZWxlY3RlZEl0ZW1zKG5ld1NlbGVjdGlvbik7XG4gIH07XG5cbiAgY29uc3QgaXNBbGxTZWxlY3RlZCA9ICgpID0+IHtcbiAgICByZXR1cm4gKHJvd3M/Lmxlbmd0aCA/PyAwKSA+IDAgJiYgcm93cyEuZXZlcnkoKHJvdykgPT4gc2VsZWN0ZWRJdGVtcy5oYXMocm93LmlkKSk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsID0gKGNoZWNrZWQ6IGJvb2xlYW4pID0+IHtcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRJdGVtcyhuZXcgU2V0KHJvd3M/Lm1hcCgocm93KSA9PiByb3cuaWQpID8/IFtdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkSXRlbXMobmV3IFNldCgpKTtcbiAgICB9XG4gIH07XG5cbiAgLy8g7IKt7KCcIO2VuOuTpOufrFxuICBjb25zdCBoYW5kbGVEZWxldGVDbGljayA9IChpZDogJHtpZFRzVHlwZX0sIG5hbWU/OiBzdHJpbmcpID0+IHtcbiAgICBzZXRJdGVtVG9EZWxldGUoeyBpZCwgbmFtZSB9KTtcbiAgICBzZXREZWxldGVEaWFsb2dPcGVuKHRydWUpO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNvbmZpcm1EZWxldGUgPSAoKSA9PiB7XG4gICAgaWYgKGl0ZW1Ub0RlbGV0ZSkge1xuICAgICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZGVsKFtpdGVtVG9EZWxldGUuaWRdKS50aGVuKCgpID0+IHtcbiAgICAgICAgcmVmZXRjaCgpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHNldERlbGV0ZURpYWxvZ09wZW4oZmFsc2UpO1xuICAgIHNldEl0ZW1Ub0RlbGV0ZShudWxsKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgPExpc3RJY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIGgtNVwiPntQQUdFLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cInNoYWRvdy1zbSBib3JkZXItYm9yZGVyLzQwIG92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicGItMCBweC0wIHB0LTBcIj5cbiAgICAgICAgICAgICAgey8qIEZpbHRlcnMgKi99XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiYmctZ3JheS0xMDAgcHgtNiBweS00IHNwYWNlLXktM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgZmxleC13cmFwXCI+XG4ke1xuICBmaWx0ZXJDb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLm5hbWUgPT09IFwic2VhcmNoXCIpXG4gICAgPyBgICAgICAgICAgICAgICAgICAgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbHM9eyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZExhYmVsfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoXCJzZWFyY2hcIil9XG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtTRChcImNvbW1vbi5zZWFyY2hUeXBlXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LTUwIGgtOCBiZy13aGl0ZSBib3JkZXItZ3JheS0zMDAgdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAvPmBcbiAgICA6IFwiXCJcbn1cblxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyZWxhdGl2ZSBmbGV4LTEgbWF4LXcteHNcIj5cbiAgICAgICAgICAgICAgICAgICAgPElucHV0XG4gICAgICAgICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFwia2V5d29yZFwiKX1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoXCIpfVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCBwci04IHRleHQteHMgYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwXCJcbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJnaG9zdFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXs8U2VhcmNoSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJhYnNvbHV0ZSByaWdodC0wIHRvcC0wIGgtOCB3LTggaG92ZXI6YmctdHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWwtYXV0byBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHB4LTQgYmctcHJpbWFyeSBob3ZlcjpiZy1wcmltYXJ5LzkwIHRleHQtd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG5hdmlnYXRlKHsgdG86IFxcYFxcJHtQQUdFLnJvdXRlfS9mb3JtXFxgIH0pfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14c1wiPntTRChcImNvbW1vbi5jcmVhdGVcIil9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgPFNvbmFtdUZpbHRlclBvcG92ZXJcbiAgICAgICAgICAgICAgICAgICAgICBydWxlcz17YXBwbGllZFJ1bGVzfVxuICAgICAgICAgICAgICAgICAgICAgIGZpZWxkTWV0YT17ZXh0cmFjdEZpZWxkTWV0YUZyb21TY2hlbWEoXG4gICAgICAgICAgICAgICAgICAgICAgICAke25hbWVzLmNhcGl0YWx9QmFzZVNjaGVtYSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFNEIGFzIChrZXk6IHN0cmluZykgPT4gc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbj17PEZpbHRlckljb24gLz59XG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRGaWx0ZXJNb2RhbE9wZW4odHJ1ZSl9XG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLThcIlxuICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHNcIj57U0QoXCJyYy5zb25hbXVGaWx0ZXIudGl0bGVcIil9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAge2FwcGxpZWRSdWxlcy5sZW5ndGggPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPEJhZGdlIHZhcmlhbnQ9XCJzZWNvbmRhcnlcIiBjbGFzc05hbWU9XCJtbC0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge2FwcGxpZWRSdWxlcy5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvQmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICA8L1NvbmFtdUZpbHRlclBvcG92ZXI+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTMgZmxleC13cmFwXCI+XG4ke2ZpbHRlckNvbHVtbnNcbiAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJzZWFyY2hcIiAmJiBjb2wubmFtZSAhPT0gXCJvcmRlckJ5XCIpXG4gIC5tYXAoKGNvbCkgPT4ge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBjb25maWcuZW51bUlk6rCAIOyeiOycvOuptCDsmrDshKAg7IKs7JqpLCDsl4bsnLzrqbQgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSDsi5zrj4RcbiAgICAgICAgY29uc3QgZW51bUlkID0gZ2V0Q29uZmlnRW51bUlkKGNvbC5jb25maWcpID8/IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKS5pZDtcbiAgICAgICAgcmV0dXJuIGAgICAgICAgICAgICAgICAgICA8RW51bVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBrZXk9e1xcYCR7Y29sLm5hbWV9LVxcJHtsaXN0UGFyYW1zLiR7Y29sLm5hbWV9fVxcYH1cbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtlbnVtSWR9fVxuICAgICAgICAgICAgICAgICAgICBsYWJlbHM9eyR7ZW51bUlkfUxhYmVsfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoXCIke2NvbC5uYW1lfVwiKX1cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIke2NvbC5sYWJlbH1cIlxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy01MCBoLTggYmctd2hpdGUgYm9yZGVyLWdyYXktMzAwIHRleHQteHNcIlxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBGSyDtlYTrk5wgKElkQXN5bmNTZWxlY3QpXG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4gYCAgICAgICAgICAgICAgICAgIDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgIHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIiR7Y29sLmxhYmVsID8/IHJlbFByb3Aud2l0aH1cIlxuICAgICAgICAgICAgICAgICAgICBjbGVhcmFibGVcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy01MCBoLTggdGV4dC14c1wiXG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiO1xuICB9KVxuICAuZmlsdGVyKEJvb2xlYW4pXG4gIC5qb2luKFwiXFxuXCIpfVxuJHtcbiAgZmlsdGVyQ29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5uYW1lID09PSBcIm9yZGVyQnlcIilcbiAgICA/IGAgICAgICAgICAgICAgICAgICA8RW51bVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBlbnVtPXske25hbWVzLmNhcGl0YWx9T3JkZXJCeX1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXske25hbWVzLmNhcGl0YWx9T3JkZXJCeUxhYmVsfVxuICAgICAgICAgICAgICAgICAgICB7Li4ucmVnaXN0ZXIoXCJvcmRlckJ5XCIpfVxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc29ydFwiKX1cbiAgICAgICAgICAgICAgICAgICAgdGV4dFByZWZpeD17XFxgXFwke1NEKFwiY29tbW9uLnNvcnRcIil9OiBcXGB9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cInctNTAgaC04IGJnLXdoaXRlIGJvcmRlci1ncmF5LTMwMCB0ZXh0LXhzXCJcbiAgICAgICAgICAgICAgICAgIC8+YFxuICAgIDogXCJcIlxufVxuICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LW11dGVkLWZvcmVncm91bmRcIj57U0QoXCJjb21tb24ucmVzdWx0c1wiKSh0b3RhbCA/PyAwKX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuXG4gICAgICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicHgtNiBwYi02IHB0LTYgYmctd2hpdGVcIj5cbiAgICAgICAgICAgICAgey8qIFRhYmxlICovfVxuICAgICAgICAgICAgICA8VGFibGU+XG4gICAgICAgICAgICAgICAgPFRhYmxlSGVhZGVyPlxuICAgICAgICAgICAgICAgICAgPFRhYmxlUm93IGNsYXNzTmFtZT1cImhvdmVyOmJnLXRyYW5zcGFyZW50IGJnLWdyYXktMTAwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQgY2xhc3NOYW1lPVwiaC05IHRleHQteHMgdy1bNDBweF1cIj5cbiAgICAgICAgICAgICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e2lzQWxsU2VsZWN0ZWQoKX1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZVNlbGVjdEFsbH1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8L1RhYmxlSGVhZD5cbiAgICAgICAgICAgICAgICAgICAge2NvbHVtbnMubWFwKChjb2wsIGlkeCkgPT4gKFxuICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUhlYWQga2V5PXtpZHh9IGZpdD17Y29sLmZpdH0gYWxpZ249e2NvbC5hbGlnbn0+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sLmxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAgIDwvVGFibGVIZWFkPlxuICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgIDwvVGFibGVSb3c+XG4gICAgICAgICAgICAgICAgPC9UYWJsZUhlYWRlcj5cbiAgICAgICAgICAgICAgICA8VGFibGVCb2R5PlxuICAgICAgICAgICAgICAgICAgeyFpc0xvYWRpbmcgJiYgcm93cyAmJiByb3dzLm1hcCgocm93KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgIDxGcmFnbWVudCBrZXk9e3Jvdy5pZH0+XG4gICAgICAgICAgICAgICAgICAgICAgPFRhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICAgICAgPFRhYmxlQ2VsbCBjbGFzc05hbWU9XCJweS0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdGVkSXRlbXMuaGFzKHJvdy5pZCl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25WYWx1ZUNoYW5nZT17KCkgPT4gaGFuZGxlVG9nZ2xlSXRlbShyb3cuaWQpfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICB7Y29sdW1ucy5tYXAoKGNvbCwgaWR4KSA9PiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxUYWJsZUNlbGwga2V5PXtpZHh9IGZpdD17Y29sLmZpdH0gYWxpZ249e2NvbC5hbGlnbn0gY2xhc3NOYW1lPVwicHktM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtjb2wudGMocm93KX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9UYWJsZUNlbGw+XG4gICAgICAgICAgICAgICAgICAgICAgICApKX1cbiAgICAgICAgICAgICAgICAgICAgICA8L1RhYmxlUm93PlxuICAgICAgICAgICAgICAgICAgICA8L0ZyYWdtZW50PlxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAgPC9UYWJsZUJvZHk+XG4gICAgICAgICAgICAgIDwvVGFibGU+XG5cbiAgICAgICAgICAgICAgey8qIFBhZ2luYXRpb24gKi99XG4gICAgICAgICAgICAgIDxQYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgey4uLnJlZ2lzdGVyKFwicGFnZVwiKX1cbiAgICAgICAgICAgICAgICB0b3RhbD17dG90YWwgPz8gMH1cbiAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U9e2xpc3RQYXJhbXMubnVtID8/IDEwfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG5cbiAgICAgIHsvKiBEZWxldGUgRGlhbG9nICovfVxuICAgICAgPEFsZXJ0RGlhbG9nIG9wZW49e2RlbGV0ZURpYWxvZ09wZW59IG9uT3BlbkNoYW5nZT17c2V0RGVsZXRlRGlhbG9nT3Blbn0+XG4gICAgICAgIDxBbGVydERpYWxvZ0NvbnRlbnQ+XG4gICAgICAgICAgPEFsZXJ0RGlhbG9nSGVhZGVyPlxuICAgICAgICAgICAgPEFsZXJ0RGlhbG9nVGl0bGU+e1NEKFwiZGVsZXRlLmNvbmZpcm0udGl0bGVcIil9PC9BbGVydERpYWxvZ1RpdGxlPlxuICAgICAgICAgICAgPEFsZXJ0RGlhbG9nRGVzY3JpcHRpb24+e1NEKFwiZGVsZXRlLmNvbmZpcm0uZGVzY3JpcHRpb25cIil9PC9BbGVydERpYWxvZ0Rlc2NyaXB0aW9uPlxuICAgICAgICAgIDwvQWxlcnREaWFsb2dIZWFkZXI+XG4gICAgICAgICAgPEFsZXJ0RGlhbG9nRm9vdGVyPlxuICAgICAgICAgICAgPEFsZXJ0RGlhbG9nQ2FuY2VsPntTRChcImNvbW1vbi5jYW5jZWxcIil9PC9BbGVydERpYWxvZ0NhbmNlbD5cbiAgICAgICAgICAgIDxBbGVydERpYWxvZ0FjdGlvbiBvbkNsaWNrPXtoYW5kbGVDb25maXJtRGVsZXRlfT5cbiAgICAgICAgICAgICAge1NEKFwiY29tbW9uLmRlbGV0ZVwiKX1cbiAgICAgICAgICAgIDwvQWxlcnREaWFsb2dBY3Rpb24+XG4gICAgICAgICAgPC9BbGVydERpYWxvZ0Zvb3Rlcj5cbiAgICAgICAgPC9BbGVydERpYWxvZ0NvbnRlbnQ+XG4gICAgICA8L0FsZXJ0RGlhbG9nPlxuXG4gICAgICB7LyogU29uYW11IEZpbHRlciBNb2RhbCAqL31cbiAgICAgIDxTb25hbXVGaWx0ZXJNb2RhbFxuICAgICAgICBiYXNlU2NoZW1hPXske25hbWVzLmNhcGl0YWx9QmFzZVNjaGVtYX1cbiAgICAgICAgb3Blbj17ZmlsdGVyTW9kYWxPcGVufVxuICAgICAgICBvbk9wZW5DaGFuZ2U9e3NldEZpbHRlck1vZGFsT3Blbn1cbiAgICAgICAgaW5pdGlhbFJ1bGVzPXthcHBsaWVkUnVsZXN9XG4gICAgICAgIG9uQXBwbHk9eyhmaWx0ZXJzLCBydWxlcykgPT4ge1xuICAgICAgICAgIHNldExpc3RQYXJhbXMoeyAuLi5saXN0UGFyYW1zLCBzb25hbXVGaWx0ZXI6IGZpbHRlcnMsIHBhZ2U6IDEgfSk7XG4gICAgICAgICAgc2V0QXBwbGllZFJ1bGVzKHJ1bGVzKTtcbiAgICAgICAgfX1cbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgcHJlVGVtcGxhdGVzLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUkyRCxvQkFBQTtBQU94QyxhQUFBO0FBRW1CLGNBQUE7QUFFdEMsU0FBUyxnQkFBZ0IsUUFBcUQ7Q0FDNUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxZQUFZLFNBQzNCO0NBRUYsT0FBTyxPQUFPLFVBQVUsU0FBUyxLQUFLLE9BQU8sTUFBTSxNQUFNLG9CQUNyRCxPQUFPLE9BQU8sTUFBTSxJQUNwQjtBQUNOO0FBRUEsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7RUFDWixNQUFNLFdBQVc7Q0FDbkI7Q0FFQSxpQkFBaUIsT0FBMEI7RUFDekMsT0FBTztHQUNMLFFBQVE7R0FDUixNQUFNLEdBQUcsTUFBTSxTQUFTO0VBQzFCO0NBQ0Y7Q0FFQSxzQkFBZ0Q7RUFDOUMsT0FBTyxDQUFDLHFCQUFxQixZQUFZO0NBQzNDO0NBRUEsT0FBTyxNQUFjLEtBQWEsYUFBc0IsTUFBTSxZQUFvQixJQUFJO0VBQ3BGLE9BQU8sb0JBQW9CLElBQUksR0FBRyxhQUFhLGdCQUFnQixL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
@@ -1,6 +1,6 @@
1
1
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
2
2
  import { Template, init_template } from "../template.js";
3
- //#region src/template/implementations/view_search_input.template.ts
3
+ // src/template/implementations/view_search_input.template.ts
4
4
  init_entity_manager();
5
5
  init_template();
6
6
  var Template__view_search_input = class extends Template {
@@ -86,7 +86,6 @@ export function ${names.capital}SearchInput({
86
86
  };
87
87
  }
88
88
  };
89
- //#endregion
90
89
  export { Template__view_search_input };
91
90
 
92
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19zZWFyY2hfaW5wdXQudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy92aWV3X3NlYXJjaF9pbnB1dC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfc2VhcmNoX2lucHV0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dC50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImNvbW1vbi5zZWFyY2hQbGFjZWhvbGRlclwiXTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfc2VhcmNoX2lucHV0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgQnV0dG9uLCBFbnVtU2VsZWN0LCBJbnB1dCB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVNvbmFtdUJhc2VDb250ZXh0IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29udGV4dHNcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZCwgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkTGFiZWwgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9zZWFyY2hcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmV4cG9ydCB0eXBlICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dFByb3BzID0ge1xuICBpbnB1dDoge1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICAgIG9uVmFsdWVDaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIH07XG4gIGRyb3Bkb3duOiB7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXQoe1xuICBpbnB1dDogeyB2YWx1ZTogaW5wdXRWYWx1ZSwgb25WYWx1ZUNoYW5nZTogaW5wdXRPblZhbHVlQ2hhbmdlIH0sXG4gIGRyb3Bkb3duOiBkcm9wZG93blByb3BzLFxufTogJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0UHJvcHMpIHtcbiAgY29uc3QgW2tleXdvcmQsIHNldEtleXdvcmRdID0gdXNlU3RhdGU8c3RyaW5nPihpbnB1dFZhbHVlID8/IFwiXCIpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9ICgpID0+IHtcbiAgICBpbnB1dE9uVmFsdWVDaGFuZ2U/LihrZXl3b3JkIHx8IHVuZGVmaW5lZCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIGhhbmRsZVNlYXJjaCgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgIDxFbnVtU2VsZWN0XG4gICAgICAgIGVudW09eyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZH1cbiAgICAgICAgbGFiZWxzPXske25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRMYWJlbH1cbiAgICAgICAgdmFsdWU9e2Ryb3Bkb3duUHJvcHMudmFsdWV9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRyb3Bkb3duUHJvcHMub25WYWx1ZUNoYW5nZT8uKHZhbHVlIGFzIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpO1xuICAgICAgICB9fVxuICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoXCIpfVxuICAgICAgICBjbGFzc05hbWU9XCJ3LVsxNTBweF0gaC04XCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIil9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHctWzIwMHB4XSBwci04XCJcbiAgICAgICAgICB2YWx1ZT17a2V5d29yZH1cbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEtleXdvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImdob3N0XCIgb25DbGljaz17aGFuZGxlU2VhcmNofSBpY29uPXs8U2VhcmNoSWNvbiAvPn0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztvQkFBMkQ7Y0FHckI7QUFFdEMsSUFBYSw4QkFBYixjQUFpRCxTQUFTO0NBQ3hELGNBQWM7RUFDWixNQUFNLG1CQUFtQjtDQUMzQjtDQUVBLGlCQUFpQixPQUEwQjtFQUN6QyxPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVE7RUFDckM7Q0FDRjtDQUVBLHNCQUFnRDtFQUM5QyxPQUFPLENBQUMsMEJBQTBCO0NBQ3BDO0NBRUEsTUFBTSxPQUFPLEVBQUUsWUFBa0Q7RUFDL0QsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLEtBQUs7R0FDOUIsTUFBTTs7Ozs7V0FLRCxNQUFNLFFBQVEsZUFBZSxNQUFNLFFBQVE7OztjQUd4QyxNQUFNLFFBQVE7Ozs7Ozs7Ozs7O2tCQVdWLE1BQU0sUUFBUTs7O0tBRzNCLE1BQU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7OztnQkFnQkgsTUFBTSxRQUFRO2tCQUNaLE1BQU0sUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztRQXNCeEIsS0FBSztHQUNQLFlBQVksQ0FBQztFQUNmO0NBQ0Y7QUFDRiJ9
91
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19zZWFyY2hfaW5wdXQudGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy92aWV3X3NlYXJjaF9pbnB1dC50ZW1wbGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfc2VhcmNoX2lucHV0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfc2VhcmNoX2lucHV0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dC50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImNvbW1vbi5zZWFyY2hQbGFjZWhvbGRlclwiXTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfc2VhcmNoX2lucHV0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHsgQnV0dG9uLCBFbnVtU2VsZWN0LCBJbnB1dCB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVNvbmFtdUJhc2VDb250ZXh0IH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29udGV4dHNcIjtcbmltcG9ydCB0eXBlIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZCwgJHtuYW1lcy5jYXBpdGFsfVNlYXJjaEZpZWxkTGFiZWwgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgU2VhcmNoSWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9zZWFyY2hcIjtcbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmV4cG9ydCB0eXBlICR7bmFtZXMuY2FwaXRhbH1TZWFyY2hJbnB1dFByb3BzID0ge1xuICBpbnB1dDoge1xuICAgIHZhbHVlPzogc3RyaW5nO1xuICAgIG9uVmFsdWVDaGFuZ2U/OiAodmFsdWU6IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpID0+IHZvaWQ7XG4gIH07XG4gIGRyb3Bkb3duOiB7XG4gICAgdmFsdWU/OiBzdHJpbmc7XG4gICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCkgPT4gdm9pZDtcbiAgfTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWx9U2VhcmNoSW5wdXQoe1xuICBpbnB1dDogeyB2YWx1ZTogaW5wdXRWYWx1ZSwgb25WYWx1ZUNoYW5nZTogaW5wdXRPblZhbHVlQ2hhbmdlIH0sXG4gIGRyb3Bkb3duOiBkcm9wZG93blByb3BzLFxufTogJHtuYW1lcy5jYXBpdGFsfVNlYXJjaElucHV0UHJvcHMpIHtcbiAgY29uc3QgW2tleXdvcmQsIHNldEtleXdvcmRdID0gdXNlU3RhdGU8c3RyaW5nPihpbnB1dFZhbHVlID8/IFwiXCIpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9ICgpID0+IHtcbiAgICBpbnB1dE9uVmFsdWVDaGFuZ2U/LihrZXl3b3JkIHx8IHVuZGVmaW5lZCk7XG4gIH07XG5cbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgaWYgKGUua2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIGhhbmRsZVNlYXJjaCgpO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTFcIj5cbiAgICAgIDxFbnVtU2VsZWN0XG4gICAgICAgIGVudW09eyR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZH1cbiAgICAgICAgbGFiZWxzPXske25hbWVzLmNhcGl0YWx9U2VhcmNoRmllbGRMYWJlbH1cbiAgICAgICAgdmFsdWU9e2Ryb3Bkb3duUHJvcHMudmFsdWV9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9eyh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGRyb3Bkb3duUHJvcHMub25WYWx1ZUNoYW5nZT8uKHZhbHVlIGFzIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpO1xuICAgICAgICB9fVxuICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoXCIpfVxuICAgICAgICBjbGFzc05hbWU9XCJ3LVsxNTBweF0gaC04XCJcbiAgICAgIC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cInJlbGF0aXZlIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxJbnB1dFxuICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj17U0QoXCJjb21tb24uc2VhcmNoUGxhY2Vob2xkZXJcIil9XG4gICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHctWzIwMHB4XSBwci04XCJcbiAgICAgICAgICB2YWx1ZT17a2V5d29yZH1cbiAgICAgICAgICBvbkNoYW5nZT17KGUpID0+IHNldEtleXdvcmQoZS50YXJnZXQudmFsdWUpfVxuICAgICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgLz5cbiAgICAgICAgPEJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgdmFyaWFudD1cImdob3N0XCIgb25DbGljaz17aGFuZGxlU2VhcmNofSBpY29uPXs8U2VhcmNoSWNvbiAvPn0gLz5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztBQUEyRCxvQkFBQTtBQUdyQixjQUFBO0FBRXRDLElBQWEsOEJBQWIsY0FBaUQsU0FBUztDQUN4RCxjQUFjO0VBQ1osTUFBTSxtQkFBbUI7Q0FDM0I7Q0FFQSxpQkFBaUIsT0FBMEI7RUFDekMsT0FBTztHQUNMLFFBQVE7R0FDUixNQUFNLEdBQUcsTUFBTSxHQUFHLEdBQUcsTUFBTSxRQUFRO0VBQ3JDO0NBQ0Y7Q0FFQSxzQkFBZ0Q7RUFDOUMsT0FBTyxDQUFDLDBCQUEwQjtDQUNwQztDQUVBLE1BQU0sT0FBTyxFQUFFLFlBQWtEO0VBQy9ELE1BQU0sUUFBUSxjQUFjLGVBQWUsUUFBUTtFQUVuRCxPQUFPO0dBQ0wsR0FBRyxLQUFLLGlCQUFpQixLQUFLO0dBQzlCLE1BQU07Ozs7O1dBS0QsTUFBTSxRQUFRLGVBQWUsTUFBTSxRQUFROzs7Y0FHeEMsTUFBTSxRQUFROzs7Ozs7Ozs7OztrQkFXVixNQUFNLFFBQVE7OztLQUczQixNQUFNLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Z0JBZ0JILE1BQU0sUUFBUTtrQkFDWixNQUFNLFFBQVE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7UUFzQnhCLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
@@ -5,15 +5,21 @@ import { BUILT_IN_TYPES, getZodTypeById, init_zod_converter, propNodeToZodTypeDe
5
5
  import { getColumnsNode, init_entity_converter, propNodeToZodType } from "./entity-converter.js";
6
6
  import { extractObjectDeclaration, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers } from "./helpers.js";
7
7
  import { init_template_types } from "./template-types.js";
8
- //#endregion
9
- __esmMin((() => {
8
+ // src/template/index.ts
9
+ var init_template = __esmMin((() => {
10
10
  init_entity_converter();
11
11
  init_helpers();
12
12
  init_template$1();
13
13
  init_template_manager();
14
14
  init_template_types();
15
15
  init_zod_converter();
16
- }))();
16
+ }));
17
+ init_template$1();
18
+ init_template_manager();
19
+ init_zod_converter();
20
+ init_entity_converter();
21
+ init_helpers();
22
+ init_template();
17
23
  export { BUILT_IN_TYPES, Template, TemplateManager, TemplateManagerClass, extractObjectDeclaration, getColumnsNode, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, getZodTypeById, propNodeToZodType, propNodeToZodTypeDef, propToZodType, propToZodTypeDef, zodTypeToRenderingNode, zodTypeToTsTypeDef, zodTypeToZodCode };
18
24
 
19
25
  //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gXCIuL2VudGl0eS1jb252ZXJ0ZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2hlbHBlcnNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3RlbXBsYXRlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS1tYW5hZ2VyXCI7XG5leHBvcnQgKiBmcm9tIFwiLi90ZW1wbGF0ZS10eXBlc1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vem9kLWNvbnZlcnRlclwiO1xuIl0sIm1hcHBpbmdzIjoiIn0=
@@ -4,7 +4,7 @@ import { globAsync, init_async_utils } from "../utils/async-utils.js";
4
4
  import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
5
5
  import { Template, init_template } from "./template.js";
6
6
  import path from "path";
7
- //#region src/template/template-manager.ts
7
+ // src/template/template-manager.ts
8
8
  var TemplateManagerClass, TemplateManager;
9
9
  var init_template_manager = __esmMin((() => {
10
10
  init_async_utils();
@@ -116,8 +116,7 @@ var init_template_manager = __esmMin((() => {
116
116
  };
117
117
  TemplateManager = new TemplateManagerClass();
118
118
  }));
119
- //#endregion
120
119
  init_template_manager();
121
120
  export { TemplateManager, TemplateManagerClass, init_template_manager };
122
121
 
123
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtbWFuYWdlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlS2V5IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZVwiO1xuXG50eXBlIFRlbXBsYXRlQ29uc3RydWN0b3IgPSBuZXcgKCkgPT4gVGVtcGxhdGU7XG5cbmNsYXNzIFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IE1hcDxUZW1wbGF0ZUtleSB8IHN0cmluZywgVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDquLDrs7gg66mU7ISc65OcXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOu5jO2KuOyduCDthZztlIzrpr8g66Gc65OcIChpbXBsZW1lbnRhdGlvbnMvKi50ZW1wbGF0ZS5qcylcbiAgICovXG4gIGFzeW5jIGF1dG9sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKFxuICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiaW1wbGVtZW50YXRpb25zLyoudGVtcGxhdGUuanNcIiksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdGVtcGxhdGVGaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4odGVtcGxhdGVGaWxlKTtcbiAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAxICYmIHRoaXMuaXNUZW1wbGF0ZUNsYXNzKHRlbXBsYXRlc1swXS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGVtcGxhdGVzWzBdLnZhbHVlKCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLnNldChpbnN0YW5jZS5rZXksIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVtcGxhdGUgJHt0ZW1wbGF0ZUZpbGV9IHNob3VsZCBleHBvcnQgb25seSBvbmUgY2xhc3MgdGhhdCBleHRlbmRzIFRlbXBsYXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHRlbXBsYXRlXSBvZiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgVGVtcGxhdGUuZ2V0VGVtcGxhdGVzTWFwKCkuc2V0KFxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgdGVtcGxhdGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDthZztlIzrpr8g64uk7IucIOuhnOuTnFxuICAgKi9cbiAgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgVGVtcGxhdGUuY2xlYXJUZW1wbGF0ZXMoKTtcbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlITroZzsoJ3tirgg65SU66CJ7Yag66as7JeQ7IScIOy7pOyKpO2FgCDthZztlIzrpr8g66Gc65OcXG4gICAqL1xuICBhc3luYyBsb2FkRnJvbURpcmVjdG9yeShkaXI6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IGdsb2JBc3luYyhwYXRoLmpvaW4oZGlyLCBcIioudGVtcGxhdGUue3RzLGpzfVwiKSk7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0ZW1wbGF0ZUZpbGVzKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHVua25vd24+KGZpbGUpO1xuICAgICAgZm9yIChjb25zdCB7IHZhbHVlIH0gb2YgdGVtcGxhdGVzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVDbGFzcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB2YWx1ZSgpO1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXIoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGlzVGVtcGxhdGVDbGFzczxWYWx1ZT4odmFsdWU6IFZhbHVlKTogdmFsdWUgaXMgVmFsdWUgJiBUZW1wbGF0ZUNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvblZhbHVlKHZhbHVlKSAmJiB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBUZW1wbGF0ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIO2FnO2UjOumvyDrk7HroZ1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog7YWc7ZSM66a/IOuTseuhnVxuICAgKi9cbiAgcmVnaXN0ZXIodGVtcGxhdGU6IFRlbXBsYXRlKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZXMuc2V0KHRlbXBsYXRlLmtleSwgdGVtcGxhdGUpO1xuICAgIC8vIO2VmOychCDtmLjtmZhcbiAgICBUZW1wbGF0ZS5nZXRUZW1wbGF0ZXNNYXAoKS5zZXQodGVtcGxhdGUua2V5LCB0ZW1wbGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICog7Jes65+sIO2FnO2UjOumvyDrk7HroZ1cbiAgICovXG4gIHJlZ2lzdGVyQWxsKHRlbXBsYXRlczogVGVtcGxhdGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyKHRlbXBsYXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDthZztlIzrpr8g7KGw7ZqMXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobDtmoxcbiAgICog67mM7Yq47J24IDog7J6Q64+Z7JmE7ISxIOyngOybkFxuICAgKiDsu6TsiqTthYAgOiDsnoTsnZgg66y47J6Q7Je0IOyngOybkFxuICAgKi9cbiAgZ2V0KGtleTogVGVtcGxhdGVLZXkgfCAoc3RyaW5nICYge30pKTogVGVtcGxhdGUge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSAnJHtrZXl9JyBub3QgZm91bmQuIEF2YWlsYWJsZTogWyR7dGhpcy5nZXRBbGxLZXlzKCkuam9pbihcIiwgXCIpfV1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobTsnqwg7Jes67aAXG4gICAqL1xuICBleGlzdHMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuaGFzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICog66qo65OgIO2FnO2UjOumvyDtgqQg66qp66GdXG4gICAqL1xuICBnZXRBbGxLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlcy5rZXlzKCkpLnRvU29ydGVkKCk7XG4gIH1cblxuICAvKipcbiAgICog65Ox66Gd65CcIO2FnO2UjOumvyDqsJzsiJhcbiAgICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLnNpemU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDthYzsiqTtirgg7Jyg7Yu466as7YuwXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOuqqOuToCDsg4Htg5wg7LSI6riw7ZmUICjthYzsiqTtirjsmqkpXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBsYXRlcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG4gICAgVGVtcGxhdGUuY2xlYXJUZW1wbGF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDqsqnrpqzrkJwg7J247Iqk7YS07IqkIOyDneyEsSAo7YWM7Iqk7Yq47JqpKVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKCk6IFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgICByZXR1cm4gbmV3IFRlbXBsYXRlTWFuYWdlckNsYXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXJDbGFzcygpO1xuZXhwb3J0IHsgVGVtcGxhdGVNYW5hZ2VyQ2xhc3MgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O2tCQUdnRDtnQkFDRTtvQkFDTTtlQUNuQjtDQUkvQix1QkFBTixNQUFNLHFCQUFxQjtFQUN6Qiw0QkFBeUQsSUFBSSxJQUFJO0VBQ2pFLGVBQXdCOzs7O0VBU3hCLE1BQU0sV0FBMEI7R0FDOUIsSUFBSSxLQUFLLGNBQ1A7R0FFRixNQUFNLGdCQUFnQixNQUFNLFVBQzFCLEtBQUssS0FBSyxPQUFPLEtBQUssU0FBUywrQkFBK0IsQ0FDaEU7R0FFQSxLQUFLLE1BQU0sZ0JBQWdCLGVBQWU7SUFDeEMsTUFBTSxZQUFZLE1BQU0sY0FBdUIsWUFBWTtJQUMzRCxJQUFJLFVBQVUsV0FBVyxLQUFLLEtBQUssZ0JBQWdCLFVBQVUsRUFBRSxDQUFDLEtBQUssR0FBRztLQUN0RSxNQUFNLFdBQVcsSUFBSSxVQUFVLEVBQUUsQ0FBQyxNQUFNO0tBQ3hDLEtBQUssVUFBVSxJQUFJLFNBQVMsS0FBSyxRQUFRO0lBQzNDLE9BQ0UsTUFBTSxJQUFJLE1BQ1IsWUFBWSxhQUFhLG9EQUMzQjtHQUVKO0dBRUEsS0FBSyxNQUFNLENBQUMsS0FBSyxhQUFhLEtBQUssV0FDakMsU0FBUyxnQkFBZ0IsQ0FBQyxDQUFDLElBQzZCLEtBQ3RELFFBQ0Y7R0FHRixLQUFLLGVBQWU7RUFDdEI7Ozs7RUFLQSxNQUFNLFNBQXdCO0dBQzVCLEtBQUssVUFBVSxNQUFNO0dBQ3JCLFNBQVMsZUFBZTtHQUN4QixLQUFLLGVBQWU7R0FDcEIsTUFBTSxLQUFLLFNBQVM7RUFDdEI7Ozs7RUFLQSxNQUFNLGtCQUFrQixLQUE4QjtHQUNwRCxNQUFNLGdCQUFnQixNQUFNLFVBQVUsS0FBSyxLQUFLLEtBQUssb0JBQW9CLENBQUM7R0FDMUUsSUFBSSxRQUFRO0dBRVosS0FBSyxNQUFNLFFBQVEsZUFBZTtJQUNoQyxNQUFNLFlBQVksTUFBTSxjQUF1QixJQUFJO0lBQ25ELEtBQUssTUFBTSxFQUFFLFdBQVcsV0FDdEIsSUFBSSxLQUFLLGdCQUFnQixLQUFLLEdBQUc7S0FDL0IsTUFBTSxXQUFXLElBQUksTUFBTTtLQUMzQixLQUFLLFNBQVMsUUFBUTtLQUN0QjtJQUNGO0dBRUo7R0FFQSxPQUFPO0VBQ1Q7RUFFQSxnQkFBK0IsT0FBb0Q7R0FDakYsT0FBTyxnQkFBZ0IsS0FBSyxLQUFLLE1BQU0scUJBQXFCO0VBQzlEOzs7O0VBU0EsU0FBUyxVQUEwQjtHQUNqQyxLQUFLLFVBQVUsSUFBSSxTQUFTLEtBQUssUUFBUTtHQUV6QyxTQUFTLGdCQUFnQixDQUFDLENBQUMsSUFBSSxTQUFTLEtBQUssUUFBUTtFQUN2RDs7OztFQUtBLFlBQVksV0FBNkI7R0FDdkMsS0FBSyxNQUFNLFlBQVksV0FDckIsS0FBSyxTQUFTLFFBQVE7RUFFMUI7Ozs7OztFQVdBLElBQUksS0FBNEM7R0FDOUMsTUFBTSxXQUFXLEtBQUssVUFBVSxJQUFJLEdBQUc7R0FDdkMsSUFBSSxDQUFDLFVBQ0gsTUFBTSxJQUFJLE1BQU0sYUFBYSxJQUFJLDJCQUEyQixLQUFLLFdBQVcsQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLEVBQUU7R0FFN0YsT0FBTztFQUNUOzs7O0VBS0EsT0FBTyxLQUFzQjtHQUMzQixPQUFPLEtBQUssVUFBVSxJQUFJLEdBQUc7RUFDL0I7Ozs7RUFLQSxhQUF1QjtHQUNyQixPQUFPLE1BQU0sS0FBSyxLQUFLLFVBQVUsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTO0VBQ3BEOzs7O0VBS0EsSUFBSSxPQUFlO0dBQ2pCLE9BQU8sS0FBSyxVQUFVO0VBQ3hCOzs7O0VBU0EsUUFBYztHQUNaLEtBQUssVUFBVSxNQUFNO0dBQ3JCLEtBQUssZUFBZTtHQUNwQixTQUFTLGVBQWU7RUFDMUI7Ozs7RUFLQSxPQUFPLGlCQUF1QztHQUM1QyxPQUFPLElBQUkscUJBQXFCO0VBQ2xDO0NBQ0Y7Q0FFYSxrQkFBa0IsSUFBSSxxQkFBcUIifQ==
122
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtbWFuYWdlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvdGVtcGxhdGUtbWFuYWdlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlS2V5IH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBnbG9iQXN5bmMgfSBmcm9tIFwiLi4vdXRpbHMvYXN5bmMtdXRpbHNcIjtcbmltcG9ydCB7IGltcG9ydE1lbWJlcnMgfSBmcm9tIFwiLi4vdXRpbHMvZXNtLXV0aWxzXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uVmFsdWUgfSBmcm9tIFwiLi4vdXRpbHMvcnVudGltZS12YWx1ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi90ZW1wbGF0ZVwiO1xuXG50eXBlIFRlbXBsYXRlQ29uc3RydWN0b3IgPSBuZXcgKCkgPT4gVGVtcGxhdGU7XG5cbmNsYXNzIFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IE1hcDxUZW1wbGF0ZUtleSB8IHN0cmluZywgVGVtcGxhdGU+ID0gbmV3IE1hcCgpO1xuICBpc0F1dG9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDquLDrs7gg66mU7ISc65OcXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOu5jO2KuOyduCDthZztlIzrpr8g66Gc65OcIChpbXBsZW1lbnRhdGlvbnMvKi50ZW1wbGF0ZS5qcylcbiAgICovXG4gIGFzeW5jIGF1dG9sb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmlzQXV0b2xvYWRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZUZpbGVzID0gYXdhaXQgZ2xvYkFzeW5jKFxuICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiaW1wbGVtZW50YXRpb25zLyoudGVtcGxhdGUuanNcIiksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdGVtcGxhdGVGaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8dW5rbm93bj4odGVtcGxhdGVGaWxlKTtcbiAgICAgIGlmICh0ZW1wbGF0ZXMubGVuZ3RoID09PSAxICYmIHRoaXMuaXNUZW1wbGF0ZUNsYXNzKHRlbXBsYXRlc1swXS52YWx1ZSkpIHtcbiAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgdGVtcGxhdGVzWzBdLnZhbHVlKCk7XG4gICAgICAgIHRoaXMudGVtcGxhdGVzLnNldChpbnN0YW5jZS5rZXksIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVtcGxhdGUgJHt0ZW1wbGF0ZUZpbGV9IHNob3VsZCBleHBvcnQgb25seSBvbmUgY2xhc3MgdGhhdCBleHRlbmRzIFRlbXBsYXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHRlbXBsYXRlXSBvZiB0aGlzLnRlbXBsYXRlcykge1xuICAgICAgVGVtcGxhdGUuZ2V0VGVtcGxhdGVzTWFwKCkuc2V0KFxuICAgICAgICAvKiBTQUZFVFk6IOyEoO2WiSBab2Qg7KKF66WYIOu2hOq4sOyZgCDthZztlIzrpr8g7J6F66ClIOqzhOyVveydtCDsnbQg6rCS7J2YIO2DgOyeheydhCDrs7TsnqXtlZzri6QuICovIGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgdGVtcGxhdGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDthZztlIzrpr8g64uk7IucIOuhnOuTnFxuICAgKi9cbiAgYXN5bmMgcmVsb2FkKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMudGVtcGxhdGVzLmNsZWFyKCk7XG4gICAgVGVtcGxhdGUuY2xlYXJUZW1wbGF0ZXMoKTtcbiAgICB0aGlzLmlzQXV0b2xvYWRlZCA9IGZhbHNlO1xuICAgIGF3YWl0IHRoaXMuYXV0b2xvYWQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDtlITroZzsoJ3tirgg65SU66CJ7Yag66as7JeQ7IScIOy7pOyKpO2FgCDthZztlIzrpr8g66Gc65OcXG4gICAqL1xuICBhc3luYyBsb2FkRnJvbURpcmVjdG9yeShkaXI6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3QgdGVtcGxhdGVGaWxlcyA9IGF3YWl0IGdsb2JBc3luYyhwYXRoLmpvaW4oZGlyLCBcIioudGVtcGxhdGUue3RzLGpzfVwiKSk7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGZvciAoY29uc3QgZmlsZSBvZiB0ZW1wbGF0ZUZpbGVzKSB7XG4gICAgICBjb25zdCB0ZW1wbGF0ZXMgPSBhd2FpdCBpbXBvcnRNZW1iZXJzPHVua25vd24+KGZpbGUpO1xuICAgICAgZm9yIChjb25zdCB7IHZhbHVlIH0gb2YgdGVtcGxhdGVzKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVGVtcGxhdGVDbGFzcyh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB2YWx1ZSgpO1xuICAgICAgICAgIHRoaXMucmVnaXN0ZXIoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY291bnQ7XG4gIH1cblxuICBwcml2YXRlIGlzVGVtcGxhdGVDbGFzczxWYWx1ZT4odmFsdWU6IFZhbHVlKTogdmFsdWUgaXMgVmFsdWUgJiBUZW1wbGF0ZUNvbnN0cnVjdG9yIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvblZhbHVlKHZhbHVlKSAmJiB2YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBUZW1wbGF0ZTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIO2FnO2UjOumvyDrk7HroZ1cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICog7YWc7ZSM66a/IOuTseuhnVxuICAgKi9cbiAgcmVnaXN0ZXIodGVtcGxhdGU6IFRlbXBsYXRlKTogdm9pZCB7XG4gICAgdGhpcy50ZW1wbGF0ZXMuc2V0KHRlbXBsYXRlLmtleSwgdGVtcGxhdGUpO1xuICAgIC8vIO2VmOychCDtmLjtmZhcbiAgICBUZW1wbGF0ZS5nZXRUZW1wbGF0ZXNNYXAoKS5zZXQodGVtcGxhdGUua2V5LCB0ZW1wbGF0ZSk7XG4gIH1cblxuICAvKipcbiAgICog7Jes65+sIO2FnO2UjOumvyDrk7HroZ1cbiAgICovXG4gIHJlZ2lzdGVyQWxsKHRlbXBsYXRlczogVGVtcGxhdGVbXSk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgdGVtcGxhdGUgb2YgdGVtcGxhdGVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyKHRlbXBsYXRlKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDthZztlIzrpr8g7KGw7ZqMXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobDtmoxcbiAgICog67mM7Yq47J24IDog7J6Q64+Z7JmE7ISxIOyngOybkFxuICAgKiDsu6TsiqTthYAgOiDsnoTsnZgg66y47J6Q7Je0IOyngOybkFxuICAgKi9cbiAgZ2V0KGtleTogVGVtcGxhdGVLZXkgfCAoc3RyaW5nICYge30pKTogVGVtcGxhdGUge1xuICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCF0ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUZW1wbGF0ZSAnJHtrZXl9JyBub3QgZm91bmQuIEF2YWlsYWJsZTogWyR7dGhpcy5nZXRBbGxLZXlzKCkuam9pbihcIiwgXCIpfV1gKTtcbiAgICB9XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyDsobTsnqwg7Jes67aAXG4gICAqL1xuICBleGlzdHMoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZXMuaGFzKGtleSk7XG4gIH1cblxuICAvKipcbiAgICog66qo65OgIO2FnO2UjOumvyDtgqQg66qp66GdXG4gICAqL1xuICBnZXRBbGxLZXlzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlcy5rZXlzKCkpLnRvU29ydGVkKCk7XG4gIH1cblxuICAvKipcbiAgICog65Ox66Gd65CcIO2FnO2UjOumvyDqsJzsiJhcbiAgICovXG4gIGdldCBzaXplKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLnNpemU7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyDthYzsiqTtirgg7Jyg7Yu466as7YuwXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIOuqqOuToCDsg4Htg5wg7LSI6riw7ZmUICjthYzsiqTtirjsmqkpXG4gICAqL1xuICByZXNldCgpOiB2b2lkIHtcbiAgICB0aGlzLnRlbXBsYXRlcy5jbGVhcigpO1xuICAgIHRoaXMuaXNBdXRvbG9hZGVkID0gZmFsc2U7XG4gICAgVGVtcGxhdGUuY2xlYXJUZW1wbGF0ZXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDqsqnrpqzrkJwg7J247Iqk7YS07IqkIOyDneyEsSAo7YWM7Iqk7Yq47JqpKVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZUluc3RhbmNlKCk6IFRlbXBsYXRlTWFuYWdlckNsYXNzIHtcbiAgICByZXR1cm4gbmV3IFRlbXBsYXRlTWFuYWdlckNsYXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFRlbXBsYXRlTWFuYWdlciA9IG5ldyBUZW1wbGF0ZU1hbmFnZXJDbGFzcygpO1xuZXhwb3J0IHsgVGVtcGxhdGVNYW5hZ2VyQ2xhc3MgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0NBR2dELGlCQUFBO0NBQ0UsZUFBQTtDQUNNLG1CQUFBO0NBQ25CLGNBQUE7Q0FJL0IsdUJBQU4sTUFBTSxxQkFBcUI7RUFDekIsNEJBQXlELElBQUksSUFBSTtFQUNqRSxlQUF3Qjs7OztFQVN4QixNQUFNLFdBQTBCO0dBQzlCLElBQUksS0FBSyxjQUNQO0dBRUYsTUFBTSxnQkFBZ0IsTUFBTSxVQUMxQixLQUFLLEtBQUssWUFBWSxTQUFTLCtCQUErQixDQUNoRTtHQUVBLEtBQUssTUFBTSxnQkFBZ0IsZUFBZTtJQUN4QyxNQUFNLFlBQVksTUFBTSxjQUF1QixZQUFZO0lBQzNELElBQUksVUFBVSxXQUFXLEtBQUssS0FBSyxnQkFBZ0IsVUFBVSxFQUFFLENBQUMsS0FBSyxHQUFHO0tBQ3RFLE1BQU0sV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDLE1BQU07S0FDeEMsS0FBSyxVQUFVLElBQUksU0FBUyxLQUFLLFFBQVE7SUFDM0MsT0FDRSxNQUFNLElBQUksTUFDUixZQUFZLGFBQWEsb0RBQzNCO0dBRUo7R0FFQSxLQUFLLE1BQU0sQ0FBQyxLQUFLLGFBQWEsS0FBSyxXQUNqQyxTQUFTLGdCQUFnQixDQUFDLENBQUMsSUFDNkIsS0FDdEQsUUFDRjtHQUdGLEtBQUssZUFBZTtFQUN0Qjs7OztFQUtBLE1BQU0sU0FBd0I7R0FDNUIsS0FBSyxVQUFVLE1BQU07R0FDckIsU0FBUyxlQUFlO0dBQ3hCLEtBQUssZUFBZTtHQUNwQixNQUFNLEtBQUssU0FBUztFQUN0Qjs7OztFQUtBLE1BQU0sa0JBQWtCLEtBQThCO0dBQ3BELE1BQU0sZ0JBQWdCLE1BQU0sVUFBVSxLQUFLLEtBQUssS0FBSyxvQkFBb0IsQ0FBQztHQUMxRSxJQUFJLFFBQVE7R0FFWixLQUFLLE1BQU0sUUFBUSxlQUFlO0lBQ2hDLE1BQU0sWUFBWSxNQUFNLGNBQXVCLElBQUk7SUFDbkQsS0FBSyxNQUFNLEVBQUUsV0FBVyxXQUN0QixJQUFJLEtBQUssZ0JBQWdCLEtBQUssR0FBRztLQUMvQixNQUFNLFdBQVcsSUFBSSxNQUFNO0tBQzNCLEtBQUssU0FBUyxRQUFRO0tBQ3RCO0lBQ0Y7R0FFSjtHQUVBLE9BQU87RUFDVDtFQUVBLGdCQUErQixPQUFvRDtHQUNqRixPQUFPLGdCQUFnQixLQUFLLEtBQUssTUFBTSxxQkFBcUI7RUFDOUQ7Ozs7RUFTQSxTQUFTLFVBQTBCO0dBQ2pDLEtBQUssVUFBVSxJQUFJLFNBQVMsS0FBSyxRQUFRO0dBRXpDLFNBQVMsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLFNBQVMsS0FBSyxRQUFRO0VBQ3ZEOzs7O0VBS0EsWUFBWSxXQUE2QjtHQUN2QyxLQUFLLE1BQU0sWUFBWSxXQUNyQixLQUFLLFNBQVMsUUFBUTtFQUUxQjs7Ozs7O0VBV0EsSUFBSSxLQUE0QztHQUM5QyxNQUFNLFdBQVcsS0FBSyxVQUFVLElBQUksR0FBRztHQUN2QyxJQUFJLENBQUMsVUFDSCxNQUFNLElBQUksTUFBTSxhQUFhLElBQUksMkJBQTJCLEtBQUssV0FBVyxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsRUFBRTtHQUU3RixPQUFPO0VBQ1Q7Ozs7RUFLQSxPQUFPLEtBQXNCO0dBQzNCLE9BQU8sS0FBSyxVQUFVLElBQUksR0FBRztFQUMvQjs7OztFQUtBLGFBQXVCO0dBQ3JCLE9BQU8sTUFBTSxLQUFLLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxDQUFDLFNBQVM7RUFDcEQ7Ozs7RUFLQSxJQUFJLE9BQWU7R0FDakIsT0FBTyxLQUFLLFVBQVU7RUFDeEI7Ozs7RUFTQSxRQUFjO0dBQ1osS0FBSyxVQUFVLE1BQU07R0FDckIsS0FBSyxlQUFlO0dBQ3BCLFNBQVMsZUFBZTtFQUMxQjs7OztFQUtBLE9BQU8saUJBQXVDO0dBQzVDLE9BQU8sSUFBSSxxQkFBcUI7RUFDbEM7Q0FDRjtDQUVhLGtCQUFrQixJQUFJLHFCQUFxQiJ9
@@ -1,7 +1,6 @@
1
1
  import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
- //#region src/template/template-types.ts
2
+ // src/template/template-types.ts
3
3
  var init_template_types = __esmMin((() => {}));
4
- //#endregion
5
4
  init_template_types();
6
5
  export { init_template_types };
7
6
 
@@ -3,7 +3,7 @@ import { init_runtime_value, isFunctionValue } from "../utils/runtime-value.js";
3
3
  import { globAsync, init_async_utils } from "../utils/async-utils.js";
4
4
  import { importMembers, init_esm_utils } from "../utils/esm-utils.js";
5
5
  import path from "path";
6
- //#region src/template/template.ts
6
+ // src/template/template.ts
7
7
  var Template;
8
8
  var init_template = __esmMin((() => {
9
9
  init_async_utils();
@@ -65,8 +65,7 @@ var init_template = __esmMin((() => {
65
65
  }
66
66
  };
67
67
  }));
68
- //#endregion
69
68
  init_template();
70
69
  export { Template, init_template };
71
70
 
72
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3RlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlS2V5LCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuZXhwb3J0IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSA9IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbiAgY3VzdG9tSGVhZGVycz86IHN0cmluZ1tdO1xuICBwcmVUZW1wbGF0ZXM/OiB7XG4gICAga2V5OiBUZW1wbGF0ZUtleTtcbiAgICBvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVGVtcGxhdGVLZXldO1xuICB9W107XG59O1xuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDrgpjtg4DrgrTripQg67Kg7J207IqkIO2BtOuemOyKpOyeheuLiOuLpC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlbXBsYXRlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgdGVtcGxhdGVzOiBNYXA8VGVtcGxhdGVLZXksIFRlbXBsYXRlPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMga2V5OiBUZW1wbGF0ZUtleSkge31cblxuICAvKipcbiAgICog7YWc7ZSM66a/IOq1rO2YhOyytOqwgCDsnojripQg65SU66CJ7Yag66as7J2YIOuqqOuToCDthZztlIzrpr/snYQg66Gc65Oc7ZWp64uI64ukLlxuICAgKiDthZztlIzrpr/snbQg7ZWE7JqUKFRlbXBsYXRlTWFuYWdlci5nZXQp7ZW07KeA6riwIOyghOyXkCDstZzshowg7ZWcIOuyiCDtmLjstpztlbTso7zshZTslbwg7ZWp64uI64ukLlxuICAgKiBAZGVwcmVjYXRlZCBUZW1wbGF0ZU1hbmFnZXIuYXV0b2xvYWQoKSDsgqzsmqkg6raM7J6lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGF1dG9sb2FkKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlRmlsZXMgPSBhd2FpdCBnbG9iQXN5bmMoXG4gICAgICAvLyBTb25hbXXsnZgg7L2U65Oc67Kg7J207Iqk64qUIO2VreyDgSDruYzrk5zrkJwg7LGE66GcIGRpc3Qg7IaN7JeQIOuouOustOultOuvgOuhnCxcbiAgICAgIC8vIO2YhOyerCDtjIzsnbzsnYQg6riw7KSA7Jy866GcIOuniOywrOqwgOyngOuhnCBkaXN0IOyGjeyXkCDsnojripQg7YWc7ZSM66a/IOq1rO2YhOyytCBqcyDtjIzsnbzrk6TsnYQg7LC+7Iq164uI64ukLlxuICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiaW1wbGVtZW50YXRpb25zLyoudGVtcGxhdGUuanNcIiksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdGVtcGxhdGVGaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGltcG9ydE1lbWJlcnPsnZgg67CY7ZmYIO2DgOyeheydhCDrqoXsi5zsoIHsnLzroZwg7KeA7KCV7ZWgIOyImCDsl4bsnYxcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8YW55Pih0ZW1wbGF0ZUZpbGUpO1xuICAgICAgaWYgKFxuICAgICAgICB0ZW1wbGF0ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIGlzRnVuY3Rpb25WYWx1ZSh0ZW1wbGF0ZXNbMF0udmFsdWUpICYmXG4gICAgICAgIHRlbXBsYXRlc1swXS52YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBUZW1wbGF0ZVxuICAgICAgKSB7XG4gICAgICAgIC8vIO2BtOuemOyKpOydmCDsnbjsiqTthLTsiqTrpbwg7IOd7ISx7ZWY7JesIOuTseuhnVxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0ZW1wbGF0ZXNbMF0udmFsdWUoKTtcbiAgICAgICAgVGVtcGxhdGUudGVtcGxhdGVzLnNldChpbnN0YW5jZS5rZXksIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVtcGxhdGUgJHt0ZW1wbGF0ZUZpbGV9IHNob3VsZCBleHBvcnQgb25seSBvbmUgY2xhc3MgdGhhdCBleHRlbmRzIFRlbXBsYXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgJHt0aGlzLnRlbXBsYXRlcy5zaXplfSB0ZW1wbGF0ZXMuYClcbiAgICAvLyApO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyAqKuyduOyKpO2EtOyKpCoq66W8IGtleeuhnCDssL7slYTsmLXri4jri6QuXG4gICAqIOunjOyVvSDthZztlIzrpr/snbQg66Gc65OcKGF1dG9sb2FkKeuQmOyngCDslYrslZjqsbDrgpgg7LC+64qUIO2FnO2UjOumv+ydtCDsl4bri6TrqbQg7JeQ65+s66W8IOuNmOynkeuLiOuLpC5cbiAgICogQGRlcHJlY2F0ZWQgVGVtcGxhdGVNYW5hZ2VyLmdldCgpIOyCrOyaqSDqtozsnqVcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmaW5kKGtleTogVGVtcGxhdGVLZXkpOiBUZW1wbGF0ZSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBUZW1wbGF0ZS50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGVtcGxhdGUgJHtrZXl9IG5vdCBmb3VuZC4gSXQgbWlnaHQgYmUgYmVjYXVzZSB5b3UgdHJpZWQgdG8gZmluZCBhIHRlbXBsYXRlIGJlZm9yZSBsb2FkaW5nIGFsbCB0ZW1wbGF0ZXMuIERpZCB5b3UgY2FsbCBUZW1wbGF0ZU1hbmFnZXIuYXV0b2xvYWQoKT9gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOuCtOu2gOyaqTogVGVtcGxhdGVNYW5hZ2Vy7JeQ7IScIOyCrOyaqVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRUZW1wbGF0ZXNNYXAoKTogTWFwPFRlbXBsYXRlS2V5LCBUZW1wbGF0ZT4ge1xuICAgIHJldHVybiBUZW1wbGF0ZS50ZW1wbGF0ZXM7XG4gIH1cblxuICAvKipcbiAgICog64K067aA7JqpOiBUZW1wbGF0ZU1hbmFnZXLsl5DshJwg7IKs7JqpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsZWFyVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgIFRlbXBsYXRlLnRlbXBsYXRlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IHJlbmRlcihcbiAgICBvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVGVtcGxhdGVLZXldLFxuICAgIC4uLmV4dHJhOiB1bmtub3duW11cbiAgKTogUmVuZGVyZWRUZW1wbGF0ZSB8IFByb21pc2U8UmVuZGVyZWRUZW1wbGF0ZT47XG5cbiAgcHVibGljIGFic3RyYWN0IGdldFRhcmdldEFuZFBhdGgoXG4gICAgbmFtZXM/OiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgICAuLi5leHRyYTogdW5rbm93bltdXG4gICk6IHtcbiAgICB0YXJnZXQ6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIOydtCDthZztlIzrpr/snbQg7ZWE7JqU66GcIO2VmOuKlCBpMThuIGRpY3Qg7YKk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICog7Iqk7LqQ7Y+065SpIOyLnCDsl6zrn6wg7YWc7ZSM66a/7J2YIO2CpOulvCDrqqjslYTshJwg7ZWcIOuyiOyXkCDsspjrpqztlanri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zIO2VhOyalO2VnCBkaWN0IO2CpCDrsLDsl7Qg65iQ64qUIG51bGwgKGkxOG4g67aI7ZWE7JqUIOyLnClcbiAgICovXG4gIHB1YmxpYyBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgLy8g6riw67O47KCB7Jy866GcIGRpY3Qg7YKk6rCAIO2VhOyalCDsl4bsnYwuIO2VhOyalO2VnCDthZztlIzrpr/sl5DshJwg7Jik67KE65287J2065OcXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7a0JBSWdEO2dCQUNFO29CQUNNO0NBaUJsQyxXQUF0QixNQUFzQixTQUFTO0VBR1Y7RUFGbkIsT0FBZSw0QkFBd0MsSUFBSSxJQUFJO0VBRS9ELFlBQVksS0FBeUI7R0FBbEIsS0FBQSxNQUFBO0VBQW1COzs7Ozs7RUFPdEMsYUFBb0IsV0FBVztHQUM3QixNQUFNLGdCQUFnQixNQUFNLFVBRzFCLEtBQUssS0FBSyxPQUFPLEtBQUssU0FBUywrQkFBK0IsQ0FDaEU7R0FFQSxLQUFLLE1BQU0sZ0JBQWdCLGVBQWU7SUFFeEMsTUFBTSxZQUFZLE1BQU0sY0FBbUIsWUFBWTtJQUN2RCxJQUNFLFVBQVUsV0FBVyxLQUNyQixnQkFBZ0IsVUFBVSxFQUFFLENBQUMsS0FBSyxLQUNsQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLHFCQUFxQixVQUN4QztLQUVBLE1BQU0sV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDLE1BQU07S0FDeEMsU0FBUyxVQUFVLElBQUksU0FBUyxLQUFLLFFBQVE7SUFDL0MsT0FDRSxNQUFNLElBQUksTUFDUixZQUFZLGFBQWEsb0RBQzNCO0dBRUo7RUFLRjs7Ozs7Ozs7RUFTQSxPQUFjLEtBQUssS0FBNEI7R0FDN0MsTUFBTSxXQUFXLFNBQVMsVUFBVSxJQUFJLEdBQUc7R0FDM0MsSUFBSSxDQUFDLFVBQ0gsTUFBTSxJQUFJLE1BQ1IsWUFBWSxJQUFJLG9JQUNsQjtHQUVGLE9BQU87RUFDVDs7OztFQUtBLE9BQWMsa0JBQThDO0dBQzFELE9BQU8sU0FBUztFQUNsQjs7OztFQUtBLE9BQWMsaUJBQXVCO0dBQ25DLFNBQVMsVUFBVSxNQUFNO0VBQzNCOzs7Ozs7O0VBcUJBLHNCQUE4QztHQUU1QyxPQUFPO0VBQ1Q7Q0FDRiJ9
71
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RlbXBsYXRlL3RlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIFRlbXBsYXRlS2V5LCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZ2xvYkFzeW5jIH0gZnJvbSBcIi4uL3V0aWxzL2FzeW5jLXV0aWxzXCI7XG5pbXBvcnQgeyBpbXBvcnRNZW1iZXJzIH0gZnJvbSBcIi4uL3V0aWxzL2VzbS11dGlsc1wiO1xuaW1wb3J0IHsgaXNGdW5jdGlvblZhbHVlIH0gZnJvbSBcIi4uL3V0aWxzL3J1bnRpbWUtdmFsdWVcIjtcblxuZXhwb3J0IHR5cGUgUmVuZGVyZWRUZW1wbGF0ZSA9IHtcbiAgdGFyZ2V0OiBzdHJpbmc7XG4gIHBhdGg6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbiAgY3VzdG9tSGVhZGVycz86IHN0cmluZ1tdO1xuICBwcmVUZW1wbGF0ZXM/OiB7XG4gICAga2V5OiBUZW1wbGF0ZUtleTtcbiAgICBvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVGVtcGxhdGVLZXldO1xuICB9W107XG59O1xuXG4vKipcbiAqIO2FnO2UjOumv+ydhCDrgpjtg4DrgrTripQg67Kg7J207IqkIO2BtOuemOyKpOyeheuLiOuLpC5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRlbXBsYXRlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgdGVtcGxhdGVzOiBNYXA8VGVtcGxhdGVLZXksIFRlbXBsYXRlPiA9IG5ldyBNYXAoKTtcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMga2V5OiBUZW1wbGF0ZUtleSkge31cblxuICAvKipcbiAgICog7YWc7ZSM66a/IOq1rO2YhOyytOqwgCDsnojripQg65SU66CJ7Yag66as7J2YIOuqqOuToCDthZztlIzrpr/snYQg66Gc65Oc7ZWp64uI64ukLlxuICAgKiDthZztlIzrpr/snbQg7ZWE7JqUKFRlbXBsYXRlTWFuYWdlci5nZXQp7ZW07KeA6riwIOyghOyXkCDstZzshowg7ZWcIOuyiCDtmLjstpztlbTso7zshZTslbwg7ZWp64uI64ukLlxuICAgKiBAZGVwcmVjYXRlZCBUZW1wbGF0ZU1hbmFnZXIuYXV0b2xvYWQoKSDsgqzsmqkg6raM7J6lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGF1dG9sb2FkKCkge1xuICAgIGNvbnN0IHRlbXBsYXRlRmlsZXMgPSBhd2FpdCBnbG9iQXN5bmMoXG4gICAgICAvLyBTb25hbXXsnZgg7L2U65Oc67Kg7J207Iqk64qUIO2VreyDgSDruYzrk5zrkJwg7LGE66GcIGRpc3Qg7IaN7JeQIOuouOustOultOuvgOuhnCxcbiAgICAgIC8vIO2YhOyerCDtjIzsnbzsnYQg6riw7KSA7Jy866GcIOuniOywrOqwgOyngOuhnCBkaXN0IOyGjeyXkCDsnojripQg7YWc7ZSM66a/IOq1rO2YhOyytCBqcyDtjIzsnbzrk6TsnYQg7LC+7Iq164uI64ukLlxuICAgICAgcGF0aC5qb2luKGltcG9ydC5tZXRhLmRpcm5hbWUsIFwiaW1wbGVtZW50YXRpb25zLyoudGVtcGxhdGUuanNcIiksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgdGVtcGxhdGVGaWxlIG9mIHRlbXBsYXRlRmlsZXMpIHtcbiAgICAgIC8vIG94bGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55IC0tIGltcG9ydE1lbWJlcnPsnZgg67CY7ZmYIO2DgOyeheydhCDrqoXsi5zsoIHsnLzroZwg7KeA7KCV7ZWgIOyImCDsl4bsnYxcbiAgICAgIGNvbnN0IHRlbXBsYXRlcyA9IGF3YWl0IGltcG9ydE1lbWJlcnM8YW55Pih0ZW1wbGF0ZUZpbGUpO1xuICAgICAgaWYgKFxuICAgICAgICB0ZW1wbGF0ZXMubGVuZ3RoID09PSAxICYmXG4gICAgICAgIGlzRnVuY3Rpb25WYWx1ZSh0ZW1wbGF0ZXNbMF0udmFsdWUpICYmXG4gICAgICAgIHRlbXBsYXRlc1swXS52YWx1ZS5wcm90b3R5cGUgaW5zdGFuY2VvZiBUZW1wbGF0ZVxuICAgICAgKSB7XG4gICAgICAgIC8vIO2BtOuemOyKpOydmCDsnbjsiqTthLTsiqTrpbwg7IOd7ISx7ZWY7JesIOuTseuhnVxuICAgICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyB0ZW1wbGF0ZXNbMF0udmFsdWUoKTtcbiAgICAgICAgVGVtcGxhdGUudGVtcGxhdGVzLnNldChpbnN0YW5jZS5rZXksIGluc3RhbmNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVGVtcGxhdGUgJHt0ZW1wbGF0ZUZpbGV9IHNob3VsZCBleHBvcnQgb25seSBvbmUgY2xhc3MgdGhhdCBleHRlbmRzIFRlbXBsYXRlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgIGNoYWxrLmdyYXkoYFtMb2FkaW5nXSBMb2FkZWQgJHt0aGlzLnRlbXBsYXRlcy5zaXplfSB0ZW1wbGF0ZXMuYClcbiAgICAvLyApO1xuICB9XG5cbiAgLyoqXG4gICAqIO2FnO2UjOumvyAqKuyduOyKpO2EtOyKpCoq66W8IGtleeuhnCDssL7slYTsmLXri4jri6QuXG4gICAqIOunjOyVvSDthZztlIzrpr/snbQg66Gc65OcKGF1dG9sb2FkKeuQmOyngCDslYrslZjqsbDrgpgg7LC+64qUIO2FnO2UjOumv+ydtCDsl4bri6TrqbQg7JeQ65+s66W8IOuNmOynkeuLiOuLpC5cbiAgICogQGRlcHJlY2F0ZWQgVGVtcGxhdGVNYW5hZ2VyLmdldCgpIOyCrOyaqSDqtozsnqVcbiAgICogQHBhcmFtIGtleVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmaW5kKGtleTogVGVtcGxhdGVLZXkpOiBUZW1wbGF0ZSB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBUZW1wbGF0ZS50ZW1wbGF0ZXMuZ2V0KGtleSk7XG4gICAgaWYgKCFpbnN0YW5jZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgVGVtcGxhdGUgJHtrZXl9IG5vdCBmb3VuZC4gSXQgbWlnaHQgYmUgYmVjYXVzZSB5b3UgdHJpZWQgdG8gZmluZCBhIHRlbXBsYXRlIGJlZm9yZSBsb2FkaW5nIGFsbCB0ZW1wbGF0ZXMuIERpZCB5b3UgY2FsbCBUZW1wbGF0ZU1hbmFnZXIuYXV0b2xvYWQoKT9gLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOuCtOu2gOyaqTogVGVtcGxhdGVNYW5hZ2Vy7JeQ7IScIOyCrOyaqVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRUZW1wbGF0ZXNNYXAoKTogTWFwPFRlbXBsYXRlS2V5LCBUZW1wbGF0ZT4ge1xuICAgIHJldHVybiBUZW1wbGF0ZS50ZW1wbGF0ZXM7XG4gIH1cblxuICAvKipcbiAgICog64K067aA7JqpOiBUZW1wbGF0ZU1hbmFnZXLsl5DshJwg7IKs7JqpXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsZWFyVGVtcGxhdGVzKCk6IHZvaWQge1xuICAgIFRlbXBsYXRlLnRlbXBsYXRlcy5jbGVhcigpO1xuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IHJlbmRlcihcbiAgICBvcHRpb25zOiBUZW1wbGF0ZU9wdGlvbnNbVGVtcGxhdGVLZXldLFxuICAgIC4uLmV4dHJhOiB1bmtub3duW11cbiAgKTogUmVuZGVyZWRUZW1wbGF0ZSB8IFByb21pc2U8UmVuZGVyZWRUZW1wbGF0ZT47XG5cbiAgcHVibGljIGFic3RyYWN0IGdldFRhcmdldEFuZFBhdGgoXG4gICAgbmFtZXM/OiBFbnRpdHlOYW1lc1JlY29yZCxcbiAgICAuLi5leHRyYTogdW5rbm93bltdXG4gICk6IHtcbiAgICB0YXJnZXQ6IHN0cmluZztcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH07XG5cbiAgLyoqXG4gICAqIOydtCDthZztlIzrpr/snbQg7ZWE7JqU66GcIO2VmOuKlCBpMThuIGRpY3Qg7YKk66W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAgICog7Iqk7LqQ7Y+065SpIOyLnCDsl6zrn6wg7YWc7ZSM66a/7J2YIO2CpOulvCDrqqjslYTshJwg7ZWcIOuyiOyXkCDsspjrpqztlanri4jri6QuXG4gICAqXG4gICAqIEByZXR1cm5zIO2VhOyalO2VnCBkaWN0IO2CpCDrsLDsl7Qg65iQ64qUIG51bGwgKGkxOG4g67aI7ZWE7JqUIOyLnClcbiAgICovXG4gIHB1YmxpYyBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgLy8g6riw67O47KCB7Jy866GcIGRpY3Qg7YKk6rCAIO2VhOyalCDsl4bsnYwuIO2VhOyalO2VnCDthZztlIzrpr/sl5DshJwg7Jik67KE65287J2065OcXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Q0FJZ0QsaUJBQUE7Q0FDRSxlQUFBO0NBQ00sbUJBQUE7Q0FpQmxDLFdBQXRCLE1BQXNCLFNBQVM7RUFHVjtFQUZuQixPQUFlLDRCQUF3QyxJQUFJLElBQUk7RUFFL0QsWUFBWSxLQUF5QjtHQUFsQixLQUFBLE1BQUE7RUFBbUI7Ozs7OztFQU90QyxhQUFvQixXQUFXO0dBQzdCLE1BQU0sZ0JBQWdCLE1BQU0sVUFHMUIsS0FBSyxLQUFLLFlBQVksU0FBUywrQkFBK0IsQ0FDaEU7R0FFQSxLQUFLLE1BQU0sZ0JBQWdCLGVBQWU7SUFFeEMsTUFBTSxZQUFZLE1BQU0sY0FBbUIsWUFBWTtJQUN2RCxJQUNFLFVBQVUsV0FBVyxLQUNyQixnQkFBZ0IsVUFBVSxFQUFFLENBQUMsS0FBSyxLQUNsQyxVQUFVLEVBQUUsQ0FBQyxNQUFNLHFCQUFxQixVQUN4QztLQUVBLE1BQU0sV0FBVyxJQUFJLFVBQVUsRUFBRSxDQUFDLE1BQU07S0FDeEMsU0FBUyxVQUFVLElBQUksU0FBUyxLQUFLLFFBQVE7SUFDL0MsT0FDRSxNQUFNLElBQUksTUFDUixZQUFZLGFBQWEsb0RBQzNCO0dBRUo7RUFLRjs7Ozs7Ozs7RUFTQSxPQUFjLEtBQUssS0FBNEI7R0FDN0MsTUFBTSxXQUFXLFNBQVMsVUFBVSxJQUFJLEdBQUc7R0FDM0MsSUFBSSxDQUFDLFVBQ0gsTUFBTSxJQUFJLE1BQ1IsWUFBWSxJQUFJLG9JQUNsQjtHQUVGLE9BQU87RUFDVDs7OztFQUtBLE9BQWMsa0JBQThDO0dBQzFELE9BQU8sU0FBUztFQUNsQjs7OztFQUtBLE9BQWMsaUJBQXVCO0dBQ25DLFNBQVMsVUFBVSxNQUFNO0VBQzNCOzs7Ozs7O0VBcUJBLHNCQUE4QztHQUU1QyxPQUFPO0VBQ1Q7Q0FDRiJ9