sonamu 0.7.53 → 0.8.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.
- package/dist/api/config.d.ts +9 -1
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +1 -1
- package/dist/api/sonamu.d.ts +21 -1
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +159 -65
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/anonymous.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/anonymous.js +23 -0
- package/dist/auth/plugins/entity-definitions/api-key.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/api-key.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/api-key.js +199 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts +6 -0
- package/dist/auth/plugins/entity-definitions/index.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/index.js +20 -2
- package/dist/auth/plugins/entity-definitions/jwt.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/jwt.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/jwt.js +67 -0
- package/dist/auth/plugins/entity-definitions/organization.d.ts +9 -0
- package/dist/auth/plugins/entity-definitions/organization.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/organization.js +424 -0
- package/dist/auth/plugins/entity-definitions/passkey.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/passkey.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/passkey.js +129 -0
- package/dist/auth/plugins/entity-definitions/sso.d.ts +10 -0
- package/dist/auth/plugins/entity-definitions/sso.d.ts.map +1 -0
- package/dist/auth/plugins/entity-definitions/sso.js +110 -0
- package/dist/auth/plugins/entity-definitions/types.d.ts +1 -1
- package/dist/auth/plugins/entity-definitions/types.d.ts.map +1 -1
- package/dist/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/wrappers/admin.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/admin.js +2 -4
- package/dist/auth/plugins/wrappers/anonymous.d.ts +18 -0
- package/dist/auth/plugins/wrappers/anonymous.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/anonymous.js +26 -0
- package/dist/auth/plugins/wrappers/api-key.d.ts +18 -0
- package/dist/auth/plugins/wrappers/api-key.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/api-key.js +38 -0
- package/dist/auth/plugins/wrappers/index.d.ts +6 -0
- package/dist/auth/plugins/wrappers/index.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/index.js +7 -1
- package/dist/auth/plugins/wrappers/jwt.d.ts +18 -0
- package/dist/auth/plugins/wrappers/jwt.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/jwt.js +30 -0
- package/dist/auth/plugins/wrappers/organization.d.ts +18 -0
- package/dist/auth/plugins/wrappers/organization.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/organization.js +67 -0
- package/dist/auth/plugins/wrappers/passkey.d.ts +18 -0
- package/dist/auth/plugins/wrappers/passkey.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/passkey.js +32 -0
- package/dist/auth/plugins/wrappers/phone-number.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/phone-number.js +2 -4
- package/dist/auth/plugins/wrappers/sso.d.ts +853 -0
- package/dist/auth/plugins/wrappers/sso.d.ts.map +1 -0
- package/dist/auth/plugins/wrappers/sso.js +36 -0
- package/dist/auth/plugins/wrappers/two-factor.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/two-factor.js +2 -4
- package/dist/auth/plugins/wrappers/username.d.ts.map +1 -1
- package/dist/auth/plugins/wrappers/username.js +2 -4
- package/dist/bin/build-config.d.ts +2 -2
- package/dist/bin/build-config.js +6 -7
- package/dist/bin/cli.js +417 -32
- package/dist/bin/fixture.d.ts +27 -0
- package/dist/bin/fixture.d.ts.map +1 -0
- package/dist/bin/fixture.js +245 -0
- package/dist/cache/decorator.d.ts +4 -3
- package/dist/cache/decorator.d.ts.map +1 -1
- package/dist/cache/decorator.js +5 -4
- package/dist/cone/cone-generator.d.ts +33 -0
- package/dist/cone/cone-generator.d.ts.map +1 -0
- package/dist/cone/cone-generator.js +286 -0
- package/dist/database/_batch_update.d.ts.map +1 -1
- package/dist/database/_batch_update.js +16 -2
- package/dist/database/puri-subset.test-d.js +1 -1
- package/dist/database/puri-subset.types.d.ts +1 -1
- package/dist/database/puri-subset.types.d.ts.map +1 -1
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri.d.ts +4 -0
- package/dist/database/puri.d.ts.map +1 -1
- package/dist/database/puri.js +20 -2
- package/dist/database/upsert-builder.d.ts.map +1 -1
- package/dist/database/upsert-builder.js +19 -3
- package/dist/dict/en.d.ts +15 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +2 -1
- package/dist/dict/ko.d.ts +15 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +2 -1
- package/dist/dict/rc-keys.d.ts +28 -0
- package/dist/dict/rc-keys.d.ts.map +1 -1
- package/dist/dict/rc-keys.js +31 -1
- package/dist/dict/sd.d.ts.map +1 -1
- package/dist/dict/sd.js +20 -4
- package/dist/entity/entity-manager.d.ts +298 -2
- package/dist/entity/entity-manager.d.ts.map +1 -1
- package/dist/entity/entity-manager.js +4 -1
- package/dist/entity/entity-template-cone.d.ts +14 -0
- package/dist/entity/entity-template-cone.d.ts.map +1 -0
- package/dist/entity/entity-template-cone.js +222 -0
- package/dist/entity/entity.d.ts +47 -2
- package/dist/entity/entity.d.ts.map +1 -1
- package/dist/entity/entity.js +161 -14
- package/dist/ssr/renderer.js +3 -3
- package/dist/syncer/api-parser.js +12 -1
- package/dist/syncer/checksum.d.ts +0 -14
- package/dist/syncer/checksum.d.ts.map +1 -1
- package/dist/syncer/checksum.js +1 -23
- package/dist/syncer/syncer-actions.d.ts.map +1 -1
- package/dist/syncer/syncer-actions.js +8 -2
- package/dist/syncer/syncer.d.ts +1 -1
- package/dist/syncer/syncer.d.ts.map +1 -1
- package/dist/syncer/syncer.js +17 -10
- package/dist/tasks/workflow-manager.d.ts +13 -1
- package/dist/tasks/workflow-manager.d.ts.map +1 -1
- package/dist/tasks/workflow-manager.js +18 -1
- package/dist/template/entity-converter.js +4 -4
- package/dist/template/helpers.d.ts +10 -0
- package/dist/template/helpers.d.ts.map +1 -1
- package/dist/template/helpers.js +48 -1
- package/dist/template/implementations/entry-server.template.d.ts +1 -1
- package/dist/template/implementations/entry-server.template.js +7 -2
- package/dist/template/implementations/generated.template.d.ts.map +1 -1
- package/dist/template/implementations/generated.template.js +5 -1
- package/dist/template/implementations/generated_http.template.d.ts +1 -0
- package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_http.template.js +6 -2
- package/dist/template/implementations/generated_sso.template.d.ts.map +1 -1
- package/dist/template/implementations/generated_sso.template.js +29 -8
- package/dist/template/implementations/queries.template.d.ts.map +1 -1
- package/dist/template/implementations/queries.template.js +9 -1
- package/dist/template/implementations/sd.template.d.ts +1 -1
- package/dist/template/implementations/sd.template.d.ts.map +1 -1
- package/dist/template/implementations/sd.template.js +28 -4
- package/dist/template/implementations/services.template.d.ts.map +1 -1
- package/dist/template/implementations/services.template.js +12 -12
- package/dist/template/implementations/view_form.template.d.ts +11 -7
- package/dist/template/implementations/view_form.template.d.ts.map +1 -1
- package/dist/template/implementations/view_form.template.js +97 -87
- package/dist/template/implementations/view_list.template.d.ts +3 -3
- package/dist/template/implementations/view_list.template.d.ts.map +1 -1
- package/dist/template/implementations/view_list.template.js +115 -109
- package/dist/template/implementations/view_search_input.template.d.ts.map +1 -1
- package/dist/template/implementations/view_search_input.template.js +18 -14
- package/dist/template/zod-converter.d.ts.map +1 -1
- package/dist/template/zod-converter.js +95 -7
- package/dist/testing/_relation-graph.js +1 -1
- package/dist/testing/data-explorer.d.ts +61 -0
- package/dist/testing/data-explorer.d.ts.map +1 -0
- package/dist/testing/data-explorer.js +274 -0
- package/dist/testing/faker-mappings.d.ts +20 -0
- package/dist/testing/faker-mappings.d.ts.map +1 -0
- package/dist/testing/faker-mappings.js +421 -0
- package/dist/testing/fixture-generator.d.ts +161 -0
- package/dist/testing/fixture-generator.d.ts.map +1 -0
- package/dist/testing/fixture-generator.js +954 -0
- package/dist/testing/fixture-manager.d.ts +6 -1
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +72 -4
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +4 -1
- package/dist/types/types.d.ts +1520 -26
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/types.js +136 -22
- package/dist/ui/ai-client.d.ts.map +1 -1
- package/dist/ui/ai-client.js +9 -4
- package/dist/ui/api.d.ts.map +1 -1
- package/dist/ui/api.js +303 -24
- package/dist/ui-web/assets/index-CsUr-_pV.js +254 -0
- package/dist/ui-web/assets/index-T42zzs1K.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/fs-utils.d.ts +2 -1
- package/dist/utils/fs-utils.d.ts.map +1 -1
- package/dist/utils/fs-utils.js +14 -3
- package/package.json +19 -11
- package/src/api/config.ts +12 -1
- package/src/api/sonamu.ts +179 -65
- package/src/auth/plugins/entity-definitions/anonymous.ts +17 -0
- package/src/auth/plugins/entity-definitions/api-key.ts +93 -0
- package/src/auth/plugins/entity-definitions/index.ts +18 -0
- package/src/auth/plugins/entity-definitions/jwt.ts +35 -0
- package/src/auth/plugins/entity-definitions/organization.ts +215 -0
- package/src/auth/plugins/entity-definitions/passkey.ts +64 -0
- package/src/auth/plugins/entity-definitions/sso.ts +62 -0
- package/src/auth/plugins/entity-definitions/types.ts +11 -1
- package/src/auth/plugins/wrappers/admin.ts +1 -3
- package/src/auth/plugins/wrappers/anonymous.ts +30 -0
- package/src/auth/plugins/wrappers/api-key.ts +42 -0
- package/src/auth/plugins/wrappers/index.ts +6 -0
- package/src/auth/plugins/wrappers/jwt.ts +34 -0
- package/src/auth/plugins/wrappers/organization.ts +73 -0
- package/src/auth/plugins/wrappers/passkey.ts +36 -0
- package/src/auth/plugins/wrappers/phone-number.ts +1 -3
- package/src/auth/plugins/wrappers/sso.ts +40 -0
- package/src/auth/plugins/wrappers/two-factor.ts +1 -3
- package/src/auth/plugins/wrappers/username.ts +1 -3
- package/src/bin/build-config.ts +6 -6
- package/src/bin/cli.ts +452 -31
- package/src/bin/fixture.ts +302 -0
- package/src/cache/decorator.ts +4 -3
- package/src/cone/cone-generator.ts +363 -0
- package/src/database/_batch_update.ts +11 -0
- package/src/database/puri-subset.test-d.ts +13 -13
- package/src/database/puri-subset.types.ts +1 -1
- package/src/database/puri.ts +43 -1
- package/src/database/upsert-builder.ts +16 -2
- package/src/dict/en.ts +1 -0
- package/src/dict/ko.ts +1 -0
- package/src/dict/rc-keys.ts +32 -0
- package/src/dict/sd.ts +23 -3
- package/src/entity/entity-manager.ts +4 -0
- package/src/entity/entity-template-cone.ts +298 -0
- package/src/entity/entity.ts +189 -13
- package/src/shared/app.shared.ts.txt +5 -0
- package/src/shared/web.shared.ts.txt +9 -5
- package/src/skills/project/README.md +21 -0
- package/src/skills/project/architecture.md +373 -0
- package/src/skills/project/business-logic.md +270 -0
- package/src/skills/project/requirements.md +160 -0
- package/src/skills/sonamu/SKILL.md +168 -3
- package/src/skills/sonamu/api.md +102 -0
- package/src/skills/sonamu/database.md +220 -1
- package/src/skills/sonamu/entity-relations.md +89 -1
- package/src/skills/sonamu/fixture-cli.md +501 -0
- package/src/skills/sonamu/frontend.md +214 -0
- package/src/skills/sonamu/i18n.md +95 -0
- package/src/skills/sonamu/model.md +153 -0
- package/src/skills/sonamu/project-init.md +178 -8
- package/src/skills/sonamu/scaffolding.md +112 -0
- package/src/skills/sonamu/subset.md +9 -3
- package/src/skills/sonamu/testing.md +287 -2
- package/src/skills/sonamu/workflow.md +70 -5
- package/src/ssr/renderer.ts +2 -2
- package/src/syncer/api-parser.ts +12 -0
- package/src/syncer/checksum.ts +0 -38
- package/src/syncer/syncer-actions.ts +7 -1
- package/src/syncer/syncer.ts +16 -5
- package/src/tasks/workflow-manager.ts +29 -8
- package/src/template/entity-converter.ts +3 -3
- package/src/template/helpers.ts +49 -0
- package/src/template/implementations/entry-server.template.ts +1 -1
- package/src/template/implementations/generated.template.ts +4 -0
- package/src/template/implementations/generated_http.template.ts +1 -0
- package/src/template/implementations/generated_sso.template.ts +40 -11
- package/src/template/implementations/queries.template.ts +8 -0
- package/src/template/implementations/sd.template.ts +22 -3
- package/src/template/implementations/services.template.ts +11 -10
- package/src/template/implementations/view_form.template.ts +111 -101
- package/src/template/implementations/view_list.template.ts +120 -119
- package/src/template/implementations/view_search_input.template.ts +17 -13
- package/src/template/zod-converter.ts +103 -6
- package/src/testing/_relation-graph.ts +1 -1
- package/src/testing/data-explorer.ts +427 -0
- package/src/testing/faker-mappings.ts +434 -0
- package/src/testing/fixture-generator.ts +1166 -0
- package/src/testing/fixture-manager.ts +91 -6
- package/src/testing/index.ts +3 -0
- package/src/types/types.ts +222 -26
- package/src/ui/ai-client.ts +9 -1
- package/src/ui/api.ts +429 -23
- package/src/utils/fs-utils.ts +14 -1
- package/dist/template/implementations/view_enums_select.template.d.ts +0 -17
- package/dist/template/implementations/view_enums_select.template.d.ts.map +0 -1
- package/dist/template/implementations/view_enums_select.template.js +0 -62
- package/dist/template/implementations/view_id_async_select.template.d.ts +0 -17
- package/dist/template/implementations/view_id_async_select.template.d.ts.map +0 -1
- package/dist/template/implementations/view_id_async_select.template.js +0 -125
- package/dist/ui-web/assets/index-Bd_2AkLb.css +0 -1
- package/dist/ui-web/assets/index-BpSbhQWo.js +0 -225
- package/src/template/implementations/view_enums_select.template.ts +0 -65
- package/src/template/implementations/view_id_async_select.template.ts +0 -139
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import inflection from "inflection";
|
|
2
1
|
import { unique } from "radashi";
|
|
3
2
|
import { z } from "zod";
|
|
4
3
|
import { EntityManager } from "../../entity/entity-manager.js";
|
|
5
|
-
import { getEnumInfoFromColName, getRelationPropFromColName } from "../helpers.js";
|
|
4
|
+
import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropFromColName } from "../helpers.js";
|
|
6
5
|
import { Template } from "../template.js";
|
|
7
6
|
export class Template__view_form extends Template {
|
|
8
7
|
constructor(){
|
|
@@ -35,25 +34,40 @@ export class Template__view_form extends Template {
|
|
|
35
34
|
}
|
|
36
35
|
renderColumnImport(entityId, col) {
|
|
37
36
|
if (col.renderType === "enums") {
|
|
38
|
-
const { id
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
37
|
+
const { id } = getEnumInfoFromColName(entityId, col.name);
|
|
38
|
+
return {
|
|
39
|
+
type: "enum",
|
|
40
|
+
enumId: id
|
|
41
|
+
};
|
|
42
|
+
} else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
|
|
42
43
|
try {
|
|
43
44
|
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
return {
|
|
46
|
+
type: "fk",
|
|
47
|
+
entityId: relProp.with
|
|
48
|
+
};
|
|
49
|
+
} catch {
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
} else if (col.renderType === "array" && col.name.endsWith("_ids")) {
|
|
53
|
+
// ManyToMany relation의 FK 배열
|
|
54
|
+
try {
|
|
55
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
56
|
+
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
57
|
+
return {
|
|
58
|
+
type: "fk",
|
|
59
|
+
entityId: relProp.with
|
|
60
|
+
};
|
|
47
61
|
} catch {
|
|
48
|
-
return
|
|
62
|
+
return null;
|
|
49
63
|
}
|
|
50
|
-
} else {
|
|
51
|
-
throw new Error(`렌더 불가능한 임포트 ${col.name} ${col.renderType}`);
|
|
52
64
|
}
|
|
65
|
+
return null;
|
|
53
66
|
}
|
|
54
|
-
renderColumn(entityId, col
|
|
67
|
+
renderColumn(entityId, col) {
|
|
55
68
|
const regExpr = `{...register("${col.name}")}`;
|
|
56
|
-
const
|
|
69
|
+
const placeholderName = getRelationNameFromColumnName(entityId, col.name);
|
|
70
|
+
const placeholder = `{SD("entity.${entityId}.${placeholderName}")}`;
|
|
57
71
|
switch(col.renderType){
|
|
58
72
|
case "string-plain":
|
|
59
73
|
if (col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) <= 256) {
|
|
@@ -67,6 +81,7 @@ export class Template__view_form extends Template {
|
|
|
67
81
|
${regExpr}
|
|
68
82
|
/>`;
|
|
69
83
|
case "number-id":
|
|
84
|
+
case "string-id":
|
|
70
85
|
return `<input type="hidden" ${regExpr} />`;
|
|
71
86
|
case "number-plain":
|
|
72
87
|
return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
|
|
@@ -90,26 +105,44 @@ export class Template__view_form extends Template {
|
|
|
90
105
|
/>`;
|
|
91
106
|
case "enums":
|
|
92
107
|
try {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
}
|
|
100
|
-
return `<${enumId} ${regExpr} ${col.optional || col.nullable ? "clearable" : ""} />`;
|
|
108
|
+
const { id } = getEnumInfoFromColName(entityId, col.name);
|
|
109
|
+
return `<EnumSelect
|
|
110
|
+
enum={${id}}
|
|
111
|
+
labels={${id}Label}
|
|
112
|
+
${regExpr}
|
|
113
|
+
/>`;
|
|
101
114
|
} catch {
|
|
102
115
|
return `<Input className="h-8 text-xs bg-white" ${regExpr} />`;
|
|
103
116
|
}
|
|
104
117
|
case "number-fk_id":
|
|
118
|
+
case "string-fk_id":
|
|
105
119
|
try {
|
|
106
120
|
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
107
|
-
|
|
108
|
-
|
|
121
|
+
return `<IdAsyncSelect
|
|
122
|
+
config={${relProp.with}AsyncIdConfig}
|
|
123
|
+
subset="A"
|
|
124
|
+
${regExpr}
|
|
125
|
+
/>`;
|
|
109
126
|
} catch {
|
|
110
127
|
return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
|
|
111
128
|
}
|
|
112
129
|
case "array":
|
|
130
|
+
// ManyToMany relation의 FK 배열인지 확인
|
|
131
|
+
if (col.name.endsWith("_ids")) {
|
|
132
|
+
try {
|
|
133
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
134
|
+
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
135
|
+
return `<IdAsyncSelect
|
|
136
|
+
config={${relProp.with}AsyncIdConfig}
|
|
137
|
+
subset="A"
|
|
138
|
+
multiple
|
|
139
|
+
${regExpr}
|
|
140
|
+
/>`;
|
|
141
|
+
} catch {
|
|
142
|
+
return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
113
146
|
case "object":
|
|
114
147
|
return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
115
148
|
default:
|
|
@@ -170,58 +203,34 @@ export class Template__view_form extends Template {
|
|
|
170
203
|
return col;
|
|
171
204
|
});
|
|
172
205
|
const defaultValue = this.resolveDefaultValue(columns);
|
|
173
|
-
//
|
|
174
|
-
const
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
206
|
+
// enum과 FK에 대한 import 정보 수집
|
|
207
|
+
const enumImports = new Set();
|
|
208
|
+
const fkConfigImports = new Set();
|
|
209
|
+
columns.forEach((col)=>{
|
|
210
|
+
if (col.renderType === "enums") {
|
|
178
211
|
try {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
} catch {
|
|
182
|
-
|
|
183
|
-
}
|
|
184
|
-
} else if (col.renderType === "enums") {
|
|
212
|
+
const { id } = getEnumInfoFromColName(entityId, col.name);
|
|
213
|
+
enumImports.add(id);
|
|
214
|
+
} catch {}
|
|
215
|
+
} else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
|
|
185
216
|
try {
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
} catch {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
return false;
|
|
193
|
-
}).map((col)=>{
|
|
194
|
-
let key;
|
|
195
|
-
let targetMdId = entityId;
|
|
196
|
-
let enumId;
|
|
197
|
-
if (col.renderType === "enums") {
|
|
198
|
-
key = "view_enums_select";
|
|
199
|
-
const { targetEntityNames: targetMDNames, id } = getEnumInfoFromColName(entityId, col.name);
|
|
200
|
-
targetMdId = targetMDNames.capital;
|
|
201
|
-
enumId = id;
|
|
202
|
-
} else {
|
|
203
|
-
key = "view_id_async_select";
|
|
204
|
-
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
205
|
-
targetMdId = relProp.with;
|
|
206
|
-
}
|
|
207
|
-
return {
|
|
208
|
-
key: key,
|
|
209
|
-
options: {
|
|
210
|
-
entityId: targetMdId,
|
|
211
|
-
node: col,
|
|
212
|
-
enumId
|
|
213
|
-
}
|
|
214
|
-
};
|
|
215
|
-
}).filter((preTemplate)=>{
|
|
216
|
-
if (preTemplate.key === "view_id_async_select") {
|
|
217
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
218
|
+
fkConfigImports.add(relProp.with);
|
|
219
|
+
} catch {}
|
|
220
|
+
} else if (col.renderType === "string-plain" && col.name.endsWith("_id") && col.name !== "id") {
|
|
221
|
+
// string FK 처리 (자신의 PK인 id는 제외)
|
|
217
222
|
try {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
} catch {
|
|
221
|
-
|
|
222
|
-
|
|
223
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
224
|
+
fkConfigImports.add(relProp.with);
|
|
225
|
+
} catch {}
|
|
226
|
+
} else if (col.renderType === "array" && col.name.endsWith("_ids")) {
|
|
227
|
+
// ManyToMany relation의 FK 배열
|
|
228
|
+
try {
|
|
229
|
+
const baseName = col.name.replace(/_ids$/, "");
|
|
230
|
+
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
231
|
+
fkConfigImports.add(relProp.with);
|
|
232
|
+
} catch {}
|
|
223
233
|
}
|
|
224
|
-
return true;
|
|
225
234
|
});
|
|
226
235
|
return {
|
|
227
236
|
...this.getTargetAndPath(names),
|
|
@@ -232,7 +241,7 @@ import {
|
|
|
232
241
|
CardContent,
|
|
233
242
|
CardHeader,
|
|
234
243
|
CardTitle,
|
|
235
|
-
Input,${columns.some((col)=>col.renderType === "string-plain" && col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) > 256) ? "\n Textarea," : ""}${columns.some((col)=>col.renderType === "enums") ? "\n
|
|
244
|
+
Input,${columns.some((col)=>col.renderType === "string-plain" && col.zodType instanceof z.ZodString && (col.zodType.maxLength ?? 0) > 256) ? "\n Textarea," : ""}${columns.some((col)=>col.renderType === "enums") ? "\n EnumSelect," : ""}${columns.some((col)=>col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")) ? "\n IdAsyncSelect," : ""}${columns.some((col)=>col.renderType === "boolean") ? "\n Switch," : ""}${columns.some((col)=>[
|
|
236
245
|
"json-sonamufile",
|
|
237
246
|
"json-sonamufile-array"
|
|
238
247
|
].includes(col.renderType)) ? "\n FileInput," : ""}${columns.some((col)=>[
|
|
@@ -256,13 +265,7 @@ import type { ${names.capital}SubsetA } from "@/services/sonamu.generated";${col
|
|
|
256
265
|
}
|
|
257
266
|
})).filter(Boolean).join(", ") + ' } from "@/services/sonamu.generated";' : ""}
|
|
258
267
|
import { defaultCatch } from "@/services/sonamu.shared";
|
|
259
|
-
import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types"
|
|
260
|
-
${unique(columns.filter((col)=>[
|
|
261
|
-
"number-fk_id",
|
|
262
|
-
"enums"
|
|
263
|
-
].includes(col.renderType)).map((col)=>{
|
|
264
|
-
return this.renderColumnImport(entityId, col);
|
|
265
|
-
})).join("\n")}
|
|
268
|
+
import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";${fkConfigImports.size > 0 ? `\nimport { ${Array.from(fkConfigImports).map((entity)=>`${entity}AsyncIdConfig`).join(", ")} } from "@/services/services.generated";` : ""}
|
|
266
269
|
import { SD } from "@/i18n/sd.generated";
|
|
267
270
|
|
|
268
271
|
import ArrowLeftIcon from "~icons/lucide/arrow-left";
|
|
@@ -340,8 +343,15 @@ ${(()=>{
|
|
|
340
343
|
...prevForm,
|
|
341
344
|
...row,${(()=>{
|
|
342
345
|
// relation 필드들을 찾아서 변환 코드 생성
|
|
343
|
-
|
|
344
|
-
|
|
346
|
+
// number FK, string FK (자신의 PK 제외), ManyToMany FK 배열만 필터링
|
|
347
|
+
const relationFields = columns.filter((col)=>col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")).map((col)=>{
|
|
348
|
+
// ManyToMany(array) 처리
|
|
349
|
+
if (col.renderType === "array" && col.name.endsWith("_ids")) {
|
|
350
|
+
const relationName = getRelationNameFromColumnName(entityId, col.name);
|
|
351
|
+
return `\n ${col.name}: row.${relationName}?.map((r) => r.id) ?? [],`;
|
|
352
|
+
}
|
|
353
|
+
// FK(number, string) 처리
|
|
354
|
+
const relationName = getRelationNameFromColumnName(entityId, col.name);
|
|
345
355
|
if (col.nullable) {
|
|
346
356
|
return `\n ${col.name}: row.${relationName}?.id ?? null,`;
|
|
347
357
|
} else {
|
|
@@ -443,10 +453,11 @@ ${columns.filter((col)=>col.name !== "created_at").map((col)=>{
|
|
|
443
453
|
}
|
|
444
454
|
return col.label;
|
|
445
455
|
})();
|
|
456
|
+
const labelName = getRelationNameFromColumnName(entityId, col.name);
|
|
446
457
|
return ` {/* ${label} */}
|
|
447
458
|
<div className="space-y-2">
|
|
448
|
-
<label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${
|
|
449
|
-
${this.renderColumn(entityId, col
|
|
459
|
+
<label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${labelName}")}</label>
|
|
460
|
+
${this.renderColumn(entityId, col)}
|
|
450
461
|
</div>`;
|
|
451
462
|
}).join("\n\n")}
|
|
452
463
|
|
|
@@ -476,10 +487,9 @@ ${columns.filter((col)=>col.name !== "created_at").map((col)=>{
|
|
|
476
487
|
);
|
|
477
488
|
}
|
|
478
489
|
`.trim(),
|
|
479
|
-
importKeys: []
|
|
480
|
-
preTemplates
|
|
490
|
+
importKeys: []
|
|
481
491
|
};
|
|
482
492
|
}
|
|
483
493
|
}
|
|
484
494
|
|
|
485
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRFbnRpdHlOYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIDriqXtlZwg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZztcbiAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSB7XG4gICAgICAgICAgICBlbnVtSWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgZW51bUlkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGA8JHtlbnVtSWR9ICR7cmVnRXhwcn0gJHtjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJ9IC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHN1YnNldD1cIkFcIiAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzXCIgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9ICgoc2F2ZVBhcmFtc05vZGU/LmNoaWxkcmVuID8/IFtdKSBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIO2UhOumrCDthZztlIzrpr9cbiAgICBjb25zdCBwcmVUZW1wbGF0ZXM6IFJlbmRlcmVkVGVtcGxhdGVbXCJwcmVUZW1wbGF0ZXNcIl0gPSAoY29sdW1ucyBhcyBSZW5kZXJpbmdOb2RlW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5uYW1lID09PSBcImlkXCIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgfHwgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWlkXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgbGV0IGtleTogVGVtcGxhdGVLZXk7XG4gICAgICAgIGxldCB0YXJnZXRNZElkID0gZW50aXR5SWQ7XG4gICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfZW51bXNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgeyB0YXJnZXRFbnRpdHlOYW1lczogdGFyZ2V0TUROYW1lcywgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoXG4gICAgICAgICAgICBlbnRpdHlJZCxcbiAgICAgICAgICAgIGNvbC5uYW1lLFxuICAgICAgICAgICk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHRhcmdldE1ETmFtZXMuY2FwaXRhbDtcbiAgICAgICAgICBlbnVtSWQgPSBpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBrZXkgPSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCI7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICB0YXJnZXRNZElkID0gcmVsUHJvcC53aXRoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBrZXk6IGtleSBhcyBUZW1wbGF0ZUtleSxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBlbnRpdHlJZDogdGFyZ2V0TWRJZCxcbiAgICAgICAgICAgIG5vZGU6IGNvbCxcbiAgICAgICAgICAgIGVudW1JZCxcbiAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICAgIC5maWx0ZXIoKHByZVRlbXBsYXRlKSA9PiB7XG4gICAgICAgIGlmIChwcmVUZW1wbGF0ZS5rZXkgPT09IFwidmlld19pZF9hc3luY19zZWxlY3RcIikge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBFbnRpdHlNYW5hZ2VyLmdldChwcmVUZW1wbGF0ZS5vcHRpb25zLmVudGl0eUlkKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIElucHV0LCR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmIGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA+IDI1NikgPyBcIlxcbiAgVGV4dGFyZWEsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpID8gXCJcXG4gIFNlbGVjdCxcXG4gIFNlbGVjdENvbnRlbnQsXFxuICBTZWxlY3RJdGVtLFxcbiAgU2VsZWN0VHJpZ2dlcixcXG4gIFNlbGVjdFZhbHVlLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJib29sZWFuXCIpID8gXCJcXG4gIFN3aXRjaCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRmlsZUlucHV0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJzdHJpbmctZGF0ZXRpbWVcIiwgXCJzdHJpbmctZGF0ZVwiLCBcImRhdGV0aW1lXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRGF0ZUlucHV0LFwiIDogXCJcIn1cbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlVHlwZUZvcm0gfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9saWJcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVJvdXRlLCB1c2VSb3V0ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB0eXBlIHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7JHtcbiAgICAgICAgY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikubGVuZ3RoID4gMFxuICAgICAgICAgID8gXCJcXG5pbXBvcnQgeyBcIiArXG4gICAgICAgICAgICB1bmlxdWUoXG4gICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpZH0sICR7aWR9TGFiZWxgO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgJyB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjsnXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBkZWZhdWx0Q2F0Y2ggfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7XG4ke3VuaXF1ZShcbiAgY29sdW1uc1xuICAgIC5maWx0ZXIoKGNvbCkgPT4gW1wibnVtYmVyLWZrX2lkXCIsIFwiZW51bXNcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKVxuICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkLCBjb2wpO1xuICAgIH0pLFxuKS5qb2luKFwiXFxuXCIpfVxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiQC9pMThuL3NkLmdlbmVyYXRlZFwiO1xuXG5pbXBvcnQgQXJyb3dMZWZ0SWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9hcnJvdy1sZWZ0XCI7XG5pbXBvcnQgU2F2ZUljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc2F2ZVwiO1xuaW1wb3J0IEZvcm1JY29uIGZyb20gXCJ+aWNvbnMvbWRpL2Zvcm0tc2VsZWN0XCI7XG5cbmNvbnN0IGZvcm1TZWFyY2hTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiAke2lkWm9kVHlwZX0sXG59KTtcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlRmlsZVJvdXRlKFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9L2Zvcm1cIikoe1xuICB2YWxpZGF0ZVNlYXJjaDogZm9ybVNlYXJjaFNjaGVtYSxcbiAgY29tcG9uZW50OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UsXG59KTtcblxuZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlKCkge1xuICBjb25zdCB7IGlkIH0gPSBSb3V0ZS51c2VTZWFyY2goKTtcbiAgcmV0dXJuIDwke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSBpZD17aWR9IC8+O1xufVxuXG50eXBlICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMgPSB7XG4gIGlkPzogJHtpZFRzVHlwZX07XG4gIG1vZGU/OiBcInBhZ2VcIiB8IFwibW9kYWxcIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSh7IGlkLCBtb2RlIH06ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IGZvcm0sIHNldEZvcm0sIHJlZ2lzdGVyJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIiwgc3VibWl0XCIgOiBcIlwifSB9ID0gdXNlVHlwZUZvcm0oJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdFZhbHVlKS5yZXBsYWNlKC9cIm5vd1xcKFxcKVwiL2csICdcIlwiJyl9KTtcbiR7KCgpID0+IHtcbiAgY29uc3QgaGFzRGF0ZXRpbWUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpO1xuICBjb25zdCBoYXNEYXRlID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRlXCIpO1xuICBpZiAoIWhhc0RhdGV0aW1lICYmICFoYXNEYXRlKSByZXR1cm4gXCJcIjtcblxuICBsZXQgaGVscGVycyA9IFwiXFxuXCI7XG4gIGlmIChoYXNEYXRldGltZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZXRpbWUtbG9jYWwg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERFRISDpNTSlcbiAgY29uc3QgdG9EYXRldGltZUxvY2FsU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KTtcbiAgfTtcblxuICAvLyBkYXRldGltZS1sb2NhbCDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGV0aW1lTG9jYWxTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICBpZiAoaGFzRGF0ZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZSDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREKVxuICBjb25zdCB0b0RhdGVTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xuICB9O1xuXG4gIC8vIGRhdGUg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRlU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgcmV0dXJuIGhlbHBlcnM7XG59KSgpfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZCkge1xuICAgICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZ2V0JHtuYW1lcy5jYXBpdGFsfShcIkFcIiwgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRGb3JtKChwcmV2Rm9ybSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2Rm9ybSxcbiAgICAgICAgICAuLi5yb3csJHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVsYXRpb24g7ZWE65Oc65Ok7J2EIOywvuyVhOyEnCDrs4DtmZgg7L2U65OcIOyDneyEsVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25GaWVsZHMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZCQvLCBcIlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQgPz8gbnVsbCxgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQsYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uRmllbGRzO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lkLCBzZXRGb3JtXSk7XG5cbiAgY29uc3Qgc2F2ZU11dGF0aW9uID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlU2F2ZU11dGF0aW9uKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICR7XG4gICAgY29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpXG4gICAgICA/IGBzdWJtaXQoYXN5bmMgKGZvcm0pID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH0pYFxuICAgICAgOiBgKCkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfWBcbiAgfTtcblxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBpZCA/IFNEKFwiZW50aXR5LmVkaXRcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIiksIGlkKSA6IFNEKFwiZW50aXR5LmNyZWF0ZVwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSksXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LVsxODAwcHhdIG14LWF1dG8gcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02IG1iLThcIj5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxGb3JtSWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIGgtNVwiPntQQUdFLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge21vZGUgIT09IFwibW9kYWxcIiAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSl9XG4gICAgICAgICAgICAgICAgaWNvbj17PEFycm93TGVmdEljb24gLz59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uYmFja1RvTGlzdFwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEZvcm0gQ2FyZCAqL31cbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyLzQwIGJnLWdyYXktNTAgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJweC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIG0tMFwiPlxuICAgICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgIDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiR7Y29sdW1uc1xuICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImNyZWF0ZWRfYXRcIilcbiAgLm1hcCgoY29sKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSAoKCkgPT4ge1xuICAgICAgaWYgKGNvbC5sYWJlbC5lbmRzV2l0aChcIklkXCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS50aXRsZSA/PyBjb2wubGFiZWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2NvbC5uYW1lfVwiKX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sLCBuYW1lcyl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgICBwcmVUZW1wbGF0ZXMsXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluZmxlY3Rpb24iLCJ1bmlxdWUiLCJ6IiwiRW50aXR5TWFuYWdlciIsImdldEVudW1JbmZvRnJvbUNvbE5hbWUiLCJnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSIsIlRlbXBsYXRlIiwiVGVtcGxhdGVfX3ZpZXdfZm9ybSIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmc1BsdXJhbCIsImdldFJlcXVpcmVkRGljdEtleXMiLCJ3cmFwRkMiLCJib2R5IiwibGFiZWwiLCJqb2luIiwid3JhcEZHIiwicmVuZGVyQ29sdW1uSW1wb3J0IiwiZW50aXR5SWQiLCJjb2wiLCJyZW5kZXJUeXBlIiwiaWQiLCJ0YXJnZXRFbnRpdHlOYW1lcyIsIm5hbWUiLCJjb21wb25lbnRJZCIsImZzIiwicmVsUHJvcCIsInJlcGxhY2UiLCJ0YXJnZXROYW1lcyIsImdldE5hbWVzRnJvbUlkIiwid2l0aCIsIkVycm9yIiwicmVuZGVyQ29sdW1uIiwicmVnRXhwciIsInBsYWNlaG9sZGVyIiwiem9kVHlwZSIsIlpvZFN0cmluZyIsIm1heExlbmd0aCIsImVudW1JZCIsImNhcGl0YWwiLCJjYW1lbGl6ZSIsIm9wdGlvbmFsIiwibnVsbGFibGUiLCJma0lkIiwicmVzb2x2ZURlZmF1bHRWYWx1ZSIsImNvbHVtbnMiLCJyZWR1Y2UiLCJyZXN1bHQiLCJ2YWx1ZSIsIlpvZE51bWJlciIsIlpvZEVudW0iLCJPYmplY3QiLCJrZXlzIiwiZW51bSIsIlpvZEJvb2xlYW4iLCJjb3JlIiwiJFpvZFN0cmluZyIsIlpvZEFycmF5IiwiWm9kT2JqZWN0IiwicmVuZGVyIiwiZW50aXR5IiwiZ2V0IiwicGtUeXBlIiwiZ2V0UGtUeXBlIiwiaWRUc1R5cGUiLCJpZFpvZFR5cGUiLCJsb2FkVHlwZXMiLCJsb2FkZWRUeXBlcyIsIlNhdmVQYXJhbXNab2RUeXBlIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInNhdmVQYXJhbXNOb2RlIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJwcmVUZW1wbGF0ZXMiLCJlbmRzV2l0aCIsImtleSIsInRhcmdldE1kSWQiLCJ0YXJnZXRNRE5hbWVzIiwib3B0aW9ucyIsIm5vZGUiLCJwcmVUZW1wbGF0ZSIsInNvbWUiLCJpbmNsdWRlcyIsImxlbmd0aCIsIkJvb2xlYW4iLCJjYXBpdGFsUGx1cmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc0RhdGV0aW1lIiwiaGFzRGF0ZSIsImhlbHBlcnMiLCJyZWxhdGlvbkZpZWxkcyIsInJlbGF0aW9uTmFtZSIsInRpdGxlIiwidHJpbSIs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
|
|
495
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyaW5nTm9kZSwgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQge1xuICBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lLFxuICBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZSxcbiAgZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUsXG59IGZyb20gXCIuLi9oZWxwZXJzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfZm9ybSBleHRlbmRzIFRlbXBsYXRlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJ2aWV3X2Zvcm1cIik7XG4gIH1cblxuICBnZXRUYXJnZXRBbmRQYXRoKG5hbWVzOiBFbnRpdHlOYW1lc1JlY29yZCkge1xuICAgIHJldHVybiB7XG4gICAgICB0YXJnZXQ6IFwid2ViL3NyYy9yb3V0ZXMvYWRtaW5cIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzUGx1cmFsfS9mb3JtLnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIG92ZXJyaWRlIGdldFJlcXVpcmVkRGljdEtleXMoKTogc3RyaW5nW10gfCBudWxsIHtcbiAgICByZXR1cm4gW1wiZW50aXR5LmNyZWF0ZVwiLCBcImVudGl0eS5lZGl0XCIsIFwiY29tbW9uLmJhY2tUb0xpc3RcIiwgXCJmb3JtLmNyZWF0ZWRBdFwiLCBcImNvbW1vbi5zYXZlXCJdO1xuICB9XG5cbiAgd3JhcEZDKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBbXG4gICAgICBgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj4ke2xhYmVsID8gYFxcbiAgPExhYmVsPiR7bGFiZWx9PC9MYWJlbD5gIDogXCJcIn1gLFxuICAgICAgYCAgJHtib2R5fWAsXG4gICAgICBgPC9kaXY+YCxcbiAgICBdLmpvaW4oXCJcXG5cIik7XG4gIH1cbiAgd3JhcEZHKGJvZHk6IHN0cmluZywgbGFiZWw/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLndyYXBGQyhib2R5LCBsYWJlbCk7XG4gIH1cblxuICByZW5kZXJDb2x1bW5JbXBvcnQoZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKSB7XG4gICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgIHJldHVybiB7IHR5cGU6IFwiZW51bVwiIGFzIGNvbnN0LCBlbnVtSWQ6IGlkIH07XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbihlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpOiBzdHJpbmcge1xuICAgIGNvbnN0IHJlZ0V4cHIgPSBgey4uLnJlZ2lzdGVyKFwiJHtjb2wubmFtZX1cIil9YDtcbiAgICBjb25zdCBwbGFjZWhvbGRlck5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gYHtTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke3BsYWNlaG9sZGVyTmFtZX1cIil9YDtcblxuICAgIHN3aXRjaCAoY29sLnJlbmRlclR5cGUpIHtcbiAgICAgIGNhc2UgXCJzdHJpbmctcGxhaW5cIjpcbiAgICAgICAgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA8PSAyNTYpIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBgPFRleHRhcmVhIGNsYXNzTmFtZT1cInRleHQteHMgYmctd2hpdGVcIiByb3dzPXs0fSBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImRhdGV0aW1lXCI6XG4gICAgICAgIHJldHVybiBgPERhdGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctaWRcIjpcbiAgICAgICAgcmV0dXJuIGA8aW5wdXQgdHlwZT1cImhpZGRlblwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1wbGFpblwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgIHJldHVybiBgPFN3aXRjaCAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGVcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVzPXsxMH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImVudW1zXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIHJldHVybiBgPEVudW1TZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgZW51bT17JHtpZH19XG4gICAgICAgICAgICAgICAgICAgIGxhYmVscz17JHtpZH1MYWJlbH1cbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwibnVtYmVyLWZrX2lkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWZrX2lkXCI6XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtOyduOyngCDtmZXsnbhcbiAgICAgICAgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgfVxuICB9XG5cbiAgcmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zOiBSZW5kZXJpbmdOb2RlW10pOiBvYmplY3Qge1xuICAgIHJldHVybiBjb2x1bW5zLnJlZHVjZShcbiAgICAgIChyZXN1bHQsIGNvbCkgPT4ge1xuICAgICAgICBpZiAoY29sLm9wdGlvbmFsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgICAgICAgaWYgKGNvbC5udWxsYWJsZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgICAgICAgdmFsdWUgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RFbnVtKSB7XG4gICAgICAgICAgdmFsdWUgPSBPYmplY3Qua2V5cyhjb2wuem9kVHlwZS5lbnVtKVswXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQm9vbGVhbikge1xuICAgICAgICAgIHZhbHVlID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LmNvcmUuJFpvZFN0cmluZykge1xuICAgICAgICAgIC8vIE5PVEU6IHouWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VmOuptCB6LnVybCgpLCB6LmVtYWlsKCkg65Ox7J2YIO2DgOyeheyXkOyEnCDrrLjsoJzqsIAg7IOd6riw66+A66GcIHouY29yZS4kWm9kU3RyaW5n7Jy866GcIOu5hOq1kO2VqFxuICAgICAgICAgIC8vIEZJWE1FOiBlbWFpbOydtOuCmCB1cmwg7YOA7J6FIOuTseyXkCDrjIDtlZwg7LKY66as6rCAIO2VhOyalO2VqFxuICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIikge1xuICAgICAgICAgICAgdmFsdWUgPSBcIm5vdygpXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlID0gXCJcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFycmF5KSB7XG4gICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kT2JqZWN0KSB7XG4gICAgICAgICAgdmFsdWUgPSB7fTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdFtjb2wubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fSBhcyB7IFtrZXk6IHN0cmluZ106IHVua25vd24gfSxcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19mb3JtXCJdKSB7XG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuICAgIGNvbnN0IG5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChlbnRpdHlJZCk7XG5cbiAgICAvLyBQSyDtg4DsnoUg6rCQ7KeAXG4gICAgY29uc3QgcGtUeXBlID0gZW50aXR5LmdldFBrVHlwZSgpO1xuICAgIGNvbnN0IGlkVHNUeXBlID0gcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInN0cmluZ1wiIDogXCJudW1iZXJcIjtcbiAgICBjb25zdCBpZFpvZFR5cGUgPVxuICAgICAgcGtUeXBlID09PSBcInN0cmluZ1wiIHx8IHBrVHlwZSA9PT0gXCJ1dWlkXCIgPyBcInouc3RyaW5nKCkub3B0aW9uYWwoKVwiIDogXCJ6Lm51bWJlcigpLm9wdGlvbmFsKClcIjtcblxuICAgIC8vIFNhdmVQYXJhbXMg7YOA7J6F7J2EIOuhnOuTnO2VmOyXrCBzYXZlUGFyYW1zTm9kZSDsg53shLFcbiAgICBjb25zdCB7IGxvYWRUeXBlcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vc3luY2VyL21vZHVsZS1sb2FkZXJcIik7XG4gICAgY29uc3QgbG9hZGVkVHlwZXMgPSBhd2FpdCBsb2FkVHlwZXMoKTtcbiAgICBjb25zdCBTYXZlUGFyYW1zWm9kVHlwZSA9IGxvYWRlZFR5cGVzW2Ake2VudGl0eUlkfVNhdmVQYXJhbXNgXTtcblxuICAgIGlmICghU2F2ZVBhcmFtc1pvZFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2F2ZVBhcmFtcyBmb3IgJHtlbnRpdHlJZH0gbm90IGZvdW5kLiBEaWQgeW91IHJ1biAnc29uYW11IHN5bmMnP2ApO1xuICAgIH1cblxuICAgIC8vIFpvZCDtg4DsnoXsnYQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZhcbiAgICBjb25zdCB7IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3pvZC1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFNhdmVQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSAoKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSkgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2wubmFtZSk7XG4gICAgICAgIGNvbC5sYWJlbCA9IHByb3BDYW5kaWRhdGU/LmRlc2MgPz8gY29sLmxhYmVsO1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1ucyk7XG5cbiAgICAvLyBlbnVt6rO8IEZL7JeQIOuMgO2VnCBpbXBvcnQg7KCV67O0IOyImOynkVxuICAgIGNvbnN0IGVudW1JbXBvcnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgZmtDb25maWdJbXBvcnRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgZW51bUltcG9ydHMuYWRkKGlkKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJlxuICAgICAgICBjb2wubmFtZS5lbmRzV2l0aChcIl9pZFwiKSAmJlxuICAgICAgICBjb2wubmFtZSAhPT0gXCJpZFwiXG4gICAgICApIHtcbiAgICAgICAgLy8gc3RyaW5nIEZLIOyymOumrCAo7J6Q7Iug7J2YIFBL7J24IGlk64qUIOygnOyZuClcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtFxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBJbnB1dCwke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJiBjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPiAyNTYpID8gXCJcXG4gIFRleHRhcmVhLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSA/IFwiXFxuICBFbnVtU2VsZWN0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fCBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIiB8fCAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpKSA/IFwiXFxuICBJZEFzeW5jU2VsZWN0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJib29sZWFuXCIpID8gXCJcXG4gIFN3aXRjaCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRmlsZUlucHV0LFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJzdHJpbmctZGF0ZXRpbWVcIiwgXCJzdHJpbmctZGF0ZVwiLCBcImRhdGV0aW1lXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIlxcbiAgRGF0ZUlucHV0LFwiIDogXCJcIn1cbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlVHlwZUZvcm0gfSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9saWJcIjtcbmltcG9ydCB7IHVzZVF1ZXJ5Q2xpZW50IH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1xdWVyeVwiO1xuaW1wb3J0IHsgY3JlYXRlRmlsZVJvdXRlLCB1c2VSb3V0ZXIgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXJvdXRlclwiO1xuaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtcbmltcG9ydCB0eXBlIHsgJHtuYW1lcy5jYXBpdGFsfVN1YnNldEEgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7JHtcbiAgICAgICAgY29sdW1ucy5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikubGVuZ3RoID4gMFxuICAgICAgICAgID8gXCJcXG5pbXBvcnQgeyBcIiArXG4gICAgICAgICAgICB1bmlxdWUoXG4gICAgICAgICAgICAgIGNvbHVtbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBgJHtpZH0sICR7aWR9TGFiZWxgO1xuICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIikgK1xuICAgICAgICAgICAgJyB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjsnXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBkZWZhdWx0Q2F0Y2ggfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuc2hhcmVkXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7JHtcbiAgICAgICAgZmtDb25maWdJbXBvcnRzLnNpemUgPiAwXG4gICAgICAgICAgPyBgXFxuaW1wb3J0IHsgJHtBcnJheS5mcm9tKGZrQ29uZmlnSW1wb3J0cylcbiAgICAgICAgICAgICAgLm1hcCgoZW50aXR5KSA9PiBgJHtlbnRpdHl9QXN5bmNJZENvbmZpZ2ApXG4gICAgICAgICAgICAgIC5qb2luKFwiLCBcIil9IH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7YFxuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiQC9pMThuL3NkLmdlbmVyYXRlZFwiO1xuXG5pbXBvcnQgQXJyb3dMZWZ0SWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9hcnJvdy1sZWZ0XCI7XG5pbXBvcnQgU2F2ZUljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvc2F2ZVwiO1xuaW1wb3J0IEZvcm1JY29uIGZyb20gXCJ+aWNvbnMvbWRpL2Zvcm0tc2VsZWN0XCI7XG5cbmNvbnN0IGZvcm1TZWFyY2hTY2hlbWEgPSB6Lm9iamVjdCh7XG4gIGlkOiAke2lkWm9kVHlwZX0sXG59KTtcblxuZXhwb3J0IGNvbnN0IFJvdXRlID0gY3JlYXRlRmlsZVJvdXRlKFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9L2Zvcm1cIikoe1xuICB2YWxpZGF0ZVNlYXJjaDogZm9ybVNlYXJjaFNjaGVtYSxcbiAgY29tcG9uZW50OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UsXG59KTtcblxuZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlKCkge1xuICBjb25zdCB7IGlkIH0gPSBSb3V0ZS51c2VTZWFyY2goKTtcbiAgcmV0dXJuIDwke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSBpZD17aWR9IC8+O1xufVxuXG50eXBlICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMgPSB7XG4gIGlkPzogJHtpZFRzVHlwZX07XG4gIG1vZGU/OiBcInBhZ2VcIiB8IFwibW9kYWxcIjtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybSh7IGlkLCBtb2RlIH06ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUHJvcHMpIHtcbiAgY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKCk7XG4gIGNvbnN0IHF1ZXJ5Q2xpZW50ID0gdXNlUXVlcnlDbGllbnQoKTtcblxuICBjb25zdCB7IGZvcm0sIHNldEZvcm0sIHJlZ2lzdGVyJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSkgPyBcIiwgc3VibWl0XCIgOiBcIlwifSB9ID0gdXNlVHlwZUZvcm0oJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMsICR7SlNPTi5zdHJpbmdpZnkoZGVmYXVsdFZhbHVlKS5yZXBsYWNlKC9cIm5vd1xcKFxcKVwiL2csICdcIlwiJyl9KTtcbiR7KCgpID0+IHtcbiAgY29uc3QgaGFzRGF0ZXRpbWUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpO1xuICBjb25zdCBoYXNEYXRlID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRlXCIpO1xuICBpZiAoIWhhc0RhdGV0aW1lICYmICFoYXNEYXRlKSByZXR1cm4gXCJcIjtcblxuICBsZXQgaGVscGVycyA9IFwiXFxuXCI7XG4gIGlmIChoYXNEYXRldGltZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZXRpbWUtbG9jYWwg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERFRISDpNTSlcbiAgY29uc3QgdG9EYXRldGltZUxvY2FsU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNsaWNlKDAsIDE2KTtcbiAgfTtcblxuICAvLyBkYXRldGltZS1sb2NhbCDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGV0aW1lTG9jYWxTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICBpZiAoaGFzRGF0ZSkge1xuICAgIGhlbHBlcnMgKz0gYCAgLy8gZGF0ZSDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREKVxuICBjb25zdCB0b0RhdGVTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdO1xuICB9O1xuXG4gIC8vIGRhdGUg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRlU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgcmV0dXJuIGhlbHBlcnM7XG59KSgpfVxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpZCkge1xuICAgICAgJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UuZ2V0JHtuYW1lcy5jYXBpdGFsfShcIkFcIiwgaWQpLnRoZW4oKHJvdykgPT4ge1xuICAgICAgICBzZXRGb3JtKChwcmV2Rm9ybSkgPT4gKHtcbiAgICAgICAgICAuLi5wcmV2Rm9ybSxcbiAgICAgICAgICAuLi5yb3csJHsoKCkgPT4ge1xuICAgICAgICAgICAgLy8gcmVsYXRpb24g7ZWE65Oc65Ok7J2EIOywvuyVhOyEnCDrs4DtmZgg7L2U65OcIOyDneyEsVxuICAgICAgICAgICAgLy8gbnVtYmVyIEZLLCBzdHJpbmcgRksgKOyekOyLoOydmCBQSyDsoJzsmbgpLCBNYW55VG9NYW55IEZLIOuwsOyXtOunjCDtlYTthLDrp4FcbiAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uRmllbGRzID0gY29sdW1uc1xuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIChjb2wpID0+XG4gICAgICAgICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIiB8fFxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gTWFueVRvTWFueShhcnJheSkg7LKY66asXG4gICAgICAgICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/Lm1hcCgocikgPT4gci5pZCkgPz8gW10sYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRksobnVtYmVyLCBzdHJpbmcpIOyymOumrFxuICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5udWxsYWJsZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/LmlkID8/IG51bGwsYDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGBcXG4gICAgICAgICAgJHtjb2wubmFtZX06IHJvdy4ke3JlbGF0aW9uTmFtZX0/LmlkLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuam9pbihcIlwiKTtcbiAgICAgICAgICAgIHJldHVybiByZWxhdGlvbkZpZWxkcztcbiAgICAgICAgICB9KSgpfVxuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFtpZCwgc2V0Rm9ybV0pO1xuXG4gIGNvbnN0IHNhdmVNdXRhdGlvbiA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZVNhdmVNdXRhdGlvbigpO1xuICBjb25zdCBoYW5kbGVTdWJtaXQgPSAke1xuICAgIGNvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKVxuICAgICAgPyBgc3VibWl0KGFzeW5jIChmb3JtKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9KWBcbiAgICAgIDogYCgpID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH1gXG4gIH07XG5cbiAgY29uc3QgUEFHRSA9IHtcbiAgICB0aXRsZTogaWQgPyBTRChcImVudGl0eS5lZGl0XCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpLCBpZCkgOiBTRChcImVudGl0eS5jcmVhdGVcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIikpLFxuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4LTEgb3ZlcmZsb3ctYXV0b1wiPlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJtYXgtdy1bMTgwMHB4XSBteC1hdXRvIHAtOFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNiBtYi04XCI+XG4gICAgICAgICAgey8qIEhlYWRlciAqL31cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICA8Rm9ybUljb24gY2xhc3NOYW1lPVwiaC01IHctNVwiIC8+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQtbGcgZm9udC1zZW1pYm9sZCBoLTVcIj57UEFHRS50aXRsZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIHttb2RlICE9PSBcIm1vZGFsXCIgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pfVxuICAgICAgICAgICAgICAgIGljb249ezxBcnJvd0xlZnRJY29uIC8+fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLmJhY2tUb0xpc3RcIil9XG4gICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIHsvKiBGb3JtIENhcmQgKi99XG4gICAgICAgICAgPENhcmQgY2xhc3NOYW1lPVwiYm9yZGVyLWJvcmRlci80MCBiZy1ncmF5LTUwIHNoYWRvdy1zbVwiPlxuICAgICAgICAgICAgPENhcmRIZWFkZXIgY2xhc3NOYW1lPVwicHgtNCBib3JkZXItYiBib3JkZXItZ3JheS0yMDAgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPENhcmRUaXRsZSBjbGFzc05hbWU9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIGxlYWRpbmctbm9uZSBtLTBcIj5cbiAgICAgICAgICAgICAgICB7UEFHRS50aXRsZX1cbiAgICAgICAgICAgICAgPC9DYXJkVGl0bGU+XG4gICAgICAgICAgICA8L0NhcmRIZWFkZXI+XG4gICAgICAgICAgICA8Q2FyZENvbnRlbnQgY2xhc3NOYW1lPVwicC02XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02XCI+XG4ke2NvbHVtbnNcbiAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJjcmVhdGVkX2F0XCIpXG4gIC5tYXAoKGNvbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsID0gKCgpID0+IHtcbiAgICAgIGlmIChjb2wubGFiZWwuZW5kc1dpdGgoXCJJZFwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGNvbC5sYWJlbC5yZXBsYWNlKFwiSWRcIiwgXCJcIikpO1xuICAgICAgICAgIHJldHVybiBlbnRpdHkudGl0bGUgPz8gY29sLmxhYmVsO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gY29sLmxhYmVsO1xuICAgIH0pKCk7XG4gICAgY29uc3QgbGFiZWxOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICByZXR1cm4gYCAgICAgICAgICAgICAgICB7LyogJHtsYWJlbH0gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTJcIj5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJibG9jayB0ZXh0LXhzIG1iLTEgdGV4dC1ncmF5LTYwMFwiPntTRChcImVudGl0eS4ke2VudGl0eUlkfS4ke2xhYmVsTmFtZX1cIil9PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy5yZW5kZXJDb2x1bW4oZW50aXR5SWQsIGNvbCl9XG4gICAgICAgICAgICAgICAgPC9kaXY+YDtcbiAgfSlcbiAgLmpvaW4oXCJcXG5cXG5cIil9XG5cbiAgICAgICAgICAgICAgICB7LyogU2F2ZSBCdXR0b24gKi99XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW4gcHQtNFwiPlxuICAgICAgICAgICAgICAgICAge2Zvcm0uaWQgJiYgZm9ybS5jcmVhdGVkX2F0ICYmIChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9XCJtci0yIHRleHQteHMgdGV4dC1ncmF5LTYwMFwiPntTRChcImZvcm0uY3JlYXRlZEF0XCIpfTo8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cInRleHQteHMgdGV4dC1ncmF5LTYwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge1N0cmluZyhmb3JtLmNyZWF0ZWRfYXQpfVxuICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTdWJtaXR9XG4gICAgICAgICAgICAgICAgICAgIGljb249ezxTYXZlSWNvbiAvPn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge1NEKFwiY29tbW9uLnNhdmVcIil9XG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L0NhcmRDb250ZW50PlxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbInVuaXF1ZSIsInoiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lIiwiZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2Zvcm0iLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnNQbHVyYWwiLCJnZXRSZXF1aXJlZERpY3RLZXlzIiwid3JhcEZDIiwiYm9keSIsImxhYmVsIiwiam9pbiIsIndyYXBGRyIsInJlbmRlckNvbHVtbkltcG9ydCIsImVudGl0eUlkIiwiY29sIiwicmVuZGVyVHlwZSIsImlkIiwibmFtZSIsInR5cGUiLCJlbnVtSWQiLCJyZWxQcm9wIiwicmVwbGFjZSIsIndpdGgiLCJlbmRzV2l0aCIsImJhc2VOYW1lIiwicmVuZGVyQ29sdW1uIiwicmVnRXhwciIsInBsYWNlaG9sZGVyTmFtZSIsInBsYWNlaG9sZGVyIiwiem9kVHlwZSIsIlpvZFN0cmluZyIsIm1heExlbmd0aCIsInJlc29sdmVEZWZhdWx0VmFsdWUiLCJjb2x1bW5zIiwicmVkdWNlIiwicmVzdWx0Iiwib3B0aW9uYWwiLCJ2YWx1ZSIsIm51bGxhYmxlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJlbnVtIiwiWm9kQm9vbGVhbiIsImNvcmUiLCIkWm9kU3RyaW5nIiwiWm9kQXJyYXkiLCJab2RPYmplY3QiLCJyZW5kZXIiLCJlbnRpdHkiLCJnZXQiLCJnZXROYW1lc0Zyb21JZCIsInBrVHlwZSIsImdldFBrVHlwZSIsImlkVHNUeXBlIiwiaWRab2RUeXBlIiwibG9hZFR5cGVzIiwibG9hZGVkVHlwZXMiLCJTYXZlUGFyYW1zWm9kVHlwZSIsIkVycm9yIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInNhdmVQYXJhbXNOb2RlIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJlbnVtSW1wb3J0cyIsIlNldCIsImZrQ29uZmlnSW1wb3J0cyIsImZvckVhY2giLCJhZGQiLCJzb21lIiwiaW5jbHVkZXMiLCJjYXBpdGFsIiwibGVuZ3RoIiwiQm9vbGVhbiIsImZzIiwic2l6ZSIsIkFycmF5IiwiZnJvbSIsImNhcGl0YWxQbHVyYWwiLCJKU09OIiwic3RyaW5naWZ5IiwiaGFzRGF0ZXRpbWUiLCJoYXNEYXRlIiwiaGVscGVycyIsInJlbGF0aW9uRmllbGRzIiwicmVsYXRpb25OYW1lIiwidGl0bGUiLCJsYWJlbE5hbWUiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsTUFBTSxRQUFRLFVBQVU7QUFDakMsU0FBU0MsQ0FBQyxRQUFRLE1BQU07QUFDeEIsU0FBU0MsYUFBYSxRQUFnQyxpQ0FBOEI7QUFFcEYsU0FDRUMsc0JBQXNCLEVBQ3RCQyw2QkFBNkIsRUFDN0JDLDBCQUEwQixRQUNyQixnQkFBYTtBQUNwQixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyw0QkFBNEJEO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQztJQUNGO0lBRVNDLHNCQUF1QztRQUM5QyxPQUFPO1lBQUM7WUFBaUI7WUFBZTtZQUFxQjtZQUFrQjtTQUFjO0lBQy9GO0lBRUFDLE9BQU9DLElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU87WUFDTCxDQUFDLDJCQUEyQixFQUFFQSxRQUFRLENBQUMsV0FBVyxFQUFFQSxNQUFNLFFBQVEsQ0FBQyxHQUFHLElBQUk7WUFDMUUsQ0FBQyxFQUFFLEVBQUVELE1BQU07WUFDWCxDQUFDLE1BQU0sQ0FBQztTQUNULENBQUNFLElBQUksQ0FBQztJQUNUO0lBQ0FDLE9BQU9ILElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU8sSUFBSSxDQUFDRixNQUFNLENBQUNDLE1BQU1DO0lBQzNCO0lBRUFHLG1CQUFtQkMsUUFBZ0IsRUFBRUMsR0FBa0IsRUFBRTtRQUN2RCxJQUFJQSxJQUFJQyxVQUFVLEtB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
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type EntityNamesRecord } from "../../entity/entity-manager";
|
|
2
|
-
import type { RenderingNode,
|
|
2
|
+
import type { RenderingNode, TemplateOptions } from "../../types/types";
|
|
3
3
|
import { Template } from "../template";
|
|
4
4
|
export declare class Template__view_list extends Template {
|
|
5
5
|
constructor();
|
|
@@ -23,8 +23,8 @@ export declare class Template__view_list extends Template {
|
|
|
23
23
|
body: string;
|
|
24
24
|
importKeys: never[];
|
|
25
25
|
preTemplates: {
|
|
26
|
-
key: TemplateKey;
|
|
27
|
-
options: TemplateOptions[TemplateKey];
|
|
26
|
+
key: import("../..").TemplateKey;
|
|
27
|
+
options: TemplateOptions[import("../..").TemplateKey];
|
|
28
28
|
}[];
|
|
29
29
|
target: string;
|
|
30
30
|
path: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"view_list.template.d.ts","sourceRoot":"","sources":["../../../src/template/implementations/view_list.template.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOxE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,qBAAa,mBAAoB,SAAQ,QAAQ;;IAK/C,gBAAgB,CAAC,KAAK,EAAE,iBAAiB;;;;IAOhC,mBAAmB,IAAI,MAAM,EAAE,GAAG,IAAI;IAI/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,GAAE,OAAc,EAAE,SAAS,GAAE,MAAW;IAMpF,YAAY,CACV,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,EACxB,SAAS,GAAE,MAAc,EACzB,WAAW,GAAE,OAAe,GAC3B,MAAM;IAyFT,kBAAkB,CAChB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,iBAAiB,GACvB,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE;IAwBpB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAiCjF,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,iBAAiB;IAkC3E,UAAU,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG;QACpC,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB;IAoBK,MAAM,CAAC,EAAE,QAAQ,EAAE,EAAE,eAAe,CAAC,WAAW,CAAC;;;;;;;;;;CAsfxD"}
|