semantifold 0.1.1 → 0.2.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 +13 -6
- package/build/index.d.ts +32 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +99 -4
- package/build/src/acceptance.d.ts +22 -0
- package/build/src/acceptance.d.ts.map +1 -0
- package/build/src/acceptance.js +339 -0
- package/build/src/array.d.ts +7 -0
- package/build/src/array.d.ts.map +1 -0
- package/build/src/array.js +18 -0
- package/build/src/artifact-path.d.ts +13 -0
- package/build/src/artifact-path.d.ts.map +1 -0
- package/build/src/artifact-path.js +30 -0
- package/build/src/artifacts.d.ts +7 -0
- package/build/src/artifacts.d.ts.map +1 -0
- package/build/src/artifacts.js +389 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +10 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +19 -37
- package/build/src/backends/python.d.ts +8 -0
- package/build/src/backends/python.d.ts.map +1 -0
- package/build/src/backends/python.js +162 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +2 -1
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +9 -6
- package/build/src/binary-mapping.d.ts +32 -0
- package/build/src/binary-mapping.d.ts.map +1 -0
- package/build/src/binary-mapping.js +285 -0
- package/build/src/diagnostic.d.ts +36 -4
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +42 -3
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +5 -23
- package/build/src/frontends/python.d.ts +14 -0
- package/build/src/frontends/python.d.ts.map +1 -0
- package/build/src/frontends/python.js +615 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +6 -1
- package/build/src/language-registry.d.ts +113 -0
- package/build/src/language-registry.d.ts.map +1 -0
- package/build/src/language-registry.js +372 -0
- package/build/src/mapping.js +3 -2
- package/build/src/semantic/location.d.ts +7 -0
- package/build/src/semantic/location.d.ts.map +1 -1
- package/build/src/semantic/location.js +10 -1
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +399 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +110 -2
- package/build/src/subprocess.d.ts +29 -0
- package/build/src/subprocess.d.ts.map +1 -0
- package/build/src/subprocess.js +207 -0
- package/build/src/timeout.d.ts +8 -0
- package/build/src/timeout.d.ts.map +1 -0
- package/build/src/timeout.js +11 -0
- package/build/src/toolchains.d.ts +83 -0
- package/build/src/toolchains.d.ts.map +1 -0
- package/build/src/toolchains.js +413 -0
- package/docs/architecture.md +7 -3
- package/docs/language-support.md +25 -4
- package/docs/parser-qualification.md +70 -0
- package/docs/source-maps.md +31 -4
- package/docs/testing.md +21 -2
- package/index.js +109 -4
- package/package.json +4 -2
- package/src/acceptance.js +359 -0
- package/src/array.js +19 -0
- package/src/artifact-path.js +34 -0
- package/src/artifacts.js +420 -0
- package/src/backends/identifiers.js +9 -1
- package/src/backends/index.js +16 -32
- package/src/backends/python.js +175 -0
- package/src/backends/scalars.js +1 -0
- package/src/backends/shared.js +8 -5
- package/src/binary-mapping.js +305 -0
- package/src/diagnostic.js +34 -2
- package/src/frontends/index.js +5 -20
- package/src/frontends/python.js +689 -0
- package/src/frontends/scalars.js +5 -0
- package/src/language-registry.js +403 -0
- package/src/mapping.js +2 -1
- package/src/semantic/location.js +10 -0
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +124 -1
- package/src/subprocess.js +203 -0
- package/src/timeout.js +12 -0
- package/src/toolchains.js +444 -0
- package/tsconfig.json +1 -0
|
@@ -5,12 +5,12 @@ import { validateTargetBindingIdentifier, validateTargetIdentifier } from "./ide
|
|
|
5
5
|
import { emitStringLiteral } from "./scalars.js";
|
|
6
6
|
/** @type {Readonly<Record<import("../semantic/types.js").SemanticUnaryOperation, string>>} */
|
|
7
7
|
const unaryOperationSyntax = Object.freeze({ BooleanNot: "!", IntegerNegate: "-" });
|
|
8
|
-
/** @type {Readonly<Record<import("../semantic/types.js").SemanticBinaryOperation, Readonly<{default: string, php?: string, strict?: string}>>>} */
|
|
8
|
+
/** @type {Readonly<Record<import("../semantic/types.js").SemanticBinaryOperation, Readonly<{default: string, php?: string, python?: string, strict?: string}>>>} */
|
|
9
9
|
const binaryOperationSyntax = Object.freeze({
|
|
10
|
-
BooleanAnd: Object.freeze({ default: "&&" }),
|
|
10
|
+
BooleanAnd: Object.freeze({ default: "&&", python: "and" }),
|
|
11
11
|
BooleanEqual: Object.freeze({ default: "==", strict: "===" }),
|
|
12
12
|
BooleanNotEqual: Object.freeze({ default: "!=", strict: "!==" }),
|
|
13
|
-
BooleanOr: Object.freeze({ default: "||" }),
|
|
13
|
+
BooleanOr: Object.freeze({ default: "||", python: "or" }),
|
|
14
14
|
IntegerAdd: Object.freeze({ default: "+" }),
|
|
15
15
|
IntegerEqual: Object.freeze({ default: "==", strict: "===" }),
|
|
16
16
|
IntegerGreaterThan: Object.freeze({ default: ">" }),
|
|
@@ -299,7 +299,8 @@ export function emitExpression(writer, expression, path, language, emitIdentifie
|
|
|
299
299
|
return;
|
|
300
300
|
}
|
|
301
301
|
if (expression.kind == "BooleanLiteral") {
|
|
302
|
-
|
|
302
|
+
const spelling = language == "python" ? expression.value ? "True" : "False" : expression.value ? "true" : "false";
|
|
303
|
+
writer.mapped(spelling, { mappingKind: "exact", node: expression, path, role: "literal" });
|
|
303
304
|
return;
|
|
304
305
|
}
|
|
305
306
|
if (expression.kind == "StringLiteral") {
|
|
@@ -319,7 +320,7 @@ export function emitExpression(writer, expression, path, language, emitIdentifie
|
|
|
319
320
|
}
|
|
320
321
|
if (expression.kind == "UnaryExpression") {
|
|
321
322
|
writer.mapped("(", { mappingKind: "anchor", node: expression, path });
|
|
322
|
-
writer.mapped(unaryOperationSyntax[expression.operation], {
|
|
323
|
+
writer.mapped(language == "python" && expression.operation == "BooleanNot" ? "not " : unaryOperationSyntax[expression.operation], {
|
|
323
324
|
mappingKind: "exact", node: expression, path, role: "operator"
|
|
324
325
|
});
|
|
325
326
|
emitExpression(writer, expression.operand, `${path}/operand`, language, emitIdentifier);
|
|
@@ -417,8 +418,10 @@ function binaryOperationSpelling(operation, language) {
|
|
|
417
418
|
const syntax = binaryOperationSyntax[operation];
|
|
418
419
|
if (language == "php" && syntax.php)
|
|
419
420
|
return syntax.php;
|
|
421
|
+
if (language == "python" && syntax.python)
|
|
422
|
+
return syntax.python;
|
|
420
423
|
if ((language == "php" || language == "javascript" || language == "typescript") && syntax.strict)
|
|
421
424
|
return syntax.strict;
|
|
422
425
|
return syntax.default;
|
|
423
426
|
}
|
|
424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDNUQsT0FBTyxFQUFDLCtCQUErQixFQUFFLHdCQUF3QixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlDLDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG1KQUFtSjtBQUNuSixNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFDLENBQUM7SUFDMUMsWUFBWSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUMzRCxlQUFlLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzlELFNBQVMsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO0lBQ3pDLFVBQVUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBQyxDQUFDO0lBQ3pDLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxF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cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRUeXBlc30gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyfSBmcm9tIFwiLi9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge2VtaXRTdHJpbmdMaXRlcmFsfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcblxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNVbmFyeU9wZXJhdGlvbiwgc3RyaW5nPj59ICovXG5jb25zdCB1bmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe0Jvb2xlYW5Ob3Q6IFwiIVwiLCBJbnRlZ2VyTmVnYXRlOiBcIi1cIn0pXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmFyeU9wZXJhdGlvbiwgUmVhZG9ubHk8e2RlZmF1bHQ6IHN0cmluZywgcGhwPzogc3RyaW5nLCBzdHJpY3Q/OiBzdHJpbmd9Pj4+fSAqL1xuY29uc3QgYmluYXJ5T3BlcmF0aW9uU3ludGF4ID0gT2JqZWN0LmZyZWV6ZSh7XG4gIEJvb2xlYW5BbmQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiJiZcIn0pLFxuICBCb29sZWFuRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEJvb2xlYW5Ob3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgQm9vbGVhbk9yOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcInx8XCJ9KSxcbiAgSW50ZWdlckFkZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCJ9KSxcbiAgSW50ZWdlckVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBJbnRlZ2VyR3JlYXRlclRoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPlwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPj1cIn0pLFxuICBJbnRlZ2VyTGVzc1RoYW46IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPFwifSksXG4gIEludGVnZXJMZXNzVGhhbk9yRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPD1cIn0pLFxuICBJbnRlZ2VyTXVsdGlwbHk6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiKlwifSksXG4gIEludGVnZXJOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KSxcbiAgSW50ZWdlclN1YnRyYWN0OiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIi1cIn0pLFxuICBTdHJpbmdDb25jYXQ6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiK1wiLCBwaHA6IFwiLlwifSksXG4gIFN0cmluZ0VxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBTdHJpbmdOb3RFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIhPVwiLCBzdHJpY3Q6IFwiIT09XCJ9KVxufSlcblxuLyoqXG4gKiBDaGVja3MgdGhlIGludGVudGlvbmFsbHkgbmFycm93IGJhY2tlbmQgY29udHJhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBtb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZS5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVCYWNrZW5kTW9kdWxlKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgaWYgKG1vZHVsZS5raW5kICE9IFwiTW9kdWxlXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgbW9kdWxlLmtpbmQsIG1vZHVsZS5sb2NhdGlvbilcbiAgaWYgKG1vZHVsZS5mdW5jdGlvbnMubGVuZ3RoID09IDApIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtb2R1bGUgd2l0aG91dCBmdW5jdGlvbnNcIiwgbW9kdWxlLmxvY2F0aW9uKVxuICB2YWxpZGF0ZUJsb2NrKG1vZHVsZS5lbnRyeVBvaW50LmJvZHksIGxhbmd1YWdlLCBtb2R1bGUuZW50cnlQb2ludC5sb2NhdGlvbilcblxuICBmb3IgKGNvbnN0IGZ1bmN0aW9uRGVjbGFyYXRpb24gb2YgbW9kdWxlLmZ1bmN0aW9ucykge1xuICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubmFtZSwgXCJmdW5jdGlvblwiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuXG4gICAgaWYgKGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImZ1bmN0aW9uIHBhcmFtZXRlciBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBmdW5jdGlvbkRlY2xhcmF0aW9uLmxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUJsb2NrKGZ1bmN0aW9uRGVjbGFyYXRpb24uYm9keSwgbGFuZ3VhZ2UsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG5cbiAgICBmb3IgKGNvbnN0IHBhcmFtZXRlciBvZiBmdW5jdGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIHBhcmFtZXRlci5uYW1lLCBcInBhcmFtZXRlclwiLCBwYXJhbWV0ZXIubG9jYXRpb24pXG5cbiAgICB9XG5cbiAgfVxuICB2YWxpZGF0ZVNjYWZmb2xkaW5nTmFtZXMobW9kdWxlLCBsYW5ndWFnZSlcbiAgdmFsaWRhdGVCYWNrZW5kVHlwZXMobW9kdWxlLCBsYW5ndWFnZSlcbn1cblxuLyoqXG4gKiBSZWplY3RzIHNlbWFudGljIG5hbWVzIHRoYXQgd291bGQgY2FwdHVyZSBzeW50YXggb3duZWQgYnkgb25lIGJhY2tlbmQgZW1pdHRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKSB7XG4gIGNvbnN0IG93bmVkRW50cnlOYW1lcyA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJhcmdzXCIsIFwiU3lzdGVtXCJdKSA6XG4gICAgW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gbmV3IFNldChbXCJjb25zb2xlXCJdKSA6IG5ldyBTZXQoKVxuICBjb25zdCBvd25lZFByaW50UmVjZWl2ZXJOYW1lcyA9IGxhbmd1YWdlID09IFwiamF2YVwiID8gbmV3IFNldChbXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBuZXcgU2V0KFtcImNvbnNvbGVcIl0pIDogbmV3IFNldCgpXG4gIGNvbnN0IG93bmVkQ2FsbGFibGVOYW1lcyA9IFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IG5ldyBTZXQoW1wiY29uc29sZVwiXSkgOlxuICAgIGxhbmd1YWdlID09IFwicnVieVwiID8gbmV3IFNldChbXCJwdXRzXCJdKSA6IG5ldyBTZXQoKVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMobW9kdWxlLmVudHJ5UG9pbnQuYm9keSkpIHtcbiAgICBpZiAoc3RhdGVtZW50LmtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIgJiYgb3duZWRFbnRyeU5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGVudHJ5IGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICB9XG4gIH1cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgaWYgKG93bmVkQ2FsbGFibGVOYW1lcy5oYXMoZGVjbGFyYXRpb24ubmFtZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uICcke2RlY2xhcmF0aW9uLm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgZGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGRlY2xhcmF0aW9uLnBhcmFtZXRlcnMpIHtcbiAgICAgIGlmIChvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMocGFyYW1ldGVyLm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uIHBhcmFtZXRlciAnJHtwYXJhbWV0ZXIubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBwYXJhbWV0ZXIubG9jYXRpb24pXG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGFsbFN0YXRlbWVudHMoZGVjbGFyYXRpb24uYm9keSkpIHtcbiAgICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBvd25lZFByaW50UmVjZWl2ZXJOYW1lcy5oYXMoc3RhdGVtZW50Lm5hbWUpKSB7XG4gICAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGZ1bmN0aW9uIGxvY2FsICcke3N0YXRlbWVudC5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHN0YXRlbWVudC5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGV2ZXJ5IHN0YXRlbWVudCBuZXN0ZWQgYmVuZWF0aCBhIGJsb2NrIGluIHNlbWFudGljIG9yZGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TdGF0ZW1lbnRbXX0gU3RhdGVtZW50cyBpbmNsdWRpbmcgbmVzdGVkIGJyYW5jaGVzLlxuICovXG5mdW5jdGlvbiBhbGxTdGF0ZW1lbnRzKGJsb2NrKSB7XG4gIHJldHVybiBibG9jay5zdGF0ZW1lbnRzLmZsYXRNYXAoKHN0YXRlbWVudCkgPT4gc3RhdGVtZW50LmtpbmQgPT0gXCJJZlN0YXRlbWVudFwiXG4gICAgPyBbc3RhdGVtZW50LCAuLi5hbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5jb25zZXF1ZW50KSwgLi4uKHN0YXRlbWVudC5hbHRlcm5hdGUgPyBhbGxTdGF0ZW1lbnRzKHN0YXRlbWVudC5hbHRlcm5hdGUpIDogW10pXVxuICAgIDogW3N0YXRlbWVudF0pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBjb21wbGV0ZSBzZW1hbnRpYyBibG9jayBiZWZvcmUgZW1pc3Npb24uXG4gKiBAcGFyYW0ge3Vua25vd259IGJsb2NrIC0gQ2FuZGlkYXRlIGJsb2NrLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRW5jbG9zaW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQmxvY2soYmxvY2ssIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGlmICghYmxvY2sgfHwgdHlwZW9mIGJsb2NrICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShibG9jaykpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9ja1wiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gKi8gKGJsb2NrKVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kICE9IFwiQmxvY2tcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYmxvY2sgJHtTdHJpbmcoUmVmbGVjdC5nZXQoYmxvY2ssIFwia2luZFwiKSl9YCwgbG9jYXRpb24pXG4gIGlmICghQXJyYXkuaXNBcnJheShjYW5kaWRhdGUuc3RhdGVtZW50cykpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYmxvY2sgc3RhdGVtZW50c1wiLCBsb2NhdGlvbilcblxuICBmb3IgKGNvbnN0IHN0YXRlbWVudCBvZiBjYW5kaWRhdGUuc3RhdGVtZW50cykgdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGVtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBzdXBwb3J0ZWQgc3RhdGVtZW50IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHt1bmtub3dufSBzdGF0ZW1lbnQgLSBDYW5kaWRhdGUgc3RhdGVtZW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gRW5jbG9zaW5nIGJvZHkgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnQoc3RhdGVtZW50LCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbikge1xuICBpZiAoIXN0YXRlbWVudCB8fCB0eXBlb2Ygc3RhdGVtZW50ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShzdGF0ZW1lbnQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhdGVtZW50XCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBraW5kID0gUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImtpbmRcIilcbiAgY29uc3QgbG9jYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSAqLyAoXG4gICAgUmVmbGVjdC5nZXQoc3RhdGVtZW50LCBcImxvY2F0aW9uXCIpID8/IG93bmVyTG9jYXRpb25cbiAgKVxuXG4gIGlmICh0eXBlb2Yga2luZCAhPSBcInN0cmluZ1wiKSByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGF0ZW1lbnRcIiwgbG9jYXRpb24pXG4gIGlmIChraW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSB7XG4gICAgY29uc3QgZGVjbGFyYXRpb24gPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkxvY2FsRGVjbGFyYXRpb259ICovIChzdGF0ZW1lbnQpXG5cbiAgICBpZiAodHlwZW9mIGRlY2xhcmF0aW9uLm11dGFibGUgIT0gXCJib29sZWFuXCIpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJsb2NhbCBkZWNsYXJhdGlvbiB3aXRoIGludmFsaWQgbXV0YWJpbGl0eVwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZGVjbGFyYXRpb24ubmFtZSwgXCJsb2NhbFwiLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oZGVjbGFyYXRpb24uaW5pdGlhbGl6ZXIsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIkFzc2lnbm1lbnRTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGFzc2lnbm1lbnQgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkFzc2lnbm1lbnRTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQoYXNzaWdubWVudC50YXJnZXQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYXNzaWdubWVudC5leHByZXNzaW9uLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJSZXR1cm5TdGF0ZW1lbnRcIiB8fCBraW5kID09IFwiUHJpbnRTdGF0ZW1lbnRcIikge1xuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwiZXhwcmVzc2lvblwiKSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgIGNvbnN0IGJyYW5jaCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWZTdGF0ZW1lbnR9ICovIChzdGF0ZW1lbnQpXG5cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oYnJhbmNoLmNvbmRpdGlvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlQmxvY2soYnJhbmNoLmNvbnNlcXVlbnQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICBpZiAoT2JqZWN0Lmhhc093bihicmFuY2gsIFwiYWx0ZXJuYXRlXCIpKSB2YWxpZGF0ZUJsb2NrKGJyYW5jaC5hbHRlcm5hdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHN0YXRlbWVudCAke2tpbmR9YCwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIHRoZSBzaW1wbGUgaWRlbnRpZmllciB0YXJnZXQgaW50cm9kdWNlZCBieSB0YXNrIDAwMi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0IC0gQ2FuZGlkYXRlIGFzc2lnbm1lbnQgdGFyZ2V0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBvd25lckxvY2F0aW9uIC0gQXNzaWdubWVudCBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUFzc2lnbm1lbnRUYXJnZXQodGFyZ2V0LCBsYW5ndWFnZSwgb3duZXJMb2NhdGlvbikge1xuICBpZiAoIXRhcmdldCB8fCB0eXBlb2YgdGFyZ2V0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheSh0YXJnZXQpKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgYXNzaWdubWVudCB0YXJnZXRcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGNhbmRpZGF0ZSA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuSWRlbnRpZmllckV4cHJlc3Npb259ICovICh0YXJnZXQpXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGFzc2lnbm1lbnQgdGFyZ2V0ICR7U3RyaW5nKFJlZmxlY3QuZ2V0KHRhcmdldCwgXCJraW5kXCIpKX1gLCBsb2NhdGlvbilcbiAgfVxuXG4gIHZhbGlkYXRlVGFyZ2V0QmluZGluZ0lkZW50aWZpZXIobGFuZ3VhZ2UsIGNhbmRpZGF0ZS5uYW1lLCBcImFzc2lnbm1lbnQgdGFyZ2V0XCIsIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIENoZWNrcyBleHByZXNzaW9uIGJhY2tlbmQgY2FwYWJpbGl0aWVzIHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHt1bmtub3dufSBleHByZXNzaW9uIC0gQ2FuZGlkYXRlIHNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBOZWFyZXN0IG93bmluZyBub2RlIGxvY2F0aW9uLlxuICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kXSAtIFdoZXRoZXIgSmF2YSBtYXkgdXNlIDIxNDc0ODM2NDggb25seSBiZW5lYXRoIGludGVnZXIgbmVnYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVFeHByZXNzaW9uKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uLCBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgPSBmYWxzZSkge1xuICBpZiAoIWV4cHJlc3Npb24gfHwgdHlwZW9mIGV4cHJlc3Npb24gIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGV4cHJlc3Npb24pKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSAqLyAoZXhwcmVzc2lvbilcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmICh0eXBlb2YgY2FuZGlkYXRlLmtpbmQgIT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGV4cHJlc3Npb25cIiwgbG9jYXRpb24pXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSWRlbnRpZmllckV4cHJlc3Npb25cIikge1xuICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwicmVmZXJlbmNlXCIsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGNhbmRpZGF0ZS52YWx1ZSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJub24tc2FmZSBpbnRlZ2VyIGxpdGVyYWxcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGNvbnN0IHZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kID0gYWxsb3dKYXZhTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIGNhbmRpZGF0ZS52YWx1ZSA9PSAyMTQ3NDgzNjQ4XG5cbiAgICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgIXZhbGlkTmVnYXRlZE1pbmltdW1PcGVyYW5kICYmIChjYW5kaWRhdGUudmFsdWUgPCAtMjE0NzQ4MzY0OCB8fCBjYW5kaWRhdGUudmFsdWUgPiAyMTQ3NDgzNjQ3KSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImludGVnZXIgbGl0ZXJhbCBvdXRzaWRlIHNpZ25lZCAzMi1iaXQgaW50IHJhbmdlXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJCb29sZWFuTGl0ZXJhbFwiIHx8IGNhbmRpZGF0ZS5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSByZXR1cm5cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLmNhbGxlZSwgXCJjYWxsZWVcIiwgbG9jYXRpb24pXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5hcmd1bWVudHMpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGNhbGwgYXJndW1lbnRzXCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICBpZiAoY2FuZGlkYXRlLmFyZ3VtZW50cy5sZW5ndGggIT0gMikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImNhbGwgYXJndW1lbnQgY291bnQgb3RoZXIgdGhhbiB0d29cIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGZvciAoY29uc3QgYXJndW1lbnQgb2YgY2FuZGlkYXRlLmFyZ3VtZW50cykgdmFsaWRhdGVFeHByZXNzaW9uKGFyZ3VtZW50LCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICBpZiAoIU9iamVjdC5oYXNPd24odW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYHVuYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5vcGVyYW5kLCBsYW5ndWFnZSwgbG9jYXRpb24sIGNhbmRpZGF0ZS5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpXG4gICAgdmFsaWRhdGVLbm93bkphdmFJbnRlZ2VyKGNhbmRpZGF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJpbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bihiaW5hcnlPcGVyYXRpb25TeW50YXgsIFN0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKSkpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYGJpbmFyeSBvcGVyYXRpb24gJHtTdHJpbmcoY2FuZGlkYXRlLm9wZXJhdGlvbil9YCwgbG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUubGVmdCwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihjYW5kaWRhdGUucmlnaHQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICB2YWxpZGF0ZUtub3duSmF2YUludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cblxuICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFN0cmluZyhSZWZsZWN0LmdldChleHByZXNzaW9uLCBcImtpbmRcIikpLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBSZWplY3RzIGNvbXBpbGUtdGltZS1rbm93biBKYXZhIGludGVnZXIgb3BlcmF0aW9uIHJlc3VsdHMgb3V0c2lkZSBwcmltaXRpdmUgaW50LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5VbmFyeUV4cHJlc3Npb24gfCBpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CaW5hcnlFeHByZXNzaW9ufSBleHByZXNzaW9uIC0gVmFsaWRhdGVkIG9wZXJhdGlvbiBzaGFwZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBPcGVyYXRpb24gbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVLbm93bkphdmFJbnRlZ2VyKGV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbikge1xuICBpZiAobGFuZ3VhZ2UgIT0gXCJqYXZhXCIpIHJldHVyblxuXG4gIGNvbnN0IHZhbHVlID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbilcblxuICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiAodmFsdWUgPCAtMjE0NzQ4MzY0OG4gfHwgdmFsdWUgPiAyMTQ3NDgzNjQ3bikpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY29tcGlsZS10aW1lLWtub3duIGludGVnZXIgb3BlcmF0aW9uIG91dHNpZGUgc2lnbmVkIDMyLWJpdCBpbnQgcmFuZ2VcIiwgbG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBFdmFsdWF0ZXMgb25seSBsaXRlcmFsIGludGVnZXItb3BlcmF0aW9uIHRyZWVzIGZvciBib3VuZHMgdmFsaWRhdGlvbiwgbmV2ZXIgSVIgZm9sZGluZy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcmV0dXJucyB7YmlnaW50IHwgdW5kZWZpbmVkfSBLbm93biBtYXRoZW1hdGljYWwgaW50ZWdlci5cbiAqL1xuZnVuY3Rpb24ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbikge1xuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihleHByZXNzaW9uLnZhbHVlKSkgcmV0dXJuIEJpZ0ludChleHByZXNzaW9uLnZhbHVlKVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIgJiYgZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTmVnYXRlXCIpIHtcbiAgICBjb25zdCBvcGVyYW5kID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5vcGVyYW5kKVxuXG4gICAgcmV0dXJuIG9wZXJhbmQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IC1vcGVyYW5kXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCAhPSBcIkJpbmFyeUV4cHJlc3Npb25cIikgcmV0dXJuIHVuZGVmaW5lZFxuXG4gIGNvbnN0IGxlZnQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLmxlZnQpXG4gIGNvbnN0IHJpZ2h0ID0ga25vd25JbnRlZ2VyVmFsdWUoZXhwcmVzc2lvbi5yaWdodClcblxuICBpZiAobGVmdCA9PT0gdW5kZWZpbmVkIHx8IHJpZ2h0ID09PSB1bmRlZmluZWQpIHJldHVybiB1bmRlZmluZWRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlckFkZFwiKSByZXR1cm4gbGVmdCArIHJpZ2h0XG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJTdWJ0cmFjdFwiKSByZXR1cm4gbGVmdCAtIHJpZ2h0XG4gIGlmIChleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJNdWx0aXBseVwiKSByZXR1cm4gbGVmdCAqIHJpZ2h0XG5cbiAgcmV0dXJuIHVuZGVmaW5lZFxufVxuXG4vKipcbiAqIEVtaXRzIGEgc3VwcG9ydGVkIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vd3JpdGVyLmpzXCIpLlNvdXJjZVdyaXRlcn0gd3JpdGVyIC0gU291cmNlLWF3YXJlIHdyaXRlci5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuRXhwcmVzc2lvbn0gZXhwcmVzc2lvbiAtIFNlbWFudGljIGV4cHJlc3Npb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIEV4YWN0IEpTT04gUG9pbnRlciBmb3IgdGhpcyBleHByZXNzaW9uIG9jY3VycmVuY2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHsobmFtZTogc3RyaW5nKSA9PiBzdHJpbmd9IGVtaXRJZGVudGlmaWVyIC0gSWRlbnRpZmllciBmb3JtYXR0ZXIuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbiwgcGF0aCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0SWRlbnRpZmllcihleHByZXNzaW9uLm5hbWUpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJuYW1lXCJ9KVxuICAgIHJldHVyblxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChTdHJpbmcoZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIiwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChsYW5ndWFnZSwgZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24uY2FsbGVlLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQodW5hcnlPcGVyYXRpb25TeW50YXhbZXhwcmVzc2lvbi5vcGVyYXRpb25dLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgY29uc3QgY29tcG9zaXRlT3BlcmF0b3IgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIgJiYgd3JpdGVyLmhhc1JhbmdlKGV4cHJlc3Npb24sIHBhdGgsIFwiZXF1YWxpdHlPcGVyYXRvclwiKVxuXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIuZXF1YWxzXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IGNvbXBvc2l0ZU9wZXJhdG9yID8gXCJlcXVhbGl0eU9wZXJhdG9yXCIgOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBjb25zdCBzcGVsbGluZyA9IGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSlcblxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDAsIDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJlcXVhbGl0eU9wZXJhdG9yXCJ9KVxuICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgSmF2YVNjcmlwdC1mYW1pbHkgZXhlY3V0aW9uIGNhbiBjcmVhdGUgSUVFRS03NTQgc2lnbmVkIHplcm8uXG4gKiBTZW1hbnRpZm9sZCBpbnRlZ2VycyBoYXZlIG9uZSBtYXRoZW1hdGljYWwgemVybywgc28gdGhvc2UgdGFyZ2V0cyBjYW5vbmljYWxpemVcbiAqIHRoZWlyIG9ic2VydmFibGUgc2NhbGFyIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcGVyYXRpb24gdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBjYW5vbmljYWwgb3V0cHV0IHJlbmRlcmluZyBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzQ2Fub25pY2FsWmVyb1JlbmRlcmluZyhtb2R1bGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5mdW5jdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGRlY2xhcmF0aW9uLmJvZHkpKSB8fFxuICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBibG9jayBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGEgbmVzdGVkIGV4cHJlc3Npb24gY2FuIHByb2R1Y2Ugc2lnbmVkIHplcm8gaW4gSmF2YVNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbmRpdGlvbikgfHxcbiAgICAgICAgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbnNlcXVlbnQpIHx8XG4gICAgICAgIEJvb2xlYW4oc3RhdGVtZW50LmFsdGVybmF0ZSAmJiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYWx0ZXJuYXRlKSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGV4cHJlc3Npb24gdHJlZSBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgdHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIiB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ubGVmdCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5yaWdodClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihhcmd1bWVudCkpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19
|
|
427
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2JhY2tlbmRzL3NoYXJlZC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0seUJBQXlCLENBQUE7QUFDNUQsT0FBTyxFQUFDLCtCQUErQixFQUFFLHdCQUF3QixFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDMUYsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBRTlDLDhGQUE4RjtBQUM5RixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGFBQWEsRUFBRSxHQUFHLEVBQUMsQ0FBQyxDQUFBO0FBQ2pGLG9LQUFvSztBQUNwSyxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDMUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztJQUN6RCxZQUFZLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxDQUFDO0lBQzNELGVBQWUsRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFDLENBQUM7SUFDOUQsU0FBUyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUMsQ0FBQztJQUN2RCxVQUFVLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUMsQ0FBQztJQUN6QyxZ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QUksS0FBSyxJQUFJLE1BQU0sQ0FBQyxHQUFHO1FBQUUsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFBO0lBQ3RELElBQUksUUFBUSxJQUFJLFFBQVEsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssSUFBSSxRQUFRLElBQUksWUFBWSxJQUFJLFFBQVEsSUFBSSxZQUFZLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTTtRQUFFLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQTtJQUV0SCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUE7QUFDdkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHt2YWxpZGF0ZUJhY2tlbmRUeXBlc30gZnJvbSBcIi4uL3NlbWFudGljL3ZhbGlkYXRlLmpzXCJcbmltcG9ydCB7dmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllciwgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyfSBmcm9tIFwiLi9pZGVudGlmaWVycy5qc1wiXG5pbXBvcnQge2VtaXRTdHJpbmdMaXRlcmFsfSBmcm9tIFwiLi9zY2FsYXJzLmpzXCJcblxuLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNVbmFyeU9wZXJhdGlvbiwgc3RyaW5nPj59ICovXG5jb25zdCB1bmFyeU9wZXJhdGlvblN5bnRheCA9IE9iamVjdC5mcmVlemUoe0Jvb2xlYW5Ob3Q6IFwiIVwiLCBJbnRlZ2VyTmVnYXRlOiBcIi1cIn0pXG4vKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0JpbmFyeU9wZXJhdGlvbiwgUmVhZG9ubHk8e2RlZmF1bHQ6IHN0cmluZywgcGhwPzogc3RyaW5nLCBweXRob24/OiBzdHJpbmcsIHN0cmljdD86IHN0cmluZ30+Pj59ICovXG5jb25zdCBiaW5hcnlPcGVyYXRpb25TeW50YXggPSBPYmplY3QuZnJlZXplKHtcbiAgQm9vbGVhbkFuZDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCImJlwiLCBweXRob246IFwiYW5kXCJ9KSxcbiAgQm9vbGVhbkVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIj09XCIsIHN0cmljdDogXCI9PT1cIn0pLFxuICBCb29sZWFuTm90RXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiIT1cIiwgc3RyaWN0OiBcIiE9PVwifSksXG4gIEJvb2xlYW5PcjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCJ8fFwiLCBweXRob246IFwib3JcIn0pLFxuICBJbnRlZ2VyQWRkOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIitcIn0pLFxuICBJbnRlZ2VyRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIEludGVnZXJHcmVhdGVyVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+XCJ9KSxcbiAgSW50ZWdlckdyZWF0ZXJUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI+PVwifSksXG4gIEludGVnZXJMZXNzVGhhbjogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8XCJ9KSxcbiAgSW50ZWdlckxlc3NUaGFuT3JFcXVhbDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCI8PVwifSksXG4gIEludGVnZXJNdWx0aXBseTogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIqXCJ9KSxcbiAgSW50ZWdlck5vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pLFxuICBJbnRlZ2VyU3VidHJhY3Q6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiLVwifSksXG4gIFN0cmluZ0NvbmNhdDogT2JqZWN0LmZyZWV6ZSh7ZGVmYXVsdDogXCIrXCIsIHBocDogXCIuXCJ9KSxcbiAgU3RyaW5nRXF1YWw6IE9iamVjdC5mcmVlemUoe2RlZmF1bHQ6IFwiPT1cIiwgc3RyaWN0OiBcIj09PVwifSksXG4gIFN0cmluZ05vdEVxdWFsOiBPYmplY3QuZnJlZXplKHtkZWZhdWx0OiBcIiE9XCIsIHN0cmljdDogXCIhPT1cIn0pXG59KVxuXG4vKipcbiAqIENoZWNrcyB0aGUgaW50ZW50aW9uYWxseSBuYXJyb3cgYmFja2VuZCBjb250cmFjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUJhY2tlbmRNb2R1bGUobW9kdWxlLCBsYW5ndWFnZSkge1xuICBpZiAobW9kdWxlLmtpbmQgIT0gXCJNb2R1bGVcIikgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBtb2R1bGUua2luZCwgbW9kdWxlLmxvY2F0aW9uKVxuICBpZiAobW9kdWxlLmZ1bmN0aW9ucy5sZW5ndGggPT0gMCkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1vZHVsZSB3aXRob3V0IGZ1bmN0aW9uc1wiLCBtb2R1bGUubG9jYXRpb24pXG4gIHZhbGlkYXRlQmxvY2sobW9kdWxlLmVudHJ5UG9pbnQuYm9keSwgbGFuZ3VhZ2UsIG1vZHVsZS5lbnRyeVBvaW50LmxvY2F0aW9uKVxuXG4gIGZvciAoY29uc3QgZnVuY3Rpb25EZWNsYXJhdGlvbiBvZiBtb2R1bGUuZnVuY3Rpb25zKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgZnVuY3Rpb25EZWNsYXJhdGlvbi5uYW1lLCBcImZ1bmN0aW9uXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG5cbiAgICBpZiAoZnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiZnVuY3Rpb24gcGFyYW1ldGVyIGNvdW50IG90aGVyIHRoYW4gdHdvXCIsIGZ1bmN0aW9uRGVjbGFyYXRpb24ubG9jYXRpb24pXG4gICAgfVxuICAgIHZhbGlkYXRlQmxvY2soZnVuY3Rpb25EZWNsYXJhdGlvbi5ib2R5LCBsYW5ndWFnZSwgZnVuY3Rpb25EZWNsYXJhdGlvbi5sb2NhdGlvbilcblxuICAgIGZvciAoY29uc3QgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgcGFyYW1ldGVyLm5hbWUsIFwicGFyYW1ldGVyXCIsIHBhcmFtZXRlci5sb2NhdGlvbilcblxuICAgIH1cblxuICB9XG4gIHZhbGlkYXRlU2NhZmZvbGRpbmdOYW1lcyhtb2R1bGUsIGxhbmd1YWdlKVxuICB2YWxpZGF0ZUJhY2tlbmRUeXBlcyhtb2R1bGUsIGxhbmd1YWdlKVxufVxuXG4vKipcbiAqIFJlamVjdHMgc2VtYW50aWMgbmFtZXMgdGhhdCB3b3VsZCBjYXB0dXJlIHN5bnRheCBvd25lZCBieSBvbmUgYmFja2VuZCBlbWl0dGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gbW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2FmZm9sZGluZ05hbWVzKG1vZHVsZSwgbGFuZ3VhZ2UpIHtcbiAgY29uc3Qgb3duZWRFbnRyeU5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcImFyZ3NcIiwgXCJTeXN0ZW1cIl0pIDpcbiAgICBbXCJqYXZhc2NyaXB0XCIsIFwidHlwZXNjcmlwdFwiXS5pbmNsdWRlcyhsYW5ndWFnZSkgPyBuZXcgU2V0KFtcImNvbnNvbGVcIl0pIDogbmV3IFNldCgpXG4gIGNvbnN0IG93bmVkUHJpbnRSZWNlaXZlck5hbWVzID0gbGFuZ3VhZ2UgPT0gXCJqYXZhXCIgPyBuZXcgU2V0KFtcIlN5c3RlbVwiXSkgOlxuICAgIFtcImphdmFzY3JpcHRcIiwgXCJ0eXBlc2NyaXB0XCJdLmluY2x1ZGVzKGxhbmd1YWdlKSA/IG5ldyBTZXQoW1wiY29uc29sZVwiXSkgOiBuZXcgU2V0KClcbiAgY29uc3Qgb3duZWRDYWxsYWJsZU5hbWVzID0gW1wiamF2YXNjcmlwdFwiLCBcInR5cGVzY3JpcHRcIl0uaW5jbHVkZXMobGFuZ3VhZ2UpID8gbmV3IFNldChbXCJjb25zb2xlXCJdKSA6XG4gICAgbGFuZ3VhZ2UgPT0gXCJydWJ5XCIgPyBuZXcgU2V0KFtcInB1dHNcIl0pIDogbmV3IFNldCgpXG5cbiAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhtb2R1bGUuZW50cnlQb2ludC5ib2R5KSkge1xuICAgIGlmIChzdGF0ZW1lbnQua2luZCA9PSBcIkxvY2FsRGVjbGFyYXRpb25cIiAmJiBvd25lZEVudHJ5TmFtZXMuaGFzKHN0YXRlbWVudC5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZW50cnkgbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgIH1cbiAgfVxuICBmb3IgKGNvbnN0IGRlY2xhcmF0aW9uIG9mIG1vZHVsZS5mdW5jdGlvbnMpIHtcbiAgICBpZiAob3duZWRDYWxsYWJsZU5hbWVzLmhhcyhkZWNsYXJhdGlvbi5uYW1lKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gJyR7ZGVjbGFyYXRpb24ubmFtZX0nIGNhcHR1cmVzIGJhY2tlbmQgc2NhZmZvbGRpbmdgLCBkZWNsYXJhdGlvbi5sb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBwYXJhbWV0ZXIgb2YgZGVjbGFyYXRpb24ucGFyYW1ldGVycykge1xuICAgICAgaWYgKG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhwYXJhbWV0ZXIubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gcGFyYW1ldGVyICcke3BhcmFtZXRlci5uYW1lfScgY2FwdHVyZXMgYmFja2VuZCBzY2FmZm9sZGluZ2AsIHBhcmFtZXRlci5sb2NhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2YgYWxsU3RhdGVtZW50cyhkZWNsYXJhdGlvbi5ib2R5KSkge1xuICAgICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiICYmIG93bmVkUHJpbnRSZWNlaXZlck5hbWVzLmhhcyhzdGF0ZW1lbnQubmFtZSkpIHtcbiAgICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgZnVuY3Rpb24gbG9jYWwgJyR7c3RhdGVtZW50Lm5hbWV9JyBjYXB0dXJlcyBiYWNrZW5kIHNjYWZmb2xkaW5nYCwgc3RhdGVtZW50LmxvY2F0aW9uKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgZXZlcnkgc3RhdGVtZW50IG5lc3RlZCBiZW5lYXRoIGEgYmxvY2sgaW4gc2VtYW50aWMgb3JkZXIuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSBibG9jayAtIFNlbWFudGljIGJsb2NrLlxuICogQHJldHVybnMge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlN0YXRlbWVudFtdfSBTdGF0ZW1lbnRzIGluY2x1ZGluZyBuZXN0ZWQgYnJhbmNoZXMuXG4gKi9cbmZ1bmN0aW9uIGFsbFN0YXRlbWVudHMoYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuZmxhdE1hcCgoc3RhdGVtZW50KSA9PiBzdGF0ZW1lbnQua2luZCA9PSBcIklmU3RhdGVtZW50XCJcbiAgICA/IFtzdGF0ZW1lbnQsIC4uLmFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmNvbnNlcXVlbnQpLCAuLi4oc3RhdGVtZW50LmFsdGVybmF0ZSA/IGFsbFN0YXRlbWVudHMoc3RhdGVtZW50LmFsdGVybmF0ZSkgOiBbXSldXG4gICAgOiBbc3RhdGVtZW50XSlcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIGNvbXBsZXRlIHNlbWFudGljIGJsb2NrIGJlZm9yZSBlbWlzc2lvbi5cbiAqIEBwYXJhbSB7dW5rbm93bn0gYmxvY2sgLSBDYW5kaWRhdGUgYmxvY2suXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCbG9jayhibG9jaywgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24pIHtcbiAgaWYgKCFibG9jayB8fCB0eXBlb2YgYmxvY2sgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGJsb2NrKSkge1xuICAgIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIGJsb2NrXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJsb2NrfSAqLyAoYmxvY2spXG4gIGNvbnN0IGxvY2F0aW9uID0gY2FuZGlkYXRlLmxvY2F0aW9uID8/IG93bmVyTG9jYXRpb25cblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgIT0gXCJCbG9ja1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGBibG9jayAke1N0cmluZyhSZWZsZWN0LmdldChibG9jaywgXCJraW5kXCIpKX1gLCBsb2NhdGlvbilcbiAgaWYgKCFBcnJheS5pc0FycmF5KGNhbmRpZGF0ZS5zdGF0ZW1lbnRzKSkgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBibG9jayBzdGF0ZW1lbnRzXCIsIGxvY2F0aW9uKVxuXG4gIGZvciAoY29uc3Qgc3RhdGVtZW50IG9mIGNhbmRpZGF0ZS5zdGF0ZW1lbnRzKSB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgb25lIHN1cHBvcnRlZCBzdGF0ZW1lbnQgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge3Vua25vd259IHN0YXRlbWVudCAtIENhbmRpZGF0ZSBzdGF0ZW1lbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBFbmNsb3NpbmcgYm9keSBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudChzdGF0ZW1lbnQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGlmICghc3RhdGVtZW50IHx8IHR5cGVvZiBzdGF0ZW1lbnQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHN0YXRlbWVudCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBzdGF0ZW1lbnRcIiwgb3duZXJMb2NhdGlvbilcbiAgfVxuXG4gIGNvbnN0IGtpbmQgPSBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwia2luZFwiKVxuICBjb25zdCBsb2NhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9ICovIChcbiAgICBSZWZsZWN0LmdldChzdGF0ZW1lbnQsIFwibG9jYXRpb25cIikgPz8gb3duZXJMb2NhdGlvblxuICApXG5cbiAgaWYgKHR5cGVvZiBraW5kICE9IFwic3RyaW5nXCIpIHJldHVybiB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwibWlzc2luZyBvciBpbnZhbGlkIHN0YXRlbWVudFwiLCBsb2NhdGlvbilcbiAgaWYgKGtpbmQgPT0gXCJMb2NhbERlY2xhcmF0aW9uXCIpIHtcbiAgICBjb25zdCBkZWNsYXJhdGlvbiA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuTG9jYWxEZWNsYXJhdGlvbn0gKi8gKHN0YXRlbWVudClcblxuICAgIGlmICh0eXBlb2YgZGVjbGFyYXRpb24ubXV0YWJsZSAhPSBcImJvb2xlYW5cIikge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcImxvY2FsIGRlY2xhcmF0aW9uIHdpdGggaW52YWxpZCBtdXRhYmlsaXR5XCIsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBkZWNsYXJhdGlvbi5uYW1lLCBcImxvY2FsXCIsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihkZWNsYXJhdGlvbi5pbml0aWFsaXplciwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG4gIGlmIChraW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYXNzaWdubWVudCA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXNzaWdubWVudFN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcblxuICAgIHZhbGlkYXRlQXNzaWdubWVudFRhcmdldChhc3NpZ25tZW50LnRhcmdldCwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihhc3NpZ25tZW50LmV4cHJlc3Npb24sIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoa2luZCA9PSBcIlJldHVyblN0YXRlbWVudFwiIHx8IGtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKFJlZmxlY3QuZ2V0KHN0YXRlbWVudCwgXCJleHByZXNzaW9uXCIpLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGtpbmQgPT0gXCJJZlN0YXRlbWVudFwiKSB7XG4gICAgY29uc3QgYnJhbmNoID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZlN0YXRlbWVudH0gKi8gKHN0YXRlbWVudClcblxuICAgIHZhbGlkYXRlRXhwcmVzc2lvbihicmFuY2guY29uZGl0aW9uLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVCbG9jayhicmFuY2guY29uc2VxdWVudCwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIGlmIChPYmplY3QuaGFzT3duKGJyYW5jaCwgXCJhbHRlcm5hdGVcIikpIHZhbGlkYXRlQmxvY2soYnJhbmNoLmFsdGVybmF0ZSwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHJldHVyblxuICB9XG5cbiAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgc3RhdGVtZW50ICR7a2luZH1gLCBsb2NhdGlvbilcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgdGhlIHNpbXBsZSBpZGVudGlmaWVyIHRhcmdldCBpbnRyb2R1Y2VkIGJ5IHRhc2sgMDAyLlxuICogQHBhcmFtIHt1bmtub3dufSB0YXJnZXQgLSBDYW5kaWRhdGUgYXNzaWdubWVudCB0YXJnZXQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gQmFja2VuZCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IG93bmVyTG9jYXRpb24gLSBBc3NpZ25tZW50IGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQXNzaWdubWVudFRhcmdldCh0YXJnZXQsIGxhbmd1YWdlLCBvd25lckxvY2F0aW9uKSB7XG4gIGlmICghdGFyZ2V0IHx8IHR5cGVvZiB0YXJnZXQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHRhcmdldCkpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBhc3NpZ25tZW50IHRhcmdldFwiLCBvd25lckxvY2F0aW9uKVxuICB9XG5cbiAgY29uc3QgY2FuZGlkYXRlID0gLyoqIEB0eXBlIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5JZGVudGlmaWVyRXhwcmVzc2lvbn0gKi8gKHRhcmdldClcbiAgY29uc3QgbG9jYXRpb24gPSBjYW5kaWRhdGUubG9jYXRpb24gPz8gb3duZXJMb2NhdGlvblxuXG4gIGlmIChjYW5kaWRhdGUua2luZCAhPSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYXNzaWdubWVudCB0YXJnZXQgJHtTdHJpbmcoUmVmbGVjdC5nZXQodGFyZ2V0LCBcImtpbmRcIikpfWAsIGxvY2F0aW9uKVxuICB9XG5cbiAgdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgY2FuZGlkYXRlLm5hbWUsIFwiYXNzaWdubWVudCB0YXJnZXRcIiwgbG9jYXRpb24pXG59XG5cbi8qKlxuICogQ2hlY2tzIGV4cHJlc3Npb24gYmFja2VuZCBjYXBhYmlsaXRpZXMgcmVjdXJzaXZlbHkuXG4gKiBAcGFyYW0ge3Vua25vd259IGV4cHJlc3Npb24gLSBDYW5kaWRhdGUgc2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBCYWNrZW5kIGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gb3duZXJMb2NhdGlvbiAtIE5lYXJlc3Qgb3duaW5nIG5vZGUgbG9jYXRpb24uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmRdIC0gV2hldGhlciBKYXZhIG1heSB1c2UgMjE0NzQ4MzY0OCBvbmx5IGJlbmVhdGggaW50ZWdlciBuZWdhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUV4cHJlc3Npb24oZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIG93bmVyTG9jYXRpb24sIGFsbG93SmF2YU5lZ2F0ZWRNaW5pbXVtT3BlcmFuZCA9IGZhbHNlKSB7XG4gIGlmICghZXhwcmVzc2lvbiB8fCB0eXBlb2YgZXhwcmVzc2lvbiAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoZXhwcmVzc2lvbikpIHtcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm1pc3Npbmcgb3IgaW52YWxpZCBleHByZXNzaW9uXCIsIG93bmVyTG9jYXRpb24pXG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGUgPSAvKiogQHR5cGUge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkV4cHJlc3Npb259ICovIChleHByZXNzaW9uKVxuICBjb25zdCBsb2NhdGlvbiA9IGNhbmRpZGF0ZS5sb2NhdGlvbiA/PyBvd25lckxvY2F0aW9uXG5cbiAgaWYgKHR5cGVvZiBjYW5kaWRhdGUua2luZCAhPSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgZXhwcmVzc2lvblwiLCBsb2NhdGlvbilcbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJJZGVudGlmaWVyRXhwcmVzc2lvblwiKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUubmFtZSwgXCJyZWZlcmVuY2VcIiwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiSW50ZWdlckxpdGVyYWxcIikge1xuICAgIGlmICghTnVtYmVyLmlzU2FmZUludGVnZXIoY2FuZGlkYXRlLnZhbHVlKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBcIm5vbi1zYWZlIGludGVnZXIgbGl0ZXJhbFwiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgY29uc3QgdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgPSBhbGxvd0phdmFOZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgY2FuZGlkYXRlLnZhbHVlID09IDIxNDc0ODM2NDhcblxuICAgIGlmIChsYW5ndWFnZSA9PSBcImphdmFcIiAmJiAhdmFsaWROZWdhdGVkTWluaW11bU9wZXJhbmQgJiYgKGNhbmRpZGF0ZS52YWx1ZSA8IC0yMTQ3NDgzNjQ4IHx8IGNhbmRpZGF0ZS52YWx1ZSA+IDIxNDc0ODM2NDcpKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiaW50ZWdlciBsaXRlcmFsIG91dHNpZGUgc2lnbmVkIDMyLWJpdCBpbnQgcmFuZ2VcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIHJldHVyblxuICB9XG4gIGlmIChjYW5kaWRhdGUua2luZCA9PSBcIkJvb2xlYW5MaXRlcmFsXCIgfHwgY2FuZGlkYXRlLmtpbmQgPT0gXCJTdHJpbmdMaXRlcmFsXCIpIHJldHVyblxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJDYWxsRXhwcmVzc2lvblwiKSB7XG4gICAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBjYW5kaWRhdGUuY2FsbGVlLCBcImNhbGxlZVwiLCBsb2NhdGlvbilcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY2FuZGlkYXRlLmFyZ3VtZW50cykpIHtcbiAgICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJtaXNzaW5nIG9yIGludmFsaWQgY2FsbCBhcmd1bWVudHNcIiwgbG9jYXRpb24pXG4gICAgfVxuICAgIGlmIChjYW5kaWRhdGUuYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIFwiY2FsbCBhcmd1bWVudCBjb3VudCBvdGhlciB0aGFuIHR3b1wiLCBsb2NhdGlvbilcbiAgICB9XG4gICAgZm9yIChjb25zdCBhcmd1bWVudCBvZiBjYW5kaWRhdGUuYXJndW1lbnRzKSB2YWxpZGF0ZUV4cHJlc3Npb24oYXJndW1lbnQsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoY2FuZGlkYXRlLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIikge1xuICAgIGlmICghT2JqZWN0Lmhhc093bih1bmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgdW5hcnkgb3BlcmF0aW9uICR7U3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pfWAsIGxvY2F0aW9uKVxuICAgIH1cbiAgICB2YWxpZGF0ZUV4cHJlc3Npb24oY2FuZGlkYXRlLm9wZXJhbmQsIGxhbmd1YWdlLCBsb2NhdGlvbiwgY2FuZGlkYXRlLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIilcbiAgICB2YWxpZGF0ZUtub3duSmF2YUludGVnZXIoY2FuZGlkYXRlLCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGNhbmRpZGF0ZS5raW5kID09IFwiQmluYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgaWYgKCFPYmplY3QuaGFzT3duKGJpbmFyeU9wZXJhdGlvblN5bnRheCwgU3RyaW5nKGNhbmRpZGF0ZS5vcGVyYXRpb24pKSkge1xuICAgICAgdW5zdXBwb3J0ZWRDYXBhYmlsaXR5KGxhbmd1YWdlLCBgYmluYXJ5IG9wZXJhdGlvbiAke1N0cmluZyhjYW5kaWRhdGUub3BlcmF0aW9uKX1gLCBsb2NhdGlvbilcbiAgICB9XG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5sZWZ0LCBsYW5ndWFnZSwgbG9jYXRpb24pXG4gICAgdmFsaWRhdGVFeHByZXNzaW9uKGNhbmRpZGF0ZS5yaWdodCwgbGFuZ3VhZ2UsIGxvY2F0aW9uKVxuICAgIHZhbGlkYXRlS25vd25KYXZhSW50ZWdlcihjYW5kaWRhdGUsIGxhbmd1YWdlLCBsb2NhdGlvbilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgU3RyaW5nKFJlZmxlY3QuZ2V0KGV4cHJlc3Npb24sIFwia2luZFwiKSksIGxvY2F0aW9uKVxufVxuXG4vKipcbiAqIFJlamVjdHMgY29tcGlsZS10aW1lLWtub3duIEphdmEgaW50ZWdlciBvcGVyYXRpb24gcmVzdWx0cyBvdXRzaWRlIHByaW1pdGl2ZSBpbnQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlVuYXJ5RXhwcmVzc2lvbiB8IGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLkJpbmFyeUV4cHJlc3Npb259IGV4cHJlc3Npb24gLSBWYWxpZGF0ZWQgb3BlcmF0aW9uIHNoYXBlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIEJhY2tlbmQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9wZXJhdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtub3duSmF2YUludGVnZXIoZXhwcmVzc2lvbiwgbGFuZ3VhZ2UsIGxvY2F0aW9uKSB7XG4gIGlmIChsYW5ndWFnZSAhPSBcImphdmFcIikgcmV0dXJuXG5cbiAgY29uc3QgdmFsdWUgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKVxuXG4gIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICh2YWx1ZSA8IC0yMTQ3NDgzNjQ4biB8fCB2YWx1ZSA+IDIxNDc0ODM2NDduKSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgXCJjb21waWxlLXRpbWUta25vd24gaW50ZWdlciBvcGVyYXRpb24gb3V0c2lkZSBzaWduZWQgMzItYml0IGludCByYW5nZVwiLCBsb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIEV2YWx1YXRlcyBvbmx5IGxpdGVyYWwgaW50ZWdlci1vcGVyYXRpb24gdHJlZXMgZm9yIGJvdW5kcyB2YWxpZGF0aW9uLCBuZXZlciBJUiBmb2xkaW5nLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtiaWdpbnQgfCB1bmRlZmluZWR9IEtub3duIG1hdGhlbWF0aWNhbCBpbnRlZ2VyLlxuICovXG5mdW5jdGlvbiBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uKSB7XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJJbnRlZ2VyTGl0ZXJhbFwiICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGV4cHJlc3Npb24udmFsdWUpKSByZXR1cm4gQmlnSW50KGV4cHJlc3Npb24udmFsdWUpXG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJVbmFyeUV4cHJlc3Npb25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkludGVnZXJOZWdhdGVcIikge1xuICAgIGNvbnN0IG9wZXJhbmQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLm9wZXJhbmQpXG5cbiAgICByZXR1cm4gb3BlcmFuZCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogLW9wZXJhbmRcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kICE9IFwiQmluYXJ5RXhwcmVzc2lvblwiKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgY29uc3QgbGVmdCA9IGtub3duSW50ZWdlclZhbHVlKGV4cHJlc3Npb24ubGVmdClcbiAgY29uc3QgcmlnaHQgPSBrbm93bkludGVnZXJWYWx1ZShleHByZXNzaW9uLnJpZ2h0KVxuXG4gIGlmIChsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHVuZGVmaW5lZFxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyQWRkXCIpIHJldHVybiBsZWZ0ICsgcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlclN1YnRyYWN0XCIpIHJldHVybiBsZWZ0IC0gcmlnaHRcbiAgaWYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck11bHRpcGx5XCIpIHJldHVybiBsZWZ0ICogcmlnaHRcblxuICByZXR1cm4gdW5kZWZpbmVkXG59XG5cbi8qKlxuICogRW1pdHMgYSBzdXBwb3J0ZWQgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi93cml0ZXIuanNcIikuU291cmNlV3JpdGVyfSB3cml0ZXIgLSBTb3VyY2UtYXdhcmUgd3JpdGVyLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoIC0gRXhhY3QgSlNPTiBQb2ludGVyIGZvciB0aGlzIGV4cHJlc3Npb24gb2NjdXJyZW5jZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0geyhuYW1lOiBzdHJpbmcpID0+IHN0cmluZ30gZW1pdElkZW50aWZpZXIgLSBJZGVudGlmaWVyIGZvcm1hdHRlci5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLCBwYXRoLCBsYW5ndWFnZSwgZW1pdElkZW50aWZpZXIpIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIklkZW50aWZpZXJFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGVtaXRJZGVudGlmaWVyKGV4cHJlc3Npb24ubmFtZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm5hbWVcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkludGVnZXJMaXRlcmFsXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFN0cmluZyhleHByZXNzaW9uLnZhbHVlKSwge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQm9vbGVhbkxpdGVyYWxcIikge1xuICAgIGNvbnN0IHNwZWxsaW5nID0gbGFuZ3VhZ2UgPT0gXCJweXRob25cIiA/IGV4cHJlc3Npb24udmFsdWUgPyBcIlRydWVcIiA6IFwiRmFsc2VcIiA6IGV4cHJlc3Npb24udmFsdWUgPyBcInRydWVcIiA6IFwiZmFsc2VcIlxuXG4gICAgd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwibGl0ZXJhbFwifSlcbiAgICByZXR1cm5cbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiU3RyaW5nTGl0ZXJhbFwiKSB7XG4gICAgd3JpdGVyLm1hcHBlZChlbWl0U3RyaW5nTGl0ZXJhbChsYW5ndWFnZSwgZXhwcmVzc2lvbi52YWx1ZSksIHttYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcImxpdGVyYWxcIn0pXG4gICAgcmV0dXJuXG4gIH1cbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIkNhbGxFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKGV4cHJlc3Npb24uY2FsbGVlLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJjYWxsZWVcIn0pXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBleHByZXNzaW9uLmFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA+IDApIHdyaXRlci5zeW50aGV0aWMoXCIsIFwiLCBcImFyZ3VtZW50IHNlcGFyYXRvclwiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgYXJndW1lbnQsIGAke3BhdGh9L2FyZ3VtZW50cy8ke2luZGV4fWAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiVW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQobGFuZ3VhZ2UgPT0gXCJweXRob25cIiAmJiBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIkJvb2xlYW5Ob3RcIiA/IFwibm90IFwiIDogdW5hcnlPcGVyYXRpb25TeW50YXhbZXhwcmVzc2lvbi5vcGVyYXRpb25dLCB7XG4gICAgICBtYXBwaW5nS2luZDogXCJleGFjdFwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRoLCByb2xlOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIGVtaXRFeHByZXNzaW9uKHdyaXRlciwgZXhwcmVzc2lvbi5vcGVyYW5kLCBgJHtwYXRofS9vcGVyYW5kYCwgbGFuZ3VhZ2UsIGVtaXRJZGVudGlmaWVyKVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAobGFuZ3VhZ2UgPT0gXCJqYXZhXCIgJiYgKGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiU3RyaW5nRXF1YWxcIiB8fCBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIpKSB7XG4gICAgY29uc3QgY29tcG9zaXRlT3BlcmF0b3IgPSBleHByZXNzaW9uLm9wZXJhdGlvbiA9PSBcIlN0cmluZ05vdEVxdWFsXCIgJiYgd3JpdGVyLmhhc1JhbmdlKGV4cHJlc3Npb24sIHBhdGgsIFwiZXF1YWxpdHlPcGVyYXRvclwiKVxuXG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiKSB7XG4gICAgICB3cml0ZXIubWFwcGVkKFwiIVwiLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB9XG4gICAgd3JpdGVyLm1hcHBlZChcIihcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbiAgICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIuZXF1YWxzXCIsIHtcbiAgICAgIG1hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IGNvbXBvc2l0ZU9wZXJhdG9yID8gXCJlcXVhbGl0eU9wZXJhdG9yXCIgOiBcIm9wZXJhdG9yXCJcbiAgICB9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIoXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgICB3cml0ZXIubWFwcGVkKFwiKVwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICAgIHdyaXRlci5tYXBwZWQoXCIpXCIsIHttYXBwaW5nS2luZDogXCJhbmNob3JcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aH0pXG4gICAgcmV0dXJuXG4gIH1cblxuICB3cml0ZXIubWFwcGVkKFwiKFwiLCB7bWFwcGluZ0tpbmQ6IFwiYW5jaG9yXCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGh9KVxuICBlbWl0RXhwcmVzc2lvbih3cml0ZXIsIGV4cHJlc3Npb24ubGVmdCwgYCR7cGF0aH0vbGVmdGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLnN5bnRoZXRpYyhcIiBcIiwgXCJvcGVyYXRvciBzcGFjaW5nXCIsIFtleHByZXNzaW9uXSwgW3BhdGhdKVxuICBjb25zdCBzcGVsbGluZyA9IGJpbmFyeU9wZXJhdGlvblNwZWxsaW5nKGV4cHJlc3Npb24ub3BlcmF0aW9uLCBsYW5ndWFnZSlcblxuICBpZiAoZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJTdHJpbmdOb3RFcXVhbFwiICYmIHdyaXRlci5oYXNSYW5nZShleHByZXNzaW9uLCBwYXRoLCBcImVxdWFsaXR5T3BlcmF0b3JcIikpIHtcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDAsIDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJvcGVyYXRvclwifSlcbiAgICB3cml0ZXIubWFwcGVkKHNwZWxsaW5nLnNsaWNlKDEpLCB7bWFwcGluZ0tpbmQ6IFwiZXhhY3RcIiwgbm9kZTogZXhwcmVzc2lvbiwgcGF0aCwgcm9sZTogXCJlcXVhbGl0eU9wZXJhdG9yXCJ9KVxuICB9IGVsc2Ugd3JpdGVyLm1hcHBlZChzcGVsbGluZywge21hcHBpbmdLaW5kOiBcImV4YWN0XCIsIG5vZGU6IGV4cHJlc3Npb24sIHBhdGgsIHJvbGU6IFwib3BlcmF0b3JcIn0pXG4gIHdyaXRlci5zeW50aGV0aWMoXCIgXCIsIFwib3BlcmF0b3Igc3BhY2luZ1wiLCBbZXhwcmVzc2lvbl0sIFtwYXRoXSlcbiAgZW1pdEV4cHJlc3Npb24od3JpdGVyLCBleHByZXNzaW9uLnJpZ2h0LCBgJHtwYXRofS9yaWdodGAsIGxhbmd1YWdlLCBlbWl0SWRlbnRpZmllcilcbiAgd3JpdGVyLm1hcHBlZChcIilcIiwge21hcHBpbmdLaW5kOiBcImFuY2hvclwiLCBub2RlOiBleHByZXNzaW9uLCBwYXRofSlcbn1cblxuLyoqXG4gKiBSZXBvcnRzIHdoZXRoZXIgSmF2YVNjcmlwdC1mYW1pbHkgZXhlY3V0aW9uIGNhbiBjcmVhdGUgSUVFRS03NTQgc2lnbmVkIHplcm8uXG4gKiBTZW1hbnRpZm9sZCBpbnRlZ2VycyBoYXZlIG9uZSBtYXRoZW1hdGljYWwgemVybywgc28gdGhvc2UgdGFyZ2V0cyBjYW5vbmljYWxpemVcbiAqIHRoZWlyIG9ic2VydmFibGUgc2NhbGFyIG91dHB1dCB3aXRob3V0IGNoYW5naW5nIHRoZSBvcGVyYXRpb24gdHJlZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IG1vZHVsZSAtIFZhbGlkYXRlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBjYW5vbmljYWwgb3V0cHV0IHJlbmRlcmluZyBpcyByZXF1aXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcXVpcmVzQ2Fub25pY2FsWmVyb1JlbmRlcmluZyhtb2R1bGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5mdW5jdGlvbnMuc29tZSgoZGVjbGFyYXRpb24pID0+IGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGRlY2xhcmF0aW9uLmJvZHkpKSB8fFxuICAgIGJsb2NrQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKG1vZHVsZS5lbnRyeVBvaW50LmJvZHkpXG59XG5cbi8qKlxuICogQ2hlY2tzIG9uZSBibG9jayBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5CbG9ja30gYmxvY2sgLSBTZW1hbnRpYyBibG9jay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGEgbmVzdGVkIGV4cHJlc3Npb24gY2FuIHByb2R1Y2Ugc2lnbmVkIHplcm8gaW4gSmF2YVNjcmlwdC5cbiAqL1xuZnVuY3Rpb24gYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oYmxvY2spIHtcbiAgcmV0dXJuIGJsb2NrLnN0YXRlbWVudHMuc29tZSgoc3RhdGVtZW50KSA9PiB7XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiSWZTdGF0ZW1lbnRcIikge1xuICAgICAgcmV0dXJuIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbmRpdGlvbikgfHxcbiAgICAgICAgYmxvY2tDb250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oc3RhdGVtZW50LmNvbnNlcXVlbnQpIHx8XG4gICAgICAgIEJvb2xlYW4oc3RhdGVtZW50LmFsdGVybmF0ZSAmJiBibG9ja0NvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuYWx0ZXJuYXRlKSlcbiAgICB9XG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiTG9jYWxEZWNsYXJhdGlvblwiKSByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuaW5pdGlhbGl6ZXIpXG4gICAgaWYgKHN0YXRlbWVudC5raW5kID09IFwiQXNzaWdubWVudFN0YXRlbWVudFwiIHx8IHN0YXRlbWVudC5raW5kID09IFwiUmV0dXJuU3RhdGVtZW50XCIgfHwgc3RhdGVtZW50LmtpbmQgPT0gXCJQcmludFN0YXRlbWVudFwiKSB7XG4gICAgICByZXR1cm4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihzdGF0ZW1lbnQuZXhwcmVzc2lvbilcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIGV4cHJlc3Npb24gdHJlZSBmb3Igc2lnbi1wcm9kdWNpbmcgaW50ZWdlciBvcGVyYXRpb25zLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5FeHByZXNzaW9ufSBleHByZXNzaW9uIC0gU2VtYW50aWMgZXhwcmVzc2lvbi5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIHRoaXMgdHJlZSBjb250YWlucyBpbnRlZ2VyIG5lZ2F0aW9uIG9yIG11bHRpcGxpY2F0aW9uLlxuICovXG5mdW5jdGlvbiBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24pIHtcbiAgaWYgKGV4cHJlc3Npb24ua2luZCA9PSBcIlVuYXJ5RXhwcmVzc2lvblwiKSB7XG4gICAgcmV0dXJuIGV4cHJlc3Npb24ub3BlcmF0aW9uID09IFwiSW50ZWdlck5lZ2F0ZVwiIHx8IGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5vcGVyYW5kKVxuICB9XG4gIGlmIChleHByZXNzaW9uLmtpbmQgPT0gXCJCaW5hcnlFeHByZXNzaW9uXCIpIHtcbiAgICByZXR1cm4gZXhwcmVzc2lvbi5vcGVyYXRpb24gPT0gXCJJbnRlZ2VyTXVsdGlwbHlcIiB8fCBleHByZXNzaW9uQ29udGFpbnNTaWduUHJvZHVjaW5nT3BlcmF0aW9uKGV4cHJlc3Npb24ubGVmdCkgfHxcbiAgICAgIGV4cHJlc3Npb25Db250YWluc1NpZ25Qcm9kdWNpbmdPcGVyYXRpb24oZXhwcmVzc2lvbi5yaWdodClcbiAgfVxuICBpZiAoZXhwcmVzc2lvbi5raW5kID09IFwiQ2FsbEV4cHJlc3Npb25cIikge1xuICAgIHJldHVybiBleHByZXNzaW9uLmFyZ3VtZW50cy5zb21lKChhcmd1bWVudCkgPT4gZXhwcmVzc2lvbkNvbnRhaW5zU2lnblByb2R1Y2luZ09wZXJhdGlvbihhcmd1bWVudCkpXG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gKiBNYXBzIG9uZSBhbHJlYWR5IHZhbGlkYXRlZCBzZW1hbnRpYyBvcGVyYXRpb24gdG8gdGFyZ2V0IHN5bnRheC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNCaW5hcnlPcGVyYXRpb259IG9wZXJhdGlvbiAtIENsb3NlZCBzZW1hbnRpYyBvcGVyYXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHJldHVybnMge3N0cmluZ30gVGFyZ2V0IG9wZXJhdG9yIHNwZWxsaW5nLlxuICovXG5mdW5jdGlvbiBiaW5hcnlPcGVyYXRpb25TcGVsbGluZyhvcGVyYXRpb24sIGxhbmd1YWdlKSB7XG4gIGNvbnN0IHN5bnRheCA9IGJpbmFyeU9wZXJhdGlvblN5bnRheFtvcGVyYXRpb25dXG5cbiAgaWYgKGxhbmd1YWdlID09IFwicGhwXCIgJiYgc3ludGF4LnBocCkgcmV0dXJuIHN5bnRheC5waHBcbiAgaWYgKGxhbmd1YWdlID09IFwicHl0aG9uXCIgJiYgc3ludGF4LnB5dGhvbikgcmV0dXJuIHN5bnRheC5weXRob25cbiAgaWYgKChsYW5ndWFnZSA9PSBcInBocFwiIHx8IGxhbmd1YWdlID09IFwiamF2YXNjcmlwdFwiIHx8IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiKSAmJiBzeW50YXguc3RyaWN0KSByZXR1cm4gc3ludGF4LnN0cmljdFxuXG4gIHJldHVybiBzeW50YXguZGVmYXVsdFxufVxuIl19
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates and validates an immutable byte-coordinate provenance map.
|
|
3
|
+
* @param {object} input - Mapping fields.
|
|
4
|
+
* @param {number} input.byteLength - Generated artifact byte length.
|
|
5
|
+
* @param {string} input.path - Generated artifact path.
|
|
6
|
+
* @param {import("./semantic/types.js").GeneratedByteRange[]} input.ranges - Ordered byte ranges.
|
|
7
|
+
* @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
|
|
8
|
+
*/
|
|
9
|
+
export declare function createByteMapping(input: {
|
|
10
|
+
byteLength: number;
|
|
11
|
+
path: string;
|
|
12
|
+
ranges: import("./semantic/types.js").GeneratedByteRange[];
|
|
13
|
+
}): import("./semantic/types.js").SemantifoldByteMapping;
|
|
14
|
+
/**
|
|
15
|
+
* Parses serialized byte-coordinate provenance.
|
|
16
|
+
* @param {string} serialized - JSON mapping.
|
|
17
|
+
* @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseByteMapping(serialized: string): import("./semantic/types.js").SemantifoldByteMapping;
|
|
20
|
+
/**
|
|
21
|
+
* Serializes a validated mapping with stable object-key ordering.
|
|
22
|
+
* @param {import("./semantic/types.js").SemantifoldByteMapping} mapping - Byte mapping.
|
|
23
|
+
* @returns {string} Canonical JSON with trailing LF.
|
|
24
|
+
*/
|
|
25
|
+
export declare function stringifyByteMapping(mapping: import("./semantic/types.js").SemantifoldByteMapping): string;
|
|
26
|
+
/**
|
|
27
|
+
* Validates an existing mapping and returns a detached immutable value.
|
|
28
|
+
* @param {unknown} candidate - Mapping candidate.
|
|
29
|
+
* @returns {import("./semantic/types.js").SemantifoldByteMapping} Validated mapping.
|
|
30
|
+
*/
|
|
31
|
+
export declare function finalizeByteMapping(candidate: unknown): import("./semantic/types.js").SemantifoldByteMapping;
|
|
32
|
+
//# sourceMappingURL=binary-mapping.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binary-mapping.d.ts","sourceRoot":"","sources":["../../src/binary-mapping.js"],"names":[],"mappings":"AAOA;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EALpC;IAAsB,UAAU,EAAxB,MAAM,CACd;IAAsB,IAAI,EAAlB,MAAM,CACd;IAAkE,MAAM,EAAhE,OAAO,qBAAqB,EAAE,kBAAkB,EAAE,CAC1D;CAEoC,GAF1B,OAAO,qBAAqB,EAAE,sBAAsB,CAahE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAHhC,MAGgC,GAF9B,OAAO,qBAAqB,EAAE,sBAAsB,CAUhE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAHjC,OAAO,qBAAqB,EAAE,sBAGG,GAF/B,MAAM,CAMlB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAHlC,OAGkC,GAFhC,OAAO,qBAAqB,EAAE,sBAAsB,CAgEhE"}
|