semantifold 0.9.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 +6 -3
- package/bin/semantifold.js +6 -0
- package/build/bin/semantifold.d.ts +3 -0
- package/build/bin/semantifold.d.ts.map +1 -0
- package/build/bin/semantifold.js +5 -0
- package/build/index.d.ts +8 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +9 -1
- package/build/src/artifact-path.d.ts +16 -0
- package/build/src/artifact-path.d.ts.map +1 -1
- package/build/src/artifact-path.js +29 -3
- package/build/src/backends/c-check.d.ts +7 -0
- package/build/src/backends/c-check.d.ts.map +1 -0
- package/build/src/backends/c-check.js +65 -0
- package/build/src/backends/check-plan.d.ts +96 -0
- package/build/src/backends/check-plan.d.ts.map +1 -0
- package/build/src/backends/check-plan.js +135 -0
- package/build/src/backends/cpp-check.d.ts +7 -0
- package/build/src/backends/cpp-check.d.ts.map +1 -0
- package/build/src/backends/cpp-check.js +59 -0
- package/build/src/backends/csharp-check.d.ts +7 -0
- package/build/src/backends/csharp-check.d.ts.map +1 -0
- package/build/src/backends/csharp-check.js +125 -0
- package/build/src/backends/csharp.d.ts +1 -0
- package/build/src/backends/csharp.d.ts.map +1 -1
- package/build/src/backends/csharp.js +5 -4
- package/build/src/backends/dart-check.d.ts +7 -0
- package/build/src/backends/dart-check.d.ts.map +1 -0
- package/build/src/backends/dart-check.js +103 -0
- package/build/src/backends/dart.d.ts +2 -0
- package/build/src/backends/dart.d.ts.map +1 -1
- package/build/src/backends/dart.js +5 -5
- package/build/src/backends/go-check.d.ts +7 -0
- package/build/src/backends/go-check.d.ts.map +1 -0
- package/build/src/backends/go-check.js +77 -0
- package/build/src/backends/go.d.ts +1 -0
- package/build/src/backends/go.d.ts.map +1 -1
- package/build/src/backends/go.js +3 -3
- package/build/src/backends/java-check.d.ts +21 -0
- package/build/src/backends/java-check.d.ts.map +1 -0
- package/build/src/backends/java-check.js +73 -0
- package/build/src/backends/javascript-check.d.ts +7 -0
- package/build/src/backends/javascript-check.d.ts.map +1 -0
- package/build/src/backends/javascript-check.js +29 -0
- package/build/src/backends/kotlin-check.d.ts +7 -0
- package/build/src/backends/kotlin-check.d.ts.map +1 -0
- package/build/src/backends/kotlin-check.js +31 -0
- package/build/src/backends/kotlin.d.ts +1 -1
- package/build/src/backends/kotlin.js +2 -2
- package/build/src/backends/php-check.d.ts +7 -0
- package/build/src/backends/php-check.d.ts.map +1 -0
- package/build/src/backends/php-check.js +21 -0
- package/build/src/backends/program.d.ts +7 -0
- package/build/src/backends/program.d.ts.map +1 -1
- package/build/src/backends/program.js +16 -1
- package/build/src/backends/python-check.d.ts +7 -0
- package/build/src/backends/python-check.d.ts.map +1 -0
- package/build/src/backends/python-check.js +28 -0
- package/build/src/backends/ruby-check.d.ts +7 -0
- package/build/src/backends/ruby-check.d.ts.map +1 -0
- package/build/src/backends/ruby-check.js +21 -0
- package/build/src/backends/rust-check.d.ts +7 -0
- package/build/src/backends/rust-check.d.ts.map +1 -0
- package/build/src/backends/rust-check.js +65 -0
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +29 -1
- package/build/src/backends/swift-check.d.ts +7 -0
- package/build/src/backends/swift-check.d.ts.map +1 -0
- package/build/src/backends/swift-check.js +77 -0
- package/build/src/backends/typescript-check.d.ts +7 -0
- package/build/src/backends/typescript-check.d.ts.map +1 -0
- package/build/src/backends/typescript-check.js +33 -0
- package/build/src/backends/zig-check.d.ts +7 -0
- package/build/src/backends/zig-check.d.ts.map +1 -0
- package/build/src/backends/zig-check.js +70 -0
- package/build/src/diagnostic.d.ts +13 -1
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +14 -2
- 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/program.d.ts +6 -0
- package/build/src/frontends/program.d.ts.map +1 -1
- package/build/src/frontends/program.js +9 -1
- 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 +54 -0
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +124 -10
- package/build/src/project-build.d.ts +172 -0
- package/build/src/project-build.d.ts.map +1 -0
- package/build/src/project-build.js +320 -0
- package/build/src/project-cli.d.ts +40 -0
- package/build/src/project-cli.d.ts.map +1 -0
- package/build/src/project-cli.js +145 -0
- package/build/src/project-manifest.d.ts +148 -0
- package/build/src/project-manifest.d.ts.map +1 -0
- package/build/src/project-manifest.js +432 -0
- package/build/src/project-reporter.d.ts +81 -0
- package/build/src/project-reporter.d.ts.map +1 -0
- package/build/src/project-reporter.js +293 -0
- package/build/src/project-snapshot.d.ts +129 -0
- package/build/src/project-snapshot.d.ts.map +1 -0
- package/build/src/project-snapshot.js +362 -0
- package/build/src/project-watch-reporter.d.ts +125 -0
- package/build/src/project-watch-reporter.d.ts.map +1 -0
- package/build/src/project-watch-reporter.js +280 -0
- package/build/src/project-watch.d.ts +133 -0
- package/build/src/project-watch.d.ts.map +1 -0
- package/build/src/project-watch.js +839 -0
- package/build/src/publication.d.ts +69 -5
- package/build/src/publication.d.ts.map +1 -1
- package/build/src/publication.js +246 -57
- 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 +355 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +92 -3
- package/build/src/semantic/validate.js +18 -1
- package/build/src/subprocess.d.ts +8 -0
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +50 -9
- package/build/src/target-check.d.ts +52 -0
- package/build/src/target-check.d.ts.map +1 -0
- package/build/src/target-check.js +796 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +3 -3
- package/docs/adr-expression-breadth.md +186 -0
- package/docs/architecture.md +3 -1
- package/docs/c.md +4 -0
- package/docs/cpp.md +4 -0
- package/docs/dart.md +4 -0
- package/docs/generated-artifact-publication.md +11 -8
- package/docs/kotlin.md +2 -2
- package/docs/language-support.md +40 -6
- package/docs/parser-qualification.md +1 -1
- package/docs/project-build-cli.md +147 -0
- package/docs/project-watch.md +60 -0
- package/docs/rust.md +4 -0
- package/docs/swift.md +2 -0
- package/docs/testing.md +70 -3
- package/docs/watch-build-pipeline.md +39 -23
- package/docs/zig.md +2 -0
- package/examples/jsdoc-java-watch/expected-output.txt +3 -0
- package/examples/jsdoc-java-watch/semantifold.json +23 -0
- package/examples/jsdoc-java-watch/src/main.js +21 -0
- package/index.js +8 -0
- package/package.json +6 -1
- package/src/artifact-path.js +31 -2
- package/src/backends/c-check.js +80 -0
- package/src/backends/check-plan.js +147 -0
- package/src/backends/cpp-check.js +73 -0
- package/src/backends/csharp-check.js +139 -0
- package/src/backends/csharp.js +4 -3
- package/src/backends/dart-check.js +117 -0
- package/src/backends/dart.js +4 -4
- package/src/backends/go-check.js +89 -0
- package/src/backends/go.js +2 -2
- package/src/backends/java-check.js +77 -0
- package/src/backends/javascript-check.js +33 -0
- package/src/backends/kotlin-check.js +41 -0
- package/src/backends/kotlin.js +1 -1
- package/src/backends/php-check.js +23 -0
- package/src/backends/program.js +17 -0
- package/src/backends/python-check.js +30 -0
- package/src/backends/ruby-check.js +23 -0
- package/src/backends/rust-check.js +78 -0
- package/src/backends/shared.js +30 -0
- package/src/backends/swift-check.js +89 -0
- package/src/backends/typescript-check.js +37 -0
- package/src/backends/zig-check.js +81 -0
- package/src/diagnostic.js +9 -1
- 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/program.js +9 -0
- package/src/frontends/ruby.js +62 -2
- package/src/language-registry.js +130 -9
- package/src/project-build.js +353 -0
- package/src/project-cli.js +155 -0
- package/src/project-manifest.js +479 -0
- package/src/project-reporter.js +320 -0
- package/src/project-snapshot.js +403 -0
- package/src/project-watch-reporter.js +303 -0
- package/src/project-watch.js +870 -0
- package/src/publication.js +275 -58
- package/src/semantic/effects.js +1 -0
- package/src/semantic/provenance.js +8 -0
- package/src/semantic/types.js +101 -2
- package/src/semantic/validate.js +26 -0
- package/src/subprocess.js +49 -8
- package/src/target-check.js +844 -0
- package/src/toolchains.js +3 -2
- package/tsconfig.json +1 -1
|
@@ -35,6 +35,7 @@ const task012Languages = new Set(["php", "ruby", "javascript", "typescript", "ja
|
|
|
35
35
|
const task014Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
36
36
|
const task032Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
37
37
|
const task033Languages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
38
|
+
const task048ConditionalLanguages = new Set(["php", "ruby", "javascript", "typescript", "java"]);
|
|
38
39
|
const javaReferenceMethodHooks = new Set(["clone", "equals", "finalize", "getClass", "hashCode", "notify", "notifyAll", "toString", "wait"]);
|
|
39
40
|
const javascriptReferenceMethodHooks = new Set([
|
|
40
41
|
"__defineGetter__", "__defineSetter__", "__lookupGetter__", "__lookupSetter__", "__proto__", "constructor",
|
|
@@ -1069,6 +1070,11 @@ function expressionContainsKind(expression, kind) {
|
|
|
1069
1070
|
if (expression.kind == "BinaryExpression") {
|
|
1070
1071
|
return expressionContainsKind(expression.left, kind) || expressionContainsKind(expression.right, kind);
|
|
1071
1072
|
}
|
|
1073
|
+
if (expression.kind == "ConditionalExpression") {
|
|
1074
|
+
return expressionContainsKind(expression.condition, kind) ||
|
|
1075
|
+
expressionContainsKind(expression.consequent, kind) ||
|
|
1076
|
+
expressionContainsKind(expression.alternate, kind);
|
|
1077
|
+
}
|
|
1072
1078
|
if (expression.kind == "CallExpression")
|
|
1073
1079
|
return expression.arguments.some((argument) => expressionContainsKind(argument, kind));
|
|
1074
1080
|
if (expression.kind == "MethodCallExpression") {
|
|
@@ -1838,6 +1844,18 @@ function validateExpression(expression, language, ownerLocation, allowJavaNegate
|
|
|
1838
1844
|
validateKnownTargetInteger(candidate, language, location);
|
|
1839
1845
|
return;
|
|
1840
1846
|
}
|
|
1847
|
+
if (candidate.kind == "ConditionalExpression") {
|
|
1848
|
+
const fields = Object.keys(candidate).filter((key) => key != "sourceProvenance").sort().join(",");
|
|
1849
|
+
if (fields != "alternate,condition,consequent,kind,location,type") {
|
|
1850
|
+
unsupportedCapability(language, "malformed ConditionalExpression", location);
|
|
1851
|
+
}
|
|
1852
|
+
if (!task048ConditionalLanguages.has(language))
|
|
1853
|
+
unsupportedCapability(language, "Task 048 conditional expression", location);
|
|
1854
|
+
validateExpression(candidate.condition, language, location, false, expressionPath, externalDeclarationIds);
|
|
1855
|
+
validateExpression(candidate.consequent, language, location, false, expressionPath, externalDeclarationIds);
|
|
1856
|
+
validateExpression(candidate.alternate, language, location, false, expressionPath, externalDeclarationIds);
|
|
1857
|
+
return;
|
|
1858
|
+
}
|
|
1841
1859
|
unsupportedCapability(language, String(Reflect.get(expression, "kind")), location);
|
|
1842
1860
|
}
|
|
1843
1861
|
/**
|
|
@@ -2258,6 +2276,16 @@ export function emitExpression(writer, expression, path, language, emitIdentifie
|
|
|
2258
2276
|
});
|
|
2259
2277
|
return;
|
|
2260
2278
|
}
|
|
2279
|
+
if (expression.kind == "ConditionalExpression") {
|
|
2280
|
+
writer.mapped("(", { mappingKind: "anchor", node: expression, path });
|
|
2281
|
+
emitExpression(writer, expression.condition, `${path}/condition`, language, emitIdentifier);
|
|
2282
|
+
writer.mapped(" ? ", { mappingKind: "exact", node: expression, path, role: "operator" });
|
|
2283
|
+
emitExpression(writer, expression.consequent, `${path}/consequent`, language, emitIdentifier);
|
|
2284
|
+
writer.mapped(" : ", { mappingKind: "exact", node: expression, path, role: "colon" });
|
|
2285
|
+
emitExpression(writer, expression.alternate, `${path}/alternate`, language, emitIdentifier);
|
|
2286
|
+
writer.mapped(")", { mappingKind: "anchor", node: expression, path });
|
|
2287
|
+
return;
|
|
2288
|
+
}
|
|
2261
2289
|
if (expression.kind == "UnaryExpression") {
|
|
2262
2290
|
if (language == "dart" && expression.operation == "IntegerNegate") {
|
|
2263
2291
|
emitDartIntegerHelper(writer, expression, path, "_semantifoldIntegerNegate", [
|
|
@@ -2586,4 +2614,4 @@ function binaryOperationSpelling(operation, language) {
|
|
|
2586
2614
|
return syntax.strict;
|
|
2587
2615
|
return syntax.default;
|
|
2588
2616
|
}
|
|
2589
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDcEcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUs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QkFBaUIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7UUFFeEQsSUFBSSxRQUFRLElBQUksTUFBTSxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7WUFDakgsT0FBTTtRQUNSLENBQUM7UUFDRCxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDekYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFlBQVksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxFQUNuSCxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBQyxDQUFDLENBQUE7UUFDbkYsT0FBTTtJQUNSLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUMxQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLFdBQVcsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDekYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUU7WUFDdEcsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtTQUM3RCxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pDLElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ2xFLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLDJCQUEyQixFQUFFO2dCQUMzRSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQzthQUN4QyxDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BFLHVCQUF1QixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLDRCQUE0QixFQUFFO2dCQUM5RSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLFVBQVUsQ0FBQzthQUN4QyxDQUFDLENBQUE7WUFDRixPQUFNO1FBQ1IsQ0FBQztRQUNELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BFLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7WUFDMUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1lBQ3BGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxHQUFHLElBQUksVUFBVSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtZQUN2RixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1lBQ25FLE9BQU07UUFDUixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxRQUFRLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ2hJLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVU7U0FDL0QsQ0FBQyxDQUFBO1FBQ0YsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3ZGLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7UUFDbkUsT0FBTTtJQUNSLENBQUM7SUFFRCxJQUFJLFFBQVEsSUFBSSxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7UUFDOUcsTUFBTSxNQUFNLEdBQUcsVUFBVSxDQUFDLFNBQVMsSUFBSSxZQUFZLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDOUUsVUFBVSxDQUFDLFNBQVMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDLDZCQUE2QixDQUFBO1FBRTNHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtZQUN0RCxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDO1NBQ3ZFLENBQUMsQ0FBQTtRQUNGLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQ2hILE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO1lBQy9FLFVBQVUsQ0FBQyxTQUFTLElBQUksaUJBQWlCLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQTtRQUU3Ryx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7WUFDeEQsQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsQ0FBQztTQUN2RSxDQUFDLENBQUE7UUFDRixPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsd0JBQXdCLEVBQUU7UUFDM0QsQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLGFBQWEsSUFBSSxVQUFVLENBQUMsU0FBUyxJQUFJLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztRQUN0RixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUN0RixDQUFDO1FBQ0QsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUMzRixjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNwRSxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxDQUFDLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztRQUNoSCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQzFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUNqRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxNQUFNLENBQUMsTUFBTSxDQUFDLHVCQUF1QixDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLEVBQUU7WUFDckUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVTtTQUMvRCxDQUFDLENBQUE7UUFDRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUMvRCxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxPQUFNO0lBQ1IsQ0FBQztJQUVELElBQUksUUFBUSxJQUFJLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLElBQUksYUFBYSxJQUFJLFVBQVUsQ0FBQyxTQUFTLElBQUksZ0JBQWdCLENBQUMsRUFBRSxDQUFDO1FBQzlHLE1BQU0saUJBQWlCLEdBQUcsVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUUzSCxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtRQUN0RixDQUFDO1FBQ0QsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLE9BQU8sRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDakYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRTtZQUN2QixXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLFVBQVU7U0FDeEcsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLEVBQUUsR0FBRyxJQUFJLFFBQVEsRUFBRSxRQUFRLEVBQUUsY0FBYyxDQUFDLENBQUE7UUFDbkYsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQTtRQUNuRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO1FBQ25FLE9BQU07SUFDUixDQUFDO0lBRUQsSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsSUFBSSxhQUFhLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7UUFDL0csTUFBTSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsU0FBUyxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixFQUFFO1lBQ2pILFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVU7U0FDL0QsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsbUNBQW1DLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDaEYsY0FBYyxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ2pGLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDBDQUEwQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3hGLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtRQUNuRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxtQ0FBbUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtRQUNoRixPQUFNO0lBQ1IsQ0FBQztJQUVELE1BQU0sYUFBYSxHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksOEJBQThCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzlGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtJQUVqRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ25FLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLElBQUksRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNqRixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQkFBa0IsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMvRCxNQUFNLFFBQVEsR0FBRyx1QkFBdUIsQ0FBQyxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBRXhFLElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxnQkFBZ0IsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxDQUFDO1FBQ3RHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBQyxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUMsQ0FBQyxDQUFBO1FBQ3JHLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLGtCQUFrQixFQUFDLENBQUMsQ0FBQTtJQUM1RyxDQUFDOztRQUFNLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUNoRyxNQUFNLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLGtCQUFrQixFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3ZHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksUUFBUSxFQUFFLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNuRixNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxFQUFDLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0FBQ3JFLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUTtJQUN6RSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFDLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBQyxDQUFDLENBQUE7SUFDdkYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsb0NBQW9DLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDakYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQ2pELElBQUksS0FBSztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLDJDQUEyQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3BHLGNBQWMsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUM1RSxDQUFDLENBQUMsQ0FBQTtJQUNGLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLG9DQUFvQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0FBQ25GLENBQUM7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILFNBQVMscUJBQXFCLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVE7SUFDdkUsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQ2pGLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLFVBQVUsR0FBRyxFQUFFLENBQUE7SUFDckQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRXpELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN2RixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxrQ0FBa0MsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMvRSxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUU7UUFDakQsSUFBSSxTQUFTO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsTUFBTSxJQUFJLEVBQUUsMkNBQTJDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7YUFDaEksSUFBSSxLQUFLO1lBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUseUNBQXlDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7UUFDdkcsY0FBYyxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1FBQ3hFLElBQUksU0FBUztZQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLG1EQUFtRCxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ25ILENBQUMsQ0FBQyxDQUFBO0lBQ0YsSUFBSSxTQUFTO1FBQUUsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsMENBQTBDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDekcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsa0NBQWtDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDakYsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyw4QkFBOEIsQ0FBQyxNQUFNLEVBQUUsVUFBVTtJQUN4RCxPQUFPLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFBO0FBQy9FLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxpQkFBaUIsQ0FBQyxNQUFNO0lBQy9CLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ3JGLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsVUFBVTtJQUNuRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksc0JBQXNCO1FBQUUsT0FBTyxVQUFVLENBQUMsSUFBSSxDQUFBO0lBQ3JFLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0I7UUFBRSxPQUFPLE1BQU0sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDeEUsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtRQUFFLE9BQU8sdUJBQXVCLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLENBQUE7SUFDN0csSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGVBQWU7UUFBRSxPQUFPLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDMUYsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsTUFBTSxVQUFVLEdBQUcsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQy9GLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBRW5FLElBQUksa0JBQWtCO1lBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO1FBRTNELE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQTtJQUN0RSxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUU5RCxPQUFPLFVBQVUsQ0FBQyxTQUFTLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssT0FBTyxHQUFHLENBQUE7SUFDNUcsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sSUFBSSxHQUFHLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDeEQsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtRQUUxRCxJQUFJLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3hGLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxTQUFTLElBQUksWUFBWSxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO2dCQUM5RSxVQUFVLENBQUMsU0FBUyxJQUFJLGlCQUFpQixDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUMsNkJBQTZCLENBQUE7WUFFM0csT0FBTyxHQUFHLE1BQU0sSUFBSSxJQUFJLEtBQUssS0FBSyxHQUFHLENBQUE7UUFDdkMsQ0FBQztRQUNELE9BQU8sSUFBSSxJQUFJLElBQUksdUJBQXVCLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLLEdBQUcsQ0FBQTtJQUN0RixDQUFDO0lBQ0QsTUFBTSxJQUFJLFNBQVMsQ0FBQyx5RUFBeUUsQ0FBQyxDQUFBO0FBQ2hHLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxrQkFBa0IsQ0FBQyxJQUFJO0lBQzlCLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSw4QkFBOEIsQ0FBQyxNQUFNO0lBQ25ELE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxXQUFXLEVBQUUsRUFBRSxDQUFDLG1DQUFtQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRyxtQ0FBbUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQy9ELENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBUyxtQ0FBbUMsQ0FBQyxLQUFLO0lBQ2hELE9BQU8sS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRTtRQUN6QyxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksYUFBYSxFQUFFLENBQUM7WUFDcEMsT0FBTyx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO2dCQUNsRSxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO2dCQUN6RCxPQUFPLENBQUMsU0FBUyxDQUFDLFNBQVMsSUFBSSxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUM1RixDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDekMsT0FBTyx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksbUNBQW1DLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3hILENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztZQUM1QyxPQUFPLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxtQ0FBbUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDdkgsQ0FBQztRQUNELElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUM3SCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sbUNBQW1DLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLG1DQUFtQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUN4SCxDQUFDO1FBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLGdCQUFnQjtZQUFFLE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUNoSCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksa0JBQWtCO1lBQUUsT0FBTyx3Q0FBd0MsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUE7UUFDaEgsSUFBSSxTQUFTLENBQUMsSUFBSSxJQUFJLHFCQUFxQixJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUkscUJBQXFCLElBQUksU0FBUyxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzdILE9BQU8sd0NBQXdDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1FBQ3ZFLENBQUM7UUFDRCxJQUFJLFNBQVMsQ0FBQyxJQUFJLElBQUksaUJBQWlCLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLHdDQUF3QyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQ3hHLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQTtJQUNkLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxTQUFTLHdDQUF3QyxDQUFDLFVBQVU7SUFDMUQsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDekMsT0FBTyxVQUFVLENBQUMsU0FBUyxJQUFJLGVBQWUsSUFBSSx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDaEgsQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQzFDLE9BQU8sVUFBVSxDQUFDLFNBQVMsSUFBSSxpQkFBaUIsSUFBSSx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1lBQzNHLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM5RCxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDeEMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsd0NBQXdDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNwRyxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLG9CQUFvQixFQUFFLENBQUM7UUFDNUMsT0FBTyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsd0NBQXdDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtJQUNwRyxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFlBQVk7UUFBRSxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN6RyxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksYUFBYTtRQUFFLE9BQU8sVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLHdDQUF3QyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7SUFDckksSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLFlBQVksSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLG1CQUFtQixFQUFFLENBQUM7UUFDOUUsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsd0NBQXdDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQztZQUMzRix3Q0FBd0MsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtJQUMxRCxDQUFDO0lBQ0QsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLHFCQUFxQixFQUFFLENBQUM7UUFDN0MsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksd0NBQXdDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RJLENBQUM7SUFDRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUM3QyxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDcEksQ0FBQztJQUNELElBQUksVUFBVSxDQUFDLElBQUksSUFBSSwwQkFBMEI7UUFBRSxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN6SCxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksY0FBYztRQUFFLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3hHLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxtQkFBbUIsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGdCQUFnQixFQUFFLENBQUM7UUFDbEYsT0FBTyx3Q0FBd0MsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckUsQ0FBQztJQUVELE9BQU8sS0FBSyxDQUFBO0FBQ2QsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsU0FBUyx1QkFBdUIsQ0FBQyxTQUFTLEVBQUUsUUFBUTtJQUNsRCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxTQUFTLENBQUMsQ0FBQTtJQUUvQyxJQUFJLFFBQVEsSUFBSSxLQUFLLElBQUksTUFBTSxDQUFDLEdBQUc7UUFBRSxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUE7SUFDdEQsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBQy9ELElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxJQUFJLFFBQVEsSUFBSSxZQUFZLElBQUksUUFBUSxJQUFJLFlBQVksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxNQUFNO1FBQUUsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBRXRILE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQTtBQUN2QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4uL2FycmF5LmpzXCJcbmltcG9ydCB7dmFsaWRhdGVCYWNrZW5kVHlwZXN9IGZyb20gXCIuLi9zZW1hbnRpYy92YWxpZGF0ZS5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIsIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRUeXBlSWRlbnRpZmllcn0gZnJvbSBcIi4vaWRlbnRpZmllcnMuanNcIlxuaW1wb3J0IHtlbWl0U2NhbGFyVHlwZSwgZW1pdFN0cmluZ0xpdGVyYWx9IGZyb20gXCIuL3NjYWxhcnMuanNcIlxuXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY1VuYXJ5T3BlcmF0aW9uLCBzdHJpbmc+Pn0gKi9cbmNvbnN0IHVuYXJ5T3BlcmF0aW9uU3ludGF4ID0gT2JqZWN0LmZyZWV6ZSh7Qm9vbGVhbk5vdDogXCIhXCIsIEludGVnZXJOZWdhdGU6IFwiLVwifSlcbi8qKiBAdHlwZSB7UmVhZG9ubHk8UmVjb3JkPGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluYXJ5T3BlcmF0aW9uLCBSZWFkb25seTx7ZGVmYXVsdDogc3RyaW5nLCBwaHA/OiBzdHJpbmcsIHB5dGhvbj86IHN0cmluZywgc3RyaWN0Pzogc3RyaW5nfT4+Pn0gKi9cbmNvbnN0IGJpbmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe1xuICBCb29sZWFuQW5kOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiYmXCIsIHB5dGhvbjogXCJhbmRcIn0pLFxuICBCb29sZWFuRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEJvb2xlYW5Ob3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgQm9vbGVhbk9yOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcInx8XCIsIHB5dGhvbjogXCJvclwifSksXG4gIEludGVnZXJBZGQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiK1wifSksXG4gIEludGVnZXJFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgSW50ZWdlckdyZWF0ZXJUaGFuOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj5cIn0pLFxuICBJbnRlZ2VyR3JlYXRlclRoYW5PckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj49XCJ9KSxcbiAgSW50ZWdlckxlc3NUaGFuOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIjxcIn0pLFxuICBJbnRlZ2VyTGVzc1RoYW5PckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIjw9XCJ9KSxcbiAgSW50ZWdlck11bHRpcGx5OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIipcIn0pLFxuICBJbnRlZ2VyTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSksXG4gIEludGVnZXJTdWJ0cmFjdDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCItXCJ9KSxcbiAgU3RyaW5nQ29uY2F0OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIitcIiwgcGhwOiBcIi5cIn0pLFxuICBTdHJpbmdFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI9PVwiLCBzdHJpY3Q6IFwiPT09XCJ9KSxcbiAgU3RyaW5nTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSlcbn0pXG5jb25zdCB0YXNrMDA1TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCIsIFwiZGFydFwiLCBcInppZ1wiXSlcbmNvbnN0IHRhc2swMDZMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA3TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwOExhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDlMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDExTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTRMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDMyTGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzM0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcyA9IG5ldyBTZXQoW1wiY2xvbmVcIiwgXCJlcXVhbHNcIiwgXCJmaW5hbGl6ZVwiLCBcImdldENsYXNzXCIsIFwiaGFzaENvZGVcIiwgXCJub3RpZnlcIiwgXCJub3RpZnlBbGxcIiwgXCJ0b1N0cmluZ1wiLCBcIndhaXRcIl0pXG5jb25zdCBqYXZhc2NyaXB0UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX2RlZmluZUdldHRlcl9fXCIsIFwiX19kZWZpbmVTZXR0ZXJfX1wiLCBcIl9fbG9va3VwR2V0dGVyX19cIiwgXCJfX2xvb2t1cFNldHRlcl9fXCIsIFwiX19wcm90b19fXCIsIFwiY29uc3RydWN0b3JcIixcbiAgXCJoYXNPd25Qcm9wZXJ0eVwiLCBcImlzUHJvdG90eXBlT2ZcIiwgXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLCBcInRvTG9jYWxlU3RyaW5nXCIsIFwidG9TdHJpbmdcIiwgXCJ2YWx1ZU9mXCJcbl0pXG5jb25zdCBydWJ5UmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcbiAgXCJfX3NlbmRfX1wiLCBcImV4dGVuZFwiLCBcImZldGNoXCIsIFwiaW5zdGFuY2VfZXZhbFwiLCBcImluc3RhbmNlX2V4ZWNcIiwgXCJtZXRob2RcIiwgXCJtZXRob2RfbWlzc2luZ1wiLCBcInB1YmxpY19zZW5kXCIsXG4gIFwicmVzcG9uZF90b19taXNzaW5nP1wiLCBcInNlbmRcIiwgXCJzaW5nbGV0b25fY2xhc3NcIiwgXCJzaXplXCJcbl0pXG5jb25zdCBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzID0gbmV3IFNldChbXG4gIFwiY2xvbmUoKVwiLCBcImVxdWFscyhPYmplY3QpXCIsIFwiZmluYWxpemUoKVwiLCBcImdldENsYXNzKClcIiwgXCJoYXNoQ29kZSgpXCIsIFwibm90aWZ5KClcIiwgXCJub3RpZnlBbGwoKVwiLCBcInRvU3RyaW5nKClcIixcbiAgXCJ3YWl0KClcIiwgXCJ3YWl0KGxvbmcpXCIsIFwid2FpdChsb25nLGludClcIlxuXSlcblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVudGlvbmFsbHkgbmFycm93IGJhY2tlbmQgY29udHJhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge3tleHRlcm5hbERlY2xhcmF0aW9uSWRzPzogU2V0PHN0cmluZz4sIHByb2dyYW0/OiBib29sZWFuLCB2aXNpYmxlRnVuY3Rpb25zPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbj4sIHZpc2libGVSZWNvcmRzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb24+LCB2aXNpYmxlQ2xhc3Nlcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb24+LCB2aXNpYmxlRXJyb3JzPzogTWFwPHN0cmluZywgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbj4sIHZpc2libGVDYWxsRWZmZWN0cz86IE1hcDxzdHJpbmcsIFNldDxzdHJpbmc+Pn19IFtvcHRpb25zXSAtIFJlc29sdmVkIHByb2dyYW0gdmFsaWRhdGlvbiBjb250ZXh0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBsYW5ndWFnZSwgb3B0aW9ucyA9IHt9KSB7XG4gIGlmICghbW9kdWxlIHx8IHR5cGVvZiBtb2R1bGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGVcIiwgdW5kZWZpbmVkKVxuICB9XG4gIGlmIChtb2R1bGUua2luZCAhPSBcIk1vZHVsZVwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIG1vZHVsZS5raW5kLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShtb2R1bGUuZnVuY3Rpb25zKSB8fCAhbW9kdWxlLmVudHJ5UG9pbnQgfHwgdHlwZW9mIG1vZHVsZS5lbnRyeVBvaW50ICE9IFwib2JqZWN0XCIgfHxcbiAgICBtb2R1bGUuZW50cnlQb2ludC5raW5kICE9IFwiRW50cnlQb2ludFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1vZHVsZSBtZW1iZXJzXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgY29uc3QgZGVjbGFyZWRSZWNvcmRzID0gbW9kdWxlLnJlY29yZHNcbiAgY29uc3QgcmVjb3JkcyA9IGRlY2xhcmVkUmVjb3JkcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZFJlY29yZHNcbiAgY29uc3QgZGVjbGFyZWRDbGFzc2VzID0gbW9kdWxlLmNsYXNzZXNcbiAgY29uc3QgY2xhc3NlcyA9IGRlY2xhcmVkQ2xhc3NlcyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZENsYXNzZXNcbiAgY29uc3QgZGVjbGFyZWRFcnJvcnMgPSBtb2R1bGUuZXJyb3JzXG4gIGNvbnN0IGVycm9ycyA9IGRlY2xhcmVkRXJyb3JzID09PSB1bmRlZmluZWQgPyBbXSA6IGRlY2xhcmVkRXJyb3JzXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlY29yZHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2xhc3NlcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVmZXJlbmNlIGNsYXNzIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShlcnJvcnMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGVycm9yIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGlmIChtb2R1bGUuZnVuY3Rpb25zLmxlbmd0aCA9PSAwICYmICghb3B0aW9ucy5wcm9ncmFtIHx8XG4gICAgcmVjb3Jkcy5sZW5ndGggPT0gMCAmJiBjbGFzc2VzLmxlbmd0aCA9PSAwICYmIGVycm9ycy5sZW5ndGggPT0gMCAmJiBtb2R1bGUuZW50cnlQb2ludC5ib2R5Py5zdGF0ZW1lbnRzPy5sZW5ndGggPT0gMCkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibW9kdWxlIHdpdGhvdXQgZGVjbGFyYXRpb25zIG9yIGV4ZWN1dGFibGUgZW50cnlcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIG1vZHVsZUhhc1R5cGVQYXJhbWV0ZXJzKG1vZHVsZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTIgdHlwZSBwYXJhbWV0ZXJzIGFuZCBnZW5lcmljIGRlY2xhcmF0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKHJlY29yZHMubGVuZ3RoID4gMCAmJiAhdGFzazAwOUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA5IGNsb3NlZCByZWNvcmRzXCIsIHJlY29yZHNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoY2xhc3Nlcy5sZW5ndGggPiAwICYmICF0YXNrMDMzTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMzMgcmVmZXJlbmNlIGNsYXNzZXMsIG1ldGhvZHMsIGFuZCBjb25zdHJ1Y3RvcnNcIiwgY2xhc3Nlc1swXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmICghdGFzazAxMUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RUeXBlZEVycm9ycyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29uZGl0aW9uQ29udHJvbGxlZExvb3BzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGlmICghdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSByZWplY3RPcmRlcmVkTWFwQ2FwYWJpbGl0eShtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBtb2R1bGUuZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0SXRlcmF0aW9uU3RhdGVtZW50cyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3B0aW9uYWxUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMDZMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0Q29sbGVjdGlvblR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGNvbnN0IGxvb3BPd25lcnMgPSBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgY2xhc3Nlcykge1xuICAgIHZhbGlkYXRlQmxvY2soZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgbGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvciwgb3duZXJzOiBsb29wT3duZXJzfSwgbmV3IFNldCgpLCBvcHRpb25zLmV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgdmFsaWRhdGVCbG9jayhtZXRob2QuYm9keSwgbGFuZ3VhZ2UsIG1ldGhvZC5sb2NhdGlvbixcbiAgICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBtZXRob2QsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UsIG1vZHVsZS5lbnRyeVBvaW50LmxvY2F0aW9uLFxuICAgIHthY3RpdmU6IFtdLCBvd25lcjogbW9kdWxlLmVudHJ5UG9pbnQsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICBjb25zdCBkZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBkZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG4gIGNvbnN0IHRhcmdldERlY2xhcmF0aW9uTmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGZ1bmN0aW9uRGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZnVuY3Rpb25EZWNsYXJhdGlvbiB8fCB0eXBlb2YgZnVuY3Rpb25EZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbikgfHxcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ua2luZCAhPSBcIkZ1bmN0aW9uRGVjbGFyYXRpb25cIiB8fCAhQXJyYXkuaXNBcnJheShmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgaWYgKGRlY2xhcmF0aW9uTmFtZXMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSBmdW5jdGlvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uTmFtZXMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSlcbiAgICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiXG4gICAgICA/IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZS5yZXBsYWNlKC9bQS1aXS9ndSwgKGNoYXJhY3RlcikgPT4gY2hhcmFjdGVyLnRvTG93ZXJDYXNlKCkpXG4gICAgICA6IGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldERlY2xhcmF0aW9uTmFtZXMuaGFzKHRhcmdldERlY2xhcmF0aW9uTmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCBmdW5jdGlvbi1uYW1lIGNvbGxpc2lvbiAnJHtmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWV9J2AsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIHRhcmdldERlY2xhcmF0aW9uTmFtZXMuYWRkKHRhcmdldERlY2xhcmF0aW9uTmFtZSlcbiAgICBpZiAodHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQgIT0gXCJzdHJpbmdcIiB8fCAhL14oPzpbYS16XVthLXowLTkuXy1dKiMpP2Z1bmN0aW9uOlswLTldKyQvdS50ZXN0KGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbklkcy5hZGQoZnVuY3Rpb25EZWNsYXJhdGlvbi5pZClcbiAgICB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGZ1bmN0aW9uRGVjbGFyYXRpb24sIGxhbmd1YWdlKVxuXG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZT8ua2luZCA9PSBcIlR5cGVSZWZlcmVuY2VcIiAmJlxuICAgICAgZnVuY3Rpb25EZWNsYXJhdGlvbi5yZXR1cm5UeXBlLm5hbWUgPT0gXCJ2b2lkXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNSB2b2lkIGZ1bmN0aW9uIHJldHVyblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrKGZ1bmN0aW9uRGVjbGFyYXRpb24uYm9keSwgbGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbXSwgb3duZXI6IGZ1bmN0aW9uRGVjbGFyYXRpb24sIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIXBhcmFtZXRlciB8fCB0eXBlb2YgcGFyYW1ldGVyICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXIpIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBwYXJhbWV0ZXJcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICB9XG4gIHZhbGlkYXRlRXJyb3JUYXJnZXRzKGVycm9ycywgcmVjb3JkcywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgdmFsaWRhdGVTY2FmZm9sZGluZ05hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIHZhbGlkYXRlQmFja2VuZFR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UsIHtcbiAgICBjYWxsRWZmZWN0czogb3B0aW9ucy52aXNpYmxlQ2FsbEVmZmVjdHMsXG4gICAgY2xhc3Nlczogb3B0aW9ucy52aXNpYmxlQ2xhc3NlcyxcbiAgICBlcnJvcnM6IG9wdGlvbnMudmlzaWJsZUVycm9ycyxcbiAgICBmdW5jdGlvbnM6IG9wdGlvbnMudmlzaWJsZUZ1bmN0aW9ucyxcbiAgICByZWNvcmRzOiBvcHRpb25zLnZpc2libGVSZWNvcmRzXG4gIH0pXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAxNCBJUiB0cmFuc2FjdGlvbmFsbHkgYmVmb3JlIGEgbm9uLWNvaG9ydCB0YXJnZXQgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBub2RlID0gZmluZE9yZGVyZWRNYXBOb2RlKG1vZHVsZSlcblxuICBpZiAobm9kZSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBkaWFnbm9zdGljTG9jYXRpb24obm9kZS5sb2NhdGlvbiwgbW9kdWxlLmxvY2F0aW9uKSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGUgZmlyc3QgZGlzdGluY3Qgb3JkZXJlZC1tYXAgdHlwZSwgbGl0ZXJhbCwgb3IgbG9vcCBpbiBwYXJzZXItbmV1dHJhbCBJUi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgc3VidHJlZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWR9IEZpcnN0IFRhc2sgMDE0IG5vZGUuXG4gKi9cbmZ1bmN0aW9uIGZpbmRPcmRlcmVkTWFwTm9kZSh2YWx1ZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPSBcIm9iamVjdFwiIHx8IHNlZW4uaGFzKHZhbHVlKSkgcmV0dXJuIHVuZGVmaW5lZFxuICBzZWVuLmFkZCh2YWx1ZSlcbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh2YWx1ZSlcblxuICAgIGlmIChbXCJPcmRlcmVkTWFwVHlwZVwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoY2FuZGlkYXRlLmtpbmQpKSkgcmV0dXJuIGNhbmRpZGF0ZVxuICB9XG4gIGZvciAoY29uc3QgY2hpbGQgb2YgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IE9iamVjdC52YWx1ZXModmFsdWUpKSB7XG4gICAgY29uc3QgZm91bmQgPSBmaW5kT3JkZXJlZE1hcE5vZGUoY2hpbGQsIHNlZW4pXG5cbiAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZFxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIFJlamVjdHMgdHlwZWQgZXJyb3JzIGZvciBhIHRhcmdldCBvdXRzaWRlIHRoZSBUYXNrIDAxMSBjb2hvcnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JzKC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9ICovIG1vZHVsZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlKSB7XG4gIGlmICgobW9kdWxlLmVycm9ycyA/PyBbXSkubGVuZ3RoID4gMCkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsIG1vZHVsZS5lcnJvcnM/LlswXT8ubG9jYXRpb24gPz8gbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykgcmVqZWN0VHlwZWRFcnJvckJsb2NrKGRlY2xhcmF0aW9uPy5ib2R5LCBsYW5ndWFnZSlcbiAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIEZpbmRzIHR5cGVkLWVycm9yIHN0YXRlbWVudHMgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBibG9ja3MuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBibG9ja3MuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0VHlwZWRFcnJvckJsb2NrKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gYmxvY2ssXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtTZXQ8b2JqZWN0Pn0gKi8gc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSA9PSBcIlJhaXNlU3RhdGVtZW50XCIgfHwgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDExIHR5cGVkIGVycm9ycyBhbmQgaGFuZGxpbmdcIixcbiAgICAgICAgZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpKVxuICAgIH1cbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RUeXBlZEVycm9yQmxvY2soUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikpKSkge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGFyZ2V0LXZpc2libGUgbm9taW5hbCBlcnJvciBkZWNsYXJhdGlvbnMgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FcnJvckRlY2xhcmF0aW9uW119IGVycm9ycyAtIEVycm9yIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIFJlY29yZCBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRnVuY3Rpb24gZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFcnJvclRhcmdldHMoXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSAqLyBlcnJvcnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gKi8gcmVjb3JkcyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119ICovIGZ1bmN0aW9ucyxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBtb2R1bGVMb2NhdGlvblxuKSB7XG4gIGNvbnN0IGlkcyA9IG5ldyBTZXQoKVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoWy4uLnJlY29yZHMsIC4uLmZ1bmN0aW9uc10ubWFwKCh7bmFtZX0pID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKSlcbiAgY29uc3QgZm9yYmlkZGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBuZXcgU2V0KFtcIkVycm9yXCIsIFwiQWdncmVnYXRlRXJyb3JcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDpcbiAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJFeGNlcHRpb25cIiwgXCJTdGFuZGFyZEVycm9yXCIsIFwiU2NyaXB0RXJyb3JcIiwgXCJTeXN0ZW1FeGl0XCJdKSA6XG4gICAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJUaHJvd2FibGVcIiwgXCJFeGNlcHRpb25cIiwgXCJSdW50aW1lRXhjZXB0aW9uXCIsIFwiRXJyb3JcIl0pIDogbmV3IFNldCgpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGVycm9ycy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IGVycm9yc1tpbmRleF1cbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbj8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSB8fFxuICAgICAgZGVjbGFyYXRpb24ua2luZCAhPSBcIkVycm9yRGVjbGFyYXRpb25cIiB8fCBmaWVsZHMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcImVycm9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIG1vZHVsZUxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmICgoZGVjbGFyYXRpb24uaWQgIT0gYGVycm9yOiR7aW5kZXh9YCAmJlxuICAgICAgIW5ldyBSZWdFeHAoYF5bYS16XVthLXowLTkuXy1dKiNlcnJvcjoke2luZGV4fSRgLCBcInVcIikudGVzdChkZWNsYXJhdGlvbi5pZCA/PyBcIlwiKSkgfHwgaWRzLmhhcyhkZWNsYXJhdGlvbi5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IGZvcmJpZGRlbi5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVycm9yIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgaWRzLmFkZChkZWNsYXJhdGlvbi5pZClcbiAgICBuYW1lcy5hZGQobm9ybWFsaXplZClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBldmVyeSBub21pbmFsIHJlY29yZCBpZGVudGlmaWVyLCBpZGVudGl0eSwgZmllbGQsIGFuZCB0YXJnZXQgY29sbGlzaW9uIGJlZm9yZSBvdXRwdXQgYWxsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIENhbmRpZGF0ZSByZWNvcmRzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIENhbmRpZGF0ZSBmdW5jdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBtb2R1bGVMb2NhdGlvbiAtIE1vZHVsZSBmYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZFRhcmdldHMocmVjb3JkcywgZnVuY3Rpb25zLCBsYW5ndWFnZSwgbW9kdWxlTG9jYXRpb24pIHtcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgdGFyZ2V0TmFtZXMgPSBuZXcgU2V0KClcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IHJlY29yZEluZGV4ID0gMDsgcmVjb3JkSW5kZXggPCByZWNvcmRzLmxlbmd0aDsgcmVjb3JkSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHJlY29yZCA9IHJlY29yZHNbcmVjb3JkSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ocmVjb3JkPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3QgcmVjb3JkS2V5cyA9IHJlY29yZCAmJiB0eXBlb2YgcmVjb3JkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmVjb3JkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyZWNvcmQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgOiBcIlwiXG5cbiAgICBpZiAoIXJlY29yZCB8fCB0eXBlb2YgcmVjb3JkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyZWNvcmQpIHx8IHJlY29yZC5raW5kICE9IFwiUmVjb3JkRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImZpZWxkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiwgXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVQYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKHJlY29yZEtleXMpIHx8ICFpc0RlbnNlQXJyYXkocmVjb3JkLmZpZWxkcykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGRlY2xhcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihyZWNvcmQubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlY29yZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCByZWNvcmQubmFtZSwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgcmVjb3JkLmlkICE9IFwic3RyaW5nXCIgfHwgIW5ldyBSZWdFeHAoYF4oPzpbYS16XVthLXowLTkuXy1dKiMpP3JlY29yZDoke3JlY29yZEluZGV4fSRgLCBcInVcIikudGVzdChyZWNvcmQuaWQpIHx8XG4gICAgICBkZWNsYXJhdGlvbklkcy5oYXMocmVjb3JkLmlkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvbiBpZGVudGl0eVwiLCByZWNvcmQubG9jYXRpb24pXG4gICAgfVxuICAgIGRlY2xhcmF0aW9uSWRzLmFkZChyZWNvcmQuaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhyZWNvcmQsIGxhbmd1YWdlKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gcmVjb3JkLm5hbWUudG9Mb3dlckNhc2UoKSA6IHJlY29yZC5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWNvcmQgZGVjbGFyYXRpb24gY29sbGlzaW9uICcke3JlY29yZC5uYW1lfSdgLCByZWNvcmQubG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCByZWNvcmQuZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHJlY29yZC5maWVsZHNbZmllbGRJbmRleF1cbiAgICAgIGNvbnN0IGZpZWxkTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZmllbGQ/LmxvY2F0aW9uLCByZWNvcmQubG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgICAgIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IHR5cGVvZiBmaWVsZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZmllbGQpIHx8IGZpZWxkLmtpbmQgIT0gXCJSZWNvcmRGaWVsZFwiIHx8XG4gICAgICAgIGZpZWxkS2V5cyAhPSBcImlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZmllbGQgbG9jYXRpb25cIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgaWYgKGZpZWxkLmlkICE9IGAke3JlY29yZC5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIHJlY29yZCBmaWVsZCBpZGVudGl0eVwiLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJyZWNvcmQgZmllbGRcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBjb2xsaXNpb24gPSBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBbXCJjb25zdHJ1Y3RvclwiLCBcInByb3RvdHlwZVwiLCBcIl9fcHJvdG9fX1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcInBocFwiICYmIGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKFwiX19cIikgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgW1wiaW5pdGlhbGl6ZVwiLCBcImZyZWV6ZVwiLCBcInNlbmRcIiwgXCJwdWJsaWNfc2VuZFwiLCBcIm1ldGhvZFwiLCBcInNpbmdsZXRvbl9jbGFzc1wiXS5pbmNsdWRlcyhmaWVsZC5uYW1lKSB8fFxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhgJHtmaWVsZC5uYW1lfSgpYClcblxuICAgICAgaWYgKGNvbGxpc2lvbikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGZpZWxkIGNvbGxpc2lvbiAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcmVjb3JkIGZpZWxkICcke2ZpZWxkLm5hbWV9J2AsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIGV4YWN0IHRhcmdldC12aXNpYmxlIHNoYXBlIG9mIGV2ZXJ5IHJlZmVyZW5jZSBjbGFzcyBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNsYXNzRGVjbGFyYXRpb25bXX0gY2xhc3NlcyAtIENhbmRpZGF0ZSBjbGFzc2VzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbltdfSByZWNvcmRzIC0gRXhpc3RpbmcgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFeGlzdGluZyB0eXBlZCBlcnJvcnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb25bXX0gZnVuY3Rpb25zIC0gRXhpc3RpbmcgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzVGFyZ2V0cyhjbGFzc2VzLCByZWNvcmRzLCBlcnJvcnMsIGZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZUxvY2F0aW9uKSB7XG4gIGNvbnN0IHRhcmdldE5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBbLi4ucmVjb3JkcywgLi4uZXJyb3JzLCAuLi5mdW5jdGlvbnNdKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBuYW1lID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibmFtZVwiKVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIGNvbnRpbnVlXG4gICAgdGFyZ2V0TmFtZXMuYWRkKGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lKVxuICB9XG5cbiAgZm9yIChsZXQgY2xhc3NJbmRleCA9IDA7IGNsYXNzSW5kZXggPCBjbGFzc2VzLmxlbmd0aDsgY2xhc3NJbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBjbGFzc2VzW2NsYXNzSW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBrZXlzID0gZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IE9iamVjdC5rZXlzKGRlY2xhcmF0aW9uKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJDbGFzc0RlY2xhcmF0aW9uXCIgfHxcbiAgICAgICFbXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWVcIiwgXCJjb25zdHJ1Y3RvcixmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixtZXRob2RzLG5hbWUsb3duZXJzaGlwXCJdLmluY2x1ZGVzKGtleXMpIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLmZpZWxkcykgfHwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aCA9PSAwIHx8ICFpc0RlbnNlQXJyYXkoZGVjbGFyYXRpb24ubWV0aG9kcykgfHxcbiAgICAgICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczoke2NsYXNzSW5kZXh9JGAsIFwidVwiKS50ZXN0KFN0cmluZyhkZWNsYXJhdGlvbi5pZCkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLm93bmVyc2hpcCAhPT0gdW5kZWZpbmVkICYmIGRlY2xhcmF0aW9uLm93bmVyc2hpcD8ua2luZCAhPSBcIm9yZGluYXJ5XCIgJiZcbiAgICAgIChkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvd25lZFJlc291cmNlXCIgfHwgdHlwZW9mIGRlY2xhcmF0aW9uLm93bmVyc2hpcC5maWVsZElkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAucmVzb3VyY2VJZCAhPSBcInN0cmluZ1wiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY2xhc3MgcmVzb3VyY2Ugb3duZXJzaGlwXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBkZWNsYXJhdGlvbkxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oZGVjbGFyYXRpb24ubG9jYXRpb24sIGxhbmd1YWdlLCBcInJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAodGFyZ2V0TmFtZXMuaGFzKHRhcmdldE5hbWUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZWZlcmVuY2UgY2xhc3MgY29sbGlzaW9uICcke2RlY2xhcmF0aW9uLm5hbWV9J2AsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgdGFyZ2V0TmFtZXMuYWRkKHRhcmdldE5hbWUpXG4gICAgY29uc3QgZmllbGROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgZmllbGRJbmRleCA9IDA7IGZpZWxkSW5kZXggPCBkZWNsYXJhdGlvbi5maWVsZHMubGVuZ3RoOyBmaWVsZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gZGVjbGFyYXRpb24uZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBmaWVsZEtleXMgPSBmaWVsZCAmJiB0eXBlb2YgZmllbGQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShmaWVsZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhmaWVsZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgICBpZiAoIWZpZWxkIHx8IGZpZWxkLmtpbmQgIT0gXCJQcml2YXRlRmllbGRcIiB8fCBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiIHx8XG4gICAgICAgIGZpZWxkLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpmaWVsZDoke2ZpZWxkSW5kZXh9YCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHByaXZhdGUgZmllbGRcIiwgZmllbGRMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0RmllbGRMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGZpZWxkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJwcml2YXRlIGZpZWxkIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG5cbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgZmllbGQubmFtZSwgXCJwcml2YXRlIGZpZWxkXCIsIGV4YWN0RmllbGRMb2NhdGlvbilcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZmllbGQubmFtZS50b0xvd2VyQ2FzZSgpIDogZmllbGQubmFtZVxuXG4gICAgICBpZiAoZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGR1cGxpY2F0ZSB0YXJnZXQgcHJpdmF0ZSBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBmaWVsZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgIH1cbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgY29uc3RydWN0b3JMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjb25zdHJ1Y3Rvcj8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdG9yS2V5cyA9IGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3RvciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGNvbnN0cnVjdG9yKVxuICAgICAgPyBPYmplY3Qua2V5cyhjb25zdHJ1Y3RvcikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFjb25zdHJ1Y3RvciB8fCBjb25zdHJ1Y3Rvci5raW5kICE9IFwiQ29uc3RydWN0b3JEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIiwgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLHBhcmFtZXRlcnNcIl0uaW5jbHVkZXMoY29uc3RydWN0b3JLZXlzKSB8fFxuICAgICAgY29uc3RydWN0b3IuaWQgIT0gYCR7ZGVjbGFyYXRpb24uaWR9OmNvbnN0cnVjdG9yYCB8fCAhaXNEZW5zZUFycmF5KGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uXCIsIGNvbnN0cnVjdG9yTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNvbnN0cnVjdG9yLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMoY29uc3RydWN0b3IucGFyYW1ldGVycywgXCJjb25zdHJ1Y3RvclwiLCBsYW5ndWFnZSwgZXhhY3RDb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIGNvbnN0IG1ldGhvZE5hbWVzID0gbmV3IFNldCgpXG5cbiAgICBmb3IgKGxldCBtZXRob2RJbmRleCA9IDA7IG1ldGhvZEluZGV4IDwgZGVjbGFyYXRpb24ubWV0aG9kcy5sZW5ndGg7IG1ldGhvZEluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG1ldGhvZCA9IGRlY2xhcmF0aW9uLm1ldGhvZHNbbWV0aG9kSW5kZXhdXG4gICAgICBjb25zdCBtZXRob2RMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihtZXRob2Q/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICAgIGNvbnN0IG1ldGhvZEtleXMgPSBtZXRob2QgJiYgdHlwZW9mIG1ldGhvZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KG1ldGhvZClcbiAgICAgICAgPyBPYmplY3Qua2V5cyhtZXRob2QpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFtZXRob2QgfHwgbWV0aG9kLmtpbmQgIT0gXCJNZXRob2REZWNsYXJhdGlvblwiIHx8XG4gICAgICAgICFbXCJib2R5LGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIixcbiAgICAgICAgICBcImJvZHksZWZmZWN0cyxmYWlsdXJlSWRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSxwYXJhbWV0ZXJzLHJldHVyblR5cGVcIl0uaW5jbHVkZXMobWV0aG9kS2V5cykgfHxcbiAgICAgICAgbWV0aG9kLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTptZXRob2Q6JHttZXRob2RJbmRleH1gIHx8ICFpc0RlbnNlQXJyYXkobWV0aG9kLnBhcmFtZXRlcnMpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbWV0aG9kIGRlY2xhcmF0aW9uXCIsIG1ldGhvZExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgZXhhY3RNZXRob2RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG1ldGhvZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwibWV0aG9kIGRlY2xhcmF0aW9uIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uTG9jYXRpb24pXG4gICAgICBjb25zdCBsaWZlY3ljbGVOYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiX19jb25zdHJ1Y3RcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJpbml0aWFsaXplXCIgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiY29uc3RydWN0b3JcIiA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAobWV0aG9kLm5hbWUgPT0gbGlmZWN5Y2xlTmFtZSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbGlmZWN5Y2xlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlc2VydmVkSG9vayA9IGxhbmd1YWdlID09IFwicGhwXCIgPyAvXl9fL3UudGVzdChtZXRob2QubmFtZSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IHJ1YnlSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIHx8XG4gICAgICAgICAgdHlwZW9mIG1ldGhvZC5uYW1lID09IFwic3RyaW5nXCIgJiYgbWV0aG9kLm5hbWUuZW5kc1dpdGgoXCI9XCIpIDpcbiAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IGphdmFSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgICAgIGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzLmhhcyhtZXRob2QubmFtZSkgOiBmYWxzZVxuXG4gICAgICBpZiAocmVzZXJ2ZWRIb29rKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGByZXNlcnZlZCByZWZlcmVuY2UgbWV0aG9kICcke21ldGhvZC5uYW1lfSdgLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kLm5hbWUgIT0gXCJzdHJpbmdcIiB8fCAhL15bQS1aYS16X11bQS1aYS16MC05X10qWyE/PV0/JC91LnRlc3QobWV0aG9kLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIGlkZW50aWZpZXIgJyR7U3RyaW5nKG1ldGhvZC5uYW1lKX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgbWV0aG9kLm5hbWUsIFwibWV0aG9kXCIsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG1ldGhvZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiBtZXRob2QubmFtZVxuXG4gICAgICBpZiAobWV0aG9kTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiBmaWVsZE5hbWVzLmhhcyhub3JtYWxpemVkKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgY2xhc3MgbWVtYmVyIGNvbGxpc2lvbiAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIG1ldGhvZE5hbWVzLmFkZChub3JtYWxpemVkKVxuICAgICAgdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMobWV0aG9kLnBhcmFtZXRlcnMsIFwibWV0aG9kXCIsIGxhbmd1YWdlLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgcmVmZXJlbmNlIGNhbGxhYmxlJ3MgZXhhY3QgcGFyYW1ldGVyIHNoYXBlIGFuZCB0YXJnZXQgbmFtZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FuZGlkYXRlIHBhcmFtZXRlcnMuXG4gKiBAcGFyYW0ge1wiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gQ2FsbGFibGUga2luZC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBGYWxsYmFjayBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlZmVyZW5jZUNsYXNzUGFyYW1ldGVycyhwYXJhbWV0ZXJzLCBvd25lciwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKHBhcmFtZXRlcj8ubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiUGFyYW1ldGVyXCIgfHwga2V5cyAhPSBcImtpbmQsbG9jYXRpb24sbmFtZSx0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCAke293bmVyfSBwYXJhbWV0ZXJgLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZXhhY3RMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKHBhcmFtZXRlci5sb2NhdGlvbiwgbGFuZ3VhZ2UsIGAke293bmVyfSBwYXJhbWV0ZXIgbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIGV4YWN0TG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGRlY2xhcmF0aW9uJ3MgdGFyZ2V0LXZpc2libGUgdHlwZS1wYXJhbWV0ZXIgbmFtZXMgYW5kIGlkZW50aXRpZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5SZWNvcmREZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBPd25lci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVQYXJhbWV0ZXJUYXJnZXRzKGRlY2xhcmF0aW9uLCBsYW5ndWFnZSkge1xuICBpZiAoZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMgPT09IHVuZGVmaW5lZCkgcmV0dXJuXG4gIGlmICghaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25zXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICB9XG4gIGNvbnN0IG5hbWVzID0gbmV3IFNldCgpXG4gIC8qKlxuICAgKiBOb3JtYWxpemVzIGEgdHlwZS92YWx1ZSBzcGVsbGluZyBmb3IgdGFyZ2V0IGNvbGxpc2lvbiBjaGVja3MuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQ2FuZGlkYXRlIHRhcmdldCBuYW1lLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUYXJnZXQgY29tcGFyaXNvbiBrZXkuXG4gICAqL1xuICBjb25zdCB0YXJnZXRLZXkgPSAobmFtZSkgPT4gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWVcbiAgY29uc3QgdmFsdWVOYW1lcyA9IG5ldyBTZXQoW1xuICAgIGRlY2xhcmF0aW9uLm5hbWUsXG4gICAgLi4uKGRlY2xhcmF0aW9uLmtpbmQgPT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgPyBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzIDogZGVjbGFyYXRpb24uZmllbGRzKS5tYXAoKHtuYW1lfSkgPT4gbmFtZSlcbiAgXS5tYXAodGFyZ2V0S2V5KSlcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24udHlwZVBhcmFtZXRlcnNbaW5kZXhdXG4gICAgY29uc3Qga2V5cyA9IHBhcmFtZXRlciAmJiB0eXBlb2YgcGFyYW1ldGVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocGFyYW1ldGVyKVxuICAgICAgPyBPYmplY3Qua2V5cyhwYXJhbWV0ZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghcGFyYW1ldGVyIHx8IHBhcmFtZXRlci5raW5kICE9IFwiVHlwZVBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWVcIiB8fFxuICAgICAgcGFyYW1ldGVyLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTp0eXBlOiR7aW5kZXh9YCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvblwiLCBwYXJhbWV0ZXI/LmxvY2F0aW9uID8/IGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBcInR5cGUgcGFyYW1ldGVyIGxvY2F0aW9uXCIsIGRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHRhcmdldEtleShwYXJhbWV0ZXIubmFtZSlcblxuICAgIGlmIChuYW1lcy5oYXMobm9ybWFsaXplZCkgfHwgdmFsdWVOYW1lcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHRhcmdldCB0eXBlIHBhcmFtZXRlciBjb2xsaXNpb24gJyR7cGFyYW1ldGVyLm5hbWV9J2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICB9XG4gICAgbmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBEZXRlY3RzIFRhc2sgMDEyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIG9sZGVyIGZlYXR1cmUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGdlbmVyaWMgZGVjbGFyYXRpb25zIGFyZSBwcmVzZW50LlxuICovXG5mdW5jdGlvbiBtb2R1bGVIYXNUeXBlUGFyYW1ldGVycyhtb2R1bGUpIHtcbiAgcmV0dXJuIFsuLi5tb2R1bGUucmVjb3JkcyA/PyBbXSwgLi4ubW9kdWxlLmZ1bmN0aW9uc10uc29tZSgoZGVjbGFyYXRpb24pID0+XG4gICAgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbj8udHlwZVBhcmFtZXRlcnMpICYmIGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCA+IDApXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwOCBzdGF0ZW1lbnRzIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCByZWFjaGVzIGNvbGxlY3Rpb24tdHlwZSBjaGVja3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrSXRlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMzIgSVIgYmVmb3JlIGEgbm9uLWNvaG9ydCBiYWNrZW5kIGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKVxuICAgICAgOiB1bmRlZmluZWQsIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBGaW5kcyBhIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3Agd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoYmxvY2ssIGxhbmd1YWdlLCBzZWVuID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgc2Vlbi5oYXMoYmxvY2spKSByZXR1cm5cbiAgc2Vlbi5hZGQoYmxvY2spXG4gIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3RhdGVtZW50cykge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgIGlmIChraW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJhbHRlcm5hdGVcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhTdHJpbmcoa2luZCkpKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjYXRjaEJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEZpbmRzIGEgVGFzayAwMDggbm9kZSB3aXRob3V0IGRlc2NlbmRpbmcgdGhyb3VnaCBtYWxmb3JtZWQgb3IgY3ljbGljIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gVmlzaXRlZCBjb250YWluZXJzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrSXRlcmF0aW9uKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJCcmVha1N0YXRlbWVudFwiLCBcIkNvbnRpbnVlU3RhdGVtZW50XCJdLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDggb3JkZXJlZCBsaXN0IGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiY29uc2VxdWVudFwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgICByZWplY3RCbG9ja0l0ZXJhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNhdGNoQm9keVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwNyBvcHRpb25hbCB0eXBlcyBiZWZvcmUgYSBub24tY29ob3J0IGVtaXR0ZXIgYWxsb2NhdGVzIG91dHB1dC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0T3B0aW9uYWxUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbG9jYXRpb24gPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJsb2NhdGlvblwiKSA/PyBtb2R1bGUubG9jYXRpb25cblxuICAgIGlmIChjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJyZXR1cm5UeXBlXCIpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHJldHVybiB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIikpID8gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKSA6IFtdKSB7XG4gICAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUocGFyYW1ldGVyPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDcgb3B0aW9uYWwgcGFyYW1ldGVyIHR5cGVcIiwgcGFyYW1ldGVyLmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKSwgbGFuZ3VhZ2UpXG4gIH1cbiAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgb3B0aW9uYWwgbG9jYWwgdHlwZXMgcmVjdXJzaXZlbHkgaW4gb25lIGNhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKGJsb2NrLCBsYW5ndWFnZSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8ICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIGNvbnRhaW5zT3B0aW9uYWxUeXBlKHN0YXRlbWVudC50eXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIGxvY2FsIHR5cGVcIiwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUoc3RhdGVtZW50LnZhbHVlQmluZGluZz8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIGl0ZXJhdGlvbiBiaW5kaW5nIHR5cGVcIiwgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbiA/PyBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgYm91bmRlZCByZWN1cnNpdmUgc2VtYW50aWMgdHlwZSBmb3IgYW4gb3B0aW9uYWwgbm9kZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdHlwZSAtIENhbmRpZGF0ZSB0eXBlLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW3NlZW5dIC0gQ3ljbGUgcHJvdGVjdGlvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGFuIG9wdGlvbmFsIHR5cGUgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBjb250YWluc09wdGlvbmFsVHlwZSh0eXBlLCBzZWVuID0gbmV3IFNldCgpKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodHlwZSkgfHwgc2Vlbi5oYXModHlwZSkpIHJldHVybiBmYWxzZVxuICBzZWVuLmFkZCh0eXBlKVxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpXG5cbiAgaWYgKGtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikgcmV0dXJuIHRydWVcbiAgaWYgKGtpbmQgPT0gXCJMaXN0VHlwZVwiKSByZXR1cm4gY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJlbGVtZW50VHlwZVwiKSwgc2VlbilcbiAgaWYgKGtpbmQgPT0gXCJNYXBUeXBlXCIgfHwga2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIpIHJldHVybiBjb250YWluc09wdGlvbmFsVHlwZShSZWZsZWN0LmdldCh0eXBlLCBcImtleVR5cGVcIiksIHNlZW4pIHx8XG4gICAgY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJ2YWx1ZVR5cGVcIiksIHNlZW4pXG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmVqZWN0cyBUYXNrIDAwNiB0eXBlcyBiZWZvcmUgYSByZWdpc3RlcmVkIG5vbi1jb2hvcnQgZW1pdHRlciBjYW4gYWxsb2NhdGUgYW4gYXJ0aWZhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0Q29sbGVjdGlvblR5cGVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCB0eXBlb2YgZGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKSkgY29udGludWVcbiAgICBjb25zdCBsb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImxvY2F0aW9uXCIpID8/IG1vZHVsZS5sb2NhdGlvblxuICAgIGNvbnN0IHJldHVyblR5cGUgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJyZXR1cm5UeXBlXCIpXG5cbiAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShyZXR1cm5UeXBlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIHJldHVybiB0eXBlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicGFyYW1ldGVyc1wiKVxuXG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSA/IHBhcmFtZXRlcnMgOiBbXSkge1xuICAgICAgaWYgKGlzQ29sbGVjdGlvblR5cGUocGFyYW1ldGVyPy50eXBlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uIHBhcmFtZXRlciB0eXBlXCIsIHBhcmFtZXRlci5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwiYm9keVwiKSwgbGFuZ3VhZ2UpXG4gIH1cbiAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogUmVqZWN0cyBjb2xsZWN0aW9uIGxvY2FsIHR5cGVzIHJlY3Vyc2l2ZWx5IGluIG9uZSBibG9jay5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgc2VtYW50aWMgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoYmxvY2ssIGxhbmd1YWdlKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgIUFycmF5LmlzQXJyYXkoUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgaXNDb2xsZWN0aW9uVHlwZShzdGF0ZW1lbnQudHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBsb2NhbCB0eXBlXCIsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGxhbmd1YWdlKVxuICAgICAgaWYgKHN0YXRlbWVudC5hbHRlcm5hdGUpIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHN0YXRlbWVudC52YWx1ZUJpbmRpbmc/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBpdGVyYXRpb24gYmluZGluZyB0eXBlXCIsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24gPz8gc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5jYXRjaEJvZHksIGxhbmd1YWdlKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBhIHBvc3NpYmxlIHJlY3Vyc2l2ZSBjb2xsZWN0aW9uIHR5cGUgd2l0aG91dCB0cmF2ZXJzaW5nIG1hbGZvcm1lZCBjaGlsZHJlbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdHlwZSAtIENhbmRpZGF0ZSB0eXBlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIG91dGVyIHR5cGUgaXMgYSBjb2xsZWN0aW9uLlxuICovXG5mdW5jdGlvbiBpc0NvbGxlY3Rpb25UeXBlKHR5cGUpIHtcbiAgcmV0dXJuIEJvb2xlYW4odHlwZSAmJiB0eXBlb2YgdHlwZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHR5cGUpICYmXG4gICAgKFtcIkxpc3RUeXBlXCIsIFwiTWFwVHlwZVwiLCBcIk9yZGVyZWRNYXBUeXBlXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldCh0eXBlLCBcImtpbmRcIikpKSkpXG59XG5cbi8qKlxuICogUmVqZWN0cyBzZW1hbnRpYyBuYW1lcyB0aGF0IHdvdWxkIGNhcHR1cmUgc3ludGF4IG93bmVkIGJ5IG9uZSBiYWNrZW5kIGVtaXR0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2FmZm9sZGluZ05hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgdmFsaWRhdGVSZWNvcmRDb25zdHJ1Y3Rvck5hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpXG4gIGNvbnN0IG5lZWRzTmF0aXZlTWFwID0gW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpICYmXG4gICAgKG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIk1hcExpdGVyYWxcIikgfHwgbW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIFwiT3JkZXJlZE1hcExpdGVyYWxcIikpXG4gIGNvbnN0IG5lZWRzUGhwQ291bnQgPSBsYW5ndWFnZSA9PSBcInBocFwiICYmIG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKVxuICBjb25zdCBqYXZhc2NyaXB0T3duZWROYW1lcyA9IG5ldyBTZXQoW1wiY29uc29sZVwiLCAuLi4obmVlZHNOYXRpdmVNYXAgPyBbXCJNYXBcIl0gOiBbXSldKVxuICBjb25zdCBvd25lZEVudHJ5TmFtZXMgPSBsYW5ndWFnZSA9PSBcImdvXCIgPyBuZXcgU2V0KFtcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgPyBuZXcgU2V0KFtcIlN5c3RlbVwiXSkgOiBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiYXJnc1wiLCBcIlN5c3RlbVwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDogbmV3IFNldCgpXG4gIGNvbnN0IG93bmVkUHJpbnRSZWNlaXZlck5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZENhbGxhYmxlTmFtZXMgPSBsYW5ndWFnZSA9PSBcImdvXCIgPyBuZXcgU2V0KFtcIm1haW5cIiwgXCJpbml0XCIsIFwiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiA/IG5ldyBTZXQoW1xuICAgIFwiRXF1YWxzXCIsIFwiRmluYWxpemVcIiwgXCJHZXRIYXNoQ29kZVwiLCBcIkdldFR5cGVcIiwgXCJNYWluXCIsIFwiTWVtYmVyd2lzZUNsb25lXCIsIFwiUHJvZ3JhbVwiLCBcIlJlZmVyZW5jZUVxdWFsc1wiLCBcIlN5c3RlbVwiLCBcIlRvU3RyaW5nXCJcbiAgXSkgOlxuICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJtYWluXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOlxuICAgIG5lZWRzUGhwQ291bnQgPyBuZXcgU2V0KFtcImNvdW50XCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBuZXcgU2V0KFtcInB1dHNcIiwgXCJzZW5kXCIsIFwicHVibGljX3NlbmRcIiwgXCJfX3NlbmRfX1wiXSkgOiBuZXcgU2V0KClcbiAgLyoqXG4gICAqIFByb3RlY3RzIHByaW50L2ZhY3Rvcnkgc3BlbGxpbmdzIGluc2lkZSBvbmUgY2FsbGFibGUgc2NvcGUuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyW119IHBhcmFtZXRlcnMgLSBDYWxsYWJsZSBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBib2R5IC0gQ2FsbGFibGUgYm9keS5cbiAgICogQHBhcmFtIHtcImZ1bmN0aW9uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIERpYWdub3N0aWMgb3duZXIuXG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MgPSAocGFyYW1ldGVycywgYm9keSwgb3duZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBwYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKHBhcmFtZXRlci5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKGJvZHkpKSB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgb3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKHN0YXRlbWVudC5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBsb2NhbCAnJHtzdGF0ZW1lbnQubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgb3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gaXRlcmF0aW9uIGJpbmRpbmcgJyR7c3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsXG4gICAgICAgICAgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgb2YgW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXSkge1xuICAgICAgICAgIGlmIChvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoYmluZGluZy5uYW1lKSkge1xuICAgICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gaXRlcmF0aW9uIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIGJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIiAmJiBvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoc3RhdGVtZW50LmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBjYXRjaCBiaW5kaW5nICcke3N0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgIHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhtb2R1bGUuZW50cnlQb2ludC5ib2R5KSkge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBvd25lZEVudHJ5TmFtZXMuaGFzKHN0YXRlbWVudC5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBmb3IgKGNvbnN0IGJpbmRpbmcgb2YgW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXSkge1xuICAgICAgICBpZiAob3duZWRFbnRyeU5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgaXRlcmF0aW9uIGJpbmRpbmcgJyR7YmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIGJpbmRpbmcubG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlbnRyeSBjYXRjaCBiaW5kaW5nICcke3N0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBjb25zdCB0YXJnZXROYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGRlY2xhcmF0aW9uLm5hbWUudG9Mb3dlckNhc2UoKSA6IGRlY2xhcmF0aW9uLm5hbWVcblxuICAgIGlmIChvd25lZENhbGxhYmxlTmFtZXMuaGFzKHRhcmdldE5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBmdW5jdGlvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIGRlY2xhcmF0aW9uTmFtZUxvY2F0aW9uKGRlY2xhcmF0aW9uKSlcbiAgICB9XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgICBjb25zdCBzaWduYXR1cmUgPSBlbWl0dGVkSmF2YUZ1bmN0aW9uU2lnbmF0dXJlKGRlY2xhcmF0aW9uKVxuXG4gICAgICBpZiAoc2lnbmF0dXJlICYmIGphdmFPYmplY3RJbnN0YW5jZU1ldGhvZFNpZ25hdHVyZXMuaGFzKHNpZ25hdHVyZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGBmdW5jdGlvbiAnJHtzaWduYXR1cmV9JyBjb25mbGljdHMgd2l0aCBhbiBpbmhlcml0ZWQgamF2YS5sYW5nLk9iamVjdCBpbnN0YW5jZSBtZXRob2RgLFxuICAgICAgICAgIGRlY2xhcmF0aW9uTmFtZUxvY2F0aW9uKGRlY2xhcmF0aW9uKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLCBkZWNsYXJhdGlvbi5ib2R5LCBcImZ1bmN0aW9uXCIpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzLCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBcImNvbnN0cnVjdG9yXCIpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzKG1ldGhvZC5wYXJhbWV0ZXJzLCBtZXRob2QuYm9keSwgXCJtZXRob2RcIilcbiAgfVxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHZhbGlkYXRlSmF2YVV0aWxGYWN0b3J5TmFtZXMobW9kdWxlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgSmF2YVNjcmlwdC1mYW1pbHkgbGV4aWNhbCBiaW5kaW5ncyB0aGF0IGNhbiBjYXB0dXJlIGVtaXR0ZWQgYmFyZSByZWNvcmQgY29uc3RydWN0b3IgbmFtZXMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQtc2hhcGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlUmVjb3JkQ29uc3RydWN0b3JOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGlmIChsYW5ndWFnZSAhPSBcImphdmFzY3JpcHRcIiAmJiBsYW5ndWFnZSAhPSBcInR5cGVzY3JpcHRcIikgcmV0dXJuXG4gIGNvbnN0IHJlY29yZE5hbWVzID0gbmV3IFNldChbXG4gICAgLi4uKG1vZHVsZS5yZWNvcmRzID8/IFtdKS5tYXAoKHJlY29yZCkgPT4gcmVjb3JkLm5hbWUpLFxuICAgIC4uLihtb2R1bGUuY2xhc3NlcyA/PyBbXSkubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24ubmFtZSksXG4gICAgLi4uKG1vZHVsZS5lcnJvcnMgPz8gW10pLm1hcCgoZXJyb3IpID0+IGVycm9yLm5hbWUpXG4gIF0pXG5cbiAgLyoqXG4gICAqIENoZWNrcyBkZWNsYXJhdGlvbnMgbmVzdGVkIGJlbmVhdGggb25lIG93bmluZyBibG9jay5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBCbG9jayB0byBpbnNwZWN0LlxuICAgKiBAcGFyYW0ge1wiZW50cnlcIiB8IFwiZnVuY3Rpb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gT3duaW5nIHNjb3BlIGtpbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVCbG9ja05hbWVzID0gKGJsb2NrLCBvd25lcikgPT4ge1xuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMoYmxvY2spKSB7XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBsb2NhbCAnJHtzdGF0ZW1lbnQubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50KSlcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiAmJiByZWNvcmROYW1lcy5oYXMoc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihzdGF0ZW1lbnQudmFsdWVCaW5kaW5nKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgICBpZiAocmVjb3JkTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oYmluZGluZykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIiAmJiByZWNvcmROYW1lcy5oYXMoc3RhdGVtZW50LmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgYCR7b3duZXJ9IGNhdGNoIGJpbmRpbmcgJyR7c3RhdGVtZW50LmNhdGNoQmluZGluZy5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgcmVjb3JkIGNvbnN0cnVjdG9yYCwgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAocmVjb3JkTmFtZXMuaGFzKHBhcmFtZXRlci5uYW1lKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb25zdHJ1Y3RvciBwYXJhbWV0ZXIgJyR7cGFyYW1ldGVyLm5hbWV9JyBjYXB0dXJlcyBub21pbmFsIGNvbnN0cnVjdG9yYCxcbiAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICB9XG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBcImNvbnN0cnVjdG9yXCIpXG4gICAgZm9yIChjb25zdCBtZXRob2Qgb2YgZGVjbGFyYXRpb24ubWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgbWV0aG9kLnBhcmFtZXRlcnMpIHtcbiAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtZXRob2QgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKHBhcmFtZXRlcikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhtZXRob2QuYm9keSwgXCJtZXRob2RcIilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZWplY3RzIGxleGljYWwgYmluZGluZ3MgdGhhdCB3b3VsZCBjYXB0dXJlIEphdmEncyBwYWNrYWdlIHF1YWxpZmllciBpbiBlbWl0dGVkIGNvbGxlY3Rpb24gZmFjdG9yaWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSkge1xuICAvKipcbiAgICogV2Fsa3Mgb25lIGxleGljYWwgYmxvY2sgd2hpbGUgcmV0YWluaW5nIG9ubHkgYSBjdXJyZW50bHkgdmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIEJsb2NrIHRvIGluc3BlY3QgaW4gc2VtYW50aWMgb3JkZXIuXG4gICAqIEBwYXJhbSB7e2RldGFpbDogc3RyaW5nLCBsb2NhdGlvbjogaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IHwgdW5kZWZpbmVkfSBpbmhlcml0ZWQgLSBWaXNpYmxlIGNhcHR1cmUuXG4gICAqIEBwYXJhbSB7XCJlbnRyeVwiIHwgXCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBPd25pbmcgc2NvcGUga2luZC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjb25zdCB2YWxpZGF0ZUJsb2NrTmFtZXMgPSAoYmxvY2ssIGluaGVyaXRlZCwgb3duZXIpID0+IHtcbiAgICBsZXQgY2FwdHVyZSA9IGluaGVyaXRlZFxuXG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYmxvY2suc3RhdGVtZW50cykge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHN0YXRlbWVudC5uYW1lID09IFwiamF2YVwiKSB7XG4gICAgICAgIGNhcHR1cmUgPSB7XG4gICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gbG9jYWwgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgICAgbG9jYXRpb246IHN0YXRlbWVudC5sb2NhdGlvblxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKGNhcHR1cmUgJiYgZXhwcmVzc2lvbiAmJiAoZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIkxpc3RMaXRlcmFsXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJNYXBMaXRlcmFsXCIpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxOb25lXCIpIHx8XG4gICAgICAgIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJPcHRpb25hbFNvbWVcIikpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcImphdmFcIiwgY2FwdHVyZS5kZXRhaWwsIGNhcHR1cmUubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuY29uc2VxdWVudCwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lID09IFwiamF2YVwiID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgY29uc3QgY2FwdHVyZWRCaW5kaW5nID0gW3N0YXRlbWVudC5rZXlCaW5kaW5nLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nXS5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICAgIGNvbnN0IGxvb3BDYXB0dXJlID0gY2FwdHVyZWRCaW5kaW5nID8ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBjYXB0dXJlZEJpbmRpbmcubG9jYXRpb25cbiAgICAgICAgfSA6IGNhcHR1cmVcblxuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGxvb3BDYXB0dXJlLCBvd25lcilcbiAgICAgIH1cbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgY2FwdHVyZSwgb3duZXIpXG4gICAgICAgIGNvbnN0IGNhdGNoQ2FwdHVyZSA9IHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZSA9PSBcImphdmFcIiA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBjYXRjaCBiaW5kaW5nICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5jYXRjaEJvZHksIGNhdGNoQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGVCbG9ja05hbWVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIHVuZGVmaW5lZCwgXCJlbnRyeVwiKVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgZGV0YWlsOiBcImZ1bmN0aW9uIHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4XCIsXG4gICAgICBsb2NhdGlvbjogcGFyYW1ldGVyLmxvY2F0aW9uXG4gICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIGNhcHR1cmUsIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgY29uc3QgY2FsbGFibGVzID0gW1xuICAgICAge2JvZHk6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIG93bmVyOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJjb25zdHJ1Y3RvclwiKSwgcGFyYW1ldGVyczogZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVyc30sXG4gICAgICAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiAoe2JvZHk6IG1ldGhvZC5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwibWV0aG9kXCIpLCBwYXJhbWV0ZXJzOiBtZXRob2QucGFyYW1ldGVyc30pKVxuICAgIF1cblxuICAgIGZvciAoY29uc3QgY2FsbGFibGUgb2YgY2FsbGFibGVzKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXIgPSBjYWxsYWJsZS5wYXJhbWV0ZXJzLmZpbmQoKHtuYW1lfSkgPT4gbmFtZSA9PSBcImphdmFcIilcbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBwYXJhbWV0ZXIgPyB7XG4gICAgICAgIGRldGFpbDogYCR7Y2FsbGFibGUub3duZXJ9IHBhcmFtZXRlciAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgICAgfSA6IHVuZGVmaW5lZFxuXG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoY2FsbGFibGUuYm9keSwgY2FwdHVyZSwgY2FsbGFibGUub3duZXIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIGEgbW9kdWxlIGNvbnRhaW5zIGFuIGV4cHJlc3Npb24ga2luZCB0aGF0IHJlcXVpcmVzIHRhcmdldCBydW50aW1lIHNjYWZmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbltcImtpbmRcIl19IGtpbmQgLSBTb3VnaHQgZXhwcmVzc2lvbiBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwga2luZCkge1xuICBjb25zdCBjbGFzc0Jsb2NrcyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtcbiAgICBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCAuLi5kZWNsYXJhdGlvbi5tZXRob2RzLm1hcCgobWV0aG9kKSA9PiBtZXRob2QuYm9keSlcbiAgXSlcblxuICByZXR1cm4gW21vZHVsZS5lbnRyeVBvaW50LmJvZHksIC4uLm1vZHVsZS5mdW5jdGlvbnMubWFwKChkZWNsYXJhdGlvbikgPT4gZGVjbGFyYXRpb24uYm9keSksIC4uLmNsYXNzQmxvY2tzXS5zb21lKChibG9jaykgPT5cbiAgICBhbGxTdGF0ZW1lbnRzKGJsb2NrKS5zb21lKChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGNvbnN0IGV4cHJlc3Npb24gPSBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lmxpc3QgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiID8gc3RhdGVtZW50Lm1hcCA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiID8gc3RhdGVtZW50LmluaXRpYWxpemVyIDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJhaXNlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSA6IHVuZGVmaW5lZFxuXG4gICAgICByZXR1cm4gZXhwcmVzc2lvbiA/IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkgOiBmYWxzZVxuICAgIH0pKVxufVxuXG4vKipcbiAqIFNlYXJjaGVzIG9uZSB2YWxpZGF0ZWQgZXhwcmVzc2lvbiB0cmVlIGZvciBhIHNlbWFudGljIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBFeHByZXNzaW9uIHJvb3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGtpbmQuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciB0aGUga2luZCBvY2N1cnMuXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwga2luZCkge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IGtpbmQpIHJldHVybiB0cnVlXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5sZWZ0LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmlnaHQsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZCkgfHxcbiAgICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5yZWNlaXZlciwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbGVtZW50LCBraW5kKSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5zb21lKChlbnRyeSkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChlbnRyeS5rZXksIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkudmFsdWUsIGtpbmQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbGxlY3Rpb24sIGtpbmQpIHx8IGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5pbmRleCwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ua2V5LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24udmFsdWUsIGtpbmQpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLm9wZXJhbmQsIGtpbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBmdW5jdGlvbi1uYW1lIGxvY2F0aW9uIHdoZW4gb25lIHN1cnZpdmVkIHNlbWFudGljIGFkYXB0YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gU2VtYW50aWMgZnVuY3Rpb24gZGVjbGFyYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgZGVjbGFyYXRpb24gbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGRlY2xhcmF0aW9uTmFtZUxvY2F0aW9uKGRlY2xhcmF0aW9uKSB7XG4gIHJldHVybiBkZWNsYXJhdGlvbi5zb3VyY2VQcm92ZW5hbmNlPy5yYW5nZXMubmFtZSA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvblxufVxuXG4vKipcbiAqIFJldHVybnMgYSBwYXJzZXItYmFja2VkIGJpbmRpbmctbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXIgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVmFsdWVCaW5kaW5nIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQ2F0Y2hCaW5kaW5nfSBiaW5kaW5nIC0gU2VtYW50aWMgYmluZGluZy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gRXhhY3QgbmFtZSBvciBiaW5kaW5nIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpIHtcbiAgcmV0dXJuIGJpbmRpbmcuc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gYmluZGluZy5sb2NhdGlvblxufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgSmF2YSBtZXRob2Qgc2lnbmF0dXJlIHVzZWQgZm9yIGluaGVyaXRlZC1pbnN0YW5jZSBjb2xsaXNpb24gY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIENhbmRpZGF0ZSBKYXZhIHRhcmdldCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9IEVtaXR0ZWQgbmFtZSBhbmQgcGFyYW1ldGVyIHR5cGVzIHdoZW4gYWxsIHR5cGVzIGFyZSBzdXBwb3J0ZWQuXG4gKi9cbmZ1bmN0aW9uIGVtaXR0ZWRKYXZhRnVuY3Rpb25TaWduYXR1cmUoZGVjbGFyYXRpb24pIHtcbiAgY29uc3QgcGFyYW1ldGVyVHlwZXMgPSBbXVxuXG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCB0eXBlID0gcGFyYW1ldGVyLnR5cGVcblxuICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodHlwZSkpIHJldHVybiB1bmRlZmluZWRcbiAgICBjb25zdCBlbWl0dGVkID0gdHlwZS5raW5kID09IFwiTGlzdFR5cGVcIiA/IFwiamF2YS51dGlsLkxpc3RcIiA6IHR5cGUua2luZCA9PSBcIk1hcFR5cGVcIiA/IFwiamF2YS51dGlsLk1hcFwiIDpcbiAgICAgIHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgPyBlbWl0U2NhbGFyVHlwZShcImphdmFcIiwgdHlwZSkgOiB1bmRlZmluZWRcblxuICAgIGlmICghZW1pdHRlZCkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHBhcmFtZXRlclR5cGVzLnB1c2goZW1pdHRlZClcbiAgfVxuXG4gIHJldHVybiBgJHtkZWNsYXJhdGlvbi5uYW1lfSgke3BhcmFtZXRlclR5cGVzLmpvaW4oXCIsXCIpfSlgXG59XG5cbi8qKlxuICogUmV0dXJucyBldmVyeSBzdGF0ZW1lbnQgbmVzdGVkIGJlbmVhdGggYSBibG9jayBpbiBzZW1hbnRpYyBvcmRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU3RhdGVtZW50W119IFN0YXRlbWVudHMgaW5jbHVkaW5nIG5lc3RlZCBicmFuY2hlcy5cbiAqL1xuZnVuY3Rpb24gYWxsU3RhdGVtZW50cyhibG9jaykge1xuICByZXR1cm4gYmxvY2suc3RhdGVtZW50cy5mbGF0TWFwKChzdGF0ZW1lbnQpID0+IHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuY29uc2VxdWVudCksIC4uLihzdGF0ZW1lbnQuYWx0ZXJuYXRlID8gYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYWx0ZXJuYXRlKSA6IFtdKV1cbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KV1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpLCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5jYXRjaEJvZHkpXVxuXG4gICAgcmV0dXJuIFtzdGF0ZW1lbnRdXG4gIH0pXG59XG5cbi8qKlxuICogSW5kZXhlcyBleGFjdCBsb29wIGlkZW50aXRpZXMgYmVmb3JlIHJlY3Vyc2l2ZSB0YXJnZXQgdmFsaWRhdGlvbiBzbyBjcm9zcy1mdW5jdGlvbiB0YXJnZXRzIGZhaWwgZGV0ZXJtaW5pc3RpY2FsbHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge01hcDxzdHJpbmcsIG9iamVjdD59IExvb3Agb3duZXIgYnkgbW9kdWxlLWxvY2FsIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiBjb2xsZWN0TG9vcE93bmVycyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGNvbnN0IG93bmVycyA9IG5ldyBNYXAoKVxuICBjb25zdCBjbGFzc093bmVycyA9IChtb2R1bGUuY2xhc3NlcyA/PyBbXSkuZmxhdE1hcCgoZGVjbGFyYXRpb24pID0+IFtkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvciwgLi4uZGVjbGFyYXRpb24ubWV0aG9kc10pXG5cbiAgZm9yIChjb25zdCBvd25lciBvZiBbLi4uY2xhc3NPd25lcnMsIC4uLm1vZHVsZS5mdW5jdGlvbnMsIG1vZHVsZS5lbnRyeVBvaW50XSkge1xuICAgIGlmIChvd25lciAmJiB0eXBlb2Ygb3duZXIgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShvd25lcikpIHZpc2l0KFJlZmxlY3QuZ2V0KG93bmVyLCBcImJvZHlcIiksIG93bmVyKVxuICB9XG5cbiAgcmV0dXJuIG93bmVyc1xuXG4gIC8qKlxuICAgKiBWaXNpdHMgbG9vcCBjb250YWluZXJzIHdoaWxlIGJvdW5kaW5nIG1hbGZvcm1lZCBjeWNsZXMuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvd25lciAtIEVuY2xvc2luZyBmdW5jdGlvbiBvciBlbnRyeSBwb2ludC5cbiAgICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZV0gLSBCbG9ja3Mgb24gdGhlIGFjdGl2ZSByZWN1cnNpdmUgcGF0aC5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmdW5jdGlvbiB2aXNpdChibG9jaywgb3duZXIsIGFjdGl2ZSA9IG5ldyBTZXQoKSkge1xuICAgIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykgfHwgYWN0aXZlLmhhcyhibG9jaykpIHJldHVyblxuICAgIGNvbnN0IHN0YXRlbWVudHMgPSBSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICAgIGNvbnN0IHBhdGggPSBuZXcgU2V0KGFjdGl2ZSlcblxuICAgIHBhdGguYWRkKGJsb2NrKVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgICBjb25zdCBraW5kID0gU3RyaW5nKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpKVxuXG4gICAgICBpZiAoW1wiRm9yRWFjaFN0YXRlbWVudFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgXCJXaGlsZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgICBjb25zdCBpZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJpZFwiKVxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgICAgIGlmICh0eXBlb2YgaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGlkKSkgY29udGludWVcbiAgICAgICAgaWYgKG93bmVycy5oYXMoaWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICAgICAgb3duZXJzLnNldChpZCwgb3duZXIpXG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIG93bmVyLCBwYXRoKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBvd25lciwgcGF0aClcbiAgICAgIH0gZWxzZSBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNhdGNoQm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBjb21wbGV0ZSBzZW1hbnRpYyBibG9jayBiZWZvcmUgZW1pc3Npb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIEVuY2xvc2luZyBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2FjdGl2ZTogKGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnQpW10sIG93bmVyOiBvYmplY3QsIG93bmVyczogTWFwPHN0cmluZywgb2JqZWN0Pn19IGxvb3BDb250ZXh0IC0gQWN0aXZlIGxvb3BzIGFuZCB0aGVpciBsZXhpY2FsIG93bmVyLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQmxvY2tzIG9uIHRoZSBhY3RpdmUgcmVjdXJzaXZlIHBhdGguXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUJsb2NrKGJsb2NrLCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGggPSBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoYmxvY2spXG4gIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGNhbmRpZGF0ZS5sb2NhdGlvbiwgb3duZXJMb2NhdGlvbilcblxuICBpZiAoYWN0aXZlUGF0aC5oYXMoY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImN5Y2xpYyBibG9ja1wiLCBsb2NhdGlvbilcbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiQmxvY2tcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYmxvY2sgJHtTdHJpbmcoUmVmbGVjdC5nZXQoYmxvY2ssIFwia2luZFwiKSl9YCwgbG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuc3RhdGVtZW50cykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYmxvY2sgc3RhdGVtZW50c1wiLCBsb2NhdGlvbilcbiAgY29uc3QgYmxvY2tQYXRoID0gbmV3IFNldChhY3RpdmVQYXRoKVxuXG4gIGJsb2NrUGF0aC5hZGQoY2FuZGlkYXRlKVxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBjYW5kaWRhdGUuc3RhdGVtZW50cykge1xuICAgIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlbWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYmxvY2tQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBzdXBwb3J0ZWQgc3RhdGVtZW50IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHt1bmtub3dufSBzdGF0ZW1lbnQgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIEVuY2xvc2luZyBib2R5IGxvY2F0aW9uLlxuICogQHBhcmFtIHt7YWN0aXZlOiAoaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudClbXSwgb3duZXI6IG9iamVjdCwgb3duZXJzOiBNYXA8c3RyaW5nLCBvYmplY3Q+fX0gbG9vcENvbnRleHQgLSBBY3RpdmUgbG9vcHMgYW5kIHRoZWlyIGxleGljYWwgb3duZXIuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbYWN0aXZlUGF0aF0gLSBBY3RpdmUgYmxvY2sgY29udGFpbmVycy5cbiAqIEBwYXJhbSB7U2V0PHN0cmluZz59IFtleHRlcm5hbERlY2xhcmF0aW9uSWRzXSAtIFJlc29sdmVkIGRlY2xhcmF0aW9ucyB3aG9zZSBzb3VyY2Ugc3BlbGxpbmcgaXMgdGFyZ2V0LWluZGVwZW5kZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50KHN0YXRlbWVudCwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpKSB7XG4gIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGF0ZW1lbnRcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICBjb25zdCBvd25Mb2NhdGlvbiA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKVxuICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgb3duZXJMb2NhdGlvbilcblxuICBpZiAodHlwZW9mIGtpbmQgIT0gXCJzdHJpbmdcIikgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIGxvY2F0aW9uKVxuICBpZiAoa2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Mb2NhbERlY2xhcmF0aW9ufSAqLyAoc3RhdGVtZW50KVxuXG4gICAgaWYgKHR5cGVvZiBkZWNsYXJhdGlvbi5tdXRhYmxlICE9IFwiYm9vbGVhblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9jYWwgZGVjbGFyYXRpb24gd2l0aCBpbnZhbGlkIG11dGFiaWxpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGRlY2xhcmF0aW9uLm5hbWUsIFwibG9jYWxcIiwgbG9jYXRpb24pXG4gICAgaWYgKGRlY2xhcmF0aW9uLnR5cGU/LmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiICYmIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kICE9IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGxvY2FsIHJlcXVpcmVzIGEgZGlyZWN0IGxpdGVyYWwgaW5pdGlhbGl6ZXJcIixcbiAgICAgICAgZGlhZ25vc3RpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5sb2NhdGlvbiwgbG9jYXRpb24pKVxuICAgIH1cbiAgICBpZiAoZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXI/LmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiICYmIGRlY2xhcmF0aW9uLm11dGFibGUgIT09IGZhbHNlKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwib3JkZXJlZC1tYXAgbG9jYWwgbXVzdCBiZSBpbW11dGFibGVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzLFxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXI/LmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXNzaWdubWVudFN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcblxuICAgIHZhbGlkYXRlQXNzaWdubWVudFRhcmdldChhc3NpZ25tZW50LnRhcmdldCwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhc3NpZ25tZW50LmV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBhc3NpZ25tZW50ID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Qcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhhc3NpZ25tZW50KS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJleHByZXNzaW9uLGZpZWxkLGtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCB0eXBlb2YgYXNzaWdubWVudC5maWVsZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICBhc3NpZ25tZW50LnJlY2VpdmVyPy5raW5kICE9IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJpdmF0ZSBmaWVsZCByZWNlaXZlciBvciBwcml2YXRlIGZpZWxkIGlkZW50aXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhc3NpZ25tZW50LmV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZXhwcmVzc2lvbiA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJleHByZXNzaW9uXCIpXG5cbiAgICBpZiAoZXhwcmVzc2lvbiAhPT0gdW5kZWZpbmVkKSB2YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIiAmJiBsb29wQ29udGV4dC5hY3RpdmUuc29tZSgoe2tpbmR9KSA9PiBraW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwicmV0dXJuIGZyb20gYW4gaXRlcmF0aW9uIGJvZHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNSB2b2lkIGNhbGwgZXhwcmVzc2lvbiBzdGF0ZW1lbnRcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIgfHxcbiAgICAgICFbXCJDYWxsRXhwcmVzc2lvblwiLCBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIsIFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwia2luZFwiKSkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZXhwcmVzc2lvbiBzdGF0ZW1lbnQgb3RoZXIgdGhhbiBhIGRpcmVjdCBvciByZWNlaXZlciBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGJyYW5jaCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYnJhbmNoLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKE9iamVjdC5oYXNPd24oYnJhbmNoLCBcImFsdGVybmF0ZVwiKSkge1xuICAgICAgdmFsaWRhdGVCbG9jayhicmFuY2guYWx0ZXJuYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkJyZWFrU3RhdGVtZW50XCIgfHwga2luZCA9PSBcIkNvbnRpbnVlU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBgJHtraW5kfSBsb2NhdGlvbmAsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoLyoqIEB0eXBlIHtvYmplY3R9ICovIChzdGF0ZW1lbnQpKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLHRhcmdldExvb3BJZFwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgJHtraW5kfWAsIGxvY2F0aW9uKVxuICAgIGNvbnN0IHRhcmdldExvb3BJZCA9IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJ0YXJnZXRMb29wSWRcIilcbiAgICBjb25zdCBuZWFyZXN0ID0gbG9vcENvbnRleHQuYWN0aXZlLmF0KC0xKVxuXG4gICAgaWYgKCFuZWFyZXN0KSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke2tpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiID8gXCJicmVha1wiIDogXCJjb250aW51ZVwifSBvdXRzaWRlIGEgbG9vcGAsIGxvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgdGFyZ2V0TG9vcElkICE9IFwic3RyaW5nXCIgfHwgIWxvb3BDb250ZXh0Lm93bmVycy5oYXModGFyZ2V0TG9vcElkKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludmFsaWQgbG9vcCBjb250cm9sIHRhcmdldCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGxvb3BDb250ZXh0Lm93bmVycy5nZXQodGFyZ2V0TG9vcElkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsb29wIGNvbnRyb2wgdGFyZ2V0IGNyb3NzZXMgYSBmdW5jdGlvbiBib3VuZGFyeVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHRhcmdldExvb3BJZCAhPSBuZWFyZXN0LmlkKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9vcCBjb250cm9sIG11c3QgdGFyZ2V0IHRoZSBuZWFyZXN0IGVuY2xvc2luZyBsb29wXCIsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAzMkxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMzIgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcFwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBsb29wTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiV2hpbGVTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5XaGlsZVN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhsb29wKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGNvbmRpdGlvbixpZCxraW5kLGxvY2F0aW9uXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgV2hpbGVTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmNvbmRpdGlvbiB8fCB0eXBlb2YgbG9vcC5jb25kaXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AuY29uZGl0aW9uKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIGNvbmRpdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuY29uZGl0aW9uLCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJjb25kaXRpb24tY29udHJvbGxlZCBsb29wIGNvbmRpdGlvbiBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGxvb3AuY29uZGl0aW9uLCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLCBmYWxzZSwgbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmICghbG9vcC5ib2R5IHx8IHR5cGVvZiBsb29wLmJvZHkgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AuYm9keSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJjb25kaXRpb24tY29udHJvbGxlZCBsb29wIGJvZHkgbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlQmxvY2sobG9vcC5ib2R5LCBsYW5ndWFnZSwgbG9vcExvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogWy4uLmxvb3BDb250ZXh0LmFjdGl2ZSwgbG9vcF0sIG93bmVyOiBsb29wQ29udGV4dC5vd25lciwgb3duZXJzOiBsb29wQ29udGV4dC5vd25lcnN9LCBhY3RpdmVQYXRoLFxuICAgICAgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwOExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDggb3JkZXJlZCBsaXN0IGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBsb29wTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiRm9yRWFjaFN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3AgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxpZCxraW5kLGxpc3QsbG9jYXRpb24sdmFsdWVCaW5kaW5nXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgRm9yRWFjaFN0YXRlbWVudFwiLCBsb29wTG9jYXRpb24pXG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AubGlzdCB8fCB0eXBlb2YgbG9vcC5saXN0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmxpc3QpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5saXN0LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gY29sbGVjdGlvbiBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGxvb3AubGlzdCwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoIWxvb3AudmFsdWVCaW5kaW5nIHx8IHR5cGVvZiBsb29wLnZhbHVlQmluZGluZyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC52YWx1ZUJpbmRpbmcpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgYmluZGluZyA9IGxvb3AudmFsdWVCaW5kaW5nXG4gICAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQoYmluZGluZywgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGJpbmRpbmcgbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIGNvbnN0IGJpbmRpbmdGaWVsZHMgPSBPYmplY3Qua2V5cyhiaW5kaW5nKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChiaW5kaW5nLmtpbmQgIT0gXCJWYWx1ZUJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGJpbmRpbmcubXV0YWJsZSAhPT0gZmFsc2UpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtdXRhYmxlIGl0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIFwiaXRlcmF0aW9uIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgIGlmICghbG9vcC5ib2R5IHx8IHR5cGVvZiBsb29wLmJvZHkgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AuYm9keSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgaXRlcmF0aW9uIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDE0IG9yZGVyZWQtbWFwIGl0ZXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICBjb25zdCBsb29wTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihvd25Mb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiRm9yRWFjaE1hcFN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGxvb3AgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hNYXBTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxpZCxrZXlCaW5kaW5nLGtpbmQsbG9jYXRpb24sbWFwLHZhbHVlQmluZGluZ1wiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEZvckVhY2hNYXBTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5tYXAgfHwgdHlwZW9mIGxvb3AubWFwICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLm1hcCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgb3JkZXJlZC1tYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLm1hcCwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwib3JkZXJlZC1tYXAgaXRlcmF0aW9uIGNvbGxlY3Rpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLm1hcCwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBmb3IgKGNvbnN0IFtyb2xlLCBiaW5kaW5nXSBvZiBbW1wia2V5XCIsIGxvb3Aua2V5QmluZGluZ10sIFtcInZhbHVlXCIsIGxvb3AudmFsdWVCaW5kaW5nXV0pIHtcbiAgICAgIGlmICghYmluZGluZyB8fCB0eXBlb2YgYmluZGluZyAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmluZGluZykpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWlzc2luZyBvciBpbnZhbGlkIG1hcCBpdGVyYXRpb24gJHtyb2xlfSBiaW5kaW5nYCwgbG9vcExvY2F0aW9uKVxuICAgICAgfVxuICAgICAgY29uc3QgYmluZGluZ0xvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24oYmluZGluZy5sb2NhdGlvbiwgbGFuZ3VhZ2UsIGBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZyBsb2NhdGlvbmAsIGxvb3BMb2NhdGlvbilcbiAgICAgIGNvbnN0IGJpbmRpbmdGaWVsZHMgPSBPYmplY3Qua2V5cyhiaW5kaW5nKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgICAgaWYgKGJpbmRpbmcua2luZCAhPSBcIlZhbHVlQmluZGluZ1wiIHx8IGJpbmRpbmdGaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLG11dGFibGUsbmFtZSx0eXBlXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkIG1hcCBpdGVyYXRpb24gJHtyb2xlfSBiaW5kaW5nYCwgYmluZGluZ0xvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKGJpbmRpbmcubXV0YWJsZSAhPT0gZmFsc2UpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJNYXAgaXRlcmF0aW9uIGJpbmRpbmdzIG11c3QgYmUgaW1tdXRhYmxlXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGJpbmRpbmcubmFtZSwgYG1hcCBpdGVyYXRpb24gJHtyb2xlfSBiaW5kaW5nYCwgYmluZGluZ0xvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1hcCBpdGVyYXRpb24gYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwibWFwIGl0ZXJhdGlvbiBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoLyoqIEB0eXBlIHtvYmplY3R9ICovIChzdGF0ZW1lbnQpKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByYWlzZWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXJyb3JcIilcbiAgICBjb25zdCByYWlzZUxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIlJhaXNlU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgY29uc3RydWN0aW9uRmllbGRzID0gcmFpc2VkICYmIHR5cGVvZiByYWlzZWQgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShyYWlzZWQpXG4gICAgICA/IE9iamVjdC5rZXlzKHJhaXNlZCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImVycm9yLGtpbmQsbG9jYXRpb25cIiB8fCAhcmFpc2VkIHx8IHR5cGVvZiByYWlzZWQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHJhaXNlZCkgfHxcbiAgICAgIHJhaXNlZC5raW5kICE9IFwiRXJyb3JDb25zdHJ1Y3Rpb25cIiB8fCBjb25zdHJ1Y3Rpb25GaWVsZHMgIT0gXCJlcnJvcixraW5kLGxvY2F0aW9uLG1lc3NhZ2VcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBSYWlzZVN0YXRlbWVudFwiLCByYWlzZUxvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihyYWlzZWQubG9jYXRpb24sIGxhbmd1YWdlLCBcImVycm9yIGNvbnN0cnVjdGlvbiBsb2NhdGlvblwiLCByYWlzZUxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUocmFpc2VkLmVycm9yLCBsYW5ndWFnZSwgcmFpc2VkLmxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihyYWlzZWQubWVzc2FnZSwgbGFuZ3VhZ2UsIHJhaXNlZC5sb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgaGFuZGxlciA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVHJ5U3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IHRyeUxvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIlRyeVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGhhbmRsZXIpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksY2F0Y2hCaW5kaW5nLGNhdGNoQm9keSxjYXRjaFR5cGUsa2luZCxsb2NhdGlvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFRyeVN0YXRlbWVudFwiLCB0cnlMb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFcnJvclR5cGVTaGFwZShoYW5kbGVyLmNhdGNoVHlwZSwgbGFuZ3VhZ2UsIHRyeUxvY2F0aW9uKVxuICAgIGNvbnN0IGJpbmRpbmcgPSBoYW5kbGVyLmNhdGNoQmluZGluZ1xuICAgIGNvbnN0IGJpbmRpbmdGaWVsZHMgPSBiaW5kaW5nICYmIHR5cGVvZiBiaW5kaW5nID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoYmluZGluZylcbiAgICAgID8gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmc/LmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJjYXRjaCBiaW5kaW5nIGxvY2F0aW9uXCIsIHRyeUxvY2F0aW9uKVxuXG4gICAgaWYgKCFiaW5kaW5nIHx8IGJpbmRpbmcua2luZCAhPSBcIkNhdGNoQmluZGluZ1wiIHx8IGJpbmRpbmdGaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLG11dGFibGUsbmFtZSx0eXBlXCIgfHwgYmluZGluZy5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBjYXRjaCBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcImNhdGNoIGJpbmRpbmdcIiwgYmluZGluZ0xvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUoYmluZGluZy50eXBlLCBsYW5ndWFnZSwgYmluZGluZ0xvY2F0aW9uKVxuICAgIGlmIChiaW5kaW5nLnR5cGUuZGVjbGFyYXRpb25JZCAhPSBoYW5kbGVyLmNhdGNoVHlwZS5kZWNsYXJhdGlvbklkKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY2F0Y2ggYmluZGluZyB0eXBlIG1pc21hdGNoXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayhoYW5kbGVyLmJvZHksIGxhbmd1YWdlLCB0cnlMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVCbG9jayhoYW5kbGVyLmNhdGNoQm9keSwgbGFuZ3VhZ2UsIHRyeUxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHN0YXRlbWVudCAke2tpbmR9YCwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBjbG9zZWQgcGFyc2VyLW5ldXRyYWwgZXJyb3IgdHlwZSBzaGFwZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdHlwZSAtIENhbmRpZGF0ZSBlcnJvciB0eXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3Qgb3duaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUoLyoqIEB0eXBlIHt1bmtub3dufSAqLyB0eXBlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gbGFuZ3VhZ2UsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259ICovIG93bmVyTG9jYXRpb24pIHtcbiAgY29uc3QgZmllbGRzID0gdHlwZSAmJiB0eXBlb2YgdHlwZSA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHR5cGUpXG4gICAgPyBPYmplY3Qua2V5cyh0eXBlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKVxuICAgID8gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKHR5cGUpIDoge31cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJFcnJvclR5cGVcIiB8fCBmaWVsZHMgIT0gXCJkZWNsYXJhdGlvbklkLGtpbmRcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICEvXig/Oig/OlthLXpdW2EtejAtOS5fLV0qIyk/ZXJyb3I6WzAtOV0rfCg/Om1vZHVsZTpbMC05XStcXC8pP2NhcGFiaWxpdHk6WzAtOV0rXFwvZmFpbHVyZTpbMC05XSspJC91XG4gICAgICAudGVzdChjYW5kaWRhdGUuZGVjbGFyYXRpb25JZCkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGVycm9yIHR5cGVcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBjb21wbGV0ZSBzZW1hbnRpYyBsb2NhdGlvbiBzdWl0YWJsZSBmb3IgZGlhZ25vc3RpYyBjb25zdHJ1Y3Rpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFByZWZlcnJlZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZmFsbGJhY2sgLSBOZWFyZXN0IGVuY2xvc2luZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gU2FmZSBkaWFnbm9zdGljIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBkaWFnbm9zdGljTG9jYXRpb24oY2FuZGlkYXRlLCBmYWxsYmFjaykge1xuICBpZiAoaXNTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSkpIHJldHVybiBjYW5kaWRhdGVcbiAgaWYgKGlzU2VtYW50aWNMb2NhdGlvbihmYWxsYmFjaykpIHJldHVybiBmYWxsYmFja1xuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBvbmUgY29tcGxldGUgcGFyc2VyLW5ldXRyYWwgbG9jYXRpb24gYmVmb3JlIGFueSBiYWNrZW5kIG9yIGRpYWdub3N0aWMgY29uc3VtZXMgaXQuXG4gKiBAcGFyYW0ge3Vua25vd259IGNhbmRpZGF0ZSAtIFJlcXVpcmVkIGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdWJqZWN0IC0gTG9jYXRpb24gb3duZXIgZm9yIGEgZGV0ZXJtaW5pc3RpYyBkaWFnbm9zdGljLlxuICogQHBhcmFtIHt1bmtub3dufSBmYWxsYmFjayAtIE5lYXJlc3QgZW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBWYWxpZGF0ZWQgbG9jYXRpb24uXG4gKi9cbmZ1bmN0aW9uIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIHN1YmplY3QsIGZhbGxiYWNrKSB7XG4gIGlmICghaXNTZW1hbnRpY0xvY2F0aW9uKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCAke3N1YmplY3R9YCwgZGlhZ25vc3RpY0xvY2F0aW9uKGZhbGxiYWNrLCB1bmRlZmluZWQpKVxuXG4gIHJldHVybiBjYW5kaWRhdGVcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBjb21wbGV0ZSBvcmRlcmVkIFVURi0xNiBzb3VyY2UgcmFuZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IGxvY2F0aW9uIC0gQ2FuZGlkYXRlIHNvdXJjZSByYW5nZS5cbiAqIEByZXR1cm5zIHtsb2NhdGlvbiBpcyBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gV2hldGhlciB0aGUgcmFuZ2UgaXMgc2FmZSB0byBjb25zdW1lLlxuICovXG5mdW5jdGlvbiBpc1NlbWFudGljTG9jYXRpb24obG9jYXRpb24pIHtcbiAgaWYgKCFsb2NhdGlvbiB8fCB0eXBlb2YgbG9jYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvY2F0aW9uKSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7e2ZpbGVuYW1lPzogdW5rbm93biwgc3RhcnQ/OiB1bmtub3duLCBlbmQ/OiB1bmtub3dufX0gKi8gKGxvY2F0aW9uKVxuXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlLmZpbGVuYW1lICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgIWlzU2VtYW50aWNQb2ludChjYW5kaWRhdGUuc3RhcnQpIHx8ICFpc1NlbWFudGljUG9pbnQoY2FuZGlkYXRlLmVuZCkpIHJldHVybiBmYWxzZVxuXG4gIHJldHVybiBjYW5kaWRhdGUuZW5kLm9mZnNldCA+PSBjYW5kaWRhdGUuc3RhcnQub2Zmc2V0ICYmIGNhbmRpZGF0ZS5lbmQubGluZSA+PSBjYW5kaWRhdGUuc3RhcnQubGluZSAmJlxuICAgIChjYW5kaWRhdGUuZW5kLmxpbmUgIT0gY2FuZGlkYXRlLnN0YXJ0LmxpbmUgfHwgY2FuZGlkYXRlLmVuZC5jb2x1bW4gPj0gY2FuZGlkYXRlLnN0YXJ0LmNvbHVtbilcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGNvbXBsZXRlIG9uZS1iYXNlZCBVVEYtMTYgc291cmNlIHBvaW50LlxuICogQHBhcmFtIHt1bmtub3dufSBwb2ludCAtIENhbmRpZGF0ZSBzb3VyY2UgcG9pbnQuXG4gKiBAcmV0dXJucyB7cG9pbnQgaXMgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFdoZXRoZXIgYWxsIGNvb3JkaW5hdGVzIGFyZSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gaXNTZW1hbnRpY1BvaW50KHBvaW50KSB7XG4gIGlmICghcG9pbnQgfHwgdHlwZW9mIHBvaW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShwb2ludCkpIHJldHVybiBmYWxzZVxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge3tvZmZzZXQ/OiB1bmtub3duLCBsaW5lPzogdW5rbm93biwgY29sdW1uPzogdW5rbm93bn19ICovIChwb2ludClcblxuICByZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLm9mZnNldCkgJiYgTnVtYmVyKGNhbmRpZGF0ZS5vZmZzZXQpID49IDAgJiZcbiAgICBOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUubGluZSkgJiYgTnVtYmVyKGNhbmRpZGF0ZS5saW5lKSA+PSAxICYmXG4gICAgTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLmNvbHVtbikgJiYgTnVtYmVyKGNhbmRpZGF0ZS5jb2x1bW4pID49IDFcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNpbXBsZSBpZGVudGlmaWVyIHRhcmdldCBpbnRyb2R1Y2VkIGJ5IHRhc2sgMDAyLlxuICogQHBhcmFtIHt1bmtub3dufSB0YXJnZXQgLSBDYW5kaWRhdGUgYXNzaWdubWVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gQXNzaWdubWVudCBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQodGFyZ2V0LCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbikge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYXNzaWdubWVudCB0YXJnZXRcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovICh0YXJnZXQpXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGFzc2lnbm1lbnQgdGFyZ2V0ICR7U3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJraW5kXCIpKX1gLCBsb2NhdGlvbilcbiAgfVxuXG4gIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5uYW1lLCBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENoZWNrcyBleHByZXNzaW9uIGJhY2tlbmQgY2FwYWJpbGl0aWVzIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHt1bmtub3dufSBleHByZXNzaW9uIC0gQ2FuZGlkYXRlIHNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gTmVhcmVzdCBvd25pbmcgbm9kZSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZF0gLSBXaGV0aGVyIEphdmEgbWF5IHVzZSAyMTQ3NDgzNjQ4IG9ubHkgYmVuZWF0aCBpbnRlZ2VyIG5lZ2F0aW9uLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQW5jZXN0b3JzIG9uIHRoZSBjdXJyZW50IHJlY3Vyc2l2ZSB2YWxpZGF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93SmF2YU9yZGVyZWRNYXBSb290XSAtIFdoZXRoZXIgdGhpcyByb290IGlzIGEgSmF2YSBsb2NhbCBpbml0aWFsaXplciBlbGlnaWJsZSBmb3Igc3RhdGVtZW50IGxvd2VyaW5nLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXhwcmVzc2lvbihleHByZXNzaW9uLCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbiwgYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kID0gZmFsc2UsIGFjdGl2ZVBhdGggPSBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KCksIGFsbG93SmF2YU9yZGVyZWRNYXBSb290ID0gZmFsc2UpIHtcbiAgaWYgKCFleHByZXNzaW9uIHx8IHR5cGVvZiBleHByZXNzaW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShleHByZXNzaW9uKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGV4cHJlc3Npb25cIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gKi8gKGV4cHJlc3Npb24pXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoYWN0aXZlUGF0aC5oYXMoY2FuZGlkYXRlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImN5Y2xpYyBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICBjb25zdCBleHByZXNzaW9uUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBleHByZXNzaW9uUGF0aC5hZGQoY2FuZGlkYXRlKVxuXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlLmtpbmQgIT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwicmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJjbGFzc0lkLGtpbmQsbG9jYXRpb25cIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmNsYXNzSWQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgIS9eKD86W2Etel1bYS16MC05Ll8tXSojKT9jbGFzczpbMC05XSskL3UudGVzdChjYW5kaWRhdGUuY2xhc3NJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcHJpdmF0ZSBmaWVsZCByZWNlaXZlclwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiRXJyb3JNZXNzYWdlUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgY2FuZGlkYXRlLnJlY2VpdmVyPy5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBFcnJvck1lc3NhZ2VSZWFkXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgZXhwZWN0ZWQgPSBjYW5kaWRhdGUua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiA/IFwiZXhwcmVzc2lvbixraW5kLGxvY2F0aW9uLHR5cGVcIiA6IFwiZXhwcmVzc2lvbixraW5kLGxvY2F0aW9uLG1vZGUsdHlwZVwiXG5cbiAgICBpZiAoZmllbGRzICE9IGV4cGVjdGVkIHx8IGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiICYmIGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIiAmJlxuICAgICAgY2FuZGlkYXRlLmV4cHJlc3Npb24ua2luZCAhPSBcIlByaXZhdGVGaWVsZFJlYWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7Y2FuZGlkYXRlLmtpbmR9YCwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjYW5kaWRhdGUudmFsdWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibm9uLXNhZmUgaW50ZWdlciBsaXRlcmFsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCB2YWxpZE5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCA9IGFsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCAmJiBjYW5kaWRhdGUudmFsdWUgPT0gMjE0NzQ4MzY0OFxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmICF2YWxpZE5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCAmJiAoY2FuZGlkYXRlLnZhbHVlIDwgLTIxNDc0ODM2NDggfHwgY2FuZGlkYXRlLnZhbHVlID4gMjE0NzQ4MzY0NykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnRlZ2VyIGxpdGVyYWwgb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKChsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwiZ29cIiB8fCBsYW5ndWFnZSA9PSBcImNcIiB8fCBsYW5ndWFnZSA9PSBcImNwcFwiIHx8IGxhbmd1YWdlID09IFwiZGFydFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiKSAmJiBjYW5kaWRhdGUudmFsdWUgPCAwIHx8XG4gICAgICAobGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiIHx8IGxhbmd1YWdlID09IFwicnVzdFwiIHx8IGxhbmd1YWdlID09IFwic3dpZnRcIikgJiYgT2JqZWN0LmlzKGNhbmRpZGF0ZS52YWx1ZSwgLTApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibmVnYXRpdmUgaW50ZWdlciBsaXRlcmFsIHdpdGhvdXQgc2VtYW50aWMgbmVnYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVyblxuICBpZiAoW1wiT3B0aW9uYWxOb25lXCIsIFwiT3B0aW9uYWxTb21lXCIsIFwiT3B0aW9uYWxJc1ByZXNlbnRcIiwgXCJPcHRpb25hbFVud3JhcFwiXS5pbmNsdWRlcyhjYW5kaWRhdGUua2luZCkpIHtcbiAgICBpZiAoIXRhc2swMDdMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHZhbHVlc1wiLCBsb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkRmllbGRzID0gY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbE5vbmVcIiA/IFwia2luZCxsb2NhdGlvblwiIDpcbiAgICAgIGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxTb21lXCIgPyBcImtpbmQsbG9jYXRpb24sdmFsdWVcIiA6IFwia2luZCxsb2NhdGlvbixvcGVyYW5kXCJcblxuICAgIGlmIChmaWVsZHMgIT0gZXhwZWN0ZWRGaWVsZHMpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCAke2NhbmRpZGF0ZS5raW5kfWAsIGxvY2F0aW9uKVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiKSByZXR1cm5cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbFNvbWVcIikge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS52YWx1ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5PcHRpb25hbElzUHJlc2VudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLk9wdGlvbmFsVW53cmFwfSAqLyAoY2FuZGlkYXRlKVxuXG4gICAgaWYgKCFvcGVyYXRpb24ub3BlcmFuZCB8fCBvcGVyYXRpb24ub3BlcmFuZC5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtjYW5kaWRhdGUua2luZH0gd2l0aG91dCBhIHNpbXBsZSBpZGVudGlmaWVyIG9wZXJhbmRgLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKG9wZXJhdGlvbi5vcGVyYW5kLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoW1wiTGlzdExpdGVyYWxcIiwgXCJNYXBMaXRlcmFsXCIsIFwiT3JkZXJlZE1hcExpdGVyYWxcIiwgXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIsIFwiTWFwTG9va3VwRXhwcmVzc2lvblwiLCBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiXS5pbmNsdWRlcyhjYW5kaWRhdGUua2luZCkpIHtcbiAgICBpZiAoIXRhc2swMDZMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA2IGltbXV0YWJsZSBjb2xsZWN0aW9uc1wiLCBsb2NhdGlvbilcbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiICYmICF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIgJiYgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIWFsbG93SmF2YU9yZGVyZWRNYXBSb290KSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwidW5zYWZlIEphdmEgb3JkZXJlZC1tYXAgZXhwcmVzc2lvbiBsb3dlcmluZ1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTGlzdExpdGVyYWxcIikge1xuICAgICAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmVsZW1lbnRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3Igc3BhcnNlIGxpc3QgZWxlbWVudHNcIiwgbG9jYXRpb24pXG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FuZGlkYXRlLmVsZW1lbnRzKSB7XG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbGVtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgICBpZiAoIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuZW50cmllcykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIHNwYXJzZSBtYXAgZW50cmllc1wiLCBsb2NhdGlvbilcbiAgICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1hcExpdGVyYWxcIiAmJiBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBjYW5kaWRhdGUuZW50cmllcy5sZW5ndGggPiAxMCkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiamF2YS51dGlsLk1hcC5vZiBzdXBwb3J0cyBhdCBtb3N0IHRlbiBlbnRyaWVzXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBjYW5kaWRhdGUuZW50cmllcykge1xuICAgICAgICBpZiAoIWVudHJ5IHx8IGVudHJ5LmtpbmQgIT0gXCJNYXBFbnRyeVwiIHx8ICFlbnRyeS5rZXkgfHwgZW50cnkua2V5LmtpbmQgIT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1hcCBlbnRyeVwiLCBlbnRyeT8ubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGVudHJ5LmtleSwgbGFuZ3VhZ2UsIGVudHJ5LmxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbnRyeS52YWx1ZSwgbGFuZ3VhZ2UsIGVudHJ5LmxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLnRvdGFsaXR5ID09IFwiZmFpbC1vbi1hYnNlbmNlXCIgJiYgbGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxpc3QgYWNjZXNzIGRlcGVuZHMgb24gSmF2YS1zcGVjaWZpYyBib3VuZHMgZmFpbHVyZVwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmluZGV4LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUudG90YWxpdHkgPT0gXCJmYWlsLW9uLWFic2VuY2VcIiAmJiBsYW5ndWFnZSAhPSBcInJ1YnlcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFwIGxvb2t1cCBkZXBlbmRzIG9uIFJ1YnkgZmV0Y2ggYWJzZW5jZSBmYWlsdXJlXCIsIGxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb2xsZWN0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUua2V5LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS5jb2xsZWN0aW9uS2luZCAhPSBcImxpc3RcIiAmJiBjYW5kaWRhdGUuY29sbGVjdGlvbktpbmQgIT0gXCJtYXBcIikge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29sbGVjdGlvbiBzaXplIHdpdGhvdXQgYSB2YWxpZGF0ZWQgcmVjZWl2ZXIga2luZFwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uSWQgPSBjYW5kaWRhdGUucmVzb2x1dGlvbiAmJiB0eXBlb2YgY2FuZGlkYXRlLnJlc29sdXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucmVzb2x1dGlvbilcbiAgICAgID8gUmVmbGVjdC5nZXQoY2FuZGlkYXRlLnJlc29sdXRpb24sIFwiZGVjbGFyYXRpb25JZFwiKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFleHRlcm5hbERlY2xhcmF0aW9uSWRzLmhhcyhkZWNsYXJhdGlvbklkKSkge1xuICAgICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUuY2FsbGVlLCBcImNhbGxlZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFjYW5kaWRhdGUucmVzb2x1dGlvbiB8fCB0eXBlb2YgY2FuZGlkYXRlLnJlc29sdXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5yZXNvbHV0aW9uKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZXNvbHZlZCBjYWxsIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNhbGwgYXJndW1lbnRzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBjYW5kaWRhdGUuYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY2FsbCBhcmd1bWVudCBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cblxuICAgIGlmIChmaWVsZHMgIT0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGtpbmQsbG9jYXRpb24sb3BlcmF0aW9uLHJlc29sdXRpb25cIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IHR5cGVvZiBjYW5kaWRhdGUub3BlcmF0aW9uICE9IFwic3RyaW5nXCIgfHwgIXJlc29sdXRpb24gfHxcbiAgICAgIHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkRWZmZWN0T3BlcmF0aW9uU2lnbmF0dXJlXCIgfHwgcmVzb2x1dGlvbi5vcGVyYXRpb25JZCAhPSBjYW5kaWRhdGUub3BlcmF0aW9uIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24ucGFyYW1ldGVyVHlwZXMpIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5mYWlsdXJlSWRzKSB8fCByZXNvbHV0aW9uLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIGF1dGhvcml6ZWQgZWZmZWN0IGNhbGxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG4gICAgY29uc3QgZWZmZWN0ZnVsRmllbGRzID0gXCJhcmd1bWVudHMsZWZmZWN0U2l0ZUlkLGVmZmVjdHMsZmFpbHVyZUlkcyxraW5kLGxvY2F0aW9uLHJlZmVyZW5jZSxyZXNvbHV0aW9uXCJcbiAgICBjb25zdCBwdXJlRmllbGRzID0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixyZWZlcmVuY2UscmVzb2x1dGlvblwiXG5cbiAgICBpZiAoIVtwdXJlRmllbGRzLCBlZmZlY3RmdWxGaWVsZHNdLmluY2x1ZGVzKGZpZWxkcykgfHxcbiAgICAgIGNhbmRpZGF0ZS5yZWZlcmVuY2U/LmtpbmQgIT0gXCJSZWZlcmVuY2VUeXBlXCIgJiYgY2FuZGlkYXRlLnJlZmVyZW5jZT8ua2luZCAhPSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiIHx8XG4gICAgICB0eXBlb2YgY2FuZGlkYXRlLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fFxuICAgICAgIXJlc29sdXRpb24gfHwgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRDb25zdHJ1Y3RvclNpZ25hdHVyZVwiIHx8XG4gICAgICByZXNvbHV0aW9uLmRlY2xhcmF0aW9uSWQgIT0gYCR7Y2FuZGlkYXRlLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkfTpjb25zdHJ1Y3RvcmAgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fFxuICAgICAgZmllbGRzID09IGVmZmVjdGZ1bEZpZWxkcyAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmZhaWx1cmVJZHMpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWZlcmVuY2UgY29uc3RydWN0aW9uIG9yIHJlc29sdmVkIGNvbnN0cnVjdG9yIHNpZ25hdHVyZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCByZXNvbHV0aW9uID0gY2FuZGlkYXRlLnJlc29sdXRpb25cblxuICAgIGNvbnN0IGVmZmVjdGZ1bEZpZWxkcyA9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxlZmZlY3RzLGZhaWx1cmVJZHMsa2luZCxsb2NhdGlvbixtZXRob2QscmVjZWl2ZXIscmVzb2x1dGlvblwiXG4gICAgY29uc3QgcHVyZUZpZWxkcyA9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24sbWV0aG9kLHJlY2VpdmVyLHJlc29sdXRpb25cIlxuXG4gICAgaWYgKCFbcHVyZUZpZWxkcywgZWZmZWN0ZnVsRmllbGRzXS5pbmNsdWRlcyhmaWVsZHMpIHx8IHR5cGVvZiBjYW5kaWRhdGUubWV0aG9kICE9IFwic3RyaW5nXCIgfHxcbiAgICAgICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHwgIXJlc29sdXRpb24gfHwgcmVzb2x1dGlvbi5raW5kICE9IFwiUmVzb2x2ZWRNZXRob2RTaWduYXR1cmVcIiB8fFxuICAgICAgcmVzb2x1dGlvbi5kZWNsYXJhdGlvbklkICE9IGNhbmRpZGF0ZS5tZXRob2QgfHwgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fFxuICAgICAgIU9iamVjdC5oYXNPd24ocmVzb2x1dGlvbiwgXCJyZXR1cm5UeXBlXCIpIHx8IE9iamVjdC5oYXNPd24ocmVzb2x1dGlvbiwgXCJyZXNvdXJjZUZsb3dcIikgJiZcbiAgICAgICghcmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cgfHwgIVtcInByZXNlcnZlXCIsIFwidGVybWluYWxcIl0uaW5jbHVkZXMoU3RyaW5nKHJlc29sdXRpb24ucmVzb3VyY2VGbG93LmtpbmQpKSB8fFxuICAgICAgICBPYmplY3QuaGFzT3duKHJlc29sdXRpb24ucmVzb3VyY2VGbG93LCBcInRlcm1pbmFsRmFpbHVyZUlkXCIpICYmIHR5cGVvZiByZXNvbHV0aW9uLnJlc291cmNlRmxvdy50ZXJtaW5hbEZhaWx1cmVJZCAhPSBcInN0cmluZ1wiKSB8fFxuICAgICAgZmllbGRzID09IGVmZmVjdGZ1bEZpZWxkcyAmJlxuICAgICAgKHR5cGVvZiBjYW5kaWRhdGUuZWZmZWN0U2l0ZUlkICE9IFwic3RyaW5nXCIgfHwgY2FuZGlkYXRlLmVmZmVjdHM/LmpvaW4oXCIsXCIpICE9IFwiaG9zdFwiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmZhaWx1cmVJZHMpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCByZWNlaXZlciBjYWxsIG9yIHJlc29sdmVkIG1ldGhvZCBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLHJlY29yZFwiIHx8ICFjYW5kaWRhdGUucmVjb3JkIHx8IGNhbmRpZGF0ZS5yZWNvcmQua2luZCAhPSBcIlJlY29yZFR5cGVcIiB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5yZWNvcmQuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmVjb3JkQ29uc3RydWN0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZmllbGQsa2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IHR5cGVvZiBjYW5kaWRhdGUuZmllbGQgIT0gXCJzdHJpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBNZW1iZXJSZWFkXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImZpZWxkLGtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmZpZWxkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgIGNhbmRpZGF0ZS5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24odW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHVuYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5vcGVyYW5kLCBsYW5ndWFnZSwgbG9jYXRpb24sIGNhbmRpZGF0ZS5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIsIGV4cHJlc3Npb25QYXRoLFxuICAgICAgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihjYW5kaWRhdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24oYmluYXJ5T3BlcmF0aW9uU3ludGF4LCBTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBiaW5hcnkgb3BlcmF0aW9uICR7U3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pfWAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmxlZnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmlnaHQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBTdHJpbmcoUmVmbGVjdC5nZXQoZXhwcmVzc2lvbiwgXCJraW5kXCIpKSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogUmVqZWN0cyBjb21waWxlLXRpbWUta25vd24gSmF2YSBpbnRlZ2VyIG9wZXJhdGlvbiByZXN1bHRzIG91dHNpZGUgcHJpbWl0aXZlIGludC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFZhbGlkYXRlZCBvcGVyYXRpb24gc2hhcGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlIG9yIGJpbmFyeSB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9wZXJhdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihleHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24pIHtcbiAgY29uc3QgdmFsdWUgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA8IC0yMTQ3NDgzNjQ4biB8fCB2YWx1ZSA+IDIxNDc0ODM2NDduKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJnb1wiIHx8IGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJydXN0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiIHx8IGxhbmd1YWdlID09IFwid2FzbVwiIHx8IGxhbmd1YWdlID09IFwiemlnXCIpICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiZcbiAgICAodmFsdWUgPCAtOTIyMzM3MjAzNjg1NDc3NTgwOG4gfHwgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODA3bikpIHtcbiAgICBjb25zdCBzY2FsYXIgPSBsYW5ndWFnZSA9PSBcIndhc21cIiB8fCBsYW5ndWFnZSA9PSBcInppZ1wiID8gXCJpNjRcIiA6IGxhbmd1YWdlID09IFwic3dpZnRcIiA/IFwiSW50NjRcIiA6IFwibG9uZ1wiXG5cbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgNjQtYml0ICR7c2NhbGFyfSByYW5nZWAsIGxvY2F0aW9uKVxuICB9XG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIikgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IC1CaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpIHx8IHZhbHVlID4gQmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgdGhlIFNlbWFudGlmb2xkIHNhZmUtaW50ZWdlciByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBvbmx5IGxpdGVyYWwgaW50ZWdlci1vcGVyYXRpb24gdHJlZXMgZm9yIGJvdW5kcyB2YWxpZGF0aW9uLCBuZXZlciBJUiBmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtiaWdpbnQgfCB1bmRlZmluZWR9IEtub3duIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGV4cHJlc3Npb24udmFsdWUpKSByZXR1cm4gQmlnSW50KGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgIGNvbnN0IG9wZXJhbmQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLm9wZXJhbmQpXG5cbiAgICByZXR1cm4gb3BlcmFuZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogLW9wZXJhbmRcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbGVmdCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ubGVmdClcbiAgY29uc3QgcmlnaHQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLnJpZ2h0KVxuXG4gIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIpIHJldHVybiBsZWZ0ICsgcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIpIHJldHVybiBsZWZ0IC0gcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck11bHRpcGx5XCIpIHJldHVybiBsZWZ0ICogcmlnaHRcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRW1pdHMgb25lIHJlY3Vyc2l2ZSBzZW1hbnRpYyB0eXBlIHdoaWxlIG1hcHBpbmcgZXZlcnkgY29uc3RpdHVlbnQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNGdW5jdGlvblJldHVyblR5cGV9IHR5cGUgLSBTZW1hbnRpYyB0eXBlLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCB0eXBlIG9jY3VycmVuY2UgcGF0aC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVGV4dEJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqYXZhQm94ZWRdIC0gV2hldGhlciBhIEphdmEgc2NhbGFyIGlzIGEgZ2VuZXJpYyBhcmd1bWVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdFR5cGUod3JpdGVyLCB0eXBlLCBwYXRoLCBsYW5ndWFnZSwgamF2YUJveGVkID0gZmFsc2UpIHtcbiAgaWYgKHR5cGUua2luZCA9PSBcIlR5cGVWYXJpYWJsZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gd3JpdGVyLnR5cGVQYXJhbWV0ZXJGb3JJZCh0eXBlLnBhcmFtZXRlcklkKVxuXG4gICAgd3JpdGVyLm1hcHBlZChwYXJhbWV0ZXIubmFtZSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHBhcmFtZXRlci5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIlJlY29yZFR5cGVcIikge1xuICAgIGNvbnN0IHJlY29yZCA9IHdyaXRlci5yZWNvcmRGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5yZWNvcmROYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVjb3JkLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICBpZiAodHlwZS5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIltcIiA6IFwiPFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgICAgdHlwZS5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJwaHBcIiB8fCBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLFwiIDogXCIsIFwiLFxuICAgICAgICAgIFwiZ2VuZXJpYyB0eXBlIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbdHlwZV0sIFtwYXRoXSlcbiAgICAgICAgZW1pdFR5cGUod3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIl1cIiA6IFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVzb3VyY2VUeXBlXCIpIHtcbiAgICBjb25zdCByZXNvdXJjZSA9IHdyaXRlci5yZXNvdXJjZUZvcklkKHR5cGUucmVzb3VyY2VJZClcbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYXBhYmlsaXR5Tm9taW5hbE5hbWUocmVzb3VyY2UubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZXNvdXJjZS5uYW1lLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKHR5cGUua2luZCA9PSBcIk93bmVkUmVmZXJlbmNlVHlwZVwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpXG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuY2xhc3NOYW1lRm9ySWQodHlwZS5kZWNsYXJhdGlvbklkKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImphdmFcIiAmJiBqYXZhQm94ZWRcbiAgICAgID8gdHlwZS5uYW1lID09IFwiaW50ZWdlclwiID8gXCJJbnRlZ2VyXCIgOiB0eXBlLm5hbWUgPT0gXCJib29sZWFuXCIgPyBcIkJvb2xlYW5cIiA6IHR5cGUubmFtZSA9PSBcInN0cmluZ1wiID8gXCJTdHJpbmdcIiA6IFwidm9pZFwiXG4gICAgICA6IGVtaXRTY2FsYXJUeXBlKGxhbmd1YWdlLCB0eXBlKVxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHtcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsPFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiP1wiIDogXCJcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIj5cIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCI/XCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IFwifG51bGxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiIHwgbnVsbFwiIDogXCJcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBjb25zdCBwcmVmaXggPSB0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiXG4gICAgPyBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiQXJyYXlbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJsaXN0PFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTGlzdDxcIiA6IFwiUmVhZG9ubHlBcnJheTxcIlxuICAgIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIkhhc2hbXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJhcnJheTxcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IHR5cGUua2luZCA9PSBcIk9yZGVyZWRNYXBUeXBlXCIgPyBcImphdmEudXRpbC5TZXF1ZW5jZWRNYXA8XCIgOiBcImphdmEudXRpbC5NYXA8XCIgOiBcIlJlYWRvbmx5TWFwPFwiXG5cbiAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiB0eXBlLCBwYXRoLCByb2xlOiBcInR5cGVcIn0pXG4gIGlmICh0eXBlLmtpbmQgPT0gXCJMaXN0VHlwZVwiKSB7XG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLmVsZW1lbnRUeXBlLCBgJHtwYXRofS9lbGVtZW50VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfSBlbHNlIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUua2V5VHlwZSwgYCR7cGF0aH0va2V5VHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgICB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCIsIFwiIDogXCIsXCIsIFwibWFwIHR5cGUgc2VwYXJhdG9yXCIsIFt0eXBlXSwgW3BhdGhdKVxuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS52YWx1ZVR5cGUsIGAke3BhdGh9L3ZhbHVlVHlwZWAsIGxhbmd1YWdlLCBsYW5ndWFnZSA9PSBcImphdmFcIilcbiAgfVxuICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCJdXCIgOiBcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiB0eXBlLCBwYXRofSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIHN1cHBvcnRlZCBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciAtIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBFeGFjdCBKU09OIFBvaW50ZXIgZm9yIHRoaXMgZXhwcmVzc2lvbiBvY2N1cnJlbmNlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UZXh0QmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7KG5hbWU6IHN0cmluZykgPT4gc3RyaW5nfSBlbWl0SWRlbnRpZmllciAtIElkZW50aWZpZXIgZm9ybWF0dGVyLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcikge1xuICBjb25zdCBlZmZlY3RUZW1wb3JhcnkgPSB3cml0ZXIuZWZmZWN0UmVwbGFjZW1lbnROYW1lKGV4cHJlc3Npb24pXG5cbiAgaWYgKGVmZmVjdFRlbXBvcmFyeSkge1xuICAgIHdyaXRlci5zeW50aGV0aWMoZW1pdElkZW50aWZpZXIoZWZmZWN0VGVtcG9yYXJ5KSwgXCJleGFjdGx5LW9uY2UgZWZmZWN0IHRlbXBvcmFyeSByZWFkXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0SWRlbnRpZmllcihleHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiJHRoaXNcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJzZWxmXCIgOiBcInRoaXNcIixcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoZXhwcmVzc2lvbi5leHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGV4cHJlc3Npb24uZXhwcmVzc2lvbi5uYW1lLFxuICAgICAgICBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgfSBlbHNlIGlmIChleHByZXNzaW9uLmV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiR0aGlzXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwic2VsZlwiIDogXCJ0aGlzXCIsXG4gICAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY2VpdmVyXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmV4cHJlc3Npb24uZmllbGQpXG5cbiAgICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIikge1xuICAgICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vZXhwcmVzc2lvbi9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIH1cbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6XG4gICAgICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gYEAke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcImNzaGFycFwiIHx8IGxhbmd1YWdlID09IFwia290bGluXCIgPyBgJHtleHByZXNzaW9uLnZhbHVlfUxgIDogU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgc3BlbGxpbmcgPSBsYW5ndWFnZSA9PSBcInB5dGhvblwiID8gZXhwcmVzc2lvbi52YWx1ZSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiIDogZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwiXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCJfc2VtYW50aWZvbGRCb29sZWFuKFwiLCBcIkRhcnQgYW5hbHl6ZWQgQm9vbGVhbiBsaXRlcmFsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJsaXRlcmFsXCJ9KVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIikgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJEYXJ0IGFuYWx5emVkIEJvb2xlYW4gbGl0ZXJhbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChsYW5ndWFnZSwgZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsTm9uZVwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLk9wdGlvbmFsLmVtcHR5KClcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJuaWxcIiA6IFwibnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImFic2VuY2VcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiamF2YS51dGlsLk9wdGlvbmFsLm9mKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJzb21lXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24udmFsdWUsIGAke3BhdGh9L3ZhbHVlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsSXNQcmVzZW50XCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVsc2UgaWYgKGxhbmd1YWdlICE9IFwiamF2YVwiKSB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5pc1ByZXNlbnQoKVwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIi5uaWw/XCIgOiBcIiAhPT0gbnVsbFwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGlmIChsYW5ndWFnZSAhPSBcInJ1YnlcIiAmJiBsYW5ndWFnZSAhPSBcImphdmFcIikgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxVbndyYXBcIikge1xuICAgIGlmIChsYW5ndWFnZSAhPSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIuZ2V0KClcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwidW53cmFwXCJ9KVxuICAgIH0gZWxzZSB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiamF2YS51dGlsLkxpc3Qub2YoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImxpc3QgZWxlbWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVsZW1lbnQsIGAke3BhdGh9L2VsZW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogXCJdXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgY29uc3Qgb3BlbiA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTWFwLm9mKFwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIm5ldyBNYXAoW1wiIDpcbiAgICAgIGxhbmd1YWdlID09IFwicGhwXCIgPyBcIltcIiA6IFwie1wiXG4gICAgY29uc3QgY2xvc2UgPSBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIl0pXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiXVwiIDogXCJ9XCJcblxuICAgIHdyaXRlci5tYXBwZWQob3Blbiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmVudHJpZXMuZm9yRWFjaCgoZW50cnksIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBlbnRyeVBhdGggPSBgJHtwYXRofS9lbnRyaWVzLyR7aW5kZXh9YFxuXG4gICAgICBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIm1hcCBlbnRyeSBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHdyaXRlci5tYXBwZWQoXCJbXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aH0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVudHJ5LmtleSwgYCR7ZW50cnlQYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicnVieVwiID8gXCIgPT4gXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCIgPT4gXCIgOiBcIiwgXCIsIHtcbiAgICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZW50cnksIHBhdGg6IGVudHJ5UGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgICB9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBlbnRyeS52YWx1ZSwgYCR7ZW50cnlQYXRofS92YWx1ZWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgd3JpdGVyLm1hcHBlZChcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRofSlcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoY2xvc2UsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXQoXCIgOiBcIltcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmluZGV4LCBgJHtwYXRofS9pbmRleGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiLmZldGNoKFwiIDogbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiW1wiIDogXCIuZ2V0KFwiXG5cbiAgICB3cml0ZXIubWFwcGVkKG9wZXJhdG9yLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ua2V5LCBgJHtwYXRofS9rZXlgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCJdXCIgOiBcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIpIHtcbiAgICAgIHdyaXRlci5zeW50aGV0aWMoXCIhXCIsIFwic3RhdGljYWxseSBwcm92ZW4gbWFwIGxvb2t1cFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNvbGxlY3Rpb25TaXplRXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjb3VudChcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3Qgb3BlcmF0b3IgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLnNpemVcIiA6XG4gICAgICBleHByZXNzaW9uLmNvbGxlY3Rpb25LaW5kID09IFwibGlzdFwiID8gXCIubGVuZ3RoXCIgOiBcIi5zaXplXCJcblxuICAgIHdyaXRlci5tYXBwZWQoYCR7b3BlcmF0b3J9JHtsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiKClcIiA6IFwiXCJ9YCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0TXVsdGlsaW5lID0gbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgKGV4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA+IDAgfHwgQm9vbGVhbihjYWxsQXJndW1lbnRTdWZmaXgpKSAmJlxuICAgICAgZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbilcbiAgICBjb25zdCBkYXJ0SW5kZW50ID0gZGFydE11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jYWxsTmFtZUZvcihleHByZXNzaW9uKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZXhwcmVzc2lvbi5jYWxsZWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2FsbGVlXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhgJHtpbmRleCA/IFwiXCIgOiBcIlxcblwifSR7ZGFydEluZGVudH0gIGAsIFwiRGFydCBhcmd1bWVudCBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVsc2UgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH0pXG4gICAgaWYgKGNhbGxBcmd1bWVudFN1ZmZpeCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0TXVsdGlsaW5lID8gYCR7ZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID8gXCJcIiA6IFwiXFxuXCJ9JHtkYXJ0SW5kZW50fSAgJHtjYWxsQXJndW1lbnRTdWZmaXh9LFxcbmAgOlxuICAgICAgICBgJHtleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPyBcIiwgXCIgOiBcIlwifSR7Y2FsbEFyZ3VtZW50U3VmZml4fWAsXG4gICAgICBcInRhcmdldC1jb250YWluZXIgc2VtYW50aWMgY2FsbCBhcmd1bWVudFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgaWYgKGRhcnRNdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoZGFydEluZGVudCwgXCJEYXJ0IGNhbGwgY2xvc2luZyBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmF0aW9uID0gd3JpdGVyLmVmZmVjdE9wZXJhdGlvbkZvcklkKGV4cHJlc3Npb24ub3BlcmF0aW9uKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiB3cml0ZXIucmVmZXJlbmNlQ2xhc3NFbWlzc2lvbkRlcHRoID4gMCkge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIk1haW4uXCIsIFwicHJvdGVjdGVkIFRhc2sgMDM0IGhvc3Qgc3VwcG9ydCBvd25lclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZCh3cml0ZXIuc3RkbGliUHJvdmlkZXJFbnRyeUZvcihvcGVyYXRpb24pID8/IG9wZXJhdGlvbi5uYW1lLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBvcGVyYXRpb24ubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImVmZmVjdCBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJSZWZlcmVuY2VDb25zdHJ1Y3Rpb25cIikge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gd3JpdGVyLmNsYXNzRm9ySWQoZXhwcmVzc2lvbi5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBuYW1lID0gd3JpdGVyLmNsYXNzTmFtZUZvcklkKGV4cHJlc3Npb24ucmVmZXJlbmNlLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgcHJlZml4ID0gbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgJHtuYW1lfS5uZXdgIDogYG5ldyAke25hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChwcmVmaXgsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBkZWNsYXJhdGlvbi5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNsYXNzXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJjb25zdHJ1Y3RvciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZXRob2RDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBtZXRob2QgPSB3cml0ZXIubWV0aG9kRm9ySWQoZXhwcmVzc2lvbi5tZXRob2QpXG5cbiAgICB3cml0ZXIubWFwcGVkKGAke2xhbmd1YWdlID09IFwicGhwXCIgPyBcIi0+XCIgOiBcIi5cIn0ke21ldGhvZC5uYW1lfWAsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IG1ldGhvZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibWV0aG9kIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gd3JpdGVyLnJlY29yZEZvcklkKGV4cHJlc3Npb24ucmVjb3JkLmRlY2xhcmF0aW9uSWQpXG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IHdyaXRlci5yZWNvcmROYW1lRm9ySWQoZXhwcmVzc2lvbi5yZWNvcmQuZGVjbGFyYXRpb25JZCwgdHJ1ZSlcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke3RhcmdldE5hbWV9Lm5ld2AgOiBgbmV3ICR7dGFyZ2V0TmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlY29yZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInJlY29yZFwifSlcbiAgICBpZiAoKGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiKSAmJiBleHByZXNzaW9uLnJlY29yZC5hcmd1bWVudHMpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI8XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgICAgZXhwcmVzc2lvbi5yZWNvcmQuYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIsXCIgOiBcIiwgXCIsIFwiZ2VuZXJpYyBjb25zdHJ1Y3Rpb24gYXJndW1lbnQgc2VwYXJhdG9yXCIsXG4gICAgICAgICAgW2V4cHJlc3Npb24ucmVjb3JkXSwgW2Ake3BhdGh9L3JlY29yZGBdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9yZWNvcmQvYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgICAgfSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbi5yZWNvcmQsIHBhdGg6IGAke3BhdGh9L3JlY29yZGB9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwicmVjb3JkIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1lbWJlclJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgY29uc3QgZmllbGQgPSB3cml0ZXIuZmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuICAgIGNvbnN0IHBocEdlbmVyaWNSZWNvcmQgPSBsYW5ndWFnZSA9PSBcInBocFwiICYmXG4gICAgICAod3JpdGVyLnJlY29yZEZvckZpZWxkSWQoZXhwcmVzc2lvbi5maWVsZCkudHlwZVBhcmFtZXRlcnM/Lmxlbmd0aCA/PyAwKSA+IDBcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBgLT4ke2ZpZWxkLm5hbWV9JHtwaHBHZW5lcmljUmVjb3JkID8gXCIoKVwiIDogXCJcIn1gIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gYC4ke2ZpZWxkLm5hbWV9KClgIDogYC4ke2ZpZWxkLm5hbWV9YFxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5wcml2YXRlRmllbGRGb3JJZChleHByZXNzaW9uLmZpZWxkKVxuXG4gICAgaWYgKGxhbmd1YWdlID09IFwicnVieVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKGBAJHtmaWVsZC5uYW1lfWAsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX1gIDogbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgPyBgLiMke2ZpZWxkLm5hbWV9YCA6IGAuJHtmaWVsZC5uYW1lfWAsXG4gICAgICB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZmllbGQubmFtZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCItPmdldE1lc3NhZ2UoKVwiIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIi5nZXRNZXNzYWdlKClcIiA6IFwiLm1lc3NhZ2VcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIlxuICAgIH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIFwiX3NlbWFudGlmb2xkSW50ZWdlck5lZ2F0ZVwiLCBbXG4gICAgICAgIFtleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgXVxuICAgICAgXSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBcInNlbWFudGlmb2xkX2ludGVnZXJfbmVnYXRlXCIsIFtcbiAgICAgICAgW2V4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGBdXG4gICAgICBdKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImNzaGFycFwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiY2hlY2tlZChcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHdyaXRlci5tYXBwZWQoXCItXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiQm9vbGVhbk5vdFwiID8gXCJub3QgXCIgOiB1bmFyeU9wZXJhdGlvblN5bnRheFtleHByZXNzaW9uLm9wZXJhdGlvbl0sIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyQWRkXCIgOlxuICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlclN1YnRyYWN0XCIgOiBcIl9zZW1hbnRpZm9sZEludGVnZXJNdWx0aXBseVwiXG5cbiAgICBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgW1wiSW50ZWdlckFkZFwiLCBcIkludGVnZXJTdWJ0cmFjdFwiLCBcIkludGVnZXJNdWx0aXBseVwiXS5pbmNsdWRlcyhleHByZXNzaW9uLm9wZXJhdGlvbikpIHtcbiAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwic2VtYW50aWZvbGRfaW50ZWdlcl9hZGRcIiA6XG4gICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX3N1YnRyYWN0XCIgOiBcInNlbWFudGlmb2xkX2ludGVnZXJfbXVsdGlwbHlcIlxuXG4gICAgZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIFtcbiAgICAgIFtleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgXSwgW2V4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YF1cbiAgICBdKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwia290bGluXCIgJiYgd3JpdGVyLnVzZXNNZXRob2RTdHJpbmdFcXVhbGl0eSgpICYmXG4gICAgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHMoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIikpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIHdyaXRlci5tYXBwZWQoXCJjaGVja2VkKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICB3cml0ZXIubWFwcGVkKGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICBjb25zdCBjb21wb3NpdGVPcGVyYXRvciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIiAmJiB3cml0ZXIuaGFzUmFuZ2UoZXhwcmVzc2lvbiwgcGF0aCwgXCJlcXVhbGl0eU9wZXJhdG9yXCIpXG5cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIi5lcXVhbHNcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogY29tcG9zaXRlT3BlcmF0b3IgPyBcImVxdWFsaXR5T3BlcmF0b3JcIiA6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInN3aWZ0XCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgd3JpdGVyLm1hcHBlZChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgPyBcInNlbWFudGlmb2xkX3N0cmluZ19lcXVhbFwiIDogXCJzZW1hbnRpZm9sZF9zdHJpbmdfbm90X2VxdWFsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiU3dpZnQgc2NhbGFyLWVxdWFsaXR5IGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZGFydE11bHRpbGluZSA9IGxhbmd1YWdlID09IFwiZGFydFwiICYmIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pXG4gIGNvbnN0IGRhcnRJbmRlbnQgPSBkYXJ0TXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBjb25zdCBzcGVsbGluZyA9IGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSlcblxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDAsIDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJlcXVhbGl0eU9wZXJhdG9yXCJ9KVxuICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoZGFydE11bHRpbGluZSA/IGBcXG4ke2RhcnRJbmRlbnR9ICAgIGAgOiBcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmlnaHQsIGAke3BhdGh9L3JpZ2h0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgd2hpbGUgcHJlc2VydmluZyB0aGUgc2VtYW50aWMgb3BlcmF0b3IgcmFuZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIE9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gT3BlcmF0aW9uIHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gaGVscGVyIC0gRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgLSBPcmRlcmVkIG9wZXJhbmRzIGFuZCBwYXRocy5cbiAqL1xuZnVuY3Rpb24gZW1pdEtvdGxpbkludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIG9wZXJhbmRzKSB7XG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBvcGVyYW5kcy5mb3JFYWNoKChbb3BlcmFuZCwgb3BlcmFuZFBhdGhdLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJrb3RsaW5cIiwgaWRlbnRpdHlJZGVudGlmaWVyKVxuICB9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBjb21waWxlci1vd25lZCBEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuVW5hcnlFeHByZXNzaW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmluYXJ5RXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBPcGVyYXRpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBPcGVyYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwZXIgRXhhY3QgdGFyZ2V0IGhlbHBlci5cbiAqIEBwYXJhbSB7W2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb24sIHN0cmluZ11bXX0gb3BlcmFuZHMgT3JkZXJlZCBvcGVyYW5kcyBhbmQgcGF0aHMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgaGVscGVyLCBvcGVyYW5kcykge1xuICBjb25zdCBmbGF0TGVuZ3RoID0gaGVscGVyLmxlbmd0aCArIDIgKyBvcGVyYW5kcy5yZWR1Y2UoKHRvdGFsLCBbb3BlcmFuZF0sIGluZGV4KSA9PlxuICAgIHRvdGFsICsgZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgb3BlcmFuZCkubGVuZ3RoICsgKGluZGV4ID8gMiA6IDApLCAwKVxuICBjb25zdCBtdWx0aWxpbmUgPSB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXRMZW5ndGggPiA4MFxuICBjb25zdCBpbmRlbnQgPSBtdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gIHdyaXRlci5tYXBwZWQoaGVscGVyLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIihcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgb3BlcmFuZHMuZm9yRWFjaCgoW29wZXJhbmQsIG9wZXJhbmRQYXRoXSwgaW5kZXgpID0+IHtcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGAke2luZGV4ID8gXCJcIiA6IFwiXFxuXCJ9JHtpbmRlbnR9ICBgLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVsc2UgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kLCBvcGVyYW5kUGF0aCwgXCJkYXJ0XCIsIGlkZW50aXR5SWRlbnRpZmllcilcbiAgICBpZiAobXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKFwiLFxcblwiLCBcIkRhcnQgZm9ybWF0dGVyIGNoZWNrZWQtaW50ZWdlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIH0pXG4gIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoaW5kZW50LCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGNsb3NpbmcgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiRGFydCBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIERhcnQncyBkZWZhdWx0IDgwLWNvbHVtbiBmb3JtYXR0ZXIgbXVzdCBzcGxpdCBhbiBleHByZXNzaW9uIGF0IHRoZSBjdXJyZW50IHNpdGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBmbGF0IGV4cHJlc3Npb24gY3Jvc3NlcyB0aGUgZm9ybWF0dGVyIGJvdW5kYXJ5LlxuICovXG5mdW5jdGlvbiBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIHJldHVybiB3cml0ZXIuY29sdW1uIC0gMSArIGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24pLmxlbmd0aCA+IDgwXG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBnZW5lcmF0ZWQgbGluZSdzIHN0cnVjdHVyYWwgaW5kZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBMZWFkaW5nIHNwYWNlcy5cbiAqL1xuZnVuY3Rpb24gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSB7XG4gIHJldHVybiAvXiAqL3UuZXhlYyh3cml0ZXIuY29kZS5zbGljZSh3cml0ZXIuY29kZS5sYXN0SW5kZXhPZihcIlxcblwiKSArIDEpKT8uWzBdID8/IFwiXCJcbn1cblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBib3VuZGVkIFRhc2stMDA1IERhcnQgZXhwcmVzc2lvbiBwcm9maWxlIHdpdGhvdXQgbWFwcGluZ3MgZm9yIHBhZ2Utd2lkdGggcGxhbm5pbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIFNvdXJjZS1hd2FyZSB3cml0ZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEZsYXQgY2Fub25pY2FsIHNwZWxsaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb24ubmFtZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikgcmV0dXJuIFN0cmluZyhleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikgcmV0dXJuIGBfc2VtYW50aWZvbGRCb29sZWFuKCR7ZXhwcmVzc2lvbi52YWx1ZSA/IFwidHJ1ZVwiIDogXCJmYWxzZVwifSlgXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVybiBlbWl0U3RyaW5nTGl0ZXJhbChcImRhcnRcIiwgZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBhcmd1bWVudHNfID0gZXhwcmVzc2lvbi5hcmd1bWVudHMubWFwKChhcmd1bWVudCkgPT4gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQpKVxuICAgIGNvbnN0IGNhbGxBcmd1bWVudFN1ZmZpeCA9IHdyaXRlci5jYWxsQXJndW1lbnRTdWZmaXhGb3IoZXhwcmVzc2lvbilcblxuICAgIGlmIChjYWxsQXJndW1lbnRTdWZmaXgpIGFyZ3VtZW50c18ucHVzaChjYWxsQXJndW1lbnRTdWZmaXgpXG5cbiAgICByZXR1cm4gYCR7d3JpdGVyLmNhbGxOYW1lRm9yKGV4cHJlc3Npb24pfSgke2FyZ3VtZW50c18uam9pbihcIiwgXCIpfSlgXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGZsYXREYXJ0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZClcblxuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIiA/IGBfc2VtYW50aWZvbGRJbnRlZ2VyTmVnYXRlKCR7b3BlcmFuZH0pYCA6IGAoISR7b3BlcmFuZH0pYFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBsZWZ0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0KVxuICAgIGNvbnN0IHJpZ2h0ID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodClcblxuICAgIGlmIChbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJBZGRcIiA6XG4gICAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJTdWJ0cmFjdFwiIDogXCJfc2VtYW50aWZvbGRJbnRlZ2VyTXVsdGlwbHlcIlxuXG4gICAgICByZXR1cm4gYCR7aGVscGVyfSgke2xlZnR9LCAke3JpZ2h0fSlgXG4gICAgfVxuICAgIHJldHVybiBgKCR7bGVmdH0gJHtiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhleHByZXNzaW9uLm9wZXJhdGlvbiwgXCJkYXJ0XCIpfSAke3JpZ2h0fSlgXG4gIH1cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIERhcnQgZXhwcmVzc2lvbiByZWFjaGVkIGZvcm1hdHRlciBwbGFubmluZyBhZnRlciBwcmVmbGlnaHQuXCIpXG59XG5cbi8qKlxuICogUHJlc2VydmVzIGEgS290bGluIGlkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIElkZW50aWZpZXIgc3BlbGxpbmcuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBVbmNoYW5nZWQgc3BlbGxpbmcuXG4gKi9cbmZ1bmN0aW9uIGlkZW50aXR5SWRlbnRpZmllcihuYW1lKSB7XG4gIHJldHVybiBuYW1lXG59XG5cbi8qKlxuICogUmVwb3J0cyB3aGV0aGVyIEphdmFTY3JpcHQtZmFtaWx5IGV4ZWN1dGlvbiBjYW4gY3JlYXRlIElFRUUtNzU0IHNpZ25lZCB6ZXJvLlxuICogU2VtYW50aWZvbGQgaW50ZWdlcnMgaGF2ZSBvbmUgbWF0aGVtYXRpY2FsIHplcm8sIHNvIHRob3NlIHRhcmdldHMgY2Fub25pY2FsaXplXG4gKiB0aGVpciBvYnNlcnZhYmxlIHNjYWxhciBvdXRwdXQgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3BlcmF0aW9uIHRyZWUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBWYWxpZGF0ZWQgc2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgY2Fub25pY2FsIG91dHB1dCByZW5kZXJpbmcgaXMgcmVxdWlyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1aXJlc0Nhbm9uaWNhbFplcm9SZW5kZXJpbmcobW9kdWxlKSB7XG4gIHJldHVybiBtb2R1bGUuZnVuY3Rpb25zLnNvbWUoKGRlY2xhcmF0aW9uKSA9PiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihkZWNsYXJhdGlvbi5ib2R5KSkgfHxcbiAgICBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgYmxvY2sgZm9yIHNpZ24tcHJvZHVjaW5nIGludGVnZXIgb3BlcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gU2VtYW50aWMgYmxvY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhIG5lc3RlZCBleHByZXNzaW9uIGNhbiBwcm9kdWNlIHNpZ25lZCB6ZXJvIGluIEphdmFTY3JpcHQuXG4gKi9cbmZ1bmN0aW9uIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGJsb2NrKSB7XG4gIHJldHVybiBibG9jay5zdGF0ZW1lbnRzLnNvbWUoKHN0YXRlbWVudCkgPT4ge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25kaXRpb24pIHx8XG4gICAgICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25zZXF1ZW50KSB8fFxuICAgICAgICBCb29sZWFuKHN0YXRlbWVudC5hbHRlcm5hdGUgJiYgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmFsdGVybmF0ZSkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50Lmxpc3QpIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5tYXApIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY29uZGl0aW9uKSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYm9keSkgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNhdGNoQm9keSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRXhwcmVzc2lvblN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihzdGF0ZW1lbnQuZXhwcmVzc2lvbiAmJiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5leHByZXNzaW9uKSlcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGV4cHJlc3Npb24gdHJlZSBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgdHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIiB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ubGVmdCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5yaWdodClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihhcmd1bWVudCkpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJlY2VpdmVyKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdExpdGVyYWxcIikgcmV0dXJuIGV4cHJlc3Npb24uZWxlbWVudHMuc29tZSgoZWxlbWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihlbGVtZW50KSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExpdGVyYWxcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uZW50cmllcy5zb21lKChlbnRyeSkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihlbnRyeS5rZXkpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LnZhbHVlKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uaW5kZXgpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbikgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmtleSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24uY29sbGVjdGlvbilcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogTWFwcyBvbmUgYWxyZWFkeSB2YWxpZGF0ZWQgc2VtYW50aWMgb3BlcmF0aW9uIHRvIHRhcmdldCBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljQmluYXJ5T3BlcmF0aW9ufSBvcGVyYXRpb24gLSBDbG9zZWQgc2VtYW50aWMgb3BlcmF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRhcmdldCBvcGVyYXRvciBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcob3BlcmF0aW9uLCBsYW5ndWFnZSkge1xuICBjb25zdCBzeW50YXggPSBiaW5hcnlPcGVyYXRpb25TeW50YXhbb3BlcmF0aW9uXVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcInBocFwiICYmIHN5bnRheC5waHApIHJldHVybiBzeW50YXgucGhwXG4gIGlmIChsYW5ndWFnZSA9PSBcInB5dGhvblwiICYmIHN5bnRheC5weXRob24pIHJldHVybiBzeW50YXgucHl0aG9uXG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJwaHBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgJiYgc3ludGF4LnN0cmljdCkgcmV0dXJuIHN5bnRheC5zdHJpY3RcblxuICByZXR1cm4gc3ludGF4LmRlZmF1bHRcbn1cbiJdfQ==
|
|
2617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUN4QyxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUMsK0JBQStCLEVBQUUsd0JBQXdCLEVBQUUsNEJBQTRCLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQTtBQUN4SCxPQUFPLEVBQUMsY0FBYyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlELDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDakQseUJBQXlCLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN6RCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUM5QyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3RELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQzlDLGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsZUFBZSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFDLENBQUM7SUFDOUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUNyRCxXQUFXLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzFELGNBQWMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7Q0FDOUQsQ0FBQyxDQUFBO0FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7QUFDcEcsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNyRixNQUFNLGdCQUFnQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7QUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQ3JGLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUs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VSxDQUFDLENBQUE7SUFDekgsSUFBSSxVQUFVLENBQUMsSUFBSSxJQUFJLGNBQWM7UUFBRSxPQUFPLHdDQUF3QyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUN4RyxJQUFJLFVBQVUsQ0FBQyxJQUFJLElBQUksbUJBQW1CLElBQUksVUFBVSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2xGLE9BQU8sd0NBQXdDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JFLENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQTtBQUNkLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILFNBQVMsdUJBQXVCLENBQUMsU0FBUyxFQUFFLFFBQVE7SUFDbEQsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFL0MsSUFBSSxRQUFRLElBQUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFBO0lBQ3RELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUV0SCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuLi9hcnJheS5qc1wiXG5pbXBvcnQge3ZhbGlkYXRlQmFja2VuZFR5cGVzfSBmcm9tIFwiLi4vc2VtYW50aWMvdmFsaWRhdGUuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyLCB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIsIHZhbGlkYXRlVGFyZ2V0VHlwZUlkZW50aWZpZXJ9IGZyb20gXCIuL2lkZW50aWZpZXJzLmpzXCJcbmltcG9ydCB7ZW1pdFNjYWxhclR5cGUsIGVtaXRTdHJpbmdMaXRlcmFsfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcblxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNVbmFyeU9wZXJhdGlvbiwgc3RyaW5nPj59ICovXG5jb25zdCB1bmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe0Jvb2xlYW5Ob3Q6IFwiIVwiLCBJbnRlZ2VyTmVnYXRlOiBcIi1cIn0pXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmFyeU9wZXJhdGlvbiwgUmVhZG9ubHk8e2RlZmF1bHQ6IHN0cmluZywgcGhwPzogc3RyaW5nLCBweXRob24/OiBzdHJpbmcsIHN0cmljdD86IHN0cmluZ30+Pj59ICovXG5jb25zdCBiaW5hcnlPcGVyYXRpb25TeW50YXggPSBPYmplY3QuZnJlZXplKHtcbiAgQm9vbGVhbkFuZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCImJlwiLCBweXRob246IFwiYW5kXCJ9KSxcbiAgQm9vbGVhbkVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBCb29sZWFuTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSksXG4gIEJvb2xlYW5PcjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCJ8fFwiLCBweXRob246IFwib3JcIn0pLFxuICBJbnRlZ2VyQWRkOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIitcIn0pLFxuICBJbnRlZ2VyRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+XCJ9KSxcbiAgSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+PVwifSksXG4gIEludGVnZXJMZXNzVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8XCJ9KSxcbiAgSW50ZWdlckxlc3NUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8PVwifSksXG4gIEludGVnZXJNdWx0aXBseTogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIqXCJ9KSxcbiAgSW50ZWdlck5vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pLFxuICBJbnRlZ2VyU3VidHJhY3Q6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiLVwifSksXG4gIFN0cmluZ0NvbmNhdDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCIsIHBocDogXCIuXCJ9KSxcbiAgU3RyaW5nRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIFN0cmluZ05vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pXG59KVxuY29uc3QgdGFzazAwNUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiLCBcImRhcnRcIiwgXCJ6aWdcIl0pXG5jb25zdCB0YXNrMDA2TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAwN0xhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMDhMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDA5TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAxMUxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMTJMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDE0TGFuZ3VhZ2VzID0gbmV3IFNldChbXCJwaHBcIiwgXCJydWJ5XCIsIFwiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIiwgXCJqYXZhXCJdKVxuY29uc3QgdGFzazAzMkxhbmd1YWdlcyA9IG5ldyBTZXQoW1wicGhwXCIsIFwicnVieVwiLCBcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCIsIFwiamF2YVwiXSlcbmNvbnN0IHRhc2swMzNMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCB0YXNrMDQ4Q29uZGl0aW9uYWxMYW5ndWFnZXMgPSBuZXcgU2V0KFtcInBocFwiLCBcInJ1YnlcIiwgXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiLCBcImphdmFcIl0pXG5jb25zdCBqYXZhUmVmZXJlbmNlTWV0aG9kSG9va3MgPSBuZXcgU2V0KFtcImNsb25lXCIsIFwiZXF1YWxzXCIsIFwiZmluYWxpemVcIiwgXCJnZXRDbGFzc1wiLCBcImhhc2hDb2RlXCIsIFwibm90aWZ5XCIsIFwibm90aWZ5QWxsXCIsIFwidG9TdHJpbmdcIiwgXCJ3YWl0XCJdKVxuY29uc3QgamF2YXNjcmlwdFJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19kZWZpbmVHZXR0ZXJfX1wiLCBcIl9fZGVmaW5lU2V0dGVyX19cIiwgXCJfX2xvb2t1cEdldHRlcl9fXCIsIFwiX19sb29rdXBTZXR0ZXJfX1wiLCBcIl9fcHJvdG9fX1wiLCBcImNvbnN0cnVjdG9yXCIsXG4gIFwiaGFzT3duUHJvcGVydHlcIiwgXCJpc1Byb3RvdHlwZU9mXCIsIFwicHJvcGVydHlJc0VudW1lcmFibGVcIiwgXCJ0b0xvY2FsZVN0cmluZ1wiLCBcInRvU3RyaW5nXCIsIFwidmFsdWVPZlwiXG5dKVxuY29uc3QgcnVieVJlZmVyZW5jZU1ldGhvZEhvb2tzID0gbmV3IFNldChbXG4gIFwiX19zZW5kX19cIiwgXCJleHRlbmRcIiwgXCJmZXRjaFwiLCBcImluc3RhbmNlX2V2YWxcIiwgXCJpbnN0YW5jZV9leGVjXCIsIFwibWV0aG9kXCIsIFwibWV0aG9kX21pc3NpbmdcIiwgXCJwdWJsaWNfc2VuZFwiLFxuICBcInJlc3BvbmRfdG9fbWlzc2luZz9cIiwgXCJzZW5kXCIsIFwic2luZ2xldG9uX2NsYXNzXCIsIFwic2l6ZVwiXG5dKVxuY29uc3QgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcyA9IG5ldyBTZXQoW1xuICBcImNsb25lKClcIiwgXCJlcXVhbHMoT2JqZWN0KVwiLCBcImZpbmFsaXplKClcIiwgXCJnZXRDbGFzcygpXCIsIFwiaGFzaENvZGUoKVwiLCBcIm5vdGlmeSgpXCIsIFwibm90aWZ5QWxsKClcIiwgXCJ0b1N0cmluZygpXCIsXG4gIFwid2FpdCgpXCIsIFwid2FpdChsb25nKVwiLCBcIndhaXQobG9uZyxpbnQpXCJcbl0pXG5cbi8qKlxuICogQ2hlY2tzIHRoZSBpbnRlbnRpb25hbGx5IG5hcnJvdyBiYWNrZW5kIGNvbnRyYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHt7ZXh0ZXJuYWxEZWNsYXJhdGlvbklkcz86IFNldDxzdHJpbmc+LCBwcm9ncmFtPzogYm9vbGVhbiwgdmlzaWJsZUZ1bmN0aW9ucz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZ1bmN0aW9uRGVjbGFyYXRpb24+LCB2aXNpYmxlUmVjb3Jkcz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uPiwgdmlzaWJsZUNsYXNzZXM/OiBNYXA8c3RyaW5nLCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uPiwgdmlzaWJsZUVycm9ycz86IE1hcDxzdHJpbmcsIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb24+LCB2aXNpYmxlQ2FsbEVmZmVjdHM/OiBNYXA8c3RyaW5nLCBTZXQ8c3RyaW5nPj59fSBbb3B0aW9uc10gLSBSZXNvbHZlZCBwcm9ncmFtIHZhbGlkYXRpb24gY29udGV4dC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgbGFuZ3VhZ2UsIG9wdGlvbnMgPSB7fSkge1xuICBpZiAoIW1vZHVsZSB8fCB0eXBlb2YgbW9kdWxlICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShtb2R1bGUpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgbW9kdWxlXCIsIHVuZGVmaW5lZClcbiAgfVxuICBpZiAobW9kdWxlLmtpbmQgIT0gXCJNb2R1bGVcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBtb2R1bGUua2luZCwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkobW9kdWxlLmZ1bmN0aW9ucykgfHwgIW1vZHVsZS5lbnRyeVBvaW50IHx8IHR5cGVvZiBtb2R1bGUuZW50cnlQb2ludCAhPSBcIm9iamVjdFwiIHx8XG4gICAgbW9kdWxlLmVudHJ5UG9pbnQua2luZCAhPSBcIkVudHJ5UG9pbnRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtb2R1bGUgbWVtYmVyc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIGNvbnN0IGRlY2xhcmVkUmVjb3JkcyA9IG1vZHVsZS5yZWNvcmRzXG4gIGNvbnN0IHJlY29yZHMgPSBkZWNsYXJlZFJlY29yZHMgPT09IHVuZGVmaW5lZCA/IFtdIDogZGVjbGFyZWRSZWNvcmRzXG4gIGNvbnN0IGRlY2xhcmVkQ2xhc3NlcyA9IG1vZHVsZS5jbGFzc2VzXG4gIGNvbnN0IGNsYXNzZXMgPSBkZWNsYXJlZENsYXNzZXMgPT09IHVuZGVmaW5lZCA/IFtdIDogZGVjbGFyZWRDbGFzc2VzXG4gIGNvbnN0IGRlY2xhcmVkRXJyb3JzID0gbW9kdWxlLmVycm9yc1xuICBjb25zdCBlcnJvcnMgPSBkZWNsYXJlZEVycm9ycyA9PT0gdW5kZWZpbmVkID8gW10gOiBkZWNsYXJlZEVycm9yc1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShyZWNvcmRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWNvcmQgZGVjbGFyYXRpb25zXCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNsYXNzZXMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlZmVyZW5jZSBjbGFzcyBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoZXJyb3JzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobW9kdWxlLmZ1bmN0aW9ucy5sZW5ndGggPT0gMCAmJiAoIW9wdGlvbnMucHJvZ3JhbSB8fFxuICAgIHJlY29yZHMubGVuZ3RoID09IDAgJiYgY2xhc3Nlcy5sZW5ndGggPT0gMCAmJiBlcnJvcnMubGVuZ3RoID09IDAgJiYgbW9kdWxlLmVudHJ5UG9pbnQuYm9keT8uc3RhdGVtZW50cz8ubGVuZ3RoID09IDApKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1vZHVsZSB3aXRob3V0IGRlY2xhcmF0aW9ucyBvciBleGVjdXRhYmxlIGVudHJ5XCIsIG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIXRhc2swMTJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBtb2R1bGVIYXNUeXBlUGFyYW1ldGVycyhtb2R1bGUpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDEyIHR5cGUgcGFyYW1ldGVycyBhbmQgZ2VuZXJpYyBkZWNsYXJhdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB9XG4gIGlmIChyZWNvcmRzLmxlbmd0aCA+IDAgJiYgIXRhc2swMDlMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOSBjbG9zZWQgcmVjb3Jkc1wiLCByZWNvcmRzWzBdPy5sb2NhdGlvbiA/PyBtb2R1bGUubG9jYXRpb24pXG4gIH1cbiAgaWYgKGNsYXNzZXMubGVuZ3RoID4gMCAmJiAhdGFzazAzM0xhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMzIHJlZmVyZW5jZSBjbGFzc2VzLCBtZXRob2RzLCBhbmQgY29uc3RydWN0b3JzXCIsIGNsYXNzZXNbMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBpZiAoIXRhc2swMTFMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0VHlwZWRFcnJvcnMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDMyTGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbmRpdGlvbkNvbnRyb2xsZWRMb29wcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBpZiAoIXRhc2swMTRMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgcmVqZWN0T3JkZXJlZE1hcENhcGFiaWxpdHkobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVSZWNvcmRUYXJnZXRzKHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NUYXJnZXRzKGNsYXNzZXMsIHJlY29yZHMsIGVycm9ycywgbW9kdWxlLmZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdEl0ZXJhdGlvblN0YXRlbWVudHMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA3TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdE9wdGlvbmFsVHlwZXMobW9kdWxlLCBsYW5ndWFnZSlcbiAgaWYgKCF0YXNrMDA2TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHJlamVjdENvbGxlY3Rpb25UeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBsb29wT3duZXJzID0gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSlcblxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIGNsYXNzZXMpIHtcbiAgICB2YWxpZGF0ZUJsb2NrKGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLmJvZHksIGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5sb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIG93bmVyczogbG9vcE93bmVyc30sIG5ldyBTZXQoKSwgb3B0aW9ucy5leHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2sobWV0aG9kLmJvZHksIGxhbmd1YWdlLCBtZXRob2QubG9jYXRpb24sXG4gICAgICAgIHthY3RpdmU6IFtdLCBvd25lcjogbWV0aG9kLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZUJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlLCBtb2R1bGUuZW50cnlQb2ludC5sb2NhdGlvbixcbiAgICB7YWN0aXZlOiBbXSwgb3duZXI6IG1vZHVsZS5lbnRyeVBvaW50LCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgY29uc3QgZGVjbGFyYXRpb25JZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgZGVjbGFyYXRpb25OYW1lcyA9IG5ldyBTZXQoKVxuICBjb25zdCB0YXJnZXREZWNsYXJhdGlvbk5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBmdW5jdGlvbkRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWZ1bmN0aW9uRGVjbGFyYXRpb24gfHwgdHlwZW9mIGZ1bmN0aW9uRGVjbGFyYXRpb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGZ1bmN0aW9uRGVjbGFyYXRpb24pIHx8XG4gICAgICBmdW5jdGlvbkRlY2xhcmF0aW9uLmtpbmQgIT0gXCJGdW5jdGlvbkRlY2xhcmF0aW9uXCIgfHwgIUFycmF5LmlzQXJyYXkoZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBmdW5jdGlvbiBkZWNsYXJhdGlvblwiLCBtb2R1bGUubG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbk5hbWVzLmhhcyhmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgZnVuY3Rpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbk5hbWVzLmFkZChmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUpXG4gICAgY29uc3QgdGFyZ2V0RGVjbGFyYXRpb25OYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIlxuICAgICAgPyBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWUucmVwbGFjZSgvW0EtWl0vZ3UsIChjaGFyYWN0ZXIpID0+IGNoYXJhY3Rlci50b0xvd2VyQ2FzZSgpKVxuICAgICAgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLm5hbWVcblxuICAgIGlmICh0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmhhcyh0YXJnZXREZWNsYXJhdGlvbk5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgZnVuY3Rpb24tbmFtZSBjb2xsaXNpb24gJyR7ZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lfSdgLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB0YXJnZXREZWNsYXJhdGlvbk5hbWVzLmFkZCh0YXJnZXREZWNsYXJhdGlvbk5hbWUpXG4gICAgaWYgKHR5cGVvZiBmdW5jdGlvbkRlY2xhcmF0aW9uLmlkICE9IFwic3RyaW5nXCIgfHwgIS9eKD86W2Etel1bYS16MC05Ll8tXSojKT9mdW5jdGlvbjpbMC05XSskL3UudGVzdChmdW5jdGlvbkRlY2xhcmF0aW9uLmlkKSB8fFxuICAgICAgZGVjbGFyYXRpb25JZHMuaGFzKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgZnVuY3Rpb24gZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgZGVjbGFyYXRpb25JZHMuYWRkKGZ1bmN0aW9uRGVjbGFyYXRpb24uaWQpXG4gICAgdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhmdW5jdGlvbkRlY2xhcmF0aW9uLCBsYW5ndWFnZSlcblxuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpICYmIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swMDVMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSAmJiBmdW5jdGlvbkRlY2xhcmF0aW9uLnJldHVyblR5cGU/LmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIgJiZcbiAgICAgIGZ1bmN0aW9uRGVjbGFyYXRpb24ucmV0dXJuVHlwZS5uYW1lID09IFwidm9pZFwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBmdW5jdGlvbiByZXR1cm5cIiwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVCbG9jayhmdW5jdGlvbkRlY2xhcmF0aW9uLmJvZHksIGxhbmd1YWdlLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uLFxuICAgICAge2FjdGl2ZTogW10sIG93bmVyOiBmdW5jdGlvbkRlY2xhcmF0aW9uLCBvd25lcnM6IGxvb3BPd25lcnN9LCBuZXcgU2V0KCksIG9wdGlvbnMuZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKCFwYXJhbWV0ZXIgfHwgdHlwZW9mIHBhcmFtZXRlciAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocGFyYW1ldGVyKSB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcGFyYW1ldGVyXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgXCJwYXJhbWV0ZXJcIiwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICB2YWxpZGF0ZUVycm9yVGFyZ2V0cyhlcnJvcnMsIHJlY29yZHMsIG1vZHVsZS5mdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZUJhY2tlbmRUeXBlcyhtb2R1bGUsIGxhbmd1YWdlLCB7XG4gICAgY2FsbEVmZmVjdHM6IG9wdGlvbnMudmlzaWJsZUNhbGxFZmZlY3RzLFxuICAgIGNsYXNzZXM6IG9wdGlvbnMudmlzaWJsZUNsYXNzZXMsXG4gICAgZXJyb3JzOiBvcHRpb25zLnZpc2libGVFcnJvcnMsXG4gICAgZnVuY3Rpb25zOiBvcHRpb25zLnZpc2libGVGdW5jdGlvbnMsXG4gICAgcmVjb3Jkczogb3B0aW9ucy52aXNpYmxlUmVjb3Jkc1xuICB9KVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMTQgSVIgdHJhbnNhY3Rpb25hbGx5IGJlZm9yZSBhIG5vbi1jb2hvcnQgdGFyZ2V0IGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdE9yZGVyZWRNYXBDYXBhYmlsaXR5KG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgY29uc3Qgbm9kZSA9IGZpbmRPcmRlcmVkTWFwTm9kZShtb2R1bGUpXG5cbiAgaWYgKG5vZGUpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgZGlhZ25vc3RpY0xvY2F0aW9uKG5vZGUubG9jYXRpb24sIG1vZHVsZS5sb2NhdGlvbikpXG59XG5cbi8qKlxuICogRmluZHMgdGhlIGZpcnN0IGRpc3RpbmN0IG9yZGVyZWQtbWFwIHR5cGUsIGxpdGVyYWwsIG9yIGxvb3AgaW4gcGFyc2VyLW5ldXRyYWwgSVIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHN1YnRyZWUuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBDeWNsZSBwcm90ZWN0aW9uLlxuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkfSBGaXJzdCBUYXNrIDAxNCBub2RlLlxuICovXG5mdW5jdGlvbiBmaW5kT3JkZXJlZE1hcE5vZGUodmFsdWUsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBzZWVuLmhhcyh2YWx1ZSkpIHJldHVybiB1bmRlZmluZWRcbiAgc2Vlbi5hZGQodmFsdWUpXG4gIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAodmFsdWUpXG5cbiAgICBpZiAoW1wiT3JkZXJlZE1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwTGl0ZXJhbFwiLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKGNhbmRpZGF0ZS5raW5kKSkpIHJldHVybiBjYW5kaWRhdGVcbiAgfVxuICBmb3IgKGNvbnN0IGNoaWxkIG9mIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBPYmplY3QudmFsdWVzKHZhbHVlKSkge1xuICAgIGNvbnN0IGZvdW5kID0gZmluZE9yZGVyZWRNYXBOb2RlKGNoaWxkLCBzZWVuKVxuXG4gICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmRcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBSZWplY3RzIHR5cGVkIGVycm9ycyBmb3IgYSB0YXJnZXQgb3V0c2lkZSB0aGUgVGFzayAwMTEgY29ob3J0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RUeXBlZEVycm9ycygvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSAqLyBtb2R1bGUsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSkge1xuICBpZiAoKG1vZHVsZS5lcnJvcnMgPz8gW10pLmxlbmd0aCA+IDApIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTEgdHlwZWQgZXJyb3JzIGFuZCBoYW5kbGluZ1wiLCBtb2R1bGUuZXJyb3JzPy5bMF0/LmxvY2F0aW9uID8/IG1vZHVsZS5sb2NhdGlvbilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHJlamVjdFR5cGVkRXJyb3JCbG9jayhkZWNsYXJhdGlvbj8uYm9keSwgbGFuZ3VhZ2UpXG4gIHJlamVjdFR5cGVkRXJyb3JCbG9jayhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBGaW5kcyB0eXBlZC1lcnJvciBzdGF0ZW1lbnRzIHdpdGhvdXQgZGVzY2VuZGluZyB0aHJvdWdoIG1hbGZvcm1lZCBvciBjeWNsaWMgYmxvY2tzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgYmxvY2tzLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdFR5cGVkRXJyb3JCbG9jaygvKiogQHR5cGUge3Vua25vd259ICovIGJsb2NrLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gKi8gbGFuZ3VhZ2UsXG4gIC8qKiBAdHlwZSB7U2V0PG9iamVjdD59ICovIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCBzZWVuLmhhcyhibG9jaykpIHJldHVyblxuICBzZWVuLmFkZChibG9jaylcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIilcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBpZiAoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIikgPT0gXCJSYWlzZVN0YXRlbWVudFwiIHx8IFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxMSB0eXBlZCBlcnJvcnMgYW5kIGhhbmRsaW5nXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKSlcbiAgICB9XG4gICAgaWYgKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0VHlwZWRFcnJvckJsb2NrKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdFR5cGVkRXJyb3JCbG9jayhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJraW5kXCIpKSkpIHtcbiAgICAgIHJlamVjdFR5cGVkRXJyb3JCbG9jayhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRhcmdldC12aXNpYmxlIG5vbWluYWwgZXJyb3IgZGVjbGFyYXRpb25zIGJlZm9yZSBlbWlzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXJyb3JEZWNsYXJhdGlvbltdfSBlcnJvcnMgLSBFcnJvciBkZWNsYXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119IHJlY29yZHMgLSBSZWNvcmQgZGVjbGFyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG1vZHVsZUxvY2F0aW9uIC0gTW9kdWxlIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRXJyb3JUYXJnZXRzKFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb25bXX0gKi8gZXJyb3JzLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119ICovIHJlY29yZHMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbltdfSAqLyBmdW5jdGlvbnMsXG4gIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSAqLyBsYW5ndWFnZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gKi8gbW9kdWxlTG9jYXRpb25cbikge1xuICBjb25zdCBpZHMgPSBuZXcgU2V0KClcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0KFsuLi5yZWNvcmRzLCAuLi5mdW5jdGlvbnNdLm1hcCgoe25hbWV9KSA9PiBsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSkpXG4gIGNvbnN0IGZvcmJpZGRlbiA9IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gbmV3IFNldChbXCJFcnJvclwiLCBcIkFnZ3JlZ2F0ZUVycm9yXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5ldyBTZXQoW1wiVGhyb3dhYmxlXCIsIFwiRXhjZXB0aW9uXCIsIFwiUnVudGltZUV4Y2VwdGlvblwiLCBcIkVycm9yXCJdKSA6XG4gICAgICBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IG5ldyBTZXQoW1wiRXhjZXB0aW9uXCIsIFwiU3RhbmRhcmRFcnJvclwiLCBcIlNjcmlwdEVycm9yXCIsIFwiU3lzdGVtRXhpdFwiXSkgOlxuICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiVGhyb3dhYmxlXCIsIFwiRXhjZXB0aW9uXCIsIFwiUnVudGltZUV4Y2VwdGlvblwiLCBcIkVycm9yXCJdKSA6IG5ldyBTZXQoKVxuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlcnJvcnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSBlcnJvcnNbaW5kZXhdXG4gICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oZGVjbGFyYXRpb24/LmxvY2F0aW9uLCBtb2R1bGVMb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBkZWNsYXJhdGlvbiAmJiB0eXBlb2YgZGVjbGFyYXRpb24gPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbilcbiAgICAgID8gT2JqZWN0LmtleXMoZGVjbGFyYXRpb24pLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikgfHxcbiAgICAgIGRlY2xhcmF0aW9uLmtpbmQgIT0gXCJFcnJvckRlY2xhcmF0aW9uXCIgfHwgZmllbGRzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXJyb3IgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBtb2R1bGVMb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICBpZiAoKGRlY2xhcmF0aW9uLmlkICE9IGBlcnJvcjoke2luZGV4fWAgJiZcbiAgICAgICFuZXcgUmVnRXhwKGBeW2Etel1bYS16MC05Ll8tXSojZXJyb3I6JHtpbmRleH0kYCwgXCJ1XCIpLnRlc3QoZGVjbGFyYXRpb24uaWQgPz8gXCJcIikpIHx8IGlkcy5oYXMoZGVjbGFyYXRpb24uaWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgZXJyb3IgZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKG5hbWVzLmhhcyhub3JtYWxpemVkKSB8fCBmb3JiaWRkZW4uaGFzKGRlY2xhcmF0aW9uLm5hbWUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBlcnJvciBkZWNsYXJhdGlvbiBjb2xsaXNpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nYCwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGlkcy5hZGQoZGVjbGFyYXRpb24uaWQpXG4gICAgbmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgZXZlcnkgbm9taW5hbCByZWNvcmQgaWRlbnRpZmllciwgaWRlbnRpdHksIGZpZWxkLCBhbmQgdGFyZ2V0IGNvbGxpc2lvbiBiZWZvcmUgb3V0cHV0IGFsbG9jYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlY29yZERlY2xhcmF0aW9uW119IHJlY29yZHMgLSBDYW5kaWRhdGUgcmVjb3Jkcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbltdfSBmdW5jdGlvbnMgLSBDYW5kaWRhdGUgZnVuY3Rpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbW9kdWxlTG9jYXRpb24gLSBNb2R1bGUgZmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWNvcmRUYXJnZXRzKHJlY29yZHMsIGZ1bmN0aW9ucywgbGFuZ3VhZ2UsIG1vZHVsZUxvY2F0aW9uKSB7XG4gIGNvbnN0IGRlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpXG4gIGNvbnN0IHRhcmdldE5hbWVzID0gbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBmdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IG5hbWUgPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJuYW1lXCIpXG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT0gXCJzdHJpbmdcIikgY29udGludWVcbiAgICB0YXJnZXROYW1lcy5hZGQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IG5hbWUudG9Mb3dlckNhc2UoKSA6IG5hbWUpXG4gIH1cblxuICBmb3IgKGxldCByZWNvcmRJbmRleCA9IDA7IHJlY29yZEluZGV4IDwgcmVjb3Jkcy5sZW5ndGg7IHJlY29yZEluZGV4ICs9IDEpIHtcbiAgICBjb25zdCByZWNvcmQgPSByZWNvcmRzW3JlY29yZEluZGV4XVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKHJlY29yZD8ubG9jYXRpb24sIG1vZHVsZUxvY2F0aW9uKVxuICAgIGNvbnN0IHJlY29yZEtleXMgPSByZWNvcmQgJiYgdHlwZW9mIHJlY29yZCA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHJlY29yZClcbiAgICAgID8gT2JqZWN0LmtleXMocmVjb3JkKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICAgIDogXCJcIlxuXG4gICAgaWYgKCFyZWNvcmQgfHwgdHlwZW9mIHJlY29yZCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocmVjb3JkKSB8fCByZWNvcmQua2luZCAhPSBcIlJlY29yZERlY2xhcmF0aW9uXCIgfHxcbiAgICAgICFbXCJmaWVsZHMsaWQsa2luZCxsb2NhdGlvbixuYW1lXCIsIFwiZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbmFtZSx0eXBlUGFyYW1ldGVyc1wiXS5pbmNsdWRlcyhyZWNvcmRLZXlzKSB8fCAhaXNEZW5zZUFycmF5KHJlY29yZC5maWVsZHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHJlY29yZCBkZWNsYXJhdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmVjb3JkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWNvcmQgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgbW9kdWxlTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRUeXBlSWRlbnRpZmllcihsYW5ndWFnZSwgcmVjb3JkLm5hbWUsIHJlY29yZC5sb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHJlY29yZC5pZCAhPSBcInN0cmluZ1wiIHx8ICFuZXcgUmVnRXhwKGBeKD86W2Etel1bYS16MC05Ll8tXSojKT9yZWNvcmQ6JHtyZWNvcmRJbmRleH0kYCwgXCJ1XCIpLnRlc3QocmVjb3JkLmlkKSB8fFxuICAgICAgZGVjbGFyYXRpb25JZHMuaGFzKHJlY29yZC5pZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCByZWNvcmQgZGVjbGFyYXRpb24gaWRlbnRpdHlcIiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIH1cbiAgICBkZWNsYXJhdGlvbklkcy5hZGQocmVjb3JkLmlkKVxuICAgIHZhbGlkYXRlVHlwZVBhcmFtZXRlclRhcmdldHMocmVjb3JkLCBsYW5ndWFnZSlcbiAgICBjb25zdCB0YXJnZXROYW1lID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IHJlY29yZC5uYW1lLnRvTG93ZXJDYXNlKCkgOiByZWNvcmQubmFtZVxuXG4gICAgaWYgKHRhcmdldE5hbWVzLmhhcyh0YXJnZXROYW1lKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVjb3JkIGRlY2xhcmF0aW9uIGNvbGxpc2lvbiAnJHtyZWNvcmQubmFtZX0nYCwgcmVjb3JkLmxvY2F0aW9uKVxuICAgIHRhcmdldE5hbWVzLmFkZCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAobGV0IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgcmVjb3JkLmZpZWxkcy5sZW5ndGg7IGZpZWxkSW5kZXggKz0gMSkge1xuICAgICAgY29uc3QgZmllbGQgPSByZWNvcmQuZmllbGRzW2ZpZWxkSW5kZXhdXG4gICAgICBjb25zdCBmaWVsZExvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGZpZWxkPy5sb2NhdGlvbiwgcmVjb3JkLmxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGRLZXlzID0gZmllbGQgJiYgdHlwZW9mIGZpZWxkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgID8gT2JqZWN0LmtleXMoZmllbGQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgICAgICA6IFwiXCJcblxuICAgICAgaWYgKCFmaWVsZCB8fCB0eXBlb2YgZmllbGQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGZpZWxkKSB8fCBmaWVsZC5raW5kICE9IFwiUmVjb3JkRmllbGRcIiB8fFxuICAgICAgICBmaWVsZEtleXMgIT0gXCJpZCxraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVjb3JkIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihmaWVsZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwicmVjb3JkIGZpZWxkIGxvY2F0aW9uXCIsIHJlY29yZC5sb2NhdGlvbilcbiAgICAgIGlmIChmaWVsZC5pZCAhPSBgJHtyZWNvcmQuaWR9OmZpZWxkOiR7ZmllbGRJbmRleH1gKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCByZWNvcmQgZmllbGQgaWRlbnRpdHlcIiwgZmllbGQubG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGZpZWxkLm5hbWUsIFwicmVjb3JkIGZpZWxkXCIsIGZpZWxkLmxvY2F0aW9uKVxuICAgICAgY29uc3QgY29sbGlzaW9uID0gbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgJiYgW1wiY29uc3RydWN0b3JcIiwgXCJwcm90b3R5cGVcIiwgXCJfX3Byb3RvX19cIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgW1wiY29uc3RydWN0b3JcIiwgXCJwcm90b3R5cGVcIiwgXCJfX3Byb3RvX19cIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBmaWVsZC5uYW1lLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChcIl9fXCIpIHx8XG4gICAgICAgIGxhbmd1YWdlID09IFwicnVieVwiICYmIFtcImluaXRpYWxpemVcIiwgXCJmcmVlemVcIiwgXCJzZW5kXCIsIFwicHVibGljX3NlbmRcIiwgXCJtZXRob2RcIiwgXCJzaW5nbGV0b25fY2xhc3NcIl0uaW5jbHVkZXMoZmllbGQubmFtZSkgfHxcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgamF2YU9iamVjdEluc3RhbmNlTWV0aG9kU2lnbmF0dXJlcy5oYXMoYCR7ZmllbGQubmFtZX0oKWApXG5cbiAgICAgIGlmIChjb2xsaXNpb24pIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHJlY29yZCBmaWVsZCBjb2xsaXNpb24gJyR7ZmllbGQubmFtZX0nYCwgZmllbGQubG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKSA6IGZpZWxkLm5hbWVcblxuICAgICAgaWYgKGZpZWxkTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IHJlY29yZCBmaWVsZCAnJHtmaWVsZC5uYW1lfSdgLCBmaWVsZC5sb2NhdGlvbilcbiAgICAgIGZpZWxkTmFtZXMuYWRkKG5vcm1hbGl6ZWQpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBleGFjdCB0YXJnZXQtdmlzaWJsZSBzaGFwZSBvZiBldmVyeSByZWZlcmVuY2UgY2xhc3MgYmVmb3JlIG91dHB1dCBhbGxvY2F0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5DbGFzc0RlY2xhcmF0aW9uW119IGNsYXNzZXMgLSBDYW5kaWRhdGUgY2xhc3Nlcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb25bXX0gcmVjb3JkcyAtIEV4aXN0aW5nIHJlY29yZHMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkVycm9yRGVjbGFyYXRpb25bXX0gZXJyb3JzIC0gRXhpc3RpbmcgdHlwZWQgZXJyb3JzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uW119IGZ1bmN0aW9ucyAtIEV4aXN0aW5nIGZ1bmN0aW9ucy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG1vZHVsZUxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1RhcmdldHMoY2xhc3NlcywgcmVjb3JkcywgZXJyb3JzLCBmdW5jdGlvbnMsIGxhbmd1YWdlLCBtb2R1bGVMb2NhdGlvbikge1xuICBjb25zdCB0YXJnZXROYW1lcyA9IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgWy4uLnJlY29yZHMsIC4uLmVycm9ycywgLi4uZnVuY3Rpb25zXSkge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbmFtZSA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcIm5hbWVcIilcblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSBjb250aW51ZVxuICAgIHRhcmdldE5hbWVzLmFkZChsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZSlcbiAgfVxuXG4gIGZvciAobGV0IGNsYXNzSW5kZXggPSAwOyBjbGFzc0luZGV4IDwgY2xhc3Nlcy5sZW5ndGg7IGNsYXNzSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGRlY2xhcmF0aW9uID0gY2xhc3Nlc1tjbGFzc0luZGV4XVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKGRlY2xhcmF0aW9uPy5sb2NhdGlvbiwgbW9kdWxlTG9jYXRpb24pXG4gICAgY29uc3Qga2V5cyA9IGRlY2xhcmF0aW9uICYmIHR5cGVvZiBkZWNsYXJhdGlvbiA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGRlY2xhcmF0aW9uKVxuICAgICAgPyBPYmplY3Qua2V5cyhkZWNsYXJhdGlvbikuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuXG4gICAgaWYgKCFkZWNsYXJhdGlvbiB8fCBkZWNsYXJhdGlvbi5raW5kICE9IFwiQ2xhc3NEZWNsYXJhdGlvblwiIHx8XG4gICAgICAhW1wiY29uc3RydWN0b3IsZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbWV0aG9kcyxuYW1lXCIsIFwiY29uc3RydWN0b3IsZmllbGRzLGlkLGtpbmQsbG9jYXRpb24sbWV0aG9kcyxuYW1lLG93bmVyc2hpcFwiXS5pbmNsdWRlcyhrZXlzKSB8fFxuICAgICAgIWlzRGVuc2VBcnJheShkZWNsYXJhdGlvbi5maWVsZHMpIHx8IGRlY2xhcmF0aW9uLmZpZWxkcy5sZW5ndGggPT0gMCB8fCAhaXNEZW5zZUFycmF5KGRlY2xhcmF0aW9uLm1ldGhvZHMpIHx8XG4gICAgICAhbmV3IFJlZ0V4cChgXig/OlthLXpdW2EtejAtOS5fLV0qIyk/Y2xhc3M6JHtjbGFzc0luZGV4fSRgLCBcInVcIikudGVzdChTdHJpbmcoZGVjbGFyYXRpb24uaWQpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCByZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChkZWNsYXJhdGlvbi5vd25lcnNoaXAgIT09IHVuZGVmaW5lZCAmJiBkZWNsYXJhdGlvbi5vd25lcnNoaXA/LmtpbmQgIT0gXCJvcmRpbmFyeVwiICYmXG4gICAgICAoZGVjbGFyYXRpb24ub3duZXJzaGlwPy5raW5kICE9IFwib3duZWRSZXNvdXJjZVwiIHx8IHR5cGVvZiBkZWNsYXJhdGlvbi5vd25lcnNoaXAuZmllbGRJZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICB0eXBlb2YgZGVjbGFyYXRpb24ub3duZXJzaGlwLnJlc291cmNlSWQgIT0gXCJzdHJpbmdcIikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVmZXJlbmNlIGNsYXNzIHJlc291cmNlIG93bmVyc2hpcFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgZGVjbGFyYXRpb25Mb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGRlY2xhcmF0aW9uLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJyZWZlcmVuY2UgY2xhc3MgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgbW9kdWxlTG9jYXRpb24pXG5cbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIGNvbnN0IHRhcmdldE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gZGVjbGFyYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpIDogZGVjbGFyYXRpb24ubmFtZVxuXG4gICAgaWYgKHRhcmdldE5hbWVzLmhhcyh0YXJnZXROYW1lKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVmZXJlbmNlIGNsYXNzIGNvbGxpc2lvbiAnJHtkZWNsYXJhdGlvbi5uYW1lfSdgLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgIHRhcmdldE5hbWVzLmFkZCh0YXJnZXROYW1lKVxuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBuZXcgU2V0KClcblxuICAgIGZvciAobGV0IGZpZWxkSW5kZXggPSAwOyBmaWVsZEluZGV4IDwgZGVjbGFyYXRpb24uZmllbGRzLmxlbmd0aDsgZmllbGRJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBmaWVsZCA9IGRlY2xhcmF0aW9uLmZpZWxkc1tmaWVsZEluZGV4XVxuICAgICAgY29uc3QgZmllbGRMb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihmaWVsZD8ubG9jYXRpb24sIGxvY2F0aW9uKVxuICAgICAgY29uc3QgZmllbGRLZXlzID0gZmllbGQgJiYgdHlwZW9mIGZpZWxkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZmllbGQpXG4gICAgICAgID8gT2JqZWN0LmtleXMoZmllbGQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgICAgaWYgKCFmaWVsZCB8fCBmaWVsZC5raW5kICE9IFwiUHJpdmF0ZUZpZWxkXCIgfHwgZmllbGRLZXlzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lLHR5cGVcIiB8fFxuICAgICAgICBmaWVsZC5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06ZmllbGQ6JHtmaWVsZEluZGV4fWApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBwcml2YXRlIGZpZWxkXCIsIGZpZWxkTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCBleGFjdEZpZWxkTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihmaWVsZC5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwicHJpdmF0ZSBmaWVsZCBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuXG4gICAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGZpZWxkLm5hbWUsIFwicHJpdmF0ZSBmaWVsZFwiLCBleGFjdEZpZWxkTG9jYXRpb24pXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGZpZWxkLm5hbWUudG9Mb3dlckNhc2UoKSA6IGZpZWxkLm5hbWVcblxuICAgICAgaWYgKGZpZWxkTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBkdXBsaWNhdGUgdGFyZ2V0IHByaXZhdGUgZmllbGQgJyR7ZmllbGQubmFtZX0nYCwgZXhhY3RGaWVsZExvY2F0aW9uKVxuICAgICAgZmllbGROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICB9XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBkZWNsYXJhdGlvbi5jb25zdHJ1Y3RvclxuICAgIGNvbnN0IGNvbnN0cnVjdG9yTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oY29uc3RydWN0b3I/LmxvY2F0aW9uLCBsb2NhdGlvbilcbiAgICBjb25zdCBjb25zdHJ1Y3RvcktleXMgPSBjb25zdHJ1Y3RvciAmJiB0eXBlb2YgY29uc3RydWN0b3IgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjb25zdHJ1Y3RvcilcbiAgICAgID8gT2JqZWN0LmtleXMoY29uc3RydWN0b3IpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmICghY29uc3RydWN0b3IgfHwgY29uc3RydWN0b3Iua2luZCAhPSBcIkNvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiB8fFxuICAgICAgIVtcImJvZHksaWQsa2luZCxsb2NhdGlvbixwYXJhbWV0ZXJzXCIsIFwiYm9keSxlZmZlY3RzLGZhaWx1cmVJZHMsaWQsa2luZCxsb2NhdGlvbixwYXJhbWV0ZXJzXCJdLmluY2x1ZGVzKGNvbnN0cnVjdG9yS2V5cykgfHxcbiAgICAgIGNvbnN0cnVjdG9yLmlkICE9IGAke2RlY2xhcmF0aW9uLmlkfTpjb25zdHJ1Y3RvcmAgfHwgIWlzRGVuc2VBcnJheShjb25zdHJ1Y3Rvci5wYXJhbWV0ZXJzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvblwiLCBjb25zdHJ1Y3RvckxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleGFjdENvbnN0cnVjdG9yTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihjb25zdHJ1Y3Rvci5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY29uc3RydWN0b3IgZGVjbGFyYXRpb24gbG9jYXRpb25cIiwgZGVjbGFyYXRpb25Mb2NhdGlvbilcblxuICAgIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NQYXJhbWV0ZXJzKGNvbnN0cnVjdG9yLnBhcmFtZXRlcnMsIFwiY29uc3RydWN0b3JcIiwgbGFuZ3VhZ2UsIGV4YWN0Q29uc3RydWN0b3JMb2NhdGlvbilcbiAgICBjb25zdCBtZXRob2ROYW1lcyA9IG5ldyBTZXQoKVxuXG4gICAgZm9yIChsZXQgbWV0aG9kSW5kZXggPSAwOyBtZXRob2RJbmRleCA8IGRlY2xhcmF0aW9uLm1ldGhvZHMubGVuZ3RoOyBtZXRob2RJbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBtZXRob2QgPSBkZWNsYXJhdGlvbi5tZXRob2RzW21ldGhvZEluZGV4XVxuICAgICAgY29uc3QgbWV0aG9kTG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24obWV0aG9kPy5sb2NhdGlvbiwgbG9jYXRpb24pXG4gICAgICBjb25zdCBtZXRob2RLZXlzID0gbWV0aG9kICYmIHR5cGVvZiBtZXRob2QgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShtZXRob2QpXG4gICAgICAgID8gT2JqZWN0LmtleXMobWV0aG9kKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICAgIGlmICghbWV0aG9kIHx8IG1ldGhvZC5raW5kICE9IFwiTWV0aG9kRGVjbGFyYXRpb25cIiB8fFxuICAgICAgICAhW1wiYm9keSxpZCxraW5kLGxvY2F0aW9uLG5hbWUscGFyYW1ldGVycyxyZXR1cm5UeXBlXCIsXG4gICAgICAgICAgXCJib2R5LGVmZmVjdHMsZmFpbHVyZUlkcyxpZCxraW5kLGxvY2F0aW9uLG5hbWUscGFyYW1ldGVycyxyZXR1cm5UeXBlXCJdLmluY2x1ZGVzKG1ldGhvZEtleXMpIHx8XG4gICAgICAgIG1ldGhvZC5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06bWV0aG9kOiR7bWV0aG9kSW5kZXh9YCB8fCAhaXNEZW5zZUFycmF5KG1ldGhvZC5wYXJhbWV0ZXJzKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG1ldGhvZCBkZWNsYXJhdGlvblwiLCBtZXRob2RMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4YWN0TWV0aG9kTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihtZXRob2QubG9jYXRpb24sIGxhbmd1YWdlLCBcIm1ldGhvZCBkZWNsYXJhdGlvbiBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbkxvY2F0aW9uKVxuICAgICAgY29uc3QgbGlmZWN5Y2xlTmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIl9fY29uc3RydWN0XCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiaW5pdGlhbGl6ZVwiIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcImNvbnN0cnVjdG9yXCIgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKG1ldGhvZC5uYW1lID09IGxpZmVjeWNsZU5hbWUpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIGxpZmVjeWNsZSBtZXRob2QgJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBjb25zdCByZXNlcnZlZEhvb2sgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gL15fXy91LnRlc3QobWV0aG9kLm5hbWUpIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBydWJ5UmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG1ldGhvZC5uYW1lKSB8fFxuICAgICAgICAgIHR5cGVvZiBtZXRob2QubmFtZSA9PSBcInN0cmluZ1wiICYmIG1ldGhvZC5uYW1lLmVuZHNXaXRoKFwiPVwiKSA6XG4gICAgICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBqYXZhUmVmZXJlbmNlTWV0aG9kSG9va3MuaGFzKG1ldGhvZC5uYW1lKSA6XG4gICAgICAgICAgICBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IGphdmFzY3JpcHRSZWZlcmVuY2VNZXRob2RIb29rcy5oYXMobWV0aG9kLm5hbWUpIDogZmFsc2VcblxuICAgICAgaWYgKHJlc2VydmVkSG9vaykgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgcmVzZXJ2ZWQgcmVmZXJlbmNlIG1ldGhvZCAnJHttZXRob2QubmFtZX0nYCwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikge1xuICAgICAgICBpZiAodHlwZW9mIG1ldGhvZC5uYW1lICE9IFwic3RyaW5nXCIgfHwgIS9eW0EtWmEtel9dW0EtWmEtejAtOV9dKlshPz1dPyQvdS50ZXN0KG1ldGhvZC5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1ldGhvZCBpZGVudGlmaWVyICcke1N0cmluZyhtZXRob2QubmFtZSl9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIG1ldGhvZC5uYW1lLCBcIm1ldGhvZFwiLCBleGFjdE1ldGhvZExvY2F0aW9uKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBtZXRob2QubmFtZS50b0xvd2VyQ2FzZSgpIDogbWV0aG9kLm5hbWVcblxuICAgICAgaWYgKG1ldGhvZE5hbWVzLmhhcyhub3JtYWxpemVkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZHVwbGljYXRlIHRhcmdldCBtZXRob2QgJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICBpZiAobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgJiYgZmllbGROYW1lcy5oYXMobm9ybWFsaXplZCkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgdGFyZ2V0IGNsYXNzIG1lbWJlciBjb2xsaXNpb24gJyR7bWV0aG9kLm5hbWV9J2AsIGV4YWN0TWV0aG9kTG9jYXRpb24pXG4gICAgICB9XG4gICAgICBtZXRob2ROYW1lcy5hZGQobm9ybWFsaXplZClcbiAgICAgIHZhbGlkYXRlUmVmZXJlbmNlQ2xhc3NQYXJhbWV0ZXJzKG1ldGhvZC5wYXJhbWV0ZXJzLCBcIm1ldGhvZFwiLCBsYW5ndWFnZSwgZXhhY3RNZXRob2RMb2NhdGlvbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHJlZmVyZW5jZSBjYWxsYWJsZSdzIGV4YWN0IHBhcmFtZXRlciBzaGFwZSBhbmQgdGFyZ2V0IG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5QYXJhbWV0ZXJbXX0gcGFyYW1ldGVycyAtIENhbmRpZGF0ZSBwYXJhbWV0ZXJzLlxuICogQHBhcmFtIHtcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIENhbGxhYmxlIGtpbmQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRmFsbGJhY2sgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZWZlcmVuY2VDbGFzc1BhcmFtZXRlcnMocGFyYW1ldGVycywgb3duZXIsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihwYXJhbWV0ZXI/LmxvY2F0aW9uLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlBhcmFtZXRlclwiIHx8IGtleXMgIT0gXCJraW5kLGxvY2F0aW9uLG5hbWUsdHlwZVwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgJHtvd25lcn0gcGFyYW1ldGVyYCwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGV4YWN0TG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihwYXJhbWV0ZXIubG9jYXRpb24sIGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyIGxvY2F0aW9uYCwgb3duZXJMb2NhdGlvbilcblxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBleGFjdExvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBkZWNsYXJhdGlvbidzIHRhcmdldC12aXNpYmxlIHR5cGUtcGFyYW1ldGVyIG5hbWVzIGFuZCBpZGVudGl0aWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9uIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUmVjb3JkRGVjbGFyYXRpb259IGRlY2xhcmF0aW9uIC0gT3duZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVUeXBlUGFyYW1ldGVyVGFyZ2V0cyhkZWNsYXJhdGlvbiwgbGFuZ3VhZ2UpIHtcbiAgaWYgKGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzID09PSB1bmRlZmluZWQpIHJldHVyblxuICBpZiAoIWlzRGVuc2VBcnJheShkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycykpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHR5cGUgcGFyYW1ldGVyIGRlY2xhcmF0aW9uc1wiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgfVxuICBjb25zdCBuYW1lcyA9IG5ldyBTZXQoKVxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHR5cGUvdmFsdWUgc3BlbGxpbmcgZm9yIHRhcmdldCBjb2xsaXNpb24gY2hlY2tzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIENhbmRpZGF0ZSB0YXJnZXQgbmFtZS5cbiAgICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IGNvbXBhcmlzb24ga2V5LlxuICAgKi9cbiAgY29uc3QgdGFyZ2V0S2V5ID0gKG5hbWUpID0+IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lXG4gIGNvbnN0IHZhbHVlTmFtZXMgPSBuZXcgU2V0KFtcbiAgICBkZWNsYXJhdGlvbi5uYW1lLFxuICAgIC4uLihkZWNsYXJhdGlvbi5raW5kID09IFwiRnVuY3Rpb25EZWNsYXJhdGlvblwiID8gZGVjbGFyYXRpb24ucGFyYW1ldGVycyA6IGRlY2xhcmF0aW9uLmZpZWxkcykubWFwKCh7bmFtZX0pID0+IG5hbWUpXG4gIF0ubWFwKHRhcmdldEtleSkpXG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IHBhcmFtZXRlciA9IGRlY2xhcmF0aW9uLnR5cGVQYXJhbWV0ZXJzW2luZGV4XVxuICAgIGNvbnN0IGtleXMgPSBwYXJhbWV0ZXIgJiYgdHlwZW9mIHBhcmFtZXRlciA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KHBhcmFtZXRlcilcbiAgICAgID8gT2JqZWN0LmtleXMocGFyYW1ldGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIikgOiBcIlwiXG5cbiAgICBpZiAoIXBhcmFtZXRlciB8fCBwYXJhbWV0ZXIua2luZCAhPSBcIlR5cGVQYXJhbWV0ZXJcIiB8fCBrZXlzICE9IFwiaWQsa2luZCxsb2NhdGlvbixuYW1lXCIgfHxcbiAgICAgIHBhcmFtZXRlci5pZCAhPSBgJHtkZWNsYXJhdGlvbi5pZH06dHlwZToke2luZGV4fWApIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cIiwgcGFyYW1ldGVyPy5sb2NhdGlvbiA/PyBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocGFyYW1ldGVyLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJ0eXBlIHBhcmFtZXRlciBsb2NhdGlvblwiLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZVRhcmdldFR5cGVJZGVudGlmaWVyKGxhbmd1YWdlLCBwYXJhbWV0ZXIubmFtZSwgcGFyYW1ldGVyLmxvY2F0aW9uKVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB0YXJnZXRLZXkocGFyYW1ldGVyLm5hbWUpXG5cbiAgICBpZiAobmFtZXMuaGFzKG5vcm1hbGl6ZWQpIHx8IHZhbHVlTmFtZXMuaGFzKG5vcm1hbGl6ZWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB0YXJnZXQgdHlwZSBwYXJhbWV0ZXIgY29sbGlzaW9uICcke3BhcmFtZXRlci5uYW1lfSdgLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgfVxuICAgIG5hbWVzLmFkZChub3JtYWxpemVkKVxuICB9XG59XG5cbi8qKlxuICogRGV0ZWN0cyBUYXNrIDAxMiBJUiBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBvbGRlciBmZWF0dXJlIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIENhbmRpZGF0ZSBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBnZW5lcmljIGRlY2xhcmF0aW9ucyBhcmUgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlSGFzVHlwZVBhcmFtZXRlcnMobW9kdWxlKSB7XG4gIHJldHVybiBbLi4ubW9kdWxlLnJlY29yZHMgPz8gW10sIC4uLm1vZHVsZS5mdW5jdGlvbnNdLnNvbWUoKGRlY2xhcmF0aW9uKSA9PlxuICAgIEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24/LnR5cGVQYXJhbWV0ZXJzKSAmJiBkZWNsYXJhdGlvbi50eXBlUGFyYW1ldGVycy5sZW5ndGggPiAwKVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDggc3RhdGVtZW50cyBiZWZvcmUgYSBub24tY29ob3J0IGJhY2tlbmQgcmVhY2hlcyBjb2xsZWN0aW9uLXR5cGUgY2hlY2tzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RJdGVyYXRpb25TdGF0ZW1lbnRzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0l0ZXJhdGlvbihtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIFRhc2sgMDMyIElSIGJlZm9yZSBhIG5vbi1jb2hvcnQgYmFja2VuZCBhbGxvY2F0ZXMgb3V0cHV0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RDb25kaXRpb25Db250cm9sbGVkTG9vcHMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AoZGVjbGFyYXRpb24gJiYgdHlwZW9mIGRlY2xhcmF0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIilcbiAgICAgIDogdW5kZWZpbmVkLCBsYW5ndWFnZSlcbiAgfVxuICByZWplY3RCbG9ja0NvbmRpdGlvbkxvb3AobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UpXG59XG5cbi8qKlxuICogRmluZHMgYSBjb25kaXRpb24tY29udHJvbGxlZCBsb29wIHdpdGhvdXQgZGVzY2VuZGluZyB0aHJvdWdoIG1hbGZvcm1lZCBvciBjeWNsaWMgY29udGFpbmVycy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJhY2tlbmRMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge1NldDxvYmplY3Q+fSBbc2Vlbl0gLSBWaXNpdGVkIGNvbnRhaW5lcnMuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKGJsb2NrLCBsYW5ndWFnZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IHNlZW4uaGFzKGJsb2NrKSkgcmV0dXJuXG4gIHNlZW4uYWRkKGJsb2NrKVxuICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gIGlmICghQXJyYXkuaXNBcnJheShzdGF0ZW1lbnRzKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIHN0YXRlbWVudHMpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICAgIGNvbnN0IGxvY2F0aW9uID0gZGlhZ25vc3RpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJsb2NhdGlvblwiKSwgUmVmbGVjdC5nZXQoYmxvY2ssIFwibG9jYXRpb25cIikpXG5cbiAgICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAzMiBjb25kaXRpb24tY29udHJvbGxlZCBsb29wXCIsIGxvY2F0aW9uKVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYWx0ZXJuYXRlXCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoU3RyaW5nKGtpbmQpKSkge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tDb25kaXRpb25Mb29wKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrQ29uZGl0aW9uTG9vcChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiY2F0Y2hCb2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBGaW5kcyBhIFRhc2sgMDA4IG5vZGUgd2l0aG91dCBkZXNjZW5kaW5nIHRocm91Z2ggbWFsZm9ybWVkIG9yIGN5Y2xpYyBjb250YWluZXJzLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIFZpc2l0ZWQgY29udGFpbmVycy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiByZWplY3RCbG9ja0l0ZXJhdGlvbihibG9jaywgbGFuZ3VhZ2UsIHNlZW4gPSBuZXcgU2V0KCkpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCBzZWVuLmhhcyhibG9jaykpIHJldHVyblxuICBzZWVuLmFkZChibG9jaylcbiAgY29uc3Qgc3RhdGVtZW50cyA9IFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIilcblxuICBpZiAoIUFycmF5LmlzQXJyYXkoc3RhdGVtZW50cykpIHJldHVyblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgaWYgKCFzdGF0ZW1lbnQgfHwgdHlwZW9mIHN0YXRlbWVudCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoc3RhdGVtZW50KSkgY29udGludWVcbiAgICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIiksIFJlZmxlY3QuZ2V0KGJsb2NrLCBcImxvY2F0aW9uXCIpKVxuXG4gICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiQnJlYWtTdGF0ZW1lbnRcIiwgXCJDb250aW51ZVN0YXRlbWVudFwiXS5pbmNsdWRlcyhraW5kKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImNvbnNlcXVlbnRcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgICAgcmVqZWN0QmxvY2tJdGVyYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgbGFuZ3VhZ2UsIHNlZW4pXG4gICAgfSBlbHNlIGlmIChraW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJib2R5XCIpLCBsYW5ndWFnZSwgc2VlbilcbiAgICAgIHJlamVjdEJsb2NrSXRlcmF0aW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjYXRjaEJvZHlcIiksIGxhbmd1YWdlLCBzZWVuKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDcgb3B0aW9uYWwgdHlwZXMgYmVmb3JlIGEgbm9uLWNvaG9ydCBlbWl0dGVyIGFsbG9jYXRlcyBvdXRwdXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBDYW5kaWRhdGUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdE9wdGlvbmFsVHlwZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAoIWRlY2xhcmF0aW9uIHx8IHR5cGVvZiBkZWNsYXJhdGlvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZGVjbGFyYXRpb24pKSBjb250aW51ZVxuICAgIGNvbnN0IGxvY2F0aW9uID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwibG9jYXRpb25cIikgPz8gbW9kdWxlLmxvY2F0aW9uXG5cbiAgICBpZiAoY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicmV0dXJuVHlwZVwiKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCByZXR1cm4gdHlwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJwYXJhbWV0ZXJzXCIpKSA/IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIikgOiBbXSkge1xuICAgICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKHBhcmFtZXRlcj8udHlwZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA3IG9wdGlvbmFsIHBhcmFtZXRlciB0eXBlXCIsIHBhcmFtZXRlci5sb2NhdGlvbiA/PyBsb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIiksIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIG9wdGlvbmFsIGxvY2FsIHR5cGVzIHJlY3Vyc2l2ZWx5IGluIG9uZSBjYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhibG9jaywgbGFuZ3VhZ2UpIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSB8fCAhQXJyYXkuaXNBcnJheShSZWZsZWN0LmdldChibG9jaywgXCJzdGF0ZW1lbnRzXCIpKSkgcmV0dXJuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpIHtcbiAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBjb250YWluc09wdGlvbmFsVHlwZShzdGF0ZW1lbnQudHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBsb2NhbCB0eXBlXCIsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5jb25zZXF1ZW50LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSByZWplY3RCbG9ja09wdGlvbmFsVHlwZXMoc3RhdGVtZW50LmFsdGVybmF0ZSwgbGFuZ3VhZ2UpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgaWYgKGNvbnRhaW5zT3B0aW9uYWxUeXBlKHN0YXRlbWVudC52YWx1ZUJpbmRpbmc/LnR5cGUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCBpdGVyYXRpb24gYmluZGluZyB0eXBlXCIsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24gPz8gc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmVqZWN0QmxvY2tPcHRpb25hbFR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICAgIHJlamVjdEJsb2NrT3B0aW9uYWxUeXBlcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGJvdW5kZWQgcmVjdXJzaXZlIHNlbWFudGljIHR5cGUgZm9yIGFuIG9wdGlvbmFsIG5vZGUuXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFtzZWVuXSAtIEN5Y2xlIHByb3RlY3Rpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBhbiBvcHRpb25hbCB0eXBlIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNPcHRpb25hbFR5cGUodHlwZSwgc2VlbiA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpIHx8IHNlZW4uaGFzKHR5cGUpKSByZXR1cm4gZmFsc2VcbiAgc2Vlbi5hZGQodHlwZSlcbiAgY29uc3Qga2luZCA9IFJlZmxlY3QuZ2V0KHR5cGUsIFwia2luZFwiKVxuXG4gIGlmIChraW5kID09IFwiT3B0aW9uYWxUeXBlXCIpIHJldHVybiB0cnVlXG4gIGlmIChraW5kID09IFwiTGlzdFR5cGVcIikgcmV0dXJuIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwiZWxlbWVudFR5cGVcIiksIHNlZW4pXG4gIGlmIChraW5kID09IFwiTWFwVHlwZVwiIHx8IGtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiKSByZXR1cm4gY29udGFpbnNPcHRpb25hbFR5cGUoUmVmbGVjdC5nZXQodHlwZSwgXCJrZXlUeXBlXCIpLCBzZWVuKSB8fFxuICAgIGNvbnRhaW5zT3B0aW9uYWxUeXBlKFJlZmxlY3QuZ2V0KHR5cGUsIFwidmFsdWVUeXBlXCIpLCBzZWVuKVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIFJlamVjdHMgVGFzayAwMDYgdHlwZXMgYmVmb3JlIGEgcmVnaXN0ZXJlZCBub24tY29ob3J0IGVtaXR0ZXIgY2FuIGFsbG9jYXRlIGFuIGFydGlmYWN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdENvbGxlY3Rpb25UeXBlcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGlmICghZGVjbGFyYXRpb24gfHwgdHlwZW9mIGRlY2xhcmF0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShkZWNsYXJhdGlvbikpIGNvbnRpbnVlXG4gICAgY29uc3QgbG9jYXRpb24gPSBSZWZsZWN0LmdldChkZWNsYXJhdGlvbiwgXCJsb2NhdGlvblwiKSA/PyBtb2R1bGUubG9jYXRpb25cbiAgICBjb25zdCByZXR1cm5UeXBlID0gUmVmbGVjdC5nZXQoZGVjbGFyYXRpb24sIFwicmV0dXJuVHlwZVwiKVxuXG4gICAgaWYgKGlzQ29sbGVjdGlvblR5cGUocmV0dXJuVHlwZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiByZXR1cm4gdHlwZVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgcGFyYW1ldGVycyA9IFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcInBhcmFtZXRlcnNcIilcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIEFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgPyBwYXJhbWV0ZXJzIDogW10pIHtcbiAgICAgIGlmIChpc0NvbGxlY3Rpb25UeXBlKHBhcmFtZXRlcj8udHlwZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbiBwYXJhbWV0ZXIgdHlwZVwiLCBwYXJhbWV0ZXIubG9jYXRpb24gPz8gbG9jYXRpb24pXG4gICAgfVxuICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKFJlZmxlY3QuZ2V0KGRlY2xhcmF0aW9uLCBcImJvZHlcIiksIGxhbmd1YWdlKVxuICB9XG4gIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgY29sbGVjdGlvbiBsb2NhbCB0eXBlcyByZWN1cnNpdmVseSBpbiBvbmUgYmxvY2suXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIHNlbWFudGljIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGlkZW50aXR5LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKGJsb2NrLCBsYW5ndWFnZSkge1xuICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8ICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGJsb2NrLCBcInN0YXRlbWVudHNcIikpKSByZXR1cm5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKSkge1xuICAgIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIGNvbnRpbnVlXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIGlzQ29sbGVjdGlvblR5cGUoc3RhdGVtZW50LnR5cGUpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gbG9jYWwgdHlwZVwiLCBzdGF0ZW1lbnQubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5jb25zZXF1ZW50LCBsYW5ndWFnZSlcbiAgICAgIGlmIChzdGF0ZW1lbnQuYWx0ZXJuYXRlKSByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYWx0ZXJuYXRlLCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICBpZiAoaXNDb2xsZWN0aW9uVHlwZShzdGF0ZW1lbnQudmFsdWVCaW5kaW5nPy50eXBlKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDYgaW1tdXRhYmxlIGNvbGxlY3Rpb24gaXRlcmF0aW9uIGJpbmRpbmcgdHlwZVwiLCBzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLmxvY2F0aW9uID8/IHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHJlamVjdEJsb2NrQ29sbGVjdGlvblR5cGVzKHN0YXRlbWVudC5ib2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgcmVqZWN0QmxvY2tDb2xsZWN0aW9uVHlwZXMoc3RhdGVtZW50LmJvZHksIGxhbmd1YWdlKVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiKSB7XG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuYm9keSwgbGFuZ3VhZ2UpXG4gICAgICByZWplY3RCbG9ja0NvbGxlY3Rpb25UeXBlcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBsYW5ndWFnZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgYSBwb3NzaWJsZSByZWN1cnNpdmUgY29sbGVjdGlvbiB0eXBlIHdpdGhvdXQgdHJhdmVyc2luZyBtYWxmb3JtZWQgY2hpbGRyZW4uXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgdHlwZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBvdXRlciB0eXBlIGlzIGEgY29sbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gaXNDb2xsZWN0aW9uVHlwZSh0eXBlKSB7XG4gIHJldHVybiBCb29sZWFuKHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKSAmJlxuICAgIChbXCJMaXN0VHlwZVwiLCBcIk1hcFR5cGVcIiwgXCJPcmRlcmVkTWFwVHlwZVwiXS5pbmNsdWRlcyhTdHJpbmcoUmVmbGVjdC5nZXQodHlwZSwgXCJraW5kXCIpKSkpKVxufVxuXG4vKipcbiAqIFJlamVjdHMgc2VtYW50aWMgbmFtZXMgdGhhdCB3b3VsZCBjYXB0dXJlIHN5bnRheCBvd25lZCBieSBvbmUgYmFja2VuZCBlbWl0dGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIHZhbGlkYXRlUmVjb3JkQ29uc3RydWN0b3JOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICBjb25zdCBuZWVkc05hdGl2ZU1hcCA9IFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSAmJlxuICAgIChtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJNYXBMaXRlcmFsXCIpIHx8IG1vZHVsZUNvbnRhaW5zRXhwcmVzc2lvbktpbmQobW9kdWxlLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpKVxuICBjb25zdCBuZWVkc1BocENvdW50ID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiBtb2R1bGVDb250YWluc0V4cHJlc3Npb25LaW5kKG1vZHVsZSwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIilcbiAgY29uc3QgamF2YXNjcmlwdE93bmVkTmFtZXMgPSBuZXcgU2V0KFtcImNvbnNvbGVcIiwgLi4uKG5lZWRzTmF0aXZlTWFwID8gW1wiTWFwXCJdIDogW10pXSlcbiAgY29uc3Qgb3duZWRFbnRyeU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJmbXRcIiwgXCJpbnQ2NFwiLCBcImJvb2xcIiwgXCJzdHJpbmdcIiwgXCJ0cnVlXCIsIFwiZmFsc2VcIl0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImNzaGFycFwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDogbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcImFyZ3NcIiwgXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBqYXZhc2NyaXB0T3duZWROYW1lcyA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZFByaW50UmVjZWl2ZXJOYW1lcyA9IGxhbmd1YWdlID09IFwiZ29cIiA/IG5ldyBTZXQoW1wiZm10XCIsIFwiaW50NjRcIiwgXCJib29sXCIsIFwic3RyaW5nXCIsIFwidHJ1ZVwiLCBcImZhbHNlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gamF2YXNjcmlwdE93bmVkTmFtZXMgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRDYWxsYWJsZU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJnb1wiID8gbmV3IFNldChbXCJtYWluXCIsIFwiaW5pdFwiLCBcImZtdFwiLCBcImludDY0XCIsIFwiYm9vbFwiLCBcInN0cmluZ1wiLCBcInRydWVcIiwgXCJmYWxzZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwiY3NoYXJwXCIgPyBuZXcgU2V0KFtcbiAgICBcIkVxdWFsc1wiLCBcIkZpbmFsaXplXCIsIFwiR2V0SGFzaENvZGVcIiwgXCJHZXRUeXBlXCIsIFwiTWFpblwiLCBcIk1lbWJlcndpc2VDbG9uZVwiLCBcIlByb2dyYW1cIiwgXCJSZWZlcmVuY2VFcXVhbHNcIiwgXCJTeXN0ZW1cIiwgXCJUb1N0cmluZ1wiXG4gIF0pIDpcbiAgICBsYW5ndWFnZSA9PSBcImphdmFcIiA/IG5ldyBTZXQoW1wibWFpblwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IGphdmFzY3JpcHRPd25lZE5hbWVzIDpcbiAgICBuZWVkc1BocENvdW50ID8gbmV3IFNldChbXCJjb3VudFwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJwdXRzXCIsIFwic2VuZFwiLCBcInB1YmxpY19zZW5kXCIsIFwiX19zZW5kX19cIl0pIDogbmV3IFNldCgpXG4gIC8qKlxuICAgKiBQcm90ZWN0cyBwcmludC9mYWN0b3J5IHNwZWxsaW5ncyBpbnNpZGUgb25lIGNhbGxhYmxlIHNjb3BlLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlBhcmFtZXRlcltdfSBwYXJhbWV0ZXJzIC0gQ2FsbGFibGUgcGFyYW1ldGVycy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYm9keSAtIENhbGxhYmxlIGJvZHkuXG4gICAqIEBwYXJhbSB7XCJmdW5jdGlvblwiIHwgXCJjb25zdHJ1Y3RvclwiIHwgXCJtZXRob2RcIn0gb3duZXIgLSBEaWFnbm9zdGljIG93bmVyLlxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVDYWxsYWJsZUJpbmRpbmdzID0gKHBhcmFtZXRlcnMsIGJvZHksIG93bmVyKSA9PiB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgcGFyYW1ldGVycykge1xuICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhib2R5KSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke3N0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLFxuICAgICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIpIHtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgICBpZiAob3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKGJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7b3duZXJ9IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgJiYgb3duZWRQcmludFJlY2VpdmVyTmFtZXMuaGFzKHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnJHtzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgICBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSkpIHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgaXRlcmF0aW9uIGJpbmRpbmcgJyR7c3RhdGVtZW50LnZhbHVlQmluZGluZy5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsXG4gICAgICAgIHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10pIHtcbiAgICAgICAgaWYgKG93bmVkRW50cnlOYW1lcy5oYXMoYmluZGluZy5uYW1lKSkge1xuICAgICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGl0ZXJhdGlvbiBiaW5kaW5nICcke2JpbmRpbmcubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBiaW5kaW5nLmxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIlRyeVN0YXRlbWVudFwiICYmIG93bmVkRW50cnlOYW1lcy5oYXMoc3RhdGVtZW50LmNhdGNoQmluZGluZy5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgY2F0Y2ggYmluZGluZyAnJHtzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCxcbiAgICAgICAgc3RhdGVtZW50LmNhdGNoQmluZGluZy5sb2NhdGlvbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgdGFyZ2V0TmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBkZWNsYXJhdGlvbi5uYW1lLnRvTG93ZXJDYXNlKCkgOiBkZWNsYXJhdGlvbi5uYW1lXG5cbiAgICBpZiAob3duZWRDYWxsYWJsZU5hbWVzLmhhcyh0YXJnZXROYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikpXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlID0gZW1pdHRlZEphdmFGdW5jdGlvblNpZ25hdHVyZShkZWNsYXJhdGlvbilcblxuICAgICAgaWYgKHNpZ25hdHVyZSAmJiBqYXZhT2JqZWN0SW5zdGFuY2VNZXRob2RTaWduYXR1cmVzLmhhcyhzaWduYXR1cmUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBgZnVuY3Rpb24gJyR7c2lnbmF0dXJlfScgY29uZmxpY3RzIHdpdGggYW4gaW5oZXJpdGVkIGphdmEubGFuZy5PYmplY3QgaW5zdGFuY2UgbWV0aG9kYCxcbiAgICAgICAgICBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbilcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24ucGFyYW1ldGVycywgZGVjbGFyYXRpb24uYm9keSwgXCJmdW5jdGlvblwiKVxuICB9XG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmNsYXNzZXMgPz8gW10pIHtcbiAgICB2YWxpZGF0ZUNhbGxhYmxlQmluZGluZ3MoZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycywgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHZhbGlkYXRlQ2FsbGFibGVCaW5kaW5ncyhtZXRob2QucGFyYW1ldGVycywgbWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gIH1cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiKSB2YWxpZGF0ZUphdmFVdGlsRmFjdG9yeU5hbWVzKG1vZHVsZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIEphdmFTY3JpcHQtZmFtaWx5IGxleGljYWwgYmluZGluZ3MgdGhhdCBjYW4gY2FwdHVyZSBlbWl0dGVkIGJhcmUgcmVjb3JkIGNvbnN0cnVjdG9yIG5hbWVzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gVmFsaWRhdGVkLXNoYXBlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlY29yZENvbnN0cnVjdG9yTmFtZXMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhc2NyaXB0XCIgJiYgbGFuZ3VhZ2UgIT0gXCJ0eXBlc2NyaXB0XCIpIHJldHVyblxuICBjb25zdCByZWNvcmROYW1lcyA9IG5ldyBTZXQoW1xuICAgIC4uLihtb2R1bGUucmVjb3JkcyA/PyBbXSkubWFwKChyZWNvcmQpID0+IHJlY29yZC5uYW1lKSxcbiAgICAuLi4obW9kdWxlLmNsYXNzZXMgPz8gW10pLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLm5hbWUpLFxuICAgIC4uLihtb2R1bGUuZXJyb3JzID8/IFtdKS5tYXAoKGVycm9yKSA9PiBlcnJvci5uYW1lKVxuICBdKVxuXG4gIC8qKlxuICAgKiBDaGVja3MgZGVjbGFyYXRpb25zIG5lc3RlZCBiZW5lYXRoIG9uZSBvd25pbmcgYmxvY2suXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmxvY2t9IGJsb2NrIC0gQmxvY2sgdG8gaW5zcGVjdC5cbiAgICogQHBhcmFtIHtcImVudHJ5XCIgfCBcImZ1bmN0aW9uXCIgfCBcImNvbnN0cnVjdG9yXCIgfCBcIm1ldGhvZFwifSBvd25lciAtIE93bmluZyBzY29wZSBraW5kLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNvbnN0IHZhbGlkYXRlQmxvY2tOYW1lcyA9IChibG9jaywgb3duZXIpID0+IHtcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBhbGxTdGF0ZW1lbnRzKGJsb2NrKSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIHJlY29yZE5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtvd25lcn0gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLCBiaW5kaW5nTmFtZUxvY2F0aW9uKHN0YXRlbWVudCkpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtzdGF0ZW1lbnQudmFsdWVCaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LnZhbHVlQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGZvciAoY29uc3QgYmluZGluZyBvZiBbc3RhdGVtZW50LmtleUJpbmRpbmcsIHN0YXRlbWVudC52YWx1ZUJpbmRpbmddKSB7XG4gICAgICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhiaW5kaW5nLm5hbWUpKSB7XG4gICAgICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnJHtiaW5kaW5nLm5hbWV9JyBjYXB0dXJlcyByZWNvcmQgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgICBiaW5kaW5nTmFtZUxvY2F0aW9uKGJpbmRpbmcpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIgJiYgcmVjb3JkTmFtZXMuaGFzKHN0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGAke293bmVyfSBjYXRjaCBiaW5kaW5nICcke3N0YXRlbWVudC5jYXRjaEJpbmRpbmcubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgIGJpbmRpbmdOYW1lTG9jYXRpb24oc3RhdGVtZW50LmNhdGNoQmluZGluZylcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCBcImVudHJ5XCIpXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIHJlY29yZCBjb25zdHJ1Y3RvcmAsIGJpbmRpbmdOYW1lTG9jYXRpb24ocGFyYW1ldGVyKSlcbiAgICAgIH1cbiAgICB9XG4gICAgdmFsaWRhdGVCbG9ja05hbWVzKGRlY2xhcmF0aW9uLmJvZHksIFwiZnVuY3Rpb25cIilcbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5jbGFzc2VzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24uY29uc3RydWN0b3IucGFyYW1ldGVycykge1xuICAgICAgaWYgKHJlY29yZE5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgY29uc3RydWN0b3IgcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgbm9taW5hbCBjb25zdHJ1Y3RvcmAsXG4gICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgXCJjb25zdHJ1Y3RvclwiKVxuICAgIGZvciAoY29uc3QgbWV0aG9kIG9mIGRlY2xhcmF0aW9uLm1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIG1ldGhvZC5wYXJhbWV0ZXJzKSB7XG4gICAgICAgIGlmIChyZWNvcmROYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWV0aG9kIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIG5vbWluYWwgY29uc3RydWN0b3JgLFxuICAgICAgICAgICAgYmluZGluZ05hbWVMb2NhdGlvbihwYXJhbWV0ZXIpKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMobWV0aG9kLmJvZHksIFwibWV0aG9kXCIpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogUmVqZWN0cyBsZXhpY2FsIGJpbmRpbmdzIHRoYXQgd291bGQgY2FwdHVyZSBKYXZhJ3MgcGFja2FnZSBxdWFsaWZpZXIgaW4gZW1pdHRlZCBjb2xsZWN0aW9uIGZhY3Rvcmllcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVKYXZhVXRpbEZhY3RvcnlOYW1lcyhtb2R1bGUpIHtcbiAgLyoqXG4gICAqIFdhbGtzIG9uZSBsZXhpY2FsIGJsb2NrIHdoaWxlIHJldGFpbmluZyBvbmx5IGEgY3VycmVudGx5IHZpc2libGUgY2FwdHVyZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBCbG9jayB0byBpbnNwZWN0IGluIHNlbWFudGljIG9yZGVyLlxuICAgKiBAcGFyYW0ge3tkZXRhaWw6IHN0cmluZywgbG9jYXRpb246IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSB8IHVuZGVmaW5lZH0gaW5oZXJpdGVkIC0gVmlzaWJsZSBjYXB0dXJlLlxuICAgKiBAcGFyYW0ge1wiZW50cnlcIiB8IFwiZnVuY3Rpb25cIiB8IFwiY29uc3RydWN0b3JcIiB8IFwibWV0aG9kXCJ9IG93bmVyIC0gT3duaW5nIHNjb3BlIGtpbmQuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgY29uc3QgdmFsaWRhdGVCbG9ja05hbWVzID0gKGJsb2NrLCBpbmhlcml0ZWQsIG93bmVyKSA9PiB7XG4gICAgbGV0IGNhcHR1cmUgPSBpbmhlcml0ZWRcblxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGJsb2NrLnN0YXRlbWVudHMpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBzdGF0ZW1lbnQubmFtZSA9PSBcImphdmFcIikge1xuICAgICAgICBjYXB0dXJlID0ge1xuICAgICAgICAgIGRldGFpbDogYCR7b3duZXJ9IGxvY2FsICdqYXZhJyBjYXB0dXJlcyBqYXZhLnV0aWwgZmFjdG9yeSBzeW50YXhgLFxuICAgICAgICAgIGxvY2F0aW9uOiBzdGF0ZW1lbnQubG9jYXRpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuY29uZGl0aW9uIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubGlzdCA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQubWFwIDpcbiAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgPyBzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIgOlxuICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5leHByZXNzaW9uIDpcbiAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5lcnJvci5tZXNzYWdlIDogdW5kZWZpbmVkXG5cbiAgICAgIGlmIChjYXB0dXJlICYmIGV4cHJlc3Npb24gJiYgKGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbiwgXCJMaXN0TGl0ZXJhbFwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiTWFwTGl0ZXJhbFwiKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3JkZXJlZE1hcExpdGVyYWxcIikgfHxcbiAgICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLCBcIk9wdGlvbmFsTm9uZVwiKSB8fFxuICAgICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIFwiT3B0aW9uYWxTb21lXCIpKSkge1xuICAgICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkoXCJqYXZhXCIsIGNhcHR1cmUuZGV0YWlsLCBjYXB0dXJlLmxvY2F0aW9uKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmNvbnNlcXVlbnQsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBpZiAoc3RhdGVtZW50LmFsdGVybmF0ZSkgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5hbHRlcm5hdGUsIGNhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIikgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBjYXB0dXJlLCBvd25lcilcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIikge1xuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IHN0YXRlbWVudC52YWx1ZUJpbmRpbmcubmFtZSA9PSBcImphdmFcIiA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogc3RhdGVtZW50LnZhbHVlQmluZGluZy5sb2NhdGlvblxuICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuYm9keSwgbG9vcENhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgICAgIGNvbnN0IGNhcHR1cmVkQmluZGluZyA9IFtzdGF0ZW1lbnQua2V5QmluZGluZywgc3RhdGVtZW50LnZhbHVlQmluZGluZ10uZmluZCgoe25hbWV9KSA9PiBuYW1lID09IFwiamF2YVwiKVxuICAgICAgICBjb25zdCBsb29wQ2FwdHVyZSA9IGNhcHR1cmVkQmluZGluZyA/IHtcbiAgICAgICAgICBkZXRhaWw6IGAke293bmVyfSBpdGVyYXRpb24gYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogY2FwdHVyZWRCaW5kaW5nLmxvY2F0aW9uXG4gICAgICAgIH0gOiBjYXB0dXJlXG5cbiAgICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKHN0YXRlbWVudC5ib2R5LCBsb29wQ2FwdHVyZSwgb3duZXIpXG4gICAgICB9XG4gICAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2YWxpZGF0ZUJsb2NrTmFtZXMoc3RhdGVtZW50LmJvZHksIGNhcHR1cmUsIG93bmVyKVxuICAgICAgICBjb25zdCBjYXRjaENhcHR1cmUgPSBzdGF0ZW1lbnQuY2F0Y2hCaW5kaW5nLm5hbWUgPT0gXCJqYXZhXCIgPyB7XG4gICAgICAgICAgZGV0YWlsOiBgJHtvd25lcn0gY2F0Y2ggYmluZGluZyAnamF2YScgY2FwdHVyZXMgamF2YS51dGlsIGZhY3Rvcnkgc3ludGF4YCxcbiAgICAgICAgICBsb2NhdGlvbjogc3RhdGVtZW50LmNhdGNoQmluZGluZy5sb2NhdGlvblxuICAgICAgICB9IDogY2FwdHVyZVxuXG4gICAgICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhzdGF0ZW1lbnQuY2F0Y2hCb2R5LCBjYXRjaENhcHR1cmUsIG93bmVyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhbGlkYXRlQmxvY2tOYW1lcyhtb2R1bGUuZW50cnlQb2ludC5ib2R5LCB1bmRlZmluZWQsIFwiZW50cnlcIilcbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgY29uc3QgcGFyYW1ldGVyID0gZGVjbGFyYXRpb24ucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgY29uc3QgY2FwdHVyZSA9IHBhcmFtZXRlciA/IHtcbiAgICAgIGRldGFpbDogXCJmdW5jdGlvbiBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheFwiLFxuICAgICAgbG9jYXRpb246IHBhcmFtZXRlci5sb2NhdGlvblxuICAgIH0gOiB1bmRlZmluZWRcblxuICAgIHZhbGlkYXRlQmxvY2tOYW1lcyhkZWNsYXJhdGlvbi5ib2R5LCBjYXB0dXJlLCBcImZ1bmN0aW9uXCIpXG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuY2xhc3NlcyA/PyBbXSkge1xuICAgIGNvbnN0IGNhbGxhYmxlcyA9IFtcbiAgICAgIHtib2R5OiBkZWNsYXJhdGlvbi5jb25zdHJ1Y3Rvci5ib2R5LCBvd25lcjogLyoqIEB0eXBlIHtjb25zdH0gKi8gKFwiY29uc3RydWN0b3JcIiksIHBhcmFtZXRlcnM6IGRlY2xhcmF0aW9uLmNvbnN0cnVjdG9yLnBhcmFtZXRlcnN9LFxuICAgICAgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gKHtib2R5OiBtZXRob2QuYm9keSwgb3duZXI6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcIm1ldGhvZFwiKSwgcGFyYW1ldGVyczogbWV0aG9kLnBhcmFtZXRlcnN9KSlcbiAgICBdXG5cbiAgICBmb3IgKGNvbnN0IGNhbGxhYmxlIG9mIGNhbGxhYmxlcykge1xuICAgICAgY29uc3QgcGFyYW1ldGVyID0gY2FsbGFibGUucGFyYW1ldGVycy5maW5kKCh7bmFtZX0pID0+IG5hbWUgPT0gXCJqYXZhXCIpXG4gICAgICBjb25zdCBjYXB0dXJlID0gcGFyYW1ldGVyID8ge1xuICAgICAgICBkZXRhaWw6IGAke2NhbGxhYmxlLm93bmVyfSBwYXJhbWV0ZXIgJ2phdmEnIGNhcHR1cmVzIGphdmEudXRpbCBmYWN0b3J5IHN5bnRheGAsXG4gICAgICAgIGxvY2F0aW9uOiBwYXJhbWV0ZXIubG9jYXRpb25cbiAgICAgIH0gOiB1bmRlZmluZWRcblxuICAgICAgdmFsaWRhdGVCbG9ja05hbWVzKGNhbGxhYmxlLmJvZHksIGNhcHR1cmUsIGNhbGxhYmxlLm93bmVyKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJlcG9ydHMgd2hldGhlciBhIG1vZHVsZSBjb250YWlucyBhbiBleHByZXNzaW9uIGtpbmQgdGhhdCByZXF1aXJlcyB0YXJnZXQgcnVudGltZSBzY2FmZm9sZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZC1zaGFwZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb25bXCJraW5kXCJdfSBraW5kIC0gU291Z2h0IGV4cHJlc3Npb24ga2luZC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoZSBraW5kIG9jY3Vycy5cbiAqL1xuZnVuY3Rpb24gbW9kdWxlQ29udGFpbnNFeHByZXNzaW9uS2luZChtb2R1bGUsIGtpbmQpIHtcbiAgY29uc3QgY2xhc3NCbG9ja3MgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbXG4gICAgZGVjbGFyYXRpb24uY29uc3RydWN0b3IuYm9keSwgLi4uZGVjbGFyYXRpb24ubWV0aG9kcy5tYXAoKG1ldGhvZCkgPT4gbWV0aG9kLmJvZHkpXG4gIF0pXG5cbiAgcmV0dXJuIFttb2R1bGUuZW50cnlQb2ludC5ib2R5LCAuLi5tb2R1bGUuZnVuY3Rpb25zLm1hcCgoZGVjbGFyYXRpb24pID0+IGRlY2xhcmF0aW9uLmJvZHkpLCAuLi5jbGFzc0Jsb2Nrc10uc29tZSgoYmxvY2spID0+XG4gICAgYWxsU3RhdGVtZW50cyhibG9jaykuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiID8gc3RhdGVtZW50LmNvbmRpdGlvbiA6XG4gICAgICAgIHN0YXRlbWVudC5raW5kID09IFwiV2hpbGVTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5jb25kaXRpb24gOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5saXN0IDpcbiAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIiA/IHN0YXRlbWVudC5tYXAgOlxuICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiA/IHN0YXRlbWVudC5pbml0aWFsaXplciA6XG4gICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlByaXZhdGVGaWVsZFdyaXRlU3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiID8gc3RhdGVtZW50LmV4cHJlc3Npb24gOlxuICAgICAgICAgICAgICBzdGF0ZW1lbnQua2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIgPyBzdGF0ZW1lbnQuZXhwcmVzc2lvbiA6XG4gICAgICAgICAgICAgICAgc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiID8gc3RhdGVtZW50LmVycm9yLm1lc3NhZ2UgOiB1bmRlZmluZWRcblxuICAgICAgcmV0dXJuIGV4cHJlc3Npb24gPyBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIDogZmFsc2VcbiAgICB9KSlcbn1cblxuLyoqXG4gKiBTZWFyY2hlcyBvbmUgdmFsaWRhdGVkIGV4cHJlc3Npb24gdHJlZSBmb3IgYSBzZW1hbnRpYyBraW5kLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gRXhwcmVzc2lvbiByb290LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9uW1wia2luZFwiXX0ga2luZCAtIFNvdWdodCBraW5kLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGtpbmQgb2NjdXJzLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24sIGtpbmQpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBraW5kKSByZXR1cm4gdHJ1ZVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ub3BlcmFuZCwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ubGVmdCwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnJpZ2h0LCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29uZGl0aW9uLCBraW5kKSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmNvbnNlcXVlbnQsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBraW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoYXJndW1lbnQsIGtpbmQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpIHx8XG4gICAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChhcmd1bWVudCwga2luZCkpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGFyZ3VtZW50LCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24ucmVjZWl2ZXIsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHJldHVybiBleHByZXNzaW9uLmVsZW1lbnRzLnNvbWUoKGVsZW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZWxlbWVudCwga2luZCkpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgfHwgZXhwcmVzc2lvbi5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmVudHJpZXMuc29tZSgoZW50cnkpID0+IGV4cHJlc3Npb25Db250YWluc0tpbmQoZW50cnkua2V5LCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGVudHJ5LnZhbHVlLCBraW5kKSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBraW5kKSB8fCBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uaW5kZXgsIGtpbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1hcExvb2t1cEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZCkgfHwgZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLmtleSwga2luZClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNLaW5kKGV4cHJlc3Npb24uY29sbGVjdGlvbiwga2luZClcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zS2luZChleHByZXNzaW9uLnZhbHVlLCBraW5kKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc0tpbmQoZXhwcmVzc2lvbi5vcGVyYW5kLCBraW5kKVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8qKlxuICogUmV0dXJucyBhIHBhcnNlci1iYWNrZWQgZnVuY3Rpb24tbmFtZSBsb2NhdGlvbiB3aGVuIG9uZSBzdXJ2aXZlZCBzZW1hbnRpYyBhZGFwdGF0aW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5GdW5jdGlvbkRlY2xhcmF0aW9ufSBkZWNsYXJhdGlvbiAtIFNlbWFudGljIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSBFeGFjdCBuYW1lIG9yIGRlY2xhcmF0aW9uIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiBkZWNsYXJhdGlvbk5hbWVMb2NhdGlvbihkZWNsYXJhdGlvbikge1xuICByZXR1cm4gZGVjbGFyYXRpb24uc291cmNlUHJvdmVuYW5jZT8ucmFuZ2VzLm5hbWUgPz8gZGVjbGFyYXRpb24ubG9jYXRpb25cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcGFyc2VyLWJhY2tlZCBiaW5kaW5nLW5hbWUgbG9jYXRpb24gd2hlbiBvbmUgc3Vydml2ZWQgc2VtYW50aWMgYWRhcHRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUGFyYW1ldGVyIHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlZhbHVlQmluZGluZyB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkNhdGNoQmluZGluZ30gYmluZGluZyAtIFNlbWFudGljIGJpbmRpbmcuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IEV4YWN0IG5hbWUgb3IgYmluZGluZyBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmluZGluZ05hbWVMb2NhdGlvbihiaW5kaW5nKSB7XG4gIHJldHVybiBiaW5kaW5nLnNvdXJjZVByb3ZlbmFuY2U/LnJhbmdlcy5uYW1lID8/IGJpbmRpbmcubG9jYXRpb25cbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIEphdmEgbWV0aG9kIHNpZ25hdHVyZSB1c2VkIGZvciBpbmhlcml0ZWQtaW5zdGFuY2UgY29sbGlzaW9uIGNoZWNrcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRnVuY3Rpb25EZWNsYXJhdGlvbn0gZGVjbGFyYXRpb24gLSBDYW5kaWRhdGUgSmF2YSB0YXJnZXQgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBFbWl0dGVkIG5hbWUgYW5kIHBhcmFtZXRlciB0eXBlcyB3aGVuIGFsbCB0eXBlcyBhcmUgc3VwcG9ydGVkLlxuICovXG5mdW5jdGlvbiBlbWl0dGVkSmF2YUZ1bmN0aW9uU2lnbmF0dXJlKGRlY2xhcmF0aW9uKSB7XG4gIGNvbnN0IHBhcmFtZXRlclR5cGVzID0gW11cblxuICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBkZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKSB7XG4gICAgY29uc3QgdHlwZSA9IHBhcmFtZXRlci50eXBlXG5cbiAgICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHR5cGUpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgY29uc3QgZW1pdHRlZCA9IHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIgPyBcImphdmEudXRpbC5MaXN0XCIgOiB0eXBlLmtpbmQgPT0gXCJNYXBUeXBlXCIgPyBcImphdmEudXRpbC5NYXBcIiA6XG4gICAgICB0eXBlLmtpbmQgPT0gXCJPcmRlcmVkTWFwVHlwZVwiID8gXCJqYXZhLnV0aWwuU2VxdWVuY2VkTWFwXCIgOlxuICAgICAgdHlwZS5raW5kID09IFwiVHlwZVJlZmVyZW5jZVwiID8gZW1pdFNjYWxhclR5cGUoXCJqYXZhXCIsIHR5cGUpIDogdW5kZWZpbmVkXG5cbiAgICBpZiAoIWVtaXR0ZWQpIHJldHVybiB1bmRlZmluZWRcbiAgICBwYXJhbWV0ZXJUeXBlcy5wdXNoKGVtaXR0ZWQpXG4gIH1cblxuICByZXR1cm4gYCR7ZGVjbGFyYXRpb24ubmFtZX0oJHtwYXJhbWV0ZXJUeXBlcy5qb2luKFwiLFwiKX0pYFxufVxuXG4vKipcbiAqIFJldHVybnMgZXZlcnkgc3RhdGVtZW50IG5lc3RlZCBiZW5lYXRoIGEgYmxvY2sgaW4gc2VtYW50aWMgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudFtdfSBTdGF0ZW1lbnRzIGluY2x1ZGluZyBuZXN0ZWQgYnJhbmNoZXMuXG4gKi9cbmZ1bmN0aW9uIGFsbFN0YXRlbWVudHMoYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuZmxhdE1hcCgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmNvbnNlcXVlbnQpLCAuLi4oc3RhdGVtZW50LmFsdGVybmF0ZSA/IGFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmFsdGVybmF0ZSkgOiBbXSldXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmJvZHkpXVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJXaGlsZVN0YXRlbWVudFwiKSByZXR1cm4gW3N0YXRlbWVudCwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuYm9keSldXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiVHJ5U3RhdGVtZW50XCIpIHJldHVybiBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5ib2R5KSwgLi4uYWxsU3RhdGVtZW50cyhzdGF0ZW1lbnQuY2F0Y2hCb2R5KV1cblxuICAgIHJldHVybiBbc3RhdGVtZW50XVxuICB9KVxufVxuXG4vKipcbiAqIEluZGV4ZXMgZXhhY3QgbG9vcCBpZGVudGl0aWVzIGJlZm9yZSByZWN1cnNpdmUgdGFyZ2V0IHZhbGlkYXRpb24gc28gY3Jvc3MtZnVuY3Rpb24gdGFyZ2V0cyBmYWlsIGRldGVybWluaXN0aWNhbGx5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gQ2FuZGlkYXRlIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHtNYXA8c3RyaW5nLCBvYmplY3Q+fSBMb29wIG93bmVyIGJ5IG1vZHVsZS1sb2NhbCBpZGVudGl0eS5cbiAqL1xuZnVuY3Rpb24gY29sbGVjdExvb3BPd25lcnMobW9kdWxlLCBsYW5ndWFnZSkge1xuICBjb25zdCBvd25lcnMgPSBuZXcgTWFwKClcbiAgY29uc3QgY2xhc3NPd25lcnMgPSAobW9kdWxlLmNsYXNzZXMgPz8gW10pLmZsYXRNYXAoKGRlY2xhcmF0aW9uKSA9PiBbZGVjbGFyYXRpb24uY29uc3RydWN0b3IsIC4uLmRlY2xhcmF0aW9uLm1ldGhvZHNdKVxuXG4gIGZvciAoY29uc3Qgb3duZXIgb2YgWy4uLmNsYXNzT3duZXJzLCAuLi5tb2R1bGUuZnVuY3Rpb25zLCBtb2R1bGUuZW50cnlQb2ludF0pIHtcbiAgICBpZiAob3duZXIgJiYgdHlwZW9mIG93bmVyID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkob3duZXIpKSB2aXNpdChSZWZsZWN0LmdldChvd25lciwgXCJib2R5XCIpLCBvd25lcilcbiAgfVxuXG4gIHJldHVybiBvd25lcnNcblxuICAvKipcbiAgICogVmlzaXRzIGxvb3AgY29udGFpbmVycyB3aGlsZSBib3VuZGluZyBtYWxmb3JtZWQgY3ljbGVzLlxuICAgKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3duZXIgLSBFbmNsb3NpbmcgZnVuY3Rpb24gb3IgZW50cnkgcG9pbnQuXG4gICAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVdIC0gQmxvY2tzIG9uIHRoZSBhY3RpdmUgcmVjdXJzaXZlIHBhdGguXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgZnVuY3Rpb24gdmlzaXQoYmxvY2ssIG93bmVyLCBhY3RpdmUgPSBuZXcgU2V0KCkpIHtcbiAgICBpZiAoIWJsb2NrIHx8IHR5cGVvZiBibG9jayAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoYmxvY2spIHx8IGFjdGl2ZS5oYXMoYmxvY2spKSByZXR1cm5cbiAgICBjb25zdCBzdGF0ZW1lbnRzID0gUmVmbGVjdC5nZXQoYmxvY2ssIFwic3RhdGVtZW50c1wiKVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHN0YXRlbWVudHMpKSByZXR1cm5cbiAgICBjb25zdCBwYXRoID0gbmV3IFNldChhY3RpdmUpXG5cbiAgICBwYXRoLmFkZChibG9jaylcbiAgICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBzdGF0ZW1lbnRzKSB7XG4gICAgICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSBjb250aW51ZVxuICAgICAgY29uc3Qga2luZCA9IFN0cmluZyhSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKSlcblxuICAgICAgaWYgKFtcIkZvckVhY2hTdGF0ZW1lbnRcIiwgXCJGb3JFYWNoTWFwU3RhdGVtZW50XCIsIFwiV2hpbGVTdGF0ZW1lbnRcIl0uaW5jbHVkZXMoa2luZCkpIHtcbiAgICAgICAgY29uc3QgaWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiaWRcIilcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpLCBSZWZsZWN0LmdldChibG9jaywgXCJsb2NhdGlvblwiKSlcblxuICAgICAgICBpZiAodHlwZW9mIGlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChpZCkpIGNvbnRpbnVlXG4gICAgICAgIGlmIChvd25lcnMuaGFzKGlkKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgICAgIG93bmVycy5zZXQoaWQsIG93bmVyKVxuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjb25zZXF1ZW50XCIpLCBvd25lciwgcGF0aClcbiAgICAgICAgdmlzaXQoUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImFsdGVybmF0ZVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICB9IGVsc2UgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgICB2aXNpdChSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiYm9keVwiKSwgb3duZXIsIHBhdGgpXG4gICAgICAgIHZpc2l0KFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJjYXRjaEJvZHlcIiksIG93bmVyLCBwYXRoKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgY29tcGxldGUgc2VtYW50aWMgYmxvY2sgYmVmb3JlIGVtaXNzaW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBibG9jayAtIENhbmRpZGF0ZSBibG9jay5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3thY3RpdmU6IChpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRm9yRWFjaE1hcFN0YXRlbWVudCB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLldoaWxlU3RhdGVtZW50KVtdLCBvd25lcjogb2JqZWN0LCBvd25lcnM6IE1hcDxzdHJpbmcsIG9iamVjdD59fSBsb29wQ29udGV4dCAtIEFjdGl2ZSBsb29wcyBhbmQgdGhlaXIgbGV4aWNhbCBvd25lci5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEJsb2NrcyBvbiB0aGUgYWN0aXZlIHJlY3Vyc2l2ZSBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCbG9jayhibG9jaywgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9ja1wiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKGJsb2NrKVxuICBjb25zdCBsb2NhdGlvbiA9IGRpYWdub3N0aWNMb2NhdGlvbihjYW5kaWRhdGUubG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgYmxvY2tcIiwgbG9jYXRpb24pXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIkJsb2NrXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJsb2NrICR7U3RyaW5nKFJlZmxlY3QuZ2V0KGJsb2NrLCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnN0YXRlbWVudHMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrIHN0YXRlbWVudHNcIiwgbG9jYXRpb24pXG4gIGNvbnN0IGJsb2NrUGF0aCA9IG5ldyBTZXQoYWN0aXZlUGF0aClcblxuICBibG9ja1BhdGguYWRkKGNhbmRpZGF0ZSlcbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgY2FuZGlkYXRlLnN0YXRlbWVudHMpIHtcbiAgICB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgbG9vcENvbnRleHQsIGJsb2NrUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBvbmUgc3VwcG9ydGVkIHN0YXRlbWVudCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gc3RhdGVtZW50IC0gQ2FuZGlkYXRlIHN0YXRlbWVudC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgYm9keSBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7e2FjdGl2ZTogKGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkZvckVhY2hTdGF0ZW1lbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50IHwgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnQpW10sIG93bmVyOiBvYmplY3QsIG93bmVyczogTWFwPHN0cmluZywgb2JqZWN0Pn19IGxvb3BDb250ZXh0IC0gQWN0aXZlIGxvb3BzIGFuZCB0aGVpciBsZXhpY2FsIG93bmVyLlxuICogQHBhcmFtIHtTZXQ8b2JqZWN0Pn0gW2FjdGl2ZVBhdGhdIC0gQWN0aXZlIGJsb2NrIGNvbnRhaW5lcnMuXG4gKiBAcGFyYW0ge1NldDxzdHJpbmc+fSBbZXh0ZXJuYWxEZWNsYXJhdGlvbklkc10gLSBSZXNvbHZlZCBkZWNsYXJhdGlvbnMgd2hvc2Ugc291cmNlIHNwZWxsaW5nIGlzIHRhcmdldC1pbmRlcGVuZGVudC5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCA9IG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyA9IG5ldyBTZXQoKSkge1xuICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgY29uc3Qgb3duTG9jYXRpb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIilcbiAgY29uc3QgbG9jYXRpb24gPSBkaWFnbm9zdGljTG9jYXRpb24ob3duTG9jYXRpb24sIG93bmVyTG9jYXRpb24pXG5cbiAgaWYgKHR5cGVvZiBraW5kICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgaWYgKGtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbn0gKi8gKHN0YXRlbWVudClcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24ubXV0YWJsZSAhPSBcImJvb2xlYW5cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvY2FsIGRlY2xhcmF0aW9uIHdpdGggaW52YWxpZCBtdXRhYmlsaXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBcImxvY2FsXCIsIGxvY2F0aW9uKVxuICAgIGlmIChkZWNsYXJhdGlvbi50eXBlPy5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiAmJiBkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ua2luZCAhPSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJvcmRlcmVkLW1hcCBsb2NhbCByZXF1aXJlcyBhIGRpcmVjdCBsaXRlcmFsIGluaXRpYWxpemVyXCIsXG4gICAgICAgIGRpYWdub3N0aWNMb2NhdGlvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplcj8ubG9jYXRpb24sIGxvY2F0aW9uKSlcbiAgICB9XG4gICAgaWYgKGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiBkZWNsYXJhdGlvbi5tdXRhYmxlICE9PSBmYWxzZSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGxvY2FsIG11c3QgYmUgaW1tdXRhYmxlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcyxcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiICYmIGRlY2xhcmF0aW9uLmluaXRpYWxpemVyPy5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQoYXNzaWdubWVudC50YXJnZXQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJQcml2YXRlRmllbGRXcml0ZVN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuUHJpdmF0ZUZpZWxkV3JpdGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoYXNzaWdubWVudCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiZXhwcmVzc2lvbixmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGFzc2lnbm1lbnQuZmllbGQgIT0gXCJzdHJpbmdcIiB8fFxuICAgICAgYXNzaWdubWVudC5yZWNlaXZlcj8ua2luZCAhPSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXIgb3IgcHJpdmF0ZSBmaWVsZCBpZGVudGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGFzc2lnbm1lbnQucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKVxuXG4gICAgaWYgKGV4cHJlc3Npb24gIT09IHVuZGVmaW5lZCkgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgJiYgbG9vcENvbnRleHQuYWN0aXZlLnNvbWUoKHtraW5kfSkgPT4ga2luZCA9PSBcIkZvckVhY2hTdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInJldHVybiBmcm9tIGFuIGl0ZXJhdGlvbiBib2R5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkV4cHJlc3Npb25TdGF0ZW1lbnRcIikge1xuICAgIGlmICghdGFzazAwNUxhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMDUgdm9pZCBjYWxsIGV4cHJlc3Npb24gc3RhdGVtZW50XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBjb25zdCBleHByZXNzaW9uID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIilcblxuICAgIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8XG4gICAgICAhW1wiQ2FsbEV4cHJlc3Npb25cIiwgXCJFZmZlY3RDYWxsRXhwcmVzc2lvblwiLCBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCJdLmluY2x1ZGVzKFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImV4cHJlc3Npb24gc3RhdGVtZW50IG90aGVyIHRoYW4gYSBkaXJlY3Qgb3IgcmVjZWl2ZXIgY2FsbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlByaW50U3RhdGVtZW50XCIpIHtcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImV4cHJlc3Npb25cIiksIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIklmU3RhdGVtZW50XCIpIHtcbiAgICBjb25zdCBicmFuY2ggPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklmU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGJyYW5jaC5jb25kaXRpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIGlmIChPYmplY3QuaGFzT3duKGJyYW5jaCwgXCJhbHRlcm5hdGVcIikpIHtcbiAgICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBsb29wQ29udGV4dCwgYWN0aXZlUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJCcmVha1N0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJDb250aW51ZVN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDA4TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwOCBvcmRlcmVkIGxpc3QgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgYCR7a2luZH0gbG9jYXRpb25gLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbix0YXJnZXRMb29wSWRcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgbWFsZm9ybWVkICR7a2luZH1gLCBsb2NhdGlvbilcbiAgICBjb25zdCB0YXJnZXRMb29wSWQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwidGFyZ2V0TG9vcElkXCIpXG4gICAgY29uc3QgbmVhcmVzdCA9IGxvb3BDb250ZXh0LmFjdGl2ZS5hdCgtMSlcblxuICAgIGlmICghbmVhcmVzdCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgJHtraW5kID09IFwiQnJlYWtTdGF0ZW1lbnRcIiA/IFwiYnJlYWtcIiA6IFwiY29udGludWVcIn0gb3V0c2lkZSBhIGxvb3BgLCBsb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIHRhcmdldExvb3BJZCAhPSBcInN0cmluZ1wiIHx8ICFsb29wQ29udGV4dC5vd25lcnMuaGFzKHRhcmdldExvb3BJZCkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJpbnZhbGlkIGxvb3AgY29udHJvbCB0YXJnZXQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChsb29wQ29udGV4dC5vd25lcnMuZ2V0KHRhcmdldExvb3BJZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibG9vcCBjb250cm9sIHRhcmdldCBjcm9zc2VzIGEgZnVuY3Rpb24gYm91bmRhcnlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICh0YXJnZXRMb29wSWQgIT0gbmVhcmVzdC5pZCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvb3AgY29udHJvbCBtdXN0IHRhcmdldCB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgbG9vcFwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMzJMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDMyIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3BcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIldoaWxlU3RhdGVtZW50IGxvY2F0aW9uXCIsIG93bmVyTG9jYXRpb24pXG4gICAgY29uc3QgbG9vcCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuV2hpbGVTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMobG9vcCkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYm9keSxjb25kaXRpb24saWQsa2luZCxsb2NhdGlvblwiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFdoaWxlU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICBpZiAodHlwZW9mIGxvb3AuaWQgIT0gXCJzdHJpbmdcIiB8fCAhL15sb29wOlswLTldKyQvdS50ZXN0KGxvb3AuaWQpIHx8IGxvb3BDb250ZXh0Lm93bmVycy5nZXQobG9vcC5pZCkgIT09IGxvb3BDb250ZXh0Lm93bmVyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZHVwbGljYXRlIG9yIGludmFsaWQgbG9vcCBpZGVudGl0eVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghbG9vcC5jb25kaXRpb24gfHwgdHlwZW9mIGxvb3AuY29uZGl0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmNvbmRpdGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmNvbmRpdGlvbiwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBjb25kaXRpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbiwgZmFsc2UsIG5ldyBTZXQoKSwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNvbmRpdGlvbi1jb250cm9sbGVkIGxvb3AgYm9keVwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AuYm9keSwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiY29uZGl0aW9uLWNvbnRyb2xsZWQgbG9vcCBib2R5IGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUJsb2NrKGxvb3AuYm9keSwgbGFuZ3VhZ2UsIGxvb3BMb2NhdGlvbixcbiAgICAgIHthY3RpdmU6IFsuLi5sb29wQ29udGV4dC5hY3RpdmUsIGxvb3BdLCBvd25lcjogbG9vcENvbnRleHQub3duZXIsIG93bmVyczogbG9vcENvbnRleHQub3duZXJzfSwgYWN0aXZlUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJGb3JFYWNoU3RhdGVtZW50XCIpIHtcbiAgICBpZiAoIXRhc2swMDhMYW5ndWFnZXMuaGFzKGxhbmd1YWdlKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIlRhc2sgMDA4IG9yZGVyZWQgbGlzdCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2luZCxsaXN0LGxvY2F0aW9uLHZhbHVlQmluZGluZ1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIEZvckVhY2hTdGF0ZW1lbnRcIiwgbG9vcExvY2F0aW9uKVxuICAgIGlmICh0eXBlb2YgbG9vcC5pZCAhPSBcInN0cmluZ1wiIHx8ICEvXmxvb3A6WzAtOV0rJC91LnRlc3QobG9vcC5pZCkgfHwgbG9vcENvbnRleHQub3duZXJzLmdldChsb29wLmlkKSAhPT0gbG9vcENvbnRleHQub3duZXIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJkdXBsaWNhdGUgb3IgaW52YWxpZCBsb29wIGlkZW50aXR5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmxpc3QgfHwgdHlwZW9mIGxvb3AubGlzdCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5saXN0KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gY29sbGVjdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGxvb3AubGlzdCwgXCJsb2NhdGlvblwiKSwgbGFuZ3VhZ2UsIFwiaXRlcmF0aW9uIGNvbGxlY3Rpb24gbG9jYXRpb25cIiwgbG9vcExvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihsb29wLmxpc3QsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgaWYgKCFsb29wLnZhbHVlQmluZGluZyB8fCB0eXBlb2YgbG9vcC52YWx1ZUJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGxvb3AudmFsdWVCaW5kaW5nKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBpdGVyYXRpb24gYmluZGluZ1wiLCBsb29wTG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IGJpbmRpbmcgPSBsb29wLnZhbHVlQmluZGluZ1xuICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKFJlZmxlY3QuZ2V0KGJpbmRpbmcsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIml0ZXJhdGlvbiBiaW5kaW5nIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoYmluZGluZy5raW5kICE9IFwiVmFsdWVCaW5kaW5nXCIgfHwgYmluZGluZ0ZpZWxkcyAhPSBcImtpbmQsbG9jYXRpb24sbXV0YWJsZSxuYW1lLHR5cGVcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibXV0YWJsZSBpdGVyYXRpb24gYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgYmluZGluZy5uYW1lLCBcIml0ZXJhdGlvbiBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoIWxvb3AuYm9keSB8fCB0eXBlb2YgbG9vcC5ib2R5ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb29wLmJvZHkpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGl0ZXJhdGlvbiBib2R5XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5ib2R5LCBcImxvY2F0aW9uXCIpLCBsYW5ndWFnZSwgXCJpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiRm9yRWFjaE1hcFN0YXRlbWVudFwiKSB7XG4gICAgaWYgKCF0YXNrMDE0TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAxNCBvcmRlcmVkLW1hcCBpdGVyYXRpb25cIiwgbG9jYXRpb24pXG4gICAgY29uc3QgbG9vcExvY2F0aW9uID0gcmVxdWlyZVNlbWFudGljTG9jYXRpb24ob3duTG9jYXRpb24sIGxhbmd1YWdlLCBcIkZvckVhY2hNYXBTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBsb29wID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Gb3JFYWNoTWFwU3RhdGVtZW50fSAqLyAoc3RhdGVtZW50KVxuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGxvb3ApLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImJvZHksaWQsa2V5QmluZGluZyxraW5kLGxvY2F0aW9uLG1hcCx2YWx1ZUJpbmRpbmdcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBGb3JFYWNoTWFwU3RhdGVtZW50XCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBsb29wLmlkICE9IFwic3RyaW5nXCIgfHwgIS9ebG9vcDpbMC05XSskL3UudGVzdChsb29wLmlkKSB8fCBsb29wQ29udGV4dC5vd25lcnMuZ2V0KGxvb3AuaWQpICE9PSBsb29wQ29udGV4dC5vd25lcikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImR1cGxpY2F0ZSBvciBpbnZhbGlkIGxvb3AgaWRlbnRpdHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIWxvb3AubWFwIHx8IHR5cGVvZiBsb29wLm1hcCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5tYXApKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIG9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24oUmVmbGVjdC5nZXQobG9vcC5tYXAsIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm9yZGVyZWQtbWFwIGl0ZXJhdGlvbiBjb2xsZWN0aW9uIGxvY2F0aW9uXCIsIGxvb3BMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24obG9vcC5tYXAsIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgZm9yIChjb25zdCBbcm9sZSwgYmluZGluZ10gb2YgW1tcImtleVwiLCBsb29wLmtleUJpbmRpbmddLCBbXCJ2YWx1ZVwiLCBsb29wLnZhbHVlQmluZGluZ11dKSB7XG4gICAgICBpZiAoIWJpbmRpbmcgfHwgdHlwZW9mIGJpbmRpbmcgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJpbmRpbmcpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGxvb3BMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGNvbnN0IGJpbmRpbmdMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKGJpbmRpbmcubG9jYXRpb24sIGxhbmd1YWdlLCBgbWFwIGl0ZXJhdGlvbiAke3JvbGV9IGJpbmRpbmcgbG9jYXRpb25gLCBsb29wTG9jYXRpb24pXG4gICAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gT2JqZWN0LmtleXMoYmluZGluZykuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICAgIGlmIChiaW5kaW5nLmtpbmQgIT0gXCJWYWx1ZUJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGlmIChiaW5kaW5nLm11dGFibGUgIT09IGZhbHNlKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiTWFwIGl0ZXJhdGlvbiBiaW5kaW5ncyBtdXN0IGJlIGltbXV0YWJsZVwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBiaW5kaW5nLm5hbWUsIGBtYXAgaXRlcmF0aW9uICR7cm9sZX0gYmluZGluZ2AsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCFsb29wLmJvZHkgfHwgdHlwZW9mIGxvb3AuYm9keSAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobG9vcC5ib2R5KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgaXRlcmF0aW9uIGJvZHlcIiwgbG9vcExvY2F0aW9uKVxuICAgIH1cbiAgICByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihSZWZsZWN0LmdldChsb29wLmJvZHksIFwibG9jYXRpb25cIiksIGxhbmd1YWdlLCBcIm1hcCBpdGVyYXRpb24gYm9keSBsb2NhdGlvblwiLCBsb29wTG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhsb29wLmJvZHksIGxhbmd1YWdlLCBsb29wTG9jYXRpb24sXG4gICAgICB7YWN0aXZlOiBbLi4ubG9vcENvbnRleHQuYWN0aXZlLCBsb29wXSwgb3duZXI6IGxvb3BDb250ZXh0Lm93bmVyLCBvd25lcnM6IGxvb3BDb250ZXh0Lm93bmVyc30sIGFjdGl2ZVBhdGgsXG4gICAgICBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiUmFpc2VTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKC8qKiBAdHlwZSB7b2JqZWN0fSAqLyAoc3RhdGVtZW50KSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmFpc2VkID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImVycm9yXCIpXG4gICAgY29uc3QgcmFpc2VMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJSYWlzZVN0YXRlbWVudCBsb2NhdGlvblwiLCBvd25lckxvY2F0aW9uKVxuICAgIGNvbnN0IGNvbnN0cnVjdGlvbkZpZWxkcyA9IHJhaXNlZCAmJiB0eXBlb2YgcmFpc2VkID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkocmFpc2VkKVxuICAgICAgPyBPYmplY3Qua2V5cyhyYWlzZWQpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcblxuICAgIGlmIChmaWVsZHMgIT0gXCJlcnJvcixraW5kLGxvY2F0aW9uXCIgfHwgIXJhaXNlZCB8fCB0eXBlb2YgcmFpc2VkICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShyYWlzZWQpIHx8XG4gICAgICByYWlzZWQua2luZCAhPSBcIkVycm9yQ29uc3RydWN0aW9uXCIgfHwgY29uc3RydWN0aW9uRmllbGRzICE9IFwiZXJyb3Isa2luZCxsb2NhdGlvbixtZXNzYWdlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgUmFpc2VTdGF0ZW1lbnRcIiwgcmFpc2VMb2NhdGlvbilcbiAgICB9XG4gICAgcmVxdWlyZVNlbWFudGljTG9jYXRpb24ocmFpc2VkLmxvY2F0aW9uLCBsYW5ndWFnZSwgXCJlcnJvciBjb25zdHJ1Y3Rpb24gbG9jYXRpb25cIiwgcmFpc2VMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKHJhaXNlZC5lcnJvciwgbGFuZ3VhZ2UsIHJhaXNlZC5sb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24ocmFpc2VkLm1lc3NhZ2UsIGxhbmd1YWdlLCByYWlzZWQubG9jYXRpb24sIGZhbHNlLCBuZXcgU2V0KCksIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGhhbmRsZXIgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRyeVN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcbiAgICBjb25zdCB0cnlMb2NhdGlvbiA9IHJlcXVpcmVTZW1hbnRpY0xvY2F0aW9uKG93bkxvY2F0aW9uLCBsYW5ndWFnZSwgXCJUcnlTdGF0ZW1lbnQgbG9jYXRpb25cIiwgb3duZXJMb2NhdGlvbilcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhoYW5kbGVyKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJib2R5LGNhdGNoQmluZGluZyxjYXRjaEJvZHksY2F0Y2hUeXBlLGtpbmQsbG9jYXRpb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBUcnlTdGF0ZW1lbnRcIiwgdHJ5TG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXJyb3JUeXBlU2hhcGUoaGFuZGxlci5jYXRjaFR5cGUsIGxhbmd1YWdlLCB0cnlMb2NhdGlvbilcbiAgICBjb25zdCBiaW5kaW5nID0gaGFuZGxlci5jYXRjaEJpbmRpbmdcbiAgICBjb25zdCBiaW5kaW5nRmllbGRzID0gYmluZGluZyAmJiB0eXBlb2YgYmluZGluZyA9PSBcIm9iamVjdFwiICYmICFBcnJheS5pc0FycmF5KGJpbmRpbmcpXG4gICAgICA/IE9iamVjdC5rZXlzKGJpbmRpbmcpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKSA6IFwiXCJcbiAgICBjb25zdCBiaW5kaW5nTG9jYXRpb24gPSByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihiaW5kaW5nPy5sb2NhdGlvbiwgbGFuZ3VhZ2UsIFwiY2F0Y2ggYmluZGluZyBsb2NhdGlvblwiLCB0cnlMb2NhdGlvbilcblxuICAgIGlmICghYmluZGluZyB8fCBiaW5kaW5nLmtpbmQgIT0gXCJDYXRjaEJpbmRpbmdcIiB8fCBiaW5kaW5nRmllbGRzICE9IFwia2luZCxsb2NhdGlvbixtdXRhYmxlLG5hbWUsdHlwZVwiIHx8IGJpbmRpbmcubXV0YWJsZSAhPT0gZmFsc2UpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgY2F0Y2ggYmluZGluZ1wiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGJpbmRpbmcubmFtZSwgXCJjYXRjaCBiaW5kaW5nXCIsIGJpbmRpbmdMb2NhdGlvbilcbiAgICB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKGJpbmRpbmcudHlwZSwgbGFuZ3VhZ2UsIGJpbmRpbmdMb2NhdGlvbilcbiAgICBpZiAoYmluZGluZy50eXBlLmRlY2xhcmF0aW9uSWQgIT0gaGFuZGxlci5jYXRjaFR5cGUuZGVjbGFyYXRpb25JZCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNhdGNoIGJpbmRpbmcgdHlwZSBtaXNtYXRjaFwiLCBiaW5kaW5nTG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2soaGFuZGxlci5ib2R5LCBsYW5ndWFnZSwgdHJ5TG9jYXRpb24sIGxvb3BDb250ZXh0LCBhY3RpdmVQYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHZhbGlkYXRlQmxvY2soaGFuZGxlci5jYXRjaEJvZHksIGxhbmd1YWdlLCB0cnlMb2NhdGlvbiwgbG9vcENvbnRleHQsIGFjdGl2ZVBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBzdGF0ZW1lbnQgJHtraW5kfWAsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyB0aGUgY2xvc2VkIHBhcnNlci1uZXV0cmFsIGVycm9yIHR5cGUgc2hhcGUuXG4gKiBAcGFyYW0ge3Vua25vd259IHR5cGUgLSBDYW5kaWRhdGUgZXJyb3IgdHlwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IG93bmluZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUVycm9yVHlwZVNoYXBlKC8qKiBAdHlwZSB7dW5rbm93bn0gKi8gdHlwZSxcbiAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9ICovIGxhbmd1YWdlLFxuICAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9ufSAqLyBvd25lckxvY2F0aW9uKSB7XG4gIGNvbnN0IGZpZWxkcyA9IHR5cGUgJiYgdHlwZW9mIHR5cGUgPT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh0eXBlKVxuICAgID8gT2JqZWN0LmtleXModHlwZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpIDogXCJcIlxuICBjb25zdCBjYW5kaWRhdGUgPSB0eXBlICYmIHR5cGVvZiB0eXBlID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkodHlwZSlcbiAgICA/IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovICh0eXBlKSA6IHt9XG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiRXJyb3JUeXBlXCIgfHwgZmllbGRzICE9IFwiZGVjbGFyYXRpb25JZCxraW5kXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5kZWNsYXJhdGlvbklkICE9IFwic3RyaW5nXCIgfHxcbiAgICAhL14oPzooPzpbYS16XVthLXowLTkuXy1dKiMpP2Vycm9yOlswLTldK3woPzptb2R1bGU6WzAtOV0rXFwvKT9jYXBhYmlsaXR5OlswLTldK1xcL2ZhaWx1cmU6WzAtOV0rKSQvdVxuICAgICAgLnRlc3QoY2FuZGlkYXRlLmRlY2xhcmF0aW9uSWQpKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBlcnJvciB0eXBlXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgY29tcGxldGUgc2VtYW50aWMgbG9jYXRpb24gc3VpdGFibGUgZm9yIGRpYWdub3N0aWMgY29uc3RydWN0aW9uLlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBQcmVmZXJyZWQgbG9jYXRpb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGZhbGxiYWNrIC0gTmVhcmVzdCBlbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IFNhZmUgZGlhZ25vc3RpYyBsb2NhdGlvbi5cbiAqL1xuZnVuY3Rpb24gZGlhZ25vc3RpY0xvY2F0aW9uKGNhbmRpZGF0ZSwgZmFsbGJhY2spIHtcbiAgaWYgKGlzU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUpKSByZXR1cm4gY2FuZGlkYXRlXG4gIGlmIChpc1NlbWFudGljTG9jYXRpb24oZmFsbGJhY2spKSByZXR1cm4gZmFsbGJhY2tcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogUmVxdWlyZXMgb25lIGNvbXBsZXRlIHBhcnNlci1uZXV0cmFsIGxvY2F0aW9uIGJlZm9yZSBhbnkgYmFja2VuZCBvciBkaWFnbm9zdGljIGNvbnN1bWVzIGl0LlxuICogQHBhcmFtIHt1bmtub3dufSBjYW5kaWRhdGUgLSBSZXF1aXJlZCBsb2NhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3ViamVjdCAtIExvY2F0aW9uIG93bmVyIGZvciBhIGRldGVybWluaXN0aWMgZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZmFsbGJhY2sgLSBOZWFyZXN0IGVuY2xvc2luZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbn0gVmFsaWRhdGVkIGxvY2F0aW9uLlxuICovXG5mdW5jdGlvbiByZXF1aXJlU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUsIGxhbmd1YWdlLCBzdWJqZWN0LCBmYWxsYmFjaykge1xuICBpZiAoIWlzU2VtYW50aWNMb2NhdGlvbihjYW5kaWRhdGUpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtaXNzaW5nIG9yIGludmFsaWQgJHtzdWJqZWN0fWAsIGRpYWdub3N0aWNMb2NhdGlvbihmYWxsYmFjaywgdW5kZWZpbmVkKSlcblxuICByZXR1cm4gY2FuZGlkYXRlXG59XG5cbi8qKlxuICogQ2hlY2tzIGEgY29tcGxldGUgb3JkZXJlZCBVVEYtMTYgc291cmNlIHJhbmdlLlxuICogQHBhcmFtIHt1bmtub3dufSBsb2NhdGlvbiAtIENhbmRpZGF0ZSBzb3VyY2UgcmFuZ2UuXG4gKiBAcmV0dXJucyB7bG9jYXRpb24gaXMgaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb259IFdoZXRoZXIgdGhlIHJhbmdlIGlzIHNhZmUgdG8gY29uc3VtZS5cbiAqL1xuZnVuY3Rpb24gaXNTZW1hbnRpY0xvY2F0aW9uKGxvY2F0aW9uKSB7XG4gIGlmICghbG9jYXRpb24gfHwgdHlwZW9mIGxvY2F0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShsb2NhdGlvbikpIHJldHVybiBmYWxzZVxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge3tmaWxlbmFtZT86IHVua25vd24sIHN0YXJ0PzogdW5rbm93biwgZW5kPzogdW5rbm93bn19ICovIChsb2NhdGlvbilcblxuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5maWxlbmFtZS5sZW5ndGggPT0gMCB8fFxuICAgICFpc1NlbWFudGljUG9pbnQoY2FuZGlkYXRlLnN0YXJ0KSB8fCAhaXNTZW1hbnRpY1BvaW50KGNhbmRpZGF0ZS5lbmQpKSByZXR1cm4gZmFsc2VcblxuICByZXR1cm4gY2FuZGlkYXRlLmVuZC5vZmZzZXQgPj0gY2FuZGlkYXRlLnN0YXJ0Lm9mZnNldCAmJiBjYW5kaWRhdGUuZW5kLmxpbmUgPj0gY2FuZGlkYXRlLnN0YXJ0LmxpbmUgJiZcbiAgICAoY2FuZGlkYXRlLmVuZC5saW5lICE9IGNhbmRpZGF0ZS5zdGFydC5saW5lIHx8IGNhbmRpZGF0ZS5lbmQuY29sdW1uID49IGNhbmRpZGF0ZS5zdGFydC5jb2x1bW4pXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBjb21wbGV0ZSBvbmUtYmFzZWQgVVRGLTE2IHNvdXJjZSBwb2ludC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gcG9pbnQgLSBDYW5kaWRhdGUgc291cmNlIHBvaW50LlxuICogQHJldHVybnMge3BvaW50IGlzIGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZVBvaW50fSBXaGV0aGVyIGFsbCBjb29yZGluYXRlcyBhcmUgdmFsaWQuXG4gKi9cbmZ1bmN0aW9uIGlzU2VtYW50aWNQb2ludChwb2ludCkge1xuICBpZiAoIXBvaW50IHx8IHR5cGVvZiBwb2ludCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkocG9pbnQpKSByZXR1cm4gZmFsc2VcbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHt7b2Zmc2V0PzogdW5rbm93biwgbGluZT86IHVua25vd24sIGNvbHVtbj86IHVua25vd259fSAqLyAocG9pbnQpXG5cbiAgcmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5vZmZzZXQpICYmIE51bWJlcihjYW5kaWRhdGUub2Zmc2V0KSA+PSAwICYmXG4gICAgTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLmxpbmUpICYmIE51bWJlcihjYW5kaWRhdGUubGluZSkgPj0gMSAmJlxuICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS5jb2x1bW4pICYmIE51bWJlcihjYW5kaWRhdGUuY29sdW1uKSA+PSAxXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzaW1wbGUgaWRlbnRpZmllciB0YXJnZXQgaW50cm9kdWNlZCBieSB0YXNrIDAwMi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0IC0gQ2FuZGlkYXRlIGFzc2lnbm1lbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIEFzc2lnbm1lbnQgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBc3NpZ25tZW50VGFyZ2V0KHRhcmdldCwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkodGFyZ2V0KSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGFzc2lnbm1lbnQgdGFyZ2V0XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLklkZW50aWZpZXJFeHByZXNzaW9ufSAqLyAodGFyZ2V0KVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBhc3NpZ25tZW50IHRhcmdldCAke1N0cmluZyhSZWZsZWN0LmdldCh0YXJnZXQsIFwia2luZFwiKSl9YCwgbG9jYXRpb24pXG4gIH1cblxuICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUubmFtZSwgXCJhc3NpZ25tZW50IHRhcmdldFwiLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBDaGVja3MgZXhwcmVzc2lvbiBiYWNrZW5kIGNhcGFiaWxpdGllcyByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXhwcmVzc2lvbiAtIENhbmRpZGF0ZSBzZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZSBvciBiaW5hcnkgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3Qgb3duaW5nIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmRdIC0gV2hldGhlciBKYXZhIG1heSB1c2UgMjE0NzQ4MzY0OCBvbmx5IGJlbmVhdGggaW50ZWdlciBuZWdhdGlvbi5cbiAqIEBwYXJhbSB7U2V0PG9iamVjdD59IFthY3RpdmVQYXRoXSAtIEFuY2VzdG9ycyBvbiB0aGUgY3VycmVudCByZWN1cnNpdmUgdmFsaWRhdGlvbiBwYXRoLlxuICogQHBhcmFtIHtTZXQ8c3RyaW5nPn0gW2V4dGVybmFsRGVjbGFyYXRpb25JZHNdIC0gUmVzb2x2ZWQgZGVjbGFyYXRpb25zIHdob3NlIHNvdXJjZSBzcGVsbGluZyBpcyB0YXJnZXQtaW5kZXBlbmRlbnQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0phdmFPcmRlcmVkTWFwUm9vdF0gLSBXaGV0aGVyIHRoaXMgcm9vdCBpcyBhIEphdmEgbG9jYWwgaW5pdGlhbGl6ZXIgZWxpZ2libGUgZm9yIHN0YXRlbWVudCBsb3dlcmluZy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGFsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCA9IGZhbHNlLCBhY3RpdmVQYXRoID0gbmV3IFNldCgpLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzID0gbmV3IFNldCgpLCBhbGxvd0phdmFPcmRlcmVkTWFwUm9vdCA9IGZhbHNlKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBleHByZXNzaW9uXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovIChleHByZXNzaW9uKVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKGFjdGl2ZVBhdGguaGFzKGNhbmRpZGF0ZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjeWNsaWMgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgY29uc3QgZXhwcmVzc2lvblBhdGggPSBuZXcgU2V0KGFjdGl2ZVBhdGgpXG5cbiAgZXhwcmVzc2lvblBhdGguYWRkKGNhbmRpZGF0ZSlcblxuICBpZiAodHlwZW9mIGNhbmRpZGF0ZS5raW5kICE9IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBleHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5uYW1lLCBcInJlZmVyZW5jZVwiLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwiY2xhc3NJZCxraW5kLGxvY2F0aW9uXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5jbGFzc0lkICE9IFwic3RyaW5nXCIgfHxcbiAgICAgICEvXig/OlthLXpdW2EtejAtOS5fLV0qIyk/Y2xhc3M6WzAtOV0rJC91LnRlc3QoY2FuZGlkYXRlLmNsYXNzSWQpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIHByaXZhdGUgZmllbGQgcmVjZWl2ZXJcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkVycm9yTWVzc2FnZVJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG5cbiAgICBpZiAoZmllbGRzICE9IFwia2luZCxsb2NhdGlvbixyZWNlaXZlclwiIHx8IGNhbmRpZGF0ZS5yZWNlaXZlcj8ua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgRXJyb3JNZXNzYWdlUmVhZFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRNb3ZlRXhwcmVzc2lvblwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiT3duZWRCb3Jyb3dFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IGV4cGVjdGVkID0gY2FuZGlkYXRlLmtpbmQgPT0gXCJPd25lZE1vdmVFeHByZXNzaW9uXCIgPyBcImV4cHJlc3Npb24sa2luZCxsb2NhdGlvbix0eXBlXCIgOiBcImV4cHJlc3Npb24sa2luZCxsb2NhdGlvbixtb2RlLHR5cGVcIlxuXG4gICAgaWYgKGZpZWxkcyAhPSBleHBlY3RlZCB8fCBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIiAmJiBjYW5kaWRhdGUuZXhwcmVzc2lvbi5raW5kICE9IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIgJiZcbiAgICAgIGNhbmRpZGF0ZS5leHByZXNzaW9uLmtpbmQgIT0gXCJQcml2YXRlRmllbGRSZWFkXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYG1hbGZvcm1lZCAke2NhbmRpZGF0ZS5raW5kfWAsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLnZhbHVlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgPSBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgY2FuZGlkYXRlLnZhbHVlID09IDIxNDc0ODM2NDhcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgKGNhbmRpZGF0ZS52YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IGNhbmRpZGF0ZS52YWx1ZSA+IDIxNDc0ODM2NDcpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiaW50ZWdlciBsaXRlcmFsIG91dHNpZGUgc2lnbmVkIDMyLWJpdCBpbnQgcmFuZ2VcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICgobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImdvXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiIHx8IGxhbmd1YWdlID09IFwicnVzdFwiIHx8IGxhbmd1YWdlID09IFwic3dpZnRcIikgJiYgY2FuZGlkYXRlLnZhbHVlIDwgMCB8fFxuICAgICAgKGxhbmd1YWdlID09IFwiY1wiIHx8IGxhbmd1YWdlID09IFwiY3BwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIpICYmIE9iamVjdC5pcyhjYW5kaWRhdGUudmFsdWUsIC0wKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm5lZ2F0aXZlIGludGVnZXIgbGl0ZXJhbCB3aXRob3V0IHNlbWFudGljIG5lZ2F0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm5cbiAgaWYgKFtcIk9wdGlvbmFsTm9uZVwiLCBcIk9wdGlvbmFsU29tZVwiLCBcIk9wdGlvbmFsSXNQcmVzZW50XCIsIFwiT3B0aW9uYWxVbndyYXBcIl0uaW5jbHVkZXMoY2FuZGlkYXRlLmtpbmQpKSB7XG4gICAgaWYgKCF0YXNrMDA3TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNyBvcHRpb25hbCB2YWx1ZXNcIiwgbG9jYXRpb24pXG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcbiAgICBjb25zdCBleHBlY3RlZEZpZWxkcyA9IGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxOb25lXCIgPyBcImtpbmQsbG9jYXRpb25cIiA6XG4gICAgICBjYW5kaWRhdGUua2luZCA9PSBcIk9wdGlvbmFsU29tZVwiID8gXCJraW5kLGxvY2F0aW9uLHZhbHVlXCIgOiBcImtpbmQsbG9jYXRpb24sb3BlcmFuZFwiXG5cbiAgICBpZiAoZmllbGRzICE9IGV4cGVjdGVkRmllbGRzKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBtYWxmb3JtZWQgJHtjYW5kaWRhdGUua2luZH1gLCBsb2NhdGlvbilcbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcHRpb25hbE5vbmVcIikgcmV0dXJuXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUudmFsdWUsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IG9wZXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuT3B0aW9uYWxJc1ByZXNlbnQgfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5PcHRpb25hbFVud3JhcH0gKi8gKGNhbmRpZGF0ZSlcblxuICAgIGlmICghb3BlcmF0aW9uLm9wZXJhbmQgfHwgb3BlcmF0aW9uLm9wZXJhbmQua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7Y2FuZGlkYXRlLmtpbmR9IHdpdGhvdXQgYSBzaW1wbGUgaWRlbnRpZmllciBvcGVyYW5kYCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihvcGVyYXRpb24ub3BlcmFuZCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKFtcIkxpc3RMaXRlcmFsXCIsIFwiTWFwTGl0ZXJhbFwiLCBcIk9yZGVyZWRNYXBMaXRlcmFsXCIsIFwiTGlzdEluZGV4RXhwcmVzc2lvblwiLCBcIk1hcExvb2t1cEV4cHJlc3Npb25cIiwgXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIl0uaW5jbHVkZXMoY2FuZGlkYXRlLmtpbmQpKSB7XG4gICAgaWYgKCF0YXNrMDA2TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJUYXNrIDAwNiBpbW11dGFibGUgY29sbGVjdGlvbnNcIiwgbG9jYXRpb24pXG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIiAmJiAhdGFzazAxNExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwMTQgb3JkZXJlZC1tYXAgaXRlcmF0aW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJPcmRlcmVkTWFwTGl0ZXJhbFwiICYmIGxhbmd1YWdlID09IFwiamF2YVwiICYmICFhbGxvd0phdmFPcmRlcmVkTWFwUm9vdCkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcInVuc2FmZSBKYXZhIG9yZGVyZWQtbWFwIGV4cHJlc3Npb24gbG93ZXJpbmdcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5lbGVtZW50cykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIHNwYXJzZSBsaXN0IGVsZW1lbnRzXCIsIGxvY2F0aW9uKVxuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNhbmRpZGF0ZS5lbGVtZW50cykge1xuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZWxlbWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiT3JkZXJlZE1hcExpdGVyYWxcIikge1xuICAgICAgaWYgKCFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmVudHJpZXMpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBzcGFyc2UgbWFwIGVudHJpZXNcIiwgbG9jYXRpb24pXG4gICAgICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNYXBMaXRlcmFsXCIgJiYgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgY2FuZGlkYXRlLmVudHJpZXMubGVuZ3RoID4gMTApIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImphdmEudXRpbC5NYXAub2Ygc3VwcG9ydHMgYXQgbW9zdCB0ZW4gZW50cmllc1wiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgY2FuZGlkYXRlLmVudHJpZXMpIHtcbiAgICAgICAgaWYgKCFlbnRyeSB8fCBlbnRyeS5raW5kICE9IFwiTWFwRW50cnlcIiB8fCAhZW50cnkua2V5IHx8IGVudHJ5LmtleS5raW5kICE9IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBtYXAgZW50cnlcIiwgZW50cnk/LmxvY2F0aW9uID8/IGxvY2F0aW9uKVxuICAgICAgICB9XG4gICAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihlbnRyeS5rZXksIGxhbmd1YWdlLCBlbnRyeS5sb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZW50cnkudmFsdWUsIGxhbmd1YWdlLCBlbnRyeS5sb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkxpc3RJbmRleEV4cHJlc3Npb25cIikge1xuICAgICAgaWYgKGNhbmRpZGF0ZS50b3RhbGl0eSA9PSBcImZhaWwtb24tYWJzZW5jZVwiICYmIGxhbmd1YWdlICE9IFwiamF2YVwiKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsaXN0IGFjY2VzcyBkZXBlbmRzIG9uIEphdmEtc3BlY2lmaWMgYm91bmRzIGZhaWx1cmVcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5pbmRleCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgICBpZiAoY2FuZGlkYXRlLnRvdGFsaXR5ID09IFwiZmFpbC1vbi1hYnNlbmNlXCIgJiYgbGFuZ3VhZ2UgIT0gXCJydWJ5XCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hcCBsb29rdXAgZGVwZW5kcyBvbiBSdWJ5IGZldGNoIGFic2VuY2UgZmFpbHVyZVwiLCBsb2NhdGlvbilcbiAgICAgIH1cbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUuY29sbGVjdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmtleSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHtcbiAgICAgIGlmIChjYW5kaWRhdGUuY29sbGVjdGlvbktpbmQgIT0gXCJsaXN0XCIgJiYgY2FuZGlkYXRlLmNvbGxlY3Rpb25LaW5kICE9IFwibWFwXCIpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbGxlY3Rpb24gc2l6ZSB3aXRob3V0IGEgdmFsaWRhdGVkIHJlY2VpdmVyIGtpbmRcIiwgbG9jYXRpb24pXG4gICAgICB9XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbGxlY3Rpb24sIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbklkID0gY2FuZGlkYXRlLnJlc29sdXRpb24gJiYgdHlwZW9mIGNhbmRpZGF0ZS5yZXNvbHV0aW9uID09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLnJlc29sdXRpb24pXG4gICAgICA/IFJlZmxlY3QuZ2V0KGNhbmRpZGF0ZS5yZXNvbHV0aW9uLCBcImRlY2xhcmF0aW9uSWRcIilcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICBpZiAodHlwZW9mIGRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhZXh0ZXJuYWxEZWNsYXJhdGlvbklkcy5oYXMoZGVjbGFyYXRpb25JZCkpIHtcbiAgICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLmNhbGxlZSwgXCJjYWxsZWVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghY2FuZGlkYXRlLnJlc29sdXRpb24gfHwgdHlwZW9mIGNhbmRpZGF0ZS5yZXNvbHV0aW9uICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShjYW5kaWRhdGUucmVzb2x1dGlvbikpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgcmVzb2x2ZWQgY2FsbCBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmICghQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBjYWxsIGFyZ3VtZW50c1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgaWYgKCF0YXNrMDA1TGFuZ3VhZ2VzLmhhcyhsYW5ndWFnZSkgJiYgY2FuZGlkYXRlLmFyZ3VtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNhbGwgYXJndW1lbnQgY291bnQgb3RoZXIgdGhhbiB0d29cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiRWZmZWN0Q2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG5cbiAgICBpZiAoZmllbGRzICE9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxraW5kLGxvY2F0aW9uLG9wZXJhdGlvbixyZXNvbHV0aW9uXCIgfHwgIWlzRGVuc2VBcnJheShjYW5kaWRhdGUuYXJndW1lbnRzKSB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5lZmZlY3RTaXRlSWQgIT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLm9wZXJhdGlvbiAhPSBcInN0cmluZ1wiIHx8ICFyZXNvbHV0aW9uIHx8XG4gICAgICByZXNvbHV0aW9uLmtpbmQgIT0gXCJSZXNvbHZlZEVmZmVjdE9wZXJhdGlvblNpZ25hdHVyZVwiIHx8IHJlc29sdXRpb24ub3BlcmF0aW9uSWQgIT0gY2FuZGlkYXRlLm9wZXJhdGlvbiB8fFxuICAgICAgIWlzRGVuc2VBcnJheShyZXNvbHV0aW9uLnBhcmFtZXRlclR5cGVzKSB8fCAhaXNEZW5zZUFycmF5KHJlc29sdXRpb24uZmFpbHVyZUlkcykgfHwgcmVzb2x1dGlvbi5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBhdXRob3JpemVkIGVmZmVjdCBjYWxsXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUmVmZXJlbmNlQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuICAgIGNvbnN0IHJlc29sdXRpb24gPSBjYW5kaWRhdGUucmVzb2x1dGlvblxuICAgIGNvbnN0IGVmZmVjdGZ1bEZpZWxkcyA9IFwiYXJndW1lbnRzLGVmZmVjdFNpdGVJZCxlZmZlY3RzLGZhaWx1cmVJZHMsa2luZCxsb2NhdGlvbixyZWZlcmVuY2UscmVzb2x1dGlvblwiXG4gICAgY29uc3QgcHVyZUZpZWxkcyA9IFwiYXJndW1lbnRzLGtpbmQsbG9jYXRpb24scmVmZXJlbmNlLHJlc29sdXRpb25cIlxuXG4gICAgaWYgKCFbcHVyZUZpZWxkcywgZWZmZWN0ZnVsRmllbGRzXS5pbmNsdWRlcyhmaWVsZHMpIHx8XG4gICAgICBjYW5kaWRhdGUucmVmZXJlbmNlPy5raW5kICE9IFwiUmVmZXJlbmNlVHlwZVwiICYmIGNhbmRpZGF0ZS5yZWZlcmVuY2U/LmtpbmQgIT0gXCJPd25lZFJlZmVyZW5jZVR5cGVcIiB8fFxuICAgICAgdHlwZW9mIGNhbmRpZGF0ZS5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZCAhPSBcInN0cmluZ1wiIHx8ICFpc0RlbnNlQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykgfHxcbiAgICAgICFyZXNvbHV0aW9uIHx8IHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkQ29uc3RydWN0b3JTaWduYXR1cmVcIiB8fFxuICAgICAgcmVzb2x1dGlvbi5kZWNsYXJhdGlvbklkICE9IGAke2NhbmRpZGF0ZS5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZH06Y29uc3RydWN0b3JgIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHxcbiAgICAgIGZpZWxkcyA9PSBlZmZlY3RmdWxGaWVsZHMgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5mYWlsdXJlSWRzKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVmZXJlbmNlIGNvbnN0cnVjdGlvbiBvciByZXNvbHZlZCBjb25zdHJ1Y3RvciBzaWduYXR1cmVcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykge1xuICAgICAgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiTWV0aG9kQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC5rZXlzKGNhbmRpZGF0ZSkuZmlsdGVyKChrZXkpID0+IGtleSAhPSBcInNvdXJjZVByb3ZlbmFuY2VcIikuc29ydCgpLmpvaW4oXCIsXCIpXG4gICAgY29uc3QgcmVzb2x1dGlvbiA9IGNhbmRpZGF0ZS5yZXNvbHV0aW9uXG5cbiAgICBjb25zdCBlZmZlY3RmdWxGaWVsZHMgPSBcImFyZ3VtZW50cyxlZmZlY3RTaXRlSWQsZWZmZWN0cyxmYWlsdXJlSWRzLGtpbmQsbG9jYXRpb24sbWV0aG9kLHJlY2VpdmVyLHJlc29sdXRpb25cIlxuICAgIGNvbnN0IHB1cmVGaWVsZHMgPSBcImFyZ3VtZW50cyxraW5kLGxvY2F0aW9uLG1ldGhvZCxyZWNlaXZlcixyZXNvbHV0aW9uXCJcblxuICAgIGlmICghW3B1cmVGaWVsZHMsIGVmZmVjdGZ1bEZpZWxkc10uaW5jbHVkZXMoZmllbGRzKSB8fCB0eXBlb2YgY2FuZGlkYXRlLm1ldGhvZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpIHx8ICFyZXNvbHV0aW9uIHx8IHJlc29sdXRpb24ua2luZCAhPSBcIlJlc29sdmVkTWV0aG9kU2lnbmF0dXJlXCIgfHxcbiAgICAgIHJlc29sdXRpb24uZGVjbGFyYXRpb25JZCAhPSBjYW5kaWRhdGUubWV0aG9kIHx8ICFpc0RlbnNlQXJyYXkocmVzb2x1dGlvbi5wYXJhbWV0ZXJUeXBlcykgfHxcbiAgICAgICFPYmplY3QuaGFzT3duKHJlc29sdXRpb24sIFwicmV0dXJuVHlwZVwiKSB8fCBPYmplY3QuaGFzT3duKHJlc29sdXRpb24sIFwicmVzb3VyY2VGbG93XCIpICYmXG4gICAgICAoIXJlc29sdXRpb24ucmVzb3VyY2VGbG93IHx8ICFbXCJwcmVzZXJ2ZVwiLCBcInRlcm1pbmFsXCJdLmluY2x1ZGVzKFN0cmluZyhyZXNvbHV0aW9uLnJlc291cmNlRmxvdy5raW5kKSkgfHxcbiAgICAgICAgT2JqZWN0Lmhhc093bihyZXNvbHV0aW9uLnJlc291cmNlRmxvdywgXCJ0ZXJtaW5hbEZhaWx1cmVJZFwiKSAmJiB0eXBlb2YgcmVzb2x1dGlvbi5yZXNvdXJjZUZsb3cudGVybWluYWxGYWlsdXJlSWQgIT0gXCJzdHJpbmdcIikgfHxcbiAgICAgIGZpZWxkcyA9PSBlZmZlY3RmdWxGaWVsZHMgJiZcbiAgICAgICh0eXBlb2YgY2FuZGlkYXRlLmVmZmVjdFNpdGVJZCAhPSBcInN0cmluZ1wiIHx8IGNhbmRpZGF0ZS5lZmZlY3RzPy5qb2luKFwiLFwiKSAhPSBcImhvc3RcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5mYWlsdXJlSWRzKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgcmVjZWl2ZXIgY2FsbCBvciByZXNvbHZlZCBtZXRob2Qgc2lnbmF0dXJlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJlY2VpdmVyLCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICBmb3IgKGNvbnN0IGFyZ3VtZW50IG9mIGNhbmRpZGF0ZS5hcmd1bWVudHMpIHtcbiAgICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhcmd1bWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlJlY29yZENvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJhcmd1bWVudHMsa2luZCxsb2NhdGlvbixyZWNvcmRcIiB8fCAhY2FuZGlkYXRlLnJlY29yZCB8fCBjYW5kaWRhdGUucmVjb3JkLmtpbmQgIT0gXCJSZWNvcmRUeXBlXCIgfHxcbiAgICAgIHR5cGVvZiBjYW5kaWRhdGUucmVjb3JkLmRlY2xhcmF0aW9uSWQgIT0gXCJzdHJpbmdcIiB8fCAhaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWFsZm9ybWVkIFJlY29yZENvbnN0cnVjdGlvblwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB7XG4gICAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHtcbiAgICBjb25zdCBmaWVsZHMgPSBPYmplY3Qua2V5cyhjYW5kaWRhdGUpLmZpbHRlcigoa2V5KSA9PiBrZXkgIT0gXCJzb3VyY2VQcm92ZW5hbmNlXCIpLnNvcnQoKS5qb2luKFwiLFwiKVxuXG4gICAgaWYgKGZpZWxkcyAhPSBcImZpZWxkLGtpbmQsbG9jYXRpb24scmVjZWl2ZXJcIiB8fCB0eXBlb2YgY2FuZGlkYXRlLmZpZWxkICE9IFwic3RyaW5nXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgTWVtYmVyUmVhZFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yZWNlaXZlciwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiUHJpdmF0ZUZpZWxkUmVhZFwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJmaWVsZCxraW5kLGxvY2F0aW9uLHJlY2VpdmVyXCIgfHwgdHlwZW9mIGNhbmRpZGF0ZS5maWVsZCAhPSBcInN0cmluZ1wiIHx8XG4gICAgICBjYW5kaWRhdGUucmVjZWl2ZXI/LmtpbmQgIT0gXCJSZWNlaXZlckV4cHJlc3Npb25cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1hbGZvcm1lZCBwcml2YXRlIGZpZWxkIHJlY2VpdmVyIG9yIHByaXZhdGUgZmllbGQgaWRlbnRpdHlcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmVjZWl2ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbiwgZmFsc2UsIGV4cHJlc3Npb25QYXRoLCBleHRlcm5hbERlY2xhcmF0aW9uSWRzKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKHVuYXJ5T3BlcmF0aW9uU3ludGF4LCBTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbikpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGB1bmFyeSBvcGVyYXRpb24gJHtTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbil9YCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUub3BlcmFuZCwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBjYW5kaWRhdGUub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiLCBleHByZXNzaW9uUGF0aCxcbiAgICAgIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVLbm93blRhcmdldEludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGJpbmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYmluYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5sZWZ0LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLnJpZ2h0LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUtub3duVGFyZ2V0SW50ZWdlcihjYW5kaWRhdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkNvbmRpdGlvbmFsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgZmllbGRzID0gT2JqZWN0LmtleXMoY2FuZGlkYXRlKS5maWx0ZXIoKGtleSkgPT4ga2V5ICE9IFwic291cmNlUHJvdmVuYW5jZVwiKS5zb3J0KCkuam9pbihcIixcIilcblxuICAgIGlmIChmaWVsZHMgIT0gXCJhbHRlcm5hdGUsY29uZGl0aW9uLGNvbnNlcXVlbnQsa2luZCxsb2NhdGlvbix0eXBlXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtYWxmb3JtZWQgQ29uZGl0aW9uYWxFeHByZXNzaW9uXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoIXRhc2swNDhDb25kaXRpb25hbExhbmd1YWdlcy5oYXMobGFuZ3VhZ2UpKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiVGFzayAwNDggY29uZGl0aW9uYWwgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5jb25zZXF1ZW50LCBsYW5ndWFnZSwgbG9jYXRpb24sIGZhbHNlLCBleHByZXNzaW9uUGF0aCwgZXh0ZXJuYWxEZWNsYXJhdGlvbklkcylcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uLCBmYWxzZSwgZXhwcmVzc2lvblBhdGgsIGV4dGVybmFsRGVjbGFyYXRpb25JZHMpXG4gICAgcmV0dXJuXG4gIH1cblxuICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZWplY3RzIGNvbXBpbGUtdGltZS1rbm93biBKYXZhIGludGVnZXIgb3BlcmF0aW9uIHJlc3VsdHMgb3V0c2lkZSBwcmltaXRpdmUgaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gVmFsaWRhdGVkIG9wZXJhdGlvbiBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2Ugb3IgYmluYXJ5IHRhcmdldC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gT3BlcmF0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlS25vd25UYXJnZXRJbnRlZ2VyKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbikge1xuICBjb25zdCB2YWx1ZSA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24pXG5cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgKHZhbHVlIDwgLTIxNDc0ODM2NDhuIHx8IHZhbHVlID4gMjE0NzQ4MzY0N24pKSB7XG4gICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNvbXBpbGUtdGltZS1rbm93biBpbnRlZ2VyIG9wZXJhdGlvbiBvdXRzaWRlIHNpZ25lZCAzMi1iaXQgaW50IHJhbmdlXCIsIGxvY2F0aW9uKVxuICB9XG4gIGlmICgobGFuZ3VhZ2UgPT0gXCJjc2hhcnBcIiB8fCBsYW5ndWFnZSA9PSBcImdvXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjXCIgfHwgbGFuZ3VhZ2UgPT0gXCJjcHBcIiB8fCBsYW5ndWFnZSA9PSBcInJ1c3RcIiB8fCBsYW5ndWFnZSA9PSBcInN3aWZ0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ3YXNtXCIgfHwgbGFuZ3VhZ2UgPT0gXCJ6aWdcIikgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICh2YWx1ZSA8IC05MjIzMzcyMDM2ODU0Nzc1ODA4biB8fCB2YWx1ZSA+IDkyMjMzNzIwMzY4NTQ3NzU4MDduKSkge1xuICAgIGNvbnN0IHNjYWxhciA9IGxhbmd1YWdlID09IFwid2FzbVwiIHx8IGxhbmd1YWdlID09IFwiemlnXCIgPyBcImk2NFwiIDogbGFuZ3VhZ2UgPT0gXCJzd2lmdFwiID8gXCJJbnQ2NFwiIDogXCJsb25nXCJcblxuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGNvbXBpbGUtdGltZS1rbm93biBpbnRlZ2VyIG9wZXJhdGlvbiBvdXRzaWRlIHNpZ25lZCA2NC1iaXQgJHtzY2FsYXJ9IHJhbmdlYCwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKChsYW5ndWFnZSA9PSBcImRhcnRcIiB8fCBsYW5ndWFnZSA9PSBcImtvdGxpblwiKSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgKHZhbHVlIDwgLUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikgfHwgdmFsdWUgPiBCaWdJbnQoTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSB0aGUgU2VtYW50aWZvbGQgc2FmZS1pbnRlZ2VyIHJhbmdlXCIsIGxvY2F0aW9uKVxuICB9XG59XG5cbi8qKlxuICogRXZhbHVhdGVzIG9ubHkgbGl0ZXJhbCBpbnRlZ2VyLW9wZXJhdGlvbiB0cmVlcyBmb3IgYm91bmRzIHZhbGlkYXRpb24sIG5ldmVyIElSIGZvbGRpbmcuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2JpZ2ludCB8IHVuZGVmaW5lZH0gS25vd24gbWF0aGVtYXRpY2FsIGludGVnZXIuXG4gKi9cbmZ1bmN0aW9uIGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIoZXhwcmVzc2lvbi52YWx1ZSkpIHJldHVybiBCaWdJbnQoZXhwcmVzc2lvbi52YWx1ZSlcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgY29uc3Qgb3BlcmFuZCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ub3BlcmFuZClcblxuICAgIHJldHVybiBvcGVyYW5kID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiAtb3BlcmFuZFxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgIT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHJldHVybiB1bmRlZmluZWRcblxuICBjb25zdCBsZWZ0ID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5sZWZ0KVxuICBjb25zdCByaWdodCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ucmlnaHQpXG5cbiAgaWYgKGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdW5kZWZpbmVkXG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIikgcmV0dXJuIGxlZnQgKyByaWdodFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIikgcmV0dXJuIGxlZnQgLSByaWdodFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIikgcmV0dXJuIGxlZnQgKiByaWdodFxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBFbWl0cyBvbmUgcmVjdXJzaXZlIHNlbWFudGljIHR5cGUgd2hpbGUgbWFwcGluZyBldmVyeSBjb25zdGl0dWVudCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0Z1bmN0aW9uUmV0dXJuVHlwZX0gdHlwZSAtIFNlbWFudGljIHR5cGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IHR5cGUgb2NjdXJyZW5jZSBwYXRoLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5UZXh0QmFja2VuZExhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2phdmFCb3hlZF0gLSBXaGV0aGVyIGEgSmF2YSBzY2FsYXIgaXMgYSBnZW5lcmljIGFyZ3VtZW50LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWl0VHlwZSh3cml0ZXIsIHR5cGUsIHBhdGgsIGxhbmd1YWdlLCBqYXZhQm94ZWQgPSBmYWxzZSkge1xuICBpZiAodHlwZS5raW5kID09IFwiVHlwZVZhcmlhYmxlUmVmZXJlbmNlXCIpIHtcbiAgICBjb25zdCBwYXJhbWV0ZXIgPSB3cml0ZXIudHlwZVBhcmFtZXRlckZvcklkKHR5cGUucGFyYW1ldGVySWQpXG5cbiAgICB3cml0ZXIubWFwcGVkKHBhcmFtZXRlci5uYW1lLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcGFyYW1ldGVyLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiUmVjb3JkVHlwZVwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gd3JpdGVyLnJlY29yZEZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLnJlY29yZE5hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiByZWNvcmQubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJcbiAgICB9KVxuICAgIGlmICh0eXBlLmFyZ3VtZW50cykge1xuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiW1wiIDogXCI8XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgICB0eXBlLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwicnVieVwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIsXCIgOiBcIiwgXCIsXG4gICAgICAgICAgXCJnZW5lcmljIHR5cGUgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFt0eXBlXSwgW3BhdGhdKVxuICAgICAgICBlbWl0VHlwZSh3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgICB9KVxuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiXVwiIDogXCI+XCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogdHlwZSwgcGF0aH0pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5jbGFzc0ZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNsYXNzTmFtZUZvcklkKHR5cGUuZGVjbGFyYXRpb25JZCksIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3duZWRSZXNvdXJjZVR5cGVcIikge1xuICAgIGNvbnN0IHJlc291cmNlID0gd3JpdGVyLnJlc291cmNlRm9ySWQodHlwZS5yZXNvdXJjZUlkKVxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNhcGFiaWxpdHlOb21pbmFsTmFtZShyZXNvdXJjZS5uYW1lKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IHJlc291cmNlLm5hbWUsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAodHlwZS5raW5kID09IFwiT3duZWRSZWZlcmVuY2VUeXBlXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IHdyaXRlci5jbGFzc0ZvcklkKHR5cGUuZGVjbGFyYXRpb25JZClcbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5jbGFzc05hbWVGb3JJZCh0eXBlLmRlY2xhcmF0aW9uSWQpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZGVjbGFyYXRpb24ubmFtZSwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJUeXBlUmVmZXJlbmNlXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwiamF2YVwiICYmIGphdmFCb3hlZFxuICAgICAgPyB0eXBlLm5hbWUgPT0gXCJpbnRlZ2VyXCIgPyBcIkludGVnZXJcIiA6IHR5cGUubmFtZSA9PSBcImJvb2xlYW5cIiA/IFwiQm9vbGVhblwiIDogdHlwZS5uYW1lID09IFwic3RyaW5nXCIgPyBcIlN0cmluZ1wiIDogXCJ2b2lkXCJcbiAgICAgIDogZW1pdFNjYWxhclR5cGUobGFuZ3VhZ2UsIHR5cGUpXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogdHlwZSwgcGF0aCwgcm9sZTogXCJ0eXBlXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmICh0eXBlLmtpbmQgPT0gXCJPcHRpb25hbFR5cGVcIikge1xuICAgIGNvbnN0IHByZWZpeCA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuT3B0aW9uYWw8XCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCI/XCIgOiBcIlwiXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUudmFsdWVUeXBlLCBgJHtwYXRofS92YWx1ZVR5cGVgLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiPlwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIj9cIiA6IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiID8gXCJ8bnVsbFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiID8gXCIgfCBudWxsXCIgOiBcIlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGNvbnN0IHByZWZpeCA9IHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCJcbiAgICA/IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJBcnJheVtcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcImxpc3Q8XCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5MaXN0PFwiIDogXCJSZWFkb25seUFycmF5PFwiXG4gICAgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiSGFzaFtcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcImFycmF5PFwiIDpcbiAgICAgIGxhbmd1YWdlID09IFwiamF2YVwiID8gdHlwZS5raW5kID09IFwiT3JkZXJlZE1hcFR5cGVcIiA/IFwiamF2YS51dGlsLlNlcXVlbmNlZE1hcDxcIiA6IFwiamF2YS51dGlsLk1hcDxcIiA6IFwiUmVhZG9ubHlNYXA8XCJcblxuICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IHR5cGUsIHBhdGgsIHJvbGU6IFwidHlwZVwifSlcbiAgaWYgKHR5cGUua2luZCA9PSBcIkxpc3RUeXBlXCIpIHtcbiAgICBlbWl0VHlwZSh3cml0ZXIsIHR5cGUuZWxlbWVudFR5cGUsIGAke3BhdGh9L2VsZW1lbnRUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICB9IGVsc2Uge1xuICAgIGVtaXRUeXBlKHdyaXRlciwgdHlwZS5rZXlUeXBlLCBgJHtwYXRofS9rZXlUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICAgIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJqYXZhc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgPyBcIiwgXCIgOiBcIixcIiwgXCJtYXAgdHlwZSBzZXBhcmF0b3JcIiwgW3R5cGVdLCBbcGF0aF0pXG4gICAgZW1pdFR5cGUod3JpdGVyLCB0eXBlLnZhbHVlVHlwZSwgYCR7cGF0aH0vdmFsdWVUeXBlYCwgbGFuZ3VhZ2UsIGxhbmd1YWdlID09IFwiamF2YVwiKVxuICB9XG4gIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIl1cIiA6IFwiPlwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IHR5cGUsIHBhdGh9KVxufVxuXG4vKipcbiAqIEVtaXRzIGEgc3VwcG9ydGVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IEpTT04gUG9pbnRlciBmb3IgdGhpcyBleHByZXNzaW9uIG9jY3VycmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlRleHRCYWNrZW5kTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHsobmFtZTogc3RyaW5nKSA9PiBzdHJpbmd9IGVtaXRJZGVudGlmaWVyIC0gSWRlbnRpZmllciBmb3JtYXR0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKSB7XG4gIGNvbnN0IGVmZmVjdFRlbXBvcmFyeSA9IHdyaXRlci5lZmZlY3RSZXBsYWNlbWVudE5hbWUoZXhwcmVzc2lvbilcblxuICBpZiAoZWZmZWN0VGVtcG9yYXJ5KSB7XG4gICAgd3JpdGVyLnN5bnRoZXRpYyhlbWl0SWRlbnRpZmllcihlZmZlY3RUZW1wb3JhcnkpLCBcImV4YWN0bHktb25jZSBlZmZlY3QgdGVtcG9yYXJ5IHJlYWRcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24ubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlY2VpdmVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gXCIkdGhpc1wiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcInNlbGZcIiA6IFwidGhpc1wiLFxuICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjZWl2ZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk93bmVkTW92ZUV4cHJlc3Npb25cIiB8fCBleHByZXNzaW9uLmtpbmQgPT0gXCJPd25lZEJvcnJvd0V4cHJlc3Npb25cIikge1xuICAgIGlmIChleHByZXNzaW9uLmV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoZW1pdElkZW50aWZpZXIoZXhwcmVzc2lvbi5leHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogZXhwcmVzc2lvbi5leHByZXNzaW9uLm5hbWUsXG4gICAgICAgIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibmFtZVwifSlcbiAgICB9IGVsc2UgaWYgKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5raW5kID09IFwiUmVjZWl2ZXJFeHByZXNzaW9uXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiJHRoaXNcIiA6IGxhbmd1YWdlID09IFwicnVieVwiID8gXCJzZWxmXCIgOiBcInRoaXNcIixcbiAgICAgICAge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjZWl2ZXJcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gd3JpdGVyLnByaXZhdGVGaWVsZEZvcklkKGV4cHJlc3Npb24uZXhwcmVzc2lvbi5maWVsZClcblxuICAgICAgaWYgKGxhbmd1YWdlICE9IFwicnVieVwiKSB7XG4gICAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5leHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9leHByZXNzaW9uL3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgfVxuICAgICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gYC0+JHtmaWVsZC5uYW1lfWAgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGAuIyR7ZmllbGQubmFtZX1gIDpcbiAgICAgICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBgQCR7ZmllbGQubmFtZX1gIDogYC4ke2ZpZWxkLm5hbWV9YCxcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICB9XG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwiY3NoYXJwXCIgfHwgbGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiA/IGAke2V4cHJlc3Npb24udmFsdWV9TGAgOiBTdHJpbmcoZXhwcmVzc2lvbi52YWx1ZSlcblxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICBjb25zdCBzcGVsbGluZyA9IGxhbmd1YWdlID09IFwicHl0aG9uXCIgPyBleHByZXNzaW9uLnZhbHVlID8gXCJUcnVlXCIgOiBcIkZhbHNlXCIgOiBleHByZXNzaW9uLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIl9zZW1hbnRpZm9sZEJvb2xlYW4oXCIsIFwiRGFydCBhbmFseXplZCBCb29sZWFuIGxpdGVyYWxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiKSB3cml0ZXIuc3ludGhldGljKFwiKVwiLCBcIkRhcnQgYW5hbHl6ZWQgQm9vbGVhbiBsaXRlcmFsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRTdHJpbmdMaXRlcmFsKGxhbmd1YWdlLCBleHByZXNzaW9uLnZhbHVlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxOb25lXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuT3B0aW9uYWwuZW1wdHkoKVwiIDogbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIm5pbFwiIDogXCJudWxsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiYWJzZW5jZVwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJqYXZhLnV0aWwuT3B0aW9uYWwub2YoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInNvbWVcIn0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcInNvbWVcIn0pXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi52YWx1ZSwgYCR7cGF0aH0vdmFsdWVgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxJc1ByZXNlbnRcIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcInJ1YnlcIikgd3JpdGVyLm1hcHBlZChcIiFcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZWxzZSBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLm9wZXJhbmQsIGAke3BhdGh9L29wZXJhbmRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmlzUHJlc2VudCgpXCIgOiBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IFwiLm5pbD9cIiA6IFwiICE9PSBudWxsXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIlxuICAgIH0pXG4gICAgaWYgKGxhbmd1YWdlICE9IFwicnVieVwiICYmIGxhbmd1YWdlICE9IFwiamF2YVwiKSB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbFVud3JhcFwiKSB7XG4gICAgaWYgKGxhbmd1YWdlICE9IFwiamF2YVwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJ1bndyYXBcIn0pXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIi5nZXQoKVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJ1bndyYXBcIn0pXG4gICAgfSBlbHNlIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkxpc3RMaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCJqYXZhLnV0aWwuTGlzdC5vZihcIiA6IFwiW1wiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibGlzdCBlbGVtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZWxlbWVudCwgYCR7cGF0aH0vZWxlbWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBcIl1cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICBjb25zdCBvcGVuID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcImphdmEudXRpbC5NYXAub2YoXCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwibmV3IE1hcChbXCIgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiW1wiIDogXCJ7XCJcbiAgICBjb25zdCBjbG9zZSA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIpXCIgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiA/IFwiXSlcIiA6XG4gICAgICBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJdXCIgOiBcIn1cIlxuXG4gICAgd3JpdGVyLm1hcHBlZChvcGVuLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uZW50cmllcy5mb3JFYWNoKChlbnRyeSwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGVudHJ5UGF0aCA9IGAke3BhdGh9L2VudHJpZXMvJHtpbmRleH1gXG5cbiAgICAgIGlmIChpbmRleCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwibWFwIGVudHJ5IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiB8fCBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikgd3JpdGVyLm1hcHBlZChcIltcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRofSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZW50cnkua2V5LCBgJHtlbnRyeVBhdGh9L2tleWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBcIiA9PiBcIiA6IGxhbmd1YWdlID09IFwicGhwXCIgPyBcIiA9PiBcIiA6IFwiLCBcIiwge1xuICAgICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBlbnRyeSwgcGF0aDogZW50cnlQYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICAgIH0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGVudHJ5LnZhbHVlLCBgJHtlbnRyeVBhdGh9L3ZhbHVlYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgaWYgKGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSB3cml0ZXIubWFwcGVkKFwiXVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGVudHJ5LCBwYXRoOiBlbnRyeVBhdGh9KVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChjbG9zZSwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTGlzdEluZGV4RXhwcmVzc2lvblwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbGxlY3Rpb24sIGAke3BhdGh9L2NvbGxlY3Rpb25gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmdldChcIiA6IFwiW1wiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uaW5kZXgsIGAke3BhdGh9L2luZGV4YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIilcIiA6IFwiXVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNYXBMb29rdXBFeHByZXNzaW9uXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBvcGVyYXRvciA9IGxhbmd1YWdlID09IFwicnVieVwiID8gXCIuZmV0Y2goXCIgOiBsYW5ndWFnZSA9PSBcInBocFwiID8gXCJbXCIgOiBcIi5nZXQoXCJcblxuICAgIHdyaXRlci5tYXBwZWQob3BlcmF0b3IsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5rZXksIGAke3BhdGh9L2tleWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIl1cIiA6IFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIikge1xuICAgICAgd3JpdGVyLnN5bnRoZXRpYyhcIiFcIiwgXCJzdGF0aWNhbGx5IHByb3ZlbiBtYXAgbG9va3VwXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ29sbGVjdGlvblNpemVFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJwaHBcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcImNvdW50KFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5jb2xsZWN0aW9uLCBgJHtwYXRofS9jb2xsZWN0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uY29sbGVjdGlvbiwgYCR7cGF0aH0vY29sbGVjdGlvbmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBvcGVyYXRvciA9IGxhbmd1YWdlID09IFwicnVieVwiIHx8IGxhbmd1YWdlID09IFwiamF2YVwiID8gXCIuc2l6ZVwiIDpcbiAgICAgIGV4cHJlc3Npb24uY29sbGVjdGlvbktpbmQgPT0gXCJsaXN0XCIgPyBcIi5sZW5ndGhcIiA6IFwiLnNpemVcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChgJHtvcGVyYXRvcn0ke2xhbmd1YWdlID09IFwiamF2YVwiID8gXCIoKVwiIDogXCJcIn1gLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgY29uc3QgY2FsbEFyZ3VtZW50U3VmZml4ID0gd3JpdGVyLmNhbGxBcmd1bWVudFN1ZmZpeEZvcihleHByZXNzaW9uKVxuICAgIGNvbnN0IGRhcnRNdWx0aWxpbmUgPSBsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiAoZXhwcmVzc2lvbi5hcmd1bWVudHMubGVuZ3RoID4gMCB8fCBCb29sZWFuKGNhbGxBcmd1bWVudFN1ZmZpeCkpICYmXG4gICAgICBkYXJ0RXhwcmVzc2lvbkV4Y2VlZHNQYWdlV2lkdGgod3JpdGVyLCBleHByZXNzaW9uKVxuICAgIGNvbnN0IGRhcnRJbmRlbnQgPSBkYXJ0TXVsdGlsaW5lID8gY3VycmVudExpbmVJbmRlbnQod3JpdGVyKSA6IFwiXCJcblxuICAgIHdyaXRlci5tYXBwZWQod3JpdGVyLmNhbGxOYW1lRm9yKGV4cHJlc3Npb24pLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBleHByZXNzaW9uLmNhbGxlZSwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIlxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChkYXJ0TXVsdGlsaW5lKSB3cml0ZXIuc3ludGhldGljKGAke2luZGV4ID8gXCJcIiA6IFwiXFxuXCJ9JHtkYXJ0SW5kZW50fSAgYCwgXCJEYXJ0IGFyZ3VtZW50IGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZWxzZSBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGFyZ3VtZW50LCBgJHtwYXRofS9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhcIixcXG5cIiwgXCJEYXJ0IGZvcm1hdHRlciBhcmd1bWVudCBzZXBhcmF0b3JcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgfSlcbiAgICBpZiAoY2FsbEFyZ3VtZW50U3VmZml4KSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKGRhcnRNdWx0aWxpbmUgPyBgJHtleHByZXNzaW9uLmFyZ3VtZW50cy5sZW5ndGggPyBcIlwiIDogXCJcXG5cIn0ke2RhcnRJbmRlbnR9ICAke2NhbGxBcmd1bWVudFN1ZmZpeH0sXFxuYCA6XG4gICAgICAgIGAke2V4cHJlc3Npb24uYXJndW1lbnRzLmxlbmd0aCA/IFwiLCBcIiA6IFwiXCJ9JHtjYWxsQXJndW1lbnRTdWZmaXh9YCxcbiAgICAgIFwidGFyZ2V0LWNvbnRhaW5lciBzZW1hbnRpYyBjYWxsIGFyZ3VtZW50XCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICBpZiAoZGFydE11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0SW5kZW50LCBcIkRhcnQgY2FsbCBjbG9zaW5nIGluZGVudGF0aW9uXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkVmZmVjdENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvcGVyYXRpb24gPSB3cml0ZXIuZWZmZWN0T3BlcmF0aW9uRm9ySWQoZXhwcmVzc2lvbi5vcGVyYXRpb24pXG4gICAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIHdyaXRlci5yZWZlcmVuY2VDbGFzc0VtaXNzaW9uRGVwdGggPiAwKSB7XG4gICAgICB3cml0ZXIuc3ludGhldGljKFwiTWFpbi5cIiwgXCJwcm90ZWN0ZWQgVGFzayAwMzQgaG9zdCBzdXBwb3J0IG93bmVyXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIH1cbiAgICB3cml0ZXIubWFwcGVkKHdyaXRlci5zdGRsaWJQcm92aWRlckVudHJ5Rm9yKG9wZXJhdGlvbikgPz8gb3BlcmF0aW9uLm5hbWUsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IG9wZXJhdGlvbi5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImNhbGxlZVwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGV4cHJlc3Npb24uYXJndW1lbnRzLmZvckVhY2goKGFyZ3VtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID4gMCkgd3JpdGVyLnN5bnRoZXRpYyhcIiwgXCIsIFwiZWZmZWN0IGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlJlZmVyZW5jZUNvbnN0cnVjdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSB3cml0ZXIuY2xhc3NGb3JJZChleHByZXNzaW9uLnJlZmVyZW5jZS5kZWNsYXJhdGlvbklkKVxuICAgIGNvbnN0IG5hbWUgPSB3cml0ZXIuY2xhc3NOYW1lRm9ySWQoZXhwcmVzc2lvbi5yZWZlcmVuY2UuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCBwcmVmaXggPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiA/IGAke25hbWV9Lm5ld2AgOiBgbmV3ICR7bmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHByZWZpeCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGRlY2xhcmF0aW9uLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwiY2xhc3NcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImNvbnN0cnVjdG9yIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIk1ldGhvZENhbGxFeHByZXNzaW9uXCIpIHtcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ucmVjZWl2ZXIsIGAke3BhdGh9L3JlY2VpdmVyYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIGNvbnN0IG1ldGhvZCA9IHdyaXRlci5tZXRob2RGb3JJZChleHByZXNzaW9uLm1ldGhvZClcblxuICAgIHdyaXRlci5tYXBwZWQoYCR7bGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IFwiLT5cIiA6IFwiLlwifSR7bWV0aG9kLm5hbWV9YCwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogbWV0aG9kLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJtZXRob2QgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICBjb25zdCByZWNvcmQgPSB3cml0ZXIucmVjb3JkRm9ySWQoZXhwcmVzc2lvbi5yZWNvcmQuZGVjbGFyYXRpb25JZClcbiAgICBjb25zdCB0YXJnZXROYW1lID0gd3JpdGVyLnJlY29yZE5hbWVGb3JJZChleHByZXNzaW9uLnJlY29yZC5kZWNsYXJhdGlvbklkLCB0cnVlKVxuICAgIGNvbnN0IHByZWZpeCA9IGxhbmd1YWdlID09IFwicnVieVwiID8gYCR7dGFyZ2V0TmFtZX0ubmV3YCA6IGBuZXcgJHt0YXJnZXROYW1lfWBcblxuICAgIHdyaXRlci5tYXBwZWQocHJlZml4LCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbmFtZTogcmVjb3JkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwicmVjb3JkXCJ9KVxuICAgIGlmICgobGFuZ3VhZ2UgPT0gXCJ0eXBlc2NyaXB0XCIgfHwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpICYmIGV4cHJlc3Npb24ucmVjb3JkLmFyZ3VtZW50cykge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIjxcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLnJlY29yZCwgcGF0aDogYCR7cGF0aH0vcmVjb3JkYH0pXG4gICAgICBleHByZXNzaW9uLnJlY29yZC5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBcIixcIiA6IFwiLCBcIiwgXCJnZW5lcmljIGNvbnN0cnVjdGlvbiBhcmd1bWVudCBzZXBhcmF0b3JcIixcbiAgICAgICAgICBbZXhwcmVzc2lvbi5yZWNvcmRdLCBbYCR7cGF0aH0vcmVjb3JkYF0pXG4gICAgICAgIGVtaXRUeXBlKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L3JlY29yZC9hcmd1bWVudHMvJHtpbmRleH1gLCBsYW5ndWFnZSwgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIpXG4gICAgICB9KVxuICAgICAgd3JpdGVyLm1hcHBlZChcIj5cIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLnJlY29yZCwgcGF0aDogYCR7cGF0aH0vcmVjb3JkYH0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZXhwcmVzc2lvbi5hcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoaW5kZXggPiAwKSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJyZWNvcmQgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCwgYCR7cGF0aH0vYXJndW1lbnRzLyR7aW5kZXh9YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIH0pXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWVtYmVyUmVhZFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICBjb25zdCBmaWVsZCA9IHdyaXRlci5maWVsZEZvcklkKGV4cHJlc3Npb24uZmllbGQpXG4gICAgY29uc3QgcGhwR2VuZXJpY1JlY29yZCA9IGxhbmd1YWdlID09IFwicGhwXCIgJiZcbiAgICAgICh3cml0ZXIucmVjb3JkRm9yRmllbGRJZChleHByZXNzaW9uLmZpZWxkKS50eXBlUGFyYW1ldGVycz8ubGVuZ3RoID8/IDApID4gMFxuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiA/IGAtPiR7ZmllbGQubmFtZX0ke3BocEdlbmVyaWNSZWNvcmQgPyBcIigpXCIgOiBcIlwifWAgOlxuICAgICAgbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBgLiR7ZmllbGQubmFtZX0oKWAgOiBgLiR7ZmllbGQubmFtZX1gXG5cbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJtZW1iZXJcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlByaXZhdGVGaWVsZFJlYWRcIikge1xuICAgIGNvbnN0IGZpZWxkID0gd3JpdGVyLnByaXZhdGVGaWVsZEZvcklkKGV4cHJlc3Npb24uZmllbGQpXG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJydWJ5XCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoYEAke2ZpZWxkLm5hbWV9YCwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5hbWU6IGZpZWxkLm5hbWUsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibWVtYmVyXCJ9KVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yZWNlaXZlciwgYCR7cGF0aH0vcmVjZWl2ZXJgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChsYW5ndWFnZSA9PSBcInBocFwiID8gYC0+JHtmaWVsZC5uYW1lfWAgOiBsYW5ndWFnZSA9PSBcImphdmFzY3JpcHRcIiA/IGAuIyR7ZmllbGQubmFtZX1gIDogYC4ke2ZpZWxkLm5hbWV9YCxcbiAgICAgIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBuYW1lOiBmaWVsZC5uYW1lLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiRXJyb3JNZXNzYWdlUmVhZFwiKSB7XG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJlY2VpdmVyLCBgJHtwYXRofS9yZWNlaXZlcmAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicGhwXCIgPyBcIi0+Z2V0TWVzc2FnZSgpXCIgOiBsYW5ndWFnZSA9PSBcImphdmFcIiA/IFwiLmdldE1lc3NhZ2UoKVwiIDogXCIubWVzc2FnZVwiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm1lbWJlclwiXG4gICAgfSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb25kaXRpb25hbEV4cHJlc3Npb25cIikge1xuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbmRpdGlvbiwgYCR7cGF0aH0vY29uZGl0aW9uYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIgPyBcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmNvbnNlcXVlbnQsIGAke3BhdGh9L2NvbnNlcXVlbnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIiA6IFwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjb2xvblwifSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24uYWx0ZXJuYXRlLCBgJHtwYXRofS9hbHRlcm5hdGVgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmIChsYW5ndWFnZSA9PSBcImRhcnRcIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgICAgZW1pdERhcnRJbnRlZ2VySGVscGVyKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgXCJfc2VtYW50aWZvbGRJbnRlZ2VyTmVnYXRlXCIsIFtcbiAgICAgICAgW2V4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGBdXG4gICAgICBdKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGlmIChsYW5ndWFnZSA9PSBcImtvdGxpblwiICYmIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiKSB7XG4gICAgICBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIFwic2VtYW50aWZvbGRfaW50ZWdlcl9uZWdhdGVcIiwgW1xuICAgICAgICBbZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYF1cbiAgICAgIF0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgaWYgKGxhbmd1YWdlID09IFwiY3NoYXJwXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCJjaGVja2VkKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgICAgd3JpdGVyLm1hcHBlZChcIi1cIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJCb29sZWFuTm90XCIgPyBcIm5vdCBcIiA6IHVuYXJ5T3BlcmF0aW9uU3ludGF4W2V4cHJlc3Npb24ub3BlcmF0aW9uXSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ub3BlcmFuZCwgYCR7cGF0aH0vb3BlcmFuZGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiZGFydFwiICYmIFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgY29uc3QgaGVscGVyID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIgPyBcIl9zZW1hbnRpZm9sZEludGVnZXJBZGRcIiA6XG4gICAgICBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiID8gXCJfc2VtYW50aWZvbGRJbnRlZ2VyU3VidHJhY3RcIiA6IFwiX3NlbWFudGlmb2xkSW50ZWdlck11bHRpcGx5XCJcblxuICAgIGVtaXREYXJ0SW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgW1xuICAgICAgW2V4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGBdLCBbZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgXVxuICAgIF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiBbXCJJbnRlZ2VyQWRkXCIsIFwiSW50ZWdlclN1YnRyYWN0XCIsIFwiSW50ZWdlck11bHRpcGx5XCJdLmluY2x1ZGVzKGV4cHJlc3Npb24ub3BlcmF0aW9uKSkge1xuICAgIGNvbnN0IGhlbHBlciA9IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiID8gXCJzZW1hbnRpZm9sZF9pbnRlZ2VyX2FkZFwiIDpcbiAgICAgIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIgPyBcInNlbWFudGlmb2xkX2ludGVnZXJfc3VidHJhY3RcIiA6IFwic2VtYW50aWZvbGRfaW50ZWdlcl9tdWx0aXBseVwiXG5cbiAgICBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgW1xuICAgICAgW2V4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGBdLCBbZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgXVxuICAgIF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJrb3RsaW5cIiAmJiB3cml0ZXIudXNlc01ldGhvZFN0cmluZ0VxdWFsaXR5KCkgJiZcbiAgICAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpIHtcbiAgICAgIHdyaXRlci5tYXBwZWQoXCIhXCIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIH1cbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiLmVxdWFscyhcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKSlcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChsYW5ndWFnZSA9PSBcImNzaGFycFwiICYmIFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgd3JpdGVyLm1hcHBlZChcImNoZWNrZWQoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIHdyaXRlci5tYXBwZWQoYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcoZXhwcmVzc2lvbi5vcGVyYXRpb24sIGxhbmd1YWdlKSwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwiamF2YVwiICYmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ0VxdWFsXCIgfHwgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSkge1xuICAgIGNvbnN0IGNvbXBvc2l0ZU9wZXJhdG9yID0gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIilcblxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikge1xuICAgICAgd3JpdGVyLm1hcHBlZChcIiFcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gICAgfVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQsIGAke3BhdGh9L2xlZnRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKFwiLmVxdWFsc1wiLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBjb21wb3NpdGVPcGVyYXRvciA/IFwiZXF1YWxpdHlPcGVyYXRvclwiIDogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGxhbmd1YWdlID09IFwic3dpZnRcIiAmJiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdFcXVhbFwiIHx8IGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nTm90RXF1YWxcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiA/IFwic2VtYW50aWZvbGRfc3RyaW5nX2VxdWFsXCIgOiBcInNlbWFudGlmb2xkX3N0cmluZ19ub3RfZXF1YWxcIiwge1xuICAgICAgbWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwiXG4gICAgfSlcbiAgICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIlN3aWZ0IHNjYWxhci1lcXVhbGl0eSBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgYXJndW1lbnQgc2VwYXJhdG9yXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gICAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJTd2lmdCBzY2FsYXItZXF1YWxpdHkgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkYXJ0TXVsdGlsaW5lID0gbGFuZ3VhZ2UgPT0gXCJkYXJ0XCIgJiYgZGFydEV4cHJlc3Npb25FeGNlZWRzUGFnZVdpZHRoKHdyaXRlciwgZXhwcmVzc2lvbilcbiAgY29uc3QgZGFydEluZGVudCA9IGRhcnRNdWx0aWxpbmUgPyBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIDogXCJcIlxuXG4gIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5sZWZ0LCBgJHtwYXRofS9sZWZ0YCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICB3cml0ZXIuc3ludGhldGljKFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIGNvbnN0IHNwZWxsaW5nID0gYmluYXJ5T3BlcmF0aW9uU3BlbGxpbmcoZXhwcmVzc2lvbi5vcGVyYXRpb24sIGxhbmd1YWdlKVxuXG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIgJiYgd3JpdGVyLmhhc1JhbmdlKGV4cHJlc3Npb24sIHBhdGgsIFwiZXF1YWxpdHlPcGVyYXRvclwiKSkge1xuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcuc2xpY2UoMCwgMSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICAgIHdyaXRlci5tYXBwZWQoc3BlbGxpbmcuc2xpY2UoMSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImVxdWFsaXR5T3BlcmF0b3JcIn0pXG4gIH0gZWxzZSB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhkYXJ0TXVsdGlsaW5lID8gYFxcbiR7ZGFydEluZGVudH0gICAgYCA6IFwiIFwiLCBcIm9wZXJhdG9yIHNwYWNpbmdcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5yaWdodCwgYCR7cGF0aH0vcmlnaHRgLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpXG4gIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG59XG5cbi8qKlxuICogRW1pdHMgYSBLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciB3aGlsZSBwcmVzZXJ2aW5nIHRoZSBzZW1hbnRpYyBvcGVyYXRvciByYW5nZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gT3BlcmF0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBPcGVyYXRpb24gcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWxwZXIgLSBFeGFjdCB0YXJnZXQgaGVscGVyLlxuICogQHBhcmFtIHtbaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nXVtdfSBvcGVyYW5kcyAtIE9yZGVyZWQgb3BlcmFuZHMgYW5kIHBhdGhzLlxuICovXG5mdW5jdGlvbiBlbWl0S290bGluSW50ZWdlckhlbHBlcih3cml0ZXIsIGV4cHJlc3Npb24sIHBhdGgsIGhlbHBlciwgb3BlcmFuZHMpIHtcbiAgd3JpdGVyLm1hcHBlZChoZWxwZXIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIktvdGxpbiBjaGVja2VkLWludGVnZXIgaGVscGVyIGNhbGxcIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gIG9wZXJhbmRzLmZvckVhY2goKFtvcGVyYW5kLCBvcGVyYW5kUGF0aF0sIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4KSB3cml0ZXIuc3ludGhldGljKFwiLCBcIiwgXCJLb3RsaW4gY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIG9wZXJhbmQsIG9wZXJhbmRQYXRoLCBcImtvdGxpblwiLCBpZGVudGl0eUlkZW50aWZpZXIpXG4gIH0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIpXCIsIFwiS290bGluIGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBFbWl0cyBhIGNvbXBpbGVyLW93bmVkIERhcnQgY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3dyaXRlci5qc1wiKS5Tb3VyY2VXcml0ZXJ9IHdyaXRlciBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIE9wZXJhdGlvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIE9wZXJhdGlvbiBwYXRoLlxuICogQHBhcmFtIHtzdHJpbmd9IGhlbHBlciBFeGFjdCB0YXJnZXQgaGVscGVyLlxuICogQHBhcmFtIHtbaW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbiwgc3RyaW5nXVtdfSBvcGVyYW5kcyBPcmRlcmVkIG9wZXJhbmRzIGFuZCBwYXRocy5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBlbWl0RGFydEludGVnZXJIZWxwZXIod3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBoZWxwZXIsIG9wZXJhbmRzKSB7XG4gIGNvbnN0IGZsYXRMZW5ndGggPSBoZWxwZXIubGVuZ3RoICsgMiArIG9wZXJhbmRzLnJlZHVjZSgodG90YWwsIFtvcGVyYW5kXSwgaW5kZXgpID0+XG4gICAgdG90YWwgKyBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBvcGVyYW5kKS5sZW5ndGggKyAoaW5kZXggPyAyIDogMCksIDApXG4gIGNvbnN0IG11bHRpbGluZSA9IHdyaXRlci5jb2x1bW4gLSAxICsgZmxhdExlbmd0aCA+IDgwXG4gIGNvbnN0IGluZGVudCA9IG11bHRpbGluZSA/IGN1cnJlbnRMaW5lSW5kZW50KHdyaXRlcikgOiBcIlwiXG5cbiAgd3JpdGVyLm1hcHBlZChoZWxwZXIsIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJ9KVxuICB3cml0ZXIuc3ludGhldGljKFwiKFwiLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGhlbHBlciBjYWxsXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBvcGVyYW5kcy5mb3JFYWNoKChbb3BlcmFuZCwgb3BlcmFuZFBhdGhdLCBpbmRleCkgPT4ge1xuICAgIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoYCR7aW5kZXggPyBcIlwiIDogXCJcXG5cIn0ke2luZGVudH0gIGAsIFwiRGFydCBjaGVja2VkLWludGVnZXIgYXJndW1lbnQgaW5kZW50YXRpb25cIiwgW2V4cHJlc3Npb25dLCBbcGF0aF0pXG4gICAgZWxzZSBpZiAoaW5kZXgpIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcIkRhcnQgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIG9wZXJhbmQsIG9wZXJhbmRQYXRoLCBcImRhcnRcIiwgaWRlbnRpdHlJZGVudGlmaWVyKVxuICAgIGlmIChtdWx0aWxpbmUpIHdyaXRlci5zeW50aGV0aWMoXCIsXFxuXCIsIFwiRGFydCBmb3JtYXR0ZXIgY2hlY2tlZC1pbnRlZ2VyIGFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgfSlcbiAgaWYgKG11bHRpbGluZSkgd3JpdGVyLnN5bnRoZXRpYyhpbmRlbnQsIFwiRGFydCBjaGVja2VkLWludGVnZXIgY2xvc2luZyBpbmRlbnRhdGlvblwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIilcIiwgXCJEYXJ0IGNoZWNrZWQtaW50ZWdlciBoZWxwZXIgY2FsbFwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgRGFydCdzIGRlZmF1bHQgODAtY29sdW1uIGZvcm1hdHRlciBtdXN0IHNwbGl0IGFuIGV4cHJlc3Npb24gYXQgdGhlIGN1cnJlbnQgc2l0ZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGZsYXQgZXhwcmVzc2lvbiBjcm9zc2VzIHRoZSBmb3JtYXR0ZXIgYm91bmRhcnkuXG4gKi9cbmZ1bmN0aW9uIGRhcnRFeHByZXNzaW9uRXhjZWVkc1BhZ2VXaWR0aCh3cml0ZXIsIGV4cHJlc3Npb24pIHtcbiAgcmV0dXJuIHdyaXRlci5jb2x1bW4gLSAxICsgZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbikubGVuZ3RoID4gODBcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdlbmVyYXRlZCBsaW5lJ3Mgc3RydWN0dXJhbCBpbmRlbnRhdGlvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IExlYWRpbmcgc3BhY2VzLlxuICovXG5mdW5jdGlvbiBjdXJyZW50TGluZUluZGVudCh3cml0ZXIpIHtcbiAgcmV0dXJuIC9eICovdS5leGVjKHdyaXRlci5jb2RlLnNsaWNlKHdyaXRlci5jb2RlLmxhc3RJbmRleE9mKFwiXFxuXCIpICsgMSkpPy5bMF0gPz8gXCJcIlxufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGJvdW5kZWQgVGFzay0wMDUgRGFydCBleHByZXNzaW9uIHByb2ZpbGUgd2l0aG91dCBtYXBwaW5ncyBmb3IgcGFnZS13aWR0aCBwbGFubmluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge3N0cmluZ30gRmxhdCBjYW5vbmljYWwgc3BlbGxpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSByZXR1cm4gZXhwcmVzc2lvbi5uYW1lXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSByZXR1cm4gU3RyaW5nKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiKSByZXR1cm4gYF9zZW1hbnRpZm9sZEJvb2xlYW4oJHtleHByZXNzaW9uLnZhbHVlID8gXCJ0cnVlXCIgOiBcImZhbHNlXCJ9KWBcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlN0cmluZ0xpdGVyYWxcIikgcmV0dXJuIGVtaXRTdHJpbmdMaXRlcmFsKFwiZGFydFwiLCBleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGFyZ3VtZW50c18gPSBleHByZXNzaW9uLmFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBhcmd1bWVudCkpXG4gICAgY29uc3QgY2FsbEFyZ3VtZW50U3VmZml4ID0gd3JpdGVyLmNhbGxBcmd1bWVudFN1ZmZpeEZvcihleHByZXNzaW9uKVxuXG4gICAgaWYgKGNhbGxBcmd1bWVudFN1ZmZpeCkgYXJndW1lbnRzXy5wdXNoKGNhbGxBcmd1bWVudFN1ZmZpeClcblxuICAgIHJldHVybiBgJHt3cml0ZXIuY2FsbE5hbWVGb3IoZXhwcmVzc2lvbil9KCR7YXJndW1lbnRzXy5qb2luKFwiLCBcIil9KWBcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kID0gZmxhdERhcnRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kKVxuXG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiID8gYF9zZW1hbnRpZm9sZEludGVnZXJOZWdhdGUoJHtvcGVyYW5kfSlgIDogYCghJHtvcGVyYW5kfSlgXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGNvbnN0IGxlZnQgPSBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLmxlZnQpXG4gICAgY29uc3QgcmlnaHQgPSBmbGF0RGFydEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0KVxuXG4gICAgaWYgKFtcIkludGVnZXJBZGRcIiwgXCJJbnRlZ2VyU3VidHJhY3RcIiwgXCJJbnRlZ2VyTXVsdGlwbHlcIl0uaW5jbHVkZXMoZXhwcmVzc2lvbi5vcGVyYXRpb24pKSB7XG4gICAgICBjb25zdCBoZWxwZXIgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJBZGRcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlckFkZFwiIDpcbiAgICAgICAgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyU3VidHJhY3RcIiA/IFwiX3NlbWFudGlmb2xkSW50ZWdlclN1YnRyYWN0XCIgOiBcIl9zZW1hbnRpZm9sZEludGVnZXJNdWx0aXBseVwiXG5cbiAgICAgIHJldHVybiBgJHtoZWxwZXJ9KCR7bGVmdH0sICR7cmlnaHR9KWBcbiAgICB9XG4gICAgcmV0dXJuIGAoJHtsZWZ0fSAke2JpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBcImRhcnRcIil9ICR7cmlnaHR9KWBcbiAgfVxuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5zdXBwb3J0ZWQgRGFydCBleHByZXNzaW9uIHJlYWNoZWQgZm9ybWF0dGVyIHBsYW5uaW5nIGFmdGVyIHByZWZsaWdodC5cIilcbn1cblxuLyoqXG4gKiBQcmVzZXJ2ZXMgYSBLb3RsaW4gaWRlbnRpZmllciBzcGVsbGluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gSWRlbnRpZmllciBzcGVsbGluZy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFVuY2hhbmdlZCBzcGVsbGluZy5cbiAqL1xuZnVuY3Rpb24gaWRlbnRpdHlJZGVudGlmaWVyKG5hbWUpIHtcbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgSmF2YVNjcmlwdC1mYW1pbHkgZXhlY3V0aW9uIGNhbiBjcmVhdGUgSUVFRS03NTQgc2lnbmVkIHplcm8uXG4gKiBTZW1hbnRpZm9sZCBpbnRlZ2VycyBoYXZlIG9uZSBtYXRoZW1hdGljYWwgemVybywgc28gdGhvc2UgdGFyZ2V0cyBjYW5vbmljYWxpemVcbiAqIHRoZWlyIG9ic2VydmFibGUgc2NhbGFyIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcGVyYXRpb24gdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBjYW5vbmljYWwgb3V0cHV0IHJlbmRlcmluZyBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzQ2Fub25pY2FsWmVyb1JlbmRlcmluZyhtb2R1bGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5mdW5jdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGRlY2xhcmF0aW9uLmJvZHkpKSB8fFxuICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBibG9jayBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGEgbmVzdGVkIGV4cHJlc3Npb24gY2FuIHByb2R1Y2Ugc2lnbmVkIHplcm8gaW4gSmF2YVNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbmRpdGlvbikgfHxcbiAgICAgICAgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbnNlcXVlbnQpIHx8XG4gICAgICAgIEJvb2xlYW4oc3RhdGVtZW50LmFsdGVybmF0ZSAmJiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYWx0ZXJuYXRlKSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiRm9yRWFjaFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQubGlzdCkgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkZvckVhY2hNYXBTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50Lm1hcCkgfHwgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmJvZHkpXG4gICAgfVxuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIldoaWxlU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5jb25kaXRpb24pIHx8IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJUcnlTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5ib2R5KSB8fCBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuY2F0Y2hCb2R5KVxuICAgIH1cbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJSYWlzZVN0YXRlbWVudFwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXJyb3IubWVzc2FnZSlcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKHN0YXRlbWVudC5pbml0aWFsaXplcilcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJBc3NpZ25tZW50U3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJFeHByZXNzaW9uU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKHN0YXRlbWVudC5leHByZXNzaW9uICYmIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmV4cHJlc3Npb24pKVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9KVxufVxuXG4vKipcbiAqIENoZWNrcyBvbmUgZXhwcmVzc2lvbiB0cmVlIGZvciBzaWduLXByb2R1Y2luZyBpbnRlZ2VyIG9wZXJhdGlvbnMuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBTZW1hbnRpYyBleHByZXNzaW9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB0cmVlIGNvbnRhaW5zIGludGVnZXIgbmVnYXRpb24gb3IgbXVsdGlwbGljYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIgfHwgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5sZWZ0KSB8fFxuICAgICAgZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLnJpZ2h0KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24uYXJndW1lbnRzLnNvbWUoKGFyZ3VtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGFyZ3VtZW50KSlcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiUmVjb3JkQ29uc3RydWN0aW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5hcmd1bWVudHMuc29tZSgoYXJndW1lbnQpID0+IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYXJndW1lbnQpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJNZW1iZXJSZWFkXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ucmVjZWl2ZXIpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0TGl0ZXJhbFwiKSByZXR1cm4gZXhwcmVzc2lvbi5lbGVtZW50cy5zb21lKChlbGVtZW50KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVsZW1lbnQpKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTGl0ZXJhbFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9yZGVyZWRNYXBMaXRlcmFsXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5lbnRyaWVzLnNvbWUoKGVudHJ5KSA9PiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGVudHJ5LmtleSkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZW50cnkudmFsdWUpKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJMaXN0SW5kZXhFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLmNvbGxlY3Rpb24pIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5pbmRleClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiTWFwTG9va3VwRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKSB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ua2V5KVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJDb2xsZWN0aW9uU2l6ZUV4cHJlc3Npb25cIikgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5jb2xsZWN0aW9uKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiT3B0aW9uYWxTb21lXCIpIHJldHVybiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJPcHRpb25hbElzUHJlc2VudFwiIHx8IGV4cHJlc3Npb24ua2luZCA9PSBcIk9wdGlvbmFsVW53cmFwXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihleHByZXNzaW9uLm9wZXJhbmQpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgc3ludGF4LnB5dGhvbikgcmV0dXJuIHN5bnRheC5weXRob25cbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19
|