semantifold 0.10.0 → 0.11.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/README.md +1 -1
- package/build/src/backends/kotlin.d.ts +1 -1
- package/build/src/backends/kotlin.js +2 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +29 -1
- package/build/src/frontends/java.d.ts.map +1 -1
- package/build/src/frontends/java.js +23 -1
- package/build/src/frontends/javascript-typescript.d.ts.map +1 -1
- package/build/src/frontends/javascript-typescript.js +45 -4
- package/build/src/frontends/php.d.ts.map +1 -1
- package/build/src/frontends/php.js +54 -3
- package/build/src/frontends/ruby.d.ts.map +1 -1
- package/build/src/frontends/ruby.js +55 -5
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +18 -6
- package/build/src/semantic/effects.js +3 -1
- package/build/src/semantic/provenance.d.ts.map +1 -1
- package/build/src/semantic/provenance.js +11 -1
- package/build/src/semantic/types.d.ts +52 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +14 -2
- package/build/src/semantic/validate.js +18 -1
- package/build/src/toolchains.js +3 -3
- package/docs/adr-expression-breadth.md +186 -0
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +11 -3
- package/docs/parser-qualification.md +1 -1
- package/docs/testing.md +2 -2
- package/package.json +1 -1
- package/src/backends/kotlin.js +1 -1
- package/src/backends/shared.js +30 -0
- package/src/frontends/java.js +24 -0
- package/src/frontends/javascript-typescript.js +49 -2
- package/src/frontends/php.js +61 -2
- package/src/frontends/ruby.js +62 -2
- package/src/language-registry.js +17 -5
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +8 -0
- package/src/semantic/types.js +14 -1
- package/src/semantic/validate.js +26 -0
- package/src/toolchains.js +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"language-registry.d.ts","sourceRoot":"","sources":["../../src/language-registry.js"],"names":[],"mappings":"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"}
|
|
@@ -159,6 +159,8 @@ export function createLanguageRegistry(candidateRecords) {
|
|
|
159
159
|
const featuresCandidate = candidate.features ?? {
|
|
160
160
|
closedRecords: false,
|
|
161
161
|
conditionControlledLoops: false,
|
|
162
|
+
conditionalExpressions: false,
|
|
163
|
+
stringInterpolation: false,
|
|
162
164
|
effectfulCapabilitiesAndResources: false,
|
|
163
165
|
generalFunctionsAndCalls: false,
|
|
164
166
|
immutableCollections: false,
|
|
@@ -170,9 +172,10 @@ export function createLanguageRegistry(candidateRecords) {
|
|
|
170
172
|
typeParametersAndGenerics: false
|
|
171
173
|
};
|
|
172
174
|
if (!isPlainObject(featuresCandidate) ||
|
|
173
|
-
Object.keys(featuresCandidate).sort().join(",") != "closedRecords,conditionControlledLoops,effectfulCapabilitiesAndResources,generalFunctionsAndCalls,immutableCollections,optionalValues,orderedListIteration,orderedMapIteration,referenceClasses,typeParametersAndGenerics,typedErrors" ||
|
|
175
|
+
Object.keys(featuresCandidate).sort().join(",") != "closedRecords,conditionControlledLoops,conditionalExpressions,effectfulCapabilitiesAndResources,generalFunctionsAndCalls,immutableCollections,optionalValues,orderedListIteration,orderedMapIteration,referenceClasses,stringInterpolation,typeParametersAndGenerics,typedErrors" ||
|
|
174
176
|
typeof featuresCandidate.closedRecords != "boolean" ||
|
|
175
177
|
typeof featuresCandidate.conditionControlledLoops != "boolean" ||
|
|
178
|
+
typeof featuresCandidate.conditionalExpressions != "boolean" ||
|
|
176
179
|
typeof featuresCandidate.effectfulCapabilitiesAndResources != "boolean" ||
|
|
177
180
|
typeof featuresCandidate.generalFunctionsAndCalls != "boolean" ||
|
|
178
181
|
typeof featuresCandidate.immutableCollections != "boolean" ||
|
|
@@ -180,6 +183,7 @@ export function createLanguageRegistry(candidateRecords) {
|
|
|
180
183
|
typeof featuresCandidate.orderedListIteration != "boolean" ||
|
|
181
184
|
typeof featuresCandidate.orderedMapIteration != "boolean" ||
|
|
182
185
|
typeof featuresCandidate.referenceClasses != "boolean" ||
|
|
186
|
+
typeof featuresCandidate.stringInterpolation != "boolean" ||
|
|
183
187
|
typeof featuresCandidate.typedErrors != "boolean" ||
|
|
184
188
|
typeof featuresCandidate.typeParametersAndGenerics != "boolean") {
|
|
185
189
|
invalidRegistry(`Registry record '${id}' has an invalid feature declaration.`, id);
|
|
@@ -187,6 +191,7 @@ export function createLanguageRegistry(candidateRecords) {
|
|
|
187
191
|
const features = deepFreeze(/** @type {import("./semantic/types.js").LanguageFeatureCapabilities} */ ({
|
|
188
192
|
closedRecords: featuresCandidate.closedRecords,
|
|
189
193
|
conditionControlledLoops: featuresCandidate.conditionControlledLoops,
|
|
194
|
+
conditionalExpressions: featuresCandidate.conditionalExpressions,
|
|
190
195
|
effectfulCapabilitiesAndResources: featuresCandidate.effectfulCapabilitiesAndResources,
|
|
191
196
|
generalFunctionsAndCalls: featuresCandidate.generalFunctionsAndCalls,
|
|
192
197
|
immutableCollections: featuresCandidate.immutableCollections,
|
|
@@ -194,6 +199,7 @@ export function createLanguageRegistry(candidateRecords) {
|
|
|
194
199
|
orderedListIteration: featuresCandidate.orderedListIteration,
|
|
195
200
|
orderedMapIteration: featuresCandidate.orderedMapIteration,
|
|
196
201
|
referenceClasses: featuresCandidate.referenceClasses,
|
|
202
|
+
stringInterpolation: featuresCandidate.stringInterpolation,
|
|
197
203
|
typedErrors: featuresCandidate.typedErrors,
|
|
198
204
|
typeParametersAndGenerics: featuresCandidate.typeParametersAndGenerics
|
|
199
205
|
}));
|
|
@@ -550,6 +556,8 @@ const records = [
|
|
|
550
556
|
features: {
|
|
551
557
|
closedRecords: false,
|
|
552
558
|
conditionControlledLoops: false,
|
|
559
|
+
conditionalExpressions: false,
|
|
560
|
+
stringInterpolation: false,
|
|
553
561
|
effectfulCapabilitiesAndResources: false,
|
|
554
562
|
generalFunctionsAndCalls: true,
|
|
555
563
|
immutableCollections: false,
|
|
@@ -573,6 +581,8 @@ const records = [
|
|
|
573
581
|
features: {
|
|
574
582
|
closedRecords: false,
|
|
575
583
|
conditionControlledLoops: false,
|
|
584
|
+
conditionalExpressions: false,
|
|
585
|
+
stringInterpolation: false,
|
|
576
586
|
effectfulCapabilitiesAndResources: false,
|
|
577
587
|
generalFunctionsAndCalls: true,
|
|
578
588
|
immutableCollections: false,
|
|
@@ -594,7 +604,7 @@ const records = [
|
|
|
594
604
|
artifactMultiplicity: "multiple",
|
|
595
605
|
binaryBackend: generateBrowserWasm,
|
|
596
606
|
defaultFilename: "program.wasm",
|
|
597
|
-
features: { closedRecords: false, conditionControlledLoops: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
607
|
+
features: { closedRecords: false, conditionControlledLoops: false, conditionalExpressions: false, stringInterpolation: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
598
608
|
id: "wasm",
|
|
599
609
|
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
600
610
|
mediaType: "application/wasm",
|
|
@@ -604,7 +614,7 @@ const records = [
|
|
|
604
614
|
acceptance: { stages: ["generate", "compile", "validate", "instantiate", "execute"], toolchains: ["android"] },
|
|
605
615
|
applicationBackend: generateAndroidApplication,
|
|
606
616
|
artifactMultiplicity: "multiple",
|
|
607
|
-
features: { closedRecords: false, conditionControlledLoops: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
617
|
+
features: { closedRecords: false, conditionControlledLoops: false, conditionalExpressions: false, stringInterpolation: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
608
618
|
id: "android",
|
|
609
619
|
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
610
620
|
roundTrip: false
|
|
@@ -613,7 +623,7 @@ const records = [
|
|
|
613
623
|
acceptance: { stages: ["generate"], toolchains: [] },
|
|
614
624
|
applicationBackend: generateIosApplication,
|
|
615
625
|
artifactMultiplicity: "multiple",
|
|
616
|
-
features: { closedRecords: false, conditionControlledLoops: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
626
|
+
features: { closedRecords: false, conditionControlledLoops: false, conditionalExpressions: false, stringInterpolation: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
617
627
|
id: "ios",
|
|
618
628
|
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
619
629
|
roundTrip: false
|
|
@@ -622,7 +632,7 @@ const records = [
|
|
|
622
632
|
acceptance: { stages: ["generate", "restore", "compile", "validate", "instantiate", "execute"], toolchains: ["flutter", "android"] },
|
|
623
633
|
applicationBackend: generateFlutterApplication,
|
|
624
634
|
artifactMultiplicity: "multiple",
|
|
625
|
-
features: { closedRecords: false, conditionControlledLoops: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
635
|
+
features: { closedRecords: false, conditionControlledLoops: false, conditionalExpressions: false, stringInterpolation: false, effectfulCapabilitiesAndResources: false, generalFunctionsAndCalls: false, immutableCollections: false, optionalValues: false, orderedListIteration: false, orderedMapIteration: false, referenceClasses: false, typedErrors: false, typeParametersAndGenerics: false },
|
|
626
636
|
id: "flutter",
|
|
627
637
|
mapping: { binaryRanges: true, richText: true, sourceMapV3: true },
|
|
628
638
|
roundTrip: false
|
|
@@ -645,6 +655,8 @@ function language(values) {
|
|
|
645
655
|
features: {
|
|
646
656
|
closedRecords: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
647
657
|
conditionControlledLoops: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
658
|
+
conditionalExpressions: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
659
|
+
stringInterpolation: ["php", "ruby", "javascript", "typescript"].includes(String(values.id)),
|
|
648
660
|
effectfulCapabilitiesAndResources: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
649
661
|
generalFunctionsAndCalls: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
650
662
|
immutableCollections: ["php", "ruby", "javascript", "typescript", "java"].includes(String(values.id)),
|
|
@@ -723,4 +735,4 @@ function deepFreeze(value) {
|
|
|
723
735
|
deepFreeze(nested);
|
|
724
736
|
return Object.freeze(value);
|
|
725
737
|
}
|
|
726
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RE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WUFBWSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFBO0FBRXRLOzs7R0FHRztBQUNILE1BQU0sWUFBWSxHQUFHLENBQUMsRUFBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUV4SDs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUU5RTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUV0RTs7O0dBR0c7QUFDSCxNQUFNLFlBQVksR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQTtBQUUxRTs7O0dBR0c7QUFDSCxNQUFNLFdBQVcsR0FBRyxDQUFDLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBQyxFQUFFLEVBQUUsQ0FBQyxRQUFR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cnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWMsIHVuc3VwcG9ydGVkUm9sZX0gZnJvbSBcIi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSmF2YX0gZnJvbSBcIi4vYmFja2VuZHMvamF2YS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlS290bGlufSBmcm9tIFwiLi9iYWNrZW5kcy9rb3RsaW4uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUNTaGFycFByb2plY3R9IGZyb20gXCIuL2JhY2tlbmRzL2NzaGFycC5qc1wiXG5pbXBvcnQge2NyZWF0ZUNTaGFycENoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvY3NoYXJwLWNoZWNrLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVHb01vZHVsZX0gZnJvbSBcIi4vYmFja2VuZHMvZ28uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVJ1c3RQcm9qZWN0fSBmcm9tIFwiLi9iYWNrZW5kcy9ydXN0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVTd2lmdH0gZnJvbSBcIi4vYmFja2VuZHMvc3dpZnQuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZURhcnRQYWNrYWdlfSBmcm9tIFwiLi9iYWNrZW5kcy9kYXJ0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVaaWdQcm9qZWN0fSBmcm9tIFwiLi9iYWNrZW5kcy96aWcuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUphdmFTY3JpcHR9IGZyb20gXCIuL2JhY2tlbmRzL2phdmFzY3JpcHQuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVBocH0gZnJvbSBcIi4vYmFja2VuZHMvcGhwLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVQeXRob259IGZyb20gXCIuL2JhY2tlbmRzL3B5dGhvbi5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUnVieX0gZnJvbSBcIi4vYmFja2VuZHMvcnVieS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlVHlwZVNjcmlwdH0gZnJvbSBcIi4vYmFja2VuZHMvdHlwZXNjcmlwdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQnJvd3Nlcldhc219IGZyb20gXCIuL2JhY2tlbmRzL3dhc20uanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUlvc0FwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9pb3MuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFuZHJvaWRBcHBsaWNhdGlvbn0gZnJvbSBcIi4vYmFja2VuZHMvYW5kcm9pZC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlRmx1dHRlckFwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9mbHV0dGVyLmpzXCJcbmltcG9ydCB7cGFyc2VKYXZhfSBmcm9tIFwiLi9mcm9udGVuZHMvamF2YS5qc1wiXG5pbXBvcnQge3BhcnNlS290bGlufSBmcm9tIFwiLi9mcm9udGVuZHMva290bGluLmpzXCJcbmltcG9ydCB7cGFyc2VDU2hhcnB9IGZyb20gXCIuL2Zyb250ZW5kcy9jc2hhcnAuanNcIlxuaW1wb3J0IHtwYXJzZUdvfSBmcm9tIFwiLi9mcm9udGVuZHMvZ28uanNcIlxuaW1wb3J0IHtwYXJzZVJ1c3R9IGZyb20gXCIuL2Zyb250ZW5kcy9ydXN0LmpzXCJcbmltcG9ydCB7cGFyc2VTd2lmdH0gZnJvbSBcIi4vZnJvbnRlbmRzL3N3aWZ0LmpzXCJcbmltcG9ydCB7cGFyc2VEYXJ0fSBmcm9tIFwiLi9mcm9udGVuZHMvZGFydC5qc1wiXG5pbXBvcnQge3BhcnNlWmlnfSBmcm9tIFwiLi9mcm9udGVuZHMvemlnLmpzXCJcbmltcG9ydCB7cGFyc2VDcHB9IGZyb20gXCIuL2Zyb250ZW5kcy9jcHAuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUNwcH0gZnJvbSBcIi4vYmFja2VuZHMvY3BwLmpzXCJcbmltcG9ydCB7cGFyc2VDfSBmcm9tIFwiLi9mcm9udGVuZHMvYy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQ1Byb2dyYW19IGZyb20gXCIuL2JhY2tlbmRzL2MuanNcIlxuaW1wb3J0IHtwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0fSBmcm9tIFwiLi9mcm9udGVuZHMvamF2YXNjcmlwdC10eXBlc2NyaXB0LmpzXCJcbmltcG9ydCB7cGFyc2VQaHB9IGZyb20gXCIuL2Zyb250ZW5kcy9waHAuanNcIlxuaW1wb3J0IHtwYXJzZVB5dGhvbn0gZnJvbSBcIi4vZnJvbnRlbmRzL3B5dGhvbi5qc1wiXG5pbXBvcnQge3BhcnNlUnVieX0gZnJvbSBcIi4vZnJvbnRlbmRzL3J1YnkuanNcIlxuaW1wb3J0IHtjcmVhdGVKYXZhQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9qYXZhLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlSmF2YVNjcmlwdENoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvamF2YXNjcmlwdC1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZUtvdGxpbkNoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMva290bGluLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlUGhwQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9waHAtY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVQeXRob25DaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3B5dGhvbi1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZVJ1YnlDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3J1YnktY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVUeXBlU2NyaXB0Q2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy90eXBlc2NyaXB0LWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlR29DaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL2dvLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ0NoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvYy1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZUNwcENoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvY3BwLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlUnVzdENoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvcnVzdC1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZVN3aWZ0Q2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9zd2lmdC1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZURhcnRDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL2RhcnQtY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVaaWdDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3ppZy1jaGVjay5qc1wiXG5cbmNvbnN0IHJlZ2lzdHJ5Um9sZXMgPSBPYmplY3QuZnJlZXplKFtcImZyb250ZW5kXCIsIFwidGV4dEJhY2tlbmRcIiwgXCJiaW5hcnlCYWNrZW5kXCIsIFwiYXBwbGljYXRpb25CYWNrZW5kXCIsIFwiaW50ZXJvcGVyYWJpbGl0eVwiXSlcbmNvbnN0IGFjY2VwdGFuY2VTdGFnZU9yZGVyID0gW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcInZhbGlkYXRlXCIsIFwiaW5zdGFudGlhdGVcIiwgXCJleGVjdXRlXCJdXG5jb25zdCBhY2NlcHRhbmNlU3RhZ2VzID0gbmV3IE1hcChhY2NlcHRhbmNlU3RhZ2VPcmRlci5tYXAoKHN0YWdlLCBpbmRleCkgPT4gW3N0YWdlLCBpbmRleF0pKVxuY29uc3QgZGV2ZWxvcGVyQ2hlY2tTdGFnZXMgPSBuZXcgU2V0KFtcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcInZhbGlkYXRlXCJdKVxuY29uc3QgcmVnaXN0cnlLZXlzID0gbmV3IFNldChbXG4gIFwiYWNjZXB0YW5jZVwiLCBcImFwcGxpY2F0aW9uQmFja2VuZFwiLCBcImFydGlmYWN0TXVsdGlwbGljaXR5XCIsIFwiYmluYXJ5QmFja2VuZFwiLCBcImNoZWNrXCIsIFwiZGVmYXVsdEZpbGVuYW1lXCIsIFwiZnJvbnRlbmRcIiwgXCJpZFwiLFxuICBcImZlYXR1cmVzXCIsIFwiaW50ZXJvcGVyYWJpbGl0eVwiLCBcIm1hcHBpbmdcIiwgXCJtZWRpYVR5cGVcIiwgXCJwcm92aWRlclwiLCBcInJvdW5kVHJpcFwiLCBcInRleHRCYWNrZW5kXCJcbl0pXG5cbi8qKiBAdHlwZWRlZiB7XCJmcm9udGVuZFwiIHwgXCJ0ZXh0QmFja2VuZFwiIHwgXCJiaW5hcnlCYWNrZW5kXCIgfCBcImFwcGxpY2F0aW9uQmFja2VuZFwiIHwgXCJpbnRlcm9wZXJhYmlsaXR5XCJ9IFJlZ2lzdHJ5Um9sZSAqL1xuLyoqIEB0eXBlZGVmIHsoLi4udmFsdWVzOiB1bmtub3duW10pID0+IHVua25vd259IFJlZ2lzdHJ5SW1wbGVtZW50YXRpb24gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBGcm9udGVuZElucHV0XG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRWZmZWN0Q2FwYWJpbGl0eURlY2xhcmF0aW9uW119IFtjYXBhYmlsaXRpZXNdIC0gQ29tcGlsZXItYXV0aG9yaXplZCBkZWNsYXJhdGlvbnMuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcHJvcGVydHkge3tpc0VudHJ5OiBib29sZWFuLCBmdW5jdGlvbnM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHJlY29yZHM6IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCBlcnJvcnM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2YWx1ZVJlY29yZHM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPn19IFtwcm9ncmFtXSAtIFByb2dyYW0gY29udmVyc2lvbiBjb250ZXh0LlxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIEZyb250ZW5kXG4gKiBAcGFyYW0ge0Zyb250ZW5kSW5wdXR9IGlucHV0IC0gRnJvbnRlbmQgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBMYW5ndWFnZVJlZ2lzdHJ5UmVjb3JkXG4gKiBAcHJvcGVydHkge3N0cmluZ30gaWQgLSBTdGFibGUgaWRlbnRpdHkuXG4gKiBAcHJvcGVydHkge3tzdGFnZXM6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlW10sIHRvb2xjaGFpbnM6IHN0cmluZ1tdfX0gYWNjZXB0YW5jZSAtIEFjY2VwdGFuY2UgZGVjbGFyYXRpb24uXG4gKiBAcHJvcGVydHkge1JlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlDaGVja1JlY29yZD59IGNoZWNrIC0gRGV2ZWxvcGVyLWNoZWNrIGRlY2xhcmF0aW9uLlxuICogQHByb3BlcnR5IHtcInNpbmdsZVwiIHwgXCJtdWx0aXBsZVwifSBhcnRpZmFjdE11bHRpcGxpY2l0eSAtIEFydGlmYWN0IG11bHRpcGxpY2l0eS5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZUZlYXR1cmVDYXBhYmlsaXRpZXN9IGZlYXR1cmVzIC0gU2VtYW50aWMgZmVhdHVyZSBjYXBhYmlsaXRpZXMuXG4gKiBAcHJvcGVydHkge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VNYXBwaW5nQ2FwYWJpbGl0aWVzfSBtYXBwaW5nIC0gTWFwcGluZyBjYXBhYmlsaXRpZXMuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IHJvdW5kVHJpcCAtIFJvdW5kLXRyaXAgZGVjbGFyYXRpb24uXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2RlZmF1bHRGaWxlbmFtZV0gLSBEZWZhdWx0IGJhY2tlbmQgZmlsZW5hbWUuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW21lZGlhVHlwZV0gLSBEZWZhdWx0IGJhY2tlbmQgbWVkaWEgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW3Byb3ZpZGVyXSAtIFRhcmdldCBob3N0IHN0ZGxpYiBwcm92aWRlci9uYXRpdmUtYmluZGluZyByb2xlLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbZnJvbnRlbmRdIC0gRnJvbnRlbmQgYWRhcHRlci5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW3RleHRCYWNrZW5kXSAtIFRleHQgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW2JpbmFyeUJhY2tlbmRdIC0gQmluYXJ5IGJhY2tlbmQuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFthcHBsaWNhdGlvbkJhY2tlbmRdIC0gQXBwbGljYXRpb24tYXJ0aWZhY3QgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW2ludGVyb3BlcmFiaWxpdHldIC0gSW50ZXJvcGVyYWJpbGl0eSBicmlkZ2UuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7UmVhZG9ubHk8e1xuICogICBhcnRpZmFjdHM6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXQsXG4gKiAgIGJ1aWxkUGF0aDogc3RyaW5nLFxuICogICBwcm9qZWN0SWQ6IHN0cmluZyxcbiAqICAgc291cmNlUGF0aDogc3RyaW5nLFxuICogICB0YXJnZXRJZDogc3RyaW5nLFxuICogICB0b29sczogcmVhZG9ubHkgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5EaXNjb3ZlcmVkVG9vbGNoYWluW11cbiAqIH0+fSBUYXJnZXRDaGVja1BsYW5Db250ZXh0XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgVGFyZ2V0Q2hlY2tQbGFuRmFjdG9yeVxuICogQHBhcmFtIHtUYXJnZXRDaGVja1BsYW5Db250ZXh0fSBjb250ZXh0IC0gRXhhY3Qgc3RhZ2VkIHRhcmdldCBjb250ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGFyZ2V0Q2hlY2tQbGFufSBJbW11dGFibGUgcGxhbi5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUmVnaXN0cnlDaGVja1JlY29yZFxuICogQHByb3BlcnR5IHtUYXJnZXRDaGVja1BsYW5GYWN0b3J5fSBbZmFjdG9yeV0gLSBUYXJnZXQtb3duZWQgcGxhbiBmYWN0b3J5IGZvciBzdXBwb3J0ZWQgY2hlY2tzLlxuICogQHByb3BlcnR5IHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZVtdfSBzdGFnZXMgLSBFeGFjdCBub24tZXhlY3V0aW5nIHN0YWdlcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gc3VwcG9ydGVkIC0gV2hldGhlciB0aGUgdGFyZ2V0IHN1cHBsaWVzIGEgY2hlY2sgcGxhbi5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IHRvb2xjaGFpbnMgLSBFeGFjdCBkZWNsYXJlZCBjYW5vbmljYWwgdG9vbGNoYWlucy5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUmVnaXN0cnlcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZUNhcGFiaWxpdGllc1tdfSBkZXNjcmlwdG9ycyAtIFB1YmxpYyBkZXNjcmlwdG9ycy5cbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgc3RyaW5nW119IGlkcyAtIFJlZ2lzdGVyZWQgSURzIGluIHN0YWJsZSBvcmRlci5cbiAqIEBwcm9wZXJ0eSB7KGlkOiBzdHJpbmcpID0+IFJlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlSZWNvcmQ+fSByZWNvcmQgLSBFeGFjdCByZWNvcmQgbG9va3VwLlxuICogQHByb3BlcnR5IHsoaWQ6IHN0cmluZywgcm9sZTogUmVnaXN0cnlSb2xlLCBsb2NhdGlvbj86IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24pID0+IFJlZ2lzdHJ5SW1wbGVtZW50YXRpb259IHJlc29sdmUgLSBSb2xlIGxvb2t1cC5cbiAqL1xuXG4vKipcbiAqIENvbnN0cnVjdHMgYW4gaW1tdXRhYmxlIHJvbGUgcmVnaXN0cnkgZnJvbSBvcmRlcmVkIHJlY29yZHMuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZVJlY29yZHMgLSBPcmRlcmVkIGxhbmd1YWdlIHJlY29yZHMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeT59IFJlZ2lzdHJ5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTGFuZ3VhZ2VSZWdpc3RyeShjYW5kaWRhdGVSZWNvcmRzKSB7XG4gIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZVJlY29yZHMpKSBpbnZhbGlkUmVnaXN0cnkoXCJSZWdpc3RyeSByZWNvcmRzIG11c3QgYmUgYW4gb3JkZXJlZCBkZW5zZSBhcnJheS5cIilcblxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFJlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlSZWNvcmQ+Pn0gKi9cbiAgY29uc3QgcmVjb3Jkc0J5SWQgPSBuZXcgTWFwKClcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzW119ICovXG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gW11cblxuICBmb3IgKGxldCByZWNvcmRJbmRleCA9IDA7IHJlY29yZEluZGV4IDwgY2FuZGlkYXRlUmVjb3Jkcy5sZW5ndGg7IHJlY29yZEluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBjYW5kaWRhdGVSZWNvcmRzW3JlY29yZEluZGV4XVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkpIGludmFsaWRSZWdpc3RyeShcIkV2ZXJ5IHJlZ2lzdHJ5IHJlY29yZCBtdXN0IGJlIGEgcGxhaW4gb2JqZWN0LlwiKVxuICAgIGNvbnN0IGlkID0gY2FuZGlkYXRlLmlkXG5cbiAgICBpZiAodHlwZW9mIGlkICE9IFwic3RyaW5nXCIgfHwgaWQubGVuZ3RoID09IDAgfHwgIS9eW2Etel1bYS16MC05LV0qJC91LnRlc3QoaWQpKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoXCJFdmVyeSByZWdpc3RyeSByZWNvcmQgcmVxdWlyZXMgYSBzdGFibGUgbG93ZXJjYXNlIElELlwiLCB0eXBlb2YgaWQgPT0gXCJzdHJpbmdcIiA/IGlkIDogdW5kZWZpbmVkKVxuICAgIH1cbiAgICBpZiAocmVjb3Jkc0J5SWQuaGFzKGlkKSkgaW52YWxpZFJlZ2lzdHJ5KGBEdXBsaWNhdGUgcmVnaXN0cnkgSUQgJyR7aWR9Jy5gLCBpZClcbiAgICBpZiAoT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5zb21lKChrZXkpID0+ICFyZWdpc3RyeUtleXMuaGFzKGtleSkpKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyB1bmtub3duIGZpZWxkcy5gLCBpZClcbiAgICBpZiAoY2FuZGlkYXRlLnByb3ZpZGVyICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGNhbmRpZGF0ZS5wcm92aWRlciAhPSBcImJvb2xlYW5cIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBhbiBpbnZhbGlkIHByb3ZpZGVyIHJvbGUuYCwgaWQpXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByb2xlIG9mIHJlZ2lzdHJ5Um9sZXMpIHtcbiAgICAgIGlmIChjYW5kaWRhdGVbcm9sZV0gIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgY2FuZGlkYXRlW3JvbGVdICE9IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJvbGUgJyR7cm9sZX0nIGZvciAnJHtpZH0nIG11c3QgYmUgYSBmdW5jdGlvbiB3aGVuIHByZXNlbnQuYCwgaWQpXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IGFydGlmYWN0TXVsdGlwbGljaXR5ID0gY2FuZGlkYXRlLmFydGlmYWN0TXVsdGlwbGljaXR5XG5cbiAgICBpZiAoYXJ0aWZhY3RNdWx0aXBsaWNpdHkgIT0gXCJzaW5nbGVcIiAmJiBhcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYXJ0aWZhY3QgbXVsdGlwbGljaXR5LmAsIGlkKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5yb3VuZFRyaXAgIT0gXCJib29sZWFuXCIpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgcmVxdWlyZXMgYSBCb29sZWFuIHJvdW5kLXRyaXAgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgY29uc3QgZmVhdHVyZXNDYW5kaWRhdGUgPSBjYW5kaWRhdGUuZmVhdHVyZXMgPz8ge1xuICAgICAgY2xvc2VkUmVjb3JkczogZmFsc2UsXG4gICAgICBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSxcbiAgICAgIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsXG4gICAgICBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsXG4gICAgICBvcHRpb25hbFZhbHVlczogZmFsc2UsXG4gICAgICBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgdHlwZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZmVhdHVyZXNDYW5kaWRhdGUpIHx8XG4gICAgICBPYmplY3Qua2V5cyhmZWF0dXJlc0NhbmRpZGF0ZSkuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiY2xvc2VkUmVjb3Jkcyxjb25kaXRpb25Db250cm9sbGVkTG9vcHMsZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzLGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyxpbW11dGFibGVDb2xsZWN0aW9ucyxvcHRpb25hbFZhbHVlcyxvcmRlcmVkTGlzdEl0ZXJhdGlvbixvcmRlcmVkTWFwSXRlcmF0aW9uLHJlZmVyZW5jZUNsYXNzZXMsdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljcyx0eXBlZEVycm9yc1wiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuY2xvc2VkUmVjb3JkcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmNvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmltbXV0YWJsZUNvbGxlY3Rpb25zICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUub3B0aW9uYWxWYWx1ZXMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5vcmRlcmVkTGlzdEl0ZXJhdGlvbiAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRNYXBJdGVyYXRpb24gIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5yZWZlcmVuY2VDbGFzc2VzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUudHlwZWRFcnJvcnMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGZlYXR1cmUgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IGZlYXR1cmVzID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VGZWF0dXJlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgY2xvc2VkUmVjb3JkczogZmVhdHVyZXNDYW5kaWRhdGUuY2xvc2VkUmVjb3JkcyxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmVhdHVyZXNDYW5kaWRhdGUuY29uZGl0aW9uQ29udHJvbGxlZExvb3BzLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmZWF0dXJlc0NhbmRpZGF0ZS5lZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXMsXG4gICAgICBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IGZlYXR1cmVzQ2FuZGlkYXRlLmdlbmVyYWxGdW5jdGlvbnNBbmRDYWxscyxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmZWF0dXJlc0NhbmRpZGF0ZS5pbW11dGFibGVDb2xsZWN0aW9ucyxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBmZWF0dXJlc0NhbmRpZGF0ZS5vcHRpb25hbFZhbHVlcyxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmZWF0dXJlc0NhbmRpZGF0ZS5vcmRlcmVkTGlzdEl0ZXJhdGlvbixcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRNYXBJdGVyYXRpb24sXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmZWF0dXJlc0NhbmRpZGF0ZS5yZWZlcmVuY2VDbGFzc2VzLFxuICAgICAgdHlwZWRFcnJvcnM6IGZlYXR1cmVzQ2FuZGlkYXRlLnR5cGVkRXJyb3JzLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmVhdHVyZXNDYW5kaWRhdGUudHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljc1xuICAgIH0pKVxuICAgIGNvbnN0IG1hcHBpbmdDYW5kaWRhdGUgPSBjYW5kaWRhdGUubWFwcGluZ1xuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KG1hcHBpbmdDYW5kaWRhdGUpKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIG1hcHBpbmcgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgY29uc3QgbWFwcGluZ1NuYXBzaG90ID0ge1xuICAgICAgYmluYXJ5UmFuZ2VzOiBtYXBwaW5nQ2FuZGlkYXRlLmJpbmFyeVJhbmdlcyxcbiAgICAgIHJpY2hUZXh0OiBtYXBwaW5nQ2FuZGlkYXRlLnJpY2hUZXh0LFxuICAgICAgc291cmNlTWFwVjM6IG1hcHBpbmdDYW5kaWRhdGUuc291cmNlTWFwVjNcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1hcHBpbmdTbmFwc2hvdC5yaWNoVGV4dCAhPSBcImJvb2xlYW5cIiB8fCB0eXBlb2YgbWFwcGluZ1NuYXBzaG90LnNvdXJjZU1hcFYzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgbWFwcGluZ1NuYXBzaG90LmJpbmFyeVJhbmdlcyAhPSBcImJvb2xlYW5cIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgYW4gaW52YWxpZCBtYXBwaW5nIGRlY2xhcmF0aW9uLmAsIGlkKVxuICAgIH1cbiAgICBjb25zdCBtYXBwaW5nID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VNYXBwaW5nQ2FwYWJpbGl0aWVzfSAqLyAobWFwcGluZ1NuYXBzaG90KSlcbiAgICBjb25zdCBhY2NlcHRhbmNlQ2FuZGlkYXRlID0gY2FuZGlkYXRlLmFjY2VwdGFuY2VcblxuICAgIGlmICghaXNQbGFpbk9iamVjdChhY2NlcHRhbmNlQ2FuZGlkYXRlKSB8fCAhaXNEZW5zZUFycmF5KGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzKSB8fFxuICAgICAgIWlzRGVuc2VBcnJheShhY2NlcHRhbmNlQ2FuZGlkYXRlLnRvb2xjaGFpbnMpKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGFjY2VwdGFuY2UgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIC8qKiBAdHlwZSB7dW5rbm93bltdfSAqL1xuICAgIGNvbnN0IHN0YWdlU25hcHNob3QgPSBbXVxuICAgIC8qKiBAdHlwZSB7dW5rbm93bltdfSAqL1xuICAgIGNvbnN0IHRvb2xjaGFpblNuYXBzaG90ID0gW11cblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhY2NlcHRhbmNlQ2FuZGlkYXRlLnN0YWdlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHN0YWdlU25hcHNob3QucHVzaChhY2NlcHRhbmNlQ2FuZGlkYXRlLnN0YWdlc1tpbmRleF0pXG4gICAgfVxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhY2NlcHRhbmNlQ2FuZGlkYXRlLnRvb2xjaGFpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICB0b29sY2hhaW5TbmFwc2hvdC5wdXNoKGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWluc1tpbmRleF0pXG4gICAgfVxuICAgIGlmICghc3RhZ2VTbmFwc2hvdC5ldmVyeSgoc3RhZ2UpID0+IHR5cGVvZiBzdGFnZSA9PSBcInN0cmluZ1wiICYmIGFjY2VwdGFuY2VTdGFnZXMuaGFzKHN0YWdlKSkgfHxcbiAgICAgICF0b29sY2hhaW5TbmFwc2hvdC5ldmVyeSgodG9vbGNoYWluKSA9PiB0eXBlb2YgdG9vbGNoYWluID09IFwic3RyaW5nXCIgJiYgdG9vbGNoYWluLmxlbmd0aCA+IDApKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGFjY2VwdGFuY2UgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IHN0YWdlcyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VbXX0gKi8gKHN0YWdlU25hcHNob3QpXG4gICAgY29uc3QgdG9vbGNoYWlucyA9IC8qKiBAdHlwZSB7c3RyaW5nW119ICovICh0b29sY2hhaW5TbmFwc2hvdClcbiAgICBsZXQgcHJldmlvdXNTdGFnZSA9IC0xXG4gICAgY29uc3QgZGVjbGFyZWRTdGFnZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICBjb25zdCBzdGFnZUluZGV4ID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChhY2NlcHRhbmNlU3RhZ2VzLmdldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHN0YWdlKSkpXG5cbiAgICAgIGlmIChkZWNsYXJlZFN0YWdlcy5oYXMoc3RhZ2UpIHx8IHN0YWdlSW5kZXggPCBwcmV2aW91c1N0YWdlKSBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyB1bm9yZGVyZWQgb3IgZHVwbGljYXRlIGFjY2VwdGFuY2Ugc3RhZ2VzLmAsIGlkKVxuICAgICAgZGVjbGFyZWRTdGFnZXMuYWRkKHN0YWdlKVxuICAgICAgcHJldmlvdXNTdGFnZSA9IHN0YWdlSW5kZXhcbiAgICB9XG4gICAgaWYgKG5ldyBTZXQodG9vbGNoYWlucykuc2l6ZSAhPSB0b29sY2hhaW5zLmxlbmd0aCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgZHVwbGljYXRlIGFjY2VwdGFuY2UgdG9vbGNoYWlucy5gLCBpZClcbiAgICB9XG4gICAgY29uc3QgY2hlY2tDYW5kaWRhdGUgPSBjYW5kaWRhdGUuY2hlY2tcbiAgICAvKiogQHR5cGUge1JlYWRvbmx5PExhbmd1YWdlUmVnaXN0cnlDaGVja1JlY29yZD59ICovXG4gICAgbGV0IGNoZWNrXG5cbiAgICBpZiAoY2hlY2tDYW5kaWRhdGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY2hlY2sgPSBkZWVwRnJlZXplKHtzdGFnZXM6IFtdLCBzdXBwb3J0ZWQ6IGZhbHNlLCB0b29sY2hhaW5zOiBbXX0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChjaGVja0NhbmRpZGF0ZSkgfHwgT2JqZWN0LmtleXMoY2hlY2tDYW5kaWRhdGUpLnNvcnQoKS5qb2luKFwiLFwiKSAhPSBcImZhY3Rvcnksc3RhZ2VzLHRvb2xjaGFpbnNcIiB8fFxuICAgICAgICB0eXBlb2YgY2hlY2tDYW5kaWRhdGUuZmFjdG9yeSAhPSBcImZ1bmN0aW9uXCIgfHwgIWlzRGVuc2VBcnJheShjaGVja0NhbmRpZGF0ZS5zdGFnZXMpIHx8XG4gICAgICAgICFpc0RlbnNlQXJyYXkoY2hlY2tDYW5kaWRhdGUudG9vbGNoYWlucykgfHwgY2hlY2tDYW5kaWRhdGUuc3RhZ2VzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgZGV2ZWxvcGVyLWNoZWNrIGRlY2xhcmF0aW9uLmAsIGlkKVxuICAgICAgfVxuICAgICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgICBjb25zdCBjaGVja1N0YWdlU25hcHNob3QgPSBbXVxuICAgICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgICBjb25zdCBjaGVja1Rvb2xjaGFpblNuYXBzaG90ID0gW11cblxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoZWNrQ2FuZGlkYXRlLnN0YWdlcy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgICAgY2hlY2tTdGFnZVNuYXBzaG90LnB1c2goY2hlY2tDYW5kaWRhdGUuc3RhZ2VzW2luZGV4XSlcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjaGVja0NhbmRpZGF0ZS50b29sY2hhaW5zLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICBjaGVja1Rvb2xjaGFpblNuYXBzaG90LnB1c2goY2hlY2tDYW5kaWRhdGUudG9vbGNoYWluc1tpbmRleF0pXG4gICAgICB9XG4gICAgICBpZiAoIWNoZWNrU3RhZ2VTbmFwc2hvdC5ldmVyeShzdGFnZSA9PiB0eXBlb2Ygc3RhZ2UgPT0gXCJzdHJpbmdcIiAmJiBkZXZlbG9wZXJDaGVja1N0YWdlcy5oYXMoc3RhZ2UpICYmXG4gICAgICAgIGRlY2xhcmVkU3RhZ2VzLmhhcyhzdGFnZSkpIHx8ICFjaGVja1Rvb2xjaGFpblNuYXBzaG90LmV2ZXJ5KHRvb2xjaGFpbiA9PiB0eXBlb2YgdG9vbGNoYWluID09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgdG9vbGNoYWlucy5pbmNsdWRlcyh0b29sY2hhaW4pKSB8fCBuZXcgU2V0KGNoZWNrU3RhZ2VTbmFwc2hvdCkuc2l6ZSAhPSBjaGVja1N0YWdlU25hcHNob3QubGVuZ3RoIHx8XG4gICAgICAgIG5ldyBTZXQoY2hlY2tUb29sY2hhaW5TbmFwc2hvdCkuc2l6ZSAhPSBjaGVja1Rvb2xjaGFpblNuYXBzaG90Lmxlbmd0aCkge1xuICAgICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGRldmVsb3BlciBjaGVja3MgbXVzdCB1c2Ugb3JkZXJlZCBub24tZXhlY3V0aW5nIGRlY2xhcmVkIHN0YWdlcyBhbmQgdG9vbGNoYWlucy5gLCBpZClcbiAgICAgIH1cbiAgICAgIGxldCBwcmV2aW91c0NoZWNrU3RhZ2UgPSAtMVxuXG4gICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIGNoZWNrU3RhZ2VTbmFwc2hvdCkge1xuICAgICAgICBjb25zdCBzdGFnZUluZGV4ID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChhY2NlcHRhbmNlU3RhZ2VzLmdldCgvKiogQHR5cGUge3N0cmluZ30gKi8gKHN0YWdlKSkpXG5cbiAgICAgICAgaWYgKHN0YWdlSW5kZXggPCBwcmV2aW91c0NoZWNrU3RhZ2UpIHtcbiAgICAgICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyB1bm9yZGVyZWQgZGV2ZWxvcGVyLWNoZWNrIHN0YWdlcy5gLCBpZClcbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0NoZWNrU3RhZ2UgPSBzdGFnZUluZGV4XG4gICAgICB9XG4gICAgICBjaGVjayA9IGRlZXBGcmVlemUoe1xuICAgICAgICBmYWN0b3J5OiAvKiogQHR5cGUge1RhcmdldENoZWNrUGxhbkZhY3Rvcnl9ICovIChjaGVja0NhbmRpZGF0ZS5mYWN0b3J5KSxcbiAgICAgICAgc3RhZ2VzOiAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlW119ICovIChjaGVja1N0YWdlU25hcHNob3QpLFxuICAgICAgICBzdXBwb3J0ZWQ6IHRydWUsXG4gICAgICAgIHRvb2xjaGFpbnM6IC8qKiBAdHlwZSB7c3RyaW5nW119ICovIChjaGVja1Rvb2xjaGFpblNuYXBzaG90KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBoYXNGcm9udGVuZCA9IHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzVGV4dEJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLnRleHRCYWNrZW5kID09IFwiZnVuY3Rpb25cIlxuICAgIGNvbnN0IGhhc0JpbmFyeUJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQXBwbGljYXRpb25CYWNrZW5kID0gdHlwZW9mIGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQmFja2VuZCA9IGhhc1RleHRCYWNrZW5kIHx8IGhhc0JpbmFyeUJhY2tlbmQgfHwgaGFzQXBwbGljYXRpb25CYWNrZW5kXG5cbiAgICBpZiAoY2hlY2suc3VwcG9ydGVkICYmICFoYXNCYWNrZW5kKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGRlY2xhcmVzIGRldmVsb3BlciBjaGVja3Mgd2l0aG91dCBhIGJhY2tlbmQgcm9sZS5gLCBpZClcbiAgICB9XG5cbiAgICBpZiAoKG1hcHBpbmcucmljaFRleHQgfHwgbWFwcGluZy5zb3VyY2VNYXBWMyB8fCBtYXBwaW5nLmJpbmFyeVJhbmdlcykgJiYgIWhhc0JhY2tlbmQgfHxcbiAgICAgIG1hcHBpbmcuc291cmNlTWFwVjMgJiYgIW1hcHBpbmcucmljaFRleHQgfHxcbiAgICAgIG1hcHBpbmcuYmluYXJ5UmFuZ2VzICYmICFoYXNCaW5hcnlCYWNrZW5kICYmICFoYXNBcHBsaWNhdGlvbkJhY2tlbmQpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgbWFwcGluZyBzdXBwb3J0IHdpdGhvdXQgaXRzIHJlcXVpcmVkIGJhY2tlbmQgcm9sZS5gLCBpZClcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5yb3VuZFRyaXAgJiYgKCFoYXNGcm9udGVuZCB8fCAhaGFzQmFja2VuZCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgcm91bmQtdHJpcCBzdXBwb3J0IHdpdGhvdXQgZnJvbnRlbmQgYW5kIGJhY2tlbmQgcm9sZXMuYCwgaWQpXG4gICAgfVxuICAgIGlmIChzdGFnZXMuaW5jbHVkZXMoXCJwYXJzZVwiKSAmJiAhaGFzRnJvbnRlbmQgfHwgc3RhZ2VzLmluY2x1ZGVzKFwiZ2VuZXJhdGVcIikgJiYgIWhhc0JhY2tlbmQpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgYW4gYWNjZXB0YW5jZSBzdGFnZSB3aXRob3V0IGl0cyByZXF1aXJlZCByb2xlLmAsIGlkKVxuICAgIH1cblxuICAgIGNvbnN0IGhhc0RlZmF1bHRlZEJhY2tlbmQgPSBoYXNUZXh0QmFja2VuZCB8fCBoYXNCaW5hcnlCYWNrZW5kXG5cbiAgICBpZiAoKGhhc0RlZmF1bHRlZEJhY2tlbmQgfHwgY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZSAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZS5sZW5ndGggPT0gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgYmFja2VuZCAnJHtpZH0nIHJlcXVpcmVzIGEgZGVmYXVsdCBmaWxlbmFtZS5gLCBpZClcbiAgICB9XG4gICAgaWYgKChoYXNEZWZhdWx0ZWRCYWNrZW5kIHx8IGNhbmRpZGF0ZS5tZWRpYVR5cGUgIT09IHVuZGVmaW5lZCkgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLm1lZGlhVHlwZSAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5tZWRpYVR5cGUubGVuZ3RoID09IDApKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IGJhY2tlbmQgJyR7aWR9JyByZXF1aXJlcyBhIG1lZGlhIHR5cGUuYCwgaWQpXG4gICAgfVxuXG4gICAgY29uc3QgYWNjZXB0YW5jZSA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQWNjZXB0YW5jZUNhcGFiaWxpdGllc30gKi8gKHtcbiAgICAgIHN0YWdlcyxcbiAgICAgIHRvb2xjaGFpbnNcbiAgICB9KSlcbiAgICBjb25zdCByZWNvcmQgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZH0gKi8gKHtcbiAgICAgIGFjY2VwdGFuY2UsXG4gICAgICBhcnRpZmFjdE11bHRpcGxpY2l0eSxcbiAgICAgIGNoZWNrLFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBpZCxcbiAgICAgIG1hcHBpbmcsXG4gICAgICByb3VuZFRyaXA6IGNhbmRpZGF0ZS5yb3VuZFRyaXAsXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWUgPT0gXCJzdHJpbmdcIiA/IHtkZWZhdWx0RmlsZW5hbWU6IGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWV9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUubWVkaWFUeXBlID09IFwic3RyaW5nXCIgPyB7bWVkaWFUeXBlOiBjYW5kaWRhdGUubWVkaWFUeXBlfSA6IHt9KSxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLnByb3ZpZGVyID09IFwiYm9vbGVhblwiID8ge3Byb3ZpZGVyOiBjYW5kaWRhdGUucHJvdmlkZXJ9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiID8ge2Zyb250ZW5kOiBjYW5kaWRhdGUuZnJvbnRlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUudGV4dEJhY2tlbmQgPT0gXCJmdW5jdGlvblwiID8ge3RleHRCYWNrZW5kOiBjYW5kaWRhdGUudGV4dEJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZCA9PSBcImZ1bmN0aW9uXCIgPyB7YmluYXJ5QmFja2VuZDogY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuYXBwbGljYXRpb25CYWNrZW5kID09IFwiZnVuY3Rpb25cIiA/IHthcHBsaWNhdGlvbkJhY2tlbmQ6IGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmR9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUuaW50ZXJvcGVyYWJpbGl0eSA9PSBcImZ1bmN0aW9uXCIgPyB7aW50ZXJvcGVyYWJpbGl0eTogY2FuZGlkYXRlLmludGVyb3BlcmFiaWxpdHl9IDoge30pXG4gICAgfSkpXG4gICAgY29uc3QgZGVzY3JpcHRvciA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgYWNjZXB0YW5jZSxcbiAgICAgIGFydGlmYWN0TXVsdGlwbGljaXR5LFxuICAgICAgY2hlY2s6IGRlZXBGcmVlemUoe3N0YWdlczogY2hlY2suc3RhZ2VzLCBzdXBwb3J0ZWQ6IGNoZWNrLnN1cHBvcnRlZCwgdG9vbGNoYWluczogY2hlY2sudG9vbGNoYWluc30pLFxuICAgICAgZmVhdHVyZXMsXG4gICAgICBpZCxcbiAgICAgIG1hcHBpbmcsXG4gICAgICByb2xlczoge1xuICAgICAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IHR5cGVvZiBjYW5kaWRhdGUuYXBwbGljYXRpb25CYWNrZW5kID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgYmluYXJ5QmFja2VuZDogdHlwZW9mIGNhbmRpZGF0ZS5iaW5hcnlCYWNrZW5kID09IFwiZnVuY3Rpb25cIixcbiAgICAgICAgZnJvbnRlbmQ6IHR5cGVvZiBjYW5kaWRhdGUuZnJvbnRlbmQgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBpbnRlcm9wZXJhYmlsaXR5OiB0eXBlb2YgY2FuZGlkYXRlLmludGVyb3BlcmFiaWxpdHkgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBwcm92aWRlcjogY2FuZGlkYXRlLnByb3ZpZGVyID09PSB0cnVlLFxuICAgICAgICB0ZXh0QmFja2VuZDogdHlwZW9mIGNhbmRpZGF0ZS50ZXh0QmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICAgIH0sXG4gICAgICByb3VuZFRyaXA6IGNhbmRpZGF0ZS5yb3VuZFRyaXBcbiAgICB9KSlcblxuICAgIHJlY29yZHNCeUlkLnNldChpZCwgcmVjb3JkKVxuICAgIGRlc2NyaXB0b3JzLnB1c2goZGVzY3JpcHRvcilcbiAgfVxuXG4gIGNvbnN0IGZyb3plbkRlc2NyaXB0b3JzID0gZGVlcEZyZWV6ZShkZXNjcmlwdG9ycylcbiAgY29uc3QgaWRzID0gT2JqZWN0LmZyZWV6ZShmcm96ZW5EZXNjcmlwdG9ycy5tYXAoKHtpZH0pID0+IGlkKSlcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgZGVzY3JpcHRvcnM6IGZyb3plbkRlc2NyaXB0b3JzLFxuICAgIGlkcyxcbiAgICByZWNvcmQoaWQpIHtcbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNCeUlkLmdldChpZClcblxuICAgICAgaWYgKCFyZWNvcmQpIHVuc3VwcG9ydGVkTGFuZ3VhZ2UoaWQpXG5cbiAgICAgIHJldHVybiByZWNvcmRcbiAgICB9LFxuICAgIHJlc29sdmUoaWQsIHJvbGUsIGxvY2F0aW9uKSB7XG4gICAgICBpZiAoIXJlZ2lzdHJ5Um9sZXMuaW5jbHVkZXMocm9sZSkpIGludmFsaWRSZWdpc3RyeShgVW5rbm93biByZWdpc3RyeSByb2xlICcke3JvbGV9Jy5gLCBpZClcbiAgICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNCeUlkLmdldChpZClcblxuICAgICAgaWYgKCFyZWNvcmQpIHVuc3VwcG9ydGVkTGFuZ3VhZ2UoaWQsIGxvY2F0aW9uLCByb2xlKVxuICAgICAgY29uc3QgaW1wbGVtZW50YXRpb24gPSByZWNvcmRbcm9sZV1cblxuICAgICAgaWYgKHR5cGVvZiBpbXBsZW1lbnRhdGlvbiAhPSBcImZ1bmN0aW9uXCIpIHVuc3VwcG9ydGVkUm9sZShpZCwgcHVibGljUm9sZU5hbWUocm9sZSksIGxvY2F0aW9uKVxuXG4gICAgICByZXR1cm4gaW1wbGVtZW50YXRpb25cbiAgICB9XG4gIH0pXG59XG5cbi8qKlxuICogUEhQIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHBocEZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZVBocCh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBSdWJ5IHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHJ1YnlGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VSdWJ5KHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIEphdmFTY3JpcHQgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgamF2YVNjcmlwdEZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZUphdmFTY3JpcHRUeXBlU2NyaXB0KHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBsYW5ndWFnZTogXCJqYXZhc2NyaXB0XCIsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogVHlwZVNjcmlwdCByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCB0eXBlU2NyaXB0RnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIGxhbmd1YWdlOiBcInR5cGVzY3JpcHRcIiwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBKYXZhIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGphdmFGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VKYXZhKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIEtvdGxpbiByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBrb3RsaW5Gcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlS290bGluKHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBQeXRob24gcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgcHl0aG9uRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZVB5dGhvbih7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogQyMgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgY3NoYXJwRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZUNTaGFycCh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogR28gcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgZ29Gcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlR28oe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIERhcnQgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgZGFydEZyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VEYXJ0KHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBaaWcgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgemlnRnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZVppZyh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbmNvbnN0IHJlY29yZHMgPSBbXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJwaHA4MlwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVQaHBDaGVja1BsYW4sIHN0YWdlczogW1widmFsaWRhdGVcIl0sIHRvb2xjaGFpbnM6IFtcInBocDgyXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5waHBcIixcbiAgICBmcm9udGVuZDogcGhwRnJvbnRlbmQsXG4gICAgaWQ6IFwicGhwXCIsXG4gICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlUGhwXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVieVwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVSdWJ5Q2hlY2tQbGFuLCBzdGFnZXM6IFtcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJydWJ5XCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5yYlwiLFxuICAgIGZyb250ZW5kOiBydWJ5RnJvbnRlbmQsXG4gICAgaWQ6IFwicnVieVwiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtcnVieVwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVJ1YnlcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJub2RlXCJdfSxcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZUphdmFTY3JpcHRDaGVja1BsYW4sIHN0YWdlczogW1widmFsaWRhdGVcIl0sIHRvb2xjaGFpbnM6IFtcIm5vZGVcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmpzXCIsXG4gICAgZnJvbnRlbmQ6IGphdmFTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJqYXZhc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvamF2YXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUphdmFTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInRzY1wiLCBcIm5vZGVcIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlVHlwZVNjcmlwdENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJjb21waWxlXCJdLCB0b29sY2hhaW5zOiBbXCJ0c2NcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnRzXCIsXG4gICAgZnJvbnRlbmQ6IHR5cGVTY3JpcHRGcm9udGVuZCxcbiAgICBpZDogXCJ0eXBlc2NyaXB0XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQvdHlwZXNjcmlwdFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVR5cGVTY3JpcHRcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImphdmFjXCIsIFwiamF2YVwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVKYXZhQ2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIl0sIHRvb2xjaGFpbnM6IFtcImphdmFjXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiTWFpbi5qYXZhXCIsXG4gICAgZnJvbnRlbmQ6IGphdmFGcm9udGVuZCxcbiAgICBpZDogXCJqYXZhXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1qYXZhLXNvdXJjZVwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUphdmFcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImtvdGxpbmNcIiwgXCJqYXZhMjVcIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlS290bGluQ2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIl0sIHRvb2xjaGFpbnM6IFtcImtvdGxpbmNcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJQcm9ncmFtLmt0XCIsXG4gICAgZnJvbnRlbmQ6IGtvdGxpbkZyb250ZW5kLFxuICAgIGlkOiBcImtvdGxpblwiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gta290bGluXCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlS290bGluXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJweXRob25cIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlUHl0aG9uQ2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIl0sIHRvb2xjaGFpbnM6IFtcInB5dGhvblwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0ucHlcIixcbiAgICBmcm9udGVuZDogcHl0aG9uRnJvbnRlbmQsXG4gICAgaWQ6IFwicHl0aG9uXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1weXRob25cIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVQeXRob25cbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJkb3RuZXRcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVDU2hhcnBDaGVja1BsYW4sIHN0YWdlczogW1wicmVzdG9yZVwiLCBcImNvbXBpbGVcIl0sIHRvb2xjaGFpbnM6IFtcImRvdG5ldFwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIlByb2dyYW0uY3NcIixcbiAgICBmcm9udGVuZDogY3NoYXJwRnJvbnRlbmQsXG4gICAgaWQ6IFwiY3NoYXJwXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1jc2hhcnBcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDU2hhcnBQcm9qZWN0XG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImdvXCJdfSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlR29DaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiLCBcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJnb1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIm1haW4uZ29cIixcbiAgICBmcm9udGVuZDogZ29Gcm9udGVuZCxcbiAgICBpZDogXCJnb1wiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtZ29cIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVHb01vZHVsZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5nXCJdfSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlQ0NoZWNrUGxhbiwgc3RhZ2VzOiBbXCJjb21waWxlXCIsIFwibGlua1wiXSwgdG9vbGNoYWluczogW1wiY2xhbmdcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNcIixcbiAgICBmcm9udGVuZDogcGFyc2VDLFxuICAgIGlkOiBcImNcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDUHJvZ3JhbVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5ncHBcIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlQ3BwQ2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIiwgXCJsaW5rXCJdLCB0b29sY2hhaW5zOiBbXCJjbGFuZ3BwXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5jcHBcIiwgZnJvbnRlbmQ6IHBhcnNlQ3BwLCBpZDogXCJjcHBcIiwgbWVkaWFUeXBlOiBcInRleHQveC1jKytzcmNcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlQ3BwXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInJ1c3RjXCIsIFwiY2FyZ29cIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVSdXN0Q2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiXSwgdG9vbGNoYWluczogW1wicnVzdGNcIiwgXCJjYXJnb1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInNyYy9tYWluLnJzXCIsIGZyb250ZW5kOiBwYXJzZVJ1c3QsIGlkOiBcInJ1c3RcIiwgbWVkaWFUeXBlOiBcInRleHQveC1ydXN0XCIsIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVJ1c3RQcm9qZWN0XG4gIH0pLFxuICBsYW5ndWFnZSh7YWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJzd2lmdGNcIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlU3dpZnRDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiXSwgdG9vbGNoYWluczogW1wic3dpZnRjXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5zd2lmdFwiLCBmcm9udGVuZDogcGFyc2VTd2lmdCwgaWQ6IFwic3dpZnRcIiwgbWVkaWFUeXBlOiBcInRleHQveC1zd2lmdFwiLCB0ZXh0QmFja2VuZDogZ2VuZXJhdGVTd2lmdH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJkYXJ0XCJdfSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlRGFydENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJkYXJ0XCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiYmluL3Byb2dyYW0uZGFydFwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgIHR5cGVkRXJyb3JzOiBmYWxzZSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlXG4gICAgfSxcbiAgICBmcm9udGVuZDogZGFydEZyb250ZW5kLFxuICAgIGlkOiBcImRhcnRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWRhcnRcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVEYXJ0UGFja2FnZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ6aWdcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVaaWdDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiLCBcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ6aWdcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJzcmMvbWFpbi56aWdcIixcbiAgICBmZWF0dXJlczoge1xuICAgICAgY2xvc2VkUmVjb3JkczogZmFsc2UsXG4gICAgICBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSxcbiAgICAgIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogdHJ1ZSxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBmYWxzZSxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogZmFsc2UsXG4gICAgICB0eXBlZEVycm9yczogZmFsc2UsXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZVxuICAgIH0sXG4gICAgZnJvbnRlbmQ6IHppZ0Zyb250ZW5kLFxuICAgIGlkOiBcInppZ1wiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtemlnXCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlWmlnUHJvamVjdFxuICB9KSxcbiAge1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcImdlbmVyYXRlXCIsIFwidmFsaWRhdGVcIiwgXCJpbnN0YW50aWF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcIndhc20tdmFsaWRhdGVcIiwgXCJub2RlXCIsIFwiY2hyb21pdW1cIl19LFxuICAgIGFwcGxpY2F0aW9uQmFja2VuZDogZ2VuZXJhdGVCcm93c2VyV2FzbSxcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGJpbmFyeUJhY2tlbmQ6IGdlbmVyYXRlQnJvd3Nlcldhc20sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0ud2FzbVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwid2FzbVwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL3dhc21cIixcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiYW5kcm9pZFwiXX0sXG4gICAgYXBwbGljYXRpb25CYWNrZW5kOiBnZW5lcmF0ZUFuZHJvaWRBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwiYW5kcm9pZFwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9LFxuICB7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wiZ2VuZXJhdGVcIl0sIHRvb2xjaGFpbnM6IFtdfSxcbiAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IGdlbmVyYXRlSW9zQXBwbGljYXRpb24sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBmZWF0dXJlczoge2Nsb3NlZFJlY29yZHM6IGZhbHNlLCBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLCBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLCBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IGZhbHNlLCBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsIG9wdGlvbmFsVmFsdWVzOiBmYWxzZSwgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLCBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSwgcmVmZXJlbmNlQ2xhc3NlczogZmFsc2UsIHR5cGVkRXJyb3JzOiBmYWxzZSwgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2V9LFxuICAgIGlkOiBcImlvc1wiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9LFxuICB7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiaW5zdGFudGlhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJmbHV0dGVyXCIsIFwiYW5kcm9pZFwiXX0sXG4gICAgYXBwbGljYXRpb25CYWNrZW5kOiBnZW5lcmF0ZUZsdXR0ZXJBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwiZmx1dHRlclwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9XG5dXG5cbmV4cG9ydCBjb25zdCBsYW5ndWFnZVJlZ2lzdHJ5ID0gY3JlYXRlTGFuZ3VhZ2VSZWdpc3RyeShyZWNvcmRzKVxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlQ2FwYWJpbGl0aWVzID0gbGFuZ3VhZ2VSZWdpc3RyeS5kZXNjcmlwdG9yc1xuLyoqIEB0eXBlIHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2VbXX0gKi9cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRMYW5ndWFnZXMgPSBPYmplY3QuZnJlZXplKGxhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gIC5maWx0ZXIoKHtyb2xlc30pID0+IHJvbGVzLmZyb250ZW5kICYmIHJvbGVzLnRleHRCYWNrZW5kKVxuICAubWFwKCh7aWR9KSA9PiAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gKi8gKGlkKSkpXG5cbi8qKlxuICogU3VwcGxpZXMgY29tbW9uIG9yaWdpbmFsLWZpdmUgY2FwYWJpbGl0eSBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSB2YWx1ZXMgLSBMYW5ndWFnZS1zcGVjaWZpYyByZWNvcmQgZmllbGRzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBDb21wbGV0ZSByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGxhbmd1YWdlKHZhbHVlcykge1xuICByZXR1cm4ge1xuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcInNpbmdsZVwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlZEVycm9yczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKVxuICAgIH0sXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogZmFsc2UsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcHJvdmlkZXI6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgIHJvdW5kVHJpcDogdHJ1ZSxcbiAgICAuLi52YWx1ZXNcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYW4gaW50ZXJuYWwgcmVnaXN0cnkga2V5IGZvciBhIHB1YmxpYyByb2xlIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIEludGVybmFsIHJvbGUga2V5LlxuICogQHJldHVybnMge3N0cmluZ30gUHVibGljIHJvbGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcHVibGljUm9sZU5hbWUocm9sZSkge1xuICBpZiAocm9sZSA9PSBcInRleHRCYWNrZW5kXCIpIHJldHVybiBcInRleHQgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYmluYXJ5QmFja2VuZFwiKSByZXR1cm4gXCJiaW5hcnkgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYXBwbGljYXRpb25CYWNrZW5kXCIpIHJldHVybiBcImFwcGxpY2F0aW9uLWFydGlmYWN0IGJhY2tlbmRcIlxuXG4gIHJldHVybiByb2xlXG59XG5cbi8qKlxuICogVGhyb3dzIGFuIHVua25vd24tbGFuZ3VhZ2UgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIFVua25vd24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFtsb2NhdGlvbl0gLSBSZWxhdGVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtSZWdpc3RyeVJvbGUgfCB1bmRlZmluZWR9IFtyb2xlXSAtIFJlcXVlc3RlZCByb2xlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiB1bnN1cHBvcnRlZExhbmd1YWdlKGlkLCBsb2NhdGlvbiwgcm9sZSkge1xuICBjb25zdCBtZXNzYWdlID0gcm9sZSA9PSBcImZyb250ZW5kXCIgPyBcIk5vIGZyb250ZW5kIGFkYXB0ZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBsYW5ndWFnZS5cIiA6XG4gICAgcm9sZSA9PSBcInRleHRCYWNrZW5kXCIgPyBcIk5vIHNvdXJjZSBiYWNrZW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgbGFuZ3VhZ2UuXCIgOlxuICAgICAgXCJObyBsYW5ndWFnZSBvciB0YXJnZXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBJRC5cIlxuXG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiVU5TVVBQT1JURURfTEFOR1VBR0VcIixcbiAgICBsYW5ndWFnZTogaWQsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcmVnaXN0cnktc2hhcGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2lkXSAtIENhbmRpZGF0ZSByZWdpc3RyeSBJRC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFJlZ2lzdHJ5KG1lc3NhZ2UsIGlkID0gXCJyZWdpc3RyeVwiKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9SRUdJU1RSWVwiLCBsYW5ndWFnZTogaWQsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgYW4gb3JkaW5hcnkgc3RyaW5nLWtleWVkIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cblxuLyoqXG4gKiBEZWVwbHkgZnJlZXplcyByZWdpc3RyeSByZWNvcmRzIGFuZCBwdWJsaWMgZGVzY3JpcHRvcnMuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZSAtIFJlZ2lzdHJ5LW93bmVkIHZhbHVlLlxuICogQHJldHVybnMge1R9IEZyb3plbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXG4gIGZvciAoY29uc3QgbmVzdGVkIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSBkZWVwRnJlZXplKG5lc3RlZClcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh2YWx1ZSlcbn1cbiJdfQ==
|
|
738
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFuZ3VhZ2UtcmVnaXN0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUE7QUFDdkMsT0FBTyxFQUFDLHFCQUFxQixFQUFFLGVBQWUsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3RFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDMUQsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNEJBQTRCLENBQUE7QUFDaEUsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDakQsT0FBTyxFQUFDLG1CQUFtQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDdEQsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ2pELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sc0JBQXNCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQy9DLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQzNELE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3RE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QUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxPQUFPLEVBQUUsRUFBRSxHQUFHLFVBQVU7SUFDL0MsTUFBTSxJQUFJLHFCQUFxQixDQUFDLEVBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtBQUNwRixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQVMsYUFBYSxDQUFDLEtBQUs7SUFDMUIsT0FBTyxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFBO0FBQy9ILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7aXNEZW5zZUFycmF5fSBmcm9tIFwiLi9hcnJheS5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpYywgdW5zdXBwb3J0ZWRSb2xlfSBmcm9tIFwiLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVKYXZhfSBmcm9tIFwiLi9iYWNrZW5kcy9qYXZhLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVLb3RsaW59IGZyb20gXCIuL2JhY2tlbmRzL2tvdGxpbi5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQ1NoYXJwUHJvamVjdH0gZnJvbSBcIi4vYmFja2VuZHMvY3NoYXJwLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ1NoYXJwQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9jc2hhcnAtY2hlY2suanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUdvTW9kdWxlfSBmcm9tIFwiLi9iYWNrZW5kcy9nby5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUnVzdFByb2plY3R9IGZyb20gXCIuL2JhY2tlbmRzL3J1c3QuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVN3aWZ0fSBmcm9tIFwiLi9iYWNrZW5kcy9zd2lmdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlRGFydFBhY2thZ2V9IGZyb20gXCIuL2JhY2tlbmRzL2RhcnQuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVppZ1Byb2plY3R9IGZyb20gXCIuL2JhY2tlbmRzL3ppZy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSmF2YVNjcmlwdH0gZnJvbSBcIi4vYmFja2VuZHMvamF2YXNjcmlwdC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlUGhwfSBmcm9tIFwiLi9iYWNrZW5kcy9waHAuanNcIlxuaW1wb3J0IHtnZW5lcmF0ZVB5dGhvbn0gZnJvbSBcIi4vYmFja2VuZHMvcHl0aG9uLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVSdWJ5fSBmcm9tIFwiLi9iYWNrZW5kcy9ydWJ5LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVUeXBlU2NyaXB0fSBmcm9tIFwiLi9iYWNrZW5kcy90eXBlc2NyaXB0LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVCcm93c2VyV2FzbX0gZnJvbSBcIi4vYmFja2VuZHMvd2FzbS5qc1wiXG5pbXBvcnQge2dlbmVyYXRlSW9zQXBwbGljYXRpb259IGZyb20gXCIuL2JhY2tlbmRzL2lvcy5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQW5kcm9pZEFwcGxpY2F0aW9ufSBmcm9tIFwiLi9iYWNrZW5kcy9hbmRyb2lkLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVGbHV0dGVyQXBwbGljYXRpb259IGZyb20gXCIuL2JhY2tlbmRzL2ZsdXR0ZXIuanNcIlxuaW1wb3J0IHtwYXJzZUphdmF9IGZyb20gXCIuL2Zyb250ZW5kcy9qYXZhLmpzXCJcbmltcG9ydCB7cGFyc2VLb3RsaW59IGZyb20gXCIuL2Zyb250ZW5kcy9rb3RsaW4uanNcIlxuaW1wb3J0IHtwYXJzZUNTaGFycH0gZnJvbSBcIi4vZnJvbnRlbmRzL2NzaGFycC5qc1wiXG5pbXBvcnQge3BhcnNlR299IGZyb20gXCIuL2Zyb250ZW5kcy9nby5qc1wiXG5pbXBvcnQge3BhcnNlUnVzdH0gZnJvbSBcIi4vZnJvbnRlbmRzL3J1c3QuanNcIlxuaW1wb3J0IHtwYXJzZVN3aWZ0fSBmcm9tIFwiLi9mcm9udGVuZHMvc3dpZnQuanNcIlxuaW1wb3J0IHtwYXJzZURhcnR9IGZyb20gXCIuL2Zyb250ZW5kcy9kYXJ0LmpzXCJcbmltcG9ydCB7cGFyc2VaaWd9IGZyb20gXCIuL2Zyb250ZW5kcy96aWcuanNcIlxuaW1wb3J0IHtwYXJzZUNwcH0gZnJvbSBcIi4vZnJvbnRlbmRzL2NwcC5qc1wiXG5pbXBvcnQge2dlbmVyYXRlQ3BwfSBmcm9tIFwiLi9iYWNrZW5kcy9jcHAuanNcIlxuaW1wb3J0IHtwYXJzZUN9IGZyb20gXCIuL2Zyb250ZW5kcy9jLmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVDUHJvZ3JhbX0gZnJvbSBcIi4vYmFja2VuZHMvYy5qc1wiXG5pbXBvcnQge3BhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHR9IGZyb20gXCIuL2Zyb250ZW5kcy9qYXZhc2NyaXB0LXR5cGVzY3JpcHQuanNcIlxuaW1wb3J0IHtwYXJzZVBocH0gZnJvbSBcIi4vZnJvbnRlbmRzL3BocC5qc1wiXG5pbXBvcnQge3BhcnNlUHl0aG9ufSBmcm9tIFwiLi9mcm9udGVuZHMvcHl0aG9uLmpzXCJcbmltcG9ydCB7cGFyc2VSdWJ5fSBmcm9tIFwiLi9mcm9udGVuZHMvcnVieS5qc1wiXG5pbXBvcnQge2NyZWF0ZUphdmFDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL2phdmEtY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVKYXZhU2NyaXB0Q2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9qYXZhc2NyaXB0LWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlS290bGluQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9rb3RsaW4tY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVQaHBDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3BocC1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZVB5dGhvbkNoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvcHl0aG9uLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlUnVieUNoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvcnVieS1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZVR5cGVTY3JpcHRDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3R5cGVzY3JpcHQtY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVHb0NoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvZ28tY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVDQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9jLWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlQ3BwQ2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9jcHAtY2hlY2suanNcIlxuaW1wb3J0IHtjcmVhdGVSdXN0Q2hlY2tQbGFufSBmcm9tIFwiLi9iYWNrZW5kcy9ydXN0LWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlU3dpZnRDaGVja1BsYW59IGZyb20gXCIuL2JhY2tlbmRzL3N3aWZ0LWNoZWNrLmpzXCJcbmltcG9ydCB7Y3JlYXRlRGFydENoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvZGFydC1jaGVjay5qc1wiXG5pbXBvcnQge2NyZWF0ZVppZ0NoZWNrUGxhbn0gZnJvbSBcIi4vYmFja2VuZHMvemlnLWNoZWNrLmpzXCJcblxuY29uc3QgcmVnaXN0cnlSb2xlcyA9IE9iamVjdC5mcmVlemUoW1wiZnJvbnRlbmRcIiwgXCJ0ZXh0QmFja2VuZFwiLCBcImJpbmFyeUJhY2tlbmRcIiwgXCJhcHBsaWNhdGlvbkJhY2tlbmRcIiwgXCJpbnRlcm9wZXJhYmlsaXR5XCJdKVxuY29uc3QgYWNjZXB0YW5jZVN0YWdlT3JkZXIgPSBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJsaW5rXCIsIFwidmFsaWRhdGVcIiwgXCJpbnN0YW50aWF0ZVwiLCBcImV4ZWN1dGVcIl1cbmNvbnN0IGFjY2VwdGFuY2VTdGFnZXMgPSBuZXcgTWFwKGFjY2VwdGFuY2VTdGFnZU9yZGVyLm1hcCgoc3RhZ2UsIGluZGV4KSA9PiBbc3RhZ2UsIGluZGV4XSkpXG5jb25zdCBkZXZlbG9wZXJDaGVja1N0YWdlcyA9IG5ldyBTZXQoW1wicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJsaW5rXCIsIFwidmFsaWRhdGVcIl0pXG5jb25zdCByZWdpc3RyeUtleXMgPSBuZXcgU2V0KFtcbiAgXCJhY2NlcHRhbmNlXCIsIFwiYXBwbGljYXRpb25CYWNrZW5kXCIsIFwiYXJ0aWZhY3RNdWx0aXBsaWNpdHlcIiwgXCJiaW5hcnlCYWNrZW5kXCIsIFwiY2hlY2tcIiwgXCJkZWZhdWx0RmlsZW5hbWVcIiwgXCJmcm9udGVuZFwiLCBcImlkXCIsXG4gIFwiZmVhdHVyZXNcIiwgXCJpbnRlcm9wZXJhYmlsaXR5XCIsIFwibWFwcGluZ1wiLCBcIm1lZGlhVHlwZVwiLCBcInByb3ZpZGVyXCIsIFwicm91bmRUcmlwXCIsIFwidGV4dEJhY2tlbmRcIlxuXSlcblxuLyoqIEB0eXBlZGVmIHtcImZyb250ZW5kXCIgfCBcInRleHRCYWNrZW5kXCIgfCBcImJpbmFyeUJhY2tlbmRcIiB8IFwiYXBwbGljYXRpb25CYWNrZW5kXCIgfCBcImludGVyb3BlcmFiaWxpdHlcIn0gUmVnaXN0cnlSb2xlICovXG4vKiogQHR5cGVkZWYgeyguLi52YWx1ZXM6IHVua25vd25bXSkgPT4gdW5rbm93bn0gUmVnaXN0cnlJbXBsZW1lbnRhdGlvbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEZyb250ZW5kSW5wdXRcbiAqIEBwcm9wZXJ0eSB7cmVhZG9ubHkgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FZmZlY3RDYXBhYmlsaXR5RGVjbGFyYXRpb25bXX0gW2NhcGFiaWxpdGllc10gLSBDb21waWxlci1hdXRob3JpemVkIGRlY2xhcmF0aW9ucy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlbmFtZSAtIFNvdXJjZSBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBzb3VyY2UgLSBTb3VyY2UgdGV4dC5cbiAqIEBwcm9wZXJ0eSB7e2lzRW50cnk6IGJvb2xlYW4sIGZ1bmN0aW9uczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uPiwgcmVjb3JkczogTWFwPHN0cmluZywgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbj4sIGVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIHZhbHVlUmVjb3Jkcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+fX0gW3Byb2dyYW1dIC0gUHJvZ3JhbSBjb252ZXJzaW9uIGNvbnRleHQuXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgRnJvbnRlbmRcbiAqIEBwYXJhbSB7RnJvbnRlbmRJbnB1dH0gaW5wdXQgLSBGcm9udGVuZCByZXF1ZXN0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIExhbmd1YWdlUmVnaXN0cnlSZWNvcmRcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBpZCAtIFN0YWJsZSBpZGVudGl0eS5cbiAqIEBwcm9wZXJ0eSB7e3N0YWdlczogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VbXSwgdG9vbGNoYWluczogc3RyaW5nW119fSBhY2NlcHRhbmNlIC0gQWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7UmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeUNoZWNrUmVjb3JkPn0gY2hlY2sgLSBEZXZlbG9wZXItY2hlY2sgZGVjbGFyYXRpb24uXG4gKiBAcHJvcGVydHkge1wic2luZ2xlXCIgfCBcIm11bHRpcGxlXCJ9IGFydGlmYWN0TXVsdGlwbGljaXR5IC0gQXJ0aWZhY3QgbXVsdGlwbGljaXR5LlxuICogQHByb3BlcnR5IHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlRmVhdHVyZUNhcGFiaWxpdGllc30gZmVhdHVyZXMgLSBTZW1hbnRpYyBmZWF0dXJlIGNhcGFiaWxpdGllcy5cbiAqIEBwcm9wZXJ0eSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXN9IG1hcHBpbmcgLSBNYXBwaW5nIGNhcGFiaWxpdGllcy5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gcm91bmRUcmlwIC0gUm91bmQtdHJpcCBkZWNsYXJhdGlvbi5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVmYXVsdEZpbGVuYW1lXSAtIERlZmF1bHQgYmFja2VuZCBmaWxlbmFtZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbbWVkaWFUeXBlXSAtIERlZmF1bHQgYmFja2VuZCBtZWRpYSB0eXBlLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbcHJvdmlkZXJdIC0gVGFyZ2V0IGhvc3Qgc3RkbGliIHByb3ZpZGVyL25hdGl2ZS1iaW5kaW5nIHJvbGUuXG4gKiBAcHJvcGVydHkge1JlZ2lzdHJ5SW1wbGVtZW50YXRpb259IFtmcm9udGVuZF0gLSBGcm9udGVuZCBhZGFwdGVyLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbdGV4dEJhY2tlbmRdIC0gVGV4dCBiYWNrZW5kLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbYmluYXJ5QmFja2VuZF0gLSBCaW5hcnkgYmFja2VuZC5cbiAqIEBwcm9wZXJ0eSB7UmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gW2FwcGxpY2F0aW9uQmFja2VuZF0gLSBBcHBsaWNhdGlvbi1hcnRpZmFjdCBiYWNrZW5kLlxuICogQHByb3BlcnR5IHtSZWdpc3RyeUltcGxlbWVudGF0aW9ufSBbaW50ZXJvcGVyYWJpbGl0eV0gLSBJbnRlcm9wZXJhYmlsaXR5IGJyaWRnZS5cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtSZWFkb25seTx7XG4gKiAgIGFydGlmYWN0czogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldCxcbiAqICAgYnVpbGRQYXRoOiBzdHJpbmcsXG4gKiAgIHByb2plY3RJZDogc3RyaW5nLFxuICogICBzb3VyY2VQYXRoOiBzdHJpbmcsXG4gKiAgIHRhcmdldElkOiBzdHJpbmcsXG4gKiAgIHRvb2xzOiByZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkRpc2NvdmVyZWRUb29sY2hhaW5bXVxuICogfT59IFRhcmdldENoZWNrUGxhbkNvbnRleHRcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBUYXJnZXRDaGVja1BsYW5GYWN0b3J5XG4gKiBAcGFyYW0ge1RhcmdldENoZWNrUGxhbkNvbnRleHR9IGNvbnRleHQgLSBFeGFjdCBzdGFnZWQgdGFyZ2V0IGNvbnRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UYXJnZXRDaGVja1BsYW59IEltbXV0YWJsZSBwbGFuLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTGFuZ3VhZ2VSZWdpc3RyeUNoZWNrUmVjb3JkXG4gKiBAcHJvcGVydHkge1RhcmdldENoZWNrUGxhbkZhY3Rvcnl9IFtmYWN0b3J5XSAtIFRhcmdldC1vd25lZCBwbGFuIGZhY3RvcnkgZm9yIHN1cHBvcnRlZCBjaGVja3MuXG4gKiBAcHJvcGVydHkge3JlYWRvbmx5IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlW119IHN0YWdlcyAtIEV4YWN0IG5vbi1leGVjdXRpbmcgc3RhZ2VzLlxuICogQHByb3BlcnR5IHtib29sZWFufSBzdXBwb3J0ZWQgLSBXaGV0aGVyIHRoZSB0YXJnZXQgc3VwcGxpZXMgYSBjaGVjayBwbGFuLlxuICogQHByb3BlcnR5IHtyZWFkb25seSBzdHJpbmdbXX0gdG9vbGNoYWlucyAtIEV4YWN0IGRlY2xhcmVkIGNhbm9uaWNhbCB0b29sY2hhaW5zLlxuICovXG5cbi8qKlxuICogQHR5cGVkZWYgTGFuZ3VhZ2VSZWdpc3RyeVxuICogQHByb3BlcnR5IHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkxhbmd1YWdlQ2FwYWJpbGl0aWVzW119IGRlc2NyaXB0b3JzIC0gUHVibGljIGRlc2NyaXB0b3JzLlxuICogQHByb3BlcnR5IHtyZWFkb25seSBzdHJpbmdbXX0gaWRzIC0gUmVnaXN0ZXJlZCBJRHMgaW4gc3RhYmxlIG9yZGVyLlxuICogQHByb3BlcnR5IHsoaWQ6IHN0cmluZykgPT4gUmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZD59IHJlY29yZCAtIEV4YWN0IHJlY29yZCBsb29rdXAuXG4gKiBAcHJvcGVydHkgeyhpZDogc3RyaW5nLCByb2xlOiBSZWdpc3RyeVJvbGUsIGxvY2F0aW9uPzogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbikgPT4gUmVnaXN0cnlJbXBsZW1lbnRhdGlvbn0gcmVzb2x2ZSAtIFJvbGUgbG9va3VwLlxuICovXG5cbi8qKlxuICogQ29uc3RydWN0cyBhbiBpbW11dGFibGUgcm9sZSByZWdpc3RyeSBmcm9tIG9yZGVyZWQgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlUmVjb3JkcyAtIE9yZGVyZWQgbGFuZ3VhZ2UgcmVjb3Jkcy5cbiAqIEByZXR1cm5zIHtSZWFkb25seTxMYW5ndWFnZVJlZ2lzdHJ5Pn0gUmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMYW5ndWFnZVJlZ2lzdHJ5KGNhbmRpZGF0ZVJlY29yZHMpIHtcbiAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlUmVjb3JkcykpIGludmFsaWRSZWdpc3RyeShcIlJlZ2lzdHJ5IHJlY29yZHMgbXVzdCBiZSBhbiBvcmRlcmVkIGRlbnNlIGFycmF5LlwiKVxuXG4gIC8qKiBAdHlwZSB7TWFwPHN0cmluZywgUmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeVJlY29yZD4+fSAqL1xuICBjb25zdCByZWNvcmRzQnlJZCA9IG5ldyBNYXAoKVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VDYXBhYmlsaXRpZXNbXX0gKi9cbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBbXVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCBjYW5kaWRhdGVSZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IGNhbmRpZGF0ZVJlY29yZHNbcmVjb3JkSW5kZXhdXG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoY2FuZGlkYXRlKSkgaW52YWxpZFJlZ2lzdHJ5KFwiRXZlcnkgcmVnaXN0cnkgcmVjb3JkIG11c3QgYmUgYSBwbGFpbiBvYmplY3QuXCIpXG4gICAgY29uc3QgaWQgPSBjYW5kaWRhdGUuaWRcblxuICAgIGlmICh0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIiB8fCBpZC5sZW5ndGggPT0gMCB8fCAhL15bYS16XVthLXowLTktXSokL3UudGVzdChpZCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShcIkV2ZXJ5IHJlZ2lzdHJ5IHJlY29yZCByZXF1aXJlcyBhIHN0YWJsZSBsb3dlcmNhc2UgSUQuXCIsIHR5cGVvZiBpZCA9PSBcInN0cmluZ1wiID8gaWQgOiB1bmRlZmluZWQpXG4gICAgfVxuICAgIGlmIChyZWNvcmRzQnlJZC5oYXMoaWQpKSBpbnZhbGlkUmVnaXN0cnkoYER1cGxpY2F0ZSByZWdpc3RyeSBJRCAnJHtpZH0nLmAsIGlkKVxuICAgIGlmIChPYmplY3Qua2V5cyhjYW5kaWRhdGUpLnNvbWUoKGtleSkgPT4gIXJlZ2lzdHJ5S2V5cy5oYXMoa2V5KSkpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIHVua25vd24gZmllbGRzLmAsIGlkKVxuICAgIGlmIChjYW5kaWRhdGUucHJvdmlkZXIgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgY2FuZGlkYXRlLnByb3ZpZGVyICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGRlY2xhcmVzIGFuIGludmFsaWQgcHJvdmlkZXIgcm9sZS5gLCBpZClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHJvbGUgb2YgcmVnaXN0cnlSb2xlcykge1xuICAgICAgaWYgKGNhbmRpZGF0ZVtyb2xlXSAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBjYW5kaWRhdGVbcm9sZV0gIT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcm9sZSAnJHtyb2xlfScgZm9yICcke2lkfScgbXVzdCBiZSBhIGZ1bmN0aW9uIHdoZW4gcHJlc2VudC5gLCBpZClcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgYXJ0aWZhY3RNdWx0aXBsaWNpdHkgPSBjYW5kaWRhdGUuYXJ0aWZhY3RNdWx0aXBsaWNpdHlcblxuICAgIGlmIChhcnRpZmFjdE11bHRpcGxpY2l0eSAhPSBcInNpbmdsZVwiICYmIGFydGlmYWN0TXVsdGlwbGljaXR5ICE9IFwibXVsdGlwbGVcIikge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgYW4gaW52YWxpZCBhcnRpZmFjdCBtdWx0aXBsaWNpdHkuYCwgaWQpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgY2FuZGlkYXRlLnJvdW5kVHJpcCAhPSBcImJvb2xlYW5cIikgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyByZXF1aXJlcyBhIEJvb2xlYW4gcm91bmQtdHJpcCBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICBjb25zdCBmZWF0dXJlc0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5mZWF0dXJlcyA/PyB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsXG4gICAgICBjb25kaXRpb25hbEV4cHJlc3Npb25zOiBmYWxzZSxcbiAgICAgIHN0cmluZ0ludGVycG9sYXRpb246IGZhbHNlLFxuICAgICAgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSxcbiAgICAgIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsXG4gICAgICBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsXG4gICAgICBvcHRpb25hbFZhbHVlczogZmFsc2UsXG4gICAgICBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgdHlwZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QoZmVhdHVyZXNDYW5kaWRhdGUpIHx8XG4gICAgICBPYmplY3Qua2V5cyhmZWF0dXJlc0NhbmRpZGF0ZSkuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiY2xvc2VkUmVjb3Jkcyxjb25kaXRpb25Db250cm9sbGVkTG9vcHMsY29uZGl0aW9uYWxFeHByZXNzaW9ucyxlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXMsZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzLGltbXV0YWJsZUNvbGxlY3Rpb25zLG9wdGlvbmFsVmFsdWVzLG9yZGVyZWRMaXN0SXRlcmF0aW9uLG9yZGVyZWRNYXBJdGVyYXRpb24scmVmZXJlbmNlQ2xhc3NlcyxzdHJpbmdJbnRlcnBvbGF0aW9uLHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3MsdHlwZWRFcnJvcnNcIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLmNsb3NlZFJlY29yZHMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5jb25kaXRpb25Db250cm9sbGVkTG9vcHMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5jb25kaXRpb25hbEV4cHJlc3Npb25zICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUuaW1tdXRhYmxlQ29sbGVjdGlvbnMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5vcHRpb25hbFZhbHVlcyAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLm9yZGVyZWRMaXN0SXRlcmF0aW9uICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUub3JkZXJlZE1hcEl0ZXJhdGlvbiAhPSBcImJvb2xlYW5cIiB8fFxuICAgICAgdHlwZW9mIGZlYXR1cmVzQ2FuZGlkYXRlLnJlZmVyZW5jZUNsYXNzZXMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS5zdHJpbmdJbnRlcnBvbGF0aW9uICE9IFwiYm9vbGVhblwiIHx8XG4gICAgICB0eXBlb2YgZmVhdHVyZXNDYW5kaWRhdGUudHlwZWRFcnJvcnMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIGZlYXR1cmUgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IGZlYXR1cmVzID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VGZWF0dXJlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgY2xvc2VkUmVjb3JkczogZmVhdHVyZXNDYW5kaWRhdGUuY2xvc2VkUmVjb3JkcyxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmVhdHVyZXNDYW5kaWRhdGUuY29uZGl0aW9uQ29udHJvbGxlZExvb3BzLFxuICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczogZmVhdHVyZXNDYW5kaWRhdGUuY29uZGl0aW9uYWxFeHByZXNzaW9ucyxcbiAgICAgIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmVhdHVyZXNDYW5kaWRhdGUuZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmZWF0dXJlc0NhbmRpZGF0ZS5nZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHMsXG4gICAgICBpbW11dGFibGVDb2xsZWN0aW9uczogZmVhdHVyZXNDYW5kaWRhdGUuaW1tdXRhYmxlQ29sbGVjdGlvbnMsXG4gICAgICBvcHRpb25hbFZhbHVlczogZmVhdHVyZXNDYW5kaWRhdGUub3B0aW9uYWxWYWx1ZXMsXG4gICAgICBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmVhdHVyZXNDYW5kaWRhdGUub3JkZXJlZExpc3RJdGVyYXRpb24sXG4gICAgICBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmZWF0dXJlc0NhbmRpZGF0ZS5vcmRlcmVkTWFwSXRlcmF0aW9uLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogZmVhdHVyZXNDYW5kaWRhdGUucmVmZXJlbmNlQ2xhc3NlcyxcbiAgICAgIHN0cmluZ0ludGVycG9sYXRpb246IGZlYXR1cmVzQ2FuZGlkYXRlLnN0cmluZ0ludGVycG9sYXRpb24sXG4gICAgICB0eXBlZEVycm9yczogZmVhdHVyZXNDYW5kaWRhdGUudHlwZWRFcnJvcnMsXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmZWF0dXJlc0NhbmRpZGF0ZS50eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzXG4gICAgfSkpXG4gICAgY29uc3QgbWFwcGluZ0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5tYXBwaW5nXG5cbiAgICBpZiAoIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZSkpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgbWFwcGluZyBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICBjb25zdCBtYXBwaW5nU25hcHNob3QgPSB7XG4gICAgICBiaW5hcnlSYW5nZXM6IG1hcHBpbmdDYW5kaWRhdGUuYmluYXJ5UmFuZ2VzLFxuICAgICAgcmljaFRleHQ6IG1hcHBpbmdDYW5kaWRhdGUucmljaFRleHQsXG4gICAgICBzb3VyY2VNYXBWMzogbWFwcGluZ0NhbmRpZGF0ZS5zb3VyY2VNYXBWM1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWFwcGluZ1NuYXBzaG90LnJpY2hUZXh0ICE9IFwiYm9vbGVhblwiIHx8IHR5cGVvZiBtYXBwaW5nU25hcHNob3Quc291cmNlTWFwVjMgIT0gXCJib29sZWFuXCIgfHxcbiAgICAgIHR5cGVvZiBtYXBwaW5nU25hcHNob3QuYmluYXJ5UmFuZ2VzICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBhbiBpbnZhbGlkIG1hcHBpbmcgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgfVxuICAgIGNvbnN0IG1hcHBpbmcgPSBkZWVwRnJlZXplKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5MYW5ndWFnZU1hcHBpbmdDYXBhYmlsaXRpZXN9ICovIChtYXBwaW5nU25hcHNob3QpKVxuICAgIGNvbnN0IGFjY2VwdGFuY2VDYW5kaWRhdGUgPSBjYW5kaWRhdGUuYWNjZXB0YW5jZVxuXG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGFjY2VwdGFuY2VDYW5kaWRhdGUpIHx8ICFpc0RlbnNlQXJyYXkoYWNjZXB0YW5jZUNhbmRpZGF0ZS5zdGFnZXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWlucykpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICB9XG4gICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgY29uc3Qgc3RhZ2VTbmFwc2hvdCA9IFtdXG4gICAgLyoqIEB0eXBlIHt1bmtub3duW119ICovXG4gICAgY29uc3QgdG9vbGNoYWluU25hcHNob3QgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgc3RhZ2VTbmFwc2hvdC5wdXNoKGFjY2VwdGFuY2VDYW5kaWRhdGUuc3RhZ2VzW2luZGV4XSlcbiAgICB9XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFjY2VwdGFuY2VDYW5kaWRhdGUudG9vbGNoYWlucy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIHRvb2xjaGFpblNuYXBzaG90LnB1c2goYWNjZXB0YW5jZUNhbmRpZGF0ZS50b29sY2hhaW5zW2luZGV4XSlcbiAgICB9XG4gICAgaWYgKCFzdGFnZVNuYXBzaG90LmV2ZXJ5KChzdGFnZSkgPT4gdHlwZW9mIHN0YWdlID09IFwic3RyaW5nXCIgJiYgYWNjZXB0YW5jZVN0YWdlcy5oYXMoc3RhZ2UpKSB8fFxuICAgICAgIXRvb2xjaGFpblNuYXBzaG90LmV2ZXJ5KCh0b29sY2hhaW4pID0+IHR5cGVvZiB0b29sY2hhaW4gPT0gXCJzdHJpbmdcIiAmJiB0b29sY2hhaW4ubGVuZ3RoID4gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIGFuIGludmFsaWQgYWNjZXB0YW5jZSBkZWNsYXJhdGlvbi5gLCBpZClcbiAgICB9XG4gICAgY29uc3Qgc3RhZ2VzID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZVtdfSAqLyAoc3RhZ2VTbmFwc2hvdClcbiAgICBjb25zdCB0b29sY2hhaW5zID0gLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKHRvb2xjaGFpblNuYXBzaG90KVxuICAgIGxldCBwcmV2aW91c1N0YWdlID0gLTFcbiAgICBjb25zdCBkZWNsYXJlZFN0YWdlcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGFjY2VwdGFuY2VTdGFnZXMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoc3RhZ2UpKSlcblxuICAgICAgaWYgKGRlY2xhcmVkU3RhZ2VzLmhhcyhzdGFnZSkgfHwgc3RhZ2VJbmRleCA8IHByZXZpb3VzU3RhZ2UpIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIHVub3JkZXJlZCBvciBkdXBsaWNhdGUgYWNjZXB0YW5jZSBzdGFnZXMuYCwgaWQpXG4gICAgICBkZWNsYXJlZFN0YWdlcy5hZGQoc3RhZ2UpXG4gICAgICBwcmV2aW91c1N0YWdlID0gc3RhZ2VJbmRleFxuICAgIH1cbiAgICBpZiAobmV3IFNldCh0b29sY2hhaW5zKS5zaXplICE9IHRvb2xjaGFpbnMubGVuZ3RoKSB7XG4gICAgICBpbnZhbGlkUmVnaXN0cnkoYFJlZ2lzdHJ5IHJlY29yZCAnJHtpZH0nIGhhcyBkdXBsaWNhdGUgYWNjZXB0YW5jZSB0b29sY2hhaW5zLmAsIGlkKVxuICAgIH1cbiAgICBjb25zdCBjaGVja0NhbmRpZGF0ZSA9IGNhbmRpZGF0ZS5jaGVja1xuICAgIC8qKiBAdHlwZSB7UmVhZG9ubHk8TGFuZ3VhZ2VSZWdpc3RyeUNoZWNrUmVjb3JkPn0gKi9cbiAgICBsZXQgY2hlY2tcblxuICAgIGlmIChjaGVja0NhbmRpZGF0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGVjayA9IGRlZXBGcmVlemUoe3N0YWdlczogW10sIHN1cHBvcnRlZDogZmFsc2UsIHRvb2xjaGFpbnM6IFtdfSlcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFpc1BsYWluT2JqZWN0KGNoZWNrQ2FuZGlkYXRlKSB8fCBPYmplY3Qua2V5cyhjaGVja0NhbmRpZGF0ZSkuc29ydCgpLmpvaW4oXCIsXCIpICE9IFwiZmFjdG9yeSxzdGFnZXMsdG9vbGNoYWluc1wiIHx8XG4gICAgICAgIHR5cGVvZiBjaGVja0NhbmRpZGF0ZS5mYWN0b3J5ICE9IFwiZnVuY3Rpb25cIiB8fCAhaXNEZW5zZUFycmF5KGNoZWNrQ2FuZGlkYXRlLnN0YWdlcykgfHxcbiAgICAgICAgIWlzRGVuc2VBcnJheShjaGVja0NhbmRpZGF0ZS50b29sY2hhaW5zKSB8fCBjaGVja0NhbmRpZGF0ZS5zdGFnZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBoYXMgYW4gaW52YWxpZCBkZXZlbG9wZXItY2hlY2sgZGVjbGFyYXRpb24uYCwgaWQpXG4gICAgICB9XG4gICAgICAvKiogQHR5cGUge3Vua25vd25bXX0gKi9cbiAgICAgIGNvbnN0IGNoZWNrU3RhZ2VTbmFwc2hvdCA9IFtdXG4gICAgICAvKiogQHR5cGUge3Vua25vd25bXX0gKi9cbiAgICAgIGNvbnN0IGNoZWNrVG9vbGNoYWluU25hcHNob3QgPSBbXVxuXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2hlY2tDYW5kaWRhdGUuc3RhZ2VzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgICAgICBjaGVja1N0YWdlU25hcHNob3QucHVzaChjaGVja0NhbmRpZGF0ZS5zdGFnZXNbaW5kZXhdKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNoZWNrQ2FuZGlkYXRlLnRvb2xjaGFpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICAgIGNoZWNrVG9vbGNoYWluU25hcHNob3QucHVzaChjaGVja0NhbmRpZGF0ZS50b29sY2hhaW5zW2luZGV4XSlcbiAgICAgIH1cbiAgICAgIGlmICghY2hlY2tTdGFnZVNuYXBzaG90LmV2ZXJ5KHN0YWdlID0+IHR5cGVvZiBzdGFnZSA9PSBcInN0cmluZ1wiICYmIGRldmVsb3BlckNoZWNrU3RhZ2VzLmhhcyhzdGFnZSkgJiZcbiAgICAgICAgZGVjbGFyZWRTdGFnZXMuaGFzKHN0YWdlKSkgfHwgIWNoZWNrVG9vbGNoYWluU25hcHNob3QuZXZlcnkodG9vbGNoYWluID0+IHR5cGVvZiB0b29sY2hhaW4gPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICB0b29sY2hhaW5zLmluY2x1ZGVzKHRvb2xjaGFpbikpIHx8IG5ldyBTZXQoY2hlY2tTdGFnZVNuYXBzaG90KS5zaXplICE9IGNoZWNrU3RhZ2VTbmFwc2hvdC5sZW5ndGggfHxcbiAgICAgICAgbmV3IFNldChjaGVja1Rvb2xjaGFpblNuYXBzaG90KS5zaXplICE9IGNoZWNrVG9vbGNoYWluU25hcHNob3QubGVuZ3RoKSB7XG4gICAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGV2ZWxvcGVyIGNoZWNrcyBtdXN0IHVzZSBvcmRlcmVkIG5vbi1leGVjdXRpbmcgZGVjbGFyZWQgc3RhZ2VzIGFuZCB0b29sY2hhaW5zLmAsIGlkKVxuICAgICAgfVxuICAgICAgbGV0IHByZXZpb3VzQ2hlY2tTdGFnZSA9IC0xXG5cbiAgICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgY2hlY2tTdGFnZVNuYXBzaG90KSB7XG4gICAgICAgIGNvbnN0IHN0YWdlSW5kZXggPSAvKiogQHR5cGUge251bWJlcn0gKi8gKGFjY2VwdGFuY2VTdGFnZXMuZ2V0KC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAoc3RhZ2UpKSlcblxuICAgICAgICBpZiAoc3RhZ2VJbmRleCA8IHByZXZpb3VzQ2hlY2tTdGFnZSkge1xuICAgICAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgaGFzIHVub3JkZXJlZCBkZXZlbG9wZXItY2hlY2sgc3RhZ2VzLmAsIGlkKVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzQ2hlY2tTdGFnZSA9IHN0YWdlSW5kZXhcbiAgICAgIH1cbiAgICAgIGNoZWNrID0gZGVlcEZyZWV6ZSh7XG4gICAgICAgIGZhY3Rvcnk6IC8qKiBAdHlwZSB7VGFyZ2V0Q2hlY2tQbGFuRmFjdG9yeX0gKi8gKGNoZWNrQ2FuZGlkYXRlLmZhY3RvcnkpLFxuICAgICAgICBzdGFnZXM6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VbXX0gKi8gKGNoZWNrU3RhZ2VTbmFwc2hvdCksXG4gICAgICAgIHN1cHBvcnRlZDogdHJ1ZSxcbiAgICAgICAgdG9vbGNoYWluczogLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi8gKGNoZWNrVG9vbGNoYWluU25hcHNob3QpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGhhc0Zyb250ZW5kID0gdHlwZW9mIGNhbmRpZGF0ZS5mcm9udGVuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNUZXh0QmFja2VuZCA9IHR5cGVvZiBjYW5kaWRhdGUudGV4dEJhY2tlbmQgPT0gXCJmdW5jdGlvblwiXG4gICAgY29uc3QgaGFzQmluYXJ5QmFja2VuZCA9IHR5cGVvZiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNBcHBsaWNhdGlvbkJhY2tlbmQgPSB0eXBlb2YgY2FuZGlkYXRlLmFwcGxpY2F0aW9uQmFja2VuZCA9PSBcImZ1bmN0aW9uXCJcbiAgICBjb25zdCBoYXNCYWNrZW5kID0gaGFzVGV4dEJhY2tlbmQgfHwgaGFzQmluYXJ5QmFja2VuZCB8fCBoYXNBcHBsaWNhdGlvbkJhY2tlbmRcblxuICAgIGlmIChjaGVjay5zdXBwb3J0ZWQgJiYgIWhhc0JhY2tlbmQpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgcmVjb3JkICcke2lkfScgZGVjbGFyZXMgZGV2ZWxvcGVyIGNoZWNrcyB3aXRob3V0IGEgYmFja2VuZCByb2xlLmAsIGlkKVxuICAgIH1cblxuICAgIGlmICgobWFwcGluZy5yaWNoVGV4dCB8fCBtYXBwaW5nLnNvdXJjZU1hcFYzIHx8IG1hcHBpbmcuYmluYXJ5UmFuZ2VzKSAmJiAhaGFzQmFja2VuZCB8fFxuICAgICAgbWFwcGluZy5zb3VyY2VNYXBWMyAmJiAhbWFwcGluZy5yaWNoVGV4dCB8fFxuICAgICAgbWFwcGluZy5iaW5hcnlSYW5nZXMgJiYgIWhhc0JpbmFyeUJhY2tlbmQgJiYgIWhhc0FwcGxpY2F0aW9uQmFja2VuZCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBtYXBwaW5nIHN1cHBvcnQgd2l0aG91dCBpdHMgcmVxdWlyZWQgYmFja2VuZCByb2xlLmAsIGlkKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLnJvdW5kVHJpcCAmJiAoIWhhc0Zyb250ZW5kIHx8ICFoYXNCYWNrZW5kKSkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyByb3VuZC10cmlwIHN1cHBvcnQgd2l0aG91dCBmcm9udGVuZCBhbmQgYmFja2VuZCByb2xlcy5gLCBpZClcbiAgICB9XG4gICAgaWYgKHN0YWdlcy5pbmNsdWRlcyhcInBhcnNlXCIpICYmICFoYXNGcm9udGVuZCB8fCBzdGFnZXMuaW5jbHVkZXMoXCJnZW5lcmF0ZVwiKSAmJiAhaGFzQmFja2VuZCkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSByZWNvcmQgJyR7aWR9JyBkZWNsYXJlcyBhbiBhY2NlcHRhbmNlIHN0YWdlIHdpdGhvdXQgaXRzIHJlcXVpcmVkIHJvbGUuYCwgaWQpXG4gICAgfVxuXG4gICAgY29uc3QgaGFzRGVmYXVsdGVkQmFja2VuZCA9IGhhc1RleHRCYWNrZW5kIHx8IGhhc0JpbmFyeUJhY2tlbmRcblxuICAgIGlmICgoaGFzRGVmYXVsdGVkQmFja2VuZCB8fCBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAodHlwZW9mIGNhbmRpZGF0ZS5kZWZhdWx0RmlsZW5hbWUgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUuZGVmYXVsdEZpbGVuYW1lLmxlbmd0aCA9PSAwKSkge1xuICAgICAgaW52YWxpZFJlZ2lzdHJ5KGBSZWdpc3RyeSBiYWNrZW5kICcke2lkfScgcmVxdWlyZXMgYSBkZWZhdWx0IGZpbGVuYW1lLmAsIGlkKVxuICAgIH1cbiAgICBpZiAoKGhhc0RlZmF1bHRlZEJhY2tlbmQgfHwgY2FuZGlkYXRlLm1lZGlhVHlwZSAhPT0gdW5kZWZpbmVkKSAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUubWVkaWFUeXBlICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLm1lZGlhVHlwZS5sZW5ndGggPT0gMCkpIHtcbiAgICAgIGludmFsaWRSZWdpc3RyeShgUmVnaXN0cnkgYmFja2VuZCAnJHtpZH0nIHJlcXVpcmVzIGEgbWVkaWEgdHlwZS5gLCBpZClcbiAgICB9XG5cbiAgICBjb25zdCBhY2NlcHRhbmNlID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VBY2NlcHRhbmNlQ2FwYWJpbGl0aWVzfSAqLyAoe1xuICAgICAgc3RhZ2VzLFxuICAgICAgdG9vbGNoYWluc1xuICAgIH0pKVxuICAgIGNvbnN0IHJlY29yZCA9IGRlZXBGcmVlemUoLyoqIEB0eXBlIHtMYW5ndWFnZVJlZ2lzdHJ5UmVjb3JkfSAqLyAoe1xuICAgICAgYWNjZXB0YW5jZSxcbiAgICAgIGFydGlmYWN0TXVsdGlwbGljaXR5LFxuICAgICAgY2hlY2ssXG4gICAgICBmZWF0dXJlcyxcbiAgICAgIGlkLFxuICAgICAgbWFwcGluZyxcbiAgICAgIHJvdW5kVHJpcDogY2FuZGlkYXRlLnJvdW5kVHJpcCxcbiAgICAgIC4uLih0eXBlb2YgY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZSA9PSBcInN0cmluZ1wiID8ge2RlZmF1bHRGaWxlbmFtZTogY2FuZGlkYXRlLmRlZmF1bHRGaWxlbmFtZX0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5tZWRpYVR5cGUgPT0gXCJzdHJpbmdcIiA/IHttZWRpYVR5cGU6IGNhbmRpZGF0ZS5tZWRpYVR5cGV9IDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjYW5kaWRhdGUucHJvdmlkZXIgPT0gXCJib29sZWFuXCIgPyB7cHJvdmlkZXI6IGNhbmRpZGF0ZS5wcm92aWRlcn0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5mcm9udGVuZCA9PSBcImZ1bmN0aW9uXCIgPyB7ZnJvbnRlbmQ6IGNhbmRpZGF0ZS5mcm9udGVuZH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS50ZXh0QmFja2VuZCA9PSBcImZ1bmN0aW9uXCIgPyB7dGV4dEJhY2tlbmQ6IGNhbmRpZGF0ZS50ZXh0QmFja2VuZH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5iaW5hcnlCYWNrZW5kID09IFwiZnVuY3Rpb25cIiA/IHtiaW5hcnlCYWNrZW5kOiBjYW5kaWRhdGUuYmluYXJ5QmFja2VuZH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmQgPT0gXCJmdW5jdGlvblwiID8ge2FwcGxpY2F0aW9uQmFja2VuZDogY2FuZGlkYXRlLmFwcGxpY2F0aW9uQmFja2VuZH0gOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNhbmRpZGF0ZS5pbnRlcm9wZXJhYmlsaXR5ID09IFwiZnVuY3Rpb25cIiA/IHtpbnRlcm9wZXJhYmlsaXR5OiBjYW5kaWRhdGUuaW50ZXJvcGVyYWJpbGl0eX0gOiB7fSlcbiAgICB9KSlcbiAgICBjb25zdCBkZXNjcmlwdG9yID0gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuTGFuZ3VhZ2VDYXBhYmlsaXRpZXN9ICovICh7XG4gICAgICBhY2NlcHRhbmNlLFxuICAgICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHksXG4gICAgICBjaGVjazogZGVlcEZyZWV6ZSh7c3RhZ2VzOiBjaGVjay5zdGFnZXMsIHN1cHBvcnRlZDogY2hlY2suc3VwcG9ydGVkLCB0b29sY2hhaW5zOiBjaGVjay50b29sY2hhaW5zfSksXG4gICAgICBmZWF0dXJlcyxcbiAgICAgIGlkLFxuICAgICAgbWFwcGluZyxcbiAgICAgIHJvbGVzOiB7XG4gICAgICAgIGFwcGxpY2F0aW9uQmFja2VuZDogdHlwZW9mIGNhbmRpZGF0ZS5hcHBsaWNhdGlvbkJhY2tlbmQgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBiaW5hcnlCYWNrZW5kOiB0eXBlb2YgY2FuZGlkYXRlLmJpbmFyeUJhY2tlbmQgPT0gXCJmdW5jdGlvblwiLFxuICAgICAgICBmcm9udGVuZDogdHlwZW9mIGNhbmRpZGF0ZS5mcm9udGVuZCA9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgIGludGVyb3BlcmFiaWxpdHk6IHR5cGVvZiBjYW5kaWRhdGUuaW50ZXJvcGVyYWJpbGl0eSA9PSBcImZ1bmN0aW9uXCIsXG4gICAgICAgIHByb3ZpZGVyOiBjYW5kaWRhdGUucHJvdmlkZXIgPT09IHRydWUsXG4gICAgICAgIHRleHRCYWNrZW5kOiB0eXBlb2YgY2FuZGlkYXRlLnRleHRCYWNrZW5kID09IFwiZnVuY3Rpb25cIlxuICAgICAgfSxcbiAgICAgIHJvdW5kVHJpcDogY2FuZGlkYXRlLnJvdW5kVHJpcFxuICAgIH0pKVxuXG4gICAgcmVjb3Jkc0J5SWQuc2V0KGlkLCByZWNvcmQpXG4gICAgZGVzY3JpcHRvcnMucHVzaChkZXNjcmlwdG9yKVxuICB9XG5cbiAgY29uc3QgZnJvemVuRGVzY3JpcHRvcnMgPSBkZWVwRnJlZXplKGRlc2NyaXB0b3JzKVxuICBjb25zdCBpZHMgPSBPYmplY3QuZnJlZXplKGZyb3plbkRlc2NyaXB0b3JzLm1hcCgoe2lkfSkgPT4gaWQpKVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKHtcbiAgICBkZXNjcmlwdG9yczogZnJvemVuRGVzY3JpcHRvcnMsXG4gICAgaWRzLFxuICAgIHJlY29yZChpZCkge1xuICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkc0J5SWQuZ2V0KGlkKVxuXG4gICAgICBpZiAoIXJlY29yZCkgdW5zdXBwb3J0ZWRMYW5ndWFnZShpZClcblxuICAgICAgcmV0dXJuIHJlY29yZFxuICAgIH0sXG4gICAgcmVzb2x2ZShpZCwgcm9sZSwgbG9jYXRpb24pIHtcbiAgICAgIGlmICghcmVnaXN0cnlSb2xlcy5pbmNsdWRlcyhyb2xlKSkgaW52YWxpZFJlZ2lzdHJ5KGBVbmtub3duIHJlZ2lzdHJ5IHJvbGUgJyR7cm9sZX0nLmAsIGlkKVxuICAgICAgY29uc3QgcmVjb3JkID0gcmVjb3Jkc0J5SWQuZ2V0KGlkKVxuXG4gICAgICBpZiAoIXJlY29yZCkgdW5zdXBwb3J0ZWRMYW5ndWFnZShpZCwgbG9jYXRpb24sIHJvbGUpXG4gICAgICBjb25zdCBpbXBsZW1lbnRhdGlvbiA9IHJlY29yZFtyb2xlXVxuXG4gICAgICBpZiAodHlwZW9mIGltcGxlbWVudGF0aW9uICE9IFwiZnVuY3Rpb25cIikgdW5zdXBwb3J0ZWRSb2xlKGlkLCBwdWJsaWNSb2xlTmFtZShyb2xlKSwgbG9jYXRpb24pXG5cbiAgICAgIHJldHVybiBpbXBsZW1lbnRhdGlvblxuICAgIH1cbiAgfSlcbn1cblxuLyoqXG4gKiBQSFAgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgcGhwRnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlUGhwKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIFJ1YnkgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgcnVieUZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZVJ1Ynkoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogSmF2YVNjcmlwdCByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBqYXZhU2NyaXB0RnJvbnRlbmQgPSAoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pID0+IHBhcnNlSmF2YVNjcmlwdFR5cGVTY3JpcHQoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIGxhbmd1YWdlOiBcImphdmFzY3JpcHRcIiwgcHJvZ3JhbSwgc291cmNlfSlcblxuLyoqXG4gKiBUeXBlU2NyaXB0IHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IHR5cGVTY3JpcHRGcm9udGVuZCA9ICh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgcHJvZ3JhbSwgc291cmNlfSkgPT4gcGFyc2VKYXZhU2NyaXB0VHlwZVNjcmlwdCh7Y2FwYWJpbGl0aWVzLCBmaWxlbmFtZSwgbGFuZ3VhZ2U6IFwidHlwZXNjcmlwdFwiLCBwcm9ncmFtLCBzb3VyY2V9KVxuXG4vKipcbiAqIEphdmEgcmVnaXN0cnkgZnJvbnRlbmQgd3JhcHBlci5cbiAqIEB0eXBlIHtGcm9udGVuZH1cbiAqL1xuY29uc3QgamF2YUZyb250ZW5kID0gKHtjYXBhYmlsaXRpZXMsIGZpbGVuYW1lLCBwcm9ncmFtLCBzb3VyY2V9KSA9PiBwYXJzZUphdmEoe2NhcGFiaWxpdGllcywgZmlsZW5hbWUsIHByb2dyYW0sIHNvdXJjZX0pXG5cbi8qKlxuICogS290bGluIHJlZ2lzdHJ5IGZyb250ZW5kIHdyYXBwZXIuXG4gKiBAdHlwZSB7RnJvbnRlbmR9XG4gKi9cbmNvbnN0IGtvdGxpbkZyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VLb3RsaW4oe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIFB5dGhvbiByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBweXRob25Gcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlUHl0aG9uKHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBDIyByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBjc2hhcnBGcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlQ1NoYXJwKHtmaWxlbmFtZSwgc291cmNlfSlcblxuLyoqXG4gKiBHbyByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBnb0Zyb250ZW5kID0gKHtmaWxlbmFtZSwgc291cmNlfSkgPT4gcGFyc2VHbyh7ZmlsZW5hbWUsIHNvdXJjZX0pXG5cbi8qKlxuICogRGFydCByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCBkYXJ0RnJvbnRlbmQgPSAoe2ZpbGVuYW1lLCBzb3VyY2V9KSA9PiBwYXJzZURhcnQoe2ZpbGVuYW1lLCBzb3VyY2V9KVxuXG4vKipcbiAqIFppZyByZWdpc3RyeSBmcm9udGVuZCB3cmFwcGVyLlxuICogQHR5cGUge0Zyb250ZW5kfVxuICovXG5jb25zdCB6aWdGcm9udGVuZCA9ICh7ZmlsZW5hbWUsIHNvdXJjZX0pID0+IHBhcnNlWmlnKHtmaWxlbmFtZSwgc291cmNlfSlcblxuY29uc3QgcmVjb3JkcyA9IFtcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInBocDgyXCJdfSxcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZVBocENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJ2YWxpZGF0ZVwiXSwgdG9vbGNoYWluczogW1wicGhwODJcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnBocFwiLFxuICAgIGZyb250ZW5kOiBwaHBGcm9udGVuZCxcbiAgICBpZDogXCJwaHBcIixcbiAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24veC1odHRwZC1waHBcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVQaHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJydWJ5XCJdfSxcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZVJ1YnlDaGVja1BsYW4sIHN0YWdlczogW1widmFsaWRhdGVcIl0sIHRvb2xjaGFpbnM6IFtcInJ1YnlcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnJiXCIsXG4gICAgZnJvbnRlbmQ6IHJ1YnlGcm9udGVuZCxcbiAgICBpZDogXCJydWJ5XCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1ydWJ5XCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlUnVieVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcIm5vZGVcIl19LFxuICAgIGNoZWNrOiB7ZmFjdG9yeTogY3JlYXRlSmF2YVNjcmlwdENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJ2YWxpZGF0ZVwiXSwgdG9vbGNoYWluczogW1wibm9kZVwiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0uanNcIixcbiAgICBmcm9udGVuZDogamF2YVNjcmlwdEZyb250ZW5kLFxuICAgIGlkOiBcImphdmFzY3JpcHRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC9qYXZhc2NyaXB0XCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlSmF2YVNjcmlwdFxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1widHNjXCIsIFwibm9kZVwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVUeXBlU2NyaXB0Q2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIl0sIHRvb2xjaGFpbnM6IFtcInRzY1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0udHNcIixcbiAgICBmcm9udGVuZDogdHlwZVNjcmlwdEZyb250ZW5kLFxuICAgIGlkOiBcInR5cGVzY3JpcHRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC90eXBlc2NyaXB0XCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlVHlwZVNjcmlwdFxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiamF2YWNcIiwgXCJqYXZhXCJdfSxcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZUphdmFDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiXSwgdG9vbGNoYWluczogW1wiamF2YWNcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJNYWluLmphdmFcIixcbiAgICBmcm9udGVuZDogamF2YUZyb250ZW5kLFxuICAgIGlkOiBcImphdmFcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWphdmEtc291cmNlXCIsXG4gICAgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlSmF2YVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wia290bGluY1wiLCBcImphdmEyNVwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVLb3RsaW5DaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiXSwgdG9vbGNoYWluczogW1wia290bGluY1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcIlByb2dyYW0ua3RcIixcbiAgICBmcm9udGVuZDoga290bGluRnJvbnRlbmQsXG4gICAgaWQ6IFwia290bGluXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1rb3RsaW5cIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVLb3RsaW5cbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInB5dGhvblwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVQeXRob25DaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiXSwgdG9vbGNoYWluczogW1wicHl0aG9uXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwicHJvZ3JhbS5weVwiLFxuICAgIGZyb250ZW5kOiBweXRob25Gcm9udGVuZCxcbiAgICBpZDogXCJweXRob25cIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXB5dGhvblwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVB5dGhvblxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImRvdG5ldFwiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZUNTaGFycENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJyZXN0b3JlXCIsIFwiY29tcGlsZVwiXSwgdG9vbGNoYWluczogW1wiZG90bmV0XCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwiUHJvZ3JhbS5jc1wiLFxuICAgIGZyb250ZW5kOiBjc2hhcnBGcm9udGVuZCxcbiAgICBpZDogXCJjc2hhcnBcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWNzaGFycFwiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUNTaGFycFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZ29cIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVHb0NoZWNrUGxhbiwgc3RhZ2VzOiBbXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIl0sIHRvb2xjaGFpbnM6IFtcImdvXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwibWFpbi5nb1wiLFxuICAgIGZyb250ZW5kOiBnb0Zyb250ZW5kLFxuICAgIGlkOiBcImdvXCIsXG4gICAgbWVkaWFUeXBlOiBcInRleHQveC1nb1wiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUdvTW9kdWxlXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJsaW5rXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiY2xhbmdcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVDQ2hlY2tQbGFuLCBzdGFnZXM6IFtcImNvbXBpbGVcIiwgXCJsaW5rXCJdLCB0b29sY2hhaW5zOiBbXCJjbGFuZ1wiXX0sXG4gICAgZGVmYXVsdEZpbGVuYW1lOiBcInByb2dyYW0uY1wiLFxuICAgIGZyb250ZW5kOiBwYXJzZUMsXG4gICAgaWQ6IFwiY1wiLFxuICAgIG1lZGlhVHlwZTogXCJ0ZXh0L3gtY1wiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZUNQcm9ncmFtXG4gIH0pLFxuICBsYW5ndWFnZSh7XG4gICAgYWNjZXB0YW5jZToge3N0YWdlczogW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJsaW5rXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiY2xhbmdwcFwiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVDcHBDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiLCBcImxpbmtcIl0sIHRvb2xjaGFpbnM6IFtcImNsYW5ncHBcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLmNwcFwiLCBmcm9udGVuZDogcGFyc2VDcHAsIGlkOiBcImNwcFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LWMrK3NyY1wiLCB0ZXh0QmFja2VuZDogZ2VuZXJhdGVDcHBcbiAgfSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcInZhbGlkYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wicnVzdGNcIiwgXCJjYXJnb1wiXX0sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBjaGVjazoge2ZhY3Rvcnk6IGNyZWF0ZVJ1c3RDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiLCBcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJydXN0Y1wiLCBcImNhcmdvXCJdfSxcbiAgICBkZWZhdWx0RmlsZW5hbWU6IFwic3JjL21haW4ucnNcIiwgZnJvbnRlbmQ6IHBhcnNlUnVzdCwgaWQ6IFwicnVzdFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LXJ1c3RcIiwgdGV4dEJhY2tlbmQ6IGdlbmVyYXRlUnVzdFByb2plY3RcbiAgfSksXG4gIGxhbmd1YWdlKHthY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcInN3aWZ0Y1wiXX0sXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVTd2lmdENoZWNrUGxhbiwgc3RhZ2VzOiBbXCJjb21waWxlXCJdLCB0b29sY2hhaW5zOiBbXCJzd2lmdGNcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLnN3aWZ0XCIsIGZyb250ZW5kOiBwYXJzZVN3aWZ0LCBpZDogXCJzd2lmdFwiLCBtZWRpYVR5cGU6IFwidGV4dC94LXN3aWZ0XCIsIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVN3aWZ0fSksXG4gIGxhbmd1YWdlKHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImV4ZWN1dGVcIl0sIHRvb2xjaGFpbnM6IFtcImRhcnRcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVEYXJ0Q2hlY2tQbGFuLCBzdGFnZXM6IFtcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIl0sIHRvb2xjaGFpbnM6IFtcImRhcnRcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJiaW4vcHJvZ3JhbS5kYXJ0XCIsXG4gICAgZmVhdHVyZXM6IHtcbiAgICAgIGNsb3NlZFJlY29yZHM6IGZhbHNlLFxuICAgICAgY29uZGl0aW9uQ29udHJvbGxlZExvb3BzOiBmYWxzZSxcbiAgICAgIGNvbmRpdGlvbmFsRXhwcmVzc2lvbnM6IGZhbHNlLFxuICAgICAgc3RyaW5nSW50ZXJwb2xhdGlvbjogZmFsc2UsXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IGZhbHNlLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiB0cnVlLFxuICAgICAgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLFxuICAgICAgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLFxuICAgICAgb3JkZXJlZExpc3RJdGVyYXRpb246IGZhbHNlLFxuICAgICAgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSxcbiAgICAgIHR5cGVkRXJyb3JzOiBmYWxzZSxcbiAgICAgIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlXG4gICAgfSxcbiAgICBmcm9udGVuZDogZGFydEZyb250ZW5kLFxuICAgIGlkOiBcImRhcnRcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LWRhcnRcIixcbiAgICB0ZXh0QmFja2VuZDogZ2VuZXJhdGVEYXJ0UGFja2FnZVxuICB9KSxcbiAgbGFuZ3VhZ2Uoe1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcInBhcnNlXCIsIFwiZ2VuZXJhdGVcIiwgXCJjb21waWxlXCIsIFwidmFsaWRhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ6aWdcIl19LFxuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcIm11bHRpcGxlXCIsXG4gICAgY2hlY2s6IHtmYWN0b3J5OiBjcmVhdGVaaWdDaGVja1BsYW4sIHN0YWdlczogW1wiY29tcGlsZVwiLCBcInZhbGlkYXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ6aWdcIl19LFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJzcmMvbWFpbi56aWdcIixcbiAgICBmZWF0dXJlczoge1xuICAgICAgY2xvc2VkUmVjb3JkczogZmFsc2UsXG4gICAgICBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLFxuICAgICAgY29uZGl0aW9uYWxFeHByZXNzaW9uczogZmFsc2UsXG4gICAgICBzdHJpbmdJbnRlcnBvbGF0aW9uOiBmYWxzZSxcbiAgICAgIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsXG4gICAgICBnZW5lcmFsRnVuY3Rpb25zQW5kQ2FsbHM6IHRydWUsXG4gICAgICBpbW11dGFibGVDb2xsZWN0aW9uczogZmFsc2UsXG4gICAgICBvcHRpb25hbFZhbHVlczogZmFsc2UsXG4gICAgICBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsXG4gICAgICBvcmRlcmVkTWFwSXRlcmF0aW9uOiBmYWxzZSxcbiAgICAgIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLFxuICAgICAgdHlwZWRFcnJvcnM6IGZhbHNlLFxuICAgICAgdHlwZVBhcmFtZXRlcnNBbmRHZW5lcmljczogZmFsc2VcbiAgICB9LFxuICAgIGZyb250ZW5kOiB6aWdGcm9udGVuZCxcbiAgICBpZDogXCJ6aWdcIixcbiAgICBtZWRpYVR5cGU6IFwidGV4dC94LXppZ1wiLFxuICAgIHRleHRCYWNrZW5kOiBnZW5lcmF0ZVppZ1Byb2plY3RcbiAgfSksXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiLCBcInZhbGlkYXRlXCIsIFwiaW5zdGFudGlhdGVcIiwgXCJleGVjdXRlXCJdLCB0b29sY2hhaW5zOiBbXCJ3YXNtLXZhbGlkYXRlXCIsIFwibm9kZVwiLCBcImNocm9taXVtXCJdfSxcbiAgICBhcHBsaWNhdGlvbkJhY2tlbmQ6IGdlbmVyYXRlQnJvd3Nlcldhc20sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBiaW5hcnlCYWNrZW5kOiBnZW5lcmF0ZUJyb3dzZXJXYXNtLFxuICAgIGRlZmF1bHRGaWxlbmFtZTogXCJwcm9ncmFtLndhc21cIixcbiAgICBmZWF0dXJlczoge2Nsb3NlZFJlY29yZHM6IGZhbHNlLCBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLCBjb25kaXRpb25hbEV4cHJlc3Npb25zOiBmYWxzZSwgc3RyaW5nSW50ZXJwb2xhdGlvbjogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwid2FzbVwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgbWVkaWFUeXBlOiBcImFwcGxpY2F0aW9uL3dhc21cIixcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiYW5kcm9pZFwiXX0sXG4gICAgYXBwbGljYXRpb25CYWNrZW5kOiBnZW5lcmF0ZUFuZHJvaWRBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGNvbmRpdGlvbmFsRXhwcmVzc2lvbnM6IGZhbHNlLCBzdHJpbmdJbnRlcnBvbGF0aW9uOiBmYWxzZSwgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSwgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSwgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLCBvcHRpb25hbFZhbHVlczogZmFsc2UsIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSwgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLCB0eXBlZEVycm9yczogZmFsc2UsIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlfSxcbiAgICBpZDogXCJhbmRyb2lkXCIsXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogdHJ1ZSwgcmljaFRleHQ6IHRydWUsIHNvdXJjZU1hcFYzOiB0cnVlfSxcbiAgICByb3VuZFRyaXA6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBhY2NlcHRhbmNlOiB7c3RhZ2VzOiBbXCJnZW5lcmF0ZVwiXSwgdG9vbGNoYWluczogW119LFxuICAgIGFwcGxpY2F0aW9uQmFja2VuZDogZ2VuZXJhdGVJb3NBcHBsaWNhdGlvbixcbiAgICBhcnRpZmFjdE11bHRpcGxpY2l0eTogXCJtdWx0aXBsZVwiLFxuICAgIGZlYXR1cmVzOiB7Y2xvc2VkUmVjb3JkczogZmFsc2UsIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogZmFsc2UsIGNvbmRpdGlvbmFsRXhwcmVzc2lvbnM6IGZhbHNlLCBzdHJpbmdJbnRlcnBvbGF0aW9uOiBmYWxzZSwgZWZmZWN0ZnVsQ2FwYWJpbGl0aWVzQW5kUmVzb3VyY2VzOiBmYWxzZSwgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBmYWxzZSwgaW1tdXRhYmxlQ29sbGVjdGlvbnM6IGZhbHNlLCBvcHRpb25hbFZhbHVlczogZmFsc2UsIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBmYWxzZSwgb3JkZXJlZE1hcEl0ZXJhdGlvbjogZmFsc2UsIHJlZmVyZW5jZUNsYXNzZXM6IGZhbHNlLCB0eXBlZEVycm9yczogZmFsc2UsIHR5cGVQYXJhbWV0ZXJzQW5kR2VuZXJpY3M6IGZhbHNlfSxcbiAgICBpZDogXCJpb3NcIixcbiAgICBtYXBwaW5nOiB7YmluYXJ5UmFuZ2VzOiB0cnVlLCByaWNoVGV4dDogdHJ1ZSwgc291cmNlTWFwVjM6IHRydWV9LFxuICAgIHJvdW5kVHJpcDogZmFsc2VcbiAgfSxcbiAge1xuICAgIGFjY2VwdGFuY2U6IHtzdGFnZXM6IFtcImdlbmVyYXRlXCIsIFwicmVzdG9yZVwiLCBcImNvbXBpbGVcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSwgdG9vbGNoYWluczogW1wiZmx1dHRlclwiLCBcImFuZHJvaWRcIl19LFxuICAgIGFwcGxpY2F0aW9uQmFja2VuZDogZ2VuZXJhdGVGbHV0dGVyQXBwbGljYXRpb24sXG4gICAgYXJ0aWZhY3RNdWx0aXBsaWNpdHk6IFwibXVsdGlwbGVcIixcbiAgICBmZWF0dXJlczoge2Nsb3NlZFJlY29yZHM6IGZhbHNlLCBjb25kaXRpb25Db250cm9sbGVkTG9vcHM6IGZhbHNlLCBjb25kaXRpb25hbEV4cHJlc3Npb25zOiBmYWxzZSwgc3RyaW5nSW50ZXJwb2xhdGlvbjogZmFsc2UsIGVmZmVjdGZ1bENhcGFiaWxpdGllc0FuZFJlc291cmNlczogZmFsc2UsIGdlbmVyYWxGdW5jdGlvbnNBbmRDYWxsczogZmFsc2UsIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBmYWxzZSwgb3B0aW9uYWxWYWx1ZXM6IGZhbHNlLCBvcmRlcmVkTGlzdEl0ZXJhdGlvbjogZmFsc2UsIG9yZGVyZWRNYXBJdGVyYXRpb246IGZhbHNlLCByZWZlcmVuY2VDbGFzc2VzOiBmYWxzZSwgdHlwZWRFcnJvcnM6IGZhbHNlLCB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBmYWxzZX0sXG4gICAgaWQ6IFwiZmx1dHRlclwiLFxuICAgIG1hcHBpbmc6IHtiaW5hcnlSYW5nZXM6IHRydWUsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcm91bmRUcmlwOiBmYWxzZVxuICB9XG5dXG5cbmV4cG9ydCBjb25zdCBsYW5ndWFnZVJlZ2lzdHJ5ID0gY3JlYXRlTGFuZ3VhZ2VSZWdpc3RyeShyZWNvcmRzKVxuZXhwb3J0IGNvbnN0IGxhbmd1YWdlQ2FwYWJpbGl0aWVzID0gbGFuZ3VhZ2VSZWdpc3RyeS5kZXNjcmlwdG9yc1xuLyoqIEB0eXBlIHtyZWFkb25seSBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2VbXX0gKi9cbmV4cG9ydCBjb25zdCBzdXBwb3J0ZWRMYW5ndWFnZXMgPSBPYmplY3QuZnJlZXplKGxhbmd1YWdlQ2FwYWJpbGl0aWVzXG4gIC5maWx0ZXIoKHtyb2xlc30pID0+IHJvbGVzLmZyb250ZW5kICYmIHJvbGVzLnRleHRCYWNrZW5kKVxuICAubWFwKCh7aWR9KSA9PiAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gKi8gKGlkKSkpXG5cbi8qKlxuICogU3VwcGxpZXMgY29tbW9uIG9yaWdpbmFsLWZpdmUgY2FwYWJpbGl0eSBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSB2YWx1ZXMgLSBMYW5ndWFnZS1zcGVjaWZpYyByZWNvcmQgZmllbGRzLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBDb21wbGV0ZSByZWNvcmQuXG4gKi9cbmZ1bmN0aW9uIGxhbmd1YWdlKHZhbHVlcykge1xuICByZXR1cm4ge1xuICAgIGFydGlmYWN0TXVsdGlwbGljaXR5OiBcInNpbmdsZVwiLFxuICAgIGZlYXR1cmVzOiB7XG4gICAgICBjbG9zZWRSZWNvcmRzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGNvbmRpdGlvbkNvbnRyb2xsZWRMb29wczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICBjb25kaXRpb25hbEV4cHJlc3Npb25zOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIHN0cmluZ0ludGVycG9sYXRpb246IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICBlZmZlY3RmdWxDYXBhYmlsaXRpZXNBbmRSZXNvdXJjZXM6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgZ2VuZXJhbEZ1bmN0aW9uc0FuZENhbGxzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIGltbXV0YWJsZUNvbGxlY3Rpb25zOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9wdGlvbmFsVmFsdWVzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRMaXN0SXRlcmF0aW9uOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKSxcbiAgICAgIG9yZGVyZWRNYXBJdGVyYXRpb246IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgICAgcmVmZXJlbmNlQ2xhc3NlczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlZEVycm9yczogW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXS5pbmNsdWRlcyhTdHJpbmcodmFsdWVzLmlkKSksXG4gICAgICB0eXBlUGFyYW1ldGVyc0FuZEdlbmVyaWNzOiBbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdLmluY2x1ZGVzKFN0cmluZyh2YWx1ZXMuaWQpKVxuICAgIH0sXG4gICAgbWFwcGluZzoge2JpbmFyeVJhbmdlczogZmFsc2UsIHJpY2hUZXh0OiB0cnVlLCBzb3VyY2VNYXBWMzogdHJ1ZX0sXG4gICAgcHJvdmlkZXI6IFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0uaW5jbHVkZXMoU3RyaW5nKHZhbHVlcy5pZCkpLFxuICAgIHJvdW5kVHJpcDogdHJ1ZSxcbiAgICAuLi52YWx1ZXNcbiAgfVxufVxuXG4vKipcbiAqIEZvcm1hdHMgYW4gaW50ZXJuYWwgcmVnaXN0cnkga2V5IGZvciBhIHB1YmxpYyByb2xlIGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIEludGVybmFsIHJvbGUga2V5LlxuICogQHJldHVybnMge3N0cmluZ30gUHVibGljIHJvbGUgbmFtZS5cbiAqL1xuZnVuY3Rpb24gcHVibGljUm9sZU5hbWUocm9sZSkge1xuICBpZiAocm9sZSA9PSBcInRleHRCYWNrZW5kXCIpIHJldHVybiBcInRleHQgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYmluYXJ5QmFja2VuZFwiKSByZXR1cm4gXCJiaW5hcnkgYmFja2VuZFwiXG4gIGlmIChyb2xlID09IFwiYXBwbGljYXRpb25CYWNrZW5kXCIpIHJldHVybiBcImFwcGxpY2F0aW9uLWFydGlmYWN0IGJhY2tlbmRcIlxuXG4gIHJldHVybiByb2xlXG59XG5cbi8qKlxuICogVGhyb3dzIGFuIHVua25vd24tbGFuZ3VhZ2UgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpZCAtIFVua25vd24gaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFtsb2NhdGlvbl0gLSBSZWxhdGVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtSZWdpc3RyeVJvbGUgfCB1bmRlZmluZWR9IFtyb2xlXSAtIFJlcXVlc3RlZCByb2xlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiB1bnN1cHBvcnRlZExhbmd1YWdlKGlkLCBsb2NhdGlvbiwgcm9sZSkge1xuICBjb25zdCBtZXNzYWdlID0gcm9sZSA9PSBcImZyb250ZW5kXCIgPyBcIk5vIGZyb250ZW5kIGFkYXB0ZXIgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBsYW5ndWFnZS5cIiA6XG4gICAgcm9sZSA9PSBcInRleHRCYWNrZW5kXCIgPyBcIk5vIHNvdXJjZSBiYWNrZW5kIGlzIHJlZ2lzdGVyZWQgZm9yIHRoaXMgbGFuZ3VhZ2UuXCIgOlxuICAgICAgXCJObyBsYW5ndWFnZSBvciB0YXJnZXQgaXMgcmVnaXN0ZXJlZCBmb3IgdGhpcyBJRC5cIlxuXG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiVU5TVVBQT1JURURfTEFOR1VBR0VcIixcbiAgICBsYW5ndWFnZTogaWQsXG4gICAgbG9jYXRpb24sXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcmVnaXN0cnktc2hhcGUgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3N0cmluZyB8IHVuZGVmaW5lZH0gW2lkXSAtIENhbmRpZGF0ZSByZWdpc3RyeSBJRC5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFJlZ2lzdHJ5KG1lc3NhZ2UsIGlkID0gXCJyZWdpc3RyeVwiKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe2NvZGU6IFwiSU5WQUxJRF9SRUdJU1RSWVwiLCBsYW5ndWFnZTogaWQsIG1lc3NhZ2V9KVxufVxuXG4vKipcbiAqIENoZWNrcyBmb3IgYW4gb3JkaW5hcnkgc3RyaW5nLWtleWVkIG9iamVjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdmFsdWUuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj59IFdoZXRoZXIgdGhlIHZhbHVlIGlzIGEgcGxhaW4gb2JqZWN0LlxuICovXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpID09IE9iamVjdC5wcm90b3R5cGVcbn1cblxuLyoqXG4gKiBEZWVwbHkgZnJlZXplcyByZWdpc3RyeSByZWNvcmRzIGFuZCBwdWJsaWMgZGVzY3JpcHRvcnMuXG4gKiBAdGVtcGxhdGUgVFxuICogQHBhcmFtIHtUfSB2YWx1ZSAtIFJlZ2lzdHJ5LW93bmVkIHZhbHVlLlxuICogQHJldHVybnMge1R9IEZyb3plbiB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZGVlcEZyZWV6ZSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IE9iamVjdC5pc0Zyb3plbih2YWx1ZSkpIHJldHVybiB2YWx1ZVxuXG4gIGZvciAoY29uc3QgbmVzdGVkIG9mIE9iamVjdC52YWx1ZXModmFsdWUpKSBkZWVwRnJlZXplKG5lc3RlZClcblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh2YWx1ZSlcbn1cbiJdfQ==
|