occam-verify-cli 1.0.476 → 1.0.479
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/lib/context/file.js +8 -2
- package/lib/context/scoped.js +9 -3
- package/lib/element/assertion/contained.js +3 -3
- package/lib/element/assertion/defined.js +46 -6
- package/lib/element/assertion/property.js +45 -5
- package/lib/element/assertion/satisfies.js +45 -5
- package/lib/element/assertion/subproof.js +4 -4
- package/lib/element/assertion/type.js +45 -5
- package/lib/element/assumption.js +4 -4
- package/lib/element/combinator/bracketed.js +3 -3
- package/lib/element/combinator.js +3 -3
- package/lib/element/conclusion.js +3 -3
- package/lib/element/constructor/bracketed.js +45 -5
- package/lib/element/constructor.js +3 -3
- package/lib/element/declaration/combinator.js +3 -4
- package/lib/element/declaration/complexType.js +3 -4
- package/lib/element/declaration/constructor.js +3 -4
- package/lib/element/declaration/metavariable.js +3 -4
- package/lib/element/declaration/simpleType.js +3 -4
- package/lib/element/declaration/typePrefix.js +3 -4
- package/lib/element/declaration/variable.js +3 -4
- package/lib/element/deduction.js +3 -3
- package/lib/element/derivation.js +5 -4
- package/lib/element/equality.js +4 -4
- package/lib/element/equivalence.js +5 -4
- package/lib/element/equivalences.js +5 -4
- package/lib/element/error.js +3 -3
- package/lib/element/frame.js +6 -5
- package/lib/element/hypothesis.js +3 -3
- package/lib/element/judgement.js +4 -4
- package/lib/element/label.js +3 -3
- package/lib/element/metaType.js +3 -3
- package/lib/element/metavariable.js +47 -6
- package/lib/element/parameter.js +3 -3
- package/lib/element/procedureCall.js +3 -3
- package/lib/element/procedureReference.js +3 -3
- package/lib/element/proof.js +3 -3
- package/lib/element/proofAssertion/premise.js +3 -4
- package/lib/element/proofAssertion/step.js +45 -5
- package/lib/element/proofAssertion/supposition.js +3 -4
- package/lib/element/property.js +3 -3
- package/lib/element/propertyRelation.js +3 -3
- package/lib/element/reference.js +4 -4
- package/lib/element/rule.js +48 -6
- package/lib/element/section.js +3 -3
- package/lib/element/signature.js +6 -5
- package/lib/element/statement.js +5 -4
- package/lib/element/subDerivation.js +5 -4
- package/lib/element/subproof.js +4 -4
- package/lib/element/substitution/frame.js +3 -4
- package/lib/element/substitution/reference.js +3 -4
- package/lib/element/substitution/statement.js +45 -5
- package/lib/element/substitution/term.js +3 -4
- package/lib/element/substitutions.js +5 -4
- package/lib/element/term.js +5 -4
- package/lib/element/topLevelAssertion/axiom.js +3 -4
- package/lib/element/topLevelAssertion/conjecture.js +3 -4
- package/lib/element/topLevelAssertion/lemma.js +3 -4
- package/lib/element/topLevelAssertion/theorem.js +3 -4
- package/lib/element/topLevelMetaAssertion/metaLemma.js +3 -4
- package/lib/element/topLevelMetaAssertion/metatheorem.js +3 -4
- package/lib/element/type.js +5 -4
- package/lib/element/typePrefix.js +3 -3
- package/lib/element/variable.js +4 -4
- package/lib/elements.js +27 -0
- package/lib/metaTypes.js +10 -5
- package/lib/node/argument.js +4 -9
- package/lib/node/assertion.js +4 -9
- package/lib/node/assumption.js +6 -11
- package/lib/node/body.js +4 -9
- package/lib/node/combinator.js +4 -9
- package/lib/node/conclusion.js +4 -9
- package/lib/node/constructor.js +4 -9
- package/lib/node/declaration.js +4 -9
- package/lib/node/deduction.js +4 -9
- package/lib/node/derivation.js +4 -9
- package/lib/node/document.js +4 -9
- package/lib/node/equality.js +4 -9
- package/lib/node/equivalence.js +4 -9
- package/lib/node/equivalences.js +4 -9
- package/lib/node/error.js +4 -9
- package/lib/node/frame.js +4 -9
- package/lib/node/header.js +4 -9
- package/lib/node/hypothesis.js +4 -9
- package/lib/node/judgement.js +4 -9
- package/lib/node/label.js +4 -9
- package/lib/node/labels.js +4 -9
- package/lib/node/metaArgument.js +4 -9
- package/lib/node/metaType.js +4 -9
- package/lib/node/metavariable.js +4 -9
- package/lib/node/parameter.js +4 -9
- package/lib/node/parenthesisedLabel.js +4 -9
- package/lib/node/parenthesisedLabels.js +4 -9
- package/lib/node/placeholder.js +4 -9
- package/lib/node/procedureCall.js +4 -9
- package/lib/node/procedureReference.js +4 -9
- package/lib/node/proof.js +4 -9
- package/lib/node/proofAssertion.js +4 -9
- package/lib/node/property.js +4 -9
- package/lib/node/propertyRelation.js +4 -9
- package/lib/node/qualification.js +4 -9
- package/lib/node/reference.js +4 -9
- package/lib/node/rule.js +4 -9
- package/lib/node/section.js +4 -9
- package/lib/node/signature.js +4 -9
- package/lib/node/statement.js +4 -9
- package/lib/node/subDerivation.js +4 -9
- package/lib/node/subproof.js +4 -9
- package/lib/node/substitution.js +4 -9
- package/lib/node/term.js +4 -9
- package/lib/node/topLevelAssertion.js +4 -9
- package/lib/node/topLevelMetaAssertion.js +4 -9
- package/lib/node/type.js +4 -9
- package/lib/node/typePrefix.js +4 -9
- package/lib/node/types.js +4 -9
- package/lib/node/variable.js +4 -9
- package/lib/nominal/parser.js +3 -3
- package/lib/types.js +8 -3
- package/lib/utilities/element.js +62 -57
- package/lib/utilities/json.js +37 -32
- package/lib/utilities/unification.js +11 -6
- package/lib/utilities/validation.js +8 -3
- package/package.json +6 -6
- package/src/context/file.js +3 -1
- package/src/context/scoped.js +3 -1
- package/src/element/assertion/contained.js +1 -2
- package/src/element/assertion/defined.js +2 -4
- package/src/element/assertion/property.js +2 -4
- package/src/element/assertion/satisfies.js +2 -3
- package/src/element/assertion/subproof.js +2 -3
- package/src/element/assertion/type.js +2 -4
- package/src/element/assumption.js +2 -3
- package/src/element/combinator/bracketed.js +1 -1
- package/src/element/combinator.js +2 -3
- package/src/element/conclusion.js +2 -3
- package/src/element/constructor/bracketed.js +2 -3
- package/src/element/constructor.js +2 -3
- package/src/element/declaration/combinator.js +1 -3
- package/src/element/declaration/complexType.js +1 -3
- package/src/element/declaration/constructor.js +1 -4
- package/src/element/declaration/metavariable.js +1 -3
- package/src/element/declaration/simpleType.js +1 -3
- package/src/element/declaration/typePrefix.js +1 -3
- package/src/element/declaration/variable.js +1 -3
- package/src/element/deduction.js +2 -3
- package/src/element/derivation.js +4 -3
- package/src/element/equality.js +2 -3
- package/src/element/equivalence.js +3 -3
- package/src/element/equivalences.js +3 -3
- package/src/element/error.js +2 -2
- package/src/element/frame.js +3 -3
- package/src/element/hypothesis.js +2 -3
- package/src/element/judgement.js +2 -3
- package/src/element/label.js +2 -3
- package/src/element/metaType.js +2 -2
- package/src/element/metavariable.js +4 -3
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -3
- package/src/element/procedureReference.js +2 -2
- package/src/element/proof.js +2 -3
- package/src/element/proofAssertion/premise.js +1 -4
- package/src/element/proofAssertion/step.js +2 -4
- package/src/element/proofAssertion/supposition.js +1 -4
- package/src/element/property.js +2 -2
- package/src/element/propertyRelation.js +2 -2
- package/src/element/reference.js +2 -3
- package/src/element/rule.js +5 -3
- package/src/element/section.js +2 -2
- package/src/element/signature.js +3 -3
- package/src/element/statement.js +3 -3
- package/src/element/subDerivation.js +4 -3
- package/src/element/subproof.js +2 -3
- package/src/element/substitution/frame.js +1 -4
- package/src/element/substitution/reference.js +1 -4
- package/src/element/substitution/statement.js +2 -4
- package/src/element/substitution/term.js +1 -4
- package/src/element/substitutions.js +3 -3
- package/src/element/term.js +3 -3
- package/src/element/topLevelAssertion/axiom.js +1 -3
- package/src/element/topLevelAssertion/conjecture.js +1 -3
- package/src/element/topLevelAssertion/lemma.js +1 -3
- package/src/element/topLevelAssertion/theorem.js +1 -3
- package/src/element/topLevelMetaAssertion/metaLemma.js +1 -3
- package/src/element/topLevelMetaAssertion/metatheorem.js +1 -3
- package/src/element/type.js +3 -3
- package/src/element/typePrefix.js +2 -2
- package/src/element/variable.js +2 -3
- package/src/elements.js +13 -0
- package/src/metaTypes.js +1 -1
- package/src/node/argument.js +1 -1
- package/src/node/assertion.js +1 -1
- package/src/node/assumption.js +2 -2
- package/src/node/body.js +1 -1
- package/src/node/combinator.js +1 -1
- package/src/node/conclusion.js +1 -1
- package/src/node/constructor.js +1 -1
- package/src/node/declaration.js +1 -1
- package/src/node/deduction.js +1 -1
- package/src/node/derivation.js +1 -1
- package/src/node/document.js +1 -1
- package/src/node/equality.js +1 -2
- package/src/node/equivalence.js +1 -1
- package/src/node/equivalences.js +1 -1
- package/src/node/error.js +1 -1
- package/src/node/frame.js +1 -1
- package/src/node/header.js +1 -1
- package/src/node/hypothesis.js +1 -1
- package/src/node/judgement.js +1 -1
- package/src/node/label.js +1 -1
- package/src/node/labels.js +1 -1
- package/src/node/metaArgument.js +1 -1
- package/src/node/metaType.js +1 -1
- package/src/node/metavariable.js +1 -1
- package/src/node/parameter.js +1 -1
- package/src/node/parenthesisedLabel.js +1 -1
- package/src/node/parenthesisedLabels.js +1 -1
- package/src/node/placeholder.js +1 -1
- package/src/node/procedureCall.js +1 -1
- package/src/node/procedureReference.js +1 -1
- package/src/node/proof.js +1 -1
- package/src/node/proofAssertion.js +1 -1
- package/src/node/property.js +1 -1
- package/src/node/propertyRelation.js +1 -1
- package/src/node/qualification.js +1 -1
- package/src/node/reference.js +1 -1
- package/src/node/rule.js +1 -1
- package/src/node/section.js +1 -1
- package/src/node/signature.js +1 -1
- package/src/node/statement.js +1 -1
- package/src/node/subDerivation.js +1 -1
- package/src/node/subproof.js +1 -1
- package/src/node/substitution.js +1 -1
- package/src/node/term.js +1 -1
- package/src/node/topLevelAssertion.js +1 -1
- package/src/node/topLevelMetaAssertion.js +1 -1
- package/src/node/type.js +1 -1
- package/src/node/typePrefix.js +1 -1
- package/src/node/types.js +1 -1
- package/src/node/variable.js +1 -1
- package/src/nominal/parser.js +1 -1
- package/src/types.js +1 -1
- package/src/utilities/element.js +1 -1
- package/src/utilities/json.js +1 -1
- package/src/utilities/unification.js +2 -1
- package/src/utilities/validation.js +1 -1
- package/lib/nonTerminalNode.js +0 -222
- package/src/nonTerminalNode.js +0 -136
|
@@ -8,10 +8,15 @@ Object.defineProperty(exports, "unifyStatements", {
|
|
|
8
8
|
return unifyStatements;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var _occamfurtle = require("occam-furtle");
|
|
12
11
|
var _necessary = require("necessary");
|
|
12
|
+
var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
13
13
|
var _context = require("../utilities/context");
|
|
14
14
|
var _statement = require("../utilities/statement");
|
|
15
|
+
function _interop_require_default(obj) {
|
|
16
|
+
return obj && obj.__esModule ? obj : {
|
|
17
|
+
default: obj
|
|
18
|
+
};
|
|
19
|
+
}
|
|
15
20
|
var backwardsSome = _necessary.arrayUtilities.backwardsSome;
|
|
16
21
|
function unifyStatementWithRule(statement, reference, satisfiesAssertion, context) {
|
|
17
22
|
var statementUnifiesWithRule = false;
|
|
@@ -40,7 +45,7 @@ function unifyStatementWithReference(statement, reference, satisfiesAssertion, c
|
|
|
40
45
|
if (metavariableValidates) {
|
|
41
46
|
var metavariable = reference.getMetavariable();
|
|
42
47
|
(0, _context.synthetically)(function(context) {
|
|
43
|
-
var StatementSubstitution =
|
|
48
|
+
var StatementSubstitution = _elements.default.StatementSubstitution;
|
|
44
49
|
StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context);
|
|
45
50
|
}, generalContext, specificContext);
|
|
46
51
|
statementUnifiesWithReference = true;
|
|
@@ -75,7 +80,7 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
|
|
|
75
80
|
if (axiom !== null) {
|
|
76
81
|
var satisfiable = axiom.isSatisfiable();
|
|
77
82
|
if (satisfiable) {
|
|
78
|
-
var Substitutions =
|
|
83
|
+
var Substitutions = _elements.default.Substitutions, substitutions1 = Substitutions.fromNothing(context), topLevelAssertionUnifies = axiom.unifyTopLevelAssertion(topLevelAssertion, substitutions1, context);
|
|
79
84
|
if (topLevelAssertionUnifies) {
|
|
80
85
|
var substitutionsCorrelates = satisfiesAssertion.correlateSubstitutions(substitutions1, context);
|
|
81
86
|
if (substitutionsCorrelates) {
|
|
@@ -98,7 +103,7 @@ function unifyStatementAsSatisfiesAssertion(statement, reference, satisfiesAsser
|
|
|
98
103
|
function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAssertion, context) {
|
|
99
104
|
var statementUnifiesWithTopLevelAssertion = false;
|
|
100
105
|
if (reference !== null) {
|
|
101
|
-
var Substitutions =
|
|
106
|
+
var Substitutions = _elements.default.Substitutions, topLevelAssertion = context.findTopLevelAssertionByReference(reference), generalSubstitutions = substitutions; ///
|
|
102
107
|
if (topLevelAssertion !== null) {
|
|
103
108
|
var statementString = statement.getString(), topLevelAssertionString = reference.getString();
|
|
104
109
|
context.trace("Unifying the '".concat(statementString, "' statement with the '").concat(topLevelAssertionString, "' top level assertion..."));
|
|
@@ -108,7 +113,7 @@ function unifyStatementWithTopLevelAssertion(statement, reference, satisfiesAsse
|
|
|
108
113
|
if (statementAndSubproofOrProofAssertionsUnify) {
|
|
109
114
|
var metavariable = reference.getMetavariable();
|
|
110
115
|
(0, _context.synthetically)(function(context) {
|
|
111
|
-
var StatementSubstitution =
|
|
116
|
+
var StatementSubstitution = _elements.default.StatementSubstitution;
|
|
112
117
|
StatementSubstitution.fromStatementAndMetavariable(statement, metavariable, context);
|
|
113
118
|
}, generalContext, specificContext);
|
|
114
119
|
statementUnifiesWithTopLevelAssertion = true;
|
|
@@ -235,4 +240,4 @@ var unifyStatements = [
|
|
|
235
240
|
compareStatementWithSubproofOrProofAssertions
|
|
236
241
|
];
|
|
237
242
|
|
|
238
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGVsZW1lbnRzIH0gZnJvbSBcIm9jY2FtLWZ1cnRsZVwiO1xuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCB7IHN5bnRoZXRpY2FsbHkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuXG4gICAgICAgIFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IHRydWUsXG4gICAgICAgICAgYXNzaWdubWVudHMgPSBudWxsO1xuXG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uLnZlcmlmeVNpZ25hdHVyZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gYmFja3dhcmRzU29tZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3RlcHNPclN1YnByb29mKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBzdGVwc09yU3VicHJvb2YudW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgcmVmZXJlbmNlID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICAgIGlmIChheGlvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gYXhpb20uaXNTYXRpc2ZpYWJsZSgpO1xuXG4gICAgICAgICAgaWYgKHNhdGlzZmlhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IFN1YnN0aXR1dGlvbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFN1YnN0aXR1dGlvbnMuZnJvbU5vdGhpbmcoY29udGV4dCksXG4gICAgICAgICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblVuaWZpZXMgPSBheGlvbS51bmlmeVRvcExldmVsQXNzZXJ0aW9uKHRvcExldmVsQXNzZXJ0aW9uLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zQ29ycmVsYXRlcyA9IHNhdGlzZmllc0Fzc2VydGlvbi5jb3JyZWxhdGVTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25zQ29ycmVsYXRlcykge1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHVuaWZ5IHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYmVjYXVzZSBpdCBpcyBub3Qgc2F0aXNmaWFibGUuYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTdWJzdGl0dXRpb25zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7IC8vL1xuXG4gICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICAgIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgICAgICAgICBTdGF0ZW1lbnRTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICAgICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVxdWFsaXR5RXF1YWwgPSBlcXVhbGl0eS5pc0VxdWFsKGNvbnRleHQpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlFcXVhbCkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3QgdGVybSA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFRlcm0oKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gY29udGV4dC5maW5kRXF1aXZhbGVuY2VCeVRlcm0odGVybSk7XG5cbiAgICAgIGlmIChlcXVpdmFsZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk1hdGNoZXMgPSBlcXVpdmFsZW5jZS5zb21lT3RoZXJUZXJtKHRlcm0sICh0ZXJtKSA9PiB7ICAvLy9cbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0UHJvcGVydHlSZWxhdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IGNvbnRleHQuY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gICAgICAgICAgaWYgKGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJvcGVydHlBc3NlcnRpb25NYXRjaGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvblN0cmluZyA9IHNhdGlzZmllc0Fzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVtbnQgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzID0gc3RhdGVtZW50LmNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMpIHtcbiAgICAgIHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RhdGVtZW50cyA9IFtcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlLFxuICB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHksXG4gIHVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFNhdGlzZmllc0Fzc2VydGlvbixcbiAgY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zXG5dO1xuIl0sIm5hbWVzIjpbInVuaWZ5U3RhdGVtZW50cyIsImJhY2t3YXJkc1NvbWUiLCJhcnJheVV0aWxpdGllcyIsInVuaWZ5U3RhdGVtZW50V2l0aFJ1bGUiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RhdGVtZW50VW5pZmllc1dpdGhSdWxlIiwicnVsZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJydWxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwidHJhY2UiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImRlYnVnIiwidW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlIiwic3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsInN5bnRoZXRpY2FsbHkiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsImZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3RhdGVkIiwiYXNzaWdubWVudHMiLCJ2ZXJpZnlTaWduYXR1cmUiLCJzdGVwc09yU3VicHJvb2YiLCJzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsImF4aW9tIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJzYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImZyb21Ob3RoaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsImF4aW9tU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5Iiwic3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlFcXVhbCIsImlzRXF1YWwiLCJ1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50Iiwic3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0ZXJtIiwiZ2V0VGVybSIsImVxdWl2YWxlbmNlIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwicHJvcGVydHlBc3NlcnRpb25NYXRjaGVzIiwic29tZU90aGVyVGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJnZXRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmciLCJzdGF0ZW1lbnRVbmlmaWVzIiwiY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQThVYUE7OztlQUFBQTs7OzJCQTVVWTt5QkFDTTt1QkFFRDt5QkFLa0I7QUFFaEQsSUFBTSxBQUFFQyxnQkFBa0JDLHlCQUFjLENBQWhDRDtBQUVSLFNBQVNFLHVCQUF1QkMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPO0lBQy9FLElBQUlDLDJCQUEyQjtJQUUvQixJQUFJSCxjQUFjLE1BQU07UUFDdEIsSUFBTUksT0FBT0YsUUFBUUcsbUJBQW1CLENBQUNMO1FBRXpDLElBQUlJLFNBQVMsTUFBTTtZQUNqQixJQUFNRSxhQUFhRixLQUFLRyxTQUFTLElBQzNCQyxrQkFBa0JULFVBQVVRLFNBQVM7WUFFM0NMLFFBQVFPLEtBQUssQ0FBQyxBQUFDLGlCQUF3REgsT0FBeENFLGlCQUFnQiwwQkFBbUMsT0FBWEYsWUFBVztZQUVsRixJQUFNSSw0QkFBNEJSLFFBQVFTLDRCQUE0QixJQUNoRUMsNkNBQTZDUixLQUFLUywwQ0FBMEMsQ0FBQ2QsV0FBV1csMkJBQTJCUjtZQUV6SSxJQUFJVSw0Q0FBNEM7Z0JBQzlDVCwyQkFBMkI7WUFDN0I7WUFFQSxJQUFJQSwwQkFBMEI7Z0JBQzVCRCxRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBMERSLE9BQXhDRSxpQkFBZ0IsMEJBQW1DLE9BQVhGLFlBQVc7WUFDdEY7UUFDRjtJQUNGO0lBRUEsT0FBT0g7QUFDVDtBQUVBLFNBQVNZLDRCQUE0QmhCLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTztJQUNwRixJQUFJYyxnQ0FBZ0M7SUFFcEMsSUFBSWhCLGNBQWMsTUFBTTtR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
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdW5pZmljYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IHN5bnRoZXRpY2FsbHkgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5jb25zdCB7IGJhY2t3YXJkc1NvbWUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSdWxlKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoUnVsZSA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICBjb25zdCBydWxlID0gY29udGV4dC5maW5kUnVsZUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAocnVsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgcnVsZVN0cmluZyA9IHJ1bGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cnVsZVN0cmluZ30nIHJ1bGUuLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpLFxuICAgICAgICAgICAgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gcnVsZS51bmlmeVN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoc3RhdGVtZW50LCBzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFJ1bGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtydWxlU3RyaW5nfScgcnVsZS5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhSdWxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhSZWZlcmVuY2Uoc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVWYWxpZGF0ZXMgPSByZWZlcmVuY2UudmFsaWRhdGVNZXRhdmFyaWFibGUoY29udGV4dCk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlVmFsaWRhdGVzKSB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSByZWZlcmVuY2UuZ2V0TWV0YXZhcmlhYmxlKCk7XG5cbiAgICAgIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBTdGF0ZW1lbnRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzO1xuXG4gICAgICAgIFN0YXRlbWVudFN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBjb250ZXh0KTtcblxuICAgICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoUmVmZXJlbmNlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlZCA9IHRydWUsXG4gICAgICAgICAgYXNzaWdubWVudHMgPSBudWxsO1xuXG4gICAgc2F0aXNmaWVzQXNzZXJ0aW9uLnZlcmlmeVNpZ25hdHVyZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uID0gYmFja3dhcmRzU29tZShzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zLCAoc3RlcHNPclN1YnByb29mKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBzdGVwc09yU3VicHJvb2YudW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0ZXBPclN1YlByb29mVW5pZmllc1dJdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRvcExldmVsQXNzZXJ0aW9uID0gY29udGV4dC5maW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICBpZiAodG9wTGV2ZWxBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgcmVmZXJlbmNlID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFJlZmVyZW5jZSgpO1xuXG4gICAgICAgIGNvbnN0IGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgICAgIGlmIChheGlvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gYXhpb20uaXNTYXRpc2ZpYWJsZSgpO1xuXG4gICAgICAgICAgaWYgKHNhdGlzZmlhYmxlKSB7XG4gICAgICAgICAgICBjb25zdCB7IFN1YnN0aXR1dGlvbnMgfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFN1YnN0aXR1dGlvbnMuZnJvbU5vdGhpbmcoY29udGV4dCksXG4gICAgICAgICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblVuaWZpZXMgPSBheGlvbS51bmlmeVRvcExldmVsQXNzZXJ0aW9uKHRvcExldmVsQXNzZXJ0aW9uLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zQ29ycmVsYXRlcyA9IHNhdGlzZmllc0Fzc2VydGlvbi5jb3JyZWxhdGVTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJzdGl0dXRpb25zQ29ycmVsYXRlcykge1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXNBc1NhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgYXhpb21TdHJpbmcgPSBheGlvbS5nZXRTdHJpbmcoKTtcblxuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHVuaWZ5IHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYmVjYXVzZSBpdCBpcyBub3Qgc2F0aXNmaWFibGUuYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc0FzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aFRvcExldmVsQXNzZXJ0aW9uKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlICE9PSBudWxsKSB7XG4gICAgY29uc3QgeyBTdWJzdGl0dXRpb25zIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvbiA9IGNvbnRleHQuZmluZFRvcExldmVsQXNzZXJ0aW9uQnlSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBnZW5lcmFsU3Vic3RpdHV0aW9ucyA9IHN1YnN0aXR1dGlvbnM7IC8vL1xuXG4gICAgaWYgKHRvcExldmVsQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB0b3BMZXZlbEFzc2VydGlvblN0cmluZyA9IHJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyA9IGNvbnRleHQuZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucygpO1xuXG4gICAgICBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uc1VuaWZ5ID0gdG9wTGV2ZWxBc3NlcnRpb24udW5pZnlTdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN0YXRlbWVudCwgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucywgc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRBbmRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zVW5pZnkpIHtcbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gcmVmZXJlbmNlLmdldE1ldGF2YXJpYWJsZSgpO1xuXG4gICAgICAgIHN5bnRoZXRpY2FsbHkoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB7IFN0YXRlbWVudFN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgICAgICAgICBTdGF0ZW1lbnRTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgY29udGV4dCk7XG5cbiAgICAgICAgfSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhUb3BMZXZlbEFzc2VydGlvbiA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHt0b3BMZXZlbEFzc2VydGlvblN0cmluZ30nIHRvcCBsZXZlbCBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoVG9wTGV2ZWxBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkgPSBmYWxzZTtcblxuICBpZiAocmVmZXJlbmNlID09PSBudWxsKSB7XG4gICAgY29uc3QgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICAgIGNvbnN0IGVxdWFsaXR5RXF1YWwgPSBlcXVhbGl0eS5pc0VxdWFsKGNvbnRleHQpO1xuXG4gICAgICBpZiAoZXF1YWxpdHlFcXVhbCkge1xuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5ID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBRXF1YWxpdHkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzQUVxdWFsaXR5O1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50ID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVzQXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbihzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgICAgY29uc3QgdGVybSA9IHByb3BlcnR5QXNzZXJ0aW9uLmdldFRlcm0oKSxcbiAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gY29udGV4dC5maW5kRXF1aXZhbGVuY2VCeVRlcm0odGVybSk7XG5cbiAgICAgIGlmIChlcXVpdmFsZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvbk1hdGNoZXMgPSBlcXVpdmFsZW5jZS5zb21lT3RoZXJUZXJtKHRlcm0sICh0ZXJtKSA9PiB7ICAvLy9cbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eVJlbGF0aW9uID0gcHJvcGVydHlBc3NlcnRpb24uZ2V0UHJvcGVydHlSZWxhdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IGNvbnRleHQuY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uKHRlcm0sIHByb3BlcnR5UmVsYXRpb24pO1xuXG4gICAgICAgICAgaWYgKGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAocHJvcGVydHlBc3NlcnRpb25NYXRjaGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzQXNQcm9wZXJ0eUFzc2VydGlvbikge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCByZWZlcmVuY2UsIHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvblN0cmluZyA9IHNhdGlzZmllc0Fzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbW50IHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVtbnQgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVTdGF0ZW1lbnRXaXRoU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyhzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcyA9IGZhbHNlO1xuXG4gIGlmIChyZWZlcmVuY2UgPT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBDb21wYXJpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSBzdWJwcm9vZnMgb3IgcHJvb2YgYXNzc2VydGlvbnMuLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMgPSBjb250ZXh0LmdldFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzID0gc3RhdGVtZW50LmNvbXBhcmVTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMsIGNvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZXNXaXRoU3RlcHMpIHtcbiAgICAgIHN0YXRlbWVudEVxdWF0ZXNXaXRoU3RlcE9yU3VicHJvb2ZzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmNvbXBhcmVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgc3VicHJvb2ZzIG9yIHByb29mIGFzc3NlcnRpb25zLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRFcXVhdGVzV2l0aFN0ZXBPclN1YnByb29mcztcbn1cblxuZXhwb3J0IGNvbnN0IHVuaWZ5U3RhdGVtZW50cyA9IFtcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUnVsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlLFxuICB1bmlmeVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudFdpdGhUb3BMZXZlbEFzc2VydGlvbixcbiAgdW5pZnlTdGF0ZW1lbnRBRXF1YWxpdHksXG4gIHVuaWZ5U3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB1bmlmeVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHVuaWZ5U3RhdGVtZW50V2l0aFNhdGlzZmllc0Fzc2VydGlvbixcbiAgY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zXG5dO1xuIl0sIm5hbWVzIjpbInVuaWZ5U3RhdGVtZW50cyIsImJhY2t3YXJkc1NvbWUiLCJhcnJheVV0aWxpdGllcyIsInVuaWZ5U3RhdGVtZW50V2l0aFJ1bGUiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RhdGVtZW50VW5pZmllc1dpdGhSdWxlIiwicnVsZSIsImZpbmRSdWxlQnlSZWZlcmVuY2UiLCJydWxlU3RyaW5nIiwiZ2V0U3RyaW5nIiwic3RhdGVtZW50U3RyaW5nIiwidHJhY2UiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwiZ2V0U3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsInN0YXRlbWVudEFuZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbnNVbmlmeSIsInVuaWZ5U3RhdGVtZW50QW5kU3VicHJvb2ZPclByb29mQXNzZXJ0aW9ucyIsImRlYnVnIiwidW5pZnlTdGF0ZW1lbnRXaXRoUmVmZXJlbmNlIiwic3RhdGVtZW50VW5pZmllc1dpdGhSZWZlcmVuY2UiLCJyZWZlcmVuY2VTdHJpbmciLCJtZXRhdmFyaWFibGVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZU1ldGF2YXJpYWJsZSIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsInN5bnRoZXRpY2FsbHkiLCJTdGF0ZW1lbnRTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsImZyb21TdGF0ZW1lbnRBbmRNZXRhdmFyaWFibGUiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzQXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic3RhdGVkIiwiYXNzaWdubWVudHMiLCJ2ZXJpZnlTaWduYXR1cmUiLCJzdGVwc09yU3VicHJvb2YiLCJzdGVwT3JTdWJQcm9vZlVuaWZpZXNXSXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmaW5kVG9wTGV2ZWxBc3NlcnRpb25CeVJlZmVyZW5jZSIsImdldFJlZmVyZW5jZSIsImF4aW9tIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJzYXRpc2ZpYWJsZSIsImlzU2F0aXNmaWFibGUiLCJTdWJzdGl0dXRpb25zIiwic3Vic3RpdHV0aW9ucyIsImZyb21Ob3RoaW5nIiwidG9wTGV2ZWxBc3NlcnRpb25VbmlmaWVzIiwidW5pZnlUb3BMZXZlbEFzc2VydGlvbiIsInN1YnN0aXR1dGlvbnNDb3JyZWxhdGVzIiwiY29ycmVsYXRlU3Vic3RpdHV0aW9ucyIsImF4aW9tU3RyaW5nIiwidW5pZnlTdGF0ZW1lbnRXaXRoVG9wTGV2ZWxBc3NlcnRpb24iLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFRvcExldmVsQXNzZXJ0aW9uIiwiZ2VuZXJhbFN1YnN0aXR1dGlvbnMiLCJ0b3BMZXZlbEFzc2VydGlvblN0cmluZyIsInVuaWZ5U3RhdGVtZW50QUVxdWFsaXR5Iiwic3RhdGVtZW50VW5pZmllc0FFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlFcXVhbCIsImlzRXF1YWwiLCJ1bmlmeVN0YXRlbWVudEFzSnVkZ2VtZW50Iiwic3RhdGVtZW50VW5pZmllc0FzSnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50RnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc0FzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFVuaWZpZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0ZXJtIiwiZ2V0VGVybSIsImVxdWl2YWxlbmNlIiwiZmluZEVxdWl2YWxlbmNlQnlUZXJtIiwicHJvcGVydHlBc3NlcnRpb25NYXRjaGVzIiwic29tZU90aGVyVGVybSIsInByb3BlcnR5UmVsYXRpb24iLCJnZXRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZVRlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwidW5pZnlTdGF0ZW1lbnRXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmciLCJzdGF0ZW1lbnRVbmlmaWVzIiwiY29tcGFyZVN0YXRlbWVudFdpdGhTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb25zIiwic3RhdGVtZW50RXF1YXRlc1dpdGhTdGVwT3JTdWJwcm9vZnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aFN0ZXBzIiwiY29tcGFyZVN1YnByb29mT3JQcm9vZkFzc2VydGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQStVYUE7OztlQUFBQTs7O3lCQTdVa0I7K0RBRVY7dUJBRVM7eUJBS2tCOzs7Ozs7QUFFaEQsSUFBTSxBQUFFQyxnQkFBa0JDLHlCQUFjLENBQWhDRDtBQUVSLFNBQVNFLHVCQUF1QkMsU0FBUyxFQUFFQyxTQUFTLEVBQUVDLGtCQUFrQixFQUFFQyxPQUFPO0lBQy9FLElBQUlDLDJCQUEyQjtJQUUvQixJQUFJSCxjQUFjLE1BQU07UUFDdEIsSUFBTUksT0FBT0YsUUFBUUcsbUJBQW1CLENBQUNMO1FBRXpDLElBQUlJLFNBQVMsTUFBTTtZQUNqQixJQUFNRSxhQUFhRixLQUFLRyxTQUFTLElBQzNCQyxrQkFBa0JULFVBQVVRLFNBQVM7WUFFM0NMLFFBQVFPLEtBQUssQ0FBQyxBQUFDLGlCQUF3REgsT0FBeENFLGlCQUFnQiwwQkFBbUMsT0FBWEYsWUFBVztZQUVsRixJQUFNSSw0QkFBNEJSLFFBQVFTLDRCQUE0QixJQUNoRUMsNkNBQTZDUixLQUFLUywwQ0FBMEMsQ0FBQ2QsV0FBV1csMkJBQTJCUjtZQUV6SSxJQUFJVSw0Q0FBNEM7Z0JBQzlDVCwyQkFBMkI7WUFDN0I7WUFFQSxJQUFJQSwwQkFBMEI7Z0JBQzVCRCxRQUFRWSxLQUFLLENBQUMsQUFBQyxtQkFBMERSLE9BQXhDRSxpQkFBZ0IsMEJBQW1DLE9BQVhGLFlBQVc7WUFDdEY7UUFDRjtJQUNGO0lBRUEsT0FBT0g7QUFDVDtBQUVBLFNBQVNZLDRCQUE0QmhCLFNBQVMsRUFBRUMsU0FBUyxFQUFFQyxrQkFBa0IsRUFBRUMsT0FBTztJQUNwRixJQUFJYyxnQ0FBZ0M7SUFFcEMsSUFBSWhCLGNBQWMsTUFB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
|
|
@@ -16,9 +16,14 @@ _export(exports, {
|
|
|
16
16
|
return validateTerms;
|
|
17
17
|
}
|
|
18
18
|
});
|
|
19
|
-
var
|
|
19
|
+
var _elements = /*#__PURE__*/ _interop_require_default(require("../elements"));
|
|
20
20
|
var _instance = require("../utilities/instance");
|
|
21
21
|
var _statement = require("../utilities/statement");
|
|
22
|
+
function _interop_require_default(obj) {
|
|
23
|
+
return obj && obj.__esModule ? obj : {
|
|
24
|
+
default: obj
|
|
25
|
+
};
|
|
26
|
+
}
|
|
22
27
|
function validateTermAsVariable(term, context, validateAhead) {
|
|
23
28
|
var termValidatesAsVariable = false;
|
|
24
29
|
var termNode = term.getNode(), variableNode = termNode.getVariableNode();
|
|
@@ -66,7 +71,7 @@ function validateStatementAsMetavariable(statement, assignments, stated, context
|
|
|
66
71
|
var metavariableName = metavariableNode.getMetavariableName(), metavariable = context.findMetavariableByMetavariableName(metavariableName);
|
|
67
72
|
if (metavariable !== null) {
|
|
68
73
|
statementValidatesAsMetavariableAndSubstitution = true;
|
|
69
|
-
var TermSubstitution =
|
|
74
|
+
var TermSubstitution = _elements.default.TermSubstitution, FrameSubstitution = _elements.default.FrameSubstitution, frameSubstitution = FrameSubstitution.fromStatement(statement, context), termSubstitution = TermSubstitution.fromStatement(statement, context), substitution = termSubstitution || frameSubstitution;
|
|
70
75
|
if (substitution !== null) {
|
|
71
76
|
var substitutionValidates = substitution.validate(context);
|
|
72
77
|
if (!substitutionValidates) {
|
|
@@ -240,4 +245,4 @@ var validateStatements = [
|
|
|
240
245
|
validateStatementAsSatisfiesAssertion
|
|
241
246
|
];
|
|
242
247
|
|
|
243
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgZWxlbWVudHMgfSBmcm9tIFwib2NjYW0tZnVydGxlXCI7XG5cbmltcG9ydCB7IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcsIGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvaW5zdGFuY2VcIjtcbmltcG9ydCB7IGVxdWFsaXR5RnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQsXG4gICAgICAgICB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50LFxuICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlbWVudFwiO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpIHtcbiAgbGV0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKHZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdmFyaWFibGVJZGVudGlmaWVyID0gdmFyaWFibGVOb2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpLFxuICAgICAgICAgIHZhcmlhYmxlID0gY29udGV4dC5maW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllcih2YXJpYWJsZUlkZW50aWZpZXIpO1xuXG4gICAgaWYgKHZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGUuZ2V0VHlwZSgpO1xuXG4gICAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICAgIGNvbnN0IHZlcmlmaWVzQWhlYWQgPSB2YWxpZGF0ZUFoZWFkKCk7XG5cbiAgICAgIGlmICh2ZXJpZmllc0FoZWFkKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCkge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKTtcblxuICAgIGlmICh1bmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gc3RhdGVtZW50Tm9kZS5nZXRNZXRhdmFyaWFibGVOb2RlKCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOb2RlLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAobWV0YXZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiA9IHRydWU7XG5cbiAgICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgZnJhbWVTdWJzdGl0dXRpb24gPSBGcmFtZVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICB0ZXJtU3Vic3RpdHV0aW9uID0gVGVybVN1YnN0aXR1dGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCksXG4gICAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uVmFsaWRhdGVzID0gc3Vic3RpdHV0aW9uLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICAgIGlmICghc3Vic3RpdHV0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCksXG4gICAgc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyA9IGNvbWJpbmF0b3JzLnNvbWUoKGNvbWJpbmF0b3IpID0+IHtcbiAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGFzc2lnbm1lbnRzID0gbnVsbDsgLy8vXG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGZhbHNlO1xuXG4gIGNvbnN0IGVxdWFsaXR5ID0gZXF1YWxpdHlGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgICBjb25zdCBlcXVhbGl0eVZhbGlkYXRlcyA9IGVxdWFsaXR5LnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IGVxdWFsaXR5VmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgY29uc3QganVkZ2VtZW50ID0ganVkZ2VtZW50RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICAgIGNvbnN0IGp1ZGdlbWVudFZhbGlkYXRlcyA9IGp1ZGdlbWVudC52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0ganVkZ2VtZW50VmFsaWRhdGVzOyAgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHlwZUFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gdHlwZUFzc2VydGlvbjsgIC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgZGVmaW5lZEFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlcyA9IGRlZmluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGRlZmluZWRBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgcHJvcGVydHlBc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzID0gcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBwcm9wZXJ0eSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXMgPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChjb250YWluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzID0gc2F0aXNmaWVzQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uO1xufVxuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUZXJtcyA9IFtcbiAgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInZhbGlkYXRlU3RhdGVtZW50cyIsInZhbGlkYXRlVGVybXMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidGVybSIsImNvbnRleHQiLCJ2YWxpZGF0ZUFoZWFkIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtTm9kZSIsImdldE5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJnZXRWYXJpYWJsZU5vZGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YXJpYWJsZUlkZW50aWZpZXIiLCJnZXRWYXJpYWJsZUlkZW50aWZpZXIiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVJZGVudGlmaWVyIiwidHlwZSIsImdldFR5cGUiLCJzZXRUeXBlIiwidmVyaWZpZXNBaGVhZCIsImRlYnVnIiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsInNvbWUiLCJjb25zdHJ1Y3RvciIsInVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm0iLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJhc3NpZ25tZW50cyIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGUiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvciIsInVuaWZpZXNXaXRoQ29tYmluYXRvciIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5IiwiZXF1YWxpdHkiLCJlcXVhbGl0eUZyb21TdGF0ZW1lbnQiLCJlcXVhbGl0eVZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnQiLCJqdWRnZW1lbnRWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInR5cGVBc3NlcnRpb25WYWxpZGF0ZXMiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsImNvbnRhaW5lZEFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQTJWYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7MkJBblZZO3dCQUV1RDt5QkFRaEM7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsYUFBYTtJQUMxRCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxnQkFBZ0JoQjtZQUV0QixJQUFJZ0IsZUFBZTtnQkFDakJmLDBCQUEwQjtZQUM1QjtRQUNGO1FBRUEsSUFBSUEseUJBQXlCO1lBQzNCRixRQUFRa0IsS0FBSyxDQUFDLEFBQUMscUJBQStCLE9BQVhYLFlBQVc7UUFDaEQ7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxTQUFTaUIsMEJBQTBCcEIsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDN0QsSUFBSW1C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
|
|
248
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUFoZWFkKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2ZXJpZmllc0FoZWFkID0gdmFsaWRhdGVBaGVhZCgpO1xuXG4gICAgICBpZiAodmVyaWZpZXNBaGVhZCkge1xuICAgICAgICB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzKHRlcm0sIGNvbnRleHQsIHZhbGlkYXRlQWhlYWQpIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycztcblxuICBjb25zdCBjb25zdHJ1Y3RvcnMgPSBjb250ZXh0LmdldENvbnN0cnVjdG9ycygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyA9IGNvbnN0cnVjdG9ycy5zb21lKChjb25zdHJ1Y3RvcikgPT4ge1xuICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCk7XG5cbiAgICBpZiAodW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCkge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG5cbiAgY29uc3QgYnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IgPSBicmFja2V0ZWRDb25zdHJ1Y3Rvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgdmFsaWRhdGVBaGVhZCk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN0YXRlbWVudE5vZGUuZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLi4uYCk7XG5cbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRNZXRhdmFyaWFibGVOYW1lKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24gPSB0cnVlO1xuXG4gICAgICBjb25zdCB7IFRlcm1TdWJzdGl0dXRpb24sIEZyYW1lU3Vic3RpdHV0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgdGVybVN1YnN0aXR1dGlvbiA9IFRlcm1TdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvblZhbGlkYXRlcyA9IHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAoIXN1YnN0aXR1dGlvblZhbGlkYXRlcykge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbjtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMgPSBjb21iaW5hdG9ycy5zb21lKChjb21iaW5hdG9yKSA9PiB7XG4gICAgICBjb25zdCB1bmlmaWVzV2l0aENvbWJpbmF0b3IgPSBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgIGlmICh1bmlmaWVzV2l0aENvbWJpbmF0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIHN0YXRlZCA9IHRydWU7ICAvLy9cblxuICBhc3NpZ25tZW50cyA9IG51bGw7IC8vL1xuXG4gIGNvbnN0IGJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcoKSxcbiAgICAgICAgc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gIHJldHVybiBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eShzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBjb25zdCBlcXVhbGl0eSA9IGVxdWFsaXR5RnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gICAgY29uc3QgZXF1YWxpdHlWYWxpZGF0ZXMgPSBlcXVhbGl0eS52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBlcXVhbGl0eVZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gIGNvbnN0IGp1ZGdlbWVudCA9IGp1ZGdlbWVudEZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50Li4uYCk7XG5cbiAgICBjb25zdCBqdWRnZW1lbnRWYWxpZGF0ZXMgPSBqdWRnZW1lbnQudmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGp1ZGdlbWVudFZhbGlkYXRlczsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblZhbGlkYXRlcyA9IHR5cGVBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb247ICAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IGRlZmluZWRBc3NlcnRpb25WYWxpZGF0ZXMgPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZGVmaW5lZEFzc2VydGlvblZhbGlkYXRlczsgLy8vXG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0eUFzc2VydGlvblZhbGlkYXRlcyA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uVmFsaWRhdGVzID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pIHtcbiAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzID0gY29udGFpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXM7IC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb25zdCBhc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCkge1xuICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICBjb25zdCBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNhdGlzZmllcyBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyA9IHNhdGlzZmllc0Fzc2VydGlvbi52YWxpZGF0ZShhc3NpZ25tZW50cywgc3RhdGVkLCBjb250ZXh0KTtcblxuICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzOyAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29uc3QgYXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uOyAvLy9cblxuICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVBaGVhZCIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybU5vZGUiLCJnZXROb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZlcmlmaWVzQWhlYWQiLCJkZWJ1ZyIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJzb21lIiwiY29uc3RydWN0b3IiLCJ1bmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtIiwidW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50IiwiYXNzaWdubWVudHMiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsInN0YXRlbWVudE5vZGUiLCJtZXRhdmFyaWFibGVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsInN0YXRlbWVudFN0cmluZyIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZSIsIlRlcm1TdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZnJhbWVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50IiwidGVybVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvblZhbGlkYXRlcyIsInZhbGlkYXRlIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwic3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3IiLCJ1bmlmaWVzV2l0aENvbWJpbmF0b3IiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsImVxdWFsaXR5IiwiZXF1YWxpdHlGcm9tU3RhdGVtZW50IiwiZXF1YWxpdHlWYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJqdWRnZW1lbnRGcm9tU3RhdGVtZW50IiwianVkZ2VtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ0eXBlQXNzZXJ0aW9uVmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJkZWZpbmVkQXNzZXJ0aW9uVmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzdWJwcm9vZkFzc2VydGlvblZhbGlkYXRlcyIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbiIsImNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJjb250YWluZWRBc3NlcnRpb25WYWxpZGF0ZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb24iLCJzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50Iiwic2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUEyVmFBO2VBQUFBOztRQU5BQztlQUFBQTs7OytEQW5WUTt3QkFFMkQ7eUJBUWhDOzs7Ozs7QUFFaEQsU0FBU0MsdUJBQXVCQyxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsYUFBYTtJQUMxRCxJQUFJQywwQkFBMEI7SUFFOUIsSUFBTUMsV0FBV0osS0FBS0ssT0FBTyxJQUN2QkMsZUFBZUYsU0FBU0csZUFBZTtJQUU3QyxJQUFJRCxpQkFBaUIsTUFBTTtRQUN6QixJQUFNRSxhQUFhUixLQUFLUyxTQUFTO1FBRWpDUixRQUFRUyxLQUFLLENBQUMsQUFBQyxtQkFBNkIsT0FBWEYsWUFBVztRQUU1QyxJQUFNRyxxQkFBcUJMLGFBQWFNLHFCQUFxQixJQUN2REMsV0FBV1osUUFBUWEsZ0NBQWdDLENBQUNIO1FBRTFELElBQUlFLGFBQWEsTUFBTTtZQUNyQixJQUFNRSxPQUFPRixTQUFTRyxPQUFPO1lBRTdCaEIsS0FBS2lCLE9BQU8sQ0FBQ0Y7WUFFYixJQUFNRyxnQkFBZ0JoQjtZQUV0QixJQUFJZ0IsZUFBZTtnQkFDakJmLDBCQUEwQjtZQUM1QjtRQUNGO1FBRUEsSUFBSUEseUJBQXlCO1lBQzNCRixRQUFRa0IsS0FBSyxDQUFDLEFBQUMscUJBQStCLE9BQVhYLFlBQVc7UUFDaEQ7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFQSxTQUFTaUIsMEJBQTBCcEIsSUFBSSxFQUFFQyxPQUFPLEVBQUVDLGFBQWE7SUFDN0QsSUFBSW1C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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-verify-cli",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.479",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-verify-cli",
|
|
7
7
|
"description": "Occam's Verifier",
|
|
@@ -12,11 +12,11 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"argumentative": "^2.0.36",
|
|
14
14
|
"necessary": "^17.0.9",
|
|
15
|
-
"occam-custom-grammars": "^5.0.
|
|
16
|
-
"occam-entities": "^1.0.
|
|
17
|
-
"occam-file-system": "^6.0.
|
|
18
|
-
"occam-furtle": "^2.0.
|
|
19
|
-
"occam-grammars": "^1.3.
|
|
15
|
+
"occam-custom-grammars": "^5.0.1341",
|
|
16
|
+
"occam-entities": "^1.0.445",
|
|
17
|
+
"occam-file-system": "^6.0.460",
|
|
18
|
+
"occam-furtle": "^2.0.291",
|
|
19
|
+
"occam-grammars": "^1.3.439",
|
|
20
20
|
"occam-lexers": "^23.1.34",
|
|
21
21
|
"occam-parsers": "^23.1.37"
|
|
22
22
|
},
|
package/src/context/file.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
|
-
import {
|
|
4
|
+
import { nodeUtilities, contextUtilities } from "occam-furtle";
|
|
5
|
+
|
|
6
|
+
import elements from "../elements";
|
|
5
7
|
|
|
6
8
|
import { LEVELS } from "../constants";
|
|
7
9
|
import { verifyFile } from "../process/verify";
|
package/src/context/scoped.js
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
import { arrayUtilities } from "necessary";
|
|
4
|
-
import {
|
|
4
|
+
import { contextUtilities } from "occam-furtle";
|
|
5
|
+
|
|
6
|
+
import elements from "../elements";
|
|
5
7
|
|
|
6
8
|
const { last } = arrayUtilities,
|
|
7
9
|
{ chainContext } = contextUtilities;
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
import Assertion from "../assertion";
|
|
4
4
|
|
|
5
|
+
import { define } from "../../elements";
|
|
5
6
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions, statementFromStatementAndSubstitutions } from "../../utilities/substitutions";
|
|
6
7
|
|
|
7
|
-
const { define } = elements;
|
|
8
|
-
|
|
9
8
|
export default define(class ContainedAssertion extends Assertion {
|
|
10
9
|
constructor(context, string, node, term, frame, negated, statement) {
|
|
11
10
|
super(context, string, node);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import elements from "../../elements";
|
|
5
4
|
import Assertion from "../assertion";
|
|
6
5
|
|
|
6
|
+
import { define } from "../../elements";
|
|
7
7
|
import { termFromTermAndSubstitutions, frameFromFrameAndSubstitutions } from "../../utilities/substitutions";
|
|
8
8
|
|
|
9
|
-
const { define } = elements;
|
|
10
|
-
|
|
11
9
|
export default define(class DefinedAssertion extends Assertion {
|
|
12
10
|
constructor(context, string, node, term, frame, negated) {
|
|
13
11
|
super(context, string, node);
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import elements from "../../elements";
|
|
5
4
|
import Assertion from "../assertion";
|
|
6
5
|
|
|
6
|
+
import { define } from "../../elements";
|
|
7
7
|
import { variableAssignmentFromVariable } from "../../process/assign";
|
|
8
8
|
|
|
9
|
-
const { define } = elements;
|
|
10
|
-
|
|
11
9
|
export default define(class PropertyAssertion extends Assertion {
|
|
12
10
|
constructor(context, string, node, term, propertyRelation) {
|
|
13
11
|
super(context, string, node);
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import elements from "../../elements";
|
|
5
4
|
import Assertion from "../assertion";
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
import { define } from "../../elements";
|
|
8
7
|
|
|
9
8
|
export default define(class SatisfiesAssertion extends Assertion {
|
|
10
9
|
constructor(context, string, node, signature, reference) {
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { elements } from "occam-furtle";
|
|
4
3
|
import { arrayUtilities } from "necessary";
|
|
5
4
|
|
|
6
5
|
import Assertion from "../assertion";
|
|
7
6
|
|
|
7
|
+
import { define } from "../../elements";
|
|
8
8
|
import { unifyStatement } from "../../process/unify";
|
|
9
9
|
|
|
10
|
-
const { match } = arrayUtilities
|
|
11
|
-
{ define } = elements;
|
|
10
|
+
const { match } = arrayUtilities;
|
|
12
11
|
|
|
13
12
|
export default define(class SubproofAssertion extends Assertion {
|
|
14
13
|
constructor(context, string, node, statements) {
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import elements from "../../elements";
|
|
5
4
|
import Assertion from "../assertion";
|
|
6
5
|
|
|
6
|
+
import { define } from "../../elements";
|
|
7
7
|
import { variableAssignmentFromVariable } from "../../process/assign";
|
|
8
8
|
|
|
9
|
-
const { define } = elements;
|
|
10
|
-
|
|
11
9
|
export default define(class TypeAssertion extends Assertion {
|
|
12
10
|
constructor(context, string, node, term, type) {
|
|
13
11
|
super(context, string, node);
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Element
|
|
3
|
+
import { Element } from "occam-furtle";
|
|
4
4
|
|
|
5
|
+
import { define } from "../elements";
|
|
5
6
|
import { unifyStatementIntrinsically } from "../process/unify";
|
|
6
7
|
import { referenceFromJSON, referenceToReferenceJSON } from "../utilities/json";
|
|
7
8
|
|
|
8
|
-
const { define } = elements;
|
|
9
|
-
|
|
10
9
|
export default define(class Assumption extends Element {
|
|
11
10
|
constructor(context, string, node, statement, reference) {
|
|
12
11
|
super(context, string, node);
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Element
|
|
3
|
+
import { Element } from "occam-furtle";
|
|
4
4
|
|
|
5
|
+
import { define } from "../elements";
|
|
5
6
|
import { verifyCombinator } from "../process/verify";
|
|
6
7
|
import { unifyStatementWithCombinator } from "../process/unify";
|
|
7
8
|
import { statementFromJSON, statementToStatementJSON } from "../utilities/json";
|
|
8
9
|
|
|
9
|
-
const { define } = elements;
|
|
10
|
-
|
|
11
10
|
export default define(class Combinator extends Element {
|
|
12
11
|
constructor(context, string, node, statement) {
|
|
13
12
|
super(context, string, node)
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Element
|
|
3
|
+
import { Element } from "occam-furtle";
|
|
4
4
|
|
|
5
|
+
import { define } from "../elements";
|
|
5
6
|
import { attempt } from "../utilities/context";
|
|
6
7
|
import { termsFromJSON, framesFromJSON, statementFromJSON, termsToTermsJSON, framesToFramesJSON, statementToStatementJSON } from "../utilities/json";
|
|
7
8
|
|
|
8
|
-
const { define } = elements;
|
|
9
|
-
|
|
10
9
|
export default define(class Conclusion extends Element {
|
|
11
10
|
constructor(context, string, node, statement) {
|
|
12
11
|
super(context, string, node);
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import elements from "../../elements";
|
|
5
4
|
import Constructor from "../constructor";
|
|
6
5
|
|
|
7
|
-
|
|
6
|
+
import { define } from "../../elements";
|
|
8
7
|
|
|
9
8
|
export default define(class BracketedConstructor extends Constructor {
|
|
10
9
|
unifyTerm(term, context, verifyAhead) {
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { Element
|
|
3
|
+
import { Element } from "occam-furtle";
|
|
4
4
|
|
|
5
|
+
import { define } from "../elements";
|
|
5
6
|
import { unifyTermWithConstructor } from "../process/unify";
|
|
6
7
|
import { termFromJSON, termToTermJSON } from "../utilities/json";
|
|
7
8
|
|
|
8
|
-
const { define } = elements;
|
|
9
|
-
|
|
10
9
|
export default define(class Constructor extends Element {
|
|
11
10
|
constructor(context, string, node, term) {
|
|
12
11
|
super(context, string, node);
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { elements } from "occam-furtle";
|
|
4
|
-
|
|
5
3
|
import Declaration from "../declaration";
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
import { define } from "../../elements";
|
|
8
6
|
|
|
9
7
|
export default define(class CombinatorDeclaration extends Declaration {
|
|
10
8
|
constructor(context, string, node, combinator) {
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { elements } from "occam-furtle";
|
|
4
|
-
|
|
5
3
|
import Declaration from "../declaration";
|
|
6
4
|
|
|
7
|
-
|
|
5
|
+
import { define } from "../../elements";
|
|
8
6
|
|
|
9
7
|
export default define(class ComplexTypeDeclaration extends Declaration {
|
|
10
8
|
constructor(context, string, node, type, prefixed) {
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import { elements } from "occam-furtle";
|
|
4
|
-
|
|
5
3
|
import Declaration from "../declaration";
|
|
6
4
|
|
|
5
|
+
import { define } from "../../elements";
|
|
7
6
|
import { validateTerm } from "../../process/validate";
|
|
8
7
|
|
|
9
|
-
const { define } = elements;
|
|
10
|
-
|
|
11
8
|
export default define(class ConstructorDeclaration extends Declaration {
|
|
12
9
|
constructor(context, string, node, constructor) {
|
|
13
10
|
super(context, string, node);
|