sonamu 0.9.19 → 0.10.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 (282) hide show
  1. package/dist/_virtual/_rolldown/runtime.js +36 -0
  2. package/dist/ai/agents/agent.js +5 -7
  3. package/dist/ai/agents/index.js +1 -2
  4. package/dist/ai/agents/types.js +1 -1
  5. package/dist/ai/index.js +1 -2
  6. package/dist/ai/providers/rtzr/api.js +2 -3
  7. package/dist/ai/providers/rtzr/error.js +14 -29
  8. package/dist/ai/providers/rtzr/index.js +1 -2
  9. package/dist/ai/providers/rtzr/model.js +13 -20
  10. package/dist/ai/providers/rtzr/options.js +2 -3
  11. package/dist/ai/providers/rtzr/provider.js +2 -3
  12. package/dist/ai/providers/rtzr/utils.js +12 -21
  13. package/dist/api/base-frame.js +4 -4
  14. package/dist/api/caster.js +21 -38
  15. package/dist/api/code-converters.js +41 -98
  16. package/dist/api/config.d.ts +1 -10
  17. package/dist/api/config.d.ts.map +1 -1
  18. package/dist/api/config.js +9 -8
  19. package/dist/api/context.js +2 -3
  20. package/dist/api/decorators.js +80 -116
  21. package/dist/api/index.js +2 -3
  22. package/dist/api/secret.js +6 -10
  23. package/dist/api/sonamu.d.ts.map +1 -1
  24. package/dist/api/sonamu.js +200 -387
  25. package/dist/api/validator.js +5 -8
  26. package/dist/api/websocket-helpers.js +21 -32
  27. package/dist/auth/audit-log/builders.js +2 -3
  28. package/dist/auth/audit-log/events.js +2 -2
  29. package/dist/auth/audit-log/plugin.js +30 -61
  30. package/dist/auth/audit-log-ingestor.js +19 -41
  31. package/dist/auth/auth-generator.js +16 -41
  32. package/dist/auth/better-auth-entities.js +3 -4
  33. package/dist/auth/index.js +2 -3
  34. package/dist/auth/knex-adapter.js +18 -45
  35. package/dist/auth/plugins/entity-definitions/admin.js +2 -2
  36. package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
  37. package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
  38. package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
  39. package/dist/auth/plugins/entity-definitions/index.js +2 -3
  40. package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
  41. package/dist/auth/plugins/entity-definitions/organization.js +2 -2
  42. package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
  43. package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
  44. package/dist/auth/plugins/entity-definitions/sso.js +2 -2
  45. package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
  46. package/dist/auth/plugins/entity-definitions/types.js +1 -1
  47. package/dist/auth/plugins/entity-definitions/username.js +2 -2
  48. package/dist/auth/plugins/index.js +1 -2
  49. package/dist/auth/plugins/wrappers/admin.js +2 -3
  50. package/dist/auth/plugins/wrappers/anonymous.js +2 -3
  51. package/dist/auth/plugins/wrappers/api-key.js +2 -3
  52. package/dist/auth/plugins/wrappers/index.js +1 -2
  53. package/dist/auth/plugins/wrappers/jwt.js +2 -3
  54. package/dist/auth/plugins/wrappers/organization.js +2 -3
  55. package/dist/auth/plugins/wrappers/passkey.js +2 -3
  56. package/dist/auth/plugins/wrappers/phone-number.js +2 -3
  57. package/dist/auth/plugins/wrappers/sso.js +2 -3
  58. package/dist/auth/plugins/wrappers/two-factor.js +2 -3
  59. package/dist/auth/plugins/wrappers/username.js +2 -3
  60. package/dist/bin/build-config.js +2 -2
  61. package/dist/bin/cli.js +151 -258
  62. package/dist/bin/fixture.d.ts.map +1 -1
  63. package/dist/bin/fixture.js +55 -97
  64. package/dist/bin/hmr-hook-register.js +3 -3
  65. package/dist/bin/migrate-targets.d.ts +3 -0
  66. package/dist/bin/migrate-targets.d.ts.map +1 -0
  67. package/dist/bin/migrate-targets.js +11 -0
  68. package/dist/bin/test-command.js +25 -55
  69. package/dist/bin/ts-loader-register.js +5 -6
  70. package/dist/bin/ts-loader-registration.js +6 -13
  71. package/dist/cache/cache-manager.js +3 -4
  72. package/dist/cache/decorator.js +11 -21
  73. package/dist/cache/drivers.js +2 -3
  74. package/dist/cache/index.js +2 -3
  75. package/dist/cache/types.js +1 -1
  76. package/dist/cache-control/cache-control.js +21 -34
  77. package/dist/cache-control/types.js +1 -1
  78. package/dist/compress/compress.js +10 -10
  79. package/dist/compress/index.js +1 -2
  80. package/dist/compress/types.js +1 -1
  81. package/dist/cone/cone-generator.js +25 -63
  82. package/dist/database/_batch_update.js +26 -46
  83. package/dist/database/base-model.js +44 -97
  84. package/dist/database/base-model.types.js +1 -1
  85. package/dist/database/db.d.ts +8 -14
  86. package/dist/database/db.d.ts.map +1 -1
  87. package/dist/database/db.js +127 -72
  88. package/dist/database/knex.js +5 -8
  89. package/dist/database/puri-subset.types.js +1 -1
  90. package/dist/database/puri-wrapper.js +11 -15
  91. package/dist/database/puri.js +117 -234
  92. package/dist/database/puri.types.js +3 -4
  93. package/dist/database/transaction-context.js +4 -5
  94. package/dist/database/upsert-builder.js +109 -176
  95. package/dist/dict/en.d.ts +1 -0
  96. package/dist/dict/en.d.ts.map +1 -1
  97. package/dist/dict/en.js +4 -4
  98. package/dist/dict/index.js +2 -3
  99. package/dist/dict/ko.d.ts +1 -0
  100. package/dist/dict/ko.d.ts.map +1 -1
  101. package/dist/dict/ko.js +4 -4
  102. package/dist/dict/rc-keys.js +3 -4
  103. package/dist/dict/sd.js +8 -19
  104. package/dist/dict/sonamu-dictionary.js +141 -284
  105. package/dist/dict/types.js +1 -1
  106. package/dist/dict/utils.js +4 -5
  107. package/dist/entity/entity-manager.d.ts +2 -2
  108. package/dist/entity/entity-manager.js +34 -82
  109. package/dist/entity/entity-template-cone.js +33 -66
  110. package/dist/entity/entity.js +156 -310
  111. package/dist/env.d.ts +14 -0
  112. package/dist/env.d.ts.map +1 -0
  113. package/dist/env.js +75 -0
  114. package/dist/exceptions/error-handler.js +2 -3
  115. package/dist/exceptions/so-exceptions.js +7 -5
  116. package/dist/filter/index.js +1 -2
  117. package/dist/filter/types.js +3 -4
  118. package/dist/filter/utils.js +21 -54
  119. package/dist/index.js +8 -7
  120. package/dist/logger/category.js +6 -12
  121. package/dist/logger/configure.js +23 -34
  122. package/dist/migration/code-generation.js +146 -314
  123. package/dist/migration/index-where-predicate.js +52 -144
  124. package/dist/migration/migration-set.js +19 -33
  125. package/dist/migration/migrator.d.ts +2 -0
  126. package/dist/migration/migrator.d.ts.map +1 -1
  127. package/dist/migration/migrator.js +69 -53
  128. package/dist/migration/postgresql-schema-reader.js +126 -225
  129. package/dist/migration/slack-confirm.d.ts +1 -0
  130. package/dist/migration/slack-confirm.d.ts.map +1 -1
  131. package/dist/migration/slack-confirm.js +28 -38
  132. package/dist/migration/types.js +1 -1
  133. package/dist/naite/messaging-types.js +1 -1
  134. package/dist/naite/naite-reporter.js +15 -32
  135. package/dist/naite/naite.js +43 -76
  136. package/dist/ssr/index.js +6 -9
  137. package/dist/ssr/registry.js +10 -18
  138. package/dist/ssr/renderer.js +10 -21
  139. package/dist/ssr/types.js +1 -1
  140. package/dist/storage/base-file.js +5 -10
  141. package/dist/storage/buffered-file.js +3 -4
  142. package/dist/storage/drivers.js +2 -3
  143. package/dist/storage/index.js +2 -3
  144. package/dist/storage/s3-driver.js +5 -9
  145. package/dist/storage/storage-manager.js +5 -5
  146. package/dist/storage/types.js +1 -1
  147. package/dist/storage/uploaded-file.js +4 -6
  148. package/dist/stream/index.js +1 -2
  149. package/dist/stream/sse.js +8 -13
  150. package/dist/stream/ws-audience-resolver.js +5 -5
  151. package/dist/stream/ws-audience.js +3 -4
  152. package/dist/stream/ws-cluster-bus.js +3 -4
  153. package/dist/stream/ws-core.js +1 -1
  154. package/dist/stream/ws-delivery.js +11 -25
  155. package/dist/stream/ws-local-connection-store.js +9 -18
  156. package/dist/stream/ws-presence-store.js +43 -97
  157. package/dist/stream/ws-registry.js +17 -22
  158. package/dist/stream/ws-telemetry-memory.js +38 -45
  159. package/dist/stream/ws-telemetry-trace.js +4 -6
  160. package/dist/stream/ws-telemetry.js +82 -135
  161. package/dist/stream/ws.js +47 -91
  162. package/dist/syncer/api-parser.js +81 -147
  163. package/dist/syncer/checksum.js +9 -20
  164. package/dist/syncer/code-generator.js +29 -47
  165. package/dist/syncer/entity-operations.js +17 -27
  166. package/dist/syncer/event-batcher.js +8 -15
  167. package/dist/syncer/file-patterns.js +3 -4
  168. package/dist/syncer/file-tracking.js +6 -10
  169. package/dist/syncer/index.js +1 -2
  170. package/dist/syncer/module-loader.js +10 -26
  171. package/dist/syncer/syncer-actions.js +19 -37
  172. package/dist/syncer/syncer.js +46 -98
  173. package/dist/syncer/watcher.js +12 -26
  174. package/dist/tasks/decorator.js +7 -11
  175. package/dist/tasks/step-wrapper.js +7 -8
  176. package/dist/tasks/workflow-manager.js +18 -25
  177. package/dist/template/entity-converter.js +40 -64
  178. package/dist/template/helpers.js +32 -63
  179. package/dist/template/implementations/entity.template.js +7 -11
  180. package/dist/template/implementations/entry-server.template.js +2 -3
  181. package/dist/template/implementations/generated.template.js +25 -51
  182. package/dist/template/implementations/generated_http.template.js +31 -58
  183. package/dist/template/implementations/generated_sso.template.js +45 -85
  184. package/dist/template/implementations/init_types.template.js +4 -7
  185. package/dist/template/implementations/model.template.js +5 -10
  186. package/dist/template/implementations/model_test.template.js +2 -3
  187. package/dist/template/implementations/queries.template.js +4 -7
  188. package/dist/template/implementations/sd.template.js +17 -35
  189. package/dist/template/implementations/services.template.js +18 -30
  190. package/dist/template/implementations/view_form.template.js +72 -125
  191. package/dist/template/implementations/view_id_all_select.template.js +2 -3
  192. package/dist/template/implementations/view_list.template.js +86 -143
  193. package/dist/template/implementations/view_search_input.template.js +2 -3
  194. package/dist/template/index.js +5 -8
  195. package/dist/template/template-manager.js +13 -26
  196. package/dist/template/template-types.js +2 -3
  197. package/dist/template/template.js +7 -11
  198. package/dist/template/zod-converter.js +173 -348
  199. package/dist/testing/_relation-graph.js +18 -37
  200. package/dist/testing/bootstrap.js +5 -8
  201. package/dist/testing/data-explorer.js +34 -78
  202. package/dist/testing/dev-test-routes.js +54 -60
  203. package/dist/testing/dev-vitest-manager.js +33 -84
  204. package/dist/testing/faker-mappings.js +3 -4
  205. package/dist/testing/fixture-generator.d.ts +2 -1
  206. package/dist/testing/fixture-generator.d.ts.map +1 -1
  207. package/dist/testing/fixture-generator.js +159 -321
  208. package/dist/testing/fixture-loader.js +2 -2
  209. package/dist/testing/fixture-manager.d.ts.map +1 -1
  210. package/dist/testing/fixture-manager.js +124 -227
  211. package/dist/testing/global-setup.d.ts.map +1 -1
  212. package/dist/testing/global-setup.js +29 -17
  213. package/dist/testing/index.js +1 -2
  214. package/dist/testing/naite-vitest-reporter.js +2 -3
  215. package/dist/testing/parallel-db-manager.js +5 -3
  216. package/dist/testing/vitest-helpers.d.ts.map +1 -1
  217. package/dist/testing/vitest-helpers.js +15 -12
  218. package/dist/types/types.d.ts +14 -14
  219. package/dist/types/types.js +27 -50
  220. package/dist/ui/ai-api.js +6 -11
  221. package/dist/ui/ai-client.js +86 -134
  222. package/dist/ui/api.js +99 -195
  223. package/dist/ui/cdd-service.js +78 -130
  224. package/dist/ui/cdd-types.js +1 -1
  225. package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
  226. package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
  227. package/dist/ui-web/index.html +2 -2
  228. package/dist/utils/async-utils.js +13 -25
  229. package/dist/utils/class-name.js +3 -4
  230. package/dist/utils/console-util.js +11 -26
  231. package/dist/utils/controller.d.ts.map +1 -1
  232. package/dist/utils/controller.js +14 -12
  233. package/dist/utils/esm-utils.js +5 -8
  234. package/dist/utils/formatter.js +10 -22
  235. package/dist/utils/fs-utils.js +14 -25
  236. package/dist/utils/lodash-able.js +3 -4
  237. package/dist/utils/model.js +7 -14
  238. package/dist/utils/object-utils.js +41 -73
  239. package/dist/utils/path-utils.js +5 -9
  240. package/dist/utils/process-utils.js +4 -7
  241. package/dist/utils/sql-parser.js +6 -13
  242. package/dist/utils/type-utils.js +16 -26
  243. package/dist/utils/utils.js +18 -40
  244. package/dist/utils/zod-error.js +9 -16
  245. package/dist/vector/chunking.js +24 -37
  246. package/dist/vector/config.js +2 -2
  247. package/dist/vector/embedding.js +8 -19
  248. package/dist/vector/index.js +1 -2
  249. package/dist/vector/types.js +1 -1
  250. package/package.json +7 -7
  251. package/src/__tests__/env.test.ts +127 -0
  252. package/src/api/__tests__/config.test.ts +10 -1
  253. package/src/api/config.ts +4 -12
  254. package/src/api/sonamu.ts +14 -4
  255. package/src/bin/__tests__/migrate-targets.test.ts +28 -0
  256. package/src/bin/__tests__/test-command.test.ts +82 -1
  257. package/src/bin/cli.ts +9 -18
  258. package/src/bin/fixture.ts +5 -4
  259. package/src/bin/migrate-targets.ts +7 -0
  260. package/src/bin/test-command.ts +2 -2
  261. package/src/database/__tests__/db.test.ts +175 -0
  262. package/src/database/db.ts +193 -71
  263. package/src/dict/en.ts +2 -0
  264. package/src/dict/ko.ts +2 -0
  265. package/src/env.ts +123 -0
  266. package/src/migration/__tests__/migrator.test.ts +149 -0
  267. package/src/migration/migrator.ts +74 -17
  268. package/src/migration/slack-confirm.ts +21 -0
  269. package/src/skills/sonamu/database.md +1 -1
  270. package/src/skills/sonamu/entity-basic.md +31 -0
  271. package/src/skills/sonamu/puri.md +22 -0
  272. package/src/skills/sonamu/testing-devrunner.md +1 -1
  273. package/src/skills/sonamu/upsert.md +53 -6
  274. package/src/stream/ws-telemetry-memory.ts +2 -2
  275. package/src/testing/fixture-generator.ts +2 -1
  276. package/src/testing/fixture-manager.ts +3 -4
  277. package/src/testing/global-setup.ts +42 -18
  278. package/src/testing/vitest-helpers.ts +14 -0
  279. package/src/utils/controller.ts +14 -7
  280. package/tsdown.api.config.ts +6 -0
  281. package/dist/_virtual/rolldown_runtime.js +0 -39
  282. package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
