sonamu 0.9.20 → 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.
- package/dist/_virtual/_rolldown/runtime.js +36 -0
- package/dist/ai/agents/agent.js +5 -7
- package/dist/ai/agents/index.js +1 -2
- package/dist/ai/agents/types.js +1 -1
- package/dist/ai/index.js +1 -2
- package/dist/ai/providers/rtzr/api.js +2 -3
- package/dist/ai/providers/rtzr/error.js +14 -29
- package/dist/ai/providers/rtzr/index.js +1 -2
- package/dist/ai/providers/rtzr/model.js +13 -20
- package/dist/ai/providers/rtzr/options.js +2 -3
- package/dist/ai/providers/rtzr/provider.js +2 -3
- package/dist/ai/providers/rtzr/utils.js +12 -21
- package/dist/api/base-frame.js +4 -4
- package/dist/api/caster.js +21 -38
- package/dist/api/code-converters.js +41 -98
- package/dist/api/config.d.ts +1 -10
- package/dist/api/config.d.ts.map +1 -1
- package/dist/api/config.js +9 -8
- package/dist/api/context.js +2 -3
- package/dist/api/decorators.js +80 -116
- package/dist/api/index.js +2 -3
- package/dist/api/secret.js +6 -10
- package/dist/api/sonamu.d.ts.map +1 -1
- package/dist/api/sonamu.js +200 -387
- package/dist/api/validator.js +5 -8
- package/dist/api/websocket-helpers.js +21 -32
- package/dist/auth/audit-log/builders.js +2 -3
- package/dist/auth/audit-log/events.js +2 -2
- package/dist/auth/audit-log/plugin.js +30 -61
- package/dist/auth/audit-log-ingestor.js +19 -41
- package/dist/auth/auth-generator.js +16 -41
- package/dist/auth/better-auth-entities.js +3 -4
- package/dist/auth/index.js +2 -3
- package/dist/auth/knex-adapter.js +18 -45
- package/dist/auth/plugins/entity-definitions/admin.js +2 -2
- package/dist/auth/plugins/entity-definitions/anonymous.js +2 -2
- package/dist/auth/plugins/entity-definitions/api-key.js +2 -2
- package/dist/auth/plugins/entity-definitions/audit-log.js +2 -2
- package/dist/auth/plugins/entity-definitions/index.js +2 -3
- package/dist/auth/plugins/entity-definitions/jwt.js +2 -2
- package/dist/auth/plugins/entity-definitions/organization.js +2 -2
- package/dist/auth/plugins/entity-definitions/passkey.js +2 -2
- package/dist/auth/plugins/entity-definitions/phone-number.js +2 -2
- package/dist/auth/plugins/entity-definitions/sso.js +2 -2
- package/dist/auth/plugins/entity-definitions/two-factor.js +2 -2
- package/dist/auth/plugins/entity-definitions/types.js +1 -1
- package/dist/auth/plugins/entity-definitions/username.js +2 -2
- package/dist/auth/plugins/index.js +1 -2
- package/dist/auth/plugins/wrappers/admin.js +2 -3
- package/dist/auth/plugins/wrappers/anonymous.js +2 -3
- package/dist/auth/plugins/wrappers/api-key.js +2 -3
- package/dist/auth/plugins/wrappers/index.js +1 -2
- package/dist/auth/plugins/wrappers/jwt.js +2 -3
- package/dist/auth/plugins/wrappers/organization.js +2 -3
- package/dist/auth/plugins/wrappers/passkey.js +2 -3
- package/dist/auth/plugins/wrappers/phone-number.js +2 -3
- package/dist/auth/plugins/wrappers/sso.js +2 -3
- package/dist/auth/plugins/wrappers/two-factor.js +2 -3
- package/dist/auth/plugins/wrappers/username.js +2 -3
- package/dist/bin/build-config.js +2 -2
- package/dist/bin/cli.js +151 -258
- package/dist/bin/fixture.d.ts.map +1 -1
- package/dist/bin/fixture.js +55 -97
- package/dist/bin/hmr-hook-register.js +3 -3
- package/dist/bin/migrate-targets.d.ts +3 -0
- package/dist/bin/migrate-targets.d.ts.map +1 -0
- package/dist/bin/migrate-targets.js +11 -0
- package/dist/bin/test-command.js +25 -55
- package/dist/bin/ts-loader-register.js +5 -6
- package/dist/bin/ts-loader-registration.js +6 -13
- package/dist/cache/cache-manager.js +3 -4
- package/dist/cache/decorator.js +11 -21
- package/dist/cache/drivers.js +2 -3
- package/dist/cache/index.js +2 -3
- package/dist/cache/types.js +1 -1
- package/dist/cache-control/cache-control.js +21 -34
- package/dist/cache-control/types.js +1 -1
- package/dist/compress/compress.js +10 -10
- package/dist/compress/index.js +1 -2
- package/dist/compress/types.js +1 -1
- package/dist/cone/cone-generator.js +25 -63
- package/dist/database/_batch_update.js +26 -46
- package/dist/database/base-model.js +44 -97
- package/dist/database/base-model.types.js +1 -1
- package/dist/database/db.d.ts +8 -14
- package/dist/database/db.d.ts.map +1 -1
- package/dist/database/db.js +127 -72
- package/dist/database/knex.js +5 -8
- package/dist/database/puri-subset.types.js +1 -1
- package/dist/database/puri-wrapper.js +11 -15
- package/dist/database/puri.js +117 -234
- package/dist/database/puri.types.js +3 -4
- package/dist/database/transaction-context.js +4 -5
- package/dist/database/upsert-builder.js +109 -176
- package/dist/dict/en.d.ts +1 -0
- package/dist/dict/en.d.ts.map +1 -1
- package/dist/dict/en.js +4 -4
- package/dist/dict/index.js +2 -3
- package/dist/dict/ko.d.ts +1 -0
- package/dist/dict/ko.d.ts.map +1 -1
- package/dist/dict/ko.js +4 -4
- package/dist/dict/rc-keys.js +3 -4
- package/dist/dict/sd.js +8 -19
- package/dist/dict/sonamu-dictionary.js +141 -284
- package/dist/dict/types.js +1 -1
- package/dist/dict/utils.js +4 -5
- package/dist/entity/entity-manager.d.ts +2 -2
- package/dist/entity/entity-manager.js +34 -82
- package/dist/entity/entity-template-cone.js +33 -66
- package/dist/entity/entity.js +156 -310
- package/dist/env.d.ts +14 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +75 -0
- package/dist/exceptions/error-handler.js +2 -3
- package/dist/exceptions/so-exceptions.js +7 -5
- package/dist/filter/index.js +1 -2
- package/dist/filter/types.js +3 -4
- package/dist/filter/utils.js +21 -54
- package/dist/index.js +8 -7
- package/dist/logger/category.js +6 -12
- package/dist/logger/configure.js +23 -34
- package/dist/migration/code-generation.js +146 -314
- package/dist/migration/index-where-predicate.js +52 -144
- package/dist/migration/migration-set.js +19 -33
- package/dist/migration/migrator.d.ts +2 -0
- package/dist/migration/migrator.d.ts.map +1 -1
- package/dist/migration/migrator.js +69 -53
- package/dist/migration/postgresql-schema-reader.js +126 -225
- package/dist/migration/slack-confirm.d.ts +1 -0
- package/dist/migration/slack-confirm.d.ts.map +1 -1
- package/dist/migration/slack-confirm.js +28 -38
- package/dist/migration/types.js +1 -1
- package/dist/naite/messaging-types.js +1 -1
- package/dist/naite/naite-reporter.js +15 -32
- package/dist/naite/naite.js +43 -76
- package/dist/ssr/index.js +6 -9
- package/dist/ssr/registry.js +10 -18
- package/dist/ssr/renderer.js +10 -21
- package/dist/ssr/types.js +1 -1
- package/dist/storage/base-file.js +5 -10
- package/dist/storage/buffered-file.js +3 -4
- package/dist/storage/drivers.js +2 -3
- package/dist/storage/index.js +2 -3
- package/dist/storage/s3-driver.js +5 -9
- package/dist/storage/storage-manager.js +5 -5
- package/dist/storage/types.js +1 -1
- package/dist/storage/uploaded-file.js +4 -6
- package/dist/stream/index.js +1 -2
- package/dist/stream/sse.js +8 -13
- package/dist/stream/ws-audience-resolver.js +5 -5
- package/dist/stream/ws-audience.js +3 -4
- package/dist/stream/ws-cluster-bus.js +3 -4
- package/dist/stream/ws-core.js +1 -1
- package/dist/stream/ws-delivery.js +11 -25
- package/dist/stream/ws-local-connection-store.js +9 -18
- package/dist/stream/ws-presence-store.js +43 -97
- package/dist/stream/ws-registry.js +17 -22
- package/dist/stream/ws-telemetry-memory.js +38 -45
- package/dist/stream/ws-telemetry-trace.js +4 -6
- package/dist/stream/ws-telemetry.js +82 -135
- package/dist/stream/ws.js +47 -91
- package/dist/syncer/api-parser.js +81 -147
- package/dist/syncer/checksum.js +9 -20
- package/dist/syncer/code-generator.js +29 -47
- package/dist/syncer/entity-operations.js +17 -27
- package/dist/syncer/event-batcher.js +8 -15
- package/dist/syncer/file-patterns.js +3 -4
- package/dist/syncer/file-tracking.js +6 -10
- package/dist/syncer/index.js +1 -2
- package/dist/syncer/module-loader.js +10 -26
- package/dist/syncer/syncer-actions.js +19 -37
- package/dist/syncer/syncer.js +46 -98
- package/dist/syncer/watcher.js +12 -26
- package/dist/tasks/decorator.js +7 -11
- package/dist/tasks/step-wrapper.js +7 -8
- package/dist/tasks/workflow-manager.js +18 -25
- package/dist/template/entity-converter.js +40 -64
- package/dist/template/helpers.js +32 -63
- package/dist/template/implementations/entity.template.js +7 -11
- package/dist/template/implementations/entry-server.template.js +2 -3
- package/dist/template/implementations/generated.template.js +25 -51
- package/dist/template/implementations/generated_http.template.js +31 -58
- package/dist/template/implementations/generated_sso.template.js +45 -85
- package/dist/template/implementations/init_types.template.js +4 -7
- package/dist/template/implementations/model.template.js +5 -10
- package/dist/template/implementations/model_test.template.js +2 -3
- package/dist/template/implementations/queries.template.js +4 -7
- package/dist/template/implementations/sd.template.js +17 -35
- package/dist/template/implementations/services.template.js +18 -30
- package/dist/template/implementations/view_form.template.js +72 -125
- package/dist/template/implementations/view_id_all_select.template.js +2 -3
- package/dist/template/implementations/view_list.template.js +86 -143
- package/dist/template/implementations/view_search_input.template.js +2 -3
- package/dist/template/index.js +5 -8
- package/dist/template/template-manager.js +13 -26
- package/dist/template/template-types.js +2 -3
- package/dist/template/template.js +7 -11
- package/dist/template/zod-converter.js +173 -348
- package/dist/testing/_relation-graph.js +18 -37
- package/dist/testing/bootstrap.js +5 -8
- package/dist/testing/data-explorer.js +34 -78
- package/dist/testing/dev-test-routes.js +54 -60
- package/dist/testing/dev-vitest-manager.js +33 -84
- package/dist/testing/faker-mappings.js +3 -4
- package/dist/testing/fixture-generator.d.ts +2 -1
- package/dist/testing/fixture-generator.d.ts.map +1 -1
- package/dist/testing/fixture-generator.js +159 -321
- package/dist/testing/fixture-loader.js +2 -2
- package/dist/testing/fixture-manager.d.ts.map +1 -1
- package/dist/testing/fixture-manager.js +124 -227
- package/dist/testing/global-setup.d.ts.map +1 -1
- package/dist/testing/global-setup.js +29 -17
- package/dist/testing/index.js +1 -2
- package/dist/testing/naite-vitest-reporter.js +2 -3
- package/dist/testing/parallel-db-manager.js +5 -3
- package/dist/testing/vitest-helpers.d.ts.map +1 -1
- package/dist/testing/vitest-helpers.js +15 -12
- package/dist/types/types.d.ts +14 -14
- package/dist/types/types.js +27 -50
- package/dist/ui/ai-api.js +6 -11
- package/dist/ui/ai-client.js +86 -134
- package/dist/ui/api.js +99 -195
- package/dist/ui/cdd-service.js +78 -130
- package/dist/ui/cdd-types.js +1 -1
- package/dist/ui-web/assets/{index-Df8q-fhb.js → index-DFStGyd0.js} +49 -49
- package/dist/ui-web/assets/index-Dx4ap5i4.css +1 -0
- package/dist/ui-web/index.html +2 -2
- package/dist/utils/async-utils.js +13 -25
- package/dist/utils/class-name.js +3 -4
- package/dist/utils/console-util.js +11 -26
- package/dist/utils/controller.d.ts.map +1 -1
- package/dist/utils/controller.js +14 -12
- package/dist/utils/esm-utils.js +5 -8
- package/dist/utils/formatter.js +10 -22
- package/dist/utils/fs-utils.js +14 -25
- package/dist/utils/lodash-able.js +3 -4
- package/dist/utils/model.js +7 -14
- package/dist/utils/object-utils.js +41 -73
- package/dist/utils/path-utils.js +5 -9
- package/dist/utils/process-utils.js +4 -7
- package/dist/utils/sql-parser.js +6 -13
- package/dist/utils/type-utils.js +16 -26
- package/dist/utils/utils.js +18 -40
- package/dist/utils/zod-error.js +9 -16
- package/dist/vector/chunking.js +24 -37
- package/dist/vector/config.js +2 -2
- package/dist/vector/embedding.js +8 -19
- package/dist/vector/index.js +1 -2
- package/dist/vector/types.js +1 -1
- package/package.json +6 -6
- package/src/__tests__/env.test.ts +127 -0
- package/src/api/__tests__/config.test.ts +10 -1
- package/src/api/config.ts +4 -12
- package/src/api/sonamu.ts +14 -4
- package/src/bin/__tests__/migrate-targets.test.ts +28 -0
- package/src/bin/__tests__/test-command.test.ts +82 -1
- package/src/bin/cli.ts +9 -18
- package/src/bin/fixture.ts +5 -4
- package/src/bin/migrate-targets.ts +7 -0
- package/src/bin/test-command.ts +2 -2
- package/src/database/__tests__/db.test.ts +175 -0
- package/src/database/db.ts +193 -71
- package/src/dict/en.ts +2 -0
- package/src/dict/ko.ts +2 -0
- package/src/env.ts +123 -0
- package/src/migration/__tests__/migrator.test.ts +149 -0
- package/src/migration/migrator.ts +74 -17
- package/src/migration/slack-confirm.ts +21 -0
- package/src/skills/sonamu/database.md +1 -1
- package/src/skills/sonamu/testing-devrunner.md +1 -1
- package/src/stream/ws-telemetry-memory.ts +2 -2
- package/src/testing/fixture-generator.ts +2 -1
- package/src/testing/fixture-manager.ts +3 -4
- package/src/testing/global-setup.ts +42 -18
- package/src/testing/vitest-helpers.ts +14 -0
- package/src/utils/controller.ts +14 -7
- package/tsdown.api.config.ts +6 -0
- package/dist/_virtual/rolldown_runtime.js +0 -39
- package/dist/ui-web/assets/index-D4rYm-Xz.css +0 -1
|
@@ -3,7 +3,6 @@ import { Template, init_template } from "../template.js";
|
|
|
3
3
|
import { getEnumInfoFromColName, getRelationNameFromColumnName, getRelationPropFromColName, init_helpers } from "../helpers.js";
|
|
4
4
|
import { z as z$1 } from "zod";
|
|
5
5
|
import { unique } from "radashi";
|
|
6
|
-
|
|
7
6
|
//#region src/template/implementations/view_form.template.ts
|
|
8
7
|
init_entity_manager();
|
|
9
8
|
init_helpers();
|
|
@@ -44,40 +43,30 @@ var Template__view_form = class extends Template {
|
|
|
44
43
|
type: "enum",
|
|
45
44
|
enumId: id
|
|
46
45
|
};
|
|
47
|
-
} else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
type: "fk",
|
|
63
|
-
entityId: relProp.with
|
|
64
|
-
};
|
|
65
|
-
} catch {
|
|
66
|
-
return null;
|
|
67
|
-
}
|
|
46
|
+
} else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
|
|
47
|
+
return {
|
|
48
|
+
type: "fk",
|
|
49
|
+
entityId: getRelationPropFromColName(entityId, col.name.replace("_id", "")).with
|
|
50
|
+
};
|
|
51
|
+
} catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
|
|
55
|
+
return {
|
|
56
|
+
type: "fk",
|
|
57
|
+
entityId: getRelationPropFromColName(entityId, col.name.replace(/_ids$/, "")).with
|
|
58
|
+
};
|
|
59
|
+
} catch {
|
|
60
|
+
return null;
|
|
68
61
|
}
|
|
69
62
|
return null;
|
|
70
63
|
}
|
|
71
64
|
renderColumn(entityId, col) {
|
|
72
65
|
const regExpr = `{...register("${col.name}")}`;
|
|
73
|
-
const
|
|
74
|
-
const placeholder = `{SD("entity.${entityId}.${placeholderName}")}`;
|
|
66
|
+
const placeholder = `{SD("entity.${entityId}.${getRelationNameFromColumnName(entityId, col.name)}")}`;
|
|
75
67
|
switch (col.renderType) {
|
|
76
|
-
case "string-plain": if (col.zodType instanceof z$1.ZodString && (col.zodType.maxLength ?? 0) <= 256) {
|
|
77
|
-
|
|
78
|
-
} else {
|
|
79
|
-
return `<Textarea className="text-xs bg-white" rows={4} placeholder=${placeholder} ${regExpr} />`;
|
|
80
|
-
}
|
|
68
|
+
case "string-plain": if (col.zodType instanceof z$1.ZodString && (col.zodType.maxLength ?? 0) <= 256) return `<Input className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
|
|
69
|
+
else return `<Textarea className="text-xs bg-white" rows={4} placeholder=${placeholder} ${regExpr} />`;
|
|
81
70
|
case "datetime": return `<DateInput
|
|
82
71
|
className="h-8 text-xs bg-white"
|
|
83
72
|
${regExpr}
|
|
@@ -112,9 +101,8 @@ var Template__view_form = class extends Template {
|
|
|
112
101
|
}
|
|
113
102
|
case "number-fk_id":
|
|
114
103
|
case "string-fk_id": try {
|
|
115
|
-
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
116
104
|
return `<IdAsyncSelect
|
|
117
|
-
config={${
|
|
105
|
+
config={${getRelationPropFromColName(entityId, col.name.replace("_id", "")).with}AsyncIdConfig}
|
|
118
106
|
subset="A"
|
|
119
107
|
${regExpr}
|
|
120
108
|
/>`;
|
|
@@ -122,19 +110,15 @@ var Template__view_form = class extends Template {
|
|
|
122
110
|
return `<Input type="number" className="h-8 text-xs bg-white" placeholder=${placeholder} ${regExpr} />`;
|
|
123
111
|
}
|
|
124
112
|
case "array":
|
|
125
|
-
if (col.name.endsWith("_ids")) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
129
|
-
return `<IdAsyncSelect
|
|
130
|
-
config={${relProp.with}AsyncIdConfig}
|
|
113
|
+
if (col.name.endsWith("_ids")) try {
|
|
114
|
+
return `<IdAsyncSelect
|
|
115
|
+
config={${getRelationPropFromColName(entityId, col.name.replace(/_ids$/, "")).with}AsyncIdConfig}
|
|
131
116
|
subset="A"
|
|
132
117
|
multiple
|
|
133
118
|
${regExpr}
|
|
134
119
|
/>`;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
}
|
|
120
|
+
} catch {
|
|
121
|
+
return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
138
122
|
}
|
|
139
123
|
return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
140
124
|
case "object": return `<Input className="h-8 text-xs bg-white" placeholder="${col.name}" ${regExpr} />`;
|
|
@@ -143,29 +127,16 @@ var Template__view_form = class extends Template {
|
|
|
143
127
|
}
|
|
144
128
|
resolveDefaultValue(columns) {
|
|
145
129
|
return columns.reduce((result, col) => {
|
|
146
|
-
if (col.optional)
|
|
147
|
-
return result;
|
|
148
|
-
}
|
|
130
|
+
if (col.optional) return result;
|
|
149
131
|
let value;
|
|
150
|
-
if (col.nullable === true)
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
} else if (col.zodType instanceof z$1.core.$ZodString) {
|
|
159
|
-
if (col.renderType === "string-datetime") {
|
|
160
|
-
value = "now()";
|
|
161
|
-
} else {
|
|
162
|
-
value = "";
|
|
163
|
-
}
|
|
164
|
-
} else if (col.zodType instanceof z$1.ZodArray) {
|
|
165
|
-
value = [];
|
|
166
|
-
} else if (col.zodType instanceof z$1.ZodObject) {
|
|
167
|
-
value = {};
|
|
168
|
-
}
|
|
132
|
+
if (col.nullable === true) value = null;
|
|
133
|
+
else if (col.zodType instanceof z$1.ZodNumber) value = 0;
|
|
134
|
+
else if (col.zodType instanceof z$1.ZodEnum) value = Object.keys(col.zodType.enum)[0];
|
|
135
|
+
else if (col.zodType instanceof z$1.ZodBoolean) value = false;
|
|
136
|
+
else if (col.zodType instanceof z$1.core.$ZodString) if (col.renderType === "string-datetime") value = "now()";
|
|
137
|
+
else value = "";
|
|
138
|
+
else if (col.zodType instanceof z$1.ZodArray) value = [];
|
|
139
|
+
else if (col.zodType instanceof z$1.ZodObject) value = {};
|
|
169
140
|
result[col.name] = value;
|
|
170
141
|
return result;
|
|
171
142
|
}, {});
|
|
@@ -177,44 +148,33 @@ var Template__view_form = class extends Template {
|
|
|
177
148
|
const idTsType = pkType === "string" || pkType === "uuid" ? "string" : "number";
|
|
178
149
|
const idZodType = pkType === "string" || pkType === "uuid" ? "z.string().optional()" : "z.number().optional()";
|
|
179
150
|
const { loadTypes } = await import("../../syncer/module-loader.js");
|
|
180
|
-
const
|
|
181
|
-
|
|
182
|
-
if (!SaveParamsZodType) {
|
|
183
|
-
throw new Error(`SaveParams for ${entityId} not found. Did you run 'sonamu sync'?`);
|
|
184
|
-
}
|
|
151
|
+
const SaveParamsZodType = (await loadTypes())[`${entityId}SaveParams`];
|
|
152
|
+
if (!SaveParamsZodType) throw new Error(`SaveParams for ${entityId} not found. Did you run 'sonamu sync'?`);
|
|
185
153
|
const { zodTypeToRenderingNode } = await import("../zod-converter.js");
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
const propCandidate = entity.props.find((prop) => prop.name === col.name);
|
|
189
|
-
col.label = propCandidate?.desc ?? col.label;
|
|
154
|
+
const columns = (zodTypeToRenderingNode(SaveParamsZodType)?.children ?? []).filter((col) => col.name !== "id").map((col) => {
|
|
155
|
+
col.label = entity.props.find((prop) => prop.name === col.name)?.desc ?? col.label;
|
|
190
156
|
return col;
|
|
191
157
|
});
|
|
192
158
|
const defaultValue = this.resolveDefaultValue(columns);
|
|
193
|
-
const enumImports = new Set();
|
|
194
|
-
const fkConfigImports = new Set();
|
|
159
|
+
const enumImports = /* @__PURE__ */ new Set();
|
|
160
|
+
const fkConfigImports = /* @__PURE__ */ new Set();
|
|
195
161
|
columns.forEach((col) => {
|
|
196
|
-
if (col.renderType === "enums") {
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
}
|
|
212
|
-
try {
|
|
213
|
-
const baseName = col.name.replace(/_ids$/, "");
|
|
214
|
-
const relProp = getRelationPropFromColName(entityId, baseName);
|
|
215
|
-
fkConfigImports.add(relProp.with);
|
|
216
|
-
} catch {}
|
|
217
|
-
}
|
|
162
|
+
if (col.renderType === "enums") try {
|
|
163
|
+
const { id } = getEnumInfoFromColName(entityId, col.name);
|
|
164
|
+
enumImports.add(id);
|
|
165
|
+
} catch {}
|
|
166
|
+
else if (col.renderType === "number-fk_id" || col.renderType === "string-fk_id") try {
|
|
167
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
168
|
+
fkConfigImports.add(relProp.with);
|
|
169
|
+
} catch {}
|
|
170
|
+
else if (col.renderType === "string-plain" && col.name.endsWith("_id") && col.name !== "id") try {
|
|
171
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace("_id", ""));
|
|
172
|
+
fkConfigImports.add(relProp.with);
|
|
173
|
+
} catch {}
|
|
174
|
+
else if (col.renderType === "array" && col.name.endsWith("_ids")) try {
|
|
175
|
+
const relProp = getRelationPropFromColName(entityId, col.name.replace(/_ids$/, ""));
|
|
176
|
+
fkConfigImports.add(relProp.with);
|
|
177
|
+
} catch {}
|
|
218
178
|
});
|
|
219
179
|
return {
|
|
220
180
|
...this.getTargetAndPath(names),
|
|
@@ -246,7 +206,7 @@ import type { ${names.capital}SubsetA } from "@/services/sonamu.generated";${col
|
|
|
246
206
|
}
|
|
247
207
|
})).filter(Boolean).join(", ") + " } from \"@/services/sonamu.generated\";" : ""}
|
|
248
208
|
import { defaultCatch } from "@/services/sonamu.shared";
|
|
249
|
-
import { ${names.capital}SaveParams } from "@/services/${names.fs}/${names.fs}.types";${fkConfigImports.size > 0 ? `\nimport { ${Array.from(fkConfigImports).map((entity
|
|
209
|
+
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";` : ""}
|
|
250
210
|
import { SD } from "@/i18n/sd.generated";
|
|
251
211
|
|
|
252
212
|
import ArrowLeftIcon from "~icons/lucide/arrow-left";
|
|
@@ -282,8 +242,7 @@ ${(() => {
|
|
|
282
242
|
const hasDate = columns.some((col) => col.renderType === "string-date");
|
|
283
243
|
if (!hasDatetime && !hasDate) return "";
|
|
284
244
|
let helpers = "\n";
|
|
285
|
-
if (hasDatetime)
|
|
286
|
-
helpers += ` // datetime-local 형식으로 변환 (YYYY-MM-DDTHH:MM)
|
|
245
|
+
if (hasDatetime) helpers += ` // datetime-local 형식으로 변환 (YYYY-MM-DDTHH:MM)
|
|
287
246
|
const toDatetimeLocalString = (date: Date | string | null | undefined): string => {
|
|
288
247
|
if (!date) return "";
|
|
289
248
|
const d = typeof date === "string" ? new Date(date) : date;
|
|
@@ -296,9 +255,7 @@ ${(() => {
|
|
|
296
255
|
return new Date(value);
|
|
297
256
|
};
|
|
298
257
|
`;
|
|
299
|
-
|
|
300
|
-
if (hasDate) {
|
|
301
|
-
helpers += ` // date 형식으로 변환 (YYYY-MM-DD)
|
|
258
|
+
if (hasDate) helpers += ` // date 형식으로 변환 (YYYY-MM-DD)
|
|
302
259
|
const toDateString = (date: Date | string | null | undefined): string => {
|
|
303
260
|
if (!date) return "";
|
|
304
261
|
const d = typeof date === "string" ? new Date(date) : date;
|
|
@@ -311,7 +268,6 @@ ${(() => {
|
|
|
311
268
|
return new Date(value);
|
|
312
269
|
};
|
|
313
270
|
`;
|
|
314
|
-
}
|
|
315
271
|
return helpers;
|
|
316
272
|
})()}
|
|
317
273
|
useEffect(() => {
|
|
@@ -320,19 +276,15 @@ ${(() => {
|
|
|
320
276
|
setForm((prevForm) => ({
|
|
321
277
|
...prevForm,
|
|
322
278
|
...row,${(() => {
|
|
323
|
-
|
|
279
|
+
return columns.filter((col) => col.renderType === "number-fk_id" || col.renderType === "string-fk_id" || col.renderType === "array" && col.name.endsWith("_ids")).map((col) => {
|
|
324
280
|
if (col.renderType === "array" && col.name.endsWith("_ids")) {
|
|
325
|
-
const relationName
|
|
326
|
-
return `\n ${col.name}: row.${relationName
|
|
281
|
+
const relationName = getRelationNameFromColumnName(entityId, col.name);
|
|
282
|
+
return `\n ${col.name}: row.${relationName}?.map((r) => r.id) ?? [],`;
|
|
327
283
|
}
|
|
328
284
|
const relationName = getRelationNameFromColumnName(entityId, col.name);
|
|
329
|
-
if (col.nullable) {
|
|
330
|
-
|
|
331
|
-
} else {
|
|
332
|
-
return `\n ${col.name}: row.${relationName}?.id,`;
|
|
333
|
-
}
|
|
285
|
+
if (col.nullable) return `\n ${col.name}: row.${relationName}?.id ?? null,`;
|
|
286
|
+
else return `\n ${col.name}: row.${relationName}?.id,`;
|
|
334
287
|
}).join("");
|
|
335
|
-
return relationFields;
|
|
336
288
|
})()}
|
|
337
289
|
}));
|
|
338
290
|
});
|
|
@@ -413,21 +365,16 @@ ${(() => {
|
|
|
413
365
|
<CardContent className="p-6">
|
|
414
366
|
<div className="space-y-6">
|
|
415
367
|
${columns.filter((col) => col.name !== "created_at").map((col) => {
|
|
416
|
-
|
|
417
|
-
if (col.label.endsWith("Id")) {
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
} catch {
|
|
422
|
-
return col.label;
|
|
423
|
-
}
|
|
368
|
+
return ` {/* ${(() => {
|
|
369
|
+
if (col.label.endsWith("Id")) try {
|
|
370
|
+
return EntityManager.get(col.label.replace("Id", "")).title ?? col.label;
|
|
371
|
+
} catch {
|
|
372
|
+
return col.label;
|
|
424
373
|
}
|
|
425
374
|
return col.label;
|
|
426
|
-
})()
|
|
427
|
-
const labelName = getRelationNameFromColumnName(entityId, col.name);
|
|
428
|
-
return ` {/* ${label} */}
|
|
375
|
+
})()} */}
|
|
429
376
|
<div className="space-y-2">
|
|
430
|
-
<label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${
|
|
377
|
+
<label className="block text-xs mb-1 text-gray-600">{SD("entity.${entityId}.${getRelationNameFromColumnName(entityId, col.name)}")}</label>
|
|
431
378
|
${this.renderColumn(entityId, col)}
|
|
432
379
|
</div>`;
|
|
433
380
|
}).join("\n\n")}
|
|
@@ -462,7 +409,7 @@ ${columns.filter((col) => col.name !== "created_at").map((col) => {
|
|
|
462
409
|
};
|
|
463
410
|
}
|
|
464
411
|
};
|
|
465
|
-
|
|
466
412
|
//#endregion
|
|
467
413
|
export { Template__view_form };
|
|
468
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsieiIsInZhbHVlOiB1bmtub3duIiwiZW50aXR5IiwicmVsYXRpb25OYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RlbXBsYXRlL2ltcGxlbWVudGF0aW9ucy92aWV3X2Zvcm0udGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5pcXVlIH0gZnJvbSBcInJhZGFzaGlcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBSZW5kZXJpbmdOb2RlLCB0eXBlIFRlbXBsYXRlT3B0aW9ucyB9IGZyb20gXCIuLi8uLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHtcbiAgZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSxcbiAgZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUsXG4gIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lLFxufSBmcm9tIFwiLi4vaGVscGVyc1wiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcImVudW1cIiBhcyBjb25zdCwgZW51bUlkOiBpZCB9O1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIHJldHVybiB7IHR5cGU6IFwiZmtcIiBhcyBjb25zdCwgZW50aXR5SWQ6IHJlbFByb3Aud2l0aCB9O1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZrXCIgYXMgY29uc3QsIGVudGl0eUlkOiByZWxQcm9wLndpdGggfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZW5kZXJDb2x1bW4oZW50aXR5SWQ6IHN0cmluZywgY29sOiBSZW5kZXJpbmdOb2RlKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXJOYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGB7U0QoXCJlbnRpdHkuJHtlbnRpdHlJZH0uJHtwbGFjZWhvbGRlck5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICBjYXNlIFwic3RyaW5nLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICByZXR1cm4gYDxFbnVtU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGVudW09eyR7aWR9fVxuICAgICAgICAgICAgICAgICAgICBsYWJlbHM9eyR7aWR9TGFiZWx9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgY2FzZSBcInN0cmluZy1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGA8SWRBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjb25maWc9eyR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldD1cIkFcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7Tsnbjsp4Ag7ZmV7J24XG4gICAgICAgIGlmIChjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgICAgICByZXR1cm4gYDxJZEFzeW5jU2VsZWN0XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZz17JHtyZWxQcm9wLndpdGh9QXN5bmNJZENvbmZpZ31cbiAgICAgICAgICAgICAgICAgICAgc3Vic2V0PVwiQVwiXG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiICR7cmVnRXhwcn0gLz5gO1xuICAgIH1cbiAgfVxuXG4gIHJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1uczogUmVuZGVyaW5nTm9kZVtdKTogb2JqZWN0IHtcbiAgICByZXR1cm4gY29sdW1ucy5yZWR1Y2UoXG4gICAgICAocmVzdWx0LCBjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5vcHRpb25hbCkge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU6IHVua25vd247XG4gICAgICAgIGlmIChjb2wubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bWJlcikge1xuICAgICAgICAgIHZhbHVlID0gMDtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRW51bSkge1xuICAgICAgICAgIHZhbHVlID0gT2JqZWN0LmtleXMoY29sLnpvZFR5cGUuZW51bSlbMF07XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEJvb2xlYW4pIHtcbiAgICAgICAgICB2YWx1ZSA9IGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5jb3JlLiRab2RTdHJpbmcpIHtcbiAgICAgICAgICAvLyBOT1RFOiB6LlpvZFN0cmluZ+ycvOuhnCDruYTqtZDtlZjrqbQgei51cmwoKSwgei5lbWFpbCgpIOuTseydmCDtg4DsnoXsl5DshJwg66y47KCc6rCAIOyDneq4sOuvgOuhnCB6LmNvcmUuJFpvZFN0cmluZ+ycvOuhnCDruYTqtZDtlahcbiAgICAgICAgICAvLyBGSVhNRTogZW1haWzsnbTrgpggdXJsIO2DgOyehSDrk7Hsl5Ag64yA7ZWcIOyymOumrOqwgCDtlYTsmpTtlahcbiAgICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGV0aW1lXCIpIHtcbiAgICAgICAgICAgIHZhbHVlID0gXCJub3coKVwiO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwiXCI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RBcnJheSkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgICAgICAgIHZhbHVlID0ge307XG4gICAgICAgIH1cblxuICAgICAgICByZXN1bHRbY29sLm5hbWVdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9LFxuICAgICAge30gYXMgeyBba2V5OiBzdHJpbmddOiB1bmtub3duIH0sXG4gICAgKTtcbiAgfVxuXG4gIGFzeW5jIHJlbmRlcih7IGVudGl0eUlkIH06IFRlbXBsYXRlT3B0aW9uc1tcInZpZXdfZm9ybVwiXSkge1xuICAgIGNvbnN0IGVudGl0eSA9IEVudGl0eU1hbmFnZXIuZ2V0KGVudGl0eUlkKTtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgLy8gUEsg7YOA7J6FIOqwkOyngFxuICAgIGNvbnN0IHBrVHlwZSA9IGVudGl0eS5nZXRQa1R5cGUoKTtcbiAgICBjb25zdCBpZFRzVHlwZSA9IHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiID8gXCJzdHJpbmdcIiA6IFwibnVtYmVyXCI7XG4gICAgY29uc3QgaWRab2RUeXBlID1cbiAgICAgIHBrVHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBwa1R5cGUgPT09IFwidXVpZFwiID8gXCJ6LnN0cmluZygpLm9wdGlvbmFsKClcIiA6IFwiei5udW1iZXIoKS5vcHRpb25hbCgpXCI7XG5cbiAgICAvLyBTYXZlUGFyYW1zIO2DgOyeheydhCDroZzrk5ztlZjsl6wgc2F2ZVBhcmFtc05vZGUg7IOd7ISxXG4gICAgY29uc3QgeyBsb2FkVHlwZXMgfSA9IGF3YWl0IGltcG9ydChcIi4uLy4uL3N5bmNlci9tb2R1bGUtbG9hZGVyXCIpO1xuICAgIGNvbnN0IGxvYWRlZFR5cGVzID0gYXdhaXQgbG9hZFR5cGVzKCk7XG4gICAgY29uc3QgU2F2ZVBhcmFtc1pvZFR5cGUgPSBsb2FkZWRUeXBlc1tgJHtlbnRpdHlJZH1TYXZlUGFyYW1zYF07XG5cbiAgICBpZiAoIVNhdmVQYXJhbXNab2RUeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFNhdmVQYXJhbXMgZm9yICR7ZW50aXR5SWR9IG5vdCBmb3VuZC4gRGlkIHlvdSBydW4gJ3NvbmFtdSBzeW5jJz9gKTtcbiAgICB9XG5cbiAgICAvLyBab2Qg7YOA7J6F7J2EIFJlbmRlcmluZ05vZGXroZwg67OA7ZmYXG4gICAgY29uc3QgeyB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi96b2QtY29udmVydGVyXCIpO1xuICAgIGNvbnN0IHNhdmVQYXJhbXNOb2RlID0gem9kVHlwZVRvUmVuZGVyaW5nTm9kZShTYXZlUGFyYW1zWm9kVHlwZSk7XG5cbiAgICBjb25zdCBjb2x1bW5zID0gKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSlcbiAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiaWRcIilcbiAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICBjb25zdCBwcm9wQ2FuZGlkYXRlID0gZW50aXR5LnByb3BzLmZpbmQoKHByb3ApID0+IHByb3AubmFtZSA9PT0gY29sLm5hbWUpO1xuICAgICAgICBjb2wubGFiZWwgPSBwcm9wQ2FuZGlkYXRlPy5kZXNjID8/IGNvbC5sYWJlbDtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gdGhpcy5yZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnMpO1xuXG4gICAgLy8gZW51beqzvCBGS+yXkCDrjIDtlZwgaW1wb3J0IOygleuztCDsiJjsp5FcbiAgICBjb25zdCBlbnVtSW1wb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IGZrQ29uZmlnSW1wb3J0cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgIGVudW1JbXBvcnRzLmFkZChpZCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiZcbiAgICAgICAgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRcIikgJiZcbiAgICAgICAgY29sLm5hbWUgIT09IFwiaWRcIlxuICAgICAgKSB7XG4gICAgICAgIC8vIHN0cmluZyBGSyDsspjrpqwgKOyekOyLoOydmCBQS+yduCBpZOuKlCDsoJzsmbgpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgLy8gTWFueVRvTWFueSByZWxhdGlvbuydmCBGSyDrsLDsl7RcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBiYXNlTmFtZSA9IGNvbC5uYW1lLnJlcGxhY2UoL19pZHMkLywgXCJcIik7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBiYXNlTmFtZSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEJ1dHRvbixcbiAgQ2FyZCxcbiAgQ2FyZENvbnRlbnQsXG4gIENhcmRIZWFkZXIsXG4gIENhcmRUaXRsZSxcbiAgSW5wdXQsJHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLXBsYWluXCIgJiYgY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApID4gMjU2KSA/IFwiXFxuICBUZXh0YXJlYSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikgPyBcIlxcbiAgRW51bVNlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHwgY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWZrX2lkXCIgfHwgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSkgPyBcIlxcbiAgSWRBc3luY1NlbGVjdCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiOyR7XG4gICAgICAgIGZrQ29uZmlnSW1wb3J0cy5zaXplID4gMFxuICAgICAgICAgID8gYFxcbmltcG9ydCB7ICR7QXJyYXkuZnJvbShma0NvbmZpZ0ltcG9ydHMpXG4gICAgICAgICAgICAgIC5tYXAoKGVudGl0eSkgPT4gYCR7ZW50aXR5fUFzeW5jSWRDb25maWdgKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpfSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO2BcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogJHtpZFpvZFR5cGV9LFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86ICR7aWRUc1R5cGV9O1xuICBtb2RlPzogXCJwYWdlXCIgfCBcIm1vZGFsXCI7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0oeyBpZCwgbW9kZSB9OiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzKSB7XG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpO1xuICBjb25zdCBxdWVyeUNsaWVudCA9IHVzZVF1ZXJ5Q2xpZW50KCk7XG5cbiAgY29uc3QgeyBmb3JtLCBzZXRGb3JtLCByZWdpc3RlciR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCIsIHN1Ym1pdFwiIDogXCJcIn0gfSA9IHVzZVR5cGVGb3JtKCR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zLCAke0pTT04uc3RyaW5naWZ5KGRlZmF1bHRWYWx1ZSkucmVwbGFjZSgvXCJub3dcXChcXClcIi9nLCAnXCJcIicpfSk7XG4keygoKSA9PiB7XG4gIGNvbnN0IGhhc0RhdGV0aW1lID0gY29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKTtcbiAgY29uc3QgaGFzRGF0ZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZVwiKTtcbiAgaWYgKCFoYXNEYXRldGltZSAmJiAhaGFzRGF0ZSkgcmV0dXJuIFwiXCI7XG5cbiAgbGV0IGhlbHBlcnMgPSBcIlxcblwiO1xuICBpZiAoaGFzRGF0ZXRpbWUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGV0aW1lLWxvY2FsIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tRERUSEg6TU0pXG4gIGNvbnN0IHRvRGF0ZXRpbWVMb2NhbFN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zbGljZSgwLCAxNik7XG4gIH07XG5cbiAgLy8gZGF0ZXRpbWUtbG9jYWwg66y47J6Q7Je07J2EIERhdGXroZwg67OA7ZmYXG4gIGNvbnN0IGZyb21EYXRldGltZUxvY2FsU3RyaW5nID0gKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHwgbnVsbCA9PiB7XG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbiAgfTtcbmA7XG4gIH1cbiAgaWYgKGhhc0RhdGUpIHtcbiAgICBoZWxwZXJzICs9IGAgIC8vIGRhdGUg7ZiV7Iud7Jy866GcIOuzgO2ZmCAoWVlZWS1NTS1ERClcbiAgY29uc3QgdG9EYXRlU3RyaW5nID0gKGRhdGU6IERhdGUgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogc3RyaW5nID0+IHtcbiAgICBpZiAoIWRhdGUpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IGQgPSB0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIiA/IG5ldyBEYXRlKGRhdGUpIDogZGF0ZTtcbiAgICByZXR1cm4gZC50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXTtcbiAgfTtcblxuICAvLyBkYXRlIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZVN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIHJldHVybiBoZWxwZXJzO1xufSkoKX1cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaWQpIHtcbiAgICAgICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLmdldCR7bmFtZXMuY2FwaXRhbH0oXCJBXCIsIGlkKS50aGVuKChyb3cpID0+IHtcbiAgICAgICAgc2V0Rm9ybSgocHJldkZvcm0pID0+ICh7XG4gICAgICAgICAgLi4ucHJldkZvcm0sXG4gICAgICAgICAgLi4ucm93LCR7KCgpID0+IHtcbiAgICAgICAgICAgIC8vIHJlbGF0aW9uIO2VhOuTnOuTpOydhCDssL7slYTshJwg67OA7ZmYIOy9lOuTnCDsg53shLFcbiAgICAgICAgICAgIC8vIG51bWJlciBGSywgc3RyaW5nIEZLICjsnpDsi6DsnZggUEsg7KCc7Jm4KSwgTWFueVRvTWFueSBGSyDrsLDsl7Trp4wg7ZWE7YSw66eBXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoY29sKSA9PlxuICAgICAgICAgICAgICAgICAgY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIgfHxcbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1hbnlUb01hbnkoYXJyYXkpIOyymOumrFxuICAgICAgICAgICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5tYXAoKHIpID0+IHIuaWQpID8/IFtdLGA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIEZLKG51bWJlciwgc3RyaW5nKSDsspjrpqxcbiAgICAgICAgICAgICAgICBjb25zdCByZWxhdGlvbk5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChjb2wubGFiZWwucmVwbGFjZShcIklkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gZW50aXR5LnRpdGxlID8/IGNvbC5sYWJlbDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICB9KSgpO1xuICAgIGNvbnN0IGxhYmVsTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgcmV0dXJuIGAgICAgICAgICAgICAgICAgey8qICR7bGFiZWx9ICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwiYmxvY2sgdGV4dC14cyBtYi0xIHRleHQtZ3JheS02MDBcIj57U0QoXCJlbnRpdHkuJHtlbnRpdHlJZH0uJHtsYWJlbE5hbWV9XCIpfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyQ29sdW1uKGVudGl0eUlkLCBjb2wpfVxuICAgICAgICAgICAgICAgIDwvZGl2PmA7XG4gIH0pXG4gIC5qb2luKFwiXFxuXFxuXCIpfVxuXG4gICAgICAgICAgICAgICAgey8qIFNhdmUgQnV0dG9uICovfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuIHB0LTRcIj5cbiAgICAgICAgICAgICAgICAgIHtmb3JtLmlkICYmIGZvcm0uY3JlYXRlZF9hdCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPVwibXItMiB0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj57U0QoXCJmb3JtLmNyZWF0ZWRBdFwiKX06PC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LXhzIHRleHQtZ3JheS02MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHtTdHJpbmcoZm9ybS5jcmVhdGVkX2F0KX1cbiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU3VibWl0fVxuICAgICAgICAgICAgICAgICAgICBpY29uPXs8U2F2ZUljb24gLz59XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5zYXZlXCIpfVxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9DYXJkQ29udGVudD5cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztxQkFHNEQ7Y0FPeEM7ZUFDbUI7QUFFdkMsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7QUFDWixRQUFNLFlBQVk7O0NBR3BCLGlCQUFpQixPQUEwQjtBQUN6QyxTQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLFNBQVM7R0FDekI7O0NBR0gsQUFBUyxzQkFBdUM7QUFDOUMsU0FBTztHQUFDO0dBQWlCO0dBQWU7R0FBcUI7R0FBa0I7R0FBYzs7Q0FHL0YsT0FBTyxNQUFjLE9BQXdCO0FBQzNDLFNBQU87R0FDTCw4QkFBOEIsUUFBUSxjQUFjLE1BQU0sWUFBWTtHQUN0RSxLQUFLO0dBQ0w7R0FDRCxDQUFDLEtBQUssS0FBSzs7Q0FFZCxPQUFPLE1BQWMsT0FBd0I7QUFDM0MsU0FBTyxLQUFLLE9BQU8sTUFBTSxNQUFNOztDQUdqQyxtQkFBbUIsVUFBa0IsS0FBb0I7QUFDdkQsTUFBSSxJQUFJLGVBQWUsU0FBUztHQUM5QixNQUFNLEVBQUUsT0FBTyx1QkFBdUIsVUFBVSxJQUFJLEtBQUs7QUFDekQsVUFBTztJQUFFLE1BQU07SUFBaUIsUUFBUTtJQUFJO2FBQ25DLElBQUksZUFBZSxrQkFBa0IsSUFBSSxlQUFlLGdCQUFnQjtBQUNqRixPQUFJO0lBQ0YsTUFBTSxVQUFVLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ2pGLFdBQU87S0FBRSxNQUFNO0tBQWUsVUFBVSxRQUFRO0tBQU07V0FDaEQ7QUFDTixXQUFPOzthQUVBLElBQUksZUFBZSxXQUFXLElBQUksS0FBSyxTQUFTLE9BQU8sRUFBRTtBQUVsRSxPQUFJO0lBQ0YsTUFBTSxXQUFXLElBQUksS0FBSyxRQUFRLFNBQVMsR0FBRztJQUM5QyxNQUFNLFVBQVUsMkJBQTJCLFVBQVUsU0FBUztBQUM5RCxXQUFPO0tBQUUsTUFBTTtLQUFlLFVBQVUsUUFBUTtLQUFNO1dBQ2hEO0FBQ04sV0FBTzs7O0FBR1gsU0FBTzs7Q0FHVCxhQUFhLFVBQWtCLEtBQTRCO0VBQ3pELE1BQU0sVUFBVSxpQkFBaUIsSUFBSSxLQUFLO0VBQzFDLE1BQU0sa0JBQWtCLDhCQUE4QixVQUFVLElBQUksS0FBSztFQUN6RSxNQUFNLGNBQWMsZUFBZSxTQUFTLEdBQUcsZ0JBQWdCO0FBRS9ELFVBQVEsSUFBSSxZQUFaO0dBQ0UsS0FBSyxlQUNILEtBQUksSUFBSSxtQkFBbUJBLElBQUUsY0FBYyxJQUFJLFFBQVEsYUFBYSxNQUFNLEtBQUs7QUFDN0UsV0FBTyx1REFBdUQsWUFBWSxHQUFHLFFBQVE7VUFDaEY7QUFDTCxXQUFPLCtEQUErRCxZQUFZLEdBQUcsUUFBUTs7R0FFakcsS0FBSyxXQUNILFFBQU87O3NCQUVPLFFBQVE7O0dBRXhCLEtBQUs7R0FDTCxLQUFLLFlBQ0gsUUFBTyx3QkFBd0IsUUFBUTtHQUN6QyxLQUFLLGVBQ0gsUUFBTyxxRUFBcUUsWUFBWSxHQUFHLFFBQVE7R0FDckcsS0FBSyxVQUNILFFBQU8sV0FBVyxRQUFRO0dBQzVCLEtBQUssa0JBQ0gsUUFBTzs7OztzQkFJTyxRQUFROztHQUV4QixLQUFLLHdCQUNILFFBQU87Ozs7OztzQkFNTyxRQUFROztHQUV4QixLQUFLLFFBQ0gsS0FBSTtJQUNGLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksS0FBSztBQUN6RCxXQUFPOzRCQUNXLEdBQUc7OEJBQ0QsR0FBRztzQkFDWCxRQUFROztXQUVkO0FBQ04sV0FBTywyQ0FBMkMsUUFBUTs7R0FFOUQsS0FBSztHQUNMLEtBQUssZUFDSCxLQUFJO0lBQ0YsTUFBTSxVQUFVLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ2pGLFdBQU87OEJBQ2EsUUFBUSxLQUFLOztzQkFFckIsUUFBUTs7V0FFZDtBQUNOLFdBQU8scUVBQXFFLFlBQVksR0FBRyxRQUFROztHQUV2RyxLQUFLO0FBRUgsUUFBSSxJQUFJLEtBQUssU0FBUyxPQUFPLEVBQUU7QUFDN0IsU0FBSTtNQUNGLE1BQU0sV0FBVyxJQUFJLEtBQUssUUFBUSxTQUFTLEdBQUc7TUFDOUMsTUFBTSxVQUFVLDJCQUEyQixVQUFVLFNBQVM7QUFDOUQsYUFBTzs4QkFDVyxRQUFRLEtBQUs7OztzQkFHckIsUUFBUTs7YUFFWjtBQUNOLGFBQU8sd0RBQXdELElBQUksS0FBSyxJQUFJLFFBQVE7OztBQUd4RixXQUFPLHdEQUF3RCxJQUFJLEtBQUssSUFBSSxRQUFRO0dBQ3RGLEtBQUssU0FDSCxRQUFPLHdEQUF3RCxJQUFJLEtBQUssSUFBSSxRQUFRO0dBQ3RGLFFBQ0UsUUFBTywyQ0FBMkMsUUFBUTs7O0NBSWhFLG9CQUFvQixTQUFrQztBQUNwRCxTQUFPLFFBQVEsUUFDWixRQUFRLFFBQVE7QUFDZixPQUFJLElBQUksVUFBVTtBQUNoQixXQUFPOztHQUdULElBQUlDO0FBQ0osT0FBSSxJQUFJLGFBQWEsTUFBTTtBQUN6QixZQUFRO2NBQ0MsSUFBSSxtQkFBbUJELElBQUUsV0FBVztBQUM3QyxZQUFRO2NBQ0MsSUFBSSxtQkFBbUJBLElBQUUsU0FBUztBQUMzQyxZQUFRLE9BQU8sS0FBSyxJQUFJLFFBQVEsS0FBSyxDQUFDO2NBQzdCLElBQUksbUJBQW1CQSxJQUFFLFlBQVk7QUFDOUMsWUFBUTtjQUNDLElBQUksbUJBQW1CQSxJQUFFLEtBQUssWUFBWTtBQUduRCxRQUFJLElBQUksZUFBZSxtQkFBbUI7QUFDeEMsYUFBUTtXQUNIO0FBQ0wsYUFBUTs7Y0FFRCxJQUFJLG1CQUFtQkEsSUFBRSxVQUFVO0FBQzVDLFlBQVEsRUFBRTtjQUNELElBQUksbUJBQW1CQSxJQUFFLFdBQVc7QUFDN0MsWUFBUSxFQUFFOztBQUdaLFVBQU8sSUFBSSxRQUFRO0FBQ25CLFVBQU87S0FFVCxFQUFFLENBQ0g7O0NBR0gsTUFBTSxPQUFPLEVBQUUsWUFBMEM7RUFDdkQsTUFBTSxTQUFTLGNBQWMsSUFBSSxTQUFTO0VBQzFDLE1BQU0sUUFBUSxjQUFjLGVBQWUsU0FBUztFQUdwRCxNQUFNLFNBQVMsT0FBTyxXQUFXO0VBQ2pDLE1BQU0sV0FBVyxXQUFXLFlBQVksV0FBVyxTQUFTLFdBQVc7RUFDdkUsTUFBTSxZQUNKLFdBQVcsWUFBWSxXQUFXLFNBQVMsMEJBQTBCO0VBR3ZFLE1BQU0sRUFBRSxjQUFjLE1BQU0sT0FBTztFQUNuQyxNQUFNLGNBQWMsTUFBTSxXQUFXO0VBQ3JDLE1BQU0sb0JBQW9CLFlBQVksR0FBRyxTQUFTO0FBRWxELE1BQUksQ0FBQyxtQkFBbUI7QUFDdEIsU0FBTSxJQUFJLE1BQU0sa0JBQWtCLFNBQVMsd0NBQXdDOztFQUlyRixNQUFNLEVBQUUsMkJBQTJCLE1BQU0sT0FBTztFQUNoRCxNQUFNLGlCQUFpQix1QkFBdUIsa0JBQWtCO0VBRWhFLE1BQU0sV0FBVyxnQkFBZ0IsWUFBWSxFQUFFLEVBQzVDLFFBQVEsUUFBUSxJQUFJLFNBQVMsS0FBSyxDQUNsQyxLQUFLLFFBQVE7R0FDWixNQUFNLGdCQUFnQixPQUFPLE1BQU0sTUFBTSxTQUFTLEtBQUssU0FBUyxJQUFJLEtBQUs7QUFDekUsT0FBSSxRQUFRLGVBQWUsUUFBUSxJQUFJO0FBQ3ZDLFVBQU87SUFDUDtFQUVKLE1BQU0sZUFBZSxLQUFLLG9CQUFvQixRQUFRO0VBR3RELE1BQU0sY0FBYyxJQUFJLEtBQWE7RUFDckMsTUFBTSxrQkFBa0IsSUFBSSxLQUFhO0FBRXpDLFVBQVEsU0FBUyxRQUFRO0FBQ3ZCLE9BQUksSUFBSSxlQUFlLFNBQVM7QUFDOUIsUUFBSTtLQUNGLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksS0FBSztBQUN6RCxpQkFBWSxJQUFJLEdBQUc7WUFDYjtjQUNDLElBQUksZUFBZSxrQkFBa0IsSUFBSSxlQUFlLGdCQUFnQjtBQUNqRixRQUFJO0tBQ0YsTUFBTSxVQUFVLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sR0FBRyxDQUFDO0FBQ2pGLHFCQUFnQixJQUFJLFFBQVEsS0FBSztZQUMzQjtjQUVSLElBQUksZUFBZSxrQkFDbkIsSUFBSSxLQUFLLFNBQVMsTUFBTSxJQUN4QixJQUFJLFNBQVMsTUFDYjtBQUVBLFFBQUk7S0FDRixNQUFNLFVBQVUsMkJBQTJCLFVBQVUsSUFBSSxLQUFLLFFBQVEsT0FBTyxHQUFHLENBQUM7QUFDakYscUJBQWdCLElBQUksUUFBUSxLQUFLO1lBQzNCO2NBQ0MsSUFBSSxlQUFlLFdBQVcsSUFBSSxLQUFLLFNBQVMsT0FBTyxFQUFFO0FBRWxFLFFBQUk7S0FDRixNQUFNLFdBQVcsSUFBSSxLQUFLLFFBQVEsU0FBUyxHQUFHO0tBQzlDLE1BQU0sVUFBVSwyQkFBMkIsVUFBVSxTQUFTO0FBQzlELHFCQUFnQixJQUFJLFFBQVEsS0FBSztZQUMzQjs7SUFFVjtBQUVGLFNBQU87R0FDTCxHQUFHLEtBQUssaUJBQWlCLE1BQU07R0FDL0IsTUFBTTs7Ozs7OztVQU9GLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxrQkFBa0IsSUFBSSxtQkFBbUJBLElBQUUsY0FBYyxJQUFJLFFBQVEsYUFBYSxLQUFLLElBQUksR0FBRyxrQkFBa0IsS0FBSyxRQUFRLE1BQU0sUUFBUSxJQUFJLGVBQWUsUUFBUSxHQUFHLG9CQUFvQixLQUFLLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxrQkFBa0IsSUFBSSxlQUFlLGtCQUFtQixJQUFJLGVBQWUsV0FBVyxJQUFJLEtBQUssU0FBUyxPQUFPLENBQUUsR0FBRyx1QkFBdUIsS0FBSyxRQUFRLE1BQU0sUUFBUSxJQUFJLGVBQWUsVUFBVSxHQUFHLGdCQUFnQixLQUFLLFFBQVEsTUFBTSxRQUFRLENBQUMsbUJBQW1CLHdCQUF3QixDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsR0FBRyxtQkFBbUIsS0FBSyxRQUFRLE1BQU0sUUFBUTtJQUFDO0lBQW1CO0lBQWU7SUFBVyxDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsR0FBRyxtQkFBbUIsR0FBRzs7Ozs7OztXQU81dEIsTUFBTSxRQUFRO2dCQUNULE1BQU0sUUFBUSwrQ0FDdEIsUUFBUSxRQUFRLFFBQVEsSUFBSSxlQUFlLFFBQVEsQ0FBQyxTQUFTLElBQ3pELGdCQUNBLE9BQ0UsUUFDRyxRQUFRLFFBQVEsSUFBSSxlQUFlLFFBQVEsQ0FDM0MsS0FBSyxRQUFRO0FBQ1osUUFBSTtLQUNGLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksS0FBSztBQUN6RCxZQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUc7WUFDZDtBQUNOLFlBQU87O0tBRVQsQ0FDTCxDQUNFLE9BQU8sUUFBUSxDQUNmLEtBQUssS0FBSyxHQUNiLDZDQUNBLEdBQ0w7O1dBRUksTUFBTSxRQUFRLGdDQUFnQyxNQUFNLEdBQUcsR0FBRyxNQUFNLEdBQUcsVUFDdEUsZ0JBQWdCLE9BQU8sSUFDbkIsY0FBYyxNQUFNLEtBQUssZ0JBQWdCLENBQ3RDLEtBQUssYUFBVyxHQUFHRSxTQUFPLGVBQWUsQ0FDekMsS0FBSyxLQUFLLENBQUMsNENBQ2QsR0FDTDs7Ozs7Ozs7UUFRQyxVQUFVOzs7K0NBRzZCLE1BQU0sU0FBUzs7ZUFFL0MsTUFBTSxjQUFjOzs7V0FHeEIsTUFBTSxjQUFjOztZQUVuQixNQUFNLGNBQWM7OztPQUd6QixNQUFNLGNBQWM7U0FDbEIsU0FBUzs7OztrQkFJQSxNQUFNLGNBQWMscUJBQXFCLE1BQU0sY0FBYzs7OzttQ0FJNUMsUUFBUSxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsd0JBQXdCLENBQUMsU0FBUyxJQUFJLFdBQVcsQ0FBQyxHQUFHLGFBQWEsR0FBRyxtQkFBbUIsTUFBTSxRQUFRLGNBQWMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxRQUFRLGNBQWMsT0FBSyxDQUFDO1NBQ2pQO0lBQ1AsTUFBTSxjQUFjLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxrQkFBa0I7SUFDL0UsTUFBTSxVQUFVLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxjQUFjO0FBQ3ZFLFFBQUksQ0FBQyxlQUFlLENBQUMsUUFBUyxRQUFPO0lBRXJDLElBQUksVUFBVTtBQUNkLFFBQUksYUFBYTtBQUNmLGdCQUFXOzs7Ozs7Ozs7Ozs7OztBQWNiLFFBQUksU0FBUztBQUNYLGdCQUFXOzs7Ozs7Ozs7Ozs7OztBQWNiLFdBQU87T0FDTCxDQUFDOzs7UUFHRyxNQUFNLFFBQVEsYUFBYSxNQUFNLFFBQVE7OzswQkFHdkI7SUFHZCxNQUFNLGlCQUFpQixRQUNwQixRQUNFLFFBQ0MsSUFBSSxlQUFlLGtCQUNuQixJQUFJLGVBQWUsa0JBQ2xCLElBQUksZUFBZSxXQUFXLElBQUksS0FBSyxTQUFTLE9BQU8sQ0FDM0QsQ0FDQSxLQUFLLFFBQVE7QUFFWixTQUFJLElBQUksZUFBZSxXQUFXLElBQUksS0FBSyxTQUFTLE9BQU8sRUFBRTtNQUMzRCxNQUFNQyxpQkFBZSw4QkFBOEIsVUFBVSxJQUFJLEtBQUs7QUFDdEUsYUFBTyxlQUFlLElBQUksS0FBSyxRQUFRQSxlQUFhOztLQUd0RCxNQUFNLGVBQWUsOEJBQThCLFVBQVUsSUFBSSxLQUFLO0FBQ3RFLFNBQUksSUFBSSxVQUFVO0FBQ2hCLGFBQU8sZUFBZSxJQUFJLEtBQUssUUFBUSxhQUFhO1lBQy9DO0FBQ0wsYUFBTyxlQUFlLElBQUksS0FBSyxRQUFRLGFBQWE7O01BRXRELENBQ0QsS0FBSyxHQUFHO0FBQ1gsV0FBTztPQUNMLENBQUM7Ozs7Ozt5QkFNVSxNQUFNLFFBQVE7eUJBRW5DLFFBQVEsTUFBTSxRQUFRLENBQUMsbUJBQW1CLHdCQUF3QixDQUFDLFNBQVMsSUFBSSxXQUFXLENBQUMsR0FDeEY7Ozs7OzswQkFNa0IsTUFBTSxRQUFROzs7Ozs7NENBTUksTUFBTSxTQUFTOzs7Ozs7UUFPbkQ7Ozs7OzswQkFNa0IsTUFBTSxRQUFROzs7Ozs7NENBTUksTUFBTSxTQUFTOzs7Ozs7S0FPeEQ7OzsrQ0FHNEMsU0FBUywyQ0FBMkMsU0FBUzs7Ozs7Ozs7Ozs7Ozs7OzsrREFnQjdDLE1BQU0sU0FBUzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQjVFLFFBQ0MsUUFBUSxRQUFRLElBQUksU0FBUyxhQUFhLENBQzFDLEtBQUssUUFBUTtJQUNaLE1BQU0sZUFBZTtBQUNuQixTQUFJLElBQUksTUFBTSxTQUFTLEtBQUssRUFBRTtBQUM1QixVQUFJO09BQ0YsTUFBTUQsV0FBUyxjQUFjLElBQUksSUFBSSxNQUFNLFFBQVEsTUFBTSxHQUFHLENBQUM7QUFDN0QsY0FBT0EsU0FBTyxTQUFTLElBQUk7Y0FDckI7QUFDTixjQUFPLElBQUk7OztBQUdmLFlBQU8sSUFBSTtRQUNUO0lBQ0osTUFBTSxZQUFZLDhCQUE4QixVQUFVLElBQUksS0FBSztBQUNuRSxXQUFPLHVCQUF1QixNQUFNOztvRkFFNEMsU0FBUyxHQUFHLFVBQVU7b0JBQ3RGLEtBQUssYUFBYSxVQUFVLElBQUksQ0FBQzs7S0FFakQsQ0FDRCxLQUFLLE9BQU8sQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBMkJSLE1BQU07R0FDUixZQUFZLEVBQUU7R0FDZiJ9
|
|
414
|
+
|
|
415
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19mb3JtLnRlbXBsYXRlLmpzIiwibmFtZXMiOlsieiJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVuaXF1ZSB9IGZyb20gXCJyYWRhc2hpXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG5pbXBvcnQgeyBFbnRpdHlNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7IHR5cGUgUmVuZGVyaW5nTm9kZSwgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7XG4gIGdldEVudW1JbmZvRnJvbUNvbE5hbWUsXG4gIGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lLFxuICBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZSxcbn0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19mb3JtIGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfZm9ybVwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL3JvdXRlcy9hZG1pblwiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnNQbHVyYWx9L2Zvcm0udHN4YCxcbiAgICB9O1xuICB9XG5cbiAgb3ZlcnJpZGUgZ2V0UmVxdWlyZWREaWN0S2V5cygpOiBzdHJpbmdbXSB8IG51bGwge1xuICAgIHJldHVybiBbXCJlbnRpdHkuY3JlYXRlXCIsIFwiZW50aXR5LmVkaXRcIiwgXCJjb21tb24uYmFja1RvTGlzdFwiLCBcImZvcm0uY3JlYXRlZEF0XCIsIFwiY29tbW9uLnNhdmVcIl07XG4gIH1cblxuICB3cmFwRkMoYm9keTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIFtcbiAgICAgIGA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPiR7bGFiZWwgPyBgXFxuICA8TGFiZWw+JHtsYWJlbH08L0xhYmVsPmAgOiBcIlwifWAsXG4gICAgICBgICAke2JvZHl9YCxcbiAgICAgIGA8L2Rpdj5gLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfVxuICB3cmFwRkcoYm9keTogc3RyaW5nLCBsYWJlbD86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcEZDKGJvZHksIGxhYmVsKTtcbiAgfVxuXG4gIHJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZDogc3RyaW5nLCBjb2w6IFJlbmRlcmluZ05vZGUpIHtcbiAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJlbnVtXCIgYXMgY29uc3QsIGVudW1JZDogaWQgfTtcbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICByZXR1cm4geyB0eXBlOiBcImZrXCIgYXMgY29uc3QsIGVudGl0eUlkOiByZWxQcm9wLndpdGggfTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAvLyBNYW55VG9NYW55IHJlbGF0aW9u7J2YIEZLIOuwsOyXtFxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGJhc2VOYW1lKTtcbiAgICAgICAgcmV0dXJuIHsgdHlwZTogXCJma1wiIGFzIGNvbnN0LCBlbnRpdHlJZDogcmVsUHJvcC53aXRoIH07XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSk6IHN0cmluZyB7XG4gICAgY29uc3QgcmVnRXhwciA9IGB7Li4ucmVnaXN0ZXIoXCIke2NvbC5uYW1lfVwiKX1gO1xuICAgIGNvbnN0IHBsYWNlaG9sZGVyTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7cGxhY2Vob2xkZXJOYW1lfVwiKX1gO1xuXG4gICAgc3dpdGNoIChjb2wucmVuZGVyVHlwZSkge1xuICAgICAgY2FzZSBcInN0cmluZy1wbGFpblwiOlxuICAgICAgICBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFN0cmluZyAmJiAoY29sLnpvZFR5cGUubWF4TGVuZ3RoID8/IDApIDw9IDI1Nikge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGA8VGV4dGFyZWEgY2xhc3NOYW1lPVwidGV4dC14cyBiZy13aGl0ZVwiIHJvd3M9ezR9IHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgICB9XG4gICAgICBjYXNlIFwiZGF0ZXRpbWVcIjpcbiAgICAgICAgcmV0dXJuIGA8RGF0ZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcIm51bWJlci1pZFwiOlxuICAgICAgY2FzZSBcInN0cmluZy1pZFwiOlxuICAgICAgICByZXR1cm4gYDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLXBsYWluXCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9ICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgcmV0dXJuIGA8U3dpdGNoICR7cmVnRXhwcn0gLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdXBsb2FkTW9kZT1cImxhenlcIlxuICAgICAgICAgICAgICAgICAgICB2aWV3TW9kZT1cImltYWdlXCJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlld1NpemU9XCJtZFwiXG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIjpcbiAgICAgICAgcmV0dXJuIGA8RmlsZUlucHV0XG4gICAgICAgICAgICAgICAgICAgIG11bHRpcGxlPXt0cnVlfVxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZXM9ezEwfVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwiZW51bXNcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgcmV0dXJuIGA8RW51bVNlbGVjdFxuICAgICAgICAgICAgICAgICAgICBlbnVtPXske2lkfX1cbiAgICAgICAgICAgICAgICAgICAgbGFiZWxzPXske2lkfUxhYmVsfVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJudW1iZXItZmtfaWRcIjpcbiAgICAgIGNhc2UgXCJzdHJpbmctZmtfaWRcIjpcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZWxQcm9wID0gZ2V0UmVsYXRpb25Qcm9wRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lLnJlcGxhY2UoXCJfaWRcIiwgXCJcIikpO1xuICAgICAgICAgIHJldHVybiBgPElkQXN5bmNTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnPXske3JlbFByb3Aud2l0aH1Bc3luY0lkQ29uZmlnfVxuICAgICAgICAgICAgICAgICAgICBzdWJzZXQ9XCJBXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je07J247KeAIO2ZleyduFxuICAgICAgICBpZiAoY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkcyQvLCBcIlwiKTtcbiAgICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIGA8SWRBc3luY1NlbGVjdFxuICAgICAgICAgICAgICAgICAgICBjb25maWc9eyR7cmVsUHJvcC53aXRofUFzeW5jSWRDb25maWd9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNldD1cIkFcIlxuICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICByZXR1cm4gYDxJbnB1dCBjbGFzc05hbWU9XCJoLTggdGV4dC14cyBiZy13aGl0ZVwiIHBsYWNlaG9sZGVyPVwiJHtjb2wubmFtZX1cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj1cIiR7Y29sLm5hbWV9XCIgJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFBLIO2DgOyehSDqsJDsp4BcbiAgICBjb25zdCBwa1R5cGUgPSBlbnRpdHkuZ2V0UGtUeXBlKCk7XG4gICAgY29uc3QgaWRUc1R5cGUgPSBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwic3RyaW5nXCIgOiBcIm51bWJlclwiO1xuICAgIGNvbnN0IGlkWm9kVHlwZSA9XG4gICAgICBwa1R5cGUgPT09IFwic3RyaW5nXCIgfHwgcGtUeXBlID09PSBcInV1aWRcIiA/IFwiei5zdHJpbmcoKS5vcHRpb25hbCgpXCIgOiBcInoubnVtYmVyKCkub3B0aW9uYWwoKVwiO1xuXG4gICAgLy8gU2F2ZVBhcmFtcyDtg4DsnoXsnYQg66Gc65Oc7ZWY7JesIHNhdmVQYXJhbXNOb2RlIOyDneyEsVxuICAgIGNvbnN0IHsgbG9hZFR5cGVzIH0gPSBhd2FpdCBpbXBvcnQoXCIuLi8uLi9zeW5jZXIvbW9kdWxlLWxvYWRlclwiKTtcbiAgICBjb25zdCBsb2FkZWRUeXBlcyA9IGF3YWl0IGxvYWRUeXBlcygpO1xuICAgIGNvbnN0IFNhdmVQYXJhbXNab2RUeXBlID0gbG9hZGVkVHlwZXNbYCR7ZW50aXR5SWR9U2F2ZVBhcmFtc2BdO1xuXG4gICAgaWYgKCFTYXZlUGFyYW1zWm9kVHlwZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBTYXZlUGFyYW1zIGZvciAke2VudGl0eUlkfSBub3QgZm91bmQuIERpZCB5b3UgcnVuICdzb25hbXUgc3luYyc/YCk7XG4gICAgfVxuXG4gICAgLy8gWm9kIO2DgOyeheydhCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmFxuICAgIGNvbnN0IHsgem9kVHlwZVRvUmVuZGVyaW5nTm9kZSB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vem9kLWNvbnZlcnRlclwiKTtcbiAgICBjb25zdCBzYXZlUGFyYW1zTm9kZSA9IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoU2F2ZVBhcmFtc1pvZFR5cGUpO1xuXG4gICAgY29uc3QgY29sdW1ucyA9IChzYXZlUGFyYW1zTm9kZT8uY2hpbGRyZW4gPz8gW10pXG4gICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImlkXCIpXG4gICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcENhbmRpZGF0ZSA9IGVudGl0eS5wcm9wcy5maW5kKChwcm9wKSA9PiBwcm9wLm5hbWUgPT09IGNvbC5uYW1lKTtcbiAgICAgICAgY29sLmxhYmVsID0gcHJvcENhbmRpZGF0ZT8uZGVzYyA/PyBjb2wubGFiZWw7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHRoaXMucmVzb2x2ZURlZmF1bHRWYWx1ZShjb2x1bW5zKTtcblxuICAgIC8vIGVudW3qs7wgRkvsl5Ag64yA7ZWcIGltcG9ydCDsoJXrs7Qg7IiY7KeRXG4gICAgY29uc3QgZW51bUltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBjb25zdCBma0NvbmZpZ0ltcG9ydHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICBlbnVtSW1wb3J0cy5hZGQoaWQpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVsUHJvcCA9IGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICBma0NvbmZpZ0ltcG9ydHMuYWRkKHJlbFByb3Aud2l0aCk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmXG4gICAgICAgIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpICYmXG4gICAgICAgIGNvbC5uYW1lICE9PSBcImlkXCJcbiAgICAgICkge1xuICAgICAgICAvLyBzdHJpbmcgRksg7LKY66asICjsnpDsi6DsnZggUEvsnbggaWTripQg7KCc7Jm4KVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgZmtDb25maWdJbXBvcnRzLmFkZChyZWxQcm9wLndpdGgpO1xuICAgICAgICB9IGNhdGNoIHt9XG4gICAgICB9IGVsc2UgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSB7XG4gICAgICAgIC8vIE1hbnlUb01hbnkgcmVsYXRpb27snZggRksg67Cw7Je0XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgYmFzZU5hbWUgPSBjb2wubmFtZS5yZXBsYWNlKC9faWRzJC8sIFwiXCIpO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgYmFzZU5hbWUpO1xuICAgICAgICAgIGZrQ29uZmlnSW1wb3J0cy5hZGQocmVsUHJvcC53aXRoKTtcbiAgICAgICAgfSBjYXRjaCB7fVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuZ2V0VGFyZ2V0QW5kUGF0aChuYW1lcyksXG4gICAgICBib2R5OiBgXG5pbXBvcnQge1xuICBCdXR0b24sXG4gIENhcmQsXG4gIENhcmRDb250ZW50LFxuICBDYXJkSGVhZGVyLFxuICBDYXJkVGl0bGUsXG4gIElucHV0LCR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1wbGFpblwiICYmIGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RTdHJpbmcgJiYgKGNvbC56b2RUeXBlLm1heExlbmd0aCA/PyAwKSA+IDI1NikgPyBcIlxcbiAgVGV4dGFyZWEsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpID8gXCJcXG4gIEVudW1TZWxlY3QsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1ma19pZFwiIHx8IChjb2wucmVuZGVyVHlwZSA9PT0gXCJhcnJheVwiICYmIGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkc1wiKSkpID8gXCJcXG4gIElkQXN5bmNTZWxlY3QsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImJvb2xlYW5cIikgPyBcIlxcbiAgU3dpdGNoLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiXFxuICBGaWxlSW5wdXQsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcInN0cmluZy1kYXRldGltZVwiLCBcInN0cmluZy1kYXRlXCIsIFwiZGF0ZXRpbWVcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiXFxuICBEYXRlSW5wdXQsXCIgOiBcIlwifVxufSBmcm9tIFwiQHNvbmFtdS1raXQvcmVhY3QtY29tcG9uZW50cy9jb21wb25lbnRzXCI7XG5pbXBvcnQgeyB1c2VUeXBlRm9ybSB9IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2xpYlwiO1xuaW1wb3J0IHsgdXNlUXVlcnlDbGllbnQgfSBmcm9tIFwiQHRhbnN0YWNrL3JlYWN0LXF1ZXJ5XCI7XG5pbXBvcnQgeyBjcmVhdGVGaWxlUm91dGUsIHVzZVJvdXRlciB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3Qtcm91dGVyXCI7XG5pbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5pbXBvcnQgeyAke25hbWVzLmNhcGl0YWx9U2VydmljZSB9IGZyb20gXCJAL3NlcnZpY2VzL3NlcnZpY2VzLmdlbmVyYXRlZFwiO1xuaW1wb3J0IHR5cGUgeyAke25hbWVzLmNhcGl0YWx9U3Vic2V0QSB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5nZW5lcmF0ZWRcIjske1xuICAgICAgICBjb2x1bW5zLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKS5sZW5ndGggPiAwXG4gICAgICAgICAgPyBcIlxcbmltcG9ydCB7IFwiICtcbiAgICAgICAgICAgIHVuaXF1ZShcbiAgICAgICAgICAgICAgY29sdW1uc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiZW51bXNcIilcbiAgICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgaWQgfSA9IGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGAke2lkfSwgJHtpZH1MYWJlbGA7XG4gICAgICAgICAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5maWx0ZXIoQm9vbGVhbilcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKSArXG4gICAgICAgICAgICAnIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOydcbiAgICAgICAgICA6IFwiXCJcbiAgICAgIH1cbmltcG9ydCB7IGRlZmF1bHRDYXRjaCB9IGZyb20gXCJAL3NlcnZpY2VzL3NvbmFtdS5zaGFyZWRcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TYXZlUGFyYW1zIH0gZnJvbSBcIkAvc2VydmljZXMvJHtuYW1lcy5mc30vJHtuYW1lcy5mc30udHlwZXNcIjske1xuICAgICAgICBma0NvbmZpZ0ltcG9ydHMuc2l6ZSA+IDBcbiAgICAgICAgICA/IGBcXG5pbXBvcnQgeyAke0FycmF5LmZyb20oZmtDb25maWdJbXBvcnRzKVxuICAgICAgICAgICAgICAubWFwKChlbnRpdHkpID0+IGAke2VudGl0eX1Bc3luY0lkQ29uZmlnYClcbiAgICAgICAgICAgICAgLmpvaW4oXCIsIFwiKX0gfSBmcm9tIFwiQC9zZXJ2aWNlcy9zZXJ2aWNlcy5nZW5lcmF0ZWRcIjtgXG4gICAgICAgICAgOiBcIlwiXG4gICAgICB9XG5pbXBvcnQgeyBTRCB9IGZyb20gXCJAL2kxOG4vc2QuZ2VuZXJhdGVkXCI7XG5cbmltcG9ydCBBcnJvd0xlZnRJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL2Fycm93LWxlZnRcIjtcbmltcG9ydCBTYXZlSWNvbiBmcm9tIFwifmljb25zL2x1Y2lkZS9zYXZlXCI7XG5pbXBvcnQgRm9ybUljb24gZnJvbSBcIn5pY29ucy9tZGkvZm9ybS1zZWxlY3RcIjtcblxuY29uc3QgZm9ybVNlYXJjaFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6ICR7aWRab2RUeXBlfSxcbn0pO1xuXG5leHBvcnQgY29uc3QgUm91dGUgPSBjcmVhdGVGaWxlUm91dGUoXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH0vZm9ybVwiKSh7XG4gIHZhbGlkYXRlU2VhcmNoOiBmb3JtU2VhcmNoU2NoZW1hLFxuICBjb21wb25lbnQ6ICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSxcbn0pO1xuXG5mdW5jdGlvbiAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVBhZ2UoKSB7XG4gIGNvbnN0IHsgaWQgfSA9IFJvdXRlLnVzZVNlYXJjaCgpO1xuICByZXR1cm4gPCR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtIGlkPXtpZH0gLz47XG59XG5cbnR5cGUgJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcyA9IHtcbiAgaWQ/OiAke2lkVHNUeXBlfTtcbiAgbW9kZT86IFwicGFnZVwiIHwgXCJtb2RhbFwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtKHsgaWQsIG1vZGUgfTogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcykge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgZm9ybSwgc2V0Rm9ybSwgcmVnaXN0ZXIke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiLCBzdWJtaXRcIiA6IFwiXCJ9IH0gPSB1c2VUeXBlRm9ybSgke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcywgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0VmFsdWUpLnJlcGxhY2UoL1wibm93XFwoXFwpXCIvZywgJ1wiXCInKX0pO1xuJHsoKCkgPT4ge1xuICBjb25zdCBoYXNEYXRldGltZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIik7XG4gIGNvbnN0IGhhc0RhdGUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGVcIik7XG4gIGlmICghaGFzRGF0ZXRpbWUgJiYgIWhhc0RhdGUpIHJldHVybiBcIlwiO1xuXG4gIGxldCBoZWxwZXJzID0gXCJcXG5cIjtcbiAgaWYgKGhhc0RhdGV0aW1lKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRldGltZS1sb2NhbCDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREVEhIOk1NKVxuICBjb25zdCB0b0RhdGV0aW1lTG9jYWxTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpO1xuICB9O1xuXG4gIC8vIGRhdGV0aW1lLWxvY2FsIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZXRpbWVMb2NhbFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIGlmIChoYXNEYXRlKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRlIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tREQpXG4gIGNvbnN0IHRvRGF0ZVN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH07XG5cbiAgLy8gZGF0ZSDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGVTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICByZXR1cm4gaGVscGVycztcbn0pKCl9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KFwiQVwiLCBpZCkudGhlbigocm93KSA9PiB7XG4gICAgICAgIHNldEZvcm0oKHByZXZGb3JtKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZGb3JtLFxuICAgICAgICAgIC4uLnJvdywkeygoKSA9PiB7XG4gICAgICAgICAgICAvLyByZWxhdGlvbiDtlYTrk5zrk6TsnYQg7LC+7JWE7IScIOuzgO2ZmCDsvZTrk5wg7IOd7ISxXG4gICAgICAgICAgICAvLyBudW1iZXIgRkssIHN0cmluZyBGSyAo7J6Q7Iug7J2YIFBLIOygnOyZuCksIE1hbnlUb01hbnkgRksg67Cw7Je066eMIO2VhO2EsOungVxuICAgICAgICAgICAgY29uc3QgcmVsYXRpb25GaWVsZHMgPSBjb2x1bW5zXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKGNvbCkgPT5cbiAgICAgICAgICAgICAgICAgIGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1ma19pZFwiIHx8XG4gICAgICAgICAgICAgICAgICBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZmtfaWRcIiB8fFxuICAgICAgICAgICAgICAgICAgKGNvbC5yZW5kZXJUeXBlID09PSBcImFycmF5XCIgJiYgY29sLm5hbWUuZW5kc1dpdGgoXCJfaWRzXCIpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNYW55VG9NYW55KGFycmF5KSDsspjrpqxcbiAgICAgICAgICAgICAgICBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwiYXJyYXlcIiAmJiBjb2wubmFtZS5lbmRzV2l0aChcIl9pZHNcIikpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGF0aW9uTmFtZSA9IGdldFJlbGF0aW9uTmFtZUZyb21Db2x1bW5OYW1lKGVudGl0eUlkLCBjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8ubWFwKChyKSA9PiByLmlkKSA/PyBbXSxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBGSyhudW1iZXIsIHN0cmluZykg7LKY66asXG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gZ2V0UmVsYXRpb25OYW1lRnJvbUNvbHVtbk5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sLm51bGxhYmxlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQgPz8gbnVsbCxgO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gYFxcbiAgICAgICAgICAke2NvbC5uYW1lfTogcm93LiR7cmVsYXRpb25OYW1lfT8uaWQsYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbGF0aW9uRmllbGRzO1xuICAgICAgICAgIH0pKCl9XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwgW2lkLCBzZXRGb3JtXSk7XG5cbiAgY29uc3Qgc2F2ZU11dGF0aW9uID0gJHtuYW1lcy5jYXBpdGFsfVNlcnZpY2UudXNlU2F2ZU11dGF0aW9uKCk7XG4gIGNvbnN0IGhhbmRsZVN1Ym1pdCA9ICR7XG4gICAgY29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpXG4gICAgICA/IGBzdWJtaXQoYXN5bmMgKGZvcm0pID0+IHtcbiAgICBzYXZlTXV0YXRpb24ubXV0YXRlKFxuICAgICAgeyBzcGE6IFtmb3JtXSB9LFxuICAgICAge1xuICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICBxdWVyeUNsaWVudC5pbnZhbGlkYXRlUXVlcmllcyh7XG4gICAgICAgICAgICBxdWVyeUtleTogW1wiJHtuYW1lcy5jYXBpdGFsfVwiXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGlmIChtb2RlID09PSBcIm1vZGFsXCIpIHtcbiAgICAgICAgICAgIC8vIG1vZGFsIG1vZGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBvbkVycm9yOiBkZWZhdWx0Q2F0Y2gsXG4gICAgICB9LFxuICAgICk7XG4gIH0pYFxuICAgICAgOiBgKCkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfWBcbiAgfTtcblxuICBjb25zdCBQQUdFID0ge1xuICAgIHRpdGxlOiBpZCA/IFNEKFwiZW50aXR5LmVkaXRcIikoU0QoXCJlbnRpdHkuJHtlbnRpdHlJZH1cIiksIGlkKSA6IFNEKFwiZW50aXR5LmNyZWF0ZVwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSksXG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXgtMSBvdmVyZmxvdy1hdXRvXCI+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cIm1heC13LVsxODAwcHhdIG14LWF1dG8gcC04XCI+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS02IG1iLThcIj5cbiAgICAgICAgICB7LyogSGVhZGVyICovfVxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgIDxGb3JtSWNvbiBjbGFzc05hbWU9XCJoLTUgdy01XCIgLz5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC1sZyBmb250LXNlbWlib2xkIGgtNVwiPntQQUdFLnRpdGxlfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAge21vZGUgIT09IFwibW9kYWxcIiAmJiAoXG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXG4gICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gcm91dGVyLm5hdmlnYXRlKHsgdG86IFwiL2FkbWluLyR7bmFtZXMuZnNQbHVyYWx9XCIgfSl9XG4gICAgICAgICAgICAgICAgaWNvbj17PEFycm93TGVmdEljb24gLz59XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uYmFja1RvTGlzdFwiKX1cbiAgICAgICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgey8qIEZvcm0gQ2FyZCAqL31cbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJib3JkZXItYm9yZGVyLzQwIGJnLWdyYXktNTAgc2hhZG93LXNtXCI+XG4gICAgICAgICAgICA8Q2FyZEhlYWRlciBjbGFzc05hbWU9XCJweC00IGJvcmRlci1iIGJvcmRlci1ncmF5LTIwMCBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8Q2FyZFRpdGxlIGNsYXNzTmFtZT1cInRleHQtc20gZm9udC1tZWRpdW0gbGVhZGluZy1ub25lIG0tMFwiPlxuICAgICAgICAgICAgICAgIHtQQUdFLnRpdGxlfVxuICAgICAgICAgICAgICA8L0NhcmRUaXRsZT5cbiAgICAgICAgICAgIDwvQ2FyZEhlYWRlcj5cbiAgICAgICAgICAgIDxDYXJkQ29udGVudCBjbGFzc05hbWU9XCJwLTZcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTZcIj5cbiR7Y29sdW1uc1xuICAuZmlsdGVyKChjb2wpID0+IGNvbC5uYW1lICE9PSBcImNyZWF0ZWRfYXRcIilcbiAgLm1hcCgoY29sKSA9PiB7XG4gICAgY29uc3QgbGFiZWwgPSAoKCkgPT4ge1xuICAgICAgaWYgKGNvbC5sYWJlbC5lbmRzV2l0aChcIklkXCIpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoY29sLmxhYmVsLnJlcGxhY2UoXCJJZFwiLCBcIlwiKSk7XG4gICAgICAgICAgcmV0dXJuIGVudGl0eS50aXRsZSA/PyBjb2wubGFiZWw7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBjb2wubGFiZWw7XG4gICAgfSkoKTtcbiAgICBjb25zdCBsYWJlbE5hbWUgPSBnZXRSZWxhdGlvbk5hbWVGcm9tQ29sdW1uTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgIHJldHVybiBgICAgICAgICAgICAgICAgIHsvKiAke2xhYmVsfSAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQteHMgbWItMSB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7bGFiZWxOYW1lfVwiKX08L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlckNvbHVtbihlbnRpdHlJZCwgY29sKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICB9KVxuICAuam9pbihcIlxcblxcblwiKX1cblxuICAgICAgICAgICAgICAgIHsvKiBTYXZlIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICB7Zm9ybS5pZCAmJiBmb3JtLmNyZWF0ZWRfYXQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cIm1yLTIgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZm9ybS5jcmVhdGVkQXRcIil9OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGZvcm0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uc2F2ZVwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztvQkFHMkQ7YUFPeEM7Y0FDbUI7QUFFdEMsSUFBYSxzQkFBYixjQUF5QyxTQUFTO0NBQ2hELGNBQWM7RUFDWixNQUFNLFdBQVc7Q0FDbkI7Q0FFQSxpQkFBaUIsT0FBMEI7RUFDekMsT0FBTztHQUNMLFFBQVE7R0FDUixNQUFNLEdBQUcsTUFBTSxTQUFTO0VBQzFCO0NBQ0Y7Q0FFQSxzQkFBZ0Q7RUFDOUMsT0FBTztHQUFDO0dBQWlCO0dBQWU7R0FBcUI7R0FBa0I7RUFBYTtDQUM5RjtDQUVBLE9BQU8sTUFBYyxPQUF3QjtFQUMzQyxPQUFPO0dBQ0wsOEJBQThCLFFBQVEsY0FBYyxNQUFNLFlBQVk7R0FDdEUsS0FBSztHQUNMO0VBQ0YsQ0FBQyxDQUFDLEtBQUssSUFBSTtDQUNiO0NBQ0EsT0FBTyxNQUFjLE9BQXdCO0VBQzNDLE9BQU8sS0FBSyxPQUFPLE1BQU0sS0FBSztDQUNoQztDQUVBLG1CQUFtQixVQUFrQixLQUFvQjtFQUN2RCxJQUFJLElBQUksZUFBZSxTQUFTO0dBQzlCLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksSUFBSTtHQUN4RCxPQUFPO0lBQUUsTUFBTTtJQUFpQixRQUFRO0dBQUc7RUFDN0MsT0FBTyxJQUFJLElBQUksZUFBZSxrQkFBa0IsSUFBSSxlQUFlLGdCQUNqRSxJQUFJO0dBRUYsT0FBTztJQUFFLE1BQU07SUFBZSxVQURkLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sRUFBRSxDQUN2QyxDQUFBLENBQVE7R0FBSztFQUN2RCxRQUFRO0dBQ04sT0FBTztFQUNUO09BQ0ssSUFBSSxJQUFJLGVBQWUsV0FBVyxJQUFJLEtBQUssU0FBUyxNQUFNLEdBRS9ELElBQUk7R0FHRixPQUFPO0lBQUUsTUFBTTtJQUFlLFVBRGQsMkJBQTJCLFVBRDFCLElBQUksS0FBSyxRQUFRLFNBQVMsRUFDVSxDQUNiLENBQUEsQ0FBUTtHQUFLO0VBQ3ZELFFBQVE7R0FDTixPQUFPO0VBQ1Q7RUFFRixPQUFPO0NBQ1Q7Q0FFQSxhQUFhLFVBQWtCLEtBQTRCO0VBQ3pELE1BQU0sVUFBVSxpQkFBaUIsSUFBSSxLQUFLO0VBRTFDLE1BQU0sY0FBYyxlQUFlLFNBQVMsR0FEcEIsOEJBQThCLFVBQVUsSUFBSSxJQUNyQixFQUFnQjtFQUUvRCxRQUFRLElBQUksWUFBWjtHQUNFLEtBQUssZ0JBQ0gsSUFBSSxJQUFJLG1CQUFtQkEsSUFBRSxjQUFjLElBQUksUUFBUSxhQUFhLE1BQU0sS0FDeEUsT0FBTyx1REFBdUQsWUFBWSxHQUFHLFFBQVE7UUFFckYsT0FBTywrREFBK0QsWUFBWSxHQUFHLFFBQVE7R0FFakcsS0FBSyxZQUNILE9BQU87O3NCQUVPLFFBQVE7O0dBRXhCLEtBQUs7R0FDTCxLQUFLLGFBQ0gsT0FBTyx3QkFBd0IsUUFBUTtHQUN6QyxLQUFLLGdCQUNILE9BQU8scUVBQXFFLFlBQVksR0FBRyxRQUFRO0dBQ3JHLEtBQUssV0FDSCxPQUFPLFdBQVcsUUFBUTtHQUM1QixLQUFLLG1CQUNILE9BQU87Ozs7c0JBSU8sUUFBUTs7R0FFeEIsS0FBSyx5QkFDSCxPQUFPOzs7Ozs7c0JBTU8sUUFBUTs7R0FFeEIsS0FBSyxTQUNILElBQUk7SUFDRixNQUFNLEVBQUUsT0FBTyx1QkFBdUIsVUFBVSxJQUFJLElBQUk7SUFDeEQsT0FBTzs0QkFDVyxHQUFHOzhCQUNELEdBQUc7c0JBQ1gsUUFBUTs7R0FFdEIsUUFBUTtJQUNOLE9BQU8sMkNBQTJDLFFBQVE7R0FDNUQ7R0FDRixLQUFLO0dBQ0wsS0FBSyxnQkFDSCxJQUFJO0lBRUYsT0FBTzs4QkFEUywyQkFBMkIsVUFBVSxJQUFJLEtBQUssUUFBUSxPQUFPLEVBQUUsQ0FFM0QsQ0FBQSxDQUFRLEtBQUs7O3NCQUVyQixRQUFROztHQUV0QixRQUFRO0lBQ04sT0FBTyxxRUFBcUUsWUFBWSxHQUFHLFFBQVE7R0FDckc7R0FDRixLQUFLO0lBRUgsSUFBSSxJQUFJLEtBQUssU0FBUyxNQUFNLEdBQzFCLElBQUk7S0FHRixPQUFPOzhCQURTLDJCQUEyQixVQUQxQixJQUFJLEtBQUssUUFBUSxTQUFTLEVBQ1UsQ0FFbkMsQ0FBQSxDQUFRLEtBQUs7OztzQkFHckIsUUFBUTs7SUFFcEIsUUFBUTtLQUNOLE9BQU8sd0RBQXdELElBQUksS0FBSyxJQUFJLFFBQVE7SUFDdEY7SUFFRixPQUFPLHdEQUF3RCxJQUFJLEtBQUssSUFBSSxRQUFRO0dBQ3RGLEtBQUssVUFDSCxPQUFPLHdEQUF3RCxJQUFJLEtBQUssSUFBSSxRQUFRO0dBQ3RGLFNBQ0UsT0FBTywyQ0FBMkMsUUFBUTtFQUM5RDtDQUNGO0NBRUEsb0JBQW9CLFNBQWtDO0VBQ3BELE9BQU8sUUFBUSxRQUNaLFFBQVEsUUFBUTtHQUNmLElBQUksSUFBSSxVQUNOLE9BQU87R0FHVCxJQUFJO0dBQ0osSUFBSSxJQUFJLGFBQWEsTUFDbkIsUUFBUTtRQUNILElBQUksSUFBSSxtQkFBbUJBLElBQUUsV0FDbEMsUUFBUTtRQUNILElBQUksSUFBSSxtQkFBbUJBLElBQUUsU0FDbEMsUUFBUSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxtQkFBbUJBLElBQUUsWUFDbEMsUUFBUTtRQUNILElBQUksSUFBSSxtQkFBbUJBLElBQUUsS0FBSyxZQUd2QyxJQUFJLElBQUksZUFBZSxtQkFDckIsUUFBUTtRQUVSLFFBQVE7UUFFTCxJQUFJLElBQUksbUJBQW1CQSxJQUFFLFVBQ2xDLFFBQVEsQ0FBQztRQUNKLElBQUksSUFBSSxtQkFBbUJBLElBQUUsV0FDbEMsUUFBUSxDQUFDO0dBR1gsT0FBTyxJQUFJLFFBQVE7R0FDbkIsT0FBTztFQUNULEdBQ0EsQ0FBQyxDQUNIO0NBQ0Y7Q0FFQSxNQUFNLE9BQU8sRUFBRSxZQUEwQztFQUN2RCxNQUFNLFNBQVMsY0FBYyxJQUFJLFFBQVE7RUFDekMsTUFBTSxRQUFRLGNBQWMsZUFBZSxRQUFRO0VBR25ELE1BQU0sU0FBUyxPQUFPLFVBQVU7RUFDaEMsTUFBTSxXQUFXLFdBQVcsWUFBWSxXQUFXLFNBQVMsV0FBVztFQUN2RSxNQUFNLFlBQ0osV0FBVyxZQUFZLFdBQVcsU0FBUywwQkFBMEI7RUFHdkUsTUFBTSxFQUFFLGNBQWMsTUFBTSxPQUFPO0VBRW5DLE1BQU0scUJBQW9CLE1BREEsVUFBVSxFQUNWLENBQVksR0FBRyxTQUFTO0VBRWxELElBQUksQ0FBQyxtQkFDSCxNQUFNLElBQUksTUFBTSxrQkFBa0IsU0FBUyx1Q0FBdUM7RUFJcEYsTUFBTSxFQUFFLDJCQUEyQixNQUFNLE9BQU87RUFHaEQsTUFBTSxXQUZpQix1QkFBdUIsaUJBRTdCLENBQUEsRUFBZ0IsWUFBWSxDQUFDLEVBQUEsQ0FDM0MsUUFBUSxRQUFRLElBQUksU0FBUyxJQUFJLENBQUMsQ0FDbEMsS0FBSyxRQUFRO0dBRVosSUFBSSxRQURrQixPQUFPLE1BQU0sTUFBTSxTQUFTLEtBQUssU0FBUyxJQUFJLElBQ3hELENBQUEsRUFBZSxRQUFRLElBQUk7R0FDdkMsT0FBTztFQUNULENBQUM7RUFFSCxNQUFNLGVBQWUsS0FBSyxvQkFBb0IsT0FBTztFQUdyRCxNQUFNLDhCQUFjLElBQUksSUFBWTtFQUNwQyxNQUFNLGtDQUFrQixJQUFJLElBQVk7RUFFeEMsUUFBUSxTQUFTLFFBQVE7R0FDdkIsSUFBSSxJQUFJLGVBQWUsU0FDckIsSUFBSTtJQUNGLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksSUFBSTtJQUN4RCxZQUFZLElBQUksRUFBRTtHQUNwQixRQUFRLENBQUM7UUFDSixJQUFJLElBQUksZUFBZSxrQkFBa0IsSUFBSSxlQUFlLGdCQUNqRSxJQUFJO0lBQ0YsTUFBTSxVQUFVLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sRUFBRSxDQUFDO0lBQ2hGLGdCQUFnQixJQUFJLFFBQVEsSUFBSTtHQUNsQyxRQUFRLENBQUM7UUFDSixJQUNMLElBQUksZUFBZSxrQkFDbkIsSUFBSSxLQUFLLFNBQVMsS0FBSyxLQUN2QixJQUFJLFNBQVMsTUFHYixJQUFJO0lBQ0YsTUFBTSxVQUFVLDJCQUEyQixVQUFVLElBQUksS0FBSyxRQUFRLE9BQU8sRUFBRSxDQUFDO0lBQ2hGLGdCQUFnQixJQUFJLFFBQVEsSUFBSTtHQUNsQyxRQUFRLENBQUM7UUFDSixJQUFJLElBQUksZUFBZSxXQUFXLElBQUksS0FBSyxTQUFTLE1BQU0sR0FFL0QsSUFBSTtJQUVGLE1BQU0sVUFBVSwyQkFBMkIsVUFEMUIsSUFBSSxLQUFLLFFBQVEsU0FBUyxFQUNVLENBQVE7SUFDN0QsZ0JBQWdCLElBQUksUUFBUSxJQUFJO0dBQ2xDLFFBQVEsQ0FBQztFQUViLENBQUM7RUFFRCxPQUFPO0dBQ0wsR0FBRyxLQUFLLGlCQUFpQixLQUFLO0dBQzlCLE1BQU07Ozs7Ozs7VUFPRixRQUFRLE1BQU0sUUFBUSxJQUFJLGVBQWUsa0JBQWtCLElBQUksbUJBQW1CQSxJQUFFLGNBQWMsSUFBSSxRQUFRLGFBQWEsS0FBSyxHQUFHLElBQUksa0JBQWtCLEtBQUssUUFBUSxNQUFNLFFBQVEsSUFBSSxlQUFlLE9BQU8sSUFBSSxvQkFBb0IsS0FBSyxRQUFRLE1BQU0sUUFBUSxJQUFJLGVBQWUsa0JBQWtCLElBQUksZUFBZSxrQkFBbUIsSUFBSSxlQUFlLFdBQVcsSUFBSSxLQUFLLFNBQVMsTUFBTSxDQUFFLElBQUksdUJBQXVCLEtBQUssUUFBUSxNQUFNLFFBQVEsSUFBSSxlQUFlLFNBQVMsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLE1BQU0sUUFBUSxDQUFDLG1CQUFtQix1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxtQkFBbUIsS0FBSyxRQUFRLE1BQU0sUUFBUTtJQUFDO0lBQW1CO0lBQWU7R0FBVSxDQUFDLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxJQUFJLG1CQUFtQixHQUFHOzs7Ozs7O1dBTzV0QixNQUFNLFFBQVE7Z0JBQ1QsTUFBTSxRQUFRLCtDQUN0QixRQUFRLFFBQVEsUUFBUSxJQUFJLGVBQWUsT0FBTyxDQUFDLENBQUMsU0FBUyxJQUN6RCxnQkFDQSxPQUNFLFFBQ0csUUFBUSxRQUFRLElBQUksZUFBZSxPQUFPLENBQUMsQ0FDM0MsS0FBSyxRQUFRO0lBQ1osSUFBSTtLQUNGLE1BQU0sRUFBRSxPQUFPLHVCQUF1QixVQUFVLElBQUksSUFBSTtLQUN4RCxPQUFPLEdBQUcsR0FBRyxJQUFJLEdBQUc7SUFDdEIsUUFBUTtLQUNOLE9BQU87SUFDVDtHQUNGLENBQUMsQ0FDTCxDQUFDLENBQ0UsT0FBTyxPQUFPLENBQUMsQ0FDZixLQUFLLElBQUksSUFDWiw2Q0FDQSxHQUNMOztXQUVJLE1BQU0sUUFBUSxnQ0FBZ0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLFVBQ3RFLGdCQUFnQixPQUFPLElBQ25CLGNBQWMsTUFBTSxLQUFLLGVBQWUsQ0FBQyxDQUN0QyxLQUFLLFdBQVcsR0FBRyxPQUFPLGNBQWMsQ0FBQyxDQUN6QyxLQUFLLElBQUksRUFBRSw0Q0FDZCxHQUNMOzs7Ozs7OztRQVFDLFVBQVU7OzsrQ0FHNkIsTUFBTSxTQUFTOztlQUUvQyxNQUFNLGNBQWM7OztXQUd4QixNQUFNLGNBQWM7O1lBRW5CLE1BQU0sY0FBYzs7O09BR3pCLE1BQU0sY0FBYztTQUNsQixTQUFTOzs7O2tCQUlBLE1BQU0sY0FBYyxxQkFBcUIsTUFBTSxjQUFjOzs7O21DQUk1QyxRQUFRLE1BQU0sUUFBUSxDQUFDLG1CQUFtQix1QkFBdUIsQ0FBQyxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxhQUFhLEdBQUcsbUJBQW1CLE1BQU0sUUFBUSxjQUFjLEtBQUssVUFBVSxZQUFZLENBQUMsQ0FBQyxRQUFRLGNBQWMsTUFBSSxFQUFFO1NBQ2pQO0lBQ1AsTUFBTSxjQUFjLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxpQkFBaUI7SUFDOUUsTUFBTSxVQUFVLFFBQVEsTUFBTSxRQUFRLElBQUksZUFBZSxhQUFhO0lBQ3RFLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxPQUFPO0lBRXJDLElBQUksVUFBVTtJQUNkLElBQUksYUFDRixXQUFXOzs7Ozs7Ozs7Ozs7O0lBY2IsSUFBSSxTQUNGLFdBQVc7Ozs7Ozs7Ozs7Ozs7SUFjYixPQUFPO0dBQ1QsRUFBQSxDQUFHLEVBQUU7OztRQUdHLE1BQU0sUUFBUSxhQUFhLE1BQU0sUUFBUTs7OzBCQUd2QjtJQXlCZCxPQXRCdUIsUUFDcEIsUUFDRSxRQUNDLElBQUksZUFBZSxrQkFDbkIsSUFBSSxlQUFlLGtCQUNsQixJQUFJLGVBQWUsV0FBVyxJQUFJLEtBQUssU0FBUyxNQUFNLENBQzNELENBQUMsQ0FDQSxLQUFLLFFBQVE7S0FFWixJQUFJLElBQUksZUFBZSxXQUFXLElBQUksS0FBSyxTQUFTLE1BQU0sR0FBRztNQUMzRCxNQUFNLGVBQWUsOEJBQThCLFVBQVUsSUFBSSxJQUFJO01BQ3JFLE9BQU8sZUFBZSxJQUFJLEtBQUssUUFBUSxhQUFhO0tBQ3REO0tBRUEsTUFBTSxlQUFlLDhCQUE4QixVQUFVLElBQUksSUFBSTtLQUNyRSxJQUFJLElBQUksVUFDTixPQUFPLGVBQWUsSUFBSSxLQUFLLFFBQVEsYUFBYTtVQUVwRCxPQUFPLGVBQWUsSUFBSSxLQUFLLFFBQVEsYUFBYTtJQUV4RCxDQUFDLENBQUMsQ0FDRCxLQUFLLEVBQ0Q7R0FDVCxFQUFBLENBQUcsRUFBRTs7Ozs7O3lCQU1VLE1BQU0sUUFBUTt5QkFFbkMsUUFBUSxNQUFNLFFBQVEsQ0FBQyxtQkFBbUIsdUJBQXVCLENBQUMsQ0FBQyxTQUFTLElBQUksVUFBVSxDQUFDLElBQ3ZGOzs7Ozs7MEJBTWtCLE1BQU0sUUFBUTs7Ozs7OzRDQU1JLE1BQU0sU0FBUzs7Ozs7O1FBT25EOzs7Ozs7MEJBTWtCLE1BQU0sUUFBUTs7Ozs7OzRDQU1JLE1BQU0sU0FBUzs7Ozs7O0tBT3hEOzs7K0NBRzRDLFNBQVMsMkNBQTJDLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7K0RBZ0I3QyxNQUFNLFNBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUI1RSxRQUNDLFFBQVEsUUFBUSxJQUFJLFNBQVMsWUFBWSxDQUFDLENBQzFDLEtBQUssUUFBUTtJQWFaLE9BQU8sOEJBWmM7S0FDbkIsSUFBSSxJQUFJLE1BQU0sU0FBUyxJQUFJLEdBQ3pCLElBQUk7TUFFRixPQURlLGNBQWMsSUFBSSxJQUFJLE1BQU0sUUFBUSxNQUFNLEVBQUUsQ0FDcEQsQ0FBQSxDQUFPLFNBQVMsSUFBSTtLQUM3QixRQUFRO01BQ04sT0FBTyxJQUFJO0tBQ2I7S0FFRixPQUFPLElBQUk7SUFDYixFQUFBLENBRThCLEVBQU07O29GQUU0QyxTQUFTLEdBSHZFLDhCQUE4QixVQUFVLElBQUksSUFHOEIsRUFBVTtvQkFDdEYsS0FBSyxhQUFhLFVBQVUsR0FBRyxFQUFFOztHQUVuRCxDQUFDLENBQUMsQ0FDRCxLQUFLLE1BQU0sRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O1FBMkJSLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { EntityManager, init_entity_manager } from "../../entity/entity-manager.js";
|
|
2
2
|
import { Template, init_template } from "../template.js";
|
|
3
|
-
|
|
4
3
|
//#region src/template/implementations/view_id_all_select.template.ts
|
|
5
4
|
init_entity_manager();
|
|
6
5
|
init_template();
|
|
@@ -31,7 +30,7 @@ ${JSON.stringify({
|
|
|
31
30
|
};
|
|
32
31
|
}
|
|
33
32
|
};
|
|
34
|
-
|
|
35
33
|
//#endregion
|
|
36
34
|
export { Template__view_id_all_select };
|
|
37
|
-
|
|
35
|
+
|
|
36
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hbGxfc2VsZWN0LnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgeyB0eXBlIEVudGl0eU5hbWVzUmVjb3JkIH0gZnJvbSBcIi4uLy4uL2VudGl0eS9lbnRpdHktbWFuYWdlclwiO1xuaW1wb3J0IHsgdHlwZSBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IFRlbXBsYXRlIH0gZnJvbSBcIi4uL3RlbXBsYXRlXCI7XG5cbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZV9fdmlld19pZF9hbGxfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYWxsX3NlbGVjdFwiKTtcbiAgfVxuXG4gIGdldFRhcmdldEFuZFBhdGgobmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRhcmdldDogXCJ3ZWIvc3JjL2NvbXBvbmVudHNcIixcbiAgICAgIHBhdGg6IGAke25hbWVzLmZzfS8ke25hbWVzLmNhcGl0YWx9SWRBbGxTZWxlY3QudHN4YCxcbiAgICB9O1xuICB9XG5cbiAgcmVuZGVyKHsgZW50aXR5SWQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hbGxfc2VsZWN0XCJdKSB7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuLypcbnZpZXdfaWRfYWxsX3NlbGVjdFxuJHtKU09OLnN0cmluZ2lmeSh7XG4gIGtleTogdGhpcy5rZXksXG4gIG9wdGlvbnM6IGVudGl0eUlkLFxufSl9XG4qL1xuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICB9O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7OztvQkFBMkQ7Y0FHckI7QUFFdEMsSUFBYSwrQkFBYixjQUFrRCxTQUFTO0NBQ3pELGNBQWM7RUFDWixNQUFNLG9CQUFvQjtDQUM1QjtDQUVBLGlCQUFpQixPQUEwQjtFQUN6QyxPQUFPO0dBQ0wsUUFBUTtHQUNSLE1BQU0sR0FBRyxNQUFNLEdBQUcsR0FBRyxNQUFNLFFBQVE7RUFDckM7Q0FDRjtDQUVBLE9BQU8sRUFBRSxZQUFtRDtFQUMxRCxNQUFNLFFBQVEsY0FBYyxlQUFlLFFBQVE7RUFFbkQsT0FBTztHQUNMLEdBQUcsS0FBSyxpQkFBaUIsS0FBSztHQUM5QixNQUFNOzs7RUFHVixLQUFLLFVBQVU7SUFDZixLQUFLLEtBQUs7SUFDVixTQUFTO0dBQ1gsQ0FBQyxFQUFFOztRQUVLLEtBQUs7R0FDUCxZQUFZLENBQUM7RUFDZjtDQUNGO0FBQ0YifQ==
|