@@ -1,23 +1,18 @@
1
- import { __esmMin } from "../_virtual/rolldown_runtime.js";
1
+ import { __esmMin } from "../_virtual/_rolldown/runtime.js";
2
2
  import { init_types, isEnumProp, isRelationProp } from "../types/types.js";
3
3
  import { EntityManager, init_entity_manager } from "../entity/entity-manager.js";
4
4
  import inflection from "inflection";
5
-
6
5
  //#region src/template/helpers.ts
7
6
  /**
8
7
  * Enum의 표시용 라벨을 가져옵니다.
9
8
  * OrderBy, SearchField 등 특수한 경우와 일반 Enum을 구분하여 처리합니다.
10
9
  */
11
10
  function getLabel(entityId, enumId) {
12
- if (enumId.endsWith("OrderBy")) {
13
- return "정렬";
14
- } else if (enumId.endsWith("SearchField")) {
15
- return "검색";
16
- } else {
11
+ if (enumId.endsWith("OrderBy")) return "정렬";
12
+ else if (enumId.endsWith("SearchField")) return "검색";
13
+ else {
17
14
  const enumProp = EntityManager.get(entityId).props.find((prop) => `${entityId}${inflection.camelize(prop.name)}` === enumId);
18
- if (enumProp?.desc) {
19
- return enumProp.desc;
20
- }
15
+ if (enumProp?.desc) return enumProp.desc;
21
16
  return enumId;
22
17
  }
23
18
  }
@@ -26,22 +21,19 @@ function getLabel(entityId, enumId) {
26
21
  * Entity의 prop 중 enum 타입인 것을 찾아 관련 정보를 반환합니다.
27
22
  */
28
23
  function getEnumInfoFromColName(entityId, colName) {
29
- const baseEntity = EntityManager.get(entityId);
30
- const prop = baseEntity.props.find((p) => p.name === colName);
31
- if (prop && isEnumProp(prop)) {
32
- return {
33
- id: prop.id,
34
- targetEntityId: entityId,
35
- targetEntityNames: EntityManager.getNamesFromId(entityId),
36
- title: prop.desc ?? prop.id
37
- };
38
- } else {
24
+ const prop = EntityManager.get(entityId).props.find((p) => p.name === colName);
25
+ if (prop && isEnumProp(prop)) return {
26
+ id: prop.id,
27
+ targetEntityId: entityId,
28
+ targetEntityNames: EntityManager.getNamesFromId(entityId),
29
+ title: prop.desc ?? prop.id
30
+ };
31
+ else {
39
32
  const idCandidate = inflection.camelize(`${inflection.underscore(entityId)}_${inflection.underscore(colName)}`, false);
40
- const targetEntityNames = EntityManager.getNamesFromId(entityId);
41
33
  return {
42
34
  id: idCandidate,
43
35
  targetEntityId: entityId,
44
- targetEntityNames,
36
+ targetEntityNames: EntityManager.getNamesFromId(entityId),
45
37
  title: idCandidate
46
38
  };
47
39
  }
@@ -51,17 +43,11 @@ function getEnumInfoFromColName(entityId, colName) {
51
43
  * 관계형 prop이 아닌 경우 에러를 발생시킵니다.
52
44
  */
53
45
  function getRelationPropFromColName(entityId, colName) {
54
- const baseEntity = EntityManager.get(entityId);
55
- const relProp = baseEntity.props.find((prop) => prop.name === colName);
46
+ const relProp = EntityManager.get(entityId).props.find((prop) => prop.name === colName);
56
47
  if (isRelationProp(relProp)) {
57
- const relEntity = EntityManager.get(relProp.with);
58
- if (relEntity.parentId !== undefined) {
59
- throw new Error("Only parent entities can be used as relation props");
60
- }
48
+ if (EntityManager.get(relProp.with).parentId !== void 0) throw new Error("Only parent entities can be used as relation props");
61
49
  return relProp;
62
- } else {
63
- throw new Error(`찾을 수 없는 Relation ${colName}`);
64
- }
50
+ } else throw new Error(`찾을 수 없는 Relation ${colName}`);
65
51
  }
66
52
  /**
67
53
  * FK 컬럼명에서 실제 relation 이름을 추출합니다.
@@ -76,13 +62,10 @@ function getRelationNameFromColumnName(entityId, colName) {
76
62
  if (colName.endsWith("_ids")) {
77
63
  const baseName = colName.replace(/_ids$/, "");
78
64
  try {
79
- const relProp = getRelationPropFromColName(entityId, baseName);
80
- return relProp.name;
65
+ return getRelationPropFromColName(entityId, baseName).name;
81
66
  } catch {
82
67
  try {
83
- const pluralName = inflection.pluralize(baseName);
84
- const relProp = getRelationPropFromColName(entityId, pluralName);
85
- return relProp.name;
68
+ return getRelationPropFromColName(entityId, inflection.pluralize(baseName)).name;
86
69
  } catch {
87
70
  return colName;
88
71
  }
@@ -91,13 +74,10 @@ function getRelationNameFromColumnName(entityId, colName) {
91
74
  if (colName.endsWith("_id") && colName !== "id") {
92
75
  const baseName = colName.replace(/_id$/, "");
93
76
  try {
94
- const relProp = getRelationPropFromColName(entityId, baseName);
95
- return relProp.name;
77
+ return getRelationPropFromColName(entityId, baseName).name;
96
78
  } catch {
97
79
  try {
98
- const singularName = inflection.singularize(baseName);
99
- const relProp = getRelationPropFromColName(entityId, singularName);
100
- return relProp.name;
80
+ return getRelationPropFromColName(entityId, inflection.singularize(baseName)).name;
101
81
  } catch {
102
82
  return colName;
103
83
  }
@@ -110,11 +90,8 @@ function getRelationNameFromColumnName(entityId, colName) {
110
90
  * 중괄호 카운팅 방식으로 중첩된 객체도 정확히 파싱합니다.
111
91
  */
112
92
  function extractObjectDeclaration(sourceCode, varName) {
113
- const pattern = new RegExp(`export const ${varName}\\s*=\\s*\\{`);
114
- const match = pattern.exec(sourceCode);
115
- if (!match) {
116
- return "";
117
- }
93
+ const match = new RegExp(`export const ${varName}\\s*=\\s*\\{`).exec(sourceCode);
94
+ if (!match) return "";
118
95
  const startIdx = match.index;
119
96
  const openBraceIdx = sourceCode.indexOf("{", startIdx);
120
97
  let braceCount = 0;
@@ -124,10 +101,7 @@ function extractObjectDeclaration(sourceCode, varName) {
124
101
  let endIdx = openBraceIdx;
125
102
  for (let i = openBraceIdx; i < sourceCode.length; i++) {
126
103
  const char = sourceCode[i];
127
- const prevChar = i > 0 ? sourceCode[i - 1] : "";
128
- if (prevChar === "\\" && (inString || inTemplate)) {
129
- continue;
130
- }
104
+ if ((i > 0 ? sourceCode[i - 1] : "") === "\\" && (inString || inTemplate)) continue;
131
105
  if ((char === "\"" || char === "'") && !inTemplate) {
132
106
  if (!inString) {
133
107
  inString = true;
@@ -142,12 +116,9 @@ function extractObjectDeclaration(sourceCode, varName) {
142
116
  inTemplate = !inTemplate;
143
117
  continue;
144
118
  }
145
- if (inString || inTemplate) {
146
- continue;
147
- }
148
- if (char === "{") {
149
- braceCount++;
150
- } else if (char === "}") {
119
+ if (inString || inTemplate) continue;
120
+ if (char === "{") braceCount++;
121
+ else if (char === "}") {
151
122
  braceCount--;
152
123
  if (braceCount === 0) {
153
124
  endIdx = i;
@@ -156,11 +127,9 @@ function extractObjectDeclaration(sourceCode, varName) {
156
127
  }
157
128
  }
158
129
  let finalEndIdx = endIdx;
159
- for (let i = endIdx + 1; i < sourceCode.length; i++) {
160
- if (sourceCode[i] === ";") {
161
- finalEndIdx = i;
162
- break;
163
- }
130
+ for (let i = endIdx + 1; i < sourceCode.length; i++) if (sourceCode[i] === ";") {
131
+ finalEndIdx = i;
132
+ break;
164
133
  }
165
134
  return sourceCode.substring(startIdx, finalEndIdx + 1);
166
135
  }
@@ -168,8 +137,8 @@ var init_helpers = __esmMin((() => {
168
137
  init_entity_manager();
169
138
  init_types();
170
139
  }));
171
-
172
140
  //#endregion
173
141
  init_helpers();
174
142
  export { extractObjectDeclaration, getEnumInfoFromColName, getLabel, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers };
175
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIEVudW3snZgg7ZGc7Iuc7JqpIOudvOuyqOydhCDqsIDsoLjsmLXri4jri6QuXG4gKiBPcmRlckJ5LCBTZWFyY2hGaWVsZCDrk7Eg7Yq57IiY7ZWcIOqyveyasOyZgCDsnbzrsJggRW51beydhCDqtazrtoTtlZjsl6wg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZW50aXR5SWQ6IHN0cmluZywgZW51bUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZW51bUlkLmVuZHNXaXRoKFwiT3JkZXJCeVwiKSkge1xuICAgIHJldHVybiBcIuygleugrFwiO1xuICB9IGVsc2UgaWYgKGVudW1JZC5lbmRzV2l0aChcIlNlYXJjaEZpZWxkXCIpKSB7XG4gICAgcmV0dXJuIFwi6rKA7IOJXCI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW51bVByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZChcbiAgICAgIChwcm9wKSA9PiBgJHtlbnRpdHlJZH0ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcC5uYW1lKX1gID09PSBlbnVtSWQsXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3A/LmRlc2MpIHtcbiAgICAgIHJldHVybiBlbnVtUHJvcC5kZXNjO1xuICAgIH1cbiAgICByZXR1cm4gZW51bUlkO1xuICB9XG59XG5cbi8qKlxuICog7Lus65+8IOydtOumhOycvOuhnOu2gO2EsCBFbnVtIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBFbnRpdHnsnZggcHJvcCDspJEgZW51bSDtg4DsnoXsnbgg6rKD7J2EIOywvuyVhCDqtIDroKgg7KCV67O066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gIGVudGl0eUlkOiBzdHJpbmcsXG4gIGNvbE5hbWU6IHN0cmluZyxcbik6IHtcbiAgaWQ6IHN0cmluZztcbiAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB0YXJnZXRFbnRpdHlJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBV0EsU0FBZ0IsU0FBUyxVQUFrQixRQUF3QjtBQUNqRSxLQUFJLE9BQU8sU0FBUyxVQUFVLEVBQUU7QUFDOUIsU0FBTztZQUNFLE9BQU8sU0FBUyxjQUFjLEVBQUU7QUFDekMsU0FBTztRQUNGO0VBQ0wsTUFBTSxXQUFXLGNBQWMsSUFBSSxTQUFTLENBQUMsTUFBTSxNQUNoRCxTQUFTLEdBQUcsV0FBVyxXQUFXLFNBQVMsS0FBSyxLQUFLLE9BQU8sT0FDOUQ7QUFDRCxNQUFJLFVBQVUsTUFBTTtBQUNsQixVQUFPLFNBQVM7O0FBRWxCLFNBQU87Ozs7Ozs7QUFRWCxTQUFnQix1QkFDZCxVQUNBLFNBTUE7Q0FDQSxNQUFNLGFBQWEsY0FBYyxJQUFJLFNBQVM7Q0FDOUMsTUFBTSxPQUFPLFdBQVcsTUFBTSxNQUFNLE1BQU0sRUFBRSxTQUFTLFFBQVE7QUFDN0QsS0FBSSxRQUFRLFdBQVcsS0FBSyxFQUFFO0FBQzVCLFNBQU87R0FDTCxJQUFJLEtBQUs7R0FDVCxnQkFBZ0I7R0FDaEIsbUJBQW1CLGNBQWMsZUFBZSxTQUFTO0dBQ3pELE9BQU8sS0FBSyxRQUFRLEtBQUs7R0FDMUI7UUFDSTtFQUNMLE1BQU0sY0FBYyxXQUFXLFNBQzdCLEdBQUcsV0FBVyxXQUFXLFNBQVMsQ0FBQyxHQUFHLFdBQVcsV0FBVyxRQUFRLElBQ3BFLE1BQ0Q7RUFDRCxNQUFNLG9C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
143
+
144
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGVtcGxhdGUvaGVscGVycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IGlzRW51bVByb3AsIGlzUmVsYXRpb25Qcm9wIH0gZnJvbSBcIi4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFJlbGF0aW9uUHJvcCB9IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuXG4vKipcbiAqIEVudW3snZgg7ZGc7Iuc7JqpIOudvOuyqOydhCDqsIDsoLjsmLXri4jri6QuXG4gKiBPcmRlckJ5LCBTZWFyY2hGaWVsZCDrk7Eg7Yq57IiY7ZWcIOqyveyasOyZgCDsnbzrsJggRW51beydhCDqtazrtoTtlZjsl6wg7LKY66as7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFiZWwoZW50aXR5SWQ6IHN0cmluZywgZW51bUlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoZW51bUlkLmVuZHNXaXRoKFwiT3JkZXJCeVwiKSkge1xuICAgIHJldHVybiBcIuygleugrFwiO1xuICB9IGVsc2UgaWYgKGVudW1JZC5lbmRzV2l0aChcIlNlYXJjaEZpZWxkXCIpKSB7XG4gICAgcmV0dXJuIFwi6rKA7IOJXCI7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZW51bVByb3AgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCkucHJvcHMuZmluZChcbiAgICAgIChwcm9wKSA9PiBgJHtlbnRpdHlJZH0ke2luZmxlY3Rpb24uY2FtZWxpemUocHJvcC5uYW1lKX1gID09PSBlbnVtSWQsXG4gICAgKTtcbiAgICBpZiAoZW51bVByb3A/LmRlc2MpIHtcbiAgICAgIHJldHVybiBlbnVtUHJvcC5kZXNjO1xuICAgIH1cbiAgICByZXR1cm4gZW51bUlkO1xuICB9XG59XG5cbi8qKlxuICog7Lus65+8IOydtOumhOycvOuhnOu2gO2EsCBFbnVtIOygleuztOulvCDstpTstpztlanri4jri6QuXG4gKiBFbnRpdHnsnZggcHJvcCDspJEgZW51bSDtg4DsnoXsnbgg6rKD7J2EIOywvuyVhCDqtIDroKgg7KCV67O066W8IOuwmO2ZmO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gIGVudGl0eUlkOiBzdHJpbmcsXG4gIGNvbE5hbWU6IHN0cmluZyxcbik6IHtcbiAgaWQ6IHN0cmluZztcbiAgdGFyZ2V0RW50aXR5TmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkO1xuICB0YXJnZXRFbnRpdHlJZDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufSB7XG4gIGNvbnN0IGJhc2VFbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gIGNvbnN0IHByb3AgPSBiYXNlRW50aXR5LnByb3BzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gY29sTmFtZSk7XG4gIGlmIChwcm9wICYmIGlzRW51bVByb3AocHJvcCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IHByb3AuaWQsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCksXG4gICAgICB0aXRsZTogcHJvcC5kZXNjID8/IHByb3AuaWQsXG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBpZENhbmRpZGF0ZSA9IGluZmxlY3Rpb24uY2FtZWxpemUoXG4gICAgICBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoZW50aXR5SWQpfV8ke2luZmxlY3Rpb24udW5kZXJzY29yZShjb2xOYW1lKX1gLFxuICAgICAgZmFsc2UsXG4gICAgKTtcbiAgICBjb25zdCB0YXJnZXRFbnRpdHlOYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogaWRDYW5kaWRhdGUsXG4gICAgICB0YXJnZXRFbnRpdHlJZDogZW50aXR5SWQsXG4gICAgICB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0RW50aXR5TmFtZXMsXG4gICAgICB0aXRsZTogaWRDYW5kaWRhdGUsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIOy7rOufvCDsnbTrpoTsnLzroZzrtoDthLAgUmVsYXRpb24gcHJvcCDsoJXrs7Trpbwg6rCA7KC47Ji164uI64ukLlxuICog6rSA6rOE7ZiVIHByb3DsnbQg7JWE64uMIOqyveyasCDsl5Drn6zrpbwg67Cc7IOd7Iuc7YK164uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogUmVsYXRpb25Qcm9wIHtcbiAgY29uc3QgYmFzZUVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgY29uc3QgcmVsUHJvcCA9IGJhc2VFbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2xOYW1lKTtcbiAgaWYgKGlzUmVsYXRpb25Qcm9wKHJlbFByb3ApKSB7XG4gICAgY29uc3QgcmVsRW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQocmVsUHJvcC53aXRoKTtcbiAgICBpZiAocmVsRW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk9ubHkgcGFyZW50IGVudGl0aWVzIGNhbiBiZSB1c2VkIGFzIHJlbGF0aW9uIHByb3BzXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcmVsUHJvcDtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOywvuydhCDsiJgg7JeG64qUIFJlbGF0aW9uICR7Y29sTmFtZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIEZLIOy7rOufvOuqheyXkOyEnCDsi6TsoJwgcmVsYXRpb24g7J2066aE7J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIEJlbG9uZ3NUb09uZS9PbmVUb09uZSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgRksg7Lus65+866qFKHVzZXJfaWQp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg7ZWE7JqU7ZWY6rOgLFxuICogTWFueVRvTWFueSByZWxhdGlvbuydgCBzdWJzZXTsl5DshJwgcmVsYXRpb27rqoUoZW1wbG95ZWUp7Jy866GcIOyDneyEseuQmOuvgOuhnCDrs4DtmZjsnbQg67aI7ZWE7JqU7ZWp64uI64ukLlxuICpcbiAqIEBleGFtcGxlXG4gKiBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShcIkVtcGxveWVlXCIsIFwidXNlcl9pZFwiKSAvLyBcInVzZXJcIlxuICogZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoXCJQcm9qZWN0XCIsIFwidGFnX2lkc1wiKSAvLyBcInRhZ3NcIlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQ6IHN0cmluZywgY29sTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gX2lkcyAo67O17IiYKSDsspjrpqxcbiAgaWYgKGNvbE5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgY29uc3QgYmFzZU5hbWUgPSBjb2xOYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgLy8g66i87KCAIGJhc2UgbmFtZeycvOuhnCDssL7quLBcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICByZXR1cm4gcmVsUHJvcC5uYW1lO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gcGx1cmFsaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcGx1cmFsTmFtZSA9IGluZmxlY3Rpb24ucGx1cmFsaXplKGJhc2VOYW1lKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBwbHVyYWxOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gX2lkICjri6jsiJgpIOyymOumrFxuICBpZiAoY29sTmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJiBjb2xOYW1lICE9PSBcImlkXCIpIHtcbiAgICBjb25zdCBiYXNlTmFtZSA9IGNvbE5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgIC8vIOuovOyggCBiYXNlIG5hbWXsnLzroZwg7LC+6riwXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIHNpbmd1bGFyaXpl7ZW07IScIOywvuq4sFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3Qgc2luZ3VsYXJOYW1lID0gaW5mbGVjdGlvbi5zaW5ndWxhcml6ZShiYXNlTmFtZSk7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgc2luZ3VsYXJOYW1lKTtcbiAgICAgICAgcmV0dXJuIHJlbFByb3AubmFtZTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gY29sTmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbE5hbWU7XG59XG5cbi8qKlxuICog7IaM7IqkIOy9lOuTnOyXkOyEnCDqsJ3ssrQg7ISg7Ja47J2EIOy2lOy2nO2VqeuLiOuLpC5cbiAqIOykkeq0hO2YuCDsubTsmrTtjIUg67Cp7Iud7Jy866GcIOykkeyyqeuQnCDqsJ3ssrTrj4Qg7KCV7ZmV7Z6IIO2MjOyLse2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RPYmplY3REZWNsYXJhdGlvbihzb3VyY2VDb2RlOiBzdHJpbmcsIHZhck5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFwiZXhwb3J0IGNvbnN0IHZhck5hbWUgPSB7XCIg7Yyo7YS0IOywvuq4sFxuICBjb25zdCBwYXR0ZXJuID0gbmV3IFJlZ0V4cChgZXhwb3J0IGNvbnN0ICR7dmFyTmFtZX1cXFxccyo9XFxcXHMqXFxcXHtgKTtcbiAgY29uc3QgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWMoc291cmNlQ29kZSk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiBcIlwiO1xuICB9XG5cbiAgLy8g7Iuc7J6RIOychOy5mFxuICBjb25zdCBzdGFydElkeCA9IG1hdGNoLmluZGV4O1xuICBjb25zdCBvcGVuQnJhY2VJZHggPSBzb3VyY2VDb2RlLmluZGV4T2YoXCJ7XCIsIHN0YXJ0SWR4KTtcblxuICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gIGxldCBicmFjZUNvdW50ID0gMDtcbiAgbGV0IGluU3RyaW5nID0gZmFsc2U7XG4gIGxldCBpblRlbXBsYXRlID0gZmFsc2U7XG4gIGxldCBzdHJpbmdDaGFyID0gXCJcIjtcbiAgbGV0IGVuZElkeCA9IG9wZW5CcmFjZUlkeDtcblxuICBmb3IgKGxldCBpID0gb3BlbkJyYWNlSWR4OyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYXIgPSBzb3VyY2VDb2RlW2ldO1xuICAgIGNvbnN0IHByZXZDaGFyID0gaSA+IDAgPyBzb3VyY2VDb2RlW2kgLSAxXSA6IFwiXCI7XG5cbiAgICAvLyDsnbTsiqTsvIDsnbTtlITrkJwg66y47J6Q64qUIOustOyLnFxuICAgIGlmIChwcmV2Q2hhciA9PT0gXCJcXFxcXCIgJiYgKGluU3RyaW5nIHx8IGluVGVtcGxhdGUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDrrLjsnpDsl7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmICgoY2hhciA9PT0gJ1wiJyB8fCBjaGFyID09PSBcIidcIikgJiYgIWluVGVtcGxhdGUpIHtcbiAgICAgIGlmICghaW5TdHJpbmcpIHtcbiAgICAgICAgaW5TdHJpbmcgPSB0cnVlO1xuICAgICAgICBzdHJpbmdDaGFyID0gY2hhcjtcbiAgICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gc3RyaW5nQ2hhcikge1xuICAgICAgICBpblN0cmluZyA9IGZhbHNlO1xuICAgICAgICBzdHJpbmdDaGFyID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIO2FnO2UjOumvyDrpqzthLDrn7Qg7Iuc7J6RL+yiheujjFxuICAgIGlmIChjaGFyID09PSBcImBcIiAmJiAhaW5TdHJpbmcpIHtcbiAgICAgIGluVGVtcGxhdGUgPSAhaW5UZW1wbGF0ZTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOusuOyekOyXtC/thZztlIzrpr8g64K067aA64qUIOykkeq0hO2YuCDsubTsmrTtjIUg7JWIIO2VqFxuICAgIGlmIChpblN0cmluZyB8fCBpblRlbXBsYXRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyDspJHqtITtmLgg7Lm07Jq07YyFXG4gICAgaWYgKGNoYXIgPT09IFwie1wiKSB7XG4gICAgICBicmFjZUNvdW50Kys7XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSBcIn1cIikge1xuICAgICAgYnJhY2VDb3VudC0tO1xuICAgICAgaWYgKGJyYWNlQ291bnQgPT09IDApIHtcbiAgICAgICAgZW5kSWR4ID0gaTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g7ISg7Ja466y4IOuBneq5jOyngCDssL7quLAgKH07KVxuICBsZXQgZmluYWxFbmRJZHggPSBlbmRJZHg7XG4gIGZvciAobGV0IGkgPSBlbmRJZHggKyAxOyBpIDwgc291cmNlQ29kZS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzb3VyY2VDb2RlW2ldID09PSBcIjtcIikge1xuICAgICAgZmluYWxFbmRJZHggPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNvdXJjZUNvZGUuc3Vic3RyaW5nKHN0YXJ0SWR4LCBmaW5hbEVuZElkeCArIDEpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXQSxTQUFnQixTQUFTLFVBQWtCLFFBQXdCO0NBQ2pFLElBQUksT0FBTyxTQUFTLFNBQVMsR0FDM0IsT0FBTztNQUNGLElBQUksT0FBTyxTQUFTLGFBQWEsR0FDdEMsT0FBTztNQUNGO0VBQ0wsTUFBTSxXQUFXLGNBQWMsSUFBSSxRQUFRLENBQUMsQ0FBQyxNQUFNLE1BQ2hELFNBQVMsR0FBRyxXQUFXLFdBQVcsU0FBUyxLQUFLLElBQUksUUFBUSxNQUMvRDtFQUNBLElBQUksVUFBVSxNQUNaLE9BQU8sU0FBUztFQUVsQixPQUFPO0NBQ1Q7QUFDRjs7Ozs7QUFNQSxTQUFnQix1QkFDZCxVQUNBLFNBTUE7Q0FFQSxNQUFNLE9BRGEsY0FBYyxJQUFJLFFBQ3hCLENBQUEsQ0FBVyxNQUFNLE1BQU0sTUFBTSxFQUFFLFNBQVMsT0FBTztDQUM1RCxJQUFJLFFBQVEsV0FBVyxJQUFJLEdBQ3pCLE9BQU87RUFDTCxJQUFJLEtBQUs7RUFDVCxnQkFBZ0I7RUFDaEIsbUJBQW1CLGNBQWMsZUFBZSxRQUFRO0VBQ3hELE9BQU8sS0FBSyxRQUFRLEtBQUs7Q0FDM0I7TUFDSztFQUNMLE1BQU0sY0FBYyxXQUFXLFNBQzdCLEdBQUcsV0FBVyxXQUFXLFFBQVEsRUFBRSxHQUFHLFdBQVcsV0FBVyxPQUFPLEtBQ25FLEtBQ0Y7RUFFQSxPQUFPO0dBQ0wsSUFBSTtHQUNKLGdC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
@@ -2,7 +2,6 @@ import { Sonamu } from "../../api/sonamu.js";
2
2
  import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
3
3
  import { init_api } from "../../api/index.js";
4
4
  import { Template, init_template } from "../template.js";
5
-
6
5
  //#region src/template/implementations/entity.template.ts
7
6
  init_api();
8
7
  init_entity_manager();
@@ -22,14 +21,11 @@ var Template__entity = class extends Template {
22
21
  const { entityId, title, parentId, table } = options;
23
22
  const names = EntityManager.getNamesFromId(entityId);
24
23
  const parent = (() => {
25
- if (parentId) {
26
- return {
27
- names: EntityManager.getNamesFromId(parentId),
28
- entity: EntityManager.get(parentId)
29
- };
30
- } else {
31
- return null;
32
- }
24
+ if (parentId) return {
25
+ names: EntityManager.getNamesFromId(parentId),
26
+ entity: EntityManager.get(parentId)
27
+ };
28
+ else return null;
33
29
  })();
34
30
  return {
35
31
  ...this.getTargetAndPath(names, parent?.names ?? names),
@@ -71,7 +67,7 @@ var Template__entity = class extends Template {
71
67
  };
72
68
  }
73
69
  };
74
-
75
70
  //#endregion
76
71
  export { Template__entity };
77
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZW50aXR5IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImVudGl0eVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLCBwYXJlbnROYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYCR7KHBhcmVudE5hbWVzID8/IG5hbWVzKS5mc30vJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgY29uc3QgeyBlbnRpdHlJZCwgdGl0bGUsIHBhcmVudElkLCB0YWJsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHBhcmVudElkKSxcbiAgICAgICAgICBlbnRpdHk6IEVudGl0eU1hbmFnZXIuZ2V0KHBhcmVudElkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBwYXJlbnQ/Lm5hbWVzID8/IG5hbWVzKSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGVudGl0eUlkLFxuICAgICAgICB0aXRsZTogdGl0bGUgPz8gZW50aXR5SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0YWJsZTogdGFibGUgPz8gbmFtZXMuZnNQbHVyYWwucmVwbGFjZSgvLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgLi4uKHBhcmVudFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZWxhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmVudC5uYW1lcy5jYW1lbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBwYXJlbnQuZW50aXR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6XG4gICAgICAgICAgb3B0aW9ucy5zdWJzZXRzID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICBlbnVtczpcbiAgICAgICAgICBvcHRpb25zLmVudW1zID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztVQUFtQztxQkFDeUI7ZUFHckI7QUFFdkMsSUFBYSxtQkFBYixjQUFzQyxTQUFTO0NBQzdDLGNBQWM7QUFDWixRQUFNLFNBQVM7O0NBR2pCLGlCQUFpQixPQUEwQixhQUFpQztFQUMxRSxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87QUFFOUIsU0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxJQUFJLGVBQWUsT0FBTyxHQUFHLEdBQUcsTUFBTSxHQUFHO0dBQ2hEOztDQUdILE9BQU8sU0FBb0M7RUFDekMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVLFVBQVU7RUFDN0MsTUFBTSxRQUFRLGNBQWMsZUFBZSxTQUFTO0VBRXBELE1BQU0sZ0JBQWdCO0FBQ3BCLE9BQUksVUFBVTtBQUNaLFdBQU87S0FDTCxPQUFPLGNBQWMsZUFBZSxTQUFTO0tBQzdDLFFBQVEsY0FBYyxJQUFJLFNBQVM7S0FDcEM7VUFDSTtBQUNMLFdBQU87O01BRVA7QUFFSixTQUFPO0dBQ0wsR0FBRyxLQUFLLGlCQUFpQixPQUFPLFFBQVEsU0FBUyxNQUFNO0dBQ3ZELE1BQU0sS0FBSyxVQUFVO0lBQ25CLElBQUk7SUFDSixPQUFPLFNBQVM7SUFDaEI7SUFDQSxPQUFPLFNBQVMsTUFBTSxTQUFTLFFBQVEsTUFBTSxJQUFJO0lBQ2pELE9BQU8sUUFBUSxPQUFPLFNBQ2xCLFFBQVEsUUFDUjtLQUNFO01BQUUsTUFBTTtNQUFNLE1BQU07TUFBVyxNQUFNO01BQU07S0FDM0MsR0FBSSxTQUNBLENBQ0U7TUFDRSxNQUFNO01BQ04sTUFBTSxPQUFPLE1BQU07TUFDbkIsY0FBYztNQUNkLE1BQU07TUFDTixVQUFVO01BQ1YsVUFBVTtNQUNWLE1BQU0sT0FBTyxPQUFPO01BQ3JCLENBQ0YsR0FDRCxFQUFFO0tBQ047TUFDRSxNQUFNO01BQ04sTUFBTTtNQUNOLE1BQU07TUFDTixXQUFXO01BQ1o7S0FDRjtJQUNMLFNBQVMsQ0FBQyxHQUFJLFFBQVEsV0FBVyxFQUFFLENBQUU7SUFDckMsU0FDRSxRQUFRLFlBQ1AsV0FDRyxFQUFFLEdBQ0YsRUFDRSxHQUFHLENBQUMsTUFBTSxhQUFhLEVBQ3hCO0lBQ1AsT0FDRSxRQUFRLFVBQ1AsV0FDRyxFQUFFLEdBQ0Y7TUFDRyxHQUFHLE1BQU0sUUFBUSxXQUFXLEVBQzNCLFdBQVcsU0FDWjtNQUNBLEdBQUcsTUFBTSxRQUFRLGVBQWUsRUFBRSxJQUFJLE1BQU07S0FDOUM7SUFDUixDQUFDLENBQUMsTUFBTTtHQUNULFlBQVksRUFBRTtHQUNmIn0=
72
+
73
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50aXR5LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZW50aXR5IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImVudGl0eVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkLCBwYXJlbnROYW1lcz86IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogYCR7ZGlyfS9zcmMvYXBwbGljYXRpb25gLFxuICAgICAgcGF0aDogYCR7KHBhcmVudE5hbWVzID8/IG5hbWVzKS5mc30vJHtuYW1lcy5mc30uZW50aXR5Lmpzb25gLFxuICAgIH07XG4gIH1cblxuICByZW5kZXIob3B0aW9uczogVGVtcGxhdGVPcHRpb25zW1wiZW50aXR5XCJdKSB7XG4gICAgY29uc3QgeyBlbnRpdHlJZCwgdGl0bGUsIHBhcmVudElkLCB0YWJsZSB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgcGFyZW50ID0gKCgpID0+IHtcbiAgICAgIGlmIChwYXJlbnRJZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWVzOiBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKHBhcmVudElkKSxcbiAgICAgICAgICBlbnRpdHk6IEVudGl0eU1hbmFnZXIuZ2V0KHBhcmVudElkKSxcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzLCBwYXJlbnQ/Lm5hbWVzID8/IG5hbWVzKSxcbiAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgaWQ6IGVudGl0eUlkLFxuICAgICAgICB0aXRsZTogdGl0bGUgPz8gZW50aXR5SWQsXG4gICAgICAgIHBhcmVudElkLFxuICAgICAgICB0YWJsZTogdGFibGUgPz8gbmFtZXMuZnNQbHVyYWwucmVwbGFjZSgvLS9nLCBcIl9cIiksXG4gICAgICAgIHByb3BzOiBvcHRpb25zLnByb3BzPy5sZW5ndGhcbiAgICAgICAgICA/IG9wdGlvbnMucHJvcHNcbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgeyBuYW1lOiBcImlkXCIsIHR5cGU6IFwiaW50ZWdlclwiLCBkZXNjOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgLi4uKHBhcmVudFxuICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJyZWxhdGlvblwiLFxuICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHBhcmVudC5uYW1lcy5jYW1lbCxcbiAgICAgICAgICAgICAgICAgICAgICByZWxhdGlvblR5cGU6IFwiQmVsb25nc1RvT25lXCIsXG4gICAgICAgICAgICAgICAgICAgICAgd2l0aDogcGFyZW50SWQsXG4gICAgICAgICAgICAgICAgICAgICAgb25VcGRhdGU6IFwiQ0FTQ0FERVwiLFxuICAgICAgICAgICAgICAgICAgICAgIG9uRGVsZXRlOiBcIkNBU0NBREVcIixcbiAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBwYXJlbnQuZW50aXR5LnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbmFtZTogXCJjcmVhdGVkX2F0XCIsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJkYXRlXCIsXG4gICAgICAgICAgICAgICAgZGVzYzogXCLrk7HroZ3snbzsi5xcIixcbiAgICAgICAgICAgICAgICBkYkRlZmF1bHQ6IFwiQ1VSUkVOVF9USU1FU1RBTVBcIixcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIGluZGV4ZXM6IFsuLi4ob3B0aW9ucy5pbmRleGVzID8/IFtdKV0sXG4gICAgICAgIHN1YnNldHM6XG4gICAgICAgICAgb3B0aW9ucy5zdWJzZXRzID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBBOiBbXCJpZFwiLCBcImNyZWF0ZWRfYXRcIl0sXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICBlbnVtczpcbiAgICAgICAgICBvcHRpb25zLmVudW1zID8/XG4gICAgICAgICAgKHBhcmVudElkXG4gICAgICAgICAgICA/IHt9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1PcmRlckJ5YF06IHtcbiAgICAgICAgICAgICAgICAgIFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBbYCR7bmFtZXMuY2FwaXRhbH1TZWFyY2hGaWVsZGBdOiB7IGlkOiBcIklEXCIgfSxcbiAgICAgICAgICAgICAgfSksXG4gICAgICB9KS50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7O1NBQWtDO29CQUN5QjtjQUdyQjtBQUV0QyxJQUFhLG1CQUFiLGNBQXNDLFNBQVM7Q0FDN0MsY0FBYztFQUNaLE1BQU0sUUFBUTtDQUNoQjtDQUVBLGlCQUFpQixPQUEwQixhQUFpQztFQUMxRSxNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFFOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTSxJQUFJLGVBQWUsTUFBQSxDQUFPLEdBQUcsR0FBRyxNQUFNLEdBQUc7RUFDakQ7Q0FDRjtDQUVBLE9BQU8sU0FBb0M7RUFDekMsTUFBTSxFQUFFLFVBQVUsT0FBTyxVQUFVLFVBQVU7RUFDN0MsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBRW5ELE1BQU0sZ0JBQWdCO0dBQ3BCLElBQUksVUFDRixPQUFPO0lBQ0wsT0FBTyxjQUFjLGVBQWUsUUFBUTtJQUM1QyxRQUFRLGNBQWMsSUFBSSxRQUFRO0dBQ3BDO1FBRUEsT0FBTztFQUVYLEVBQUEsQ0FBRztFQUVILE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLE9BQU8sUUFBUSxTQUFTLEtBQUs7R0FDdEQsTUFBTSxLQUFLLFVBQVU7SUFDbkIsSUFBSTtJQUNKLE9BQU8sU0FBUztJQUNoQjtJQUNBLE9BQU8sU0FBUyxNQUFNLFNBQVMsUUFBUSxNQUFNLEdBQUc7SUFDaEQsT0FBTyxRQUFRLE9BQU8sU0FDbEIsUUFBUSxRQUNSO0tBQ0U7TUFBRSxNQUFNO01BQU0sTUFBTTtNQUFXLE1BQU07S0FBSztLQUMxQyxHQUFJLFNBQ0EsQ0FDRTtNQUNFLE1BQU07TUFDTixNQUFNLE9BQU8sTUFBTTtNQUNuQixjQUFjO01BQ2QsTUFBTTtNQUNOLFVBQVU7TUFDVixVQUFVO01BQ1YsTUFBTSxPQUFPLE9BQU87S0FDdEIsQ0FDRixJQUNBLENBQUM7S0FDTDtNQUNFLE1BQU07TUFDTixNQUFNO01BQ04sTUFBTTtNQUNOLFdBQVc7S0FDYjtJQUNGO0lBQ0osU0FBUyxDQUFDLEdBQUksUUFBUSxXQUFXLENBQUMsQ0FBRTtJQUNwQyxTQUNFLFFBQVEsWUFDUCxXQUNHLENBQUMsSUFDRCxFQUNFLEdBQUcsQ0FBQyxNQUFNLFlBQVksRUFDeEI7SUFDTixPQUNFLFFBQVEsVUFDUCxXQUNHLENBQUMsSUFDRDtNQUNHLEdBQUcsTUFBTSxRQUFRLFdBQVcsRUFDM0IsV0FBVyxRQUNiO01BQ0MsR0FBRyxNQUFNLFFBQVEsZUFBZSxFQUFFLElBQUksS0FBSztJQUM5QztHQUNSLENBQUMsQ0FBQyxDQUFDLEtBQUs7R0FDUixZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
@@ -1,5 +1,4 @@
1
1
  import { Template, init_template } from "../template.js";
2
-
3
2
  //#region src/template/implementations/entry-server.template.ts
4
3
  init_template();
5
4
  var Template__entry_server = class extends Template {
@@ -83,7 +82,7 @@ export async function render(url: string, preloadedData: PreloadedData[] = []) {
83
82
  };
84
83
  }
85
84
  };
86
-
87
85
  //#endregion
88
86
  export { Template__entry_server };
89
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7ZUFDdUM7QUFFdkMsSUFBYSx5QkFBYixjQUE0QyxTQUFTO0NBQ25ELGNBQWM7QUFDWixRQUFNLGVBQWU7O0NBR3ZCLG1CQUFtQjtBQUNqQixTQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07R0FDUDs7Q0FHSCxPQUFPLElBQXFDO0VBQzFDLE1BQU0sT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQXVEWCxNQUFNO0FBRVIsU0FBTztHQUNMLEdBQUcsS0FBSyxrQkFBa0I7R0FDMUI7R0FDQSxZQUFZLEVBQUU7R0FDZCxlQUFlO0lBQUM7SUFBTztJQUFpQjtJQUFtQjtJQUFPO0lBQUc7R0FDdEUifQ==
87
+
88
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50cnktc2VydmVyLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZW50cnktc2VydmVyLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2VudHJ5X3NlcnZlciBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJlbnRyeV9zZXJ2ZXJcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyY1wiLFxuICAgICAgcGF0aDogYGVudHJ5LXNlcnZlci5nZW5lcmF0ZWQudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHt9OiBUZW1wbGF0ZU9wdGlvbnNbXCJlbnRyeV9zZXJ2ZXJcIl0pIHtcbiAgICBjb25zdCBib2R5ID0gYFxuaW1wb3J0IHsgUXVlcnlDbGllbnQsIGRlaHlkcmF0ZSB9IGZyb20gJ0B0YW5zdGFjay9yZWFjdC1xdWVyeSc7XG5pbXBvcnQgeyBjcmVhdGVNZW1vcnlIaXN0b3J5LCBjcmVhdGVSb3V0ZXIsIFJvdXRlclByb3ZpZGVyIH0gZnJvbSAnQHRhbnN0YWNrL3JlYWN0LXJvdXRlcic7XG5pbXBvcnQgeyByZW5kZXJUb1N0cmluZyB9IGZyb20gJ3JlYWN0LWRvbS9zZXJ2ZXInO1xuaW1wb3J0IHsgcm91dGVUcmVlIH0gZnJvbSAnLi9yb3V0ZVRyZWUuZ2VuJztcbmltcG9ydCB7IFN1c3BlbnNlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmV4cG9ydCB0eXBlIFByZWxvYWRlZERhdGEgPSB7XG4gIHF1ZXJ5S2V5OiBhbnlbXTtcbiAgZGF0YTogYW55O1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbmRlcih1cmw6IHN0cmluZywgcHJlbG9hZGVkRGF0YTogUHJlbG9hZGVkRGF0YVtdID0gW10pIHtcbiAgLy8gUXVlcnlDbGllbnQg7IOd7ISxXG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gbmV3IFF1ZXJ5Q2xpZW50KHtcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgcXVlcmllczoge1xuICAgICAgICBzdGFsZVRpbWU6IDUwMDAsXG4gICAgICAgIHJldHJ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG5cbiAgLy8gUHJlbG9hZGVkIOuNsOydtO2EsOulvCBxdWVyeUNsaWVudOyXkCDsp4HsoJEg7KO87J6FXG4gIGZvciAoY29uc3QgeyBxdWVyeUtleSwgZGF0YSB9IG9mIHByZWxvYWRlZERhdGEpIHtcbiAgICBxdWVyeUNsaWVudC5zZXRRdWVyeURhdGEocXVlcnlLZXksIGRhdGEpO1xuICB9XG5cbiAgLy8gRGVoeWRyYXRlXG4gIGNvbnN0IGRlaHlkcmF0ZWRTdGF0ZSA9IGRlaHlkcmF0ZShxdWVyeUNsaWVudCk7XG5cbiAgLy8gU1NS7JqpIOuplOuqqOumrCDtnojsiqTthqDrpqwg7IOd7ISxXG4gIGNvbnN0IG1lbW9yeUhpc3RvcnkgPSBjcmVhdGVNZW1vcnlIaXN0b3J5KHtcbiAgICBpbml0aWFsRW50cmllczogW3VybF0sXG4gIH0pO1xuXG4gIC8vIFJvdXRlciDsg53shLEgKFNTUiDrqqjrk5wpXG4gIGNvbnN0IHJvdXRlciA9IGNyZWF0ZVJvdXRlcih7XG4gICAgcm91dGVUcmVlLFxuICAgIGNvbnRleHQ6IHsgcXVlcnlDbGllbnQgfSxcbiAgICBoaXN0b3J5OiBtZW1vcnlIaXN0b3J5LFxuICAgIGRlZmF1bHRQcmVsb2FkOiAnaW50ZW50JyxcbiAgfSk7XG5cbiAgLy8g65287Jqw7YSwIOy0iOq4sO2ZlDogU1NS7JeQ7IScIOuwmOuTnOyLnCBhd2FpdCByb3V0ZXIubG9hZCgpIO2YuOy2nCDtlYTsmpRcbiAgYXdhaXQgcm91dGVyLmxvYWQoKTtcblxuICAvLyBSb3V0ZXJQcm92aWRlcuunjCDroIzrjZTrp4EgKFN1c3BlbnNl66GcIOuemO2VkSAtIGh5ZHJhdGlvbiBtaXNtYXRjaCDrsKnsp4ApXG4gIGNvbnN0IGFwcEh0bWwgPSByZW5kZXJUb1N0cmluZyg8U3VzcGVuc2UgZmFsbGJhY2s9e251bGx9PjxSb3V0ZXJQcm92aWRlciByb3V0ZXI9e3JvdXRlcn0gLz48L1N1c3BlbnNlPik7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sOiBhcHBIdG1sLFxuICAgIGRlaHlkcmF0ZWRTdGF0ZSxcbiAgfTtcbn1cbiAgICBgLnRyaW0oKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcIi8qKlwiLCBcIiAqIEBnZW5lcmF0ZWRcIiwgXCIgKiDsp4HsoJEg7IiY7KCV7ZWY7KeAIOuniOyEuOyalC5cIiwgXCIgKi9cIiwgXCJcIl0sXG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztjQUNzQztBQUV0QyxJQUFhLHlCQUFiLGNBQTRDLFNBQVM7Q0FDbkQsY0FBYztFQUNaLE1BQU0sY0FBYztDQUN0QjtDQUVBLG1CQUFtQjtFQUNqQixPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU07RUFDUjtDQUNGO0NBRUEsT0FBTyxJQUFxQztFQUMxQyxNQUFNLE9BQU87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUF1RFgsS0FBSztFQUVQLE9BQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCO0dBQ3pCO0dBQ0EsWUFBWSxDQUFDO0dBQ2IsZUFBZTtJQUFDO0lBQU87SUFBaUI7SUFBbUI7SUFBTztHQUFFO0VBQ3RFO0NBQ0Y7QUFDRiJ9
@@ -8,7 +8,6 @@ import { Template, init_template } from "../template.js";
8
8
  import { BUILT_IN_TYPES, init_zod_converter, propNodeToZodTypeDef, zodTypeToZodCode } from "../zod-converter.js";
9
9
  import { unique } from "radashi";
10
10
  import assert from "assert";
11
-
12
11
  //#region src/template/implementations/generated.template.ts
13
12
  init_api();
14
13
  init_entity_manager();
@@ -29,8 +28,7 @@ var Template__generated = class extends Template {
29
28
  };
30
29
  }
31
30
  render() {
32
- const entityIds = EntityManager.getAllIds();
33
- const entities = entityIds.map((id) => EntityManager.get(id));
31
+ const entities = EntityManager.getAllIds().map((id) => EntityManager.get(id));
34
32
  const sourceCodes = entities.flatMap((entity) => {
35
33
  return [
36
34
  this.getEnumsSourceCode(entity),
@@ -52,18 +50,12 @@ var Template__generated = class extends Template {
52
50
  const [bKey] = b.label.split(":");
53
51
  const aIndex = LABEL_KEY_ORDER.indexOf(aKey);
54
52
  const bIndex = LABEL_KEY_ORDER.indexOf(bKey);
55
- if (aIndex > bIndex) {
56
- return 1;
57
- } else if (aIndex < bIndex) {
58
- return -1;
59
- } else {
60
- return 0;
61
- }
53
+ if (aIndex > bIndex) return 1;
54
+ else if (aIndex < bIndex) return -1;
55
+ else return 0;
62
56
  });
63
57
  const sourceCode = sourceCodes.reduce((result, ts) => {
64
- if (ts === null) {
65
- return result;
66
- }
58
+ if (ts === null) return result;
67
59
  return {
68
60
  lines: [
69
61
  ...result.lines,
@@ -80,11 +72,9 @@ var Template__generated = class extends Template {
80
72
  const allTypeKeys = entities.flatMap((entity) => Object.keys(entity.types));
81
73
  const cdImportKeys = sourceCode.importKeys.filter((importKey) => allTypeKeys.includes(importKey));
82
74
  if (cdImportKeys.length > 0) {
83
- const customScalarLines = cdImportKeys.flatMap((importKey) => {
84
- const entity = entities.find((entity$1) => entity$1.types[importKey]);
85
- if (!entity) {
86
- throw new Error(`ZodType not found ${importKey}`);
87
- }
75
+ sourceCode.lines = [...cdImportKeys.flatMap((importKey) => {
76
+ const entity = entities.find((entity) => entity.types[importKey]);
77
+ if (!entity) throw new Error(`ZodType not found ${importKey}`);
88
78
  const zodType = entity.types[importKey];
89
79
  assert(zodType);
90
80
  return [
@@ -93,21 +83,19 @@ var Template__generated = class extends Template {
93
83
  `type ${importKey} = z.infer<typeof ${importKey}>`,
94
84
  ""
95
85
  ];
96
- });
97
- sourceCode.lines = [...customScalarLines, ...sourceCode.lines];
86
+ }), ...sourceCode.lines];
98
87
  sourceCode.importKeys = unique(sourceCode.importKeys.filter((importKey) => !cdImportKeys.includes(importKey)));
99
88
  }
100
89
  const body = sourceCode.lines.join("\n");
101
90
  Naite.t("Template__generated:body", body);
102
91
  const builtInSchemaNames = Object.values(BUILT_IN_TYPES).map((info) => info.schemaName);
103
- const builtInSchemas = sourceCode.importKeys.filter((key) => builtInSchemaNames.includes(key));
104
92
  const sonamuImports = [
105
93
  "zArrayable",
106
94
  "SQLDateTimeString",
107
95
  "SubsetQuery",
108
96
  "SonamuQueryMode",
109
97
  "ApplySonamuFilter",
110
- ...builtInSchemas
98
+ ...sourceCode.importKeys.filter((key) => builtInSchemaNames.includes(key))
111
99
  ].filter((mod) => body.includes(mod));
112
100
  return {
113
101
  ...this.getTargetAndPath(),
@@ -127,9 +115,7 @@ var Template__generated = class extends Template {
127
115
  };
128
116
  }
129
117
  getEnumsSourceCode(entity) {
130
- if (Object.keys(entity.enumLabels).length === 0) {
131
- return null;
132
- }
118
+ if (Object.keys(entity.enumLabels).length === 0) return null;
133
119
  return {
134
120
  label: `Enums: ${entity.id}`,
135
121
  lines: Object.entries(entity.enumLabels).filter(([_, enumLabel]) => Object.keys(enumLabel).length > 0).flatMap(([enumId, enumLabel]) => [
@@ -153,9 +139,7 @@ var Template__generated = class extends Template {
153
139
  };
154
140
  const schemaBody = (() => {
155
141
  const result = propNodeToZodTypeDef(propNode, importKeys);
156
- if (result.endsWith(",")) {
157
- return result.slice(0, -1);
158
- }
142
+ if (result.endsWith(",")) return result.slice(0, -1);
159
143
  return result;
160
144
  })();
161
145
  const fulltextColumns = [];
@@ -166,7 +150,7 @@ var Template__generated = class extends Template {
166
150
  * - nullable 또는 dbDefault가 있는 컬럼 (id 포함)
167
151
  * - relation이 아니거나, relation이어도 nullable이면 포함
168
152
  */
169
- const hasDefaultColumns = entity.props.filter((prop) => (prop.type !== "relation" || prop.nullable === true) && (prop.nullable === true || prop.type !== "relation" && prop.dbDefault !== undefined)).map((prop) => prop.type === "relation" ? `${prop.name}_id` : prop.name).concat("id");
153
+ const hasDefaultColumns = entity.props.filter((prop) => (prop.type !== "relation" || prop.nullable === true) && (prop.nullable === true || prop.type !== "relation" && prop.dbDefault !== void 0)).map((prop) => prop.type === "relation" ? `${prop.name}_id` : prop.name).concat("id");
170
154
  /**
171
155
  * hasVector props
172
156
  * - vector 타입인 컬럼
@@ -176,7 +160,7 @@ var Template__generated = class extends Template {
176
160
  * generated props
177
161
  * - generated 속성이 있는 컬럼 (INSERT/UPDATE 시 값 제공 불가)
178
162
  */
179
- const generatedColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !== undefined || prop.type === "searchText")).map((prop) => prop.name);
163
+ const generatedColumns = entity.props.filter((prop) => prop.type !== "relation" && (prop.generated !== void 0 || prop.type === "searchText")).map((prop) => prop.name);
180
164
  const hasMetadata = fulltextColumns.length > 0 || virtualProps.length > 0 || virtualQueryProps.length > 0 || hasDefaultColumns.length > 0 || generatedColumns.length > 0 || hasVectorColumns.length > 0;
181
165
  const lines = [`export const ${schemaName} = ${schemaBody};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>` + (hasMetadata ? ` & {${(fulltextColumns.length > 0 ? `readonly __fulltext__: readonly [${fulltextColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (virtualProps.length > 0 ? `readonly __virtual__: readonly [${virtualProps.map((prop) => `"${prop}"`).join(", ")}],` : "") + (virtualQueryProps.length > 0 ? `readonly __virtual_query__: readonly [${virtualQueryProps.map((prop) => `"${prop}"`).join(", ")}],` : "") + (hasDefaultColumns.length > 0 ? `readonly __hasDefault__: readonly [${hasDefaultColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (generatedColumns.length > 0 ? `readonly __generated__: readonly [${generatedColumns.map((col) => `"${col}"`).join(", ")}],` : "") + (hasVectorColumns.length > 0 ? `readonly __vector__: readonly [${hasVectorColumns.map((col) => `"${col}"`).join(", ")}],` : "")}}` : "") + ";"];
182
166
  return {
@@ -186,14 +170,10 @@ var Template__generated = class extends Template {
186
170
  };
187
171
  }
188
172
  getBaseListParamsSourceCode(entity) {
189
- if (entity.props.length === 0) {
190
- return null;
191
- } else if (entity.parentId !== undefined) {
192
- return null;
193
- }
173
+ if (entity.props.length === 0) return null;
174
+ else if (entity.parentId !== void 0) return null;
194
175
  const schemaName = `${entity.names.module}BaseListParams`;
195
- const filterProps = entity.props.filter((prop) => prop.toFilter === true);
196
- const propNodes = filterProps.map((prop) => {
176
+ const propNodes = entity.props.filter((prop) => prop.toFilter === true).map((prop) => {
197
177
  return {
198
178
  nodeType: "plain",
199
179
  prop,
@@ -209,7 +189,7 @@ var Template__generated = class extends Template {
209
189
  const omitKeysUnion = excludedProps.length > 0 ? excludedProps.map((n) => `"${n}"`).join(" | ") : "never";
210
190
  const pkType = entity.getPkType();
211
191
  const idZodType = pkType === "string" || pkType === "uuid" ? "zArrayable(z.string())" : "zArrayable(z.number().int().positive())";
212
- const schemaBody = `
192
+ const lines = [`export const ${schemaName} = ${`
213
193
  z.object({
214
194
  num: z.number().int().nonnegative(),
215
195
  page: z.number().int().min(1),
@@ -220,8 +200,7 @@ z.object({
220
200
  id: ${idZodType},
221
201
  sonamuFilter: z.custom<ApplySonamuFilter<${entityType}, ${omitKeysUnion}, ${numericKeysUnion}>>(),${filterBody}
222
202
  }).partial();
223
- `.trim();
224
- const lines = [`export const ${schemaName} = ${schemaBody};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
203
+ `.trim()};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
225
204
  return {
226
205
  label: `BaseListParams: ${entity.id}`,
227
206
  importKeys,
@@ -229,11 +208,8 @@ z.object({
229
208
  };
230
209
  }
231
210
  getSubsetSourceCode(entity) {
232
- if (Object.keys(entity.subsets).length === 0) {
233
- return null;
234
- } else if (entity.parentId !== undefined) {
235
- return null;
236
- }
211
+ if (Object.keys(entity.subsets).length === 0) return null;
212
+ else if (entity.parentId !== void 0) return null;
237
213
  const subsetKeys = Object.keys(entity.subsets);
238
214
  const importKeys = [];
239
215
  const lines = [
@@ -241,12 +217,10 @@ z.object({
241
217
  const fieldExprs = entity.subsets[subsetKey];
242
218
  const propNodes = entity.fieldExprsToPropNodes(fieldExprs);
243
219
  const schemaName = `${entity.names.module}Subset${subsetKey}`;
244
- const propNode = {
220
+ return [`export const ${schemaName} = ${propNodeToZodTypeDef({
245
221
  nodeType: "object",
246
222
  children: propNodes
247
- };
248
- const body = propNodeToZodTypeDef(propNode, importKeys);
249
- return [`export const ${schemaName} = ${body.replace(/,$/, "")};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
223
+ }, importKeys).replace(/,$/, "")};`, `export type ${schemaName} = z.infer<typeof ${schemaName}>;`];
250
224
  }),
251
225
  `export type ${entity.names.module}SubsetMapping = {`,
252
226
  ...subsetKeys.map((subsetKey) => ` ${subsetKey}: ${entity.names.module}Subset${subsetKey};`),
@@ -262,7 +236,7 @@ z.object({
262
236
  };
263
237
  }
264
238
  };
265
-
266
239
  //#endregion
267
240
  export { Template__generated };
268
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsiZW50aXR5IiwicHJvcE5vZGU6IEVudGl0eVByb3BOb2RlIiwiZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSIsInByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSIsImltcG9ydEtleXM6IHN0cmluZ1tdIiwibGluZXM6IHN0cmluZ1tdIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy9nZW5lcmF0ZWQudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGFzc2VydCBmcm9tIFwiYXNzZXJ0XCI7XG5cbmltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5cbmltcG9ydCB7IFNvbmFtdSB9IGZyb20gXCIuLi8uLi9hcGlcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5IH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHlcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyBOYWl0ZSB9IGZyb20gXCIuLi8uLi9uYWl0ZS9uYWl0ZVwiO1xuaW1wb3J0IHsgaXNWaXJ0dWFsQ29kZVByb3AsIGlzVmlydHVhbFF1ZXJ5UHJvcCB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlJbmRleCwgdHlwZSBFbnRpdHlQcm9wTm9kZSB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgbm9uTnVsbGFibGUgfSBmcm9tIFwiLi4vLi4vdXRpbHMvdXRpbHNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5pbXBvcnQgeyBCVUlMVF9JTl9UWVBFUywgcHJvcE5vZGVUb1pvZFR5cGVEZWYsIHpvZFR5cGVUb1pvZENvZGUgfSBmcm9tIFwiLi4vem9kLWNvbnZlcnRlclwiO1xuXG5leHBvcnQgdHlwZSBTb3VyY2VDb2RlID0ge1xuICBsYWJlbDogc3RyaW5nO1xuICBsaW5lczogc3RyaW5nW107XG4gIGltcG9ydEtleXM6IHN0cmluZ1tdO1xufTtcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fZ2VuZXJhdGVkIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcImdlbmVyYXRlZFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgoKSB7XG4gICAgY29uc3QgeyBkaXIgfSA9IFNvbmFtdS5jb25maWcuYXBpO1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IGAke2Rpcn0vc3JjL2FwcGxpY2F0aW9uYCxcbiAgICAgIHBhdGg6IGBzb25hbXUuZ2VuZXJhdGVkLnRzYCxcbiAgICB9O1xuICB9XG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCBlbnRpdHlJZHMgPSBFbnRpdHlNYW5hZ2VyLmdldEFsbElkcygpO1xuICAgIGNvbnN0IGVudGl0aWVzID0gZW50aXR5SWRzLm1hcCgoaWQpID0+IEVudGl0eU1hbmFnZXIuZ2V0KGlkKSk7XG5cbiAgICAvLyDsoITssrQgU291cmNlQ29kZSDsg53shLFcbiAgICBjb25zdCBzb3VyY2VDb2RlcyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4ge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5nZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlU2NoZW1hU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHkpLFxuICAgICAgICB0aGlzLmdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgIF0uZmlsdGVyKG5vbk51bGxhYmxlKTtcbiAgICB9KTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpzb3VyY2VDb2Rlc1wiLCBzb3VyY2VDb2Rlcyk7XG5cbiAgICAvLyBTb3J0XG4gICAgY29uc3QgTEFCRUxfS0VZX09SREVSID0gW1wiRW51bXNcIiwgXCJCYXNlU2NoZW1hXCIsIFwiQmFzZUxpc3RQYXJhbXNcIiwgXCJTdWJzZXRzXCIsIFwiU3Vic2V0UXVlcmllc1wiXTtcbiAgICBzb3VyY2VDb2Rlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICBjb25zdCBbYUtleV0gPSBhLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IFtiS2V5XSA9IGIubGFiZWwuc3BsaXQoXCI6XCIpO1xuICAgICAgY29uc3QgYUluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYUtleSk7XG4gICAgICBjb25zdCBiSW5kZXggPSBMQUJFTF9LRVlfT1JERVIuaW5kZXhPZihiS2V5KTtcbiAgICAgIGlmIChhSW5kZXggPiBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGFJbmRleCA8IGJJbmRleCkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBzb3VyY2VDb2Rlcy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCB0cykgPT4ge1xuICAgICAgICBpZiAodHMgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbGluZXM6IFsuLi5yZXN1bHQubGluZXMsIGAvLyAke3RzLmxhYmVsfWAsIC4uLnRzLmxpbmVzLCBcIlwiXSxcbiAgICAgICAgICBpbXBvcnRLZXlzOiB1bmlxdWUoWy4uLnJlc3VsdC5pbXBvcnRLZXlzLCAuLi50cy5pbXBvcnRLZXlzXS50b1NvcnRlZCgpKSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxpbmVzOiBbXSxcbiAgICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICB9IGFzIE9taXQ8U291cmNlQ29kZSwgXCJsYWJlbFwiPixcbiAgICApO1xuXG4gICAgLy8gLnR5cGVzLnRz7J2YIO2DgOyeheydhCDssLjsobDtlZjripQg6rK97JqwIOyInO2ZmOywuOyhsCjsg4HtmLjssLjsobAp6rCAIOuwnOyDne2VmOuvgOuhnCDtg4DsnoXsnYQg6rCA7KC47JmAIOyduOudvOyduCDsspjrpqxcbiAgICBjb25zdCBhbGxUeXBlS2V5cyA9IGVudGl0aWVzLmZsYXRNYXAoKGVudGl0eSkgPT4gT2JqZWN0LmtleXMoZW50aXR5LnR5cGVzKSk7XG4gICAgY29uc3QgY2RJbXBvcnRLZXlzID0gc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PlxuICAgICAgYWxsVHlwZUtleXMuaW5jbHVkZXMoaW1wb3J0S2V5KSxcbiAgICApO1xuICAgIGlmIChjZEltcG9ydEtleXMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgY3VzdG9tU2NhbGFyTGluZXMgPSBjZEltcG9ydEtleXMuZmxhdE1hcCgoaW1wb3J0S2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGVudGl0eSA9IGVudGl0aWVzLmZpbmQoKGVudGl0eSkgPT4gZW50aXR5LnR5cGVzW2ltcG9ydEtleV0pO1xuICAgICAgICBpZiAoIWVudGl0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgWm9kVHlwZSBub3QgZm91bmQgJHtpbXBvcnRLZXl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgem9kVHlwZSA9IGVudGl0eS50eXBlc1tpbXBvcnRLZXldO1xuICAgICAgICBhc3NlcnQoem9kVHlwZSk7XG5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBgLy8gQ3VzdG9tU2NhbGFyOiAke2ltcG9ydEtleX1gLFxuICAgICAgICAgIGBjb25zdCAke2ltcG9ydEtleX0gPSAke3pvZFR5cGVUb1pvZENvZGUoem9kVHlwZSwgc291cmNlQ29kZS5pbXBvcnRLZXlzKX07YCxcbiAgICAgICAgICBgdHlwZSAke2ltcG9ydEtleX0gPSB6LmluZmVyPHR5cGVvZiAke2ltcG9ydEtleX0+YCxcbiAgICAgICAgICBcIlwiLFxuICAgICAgICBdO1xuICAgICAgfSk7XG4gICAgICBzb3VyY2VDb2RlLmxpbmVzID0gWy4uLmN1c3RvbVNjYWxhckxpbmVzLCAuLi5zb3VyY2VDb2RlLmxpbmVzXTtcbiAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyA9IHVuaXF1ZShcbiAgICAgICAgc291cmNlQ29kZS5pbXBvcnRLZXlzLmZpbHRlcigoaW1wb3J0S2V5KSA9PiAhY2RJbXBvcnRLZXlzLmluY2x1ZGVzKGltcG9ydEtleSkpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBib2R5ID0gc291cmNlQ29kZS5saW5lcy5qb2luKFwiXFxuXCIpO1xuICAgIE5haXRlLnQoXCJUZW1wbGF0ZV9fZ2VuZXJhdGVkOmJvZHlcIiwgYm9keSk7XG5cbiAgICAvLyBpbXBvcnRcbiAgICAvLyBzb3VyY2VDb2RlLmltcG9ydEtleXPsl5Ag64K07J6lIO2DgOyeheydmCDsiqTtgqTrp4jqsIAg7J6I7Jy866m0IHNvbmFtdSBpbXBvcnTsl5Ag7LaU6rCAXG4gICAgY29uc3QgYnVpbHRJblNjaGVtYU5hbWVzID0gT2JqZWN0LnZhbHVlcyhCVUlMVF9JTl9UWVBFUykubWFwKFxuICAgICAgKGluZm8pID0+IGluZm8uc2NoZW1hTmFtZSBhcyBzdHJpbmcsXG4gICAgKTtcbiAgICBjb25zdCBidWlsdEluU2NoZW1hcyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGtleSkgPT4gYnVpbHRJblNjaGVtYU5hbWVzLmluY2x1ZGVzKGtleSkpO1xuICAgIGNvbnN0IHNvbmFtdUltcG9ydHMgPSBbXG4gICAgICBcInpBcnJheWFibGVcIixcbiAgICAgIFwiU1FMRGF0ZVRpbWVTdHJpbmdcIixcbiAgICAgIFwiU3Vic2V0UXVlcnlcIixcbiAgICAgIFwiU29uYW11UXVlcnlNb2RlXCIsXG4gICAgICBcIkFwcGx5U29uYW11RmlsdGVyXCIsXG4gICAgICAuLi5idWlsdEluU2NoZW1hcyxcbiAgICBdLmZpbHRlcigobW9kKSA9PiBib2R5LmluY2x1ZGVzKG1vZCkpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aCgpLFxuICAgICAgYm9keSxcbiAgICAgIGltcG9ydEtleXM6IHNvdXJjZUNvZGUuaW1wb3J0S2V5cyxcbiAgICAgIGN1c3RvbUhlYWRlcnM6IFtcbiAgICAgICAgXCIvKipcIixcbiAgICAgICAgXCIgKiBAZ2VuZXJhdGVkXCIsXG4gICAgICAgIFwiICog7KeB7KCRIOyImOygle2VmOyngCDrp4jshLjsmpQuXCIsXG4gICAgICAgIFwiICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIFwiLyogb3hsaW50LWRpc2FibGUgKi9cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgYGltcG9ydCB7IHogfSBmcm9tICd6b2QnO2AsXG4gICAgICAgIGBpbXBvcnQgeyAke3NvbmFtdUltcG9ydHMuam9pbihcIixcIil9IH0gZnJvbSBcInNvbmFtdVwiO2AsXG4gICAgICBdLFxuICAgIH07XG4gIH1cblxuICBnZXRFbnVtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5lbnVtTGFiZWxzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBFbnVtczogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzOiBPYmplY3QuZW50cmllcyhlbnRpdHkuZW51bUxhYmVscylcbiAgICAgICAgLmZpbHRlcigoW18sIGVudW1MYWJlbF0pID0+IE9iamVjdC5rZXlzKGVudW1MYWJlbCkubGVuZ3RoID4gMClcbiAgICAgICAgLmZsYXRNYXAoKFtlbnVtSWQsIGVudW1MYWJlbF0pID0+IFtcbiAgICAgICAgICBgZXhwb3J0IGNvbnN0ICR7ZW51bUlkfSA9IHouZW51bShbJHtPYmplY3Qua2V5cyhlbnVtTGFiZWwpLm1hcChcbiAgICAgICAgICAgIChlbCkgPT4gYFwiJHtlbH1cImAsXG4gICAgICAgICAgKX1dKS5kZXNjcmliZShcIiR7ZW51bUlkfVwiKTtgLFxuICAgICAgICAgIGBleHBvcnQgdHlwZSAke2VudW1JZH0gPSB6LmluZmVyPHR5cGVvZiAke2VudW1JZH0+O2AsXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH1MYWJlbCA9ICR7SlNPTi5zdHJpbmdpZnkoZW51bUxhYmVsKX07YCxcbiAgICAgICAgXSksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHksIGltcG9ydEtleXM6IHN0cmluZ1tdID0gW10pOiBTb3VyY2VDb2RlIHtcbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuOiBlbnRpdHkucHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIixcbiAgICAgICAgICBwcm9wLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgfTtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSAoKCkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuICAgICAgaWYgKHJlc3VsdC5lbmRzV2l0aChcIixcIikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSkoKTtcblxuICAgIC8vIGZ1bGx0ZXh0IGluZGV47JeQIO2PrO2VqOuQnCDsu6zrn7zrk6Qg7LaU7LacXG4gICAgLy8gVE9ETzogR0lOL0dpU1Qg7J24642x7IqkIOyDneyEseuQnCDsu6zrn7wg7LaU7LacXG4gICAgY29uc3QgZnVsbHRleHRDb2x1bW5zOiBFbnRpdHlJbmRleFtcImNvbHVtbnNcIl1bXSA9IFtdO1xuXG4gICAgLy8gdmlydHVhbCBwcm9wcyAodmlydHVhbFR5cGU6IFwiY29kZVwiIOuYkOuKlCB1bmRlZmluZWTsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbENvZGVQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8vIHF1ZXJ5IHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcInF1ZXJ5XCLsnbgg6rKD66eMIO2PrO2VqClcbiAgICBjb25zdCB2aXJ0dWFsUXVlcnlQcm9wcyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gaXNWaXJ0dWFsUXVlcnlQcm9wKHByb3ApKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGhhc0RlZmF1bHQgcHJvcHNcbiAgICAgKiAtIG51bGxhYmxlIOuYkOuKlCBkYkRlZmF1bHTqsIAg7J6I64qUIOy7rOufvCAoaWQg7Y+s7ZWoKVxuICAgICAqIC0gcmVsYXRpb27snbQg7JWE64uI6rGw64KYLCByZWxhdGlvbuydtOyWtOuPhCBudWxsYWJsZeydtOuptCDtj6ztlahcbiAgICAgKi9cbiAgICBjb25zdCBoYXNEZWZhdWx0Q29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKHByb3ApID0+XG4gICAgICAgICAgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiIHx8IHByb3AubnVsbGFibGUgPT09IHRydWUpICYmXG4gICAgICAgICAgKHByb3AubnVsbGFibGUgPT09IHRydWUgfHwgKHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IChwcm9wLnR5cGUgPT09IFwicmVsYXRpb25cIiA/IGAke3Byb3AubmFtZX1faWRgIDogcHJvcC5uYW1lKSlcbiAgICAgIC5jb25jYXQoXCJpZFwiKTtcblxuICAgIC8qKlxuICAgICAqIGhhc1ZlY3RvciBwcm9wc1xuICAgICAqIC0gdmVjdG9yIO2DgOyeheyduCDsu6zrn7xcbiAgICAgKi9cbiAgICBjb25zdCBoYXNWZWN0b3JDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnR5cGUgPT09IFwidmVjdG9yXCIgfHwgcHJvcC50eXBlID09PSBcInZlY3RvcltdXCIpXG4gICAgICAubWFwKChwcm9wKSA9PiBwcm9wLm5hbWUpO1xuXG4gICAgLyoqXG4gICAgICogZ2VuZXJhdGVkIHByb3BzXG4gICAgICogLSBnZW5lcmF0ZWQg7IaN7ISx7J20IOyeiOuKlCDsu6zrn7wgKElOU0VSVC9VUERBVEUg7IucIOqwkiDsoJzqs7Ug67aI6rCAKVxuICAgICAqL1xuICAgIGNvbnN0IGdlbmVyYXRlZENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIHByb3AudHlwZSAhPT0gXCJyZWxhdGlvblwiICYmIChwcm9wLmdlbmVyYXRlZCAhPT0gdW5kZWZpbmVkIHx8IHByb3AudHlwZSA9PT0gXCJzZWFyY2hUZXh0XCIpLFxuICAgICAgKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIGNvbnN0IGhhc01ldGFkYXRhID1cbiAgICAgIGZ1bGx0ZXh0Q29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICB2aXJ0dWFsUHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzRGVmYXVsdENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwIHx8XG4gICAgICBoYXNWZWN0b3JDb2x1bW5zLmxlbmd0aCA+IDA7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT5gICtcbiAgICAgICAgKGhhc01ldGFkYXRhXG4gICAgICAgICAgPyBgICYgeyR7XG4gICAgICAgICAgICAgIChmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fZnVsbHRleHRfXzogcmVhZG9ubHkgWyR7ZnVsbHRleHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfXzogcmVhZG9ubHkgWyR7dmlydHVhbFByb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wfVwiYCkuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAodmlydHVhbFF1ZXJ5UHJvcHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmlydHVhbF9xdWVyeV9fOiByZWFkb25seSBbJHt2aXJ0dWFsUXVlcnlQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgWyR7aGFzRGVmYXVsdENvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChnZW5lcmF0ZWRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2dlbmVyYXRlZF9fOiByZWFkb25seSBbJHtnZW5lcmF0ZWRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192ZWN0b3JfXzogcmVhZG9ubHkgWyR7aGFzVmVjdG9yQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpXG4gICAgICAgICAgICB9fWBcbiAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgXCI7XCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VTY2hlbWE6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VMaXN0UGFyYW1zU291cmNlQ29kZShlbnRpdHk6IEVudGl0eSk6IFNvdXJjZUNvZGUgfCBudWxsIHtcbiAgICAvLyBQcm9wIOyXhuuKlCBNROyduCDqsr3smrAg7IOd7ISxIOygnOyZuFxuICAgIGlmIChlbnRpdHkucHJvcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1CYXNlTGlzdFBhcmFtc2A7XG5cbiAgICBjb25zdCBmaWx0ZXJQcm9wcyA9IGVudGl0eS5wcm9wcy5maWx0ZXIoKHByb3ApID0+IHByb3AudG9GaWx0ZXIgPT09IHRydWUpO1xuXG4gICAgY29uc3QgcHJvcE5vZGVzOiBFbnRpdHlQcm9wTm9kZVtdID0gZmlsdGVyUHJvcHMubWFwKChwcm9wKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlVHlwZTogXCJwbGFpblwiIGFzIGNvbnN0LFxuICAgICAgICBwcm9wLFxuICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBmaWx0ZXJCb2R5ID0gcHJvcE5vZGVzXG4gICAgICAubWFwKChwcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpKVxuICAgICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgICAvLyBGaWx0ZXJRdWVyeSDtg4DsnoXsnYQg7JyE7ZWcIOygnOyZuO2VoCBwcm9wcyDstpTstpwgKHZpcnR1YWzrp4wg7KCc7Jm4KVxuICAgIGNvbnN0IGV4Y2x1ZGVkUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwidmlydHVhbFwiKS5tYXAoKHApID0+IHAubmFtZSk7XG5cbiAgICAvLyBudW1lcmljIO2DgOyeheyduCBwcm9wcyDstpTstpxcbiAgICBjb25zdCBudW1lcmljUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwKSA9PiBwLnR5cGUgPT09IFwibnVtZXJpY1wiKTtcblxuICAgIC8vIEFwcGx5U29uYW11RmlsdGVyIO2DgOyehSDsnbjsnpAg7IOd7ISxXG4gICAgY29uc3QgZW50aXR5VHlwZSA9IGAke2VudGl0eS5pZH1CYXNlU2NoZW1hYDtcbiAgICBjb25zdCBudW1lcmljS2V5c1VuaW9uID1cbiAgICAgIG51bWVyaWNQcm9wcy5sZW5ndGggPiAwID8gbnVtZXJpY1Byb3BzLm1hcCgocHJvcCkgPT4gYFwiJHtwcm9wLm5hbWV9XCJgKS5qb2luKFwiIHwgXCIpIDogXCJuZXZlclwiO1xuICAgIGNvbnN0IG9taXRLZXlzVW5pb24gPVxuICAgICAgZXhjbHVkZWRQcm9wcy5sZW5ndGggPiAwID8gZXhjbHVkZWRQcm9wcy5tYXAoKG4pID0+IGBcIiR7bn1cImApLmpvaW4oXCIgfCBcIikgOiBcIm5ldmVyXCI7XG5cbiAgICAvLyBQSyDtg4DsnoXsl5Ag65Sw66W4IGlkIFpvZCDtg4DsnoUg6rKw7KCVXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIlxuICAgICAgICA/IFwiekFycmF5YWJsZSh6LnN0cmluZygpKVwiXG4gICAgICAgIDogXCJ6QXJyYXlhYmxlKHoubnVtYmVyKCkuaW50KCkucG9zaXRpdmUoKSlcIjtcblxuICAgIGNvbnN0IHNjaGVtYUJvZHkgPSBgXG56Lm9iamVjdCh7XG4gIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgc2VhcmNoOiAke2VudGl0eS5pZH1TZWFyY2hGaWVsZCxcbiAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgb3JkZXJCeTogJHtlbnRpdHkuaWR9T3JkZXJCeSxcbiAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gIGlkOiAke2lkWm9kVHlwZX0sXG4gIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8JHtlbnRpdHlUeXBlfSwgJHtvbWl0S2V5c1VuaW9ufSwgJHtudW1lcmljS2V5c1VuaW9ufT4+KCksJHtmaWx0ZXJCb2R5fVxufSkucGFydGlhbCgpO1xuYC50cmltKCk7XG5cbiAgICBjb25zdCBsaW5lcyA9IFtcbiAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7c2NoZW1hQm9keX07YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgQmFzZUxpc3RQYXJhbXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBpbXBvcnRLZXlzLFxuICAgICAgbGluZXMsXG4gICAgfTtcbiAgfVxuXG4gIGdldFN1YnNldFNvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgaWYgKE9iamVjdC5rZXlzKGVudGl0eS5zdWJzZXRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSBpZiAoZW50aXR5LnBhcmVudElkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgY29uc3QgaW1wb3J0S2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgICAuLi5zdWJzZXRLZXlzLmZsYXRNYXAoKHN1YnNldEtleSkgPT4ge1xuICAgICAgICAvLyDshJzruIzshYvsl5DshJwgRmllbGRFeHByW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IGZpZWxkRXhwcnMgPSBlbnRpdHkuc3Vic2V0c1tzdWJzZXRLZXldO1xuXG4gICAgICAgIC8vIEZpZWxkRXhwcltd66GcIEVudGl0eVByb3BOb2RlW10g6rCA7KC47Ji0XG4gICAgICAgIGNvbnN0IHByb3BOb2RlcyA9IGVudGl0eS5maWVsZEV4cHJzVG9Qcm9wTm9kZXMoZmllbGRFeHBycyk7XG4gICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fWA7XG4gICAgICAgIGNvbnN0IHByb3BOb2RlOiBFbnRpdHlQcm9wTm9kZSA9IHtcbiAgICAgICAgICBub2RlVHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICBjaGlsZHJlbjogcHJvcE5vZGVzLFxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIEVudGl0eVByb3BOb2RlW13roZwgWm9kVHlwZURlZihzdHJpbmcp7J2EIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBib2R5ID0gcHJvcE5vZGVUb1pvZFR5cGVEZWYocHJvcE5vZGUsIGltcG9ydEtleXMpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke3NjaGVtYU5hbWV9ID0gJHtib2R5LnJlcGxhY2UoLywkLywgXCJcIil9O2AsXG4gICAgICAgICAgYGV4cG9ydCB0eXBlICR7c2NoZW1hTmFtZX0gPSB6LmluZmVyPHR5cGVvZiAke3NjaGVtYU5hbWV9PjtgLFxuICAgICAgICBdO1xuICAgICAgfSksXG4gICAgICBgZXhwb3J0IHR5cGUgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldE1hcHBpbmcgPSB7YCxcbiAgICAgIC4uLnN1YnNldEtleXMubWFwKChzdWJzZXRLZXkpID0+IGAgICR7c3Vic2V0S2V5fTogJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldCR7c3Vic2V0S2V5fTtgKSxcbiAgICAgIFwifTtcIixcbiAgICAgIGBleHBvcnQgY29uc3QgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleSA9IHouZW51bShbJHtzdWJzZXRLZXlzXG4gICAgICAgIC5tYXAoKGspID0+IGBcIiR7a31cImApXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKTtgLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5PjtgLFxuICAgICAgXCJcIixcbiAgICBdO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgU3Vic2V0czogJHtlbnRpdHkuaWR9YCxcbiAgICAgIGxpbmVzLFxuICAgICAgaW1wb3J0S2V5czogdW5pcXVlKGltcG9ydEtleXMpLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O1VBSW1DO3FCQUV5QjtZQUNsQjtZQUNnQztZQUUxQjtlQUNUO29CQUNtRDtBQU8xRixJQUFhLHNCQUFiLGNBQXlDLFNBQVM7Q0FDaEQsY0FBYztBQUNaLFFBQU0sWUFBWTs7Q0FHcEIsbUJBQW1CO0VBQ2pCLE1BQU0sRUFBRSxRQUFRLE9BQU8sT0FBTztBQUM5QixTQUFPO0dBQ0wsUUFBUSxHQUFHLElBQUk7R0FDZixNQUFNO0dBQ1A7O0NBRUgsU0FBUztFQUNQLE1BQU0sWUFBWSxjQUFjLFdBQVc7RUFDM0MsTUFBTSxXQUFXLFVBQVUsS0FBSyxPQUFPLGNBQWMsSUFBSSxHQUFHLENBQUM7RUFHN0QsTUFBTSxjQUFjLFNBQVMsU0FBUyxXQUFXO0FBQy9DLFVBQU87SUFDTCxLQUFLLG1CQUFtQixPQUFPO0lBQy9CLEtBQUssd0JBQXdCLE9BQU87SUFDcEMsS0FBSyw0QkFBNEIsT0FBTztJQUN4QyxLQUFLLG9CQUFvQixPQUFPO0lBQ2pDLENB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
241
+
242
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGVkLnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvZ2VuZXJhdGVkLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhc3NlcnQgZnJvbSBcImFzc2VydFwiO1xuXG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuXG5pbXBvcnQgeyBTb25hbXUgfSBmcm9tIFwiLi4vLi4vYXBpXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eSB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5XCI7XG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi4vLi4vbmFpdGUvbmFpdGVcIjtcbmltcG9ydCB7IGlzVmlydHVhbENvZGVQcm9wLCBpc1ZpcnR1YWxRdWVyeVByb3AgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IHR5cGUgRW50aXR5SW5kZXgsIHR5cGUgRW50aXR5UHJvcE5vZGUgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IG5vbk51bGxhYmxlIH0gZnJvbSBcIi4uLy4uL3V0aWxzL3V0aWxzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgQlVJTFRfSU5fVFlQRVMsIHByb3BOb2RlVG9ab2RUeXBlRGVmLCB6b2RUeXBlVG9ab2RDb2RlIH0gZnJvbSBcIi4uL3pvZC1jb252ZXJ0ZXJcIjtcblxuZXhwb3J0IHR5cGUgU291cmNlQ29kZSA9IHtcbiAgbGFiZWw6IHN0cmluZztcbiAgbGluZXM6IHN0cmluZ1tdO1xuICBpbXBvcnRLZXlzOiBzdHJpbmdbXTtcbn07XG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX2dlbmVyYXRlZCBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJnZW5lcmF0ZWRcIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKCkge1xuICAgIGNvbnN0IHsgZGlyIH0gPSBTb25hbXUuY29uZmlnLmFwaTtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBgJHtkaXJ9L3NyYy9hcHBsaWNhdGlvbmAsXG4gICAgICBwYXRoOiBgc29uYW11LmdlbmVyYXRlZC50c2AsXG4gICAgfTtcbiAgfVxuICByZW5kZXIoKSB7XG4gICAgY29uc3QgZW50aXR5SWRzID0gRW50aXR5TWFuYWdlci5nZXRBbGxJZHMoKTtcbiAgICBjb25zdCBlbnRpdGllcyA9IGVudGl0eUlkcy5tYXAoKGlkKSA9PiBFbnRpdHlNYW5hZ2VyLmdldChpZCkpO1xuXG4gICAgLy8g7KCE7LK0IFNvdXJjZUNvZGUg7IOd7ISxXG4gICAgY29uc3Qgc291cmNlQ29kZXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMuZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICAgIHRoaXMuZ2V0QmFzZVNjaGVtYVNvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5KSxcbiAgICAgICAgdGhpcy5nZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eSksXG4gICAgICBdLmZpbHRlcihub25OdWxsYWJsZSk7XG4gICAgfSk7XG4gICAgTmFpdGUudChcIlRlbXBsYXRlX19nZW5lcmF0ZWQ6c291cmNlQ29kZXNcIiwgc291cmNlQ29kZXMpO1xuXG4gICAgLy8gU29ydFxuICAgIGNvbnN0IExBQkVMX0tFWV9PUkRFUiA9IFtcIkVudW1zXCIsIFwiQmFzZVNjaGVtYVwiLCBcIkJhc2VMaXN0UGFyYW1zXCIsIFwiU3Vic2V0c1wiLCBcIlN1YnNldFF1ZXJpZXNcIl07XG4gICAgc291cmNlQ29kZXMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgW2FLZXldID0gYS5sYWJlbC5zcGxpdChcIjpcIik7XG4gICAgICBjb25zdCBbYktleV0gPSBiLmxhYmVsLnNwbGl0KFwiOlwiKTtcbiAgICAgIGNvbnN0IGFJbmRleCA9IExBQkVMX0tFWV9PUkRFUi5pbmRleE9mKGFLZXkpO1xuICAgICAgY29uc3QgYkluZGV4ID0gTEFCRUxfS0VZX09SREVSLmluZGV4T2YoYktleSk7XG4gICAgICBpZiAoYUluZGV4ID4gYkluZGV4KSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChhSW5kZXggPCBiSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBzb3VyY2VDb2RlID0gc291cmNlQ29kZXMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgdHMpID0+IHtcbiAgICAgICAgaWYgKHRzID09PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGxpbmVzOiBbLi4ucmVzdWx0LmxpbmVzLCBgLy8gJHt0cy5sYWJlbH1gLCAuLi50cy5saW5lcywgXCJcIl0sXG4gICAgICAgICAgaW1wb3J0S2V5czogdW5pcXVlKFsuLi5yZXN1bHQuaW1wb3J0S2V5cywgLi4udHMuaW1wb3J0S2V5c10udG9Tb3J0ZWQoKSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsaW5lczogW10sXG4gICAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgICAgfSBhcyBPbWl0PFNvdXJjZUNvZGUsIFwibGFiZWxcIj4sXG4gICAgKTtcblxuICAgIC8vIC50eXBlcy50c+ydmCDtg4DsnoXsnYQg7LC47KGw7ZWY64qUIOqyveyasCDsiJztmZjssLjsobAo7IOB7Zi47LC47KGwKeqwgCDrsJzsg53tlZjrr4DroZwg7YOA7J6F7J2EIOqwgOyguOyZgCDsnbjrnbzsnbgg7LKY66asXG4gICAgY29uc3QgYWxsVHlwZUtleXMgPSBlbnRpdGllcy5mbGF0TWFwKChlbnRpdHkpID0+IE9iamVjdC5rZXlzKGVudGl0eS50eXBlcykpO1xuICAgIGNvbnN0IGNkSW1wb3J0S2V5cyA9IHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT5cbiAgICAgIGFsbFR5cGVLZXlzLmluY2x1ZGVzKGltcG9ydEtleSksXG4gICAgKTtcbiAgICBpZiAoY2RJbXBvcnRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGN1c3RvbVNjYWxhckxpbmVzID0gY2RJbXBvcnRLZXlzLmZsYXRNYXAoKGltcG9ydEtleSkgPT4ge1xuICAgICAgICBjb25zdCBlbnRpdHkgPSBlbnRpdGllcy5maW5kKChlbnRpdHkpID0+IGVudGl0eS50eXBlc1tpbXBvcnRLZXldKTtcbiAgICAgICAgaWYgKCFlbnRpdHkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFpvZFR5cGUgbm90IGZvdW5kICR7aW1wb3J0S2V5fWApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHpvZFR5cGUgPSBlbnRpdHkudHlwZXNbaW1wb3J0S2V5XTtcbiAgICAgICAgYXNzZXJ0KHpvZFR5cGUpO1xuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgYC8vIEN1c3RvbVNjYWxhcjogJHtpbXBvcnRLZXl9YCxcbiAgICAgICAgICBgY29uc3QgJHtpbXBvcnRLZXl9ID0gJHt6b2RUeXBlVG9ab2RDb2RlKHpvZFR5cGUsIHNvdXJjZUNvZGUuaW1wb3J0S2V5cyl9O2AsXG4gICAgICAgICAgYHR5cGUgJHtpbXBvcnRLZXl9ID0gei5pbmZlcjx0eXBlb2YgJHtpbXBvcnRLZXl9PmAsXG4gICAgICAgICAgXCJcIixcbiAgICAgICAgXTtcbiAgICAgIH0pO1xuICAgICAgc291cmNlQ29kZS5saW5lcyA9IFsuLi5jdXN0b21TY2FsYXJMaW5lcywgLi4uc291cmNlQ29kZS5saW5lc107XG4gICAgICBzb3VyY2VDb2RlLmltcG9ydEtleXMgPSB1bmlxdWUoXG4gICAgICAgIHNvdXJjZUNvZGUuaW1wb3J0S2V5cy5maWx0ZXIoKGltcG9ydEtleSkgPT4gIWNkSW1wb3J0S2V5cy5pbmNsdWRlcyhpbXBvcnRLZXkpKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYm9keSA9IHNvdXJjZUNvZGUubGluZXMuam9pbihcIlxcblwiKTtcbiAgICBOYWl0ZS50KFwiVGVtcGxhdGVfX2dlbmVyYXRlZDpib2R5XCIsIGJvZHkpO1xuXG4gICAgLy8gaW1wb3J0XG4gICAgLy8gc291cmNlQ29kZS5pbXBvcnRLZXlz7JeQIOuCtOyepSDtg4DsnoXsnZgg7Iqk7YKk66eI6rCAIOyeiOycvOuptCBzb25hbXUgaW1wb3J07JeQIOy2lOqwgFxuICAgIGNvbnN0IGJ1aWx0SW5TY2hlbWFOYW1lcyA9IE9iamVjdC52YWx1ZXMoQlVJTFRfSU5fVFlQRVMpLm1hcChcbiAgICAgIChpbmZvKSA9PiBpbmZvLnNjaGVtYU5hbWUgYXMgc3RyaW5nLFxuICAgICk7XG4gICAgY29uc3QgYnVpbHRJblNjaGVtYXMgPSBzb3VyY2VDb2RlLmltcG9ydEtleXMuZmlsdGVyKChrZXkpID0+IGJ1aWx0SW5TY2hlbWFOYW1lcy5pbmNsdWRlcyhrZXkpKTtcbiAgICBjb25zdCBzb25hbXVJbXBvcnRzID0gW1xuICAgICAgXCJ6QXJyYXlhYmxlXCIsXG4gICAgICBcIlNRTERhdGVUaW1lU3RyaW5nXCIsXG4gICAgICBcIlN1YnNldFF1ZXJ5XCIsXG4gICAgICBcIlNvbmFtdVF1ZXJ5TW9kZVwiLFxuICAgICAgXCJBcHBseVNvbmFtdUZpbHRlclwiLFxuICAgICAgLi4uYnVpbHRJblNjaGVtYXMsXG4gICAgXS5maWx0ZXIoKG1vZCkgPT4gYm9keS5pbmNsdWRlcyhtb2QpKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgoKSxcbiAgICAgIGJvZHksXG4gICAgICBpbXBvcnRLZXlzOiBzb3VyY2VDb2RlLmltcG9ydEtleXMsXG4gICAgICBjdXN0b21IZWFkZXJzOiBbXG4gICAgICAgIFwiLyoqXCIsXG4gICAgICAgIFwiICogQGdlbmVyYXRlZFwiLFxuICAgICAgICBcIiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlwiLFxuICAgICAgICBcIiAqL1wiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIi8qIG94bGludC1kaXNhYmxlICovXCIsXG4gICAgICAgIFwiXCIsXG4gICAgICAgIGBpbXBvcnQgeyB6IH0gZnJvbSAnem9kJztgLFxuICAgICAgICBgaW1wb3J0IHsgJHtzb25hbXVJbXBvcnRzLmpvaW4oXCIsXCIpfSB9IGZyb20gXCJzb25hbXVcIjtgLFxuICAgICAgXSxcbiAgICB9O1xuICB9XG5cbiAgZ2V0RW51bXNTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuZW51bUxhYmVscykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsOiBgRW51bXM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lczogT2JqZWN0LmVudHJpZXMoZW50aXR5LmVudW1MYWJlbHMpXG4gICAgICAgIC5maWx0ZXIoKFtfLCBlbnVtTGFiZWxdKSA9PiBPYmplY3Qua2V5cyhlbnVtTGFiZWwpLmxlbmd0aCA+IDApXG4gICAgICAgIC5mbGF0TWFwKChbZW51bUlkLCBlbnVtTGFiZWxdKSA9PiBbXG4gICAgICAgICAgYGV4cG9ydCBjb25zdCAke2VudW1JZH0gPSB6LmVudW0oWyR7T2JqZWN0LmtleXMoZW51bUxhYmVsKS5tYXAoXG4gICAgICAgICAgICAoZWwpID0+IGBcIiR7ZWx9XCJgLFxuICAgICAgICAgICl9XSkuZGVzY3JpYmUoXCIke2VudW1JZH1cIik7YCxcbiAgICAgICAgICBgZXhwb3J0IHR5cGUgJHtlbnVtSWR9ID0gei5pbmZlcjx0eXBlb2YgJHtlbnVtSWR9PjtgLFxuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtlbnVtSWR9TGFiZWwgPSAke0pTT04uc3RyaW5naWZ5KGVudW1MYWJlbCl9O2AsXG4gICAgICAgIF0pLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxuXG4gIGdldEJhc2VTY2hlbWFTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5LCBpbXBvcnRLZXlzOiBzdHJpbmdbXSA9IFtdKTogU291cmNlQ29kZSB7XG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgcHJvcE5vZGU6IEVudGl0eVByb3BOb2RlID0ge1xuICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICBjaGlsZHJlbjogZW50aXR5LnByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vZGVUeXBlOiBcInBsYWluXCIsXG4gICAgICAgICAgcHJvcCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gKCgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcbiAgICAgIGlmIChyZXN1bHQuZW5kc1dpdGgoXCIsXCIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQuc2xpY2UoMCwgLTEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pKCk7XG5cbiAgICAvLyBmdWxsdGV4dCBpbmRleOyXkCDtj6ztlajrkJwg7Lus65+865OkIOy2lOy2nFxuICAgIC8vIFRPRE86IEdJTi9HaVNUIOyduOuNseyKpCDsg53shLHrkJwg7Lus65+8IOy2lOy2nFxuICAgIGNvbnN0IGZ1bGx0ZXh0Q29sdW1uczogRW50aXR5SW5kZXhbXCJjb2x1bW5zXCJdW10gPSBbXTtcblxuICAgIC8vIHZpcnR1YWwgcHJvcHMgKHZpcnR1YWxUeXBlOiBcImNvZGVcIiDrmJDripQgdW5kZWZpbmVk7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFByb3BzID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKChwcm9wKSA9PiBpc1ZpcnR1YWxDb2RlUHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvLyBxdWVyeSB2aXJ0dWFsIHByb3BzICh2aXJ0dWFsVHlwZTogXCJxdWVyeVwi7J24IOqyg+unjCDtj6ztlagpXG4gICAgY29uc3QgdmlydHVhbFF1ZXJ5UHJvcHMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoKHByb3ApID0+IGlzVmlydHVhbFF1ZXJ5UHJvcChwcm9wKSlcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICAvKipcbiAgICAgKiBoYXNEZWZhdWx0IHByb3BzXG4gICAgICogLSBudWxsYWJsZSDrmJDripQgZGJEZWZhdWx06rCAIOyeiOuKlCDsu6zrn7wgKGlkIO2PrO2VqClcbiAgICAgKiAtIHJlbGF0aW9u7J20IOyVhOuLiOqxsOuCmCwgcmVsYXRpb27snbTslrTrj4QgbnVsbGFibGXsnbTrqbQg7Y+s7ZWoXG4gICAgICovXG4gICAgY29uc3QgaGFzRGVmYXVsdENvbHVtbnMgPSBlbnRpdHkucHJvcHNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChwcm9wKSA9PlxuICAgICAgICAgIChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiB8fCBwcm9wLm51bGxhYmxlID09PSB0cnVlKSAmJlxuICAgICAgICAgIChwcm9wLm51bGxhYmxlID09PSB0cnVlIHx8IChwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiBwcm9wLmRiRGVmYXVsdCAhPT0gdW5kZWZpbmVkKSksXG4gICAgICApXG4gICAgICAubWFwKChwcm9wKSA9PiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgPyBgJHtwcm9wLm5hbWV9X2lkYCA6IHByb3AubmFtZSkpXG4gICAgICAuY29uY2F0KFwiaWRcIik7XG5cbiAgICAvKipcbiAgICAgKiBoYXNWZWN0b3IgcHJvcHNcbiAgICAgKiAtIHZlY3RvciDtg4DsnoXsnbgg7Lus65+8XG4gICAgICovXG4gICAgY29uc3QgaGFzVmVjdG9yQ29sdW1ucyA9IGVudGl0eS5wcm9wc1xuICAgICAgLmZpbHRlcigocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInZlY3RvclwiIHx8IHByb3AudHlwZSA9PT0gXCJ2ZWN0b3JbXVwiKVxuICAgICAgLm1hcCgocHJvcCkgPT4gcHJvcC5uYW1lKTtcblxuICAgIC8qKlxuICAgICAqIGdlbmVyYXRlZCBwcm9wc1xuICAgICAqIC0gZ2VuZXJhdGVkIOyGjeyEseydtCDsnojripQg7Lus65+8IChJTlNFUlQvVVBEQVRFIOyLnCDqsJIg7KCc6rO1IOu2iOqwgClcbiAgICAgKi9cbiAgICBjb25zdCBnZW5lcmF0ZWRDb2x1bW5zID0gZW50aXR5LnByb3BzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAocHJvcCkgPT5cbiAgICAgICAgICBwcm9wLnR5cGUgIT09IFwicmVsYXRpb25cIiAmJiAocHJvcC5nZW5lcmF0ZWQgIT09IHVuZGVmaW5lZCB8fCBwcm9wLnR5cGUgPT09IFwic2VhcmNoVGV4dFwiKSxcbiAgICAgIClcbiAgICAgIC5tYXAoKHByb3ApID0+IHByb3AubmFtZSk7XG5cbiAgICBjb25zdCBoYXNNZXRhZGF0YSA9XG4gICAgICBmdWxsdGV4dENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgdmlydHVhbFByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDAgfHxcbiAgICAgIGhhc0RlZmF1bHRDb2x1bW5zLmxlbmd0aCA+IDAgfHxcbiAgICAgIGdlbmVyYXRlZENvbHVtbnMubGVuZ3RoID4gMCB8fFxuICAgICAgaGFzVmVjdG9yQ29sdW1ucy5sZW5ndGggPiAwO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+YCArXG4gICAgICAgIChoYXNNZXRhZGF0YVxuICAgICAgICAgID8gYCAmIHske1xuICAgICAgICAgICAgICAoZnVsbHRleHRDb2x1bW5zLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX2Z1bGx0ZXh0X186IHJlYWRvbmx5IFske2Z1bGx0ZXh0Q29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxQcm9wcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX192aXJ0dWFsX186IHJlYWRvbmx5IFske3ZpcnR1YWxQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcH1cImApLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKHZpcnR1YWxRdWVyeVByb3BzLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICA/IGByZWFkb25seSBfX3ZpcnR1YWxfcXVlcnlfXzogcmVhZG9ubHkgWyR7dmlydHVhbFF1ZXJ5UHJvcHMubWFwKChwcm9wKSA9PiBgXCIke3Byb3B9XCJgKS5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICAgICAgIChoYXNEZWZhdWx0Q29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFske2hhc0RlZmF1bHRDb2x1bW5zXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gYFwiJHtjb2x9XCJgKVxuICAgICAgICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfV0sYFxuICAgICAgICAgICAgICAgIDogXCJcIikgK1xuICAgICAgICAgICAgICAoZ2VuZXJhdGVkQ29sdW1ucy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBgcmVhZG9ubHkgX19nZW5lcmF0ZWRfXzogcmVhZG9ubHkgWyR7Z2VuZXJhdGVkQ29sdW1uc1xuICAgICAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IGBcIiR7Y29sfVwiYClcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX1dLGBcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgICAgICAgKGhhc1ZlY3RvckNvbHVtbnMubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgID8gYHJlYWRvbmx5IF9fdmVjdG9yX186IHJlYWRvbmx5IFske2hhc1ZlY3RvckNvbHVtbnNcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiBgXCIke2NvbH1cImApXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9XSxgXG4gICAgICAgICAgICAgICAgOiBcIlwiKVxuICAgICAgICAgICAgfX1gXG4gICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgIFwiO1wiLFxuICAgIF07XG5cbiAgICByZXR1cm4ge1xuICAgICAgbGFiZWw6IGBCYXNlU2NoZW1hOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRCYXNlTGlzdFBhcmFtc1NvdXJjZUNvZGUoZW50aXR5OiBFbnRpdHkpOiBTb3VyY2VDb2RlIHwgbnVsbCB7XG4gICAgLy8gUHJvcCDsl4bripQgTUTsnbgg6rK97JqwIOyDneyEsSDsoJzsmbhcbiAgICBpZiAoZW50aXR5LnByb3BzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIGlmIChlbnRpdHkucGFyZW50SWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hTmFtZSA9IGAke2VudGl0eS5uYW1lcy5tb2R1bGV9QmFzZUxpc3RQYXJhbXNgO1xuXG4gICAgY29uc3QgZmlsdGVyUHJvcHMgPSBlbnRpdHkucHJvcHMuZmlsdGVyKChwcm9wKSA9PiBwcm9wLnRvRmlsdGVyID09PSB0cnVlKTtcblxuICAgIGNvbnN0IHByb3BOb2RlczogRW50aXR5UHJvcE5vZGVbXSA9IGZpbHRlclByb3BzLm1hcCgocHJvcCkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZVR5cGU6IFwicGxhaW5cIiBhcyBjb25zdCxcbiAgICAgICAgcHJvcCxcbiAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgZmlsdGVyQm9keSA9IHByb3BOb2Rlc1xuICAgICAgLm1hcCgocHJvcE5vZGUpID0+IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKSlcbiAgICAgIC5qb2luKFwiXFxuXCIpO1xuXG4gICAgLy8gRmlsdGVyUXVlcnkg7YOA7J6F7J2EIOychO2VnCDsoJzsmbjtlaAgcHJvcHMg7LaU7LacICh2aXJ0dWFs66eMIOygnOyZuClcbiAgICBjb25zdCBleGNsdWRlZFByb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocCkgPT4gcC50eXBlID09PSBcInZpcnR1YWxcIikubWFwKChwKSA9PiBwLm5hbWUpO1xuXG4gICAgLy8gbnVtZXJpYyDtg4DsnoXsnbggcHJvcHMg7LaU7LacXG4gICAgY29uc3QgbnVtZXJpY1Byb3BzID0gZW50aXR5LnByb3BzLmZpbHRlcigocCkgPT4gcC50eXBlID09PSBcIm51bWVyaWNcIik7XG5cbiAgICAvLyBBcHBseVNvbmFtdUZpbHRlciDtg4DsnoUg7J247J6QIOyDneyEsVxuICAgIGNvbnN0IGVudGl0eVR5cGUgPSBgJHtlbnRpdHkuaWR9QmFzZVNjaGVtYWA7XG4gICAgY29uc3QgbnVtZXJpY0tleXNVbmlvbiA9XG4gICAgICBudW1lcmljUHJvcHMubGVuZ3RoID4gMCA/IG51bWVyaWNQcm9wcy5tYXAoKHByb3ApID0+IGBcIiR7cHJvcC5uYW1lfVwiYCkuam9pbihcIiB8IFwiKSA6IFwibmV2ZXJcIjtcbiAgICBjb25zdCBvbWl0S2V5c1VuaW9uID1cbiAgICAgIGV4Y2x1ZGVkUHJvcHMubGVuZ3RoID4gMCA/IGV4Y2x1ZGVkUHJvcHMubWFwKChuKSA9PiBgXCIke259XCJgKS5qb2luKFwiIHwgXCIpIDogXCJuZXZlclwiO1xuXG4gICAgLy8gUEsg7YOA7J6F7JeQIOuUsOuluCBpZCBab2Qg7YOA7J6FIOqysOyglVxuICAgIGNvbnN0IHBrVHlwZSA9IGVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICBjb25zdCBpZFpvZFR5cGUgPVxuICAgICAgcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCJcbiAgICAgICAgPyBcInpBcnJheWFibGUoei5zdHJpbmcoKSlcIlxuICAgICAgICA6IFwiekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpXCI7XG5cbiAgICBjb25zdCBzY2hlbWFCb2R5ID0gYFxuei5vYmplY3Qoe1xuICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgcGFnZTogei5udW1iZXIoKS5pbnQoKS5taW4oMSksXG4gIHNlYXJjaDogJHtlbnRpdHkuaWR9U2VhcmNoRmllbGQsXG4gIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gIG9yZGVyQnk6ICR7ZW50aXR5LmlkfU9yZGVyQnksXG4gIHF1ZXJ5TW9kZTogU29uYW11UXVlcnlNb2RlLFxuICBpZDogJHtpZFpvZFR5cGV9LFxuICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPCR7ZW50aXR5VHlwZX0sICR7b21pdEtleXNVbmlvbn0sICR7bnVtZXJpY0tleXNVbmlvbn0+PigpLCR7ZmlsdGVyQm9keX1cbn0pLnBhcnRpYWwoKTtcbmAudHJpbSgpO1xuXG4gICAgY29uc3QgbGluZXMgPSBbXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7c2NoZW1hTmFtZX0gPSAke3NjaGVtYUJvZHl9O2AsXG4gICAgICBgZXhwb3J0IHR5cGUgJHtzY2hlbWFOYW1lfSA9IHouaW5mZXI8dHlwZW9mICR7c2NoZW1hTmFtZX0+O2AsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYEJhc2VMaXN0UGFyYW1zOiAke2VudGl0eS5pZH1gLFxuICAgICAgaW1wb3J0S2V5cyxcbiAgICAgIGxpbmVzLFxuICAgIH07XG4gIH1cblxuICBnZXRTdWJzZXRTb3VyY2VDb2RlKGVudGl0eTogRW50aXR5KTogU291cmNlQ29kZSB8IG51bGwge1xuICAgIGlmIChPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2UgaWYgKGVudGl0eS5wYXJlbnRJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBzdWJzZXRLZXlzID0gT2JqZWN0LmtleXMoZW50aXR5LnN1YnNldHMpO1xuICAgIGNvbnN0IGltcG9ydEtleXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICAgLi4uc3Vic2V0S2V5cy5mbGF0TWFwKChzdWJzZXRLZXkpID0+IHtcbiAgICAgICAgLy8g7ISc67iM7IWL7JeQ7IScIEZpZWxkRXhwcltdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBmaWVsZEV4cHJzID0gZW50aXR5LnN1YnNldHNbc3Vic2V0S2V5XTtcblxuICAgICAgICAvLyBGaWVsZEV4cHJbXeuhnCBFbnRpdHlQcm9wTm9kZVtdIOqwgOyguOyYtFxuICAgICAgICBjb25zdCBwcm9wTm9kZXMgPSBlbnRpdHkuZmllbGRFeHByc1RvUHJvcE5vZGVzKGZpZWxkRXhwcnMpO1xuICAgICAgICBjb25zdCBzY2hlbWFOYW1lID0gYCR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX1gO1xuICAgICAgICBjb25zdCBwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUgPSB7XG4gICAgICAgICAgbm9kZVR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgY2hpbGRyZW46IHByb3BOb2RlcyxcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBFbnRpdHlQcm9wTm9kZVtd66GcIFpvZFR5cGVEZWYoc3RyaW5nKeydhCDqsIDsoLjsmLRcbiAgICAgICAgY29uc3QgYm9keSA9IHByb3BOb2RlVG9ab2RUeXBlRGVmKHByb3BOb2RlLCBpbXBvcnRLZXlzKTtcblxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIGBleHBvcnQgY29uc3QgJHtzY2hlbWFOYW1lfSA9ICR7Ym9keS5yZXBsYWNlKC8sJC8sIFwiXCIpfTtgLFxuICAgICAgICAgIGBleHBvcnQgdHlwZSAke3NjaGVtYU5hbWV9ID0gei5pbmZlcjx0eXBlb2YgJHtzY2hlbWFOYW1lfT47YCxcbiAgICAgICAgXTtcbiAgICAgIH0pLFxuICAgICAgYGV4cG9ydCB0eXBlICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRNYXBwaW5nID0ge2AsXG4gICAgICAuLi5zdWJzZXRLZXlzLm1hcCgoc3Vic2V0S2V5KSA9PiBgICAke3N1YnNldEtleX06ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXQke3N1YnNldEtleX07YCksXG4gICAgICBcIn07XCIsXG4gICAgICBgZXhwb3J0IGNvbnN0ICR7ZW50aXR5Lm5hbWVzLm1vZHVsZX1TdWJzZXRLZXkgPSB6LmVudW0oWyR7c3Vic2V0S2V5c1xuICAgICAgICAubWFwKChrKSA9PiBgXCIke2t9XCJgKVxuICAgICAgICAuam9pbihcIixcIil9XSk7YCxcbiAgICAgIGBleHBvcnQgdHlwZSAke2VudGl0eS5uYW1lcy5tb2R1bGV9U3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgJHtlbnRpdHkubmFtZXMubW9kdWxlfVN1YnNldEtleT47YCxcbiAgICAgIFwiXCIsXG4gICAgXTtcblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbDogYFN1YnNldHM6ICR7ZW50aXR5LmlkfWAsXG4gICAgICBsaW5lcyxcbiAgICAgIGltcG9ydEtleXM6IHVuaXF1ZShpbXBvcnRLZXlzKSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1NBSWtDO29CQUV5QjtXQUNsQjtXQUNnQztXQUUxQjtjQUNUO21CQUNtRDtBQU96RixJQUFhLHNCQUFiLGNBQXlDLFNBQVM7Q0FDaEQsY0FBYztFQUNaLE1BQU0sV0FBVztDQUNuQjtDQUVBLG1CQUFtQjtFQUNqQixNQUFNLEVBQUUsUUFBUSxPQUFPLE9BQU87RUFDOUIsT0FBTztHQUNMLFFBQVEsR0FBRyxJQUFJO0dBQ2YsTUFBTTtFQUNSO0NBQ0Y7Q0FDQSxTQUFTO0VBRVAsTUFBTSxXQURZLGNBQWMsVUFDZixDQUFBLENBQVUsS0FBSyxPQUFPLGNBQWMsSUFBSSxFQUFFLENBQUM7RUFHNUQsTUFBTSxjQUFjLFNBQVMsU0FBUyxXQUFXO0dBQy9DLE9BQU87SUFDTCxLQUFLLG1CQUFtQixNQUFNO0lBQzlCLEtBQUssd0JBQXdCLE1BQU07SUFDbkMsS0FBSyw0QkFBNEIsTUFBTTtJQUN2QyxLQUFLLG9CQUFvQixNQUFNO0dBQ2pDLENBQUMsQ0FBQyxPQUFPLFdBQVc7RUFDdEIsQ0FBQztFQUNELE1BQU0sRUFBRSxtQ0FBbUMsV0FBVztFQUd0RCxNQUFNLGtCQUFrQjtHQUFDO0dBQVM7R0FBYztHQUFrQjtHQUFXO0VBQWU7RUFDNUYsWUFBWSxNQUFNLEdBQUcsTUFBTTtHQUN6QixNQUFNLENBQUMsUUFBUSxFQUFF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