occam-nominal 1.0.430 → 1.0.432
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/nominal.js +1 -5
- package/lib/context/mnemic.js +6 -44
- package/lib/context.js +1 -13
- package/lib/element/assertion/signature.js +10 -5
- package/lib/element/constructor/bracketed.js +1 -6
- package/lib/element/equality.js +4 -13
- package/lib/element/equivalence.js +49 -37
- package/lib/element/fact/step.js +2 -2
- package/lib/element/signature.js +33 -29
- package/lib/element/term.js +11 -11
- package/lib/process/equate.js +53 -19
- package/lib/process/unification.js +1 -2
- package/lib/process/unify.js +63 -60
- package/lib/utilities/brackets.js +17 -13
- package/lib/utilities/equivalences.js +6 -6
- package/lib/utilities/string.js +7 -3
- package/package.json +5 -5
- package/src/context/file/nominal.js +0 -7
- package/src/context/mnemic.js +3 -69
- package/src/context.js +0 -21
- package/src/element/assertion/signature.js +11 -5
- package/src/element/constructor/bracketed.js +0 -8
- package/src/element/equality.js +4 -18
- package/src/element/equivalence.js +68 -49
- package/src/element/fact/step.js +1 -1
- package/src/element/signature.js +36 -35
- package/src/element/term.js +10 -12
- package/src/process/equate.js +79 -27
- package/src/process/unification.js +0 -2
- package/src/process/unify.js +94 -83
- package/src/utilities/brackets.js +22 -14
- package/src/utilities/equivalences.js +3 -3
- package/src/utilities/string.js +8 -2
package/lib/element/signature.js
CHANGED
|
@@ -8,14 +8,14 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return _default;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
const _necessary = require("necessary");
|
|
12
11
|
const _occamlanguages = require("occam-languages");
|
|
13
12
|
const _elements = require("../elements");
|
|
14
13
|
const _state = require("../utilities/state");
|
|
15
14
|
const _continuation = require("../utilities/continuation");
|
|
15
|
+
const _string = require("../utilities/string");
|
|
16
16
|
const _instantiate = require("../process/instantiate");
|
|
17
17
|
const _context = require("../utilities/context");
|
|
18
|
-
const {
|
|
18
|
+
const { asynchronousEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
19
19
|
const _default = (0, _elements.define)(class Signature extends _occamlanguages.Element {
|
|
20
20
|
constructor(context, string, node, breakPoint, terms){
|
|
21
21
|
super(context, string, node, breakPoint);
|
|
@@ -36,8 +36,8 @@ const _default = (0, _elements.define)(class Signature extends _occamlanguages.E
|
|
|
36
36
|
const term = this.terms[index];
|
|
37
37
|
return term;
|
|
38
38
|
}
|
|
39
|
-
isEqualTo(
|
|
40
|
-
const signatureNode =
|
|
39
|
+
isEqualTo(signature) {
|
|
40
|
+
const signatureNode = signature.getNode(), signatureNodeMatches = this.matchSignatureNode(signatureNode), equalTo = signatureNodeMatches; ///
|
|
41
41
|
return equalTo;
|
|
42
42
|
}
|
|
43
43
|
matchSignatureNode(signatureNode) {
|
|
@@ -63,7 +63,7 @@ const _default = (0, _elements.define)(class Signature extends _occamlanguages.E
|
|
|
63
63
|
let validates;
|
|
64
64
|
const specificContext = context, signatureString = this.getString();
|
|
65
65
|
context.trace(`Validating the '${signatureString}' signature...`);
|
|
66
|
-
const
|
|
66
|
+
const signature = this; ///
|
|
67
67
|
(0, _context.attempt)((context)=>{
|
|
68
68
|
const validateTerms = this.validateTerms.bind(this);
|
|
69
69
|
validates = (0, _continuation.all)([
|
|
@@ -72,7 +72,7 @@ const _default = (0, _elements.define)(class Signature extends _occamlanguages.E
|
|
|
72
72
|
let validates;
|
|
73
73
|
this.commit(context);
|
|
74
74
|
context = specificContext; ///
|
|
75
|
-
validates = continuation(
|
|
75
|
+
validates = continuation(signature, context);
|
|
76
76
|
return validates;
|
|
77
77
|
});
|
|
78
78
|
}, context);
|
|
@@ -116,28 +116,32 @@ const _default = (0, _elements.define)(class Signature extends _occamlanguages.E
|
|
|
116
116
|
return termsValidate;
|
|
117
117
|
}
|
|
118
118
|
unifyTerms(terms, context, continuation) {
|
|
119
|
-
let termsUnify;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
119
|
+
let termsUnify = false;
|
|
120
|
+
const quoted = true, termsString = (0, _string.termsStringFromTerms)(terms, quoted), signatureString = this.getString();
|
|
121
|
+
context.trace(`Unifying the ${termsString} terms with the '${signatureString}' signature...`);
|
|
122
|
+
const generalTerms = this.terms, specificTerms = terms, generalTermsLength = generalTerms.length, specificTermsLength = specificTerms.length;
|
|
123
|
+
if (generalTermsLength !== specificTermsLength) {
|
|
124
|
+
return continuation(termsUnify);
|
|
125
|
+
}
|
|
126
|
+
const specificContext = context; ///
|
|
127
|
+
context = this.getContext();
|
|
128
|
+
const generalContext = context; ///
|
|
129
|
+
let index = -1;
|
|
130
|
+
return (0, _context.reconcile)((specificContext)=>{
|
|
131
|
+
return asynchronousEvery(generalTerms, (generalTerm, continuation)=>{
|
|
132
|
+
index++;
|
|
133
|
+
const specificTerm = specificTerms[index];
|
|
134
|
+
generalTerm.unifyTerm(specificTerm, generalContext, specificContext, continuation);
|
|
135
|
+
}, (termsUnify)=>{
|
|
136
|
+
if (termsUnify) {
|
|
137
|
+
specificContext.commit();
|
|
138
|
+
}
|
|
139
|
+
if (termsUnify) {
|
|
140
|
+
context.debug(`...unified the ${termsString} terms with the '${signatureString}' signature.`);
|
|
131
141
|
}
|
|
142
|
+
return continuation(termsUnify);
|
|
132
143
|
});
|
|
133
|
-
if (termsUnify) {
|
|
134
|
-
specificContext.commit(context);
|
|
135
|
-
}
|
|
136
144
|
}, specificContext);
|
|
137
|
-
if (termsUnify) {
|
|
138
|
-
context.debug(`...unified the '${specificSignatureString}' signature with the '${generalSignatureString}' signature.`);
|
|
139
|
-
}
|
|
140
|
-
return termsUnify;
|
|
141
145
|
}
|
|
142
146
|
toJSON() {
|
|
143
147
|
const context = this.getContext();
|
|
@@ -157,14 +161,14 @@ const _default = (0, _elements.define)(class Signature extends _occamlanguages.E
|
|
|
157
161
|
}
|
|
158
162
|
static name = "Signature";
|
|
159
163
|
static fromJSON(json, context) {
|
|
160
|
-
let
|
|
164
|
+
let signature;
|
|
161
165
|
(0, _context.instantiate)((context)=>{
|
|
162
166
|
(0, _context.unserialise)((json, context)=>{
|
|
163
167
|
const { string } = json, signatureNode = (0, _instantiate.instantiateSignature)(string, context), node = signatureNode, breakPoint = breakPointFromJSON(json), terms = termsFromSignatureNode(signatureNode, context);
|
|
164
|
-
|
|
168
|
+
signature = new Signature(context, string, node, breakPoint, terms);
|
|
165
169
|
}, json, context);
|
|
166
170
|
}, context);
|
|
167
|
-
return
|
|
171
|
+
return signature;
|
|
168
172
|
}
|
|
169
173
|
});
|
|
170
174
|
function termsFromSignatureNode(signatureNode, context) {
|
|
@@ -175,4 +179,4 @@ function termsFromSignatureNode(signatureNode, context) {
|
|
|
175
179
|
return terms;
|
|
176
180
|
}
|
|
177
181
|
|
|
178
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3NpZ25hdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5pbXBvcnQgeyBFbGVtZW50LCBicmVha1BvaW50VXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBhbGwsIGV2ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU2lnbmF0dXJlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrUG9pbnRGcm9tSlNPTiwgYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04gfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTaWduYXR1cmUgZXh0ZW5kcyBFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtcykge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gIH1cblxuICBnZXRUZXJtcygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtcztcbiAgfVxuXG4gIGdldFNpZ25hdHVyZU5vZGUoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHNpZ25hdHVyZU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBzaWduYXR1cmVOb2RlO1xuICB9XG5cbiAgZ2V0TGVuZ3RoKCkge1xuICAgIGNvbnN0IHRlcm1zTGVuZ3RoID0gdGhpcy50ZXJtcy5sZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoID0gdGVybXNMZW5ndGg7IC8vL1xuXG4gICAgcmV0dXJuIGxlbmd0aDtcbiAgfVxuXG4gIGdldFRlcm0oaW5kZXgpIHtcbiAgICBjb25zdCB0ZXJtID0gdGhpcy50ZXJtc1tpbmRleF07XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzaWduYXR1cmUpIHtcbiAgICBjb25zdCBzaWduYXR1cmVOb2RlID0gc2lnbmF0dXJlLmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSBzaWduYXR1cmVOb2RlTWF0Y2hlczsgIC8vL1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaFNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSkge1xuICAgIGNvbnN0IG5vZGUgPSBzaWduYXR1cmVOb2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHNpZ25hdHVyZU5vZGVNYXRjaGVzID0gbm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5KGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZS4uLmApO1xuXG4gICAgZGVjbGFyZSgoc3RhdGUpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIChjb25jbHVzaW9uLCBjb250ZXh0KSA9PiB0cnVlKTtcblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcywgY29udGV4dCk7XG4gIH1cblxuICB2YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlcztcblxuICAgIGNvbnN0IHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICBzaWduYXR1cmVTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlLi4uYCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzOyAgLy8vXG5cbiAgICBhdHRlbXB0KChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZVRlcm1zID0gdGhpcy52YWxpZGF0ZVRlcm1zLmJpbmQodGhpcyk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGFsbChbXG4gICAgICAgIHZhbGlkYXRlVGVybXNcbiAgICAgIF0sIHN0YXRlLCBjb250ZXh0LCAoc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICB0aGlzLmNvbW1pdChjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHNpZ25hdHVyZSwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybSh0ZXJtLCB0ZXJtcywgc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVmFsaWRhdGVzO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uLi5gKTtcblxuICAgIHRlcm1WYWxpZGF0ZXMgPSB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgdGVybXMucHVzaCh0ZXJtKTtcblxuICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm1zLCBzdGF0ZSwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZhbGlkYXRlcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUncyAnJHt0ZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlVGVybXMoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1ZhbGlkYXRlO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlJ3MgdGVybXMuLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gW10sXG4gICAgICAgICAgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKTtcblxuICAgIHRlcm1zVmFsaWRhdGUgPSBldmVyeSh0aGlzLnRlcm1zLCB2YWxpZGF0ZVRlcm0sIHRlcm1zLCBzdGF0ZSwgY29udGV4dCwgKHRlcm1zLCBzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgbGV0IHRlcm1zVmFsaWRhdGU7XG5cbiAgICAgIHRlcm1zVmFsaWRhdGUgPSBjb250aW51YXRpb24oc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodGVybXNWYWxpZGF0ZSkge1xuICAgICAgICB0aGlzLnRlcm1zID0gdGVybXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZXJtc1ZhbGlkYXRlO1xuICAgIH0pO1xuXG4gICAgaWYgKHRlcm1zVmFsaWRhdGUpe1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUncyB0ZXJtcy5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNWYWxpZGF0ZVxuICB9XG5cbiAgdW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHRlcm1zVW5pZnk7XG5cbiAgICBkZWJ1Z2dlclxuXG4gICAgY29uc3QgZ2VuZXJhbFNpZ25hdHVyZSA9IHRoaXMsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY1NpZ25hdHVyZSA9IHNpZ25hdHVyZSwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxTaWduYXR1cmVTdHJpbmcgPSBnZW5lcmFsU2lnbmF0dXJlLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU2lnbmF0dXJlU3RyaW5nID0gc3BlY2lmaWNTaWduYXR1cmUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3BlY2lmaWNTaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUgd2l0aCB0aGUgJyR7Z2VuZXJhbFNpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZS4uLmApO1xuXG4gICAgY29uc3QgZ2VuZXJhbFNpZ25hdHVyZVRlcm1zID0gZ2VuZXJhbFNpZ25hdHVyZS5nZXRUZXJtcygpLFxuICAgICAgICAgIHNwZWNpZmljU2lnbmF0dXJlVGVybXMgPSBzcGVjaWZpY1NpZ25hdHVyZS5nZXRUZXJtcygpLFxuICAgICAgICAgIGdlbmVyYWxTaWduYXR1cmVDb250ZXh0ID0gZ2VuZXJhbFNpZ25hdHVyZS5nZXRDb250ZXh0KCksXG4gICAgICAgICAgc3BlY2lmaWNTaWduYXR1cmVDb250ZXh0ID0gc3BlY2lmaWNTaWduYXR1cmUuZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIGdlbmVyYWxUZXJtcyA9IGdlbmVyYWxTaWduYXR1cmVUZXJtcywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljVGVybXMgPSBzcGVjaWZpY1NpZ25hdHVyZVRlcm1zLCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxTaWduYXR1cmVDb250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1NpZ25hdHVyZUNvbnRleHQ7ICAvLy9cblxuICAgIGRlYnVnZ2VyXG5cbiAgICB0ZXJtc1VuaWZ5ID0gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIG1hdGNoKGdlbmVyYWxUZXJtcywgc3BlY2lmaWNUZXJtcywgKGdlbmVyYWxUZXJtLCBzcGVjaWZpY1Rlcm0pID0+IHtcbiAgICAgICAgbGV0IHRlcm1VbmlmaWVzO1xuXG4gICAgICAgIHRlcm1VbmlmaWVzID0gZ2VuZXJhbFRlcm0udW5pZnlUZXJtKHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNTaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUgd2l0aCB0aGUgJyR7Z2VuZXJhbFNpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGVybXNVbmlmeTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cbiAgICByZXR1cm4gc2VyaWFsaXNlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgICAgY29uc3QganNvbiA9IHtcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgc3RyaW5nLFxuICAgICAgICBicmVha1BvaW50XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTaWduYXR1cmVcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBzaWduYXR1cmU7XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgdW5zZXJpYWxpc2UoKGpzb24sIGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHNpZ25hdHVyZU5vZGUgPSBpbnN0YW50aWF0ZVNpZ25hdHVyZShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gc2lnbmF0dXJlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtcyA9IHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc2lnbmF0dXJlID0gbmV3IFNpZ25hdHVyZShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm1zKTtcbiAgICAgIH0sIGpzb24sIGNvbnRleHQpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHRlcm1zRnJvbVNpZ25hdHVyZU5vZGUoc2lnbmF0dXJlTm9kZSwgY29udGV4dCkge1xuICBjb25zdCB0ZXJtTm9kZXMgPSBzaWduYXR1cmVOb2RlLmdldFRlcm1Ob2RlcygpLFxuICAgICAgICB0ZXJtcyA9IHRlcm1Ob2Rlcy5tYXAoKHRlcm1Ob2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICAgIHJldHVybiB0ZXJtO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gdGVybXM7XG59XG4iXSwibmFtZXMiOlsibWF0Y2giLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNpZ25hdHVyZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldE5vZGUiLCJzaWduYXR1cmVOb2RlIiwiZ2V0TGVuZ3RoIiwidGVybXNMZW5ndGgiLCJsZW5ndGgiLCJnZXRUZXJtIiwiaW5kZXgiLCJ0ZXJtIiwiaXNFcXVhbFRvIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlTm9kZU1hdGNoZXMiLCJtYXRjaFNpZ25hdHVyZU5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ2ZXJpZmllcyIsInNpZ25hdHVyZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVjbGFyZSIsInN0YXRlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJjb25jbHVzaW9uIiwiZGVidWciLCJzcGVjaWZpY0NvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhbGwiLCJjb21taXQiLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsInB1c2giLCJ0ZXJtc1ZhbGlkYXRlIiwiZXZlcnkiLCJ1bmlmeVRlcm1zIiwidGVybXNVbmlmeSIsImdlbmVyYWxTaWduYXR1cmUiLCJzcGVjaWZpY1NpZ25hdHVyZSIsImdlbmVyYWxTaWduYXR1cmVTdHJpbmciLCJzcGVjaWZpY1NpZ25hdHVyZVN0cmluZyIsImdlbmVyYWxTaWduYXR1cmVUZXJtcyIsInNwZWNpZmljU2lnbmF0dXJlVGVybXMiLCJnZW5lcmFsU2lnbmF0dXJlQ29udGV4dCIsImdldENvbnRleHQiLCJzcGVjaWZpY1NpZ25hdHVyZUNvbnRleHQiLCJnZW5lcmFsVGVybXMiLCJzcGVjaWZpY1Rlcm1zIiwiZ2VuZXJhbENvbnRleHQiLCJyZWNvbmNpbGUiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZVNpZ25hdHVyZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJtYXAiLCJ0ZXJtTm9kZSIsImZpbmRUZXJtQnlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7MkJBWitCO2dDQUNjOzBCQUV0Qjt1QkFDQzs4QkFDRzs2QkFDVTt5QkFDbUM7QUFFeEUsTUFBTSxFQUFFQSxLQUFLLEVBQUUsR0FBR0MseUJBQWMsRUFDMUIsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGtCQUFrQkMsdUJBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLENBQUU7UUFDcEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUsbUJB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
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3NpZ25hdHVyZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGRlY2xhcmUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0YXRlXCI7XG5pbXBvcnQgeyBhbGwsIGV2ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250aW51YXRpb25cIjtcbmltcG9ydCB7IHRlcm1zU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlU2lnbmF0dXJlIH0gZnJvbSBcIi4uL3Byb2Nlc3MvaW5zdGFudGlhdGVcIjtcbmltcG9ydCB7IGF0dGVtcHQsIHJlY29uY2lsZSwgc2VyaWFsaXNlLCB1bnNlcmlhbGlzZSwgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcblxuY29uc3QgeyBhc3luY2hyb25vdXNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2lnbmF0dXJlIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICB9XG5cbiAgZ2V0VGVybXMoKSB7XG4gICAgcmV0dXJuIHRoaXMudGVybXM7XG4gIH1cblxuICBnZXRTaWduYXR1cmVOb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBzaWduYXR1cmVOb2RlID0gbm9kZTsgLy8vXG5cbiAgICByZXR1cm4gc2lnbmF0dXJlTm9kZTtcbiAgfVxuXG4gIGdldExlbmd0aCgpIHtcbiAgICBjb25zdCB0ZXJtc0xlbmd0aCA9IHRoaXMudGVybXMubGVuZ3RoLFxuICAgICAgICAgIGxlbmd0aCA9IHRlcm1zTGVuZ3RoOyAvLy9cblxuICAgIHJldHVybiBsZW5ndGg7XG4gIH1cblxuICBnZXRUZXJtKGluZGV4KSB7XG4gICAgY29uc3QgdGVybSA9IHRoaXMudGVybXNbaW5kZXhdO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cblxuICBpc0VxdWFsVG8oc2lnbmF0dXJlKSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlTm9kZSA9IHNpZ25hdHVyZS5nZXROb2RlKCksXG4gICAgICAgICAgc2lnbmF0dXJlTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlKSxcbiAgICAgICAgICBlcXVhbFRvID0gc2lnbmF0dXJlTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hTaWduYXR1cmVOb2RlKHNpZ25hdHVyZU5vZGUpIHtcbiAgICBjb25zdCBub2RlID0gc2lnbmF0dXJlTm9kZSwgLy8vXG4gICAgICAgICAgbm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZShub2RlKSxcbiAgICAgICAgICBzaWduYXR1cmVOb2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzaWduYXR1cmVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUuLi5gKTtcblxuICAgIGRlY2xhcmUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAoY29uY2x1c2lvbiwgY29udGV4dCkgPT4gdHJ1ZSk7XG5cbiAgICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICB9XG5cbiAgdmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZS4uLmApO1xuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpczsgIC8vL1xuXG4gICAgYXR0ZW1wdCgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVUZXJtcyA9IHRoaXMudmFsaWRhdGVUZXJtcy5iaW5kKHRoaXMpO1xuXG4gICAgICB2YWxpZGF0ZXMgPSBhbGwoW1xuICAgICAgICB2YWxpZGF0ZVRlcm1zXG4gICAgICBdLCBzdGF0ZSwgY29udGV4dCwgKHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgICAgdGhpcy5jb21taXQoY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbihzaWduYXR1cmUsIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm0odGVybSwgdGVybXMsIHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcztcblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHNpZ25hdHVyZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZSdzICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICB0ZXJtVmFsaWRhdGVzID0gdGVybS52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXM7XG5cbiAgICAgIHRlcm1zLnB1c2godGVybSk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbih0ZXJtcywgc3RhdGUsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzO1xuICAgIH0pO1xuXG4gICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVRlcm1zKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdGVybXNWYWxpZGF0ZTtcblxuICAgIGNvbnN0IHNpZ25hdHVyZVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZSdzIHRlcm1zLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IFtdLFxuICAgICAgICAgIHZhbGlkYXRlVGVybSA9IHRoaXMudmFsaWRhdGVUZXJtLmJpbmQodGhpcyk7XG5cbiAgICB0ZXJtc1ZhbGlkYXRlID0gZXZlcnkodGhpcy50ZXJtcywgdmFsaWRhdGVUZXJtLCB0ZXJtcywgc3RhdGUsIGNvbnRleHQsICh0ZXJtcywgc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB0ZXJtc1ZhbGlkYXRlO1xuXG4gICAgICB0ZXJtc1ZhbGlkYXRlID0gY29udGludWF0aW9uKHN0YXRlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHRlcm1zVmFsaWRhdGUpIHtcbiAgICAgICAgdGhpcy50ZXJtcyA9IHRlcm1zO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGVybXNWYWxpZGF0ZTtcbiAgICB9KTtcblxuICAgIGlmICh0ZXJtc1ZhbGlkYXRlKXtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c2lnbmF0dXJlU3RyaW5nfScgc2lnbmF0dXJlJ3MgdGVybXMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1zVmFsaWRhdGVcbiAgfVxuXG4gIHVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBxdW90ZWQgPSB0cnVlLFxuICAgICAgICAgIHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMsIHF1b3RlZCksXG4gICAgICAgICAgc2lnbmF0dXJlU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAke3Rlcm1zU3RyaW5nfSB0ZXJtcyB3aXRoIHRoZSAnJHtzaWduYXR1cmVTdHJpbmd9JyBzaWduYXR1cmUuLi5gKTtcblxuICAgIGNvbnN0IGdlbmVyYWxUZXJtcyA9IHRoaXMudGVybXMsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY1Rlcm1zID0gdGVybXMsICAvL1xuICAgICAgICAgIGdlbmVyYWxUZXJtc0xlbmd0aCA9IGdlbmVyYWxUZXJtcy5sZW5ndGgsXG4gICAgICAgICAgc3BlY2lmaWNUZXJtc0xlbmd0aCA9IHNwZWNpZmljVGVybXMubGVuZ3RoO1xuXG4gICAgaWYgKGdlbmVyYWxUZXJtc0xlbmd0aCAhPT0gc3BlY2lmaWNUZXJtc0xlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtc1VuaWZ5KTtcbiAgICB9XG5cbiAgICBjb25zdCBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0OyAvLy9cblxuICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBsZXQgaW5kZXggPSAtMTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIGFzeW5jaHJvbm91c0V2ZXJ5KGdlbmVyYWxUZXJtcywgKGdlbmVyYWxUZXJtLCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgaW5kZXgrKztcblxuICAgICAgICBjb25zdCBzcGVjaWZpY1Rlcm0gPSBzcGVjaWZpY1Rlcm1zW2luZGV4XTtcblxuICAgICAgICBnZW5lcmFsVGVybS51bmlmeVRlcm0oc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgICAgfSwgKHRlcm1zVW5pZnkpID0+IHtcbiAgICAgICAgaWYgKHRlcm1zVW5pZnkpIHtcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQuY29tbWl0KCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICR7dGVybXNTdHJpbmd9IHRlcm1zIHdpdGggdGhlICcke3NpZ25hdHVyZVN0cmluZ30nIHNpZ25hdHVyZS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybXNVbmlmeSk7XG4gICAgICB9KTtcbiAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcblxuICAgIHJldHVybiBzZXJpYWxpc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgICBjb25zdCBqc29uID0ge1xuICAgICAgICBjb250ZXh0LFxuICAgICAgICBzdHJpbmcsXG4gICAgICAgIGJyZWFrUG9pbnRcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBqc29uO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlNpZ25hdHVyZVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHNpZ25hdHVyZTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICB1bnNlcmlhbGlzZSgoanNvbiwgY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgc2lnbmF0dXJlTm9kZSA9IGluc3RhbnRpYXRlU2lnbmF0dXJlKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBzaWduYXR1cmVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm1zID0gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICBzaWduYXR1cmUgPSBuZXcgU2lnbmF0dXJlKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybXMpO1xuICAgICAgfSwganNvbiwgY29udGV4dCk7XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdGVybXNGcm9tU2lnbmF0dXJlTm9kZShzaWduYXR1cmVOb2RlLCBjb250ZXh0KSB7XG4gIGNvbnN0IHRlcm1Ob2RlcyA9IHNpZ25hdHVyZU5vZGUuZ2V0VGVybU5vZGVzKCksXG4gICAgICAgIHRlcm1zID0gdGVybU5vZGVzLm1hcCgodGVybU5vZGUpID0+IHtcbiAgICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpO1xuXG4gICAgICAgICAgcmV0dXJuIHRlcm07XG4gICAgICAgIH0pO1xuXG4gIHJldHVybiB0ZXJtcztcbn1cbiJdLCJuYW1lcyI6WyJhc3luY2hyb25vdXNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNpZ25hdHVyZSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtcyIsImdldFRlcm1zIiwiZ2V0U2lnbmF0dXJlTm9kZSIsImdldE5vZGUiLCJzaWduYXR1cmVOb2RlIiwiZ2V0TGVuZ3RoIiwidGVybXNMZW5ndGgiLCJsZW5ndGgiLCJnZXRUZXJtIiwiaW5kZXgiLCJ0ZXJtIiwiaXNFcXVhbFRvIiwic2lnbmF0dXJlIiwic2lnbmF0dXJlTm9kZU1hdGNoZXMiLCJtYXRjaFNpZ25hdHVyZU5vZGUiLCJlcXVhbFRvIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJ2ZXJpZmllcyIsInNpZ25hdHVyZVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVjbGFyZSIsInN0YXRlIiwidmFsaWRhdGVzIiwidmFsaWRhdGUiLCJjb25jbHVzaW9uIiwiZGVidWciLCJzcGVjaWZpY0NvbnRleHQiLCJhdHRlbXB0IiwidmFsaWRhdGVUZXJtcyIsImJpbmQiLCJhbGwiLCJjb21taXQiLCJ2YWxpZGF0ZVRlcm0iLCJ0ZXJtVmFsaWRhdGVzIiwidGVybVN0cmluZyIsInB1c2giLCJ0ZXJtc1ZhbGlkYXRlIiwiZXZlcnkiLCJ1bmlmeVRlcm1zIiwidGVybXNVbmlmeSIsInF1b3RlZCIsInRlcm1zU3RyaW5nIiwidGVybXNTdHJpbmdGcm9tVGVybXMiLCJnZW5lcmFsVGVybXMiLCJzcGVjaWZpY1Rlcm1zIiwiZ2VuZXJhbFRlcm1zTGVuZ3RoIiwic3BlY2lmaWNUZXJtc0xlbmd0aCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInJlY29uY2lsZSIsImdlbmVyYWxUZXJtIiwic3BlY2lmaWNUZXJtIiwidW5pZnlUZXJtIiwidG9KU09OIiwic2VyaWFsaXNlIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwidW5zZXJpYWxpc2UiLCJpbnN0YW50aWF0ZVNpZ25hdHVyZSIsInRlcm1zRnJvbVNpZ25hdHVyZU5vZGUiLCJ0ZXJtTm9kZXMiLCJnZXRUZXJtTm9kZXMiLCJtYXAiLCJ0ZXJtTm9kZSIsImZpbmRUZXJtQnlUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBY0E7OztlQUFBOzs7Z0NBWm9FOzBCQUU3Qzt1QkFDQzs4QkFDRzt3QkFDVTs2QkFDQTt5QkFDbUM7QUFFeEUsTUFBTSxFQUFFQSxpQkFBaUIsRUFBRSxHQUFHQyxxQ0FBcUIsRUFDN0MsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGtCQUFrQkMsdUJBQU87SUFDbkQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLENBQUU7UUFDcEQsS0FBSyxDQUFDSixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7SUFDZjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNELEtBQUs7SUFDbkI7SUFFQUUsbUJBQW1CO1FBQ2pCLE1BQU1KLE9BQU8sSUFBSSxDQUFDSyxPQUFPLElBQ25CQyxnQkFBZ0JOLE1BQU0sR0FBRztRQUUvQixPQUFPTTtJQUNUO0lBRUFDLFlBQVk7UUFDVixNQUFNQyxjQUFjLElBQUksQ0FBQ04sS0FBSyxDQUFDTyxNQUFNLEVBQy9CQSxTQUFTRCxhQUFhLEdBQUc7UUFFL0IsT0FBT0M7SUFDVDtJQUVBQyxRQUFRQyxLQUFLLEVBQUU7UUFDYixNQUFNQyxPQUFPLElBQUksQ0FB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
|
package/lib/element/term.js
CHANGED
|
@@ -240,19 +240,19 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
|
|
|
240
240
|
//
|
|
241
241
|
// return term;
|
|
242
242
|
// }
|
|
243
|
-
unifyTerm(term, generalContext, specificContext) {
|
|
243
|
+
unifyTerm(term, generalContext, specificContext, continuation) {
|
|
244
244
|
let termUnifies = false;
|
|
245
|
-
debugger;
|
|
246
245
|
const context = specificContext, generalTerm = this, specificTerm = term, generalTermString = generalTerm.getString(), specifixTermString = specificTerm.getString();
|
|
247
246
|
context.trace(`Unifying the '${specifixTermString}' term with the '${generalTermString}' term...`);
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
247
|
+
return (0, _unify.unifyTermIntrinsically)(generalTerm, specificTerm, generalContext, specificContext, (termUnifiesIntrinsically)=>{
|
|
248
|
+
if (termUnifiesIntrinsically) {
|
|
249
|
+
termUnifies = true;
|
|
250
|
+
}
|
|
251
|
+
if (termUnifies) {
|
|
252
|
+
context.debug(`...unified the '${specifixTermString}' term with the '${generalTermString}' term.`);
|
|
253
|
+
}
|
|
254
|
+
return continuation(termUnifies);
|
|
255
|
+
});
|
|
256
256
|
}
|
|
257
257
|
toJSON() {
|
|
258
258
|
const typeJSON = (0, _json.typeToTypeJSON)(this.type), provisionalJSON = (0, _json.provisionalToProvisionalJSON)(this.provisional), string = this.getString();
|
|
@@ -280,4 +280,4 @@ const _default = (0, _elements.define)(class Term extends _occamlanguages.Elemen
|
|
|
280
280
|
}
|
|
281
281
|
});
|
|
282
282
|
|
|
283
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04sIHByb3Zpc2lvbmFsRnJvbUpTT04sIHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVGVybSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm92aXNpb25hbCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGU7XG4gIH1cblxuICBnZXRWYXJpYWJsZU5vZGUoKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0aGlzLmdldFRlcm1Ob2RlKCksXG4gICAgICAgICAgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVJZGVudGlmaWVyKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGlzRXN0YWJsaXNoZWQoKSB7XG4gICAgY29uc3QgcHJvdmlzaW9uYWwgPSB0aGlzLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgICBlc3RhYmxpc2hlZCA9ICFwcm92aXNpb25hbDtcblxuICAgIHJldHVybiBlc3RhYmxpc2hlZDtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0ZXJtKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSB0ZXJtTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybSAgPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGZpbHRlcih2YXJpYWJsZXMsICh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUgPSBkZWZpbmVkVmFyaWFibGVzLmluY2x1ZGVzKHZhcmlhYmxlKTtcblxuICAgICAgaWYgKCFkZWZpbmVkVmFyaWFibGVzSW5jbHVkZXNWYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHVuZGVmaW5lZFZhcmlhYmxlcyA9IHZhcmlhYmxlcywgLy8vXG4gICAgICAgICAgdW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoID0gdW5kZWZpbmVkVmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBncm91bmRlZCA9ICh1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGggPD0gMSk7XG5cbiAgICByZXR1cm4gZ3JvdW5kZWQ7XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gdGVybU5vZGUuaXNTaW5ndWxhcigpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNJbml0aWFsbHlHcm91bmRlZChjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybSAgPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZXNMZW5ndGggPSB2YXJpYWJsZXMubGVuZ3RoLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkID0gKHZhcmlhYmxlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWQ7XG4gIH1cblxuICBpc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZ3JvdW5kZWQgPSB0aGlzLmlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCksXG4gICAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkID0gZ3JvdW5kZWQ7ICAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWQ7XG4gIH1cblxuICBtYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHRlcm1Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiB0ZXJtTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlQSA9IHZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgIHZhcmlhYmxlTm9kZSA9IHRoaXMuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUIgPSB2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOb2RlQU1hdGNoZXNWYXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlQS5tYXRjaCh2YXJpYWJsZU5vZGVCKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQikge1xuICAgICAgICB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdHJ1ZTsgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21wYXJlVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgY29tcGFyZXNUbyA9IHRlcm1Ob2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUbztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVySWRlbnRpZmllciA9IHBhcmFtZXRlci5nZXRJZGVudGlmaWVyKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHRoaXMuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcklkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBsZXQgdGVybTtcblxuICAgIHRlcm0gPSB0aGlzLmZpbmRUZXJtKGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKHZhbGlkYXRlVGVybXMsIHRlcm0sIHN0YXRlLCBjb250ZXh0LCAodGVybSwgc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUdpdmVuVHlwZShzdHJpY3QsIHR5cGUsIHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAoY29udGludWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVhdGlvbiA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3RhdGU7IC8vL1xuXG4gICAgICBzdGF0ZSA9IHR5cGU7IC8vL1xuXG4gICAgICB0eXBlID0gc3RyaWN0OyAgLy8vXG5cbiAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGdpdmVuIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVFc3RhYmxpc2hlZCA9IHR5cGUuaXNFc3RhYmxpc2hlZCgpLFxuICAgICAgICAgICAgICAgIHRlcm1Qcm92aXNpb25hbCA9IHRlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVFc3RhYmxpc2hlZCAmJiB0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlc0dpdmVuVHlwZTtcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0dpdmVuVHlwZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBnaXZlbiB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc0dpdmVuVHlwZTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNWYXJpYWJsZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc0FzVmFyaWFibGU7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgIHZhbGlkYXRlc0FzVmFyaWFibGUgPSB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlKHRlcm0sIHN0YXRlLCBjb250ZXh0LCAodGVybSwgc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXNBc1ZhcmlhYmxlO1xuXG4gICAgICB2YWxpZGF0ZXNBc1ZhcmlhYmxlID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzQXNWYXJpYWJsZTtcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc0FzVmFyaWFibGU7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUFzUHJvcGVydHkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIC8vICAgbGV0IHRlcm07XG4gIC8vXG4gIC8vICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cbiAgLy9cbiAgLy8gICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBhcyBhIHByb3BlcnR5Li4uYCk7XG4gIC8vXG4gIC8vICAgZGVidWdnZXJcbiAgLy9cbiAgLy8gICBsZXQgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IGZhbHNlO1xuICAvL1xuICAvLyAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtKGNvbnRleHQpO1xuICAvL1xuICAvLyAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gIC8vICAgICB0ZXJtID0gdGVybTsgLy8vXG4gIC8vXG4gIC8vICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAvL1xuICAvLyAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmQpIHtcbiAgLy8gICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG4gIC8vXG4gIC8vICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGVybSA9IG51bGw7XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRlcm0gPSB0aGlzOyAgLy8vXG4gIC8vXG4gIC8vICAgICBjb25zdCB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzID0gdW5pZnlUZXJtV2l0aFByb3BlcnRpZXModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgLy9cbiAgLy8gICAgIGlmICh0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzKSB7XG4gIC8vICAgICAgIHZhbGlkYXRlc0FzUHJvcGVydHkgPSB0cnVlO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGVybSA9IG51bGw7XG4gIC8vICAgICB9XG4gIC8vXG4gIC8vICAgICBpZiAodmFsaWRhdGVzQXNQcm9wZXJ0eSkge1xuICAvLyAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGlmICh2YWxpZGF0ZXNBc1Byb3BlcnR5KSB7XG4gIC8vICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgcHJvcGVydHkuYCk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHJldHVybiB0ZXJtO1xuICAvLyB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgdGVybVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGRlYnVnZ2VyXG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbFRlcm0gPSB0aGlzLCAvLy9cbiAgICAgICAgICBzcGVjaWZpY1Rlcm0gPSB0ZXJtLFxuICAgICAgICAgIGdlbmVyYWxUZXJtU3RyaW5nID0gZ2VuZXJhbFRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaXhUZXJtU3RyaW5nID0gc3BlY2lmaWNUZXJtLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZml4VGVybVN0cmluZ30nIHRlcm0gd2l0aCB0aGUgJyR7Z2VuZXJhbFRlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVW5pZmllc0ludHJpbnNpY2FsbHkgPSB1bmlmeVRlcm1JbnRyaW5zaWNhbGx5KGdlbmVyYWxUZXJtLCBzcGVjaWZpY1Rlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgdGVybVVuaWZpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaXhUZXJtU3RyaW5nfScgdGVybSB3aXRoIHRoZSAnJHtnZW5lcmFsVGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1VbmlmaWVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICBwcm92aXNpb25hbEpTT04gPSBwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OKHRoaXMucHJvdmlzaW9uYWwpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTiwgIC8vL1xuICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWxcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVGVybVwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHRlcm07XG5cbiAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICB0ZXJtTm9kZSA9IGluc3RhbnRpYXRlVGVybShzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgbm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICAgIHByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWxGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgIHRlcm0gPSBuZXcgVGVybShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsKTtcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0ZXJtO1xuICB9XG59KTtcbiJdLCJuYW1lcyI6WyJmaWx0ZXIiLCJhcnJheVV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlRlcm0iLCJFbGVtZW50IiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidHlwZSIsInByb3Zpc2lvbmFsIiwiZ2V0VHlwZSIsImlzUHJvdmlzaW9uYWwiLCJzZXRUeXBlIiwic2V0UHJvdmlzaW9uYWwiLCJnZXRUZXJtTm9kZSIsImdldE5vZGUiLCJ0ZXJtTm9kZSIsImdldFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsImdldFZhcmlhYmxlSWRlbnRpZmllciIsInZhcmlhYmxlSWRlbnRpZmllciIsImlzRXN0YWJsaXNoZWQiLCJlc3RhYmxpc2hlZCIsImlzRXF1YWxUbyIsInRlcm0iLCJ0ZXJtTm9kZU1hdGNoZXMiLCJtYXRjaFRlcm1Ob2RlIiwiZXF1YWxUbyIsImlzR3JvdW5kZWQiLCJkZWZpbmVkVmFyaWFibGVzIiwidmFyaWFibGVzIiwidmFyaWFibGVzRnJvbVRlcm0iLCJ2YXJpYWJsZSIsImRlZmluZWRWYXJpYWJsZXNJbmNsdWRlc1ZhcmlhYmxlIiwiaW5jbHVkZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXMiLCJ1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGgiLCJsZW5ndGgiLCJncm91bmRlZCIsImlzU2luZ3VsYXIiLCJzaW5ndWxhciIsImlzSW5pdGlhbGx5R3JvdW5kZWQiLCJ2YXJpYWJsZXNMZW5ndGgiLCJpbml0aWFsbHlHcm91bmRlZCIsImlzSW1wbGljaXRseUdyb3VuZGVkIiwiaW1wbGljaXRseUdyb3VuZGVkIiwibm9kZU1hdGNoZXMiLCJtYXRjaE5vZGUiLCJtYXRjaFZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJ2YXJpYWJsZU5vZGVBIiwidmFyaWFibGVOb2RlQiIsInZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQiIsIm1hdGNoIiwiY29tcGFyZVRlcm0iLCJjb21wYXJlc1RvIiwiY29tcGFyZVBhcmFtZXRlciIsInBhcmFtZXRlciIsImNvbXBhcmVzVG9QYXJhbXRlciIsInBhcmFtZXRlcklkZW50aWZpZXIiLCJnZXRJZGVudGlmaWVyIiwiZmluZFRlcm0iLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ2YWxpZGF0ZSIsInN0YXRlIiwiY29udGludWF0aW9uIiwidmFsaWRhdGVzIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwiZGVidWciLCJleGlzdHMiLCJ2YWxpZGF0ZVRlcm1zIiwiYWRkVGVybSIsInZhbGlkYXRlR2l2ZW5UeXBlIiwic3RyaWN0IiwidW5kZWZpbmVkIiwidmFsaWRhdGVzR2l2ZW5UeXBlIiwidHlwZVN0cmluZyIsInRlcm1UeXBlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiLCJ0eXBlRXN0YWJsaXNoZWQiLCJ0ZXJtUHJvdmlzaW9uYWwiLCJ2YWxpZGF0ZUFzVmFyaWFibGUiLCJ2YWxpZGF0ZXNBc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInVuaWZ5VGVybSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidGVybVVuaWZpZXMiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtU3RyaW5nIiwic3BlY2lmaXhUZXJtU3RyaW5nIiwidGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtSW50cmluc2ljYWxseSIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJwcm92aXNpb25hbEpTT04iLCJwcm92aXNpb25hbFRvUHJvdmlzaW9uYWxKU09OIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsIm5hbWUiLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVUZXJtIiwidHlwZUZyb21KU09OIiwicHJvdmlzaW9uYWxGcm9tSlNPTiJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBaUJBOzs7ZUFBQTs7OzJCQWYrQjtnQ0FDYzswQkFFdEI7OEJBQ0E7eUJBQ0s7NkJBQ0k7NkJBQ0U7dUJBQ0s7NEJBQ2U7c0JBQzBDO0FBRWhHLE1BQU0sRUFBRUEsTUFBTSxFQUFFLEdBQUdDLHlCQUFjLEVBQzNCLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxhQUFhQyx1QkFBTztJQUM5QyxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxVQUFVLEVBQUVDLElBQUksRUFBRUMsV0FBVyxDQUFFO1FBQ2hFLEtBQUssQ0FBQ0wsU0FBU0MsUUFBUUMsTUFBTUMsWUFBWUU7UUFFekMsSUFBSSxDQUFDRCxJQUFJLEdBQUdBO1FBQ1osSUFBSSxDQUFDQyxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFDLFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQ0YsSUFBSTtJQUNsQjtJQUVBRyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQ0YsV0FBVztJQUN6QjtJQUVBRyxRQUFRSixJQUFJLEVBQUU7UUFDWixJQUFJLENBQUNBLElBQUksR0FBR0E7SUFDZDtJQUVBSyxlQUFlSixXQUFXLEVBQUU7UUFDMUIsSUFBSSxDQUFDQSxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFLLGNBQWM7UUFDWixNQUFNUixPQUFPLElBQUksQ0FBQ1MsT0FBTyxJQUNuQkMsV0FBV1YsTUFBTyxHQUFHO1FBRTNCLE9BQU9VO0lBQ1Q7SUFFQUMsa0JBQWtCO1FBQ2hCLE1BQU1ELFdBQVcsSUFBSSxDQUFDRixXQUFXLElBQzNCSSxlQUFlRixTQUFTQyxlQUFl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
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3Rlcm0uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBleGlzdHMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRpbnVhdGlvblwiO1xuaW1wb3J0IHsgaW5zdGFudGlhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlVGVybSB9IGZyb20gXCIuLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB2YXJpYWJsZXNGcm9tVGVybSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZXF1aXZhbGVuY2VcIjtcbmltcG9ydCB7IHVuaWZ5VGVybUludHJpbnNpY2FsbHkgfSBmcm9tIFwiLi4vcHJvY2Vzcy91bmlmeVwiO1xuaW1wb3J0IHsgdmFsaWRhdGVUZXJtcywgdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSB9IGZyb20gXCIuLi9wcm9jZXNzL3ZhbGlkYXRpb25cIjtcbmltcG9ydCB7IHR5cGVGcm9tSlNPTiwgdHlwZVRvVHlwZUpTT04sIHByb3Zpc2lvbmFsRnJvbUpTT04sIHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBmaWx0ZXIgfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgVGVybSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHR5cGUsIHByb3Zpc2lvbmFsKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBwcm92aXNpb25hbCk7XG5cbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICAgIHRoaXMucHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbDtcbiAgfVxuXG4gIGdldFR5cGUoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfVxuXG4gIGlzUHJvdmlzaW9uYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvdmlzaW9uYWw7XG4gIH1cblxuICBzZXRUeXBlKHR5cGUpIHtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgc2V0UHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpIHtcbiAgICB0aGlzLnByb3Zpc2lvbmFsID0gcHJvdmlzaW9uYWw7XG4gIH1cblxuICBnZXRUZXJtTm9kZSgpIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5nZXROb2RlKCksXG4gICAgICAgICAgdGVybU5vZGUgPSBub2RlOyAgLy8vXG5cbiAgICByZXR1cm4gdGVybU5vZGU7XG4gIH1cblxuICBnZXRWYXJpYWJsZU5vZGUoKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0aGlzLmdldFRlcm1Ob2RlKCksXG4gICAgICAgICAgdmFyaWFibGVOb2RlID0gdGVybU5vZGUuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgICByZXR1cm4gdmFyaWFibGVOb2RlO1xuICB9XG5cbiAgZ2V0VmFyaWFibGVJZGVudGlmaWVyKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHZhcmlhYmxlSWRlbnRpZmllciA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlSWRlbnRpZmllcigpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlSWRlbnRpZmllcjtcbiAgfVxuXG4gIGlzRXN0YWJsaXNoZWQoKSB7XG4gICAgY29uc3QgcHJvdmlzaW9uYWwgPSB0aGlzLmlzUHJvdmlzaW9uYWwoKSxcbiAgICAgICAgICBlc3RhYmxpc2hlZCA9ICFwcm92aXNpb25hbDtcblxuICAgIHJldHVybiBlc3RhYmxpc2hlZDtcbiAgfVxuXG4gIGlzRXF1YWxUbyh0ZXJtKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoVGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgIGVxdWFsVG8gPSB0ZXJtTm9kZU1hdGNoZXM7ICAvLy9cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgaXNHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybSAgPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KTtcblxuICAgIGZpbHRlcih2YXJpYWJsZXMsICh2YXJpYWJsZSkgPT4ge1xuICAgICAgY29uc3QgZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUgPSBkZWZpbmVkVmFyaWFibGVzLmluY2x1ZGVzKHZhcmlhYmxlKTtcblxuICAgICAgaWYgKCFkZWZpbmVkVmFyaWFibGVzSW5jbHVkZXNWYXJpYWJsZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IHVuZGVmaW5lZFZhcmlhYmxlcyA9IHZhcmlhYmxlcywgLy8vXG4gICAgICAgICAgdW5kZWZpbmVkVmFyaWFibGVzTGVuZ3RoID0gdW5kZWZpbmVkVmFyaWFibGVzLmxlbmd0aCxcbiAgICAgICAgICBncm91bmRlZCA9ICh1bmRlZmluZWRWYXJpYWJsZXNMZW5ndGggPD0gMSk7XG5cbiAgICByZXR1cm4gZ3JvdW5kZWQ7XG4gIH1cblxuICBpc1Npbmd1bGFyKCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHNpbmd1bGFyID0gdGVybU5vZGUuaXNTaW5ndWxhcigpO1xuXG4gICAgcmV0dXJuIHNpbmd1bGFyO1xuICB9XG5cbiAgaXNJbml0aWFsbHlHcm91bmRlZChjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybSAgPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZXMgPSB2YXJpYWJsZXNGcm9tVGVybSh0ZXJtLCBjb250ZXh0KSxcbiAgICAgICAgICB2YXJpYWJsZXNMZW5ndGggPSB2YXJpYWJsZXMubGVuZ3RoLFxuICAgICAgICAgIGluaXRpYWxseUdyb3VuZGVkID0gKHZhcmlhYmxlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gaW5pdGlhbGx5R3JvdW5kZWQ7XG4gIH1cblxuICBpc0ltcGxpY2l0bHlHcm91bmRlZChkZWZpbmVkVmFyaWFibGVzLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZ3JvdW5kZWQgPSB0aGlzLmlzR3JvdW5kZWQoZGVmaW5lZFZhcmlhYmxlcywgY29udGV4dCksXG4gICAgICAgICAgaW1wbGljaXRseUdyb3VuZGVkID0gZ3JvdW5kZWQ7ICAvLy9cblxuICAgIHJldHVybiBpbXBsaWNpdGx5R3JvdW5kZWQ7XG4gIH1cblxuICBtYXRjaFRlcm1Ob2RlKHRlcm1Ob2RlKSB7XG4gICAgY29uc3Qgbm9kZSA9IHRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICBub2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hOb2RlKG5vZGUpLFxuICAgICAgICAgIHRlcm1Ob2RlTWF0Y2hlcyA9IG5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiB0ZXJtTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBsZXQgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlQSA9IHZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgIHZhcmlhYmxlTm9kZSA9IHRoaXMuZ2V0VmFyaWFibGVOb2RlKCk7XG5cbiAgICAgIGNvbnN0IHZhcmlhYmxlTm9kZUIgPSB2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICAgICAgdmFyaWFibGVOb2RlQU1hdGNoZXNWYXJpYWJsZU5vZGVCID0gdmFyaWFibGVOb2RlQS5tYXRjaCh2YXJpYWJsZU5vZGVCKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZUFNYXRjaGVzVmFyaWFibGVOb2RlQikge1xuICAgICAgICB2YXJpYWJsZU5vZGVNYXRjaGVzID0gdHJ1ZTsgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhcmlhYmxlTm9kZU1hdGNoZXM7XG4gIH1cblxuICBjb21wYXJlVGVybSh0ZXJtKSB7XG4gICAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgICB0ZXJtTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoTm9kZSh0ZXJtTm9kZSksXG4gICAgICAgICAgY29tcGFyZXNUbyA9IHRlcm1Ob2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUbztcbiAgfVxuXG4gIGNvbXBhcmVQYXJhbWV0ZXIocGFyYW1ldGVyKSB7XG4gICAgbGV0IGNvbXBhcmVzVG9QYXJhbXRlciA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSB0aGlzLmlzU2luZ3VsYXIoKTtcblxuICAgIGlmIChzaW5ndWxhcikge1xuICAgICAgY29uc3QgcGFyYW1ldGVySWRlbnRpZmllciA9IHBhcmFtZXRlci5nZXRJZGVudGlmaWVyKCk7XG5cbiAgICAgIGlmIChwYXJhbWV0ZXJJZGVudGlmaWVyICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHRoaXMuZ2V0VmFyaWFibGVJZGVudGlmaWVyKCk7XG5cbiAgICAgICAgaWYgKHBhcmFtZXRlcklkZW50aWZpZXIgPT09IHZhcmlhYmxlSWRlbnRpZmllcikge1xuICAgICAgICAgIGNvbXBhcmVzVG9QYXJhbXRlciA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1BhcmFtdGVyO1xuICB9XG5cbiAgZmluZFRlcm0oY29udGV4dCkge1xuICAgIGNvbnN0IHRlcm1Ob2RlID0gdGhpcy5nZXRUZXJtTm9kZSgpLFxuICAgICAgICAgIHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICByZXR1cm4gdGVybTtcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLi4uYCk7XG5cbiAgICBsZXQgdGVybTtcblxuICAgIHRlcm0gPSB0aGlzLmZpbmRUZXJtKGNvbnRleHQpO1xuXG4gICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBhbHJlYWR5IHByZXNlbnQuYCk7XG5cbiAgICAgIHZhbGlkYXRlcyA9IGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgICAgdmFsaWRhdGVzID0gZXhpc3RzKHZhbGlkYXRlVGVybXMsIHRlcm0sIHN0YXRlLCBjb250ZXh0LCAodGVybSwgc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlcztcblxuICAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG5cbiAgICAgICAgdmFsaWRhdGVzID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZUdpdmVuVHlwZShzdHJpY3QsIHR5cGUsIHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAoY29udGludWF0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVhdGlvbiA9IGNvbnRleHQ7IC8vL1xuXG4gICAgICBjb250ZXh0ID0gc3RhdGU7IC8vL1xuXG4gICAgICBzdGF0ZSA9IHR5cGU7IC8vL1xuXG4gICAgICB0eXBlID0gc3RyaWN0OyAgLy8vXG5cbiAgICAgIHN0cmljdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGdpdmVuIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZS4uLmApO1xuXG4gICAgY29uc3QgdmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZShzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXNHaXZlblR5cGUgPSBmYWxzZTtcblxuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgIGNvbnN0IHR5cGVFc3RhYmxpc2hlZCA9IHR5cGUuaXNFc3RhYmxpc2hlZCgpLFxuICAgICAgICAgICAgICAgIHRlcm1Qcm92aXNpb25hbCA9IHRlcm0uaXNQcm92aXNpb25hbCgpO1xuXG4gICAgICAgICAgaWYgKHR5cGVFc3RhYmxpc2hlZCAmJiB0ZXJtUHJvdmlzaW9uYWwpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodmFsaWRhdGVzR2l2ZW5UeXBlKSB7XG4gICAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbGlkYXRlc0dpdmVuVHlwZTtcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIHZhbGlkYXRlc0dpdmVuVHlwZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0dpdmVuVHlwZSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBnaXZlbiB0aGUgJyR7dHlwZVN0cmluZ30nIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc0dpdmVuVHlwZTtcbiAgfVxuXG4gIHZhbGlkYXRlQXNWYXJpYWJsZShzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc0FzVmFyaWFibGU7XG5cbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRoaXM7ICAvLy9cblxuICAgIHZhbGlkYXRlc0FzVmFyaWFibGUgPSB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlKHRlcm0sIHN0YXRlLCBjb250ZXh0LCAodGVybSwgc3RhdGUsIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCB2YWxpZGF0ZXNBc1ZhcmlhYmxlO1xuXG4gICAgICB2YWxpZGF0ZXNBc1ZhcmlhYmxlID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gdmFsaWRhdGVzQXNWYXJpYWJsZTtcbiAgICB9KTtcblxuICAgIGlmICh2YWxpZGF0ZXNBc1ZhcmlhYmxlKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc0FzVmFyaWFibGU7XG4gIH1cblxuICAvLyB2YWxpZGF0ZUFzUHJvcGVydHkoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIC8vICAgbGV0IHRlcm07XG4gIC8vXG4gIC8vICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cbiAgLy9cbiAgLy8gICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBhcyBhIHByb3BlcnR5Li4uYCk7XG4gIC8vXG4gIC8vICAgZGVidWdnZXJcbiAgLy9cbiAgLy8gICBsZXQgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IGZhbHNlO1xuICAvL1xuICAvLyAgIGNvbnN0IHRlcm0gPSB0aGlzLmZpbmRUZXJtKGNvbnRleHQpO1xuICAvL1xuICAvLyAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gIC8vICAgICB0ZXJtID0gdGVybTsgLy8vXG4gIC8vXG4gIC8vICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkID0gY29udGludWF0aW9uKHRlcm0sIGNvbnRleHQpO1xuICAvL1xuICAvLyAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmQpIHtcbiAgLy8gICAgICAgdmFsaWRhdGVzQXNQcm9wZXJ0eSA9IHRydWU7XG4gIC8vXG4gIC8vICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHt0ZXJtU3RyaW5nfScgdGVybSBpcyBhbHJlYWR5IHZhbGlkLmApO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGVybSA9IG51bGw7XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRlcm0gPSB0aGlzOyAgLy8vXG4gIC8vXG4gIC8vICAgICBjb25zdCB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzID0gdW5pZnlUZXJtV2l0aFByb3BlcnRpZXModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgLy9cbiAgLy8gICAgIGlmICh0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzKSB7XG4gIC8vICAgICAgIHZhbGlkYXRlc0FzUHJvcGVydHkgPSB0cnVlO1xuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgdGVybSA9IG51bGw7XG4gIC8vICAgICB9XG4gIC8vXG4gIC8vICAgICBpZiAodmFsaWRhdGVzQXNQcm9wZXJ0eSkge1xuICAvLyAgICAgICBjb250ZXh0LmFkZFRlcm0odGVybSk7XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIGlmICh2YWxpZGF0ZXNBc1Byb3BlcnR5KSB7XG4gIC8vICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgcHJvcGVydHkuYCk7XG4gIC8vICAgfVxuICAvL1xuICAvLyAgIHJldHVybiB0ZXJtO1xuICAvLyB9XG5cbiAgdW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0ZXJtVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxUZXJtID0gdGhpcywgLy8vXG4gICAgICAgICAgc3BlY2lmaWNUZXJtID0gdGVybSxcbiAgICAgICAgICBnZW5lcmFsVGVybVN0cmluZyA9IGdlbmVyYWxUZXJtLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZml4VGVybVN0cmluZyA9IHNwZWNpZmljVGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpeFRlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxUZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgcmV0dXJuIHVuaWZ5VGVybUludHJpbnNpY2FsbHkoZ2VuZXJhbFRlcm0sIHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSkgPT4ge1xuICAgICAgaWYgKHRlcm1VbmlmaWVzSW50cmluc2ljYWxseSkge1xuICAgICAgICB0ZXJtVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpeFRlcm1TdHJpbmd9JyB0ZXJtIHdpdGggdGhlICcke2dlbmVyYWxUZXJtU3RyaW5nfScgdGVybS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgdHlwZUpTT04gPSB0eXBlVG9UeXBlSlNPTih0aGlzLnR5cGUpLFxuICAgICAgICAgIHByb3Zpc2lvbmFsSlNPTiA9IHByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04odGhpcy5wcm92aXNpb25hbCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVKU09OLCAgLy8vXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEpTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBwcm92aXNpb25hbFxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJUZXJtXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdGVybTtcblxuICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgIHRlcm1Ob2RlID0gaW5zdGFudGlhdGVUZXJtKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICBub2RlID0gdGVybU5vZGUsICAvLy9cbiAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICB0eXBlID0gdHlwZUZyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJvdmlzaW9uYWwgPSBwcm92aXNpb25hbEZyb21KU09OKGpzb24sIGNvbnRleHQpO1xuXG4gICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgdGVybSA9IG5ldyBUZXJtKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdHlwZSwgcHJvdmlzaW9uYWwpO1xuICAgIH0sIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIHRlcm07XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbImZpbHRlciIsImFycmF5VXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVGVybSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0eXBlIiwicHJvdmlzaW9uYWwiLCJnZXRUeXBlIiwiaXNQcm92aXNpb25hbCIsInNldFR5cGUiLCJzZXRQcm92aXNpb25hbCIsImdldFRlcm1Ob2RlIiwiZ2V0Tm9kZSIsInRlcm1Ob2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGVJZGVudGlmaWVyIiwiaXNFc3RhYmxpc2hlZCIsImVzdGFibGlzaGVkIiwiaXNFcXVhbFRvIiwidGVybSIsInRlcm1Ob2RlTWF0Y2hlcyIsIm1hdGNoVGVybU5vZGUiLCJlcXVhbFRvIiwiaXNHcm91bmRlZCIsImRlZmluZWRWYXJpYWJsZXMiLCJ2YXJpYWJsZXMiLCJ2YXJpYWJsZXNGcm9tVGVybSIsInZhcmlhYmxlIiwiZGVmaW5lZFZhcmlhYmxlc0luY2x1ZGVzVmFyaWFibGUiLCJpbmNsdWRlcyIsInVuZGVmaW5lZFZhcmlhYmxlcyIsInVuZGVmaW5lZFZhcmlhYmxlc0xlbmd0aCIsImxlbmd0aCIsImdyb3VuZGVkIiwiaXNTaW5ndWxhciIsInNpbmd1bGFyIiwiaXNJbml0aWFsbHlHcm91bmRlZCIsInZhcmlhYmxlc0xlbmd0aCIsImluaXRpYWxseUdyb3VuZGVkIiwiaXNJbXBsaWNpdGx5R3JvdW5kZWQiLCJpbXBsaWNpdGx5R3JvdW5kZWQiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm1hdGNoVmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsInZhcmlhYmxlTm9kZUEiLCJ2YXJpYWJsZU5vZGVCIiwidmFyaWFibGVOb2RlQU1hdGNoZXNWYXJpYWJsZU5vZGVCIiwibWF0Y2giLCJjb21wYXJlVGVybSIsImNvbXBhcmVzVG8iLCJjb21wYXJlUGFyYW1ldGVyIiwicGFyYW1ldGVyIiwiY29tcGFyZXNUb1BhcmFtdGVyIiwicGFyYW1ldGVySWRlbnRpZmllciIsImdldElkZW50aWZpZXIiLCJmaW5kVGVybSIsImZpbmRUZXJtQnlUZXJtTm9kZSIsInZhbGlkYXRlIiwic3RhdGUiLCJjb250aW51YXRpb24iLCJ2YWxpZGF0ZXMiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZWJ1ZyIsImV4aXN0cyIsInZhbGlkYXRlVGVybXMiLCJhZGRUZXJtIiwidmFsaWRhdGVHaXZlblR5cGUiLCJzdHJpY3QiLCJ1bmRlZmluZWQiLCJ2YWxpZGF0ZXNHaXZlblR5cGUiLCJ0eXBlU3RyaW5nIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsInR5cGVFc3RhYmxpc2hlZCIsInRlcm1Qcm92aXNpb25hbCIsInZhbGlkYXRlQXNWYXJpYWJsZSIsInZhbGlkYXRlc0FzVmFyaWFibGUiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidW5pZnlUZXJtIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxUZXJtIiwic3BlY2lmaWNUZXJtIiwiZ2VuZXJhbFRlcm1TdHJpbmciLCJzcGVjaWZpeFRlcm1TdHJpbmciLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidGVybVVuaWZpZXNJbnRyaW5zaWNhbGx5IiwidG9KU09OIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsInByb3Zpc2lvbmFsSlNPTiIsInByb3Zpc2lvbmFsVG9Qcm92aXNpb25hbEpTT04iLCJnZXRCcmVha1BvaW50IiwiYnJlYWtQb2ludEpTT04iLCJqc29uIiwibmFtZSIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVRlcm0iLCJ0eXBlRnJvbUpTT04iLCJwcm92aXNpb25hbEZyb21KU09OIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFpQkE7OztlQUFBOzs7MkJBZitCO2dDQUNjOzBCQUV0Qjs4QkFDQTt5QkFDSzs2QkFDSTs2QkFDRTt1QkFDSzs0QkFDZTtzQkFDMEM7QUFFaEcsTUFBTSxFQUFFQSxNQUFNLEVBQUUsR0FBR0MseUJBQWMsRUFDM0IsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUU5RSxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGFBQWFDLHVCQUFPO0lBQzlDLFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxXQUFXLENBQUU7UUFDaEUsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQyxZQUFZRTtRQUV6QyxJQUFJLENBQUNELElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLFdBQVcsR0FBR0E7SUFDckI7SUFFQUMsVUFBVTtRQUNSLE9BQU8sSUFBSSxDQUFDRixJQUFJO0lBQ2xCO0lBRUFHLGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDRixXQUFXO0lBQ3pCO0lBRUFHLFFBQVFKLElBQUksRUFBRTtRQUNaLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtJQUNkO0lBRUFLLGVBQWVKLFdBQVcsRUFBRTtRQUMxQixJQUFJLENBQUNBLFdBQVcsR0FBR0E7SUFDckI7SUFFQUssY0FBYztRQUNaLE1BQU1SLE9BQU8sSUFBSSxDQUFDUyxPQUFPLElBQ25CQyxXQUFXVixNQUFPLEdBQUc7UUFFM0IsT0FBT1U7SUFDVDtJQUVBQyxrQkFBa0I7UUFDaEIsTUFBTUQsV0FBVyxJ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
|
package/lib/process/equate.js
CHANGED
|
@@ -18,6 +18,7 @@ _export(exports, {
|
|
|
18
18
|
});
|
|
19
19
|
const _occamquery = require("occam-query");
|
|
20
20
|
const _zip = /*#__PURE__*/ _interop_require_default(require("../pass/zip"));
|
|
21
|
+
const _brackets = require("../utilities/brackets");
|
|
21
22
|
const _equivalences = require("../utilities/equivalences");
|
|
22
23
|
function _interop_require_default(obj) {
|
|
23
24
|
return obj && obj.__esModule ? obj : {
|
|
@@ -33,25 +34,40 @@ class EquationalPass extends _zip.default {
|
|
|
33
34
|
specificNodeQuery: termNodeQuery,
|
|
34
35
|
run: (leftTermNode, rightTermNode, context)=>{
|
|
35
36
|
let success = false;
|
|
37
|
+
leftTermNode = (0, _brackets.stripBracketsFromTermNode)(leftTermNode); ///
|
|
38
|
+
rightTermNode = (0, _brackets.stripBracketsFromTermNode)(rightTermNode); ///
|
|
36
39
|
if (!success) {
|
|
37
|
-
const
|
|
38
|
-
if (
|
|
39
|
-
|
|
40
|
+
const equivalences = context.getEquivalences(), leftEquivalence = (0, _equivalences.findEquivalenceByTermNode)(equivalences, leftTermNode), rightEquivalence = (0, _equivalences.findEquivalenceByTermNode)(equivalences, rightTermNode);
|
|
41
|
+
if (!success) {
|
|
42
|
+
if (leftEquivalence !== null && rightEquivalence !== null && leftEquivalence === rightEquivalence) {
|
|
43
|
+
success = true;
|
|
44
|
+
}
|
|
40
45
|
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
46
|
+
if (!success) {
|
|
47
|
+
if (leftEquivalence !== null) {
|
|
48
|
+
success = leftEquivalence.someOtherTerm(leftTerm, (otherTerm)=>{
|
|
49
|
+
const leftTerm1 = otherTerm, leftTermNode = leftTerm1.getNode(), rightTermNode = rightTerm.getNode(), descended = descend(leftTermNode, rightTermNode, context);
|
|
50
|
+
if (descended) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (!success) {
|
|
57
|
+
if (rightEquivalence !== null) {
|
|
58
|
+
success = rightEquivalence.someOtherTerm(rightTerm, (otherTerm)=>{
|
|
59
|
+
const rightTerm1 = otherTerm, leftTermNode = leftTerm.getNode(), rightTermNode = rightTerm1.getNode(), descended = descend(leftTermNode, rightTermNode, context);
|
|
60
|
+
if (descended) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
49
65
|
}
|
|
50
66
|
}
|
|
51
67
|
if (!success) {
|
|
52
68
|
const depth = 1, leftTermNodeMatchesRightTermNode = leftTermNode.match(rightTermNode, depth);
|
|
53
69
|
if (leftTermNodeMatchesRightTermNode) {
|
|
54
|
-
const
|
|
70
|
+
const descended = descend(leftTermNode, rightTermNode, context);
|
|
55
71
|
if (descended) {
|
|
56
72
|
success = true;
|
|
57
73
|
}
|
|
@@ -63,17 +79,35 @@ class EquationalPass extends _zip.default {
|
|
|
63
79
|
];
|
|
64
80
|
}
|
|
65
81
|
const equationalPass = new EquationalPass();
|
|
66
|
-
function equateTerms(
|
|
67
|
-
let termsEquate;
|
|
68
|
-
const
|
|
69
|
-
|
|
82
|
+
function equateTerms(leftTerm1, rightTerm1, context) {
|
|
83
|
+
let termsEquate = false;
|
|
84
|
+
const leftTermString = leftTerm1.getString(), rightTermString = rightTerm1.getString();
|
|
85
|
+
context.trace(`Equating the '${leftTermString}' and '${rightTermString}' terms...`);
|
|
86
|
+
const leftTermNode = leftTerm1.getNode(), rightTermNode = rightTerm1.getNode(), generalNode = leftTermNode, specificNode = rightTermNode, success = equationalPass.run(generalNode, specificNode, context);
|
|
87
|
+
if (success) {
|
|
88
|
+
termsEquate = true;
|
|
89
|
+
}
|
|
90
|
+
if (termsEquate) {
|
|
91
|
+
context.debug(`...equated the '${leftTermString}' and '${rightTermString}' terms.`);
|
|
92
|
+
}
|
|
70
93
|
return termsEquate;
|
|
71
94
|
}
|
|
72
95
|
function equateStatements(leftStatement, rightStatement, context) {
|
|
73
|
-
let statementsEquate;
|
|
96
|
+
let statementsEquate = false;
|
|
97
|
+
const leftStatementString = leftStatement.getString(), rightStatementString = rightStatement.getString();
|
|
98
|
+
context.trace(`Equating the '${leftStatementString}' and '${rightStatementString}' statements...`);
|
|
74
99
|
const leftStatementNode = leftStatement.getNode(), rightStatementNode = rightStatement.getNode(), generalNode = leftStatementNode, specificNode = rightStatementNode, success = equationalPass.run(generalNode, specificNode, context);
|
|
75
|
-
|
|
100
|
+
if (success) {
|
|
101
|
+
statementsEquate = true;
|
|
102
|
+
}
|
|
103
|
+
if (statementsEquate) {
|
|
104
|
+
context.debug(`...equated the '${leftStatementString}' and '${rightStatementString}' statements.`);
|
|
105
|
+
}
|
|
76
106
|
return statementsEquate;
|
|
77
107
|
}
|
|
108
|
+
function descend(leftTermNode, rightTermNode, context) {
|
|
109
|
+
const leftNonTerminalNode = leftTermNode, rightNonTerminalNode = rightTermNode, leftNonTerminalNodeChildNodes = leftNonTerminalNode.getChildNodes(), rightNonTerminalNodeChildNodes = rightNonTerminalNode.getChildNodes(), leftChildNodes = leftNonTerminalNodeChildNodes, rightChildNodes = rightNonTerminalNodeChildNodes, descended = equationalPass.descend(leftChildNodes, rightChildNodes, context);
|
|
110
|
+
return descended;
|
|
111
|
+
}
|
|
78
112
|
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2VxdWF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IGZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIik7XG5cbmNsYXNzIEVxdWF0aW9uYWxQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksICAvLy9cbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LCAvLy9cbiAgICAgIHJ1bjogKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmICghc3VjY2Vzcykge1xuICAgICAgICAgIGNvbnN0IGRlcHRoID0gSW5maW5pdHksXG4gICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUgPSBsZWZ0VGVybU5vZGUubWF0Y2gocmlnaHRUZXJtTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgaWYgKGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgICAgICAgIHRlcm1Ob2RlcyA9IFtcbiAgICAgICAgICAgICAgICAgIGxlZnRUZXJtTm9kZSxcbiAgICAgICAgICAgICAgICAgIHJpZ2h0VGVybU5vZGVcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGVxdWl2YWxlbmNlID0gZmluZEVxdWl2YWxlbmNlQnlUZXJtTm9kZXMoZXF1aXZhbGVuY2VzLCB0ZXJtTm9kZXMpO1xuXG4gICAgICAgICAgaWYgKGVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBkZXB0aCA9IDEsXG4gICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUgPSBsZWZ0VGVybU5vZGUubWF0Y2gocmlnaHRUZXJtTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgaWYgKGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlKSB7XG4gICAgICAgICAgICBjb25zdCBsZWZ0Tm9uVGVybWluYWxOb2RlID0gbGVmdFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IGxlZnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgcmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcmlnaHROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgICAgICAgICAgbGVmdENoaWxkTm9kZXMgPSBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgICAgICAgICByaWdodENoaWxkTm9kZXMgPSByaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gZXF1YXRpb25hbFBhc3MuZGVzY2VuZChsZWZ0Q2hpbGROb2RlcywgcmlnaHRDaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNvbnN0IGVxdWF0aW9uYWxQYXNzID0gbmV3IEVxdWF0aW9uYWxQYXNzKCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlcXVhdGVUZXJtcyhsZWZ0VGVybSwgcmlnaHRUZXJtLCBjb250ZXh0KSB7XG4gIGxldCB0ZXJtc0VxdWF0ZTtcblxuICBjb25zdCBsZWZ0VGVybU5vZGUgPSBsZWZ0VGVybS5nZXROb2RlKCksXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSByaWdodFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGxlZnRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHJpZ2h0VGVybU5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gZXF1YXRpb25hbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGNvbnRleHQpO1xuXG4gIHRlcm1zRXF1YXRlID0gc3VjY2VzczsgLy8vXG5cbiAgcmV0dXJuIHRlcm1zRXF1YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50c0VxdWF0ZTtcblxuICBjb25zdCBsZWZ0U3RhdGVtZW50Tm9kZSA9IGxlZnRTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICByaWdodFN0YXRlbWVudE5vZGUgPSByaWdodFN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gbGVmdFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSByaWdodFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzdWNjZXNzID0gZXF1YXRpb25hbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGNvbnRleHQpO1xuXG4gIHN0YXRlbWVudHNFcXVhdGUgPSBzdWNjZXNzOyAvLy9cblxuICByZXR1cm4gc3RhdGVtZW50c0VxdWF0ZTtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhdGVTdGF0ZW1lbnRzIiwiZXF1YXRlVGVybXMiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInRlcm1Ob2RlUXVlcnkiLCJFcXVhdGlvbmFsUGFzcyIsIlppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwicnVuIiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImNvbnRleHQiLCJzdWNjZXNzIiwiZGVwdGgiLCJJbmZpbml0eSIsImxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVpdmFsZW5jZXMiLCJnZXRFcXVpdmFsZW5jZXMiLCJ0ZXJtTm9kZXMiLCJlcXVpdmFsZW5jZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGVzIiwibGVmdE5vblRlcm1pbmFsTm9kZSIsInJpZ2h0Tm9uVGVybWluYWxOb2RlIiwibGVmdE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJnZXRDaGlsZE5vZGVzIiwicmlnaHROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwibGVmdENoaWxkTm9kZXMiLCJyaWdodENoaWxkTm9kZXMiLCJkZXNjZW5kZWQiLCJlcXVhdGlvbmFsUGFzcyIsImRlc2NlbmQiLCJsZWZ0VGVybSIsInJpZ2h0VGVybSIsInRlcm1zRXF1YXRlIiwiZ2V0Tm9kZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwibGVmdFN0YXRlbWVudCIsInJpZ2h0U3RhdGVtZW50Iiwic3RhdGVtZW50c0VxdWF0ZSIsImxlZnRTdGF0ZW1lbnROb2RlIiwicmlnaHRTdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFtRmdCQTtlQUFBQTs7UUFkQUM7ZUFBQUE7Ozs0QkFuRWU7NERBRVg7OEJBRXVCOzs7Ozs7QUFFM0MsTUFBTSxFQUFFQyxTQUFTLEVBQUUsR0FBR0MsMEJBQWM7QUFFcEMsTUFBTUMsZ0JBQWdCRixVQUFVO0FBRWhDLE1BQU1HLHVCQUF1QkMsWUFBTztJQUNsQyxPQUFPQyxPQUFPO1FBQ1o7WUFDRUMsa0JBQWtCSjtZQUNsQkssbUJBQW1CTDtZQUNuQk0sS0FBSyxDQUFDQyxjQUFjQyxlQUFlQztnQkFDakMsSUFBSUMsVUFBVTtnQkFFZCxJQUFJLENBQUNBLFNBQVM7b0JBQ1osTUFBTUMsUUFBUUMsVUFDUkMsbUNBQW1DTixhQUFhTyxLQUFLLENBQUNOLGVBQWVHO29CQUUzRSxJQUFJRSxrQ0FBa0M7d0JBQ3BDSCxVQUFVO29CQUNaO2dCQUNGO2dCQUVBLElBQUksQ0FBQ0EsU0FBUztvQkFDWixNQUFNSyxlQUFlTixRQUFRTyxlQUFlLElBQ3RDQyxZQUFZO3dCQUNWVjt3QkFDQUM7cUJBQ0QsRUFDRFUsY0FBY0MsSUFBQUEsd0NBQTBCLEVBQUNKLGNBQWNFO29CQUU3RCxJQUFJQyxnQkFBZ0IsTUFBTTt3QkFDeEJSLFVBQVU7b0JBQ1o7Z0JBQ0Y7Z0JBRUEsSUFBSSxDQUFDQSxTQUFTO29CQUNaLE1BQU1DLFFBQVEsR0FDUkUsbUNBQW1DTixhQUFhTyxLQUFLLENBQUNOLGVBQWVHO29CQUUzRSxJQUFJRSxrQ0FBa0M7d0JBQ3BDLE1BQU1PLHNCQUFzQmIsY0FDdEJjLHVCQUF1QmIsZUFDdkJjLGdDQUFnQ0Ysb0JBQW9CRyxhQUFhLElBQ2pFQyxpQ0FBaUNILHFCQUFxQkUsYUFBYSxJQUNuRUUsaUJBQWlCSCwrQkFDakJJLGtCQUFrQkYsZ0NBQ2xCRyxZQUFZQyxlQUFlQyxPQUFPLENBQUNKLGdCQUFnQkMsaUJBQWlCakI7d0JBRTFFLElBQUlrQixXQUFXOzRCQUNiakIsVUFBVTt3QkFDWjtvQkFDRjtnQkFDRjtnQkFFQSxPQUFPQTtZQUNUO1FBQ0Y7S0FDRCxDQUFDO0FBQ0o7QUFFQSxNQUFNa0IsaUJBQWlCLElBQUkzQjtBQUVwQixTQUFTSixZQUFZaUMsUUFBUSxFQUFFQyxTQUFTLEVBQUV0QixPQUFPO0lBQ3RELElBQUl1QjtJQUVKLE1BQU16QixlQUFldUIsU0FBU0csT0FBTyxJQUMvQnpCLGdCQUFnQnVCLFVBQVVFLE9BQU8sSUFDakNDLGNBQWMzQixjQUNkNEIsZUFBZTNCLGVBQ2ZFLFVBQVVrQixlQUFldEIsR0FBRyxDQUFDNEIsYUFBYUMsY0FBYzFCO0lBRTlEdUIsY0FBY3RCLFNBQVMsR0FBRztJQUUxQixPQUFPc0I7QUFDVDtBQUVPLFNBQVNwQyxpQkFBaUJ3QyxhQUFhLEVBQUVDLGNBQWMsRUFBRTVCLE9BQU87SUFDckUsSUFBSTZCO0lBRUosTUFBTUMsb0JBQW9CSCxjQUFjSCxPQUFPLElBQ3pDTyxxQkFBcUJILGVBQWVKLE9BQU8sSUFDM0NDLGNBQWNLLG1CQUNkSixlQUFlSyxvQkFDZjlCLFVBQVVrQixlQUFldEIsR0FBRyxDQUFDNEIsYUFBYUMsY0FBYzFCO0lBRTlENkIsbUJBQW1CNUIsU0FBUyxHQUFHO0lBRS9CLE9BQU80QjtBQUNUIn0=
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL2VxdWF0ZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgcXVlcnlVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tcXVlcnlcIjtcblxuaW1wb3J0IFppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvemlwXCI7XG5cbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2JyYWNrZXRzXCI7XG5pbXBvcnQgeyBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lcXVpdmFsZW5jZXNcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCB0ZXJtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm1cIik7XG5cbmNsYXNzIEVxdWF0aW9uYWxQYXNzIGV4dGVuZHMgWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksICAvLy9cbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LCAvLy9cbiAgICAgIHJ1bjogKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxlZnRUZXJtTm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tVGVybU5vZGUobGVmdFRlcm1Ob2RlKTsgLy8vXG4gICAgICAgIHJpZ2h0VGVybU5vZGUgPSBzdHJpcEJyYWNrZXRzRnJvbVRlcm1Ob2RlKHJpZ2h0VGVybU5vZGUpOyAvLy9cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBlcXVpdmFsZW5jZXMgPSBjb250ZXh0LmdldEVxdWl2YWxlbmNlcygpLFxuICAgICAgICAgICAgICAgIGxlZnRFcXVpdmFsZW5jZSA9IGZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGUoZXF1aXZhbGVuY2VzLCBsZWZ0VGVybU5vZGUpLFxuICAgICAgICAgICAgICAgIHJpZ2h0RXF1aXZhbGVuY2UgPSBmaW5kRXF1aXZhbGVuY2VCeVRlcm1Ob2RlKGVxdWl2YWxlbmNlcywgcmlnaHRUZXJtTm9kZSk7XG5cbiAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmICgobGVmdEVxdWl2YWxlbmNlICE9PSBudWxsKSAmJiAocmlnaHRFcXVpdmFsZW5jZSAhPT0gbnVsbCkgJiYgKGxlZnRFcXVpdmFsZW5jZSA9PT0gcmlnaHRFcXVpdmFsZW5jZSkpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAobGVmdEVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSBsZWZ0RXF1aXZhbGVuY2Uuc29tZU90aGVyVGVybShsZWZ0VGVybSwgKG90aGVyVGVybSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGxlZnRUZXJtID0gb3RoZXJUZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0VGVybU5vZGUgPSBsZWZ0VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gZGVzY2VuZChsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyaWdodEVxdWl2YWxlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSByaWdodEVxdWl2YWxlbmNlLnNvbWVPdGhlclRlcm0ocmlnaHRUZXJtLCAob3RoZXJUZXJtKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmlnaHRUZXJtID0gb3RoZXJUZXJtLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICBsZWZ0VGVybU5vZGUgPSBsZWZ0VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgcmlnaHRUZXJtTm9kZSA9IHJpZ2h0VGVybS5nZXROb2RlKCksXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY2VuZGVkID0gZGVzY2VuZChsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgICBjb25zdCBkZXB0aCA9IDEsXG4gICAgICAgICAgICAgICAgbGVmdFRlcm1Ob2RlTWF0Y2hlc1JpZ2h0VGVybU5vZGUgPSBsZWZ0VGVybU5vZGUubWF0Y2gocmlnaHRUZXJtTm9kZSwgZGVwdGgpO1xuXG4gICAgICAgICAgaWYgKGxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjZW5kZWQgPSBkZXNjZW5kKGxlZnRUZXJtTm9kZSwgcmlnaHRUZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBlcXVhdGlvbmFsUGFzcyA9IG5ldyBFcXVhdGlvbmFsUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YXRlVGVybXMobGVmdFRlcm0sIHJpZ2h0VGVybSwgY29udGV4dCkge1xuICBsZXQgdGVybXNFcXVhdGUgPSBmYWxzZTtcblxuICBjb25zdCBsZWZ0VGVybVN0cmluZyA9IGxlZnRUZXJtLmdldFN0cmluZygpLFxuICAgICAgICByaWdodFRlcm1TdHJpbmcgPSByaWdodFRlcm0uZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgRXF1YXRpbmcgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zLi4uYCk7XG5cbiAgY29uc3QgbGVmdFRlcm1Ob2RlID0gbGVmdFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICByaWdodFRlcm1Ob2RlID0gcmlnaHRUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBsZWZ0VGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSByaWdodFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3VjY2VzcyA9IGVxdWF0aW9uYWxQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBjb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1zRXF1YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGlmICh0ZXJtc0VxdWF0ZSkge1xuICAgIGNvbnRleHQuZGVidWcoYC4uLmVxdWF0ZWQgdGhlICcke2xlZnRUZXJtU3RyaW5nfScgYW5kICcke3JpZ2h0VGVybVN0cmluZ30nIHRlcm1zLmApO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1zRXF1YXRlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXF1YXRlU3RhdGVtZW50cyhsZWZ0U3RhdGVtZW50LCByaWdodFN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3RhdGVtZW50c0VxdWF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0IGxlZnRTdGF0ZW1lbnRTdHJpbmcgPSBsZWZ0U3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICByaWdodFN0YXRlbWVudFN0cmluZyA9IHJpZ2h0U3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYEVxdWF0aW5nIHRoZSAnJHtsZWZ0U3RhdGVtZW50U3RyaW5nfScgYW5kICcke3JpZ2h0U3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50cy4uLmApO1xuXG4gIGNvbnN0IGxlZnRTdGF0ZW1lbnROb2RlID0gbGVmdFN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIHJpZ2h0U3RhdGVtZW50Tm9kZSA9IHJpZ2h0U3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBsZWZ0U3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHNwZWNpZmljTm9kZSA9IHJpZ2h0U3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgIHN1Y2Nlc3MgPSBlcXVhdGlvbmFsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgY29udGV4dCk7XG5cbiAgaWYgKHN1Y2Nlc3MpIHtcbiAgICBzdGF0ZW1lbnRzRXF1YXRlID0gdHJ1ZTtcbiAgfVxuXG4gIGlmIChzdGF0ZW1lbnRzRXF1YXRlKSB7XG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uZXF1YXRlZCB0aGUgJyR7bGVmdFN0YXRlbWVudFN0cmluZ30nIGFuZCAnJHtyaWdodFN0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudHMuYCk7XG4gIH1cblxuICByZXR1cm4gc3RhdGVtZW50c0VxdWF0ZTtcbn1cblxuZnVuY3Rpb24gZGVzY2VuZChsZWZ0VGVybU5vZGUsIHJpZ2h0VGVybU5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgbGVmdE5vblRlcm1pbmFsTm9kZSA9IGxlZnRUZXJtTm9kZSwgLy8vXG4gICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlID0gcmlnaHRUZXJtTm9kZSwgLy8vXG4gICAgICAgIGxlZnROb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gbGVmdE5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IHJpZ2h0Tm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgbGVmdENoaWxkTm9kZXMgPSBsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgIHJpZ2h0Q2hpbGROb2RlcyA9IHJpZ2h0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcywgLy8vXG4gICAgICAgIGRlc2NlbmRlZCA9IGVxdWF0aW9uYWxQYXNzLmRlc2NlbmQobGVmdENoaWxkTm9kZXMsIHJpZ2h0Q2hpbGROb2RlcywgY29udGV4dCk7XG5cbiAgcmV0dXJuIGRlc2NlbmRlZDtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhdGVTdGF0ZW1lbnRzIiwiZXF1YXRlVGVybXMiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInRlcm1Ob2RlUXVlcnkiLCJFcXVhdGlvbmFsUGFzcyIsIlppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwicnVuIiwibGVmdFRlcm1Ob2RlIiwicmlnaHRUZXJtTm9kZSIsImNvbnRleHQiLCJzdWNjZXNzIiwic3RyaXBCcmFja2V0c0Zyb21UZXJtTm9kZSIsImVxdWl2YWxlbmNlcyIsImdldEVxdWl2YWxlbmNlcyIsImxlZnRFcXVpdmFsZW5jZSIsImZpbmRFcXVpdmFsZW5jZUJ5VGVybU5vZGUiLCJyaWdodEVxdWl2YWxlbmNlIiwic29tZU90aGVyVGVybSIsImxlZnRUZXJtIiwib3RoZXJUZXJtIiwiZ2V0Tm9kZSIsInJpZ2h0VGVybSIsImRlc2NlbmRlZCIsImRlc2NlbmQiLCJkZXB0aCIsImxlZnRUZXJtTm9kZU1hdGNoZXNSaWdodFRlcm1Ob2RlIiwibWF0Y2giLCJlcXVhdGlvbmFsUGFzcyIsInRlcm1zRXF1YXRlIiwibGVmdFRlcm1TdHJpbmciLCJnZXRTdHJpbmciLCJyaWdodFRlcm1TdHJpbmciLCJ0cmFjZSIsImdlbmVyYWxOb2RlIiwic3BlY2lmaWNOb2RlIiwiZGVidWciLCJsZWZ0U3RhdGVtZW50IiwicmlnaHRTdGF0ZW1lbnQiLCJzdGF0ZW1lbnRzRXF1YXRlIiwibGVmdFN0YXRlbWVudFN0cmluZyIsInJpZ2h0U3RhdGVtZW50U3RyaW5nIiwibGVmdFN0YXRlbWVudE5vZGUiLCJyaWdodFN0YXRlbWVudE5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlIiwicmlnaHROb25UZXJtaW5hbE5vZGUiLCJsZWZ0Tm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJyaWdodE5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMiLCJsZWZ0Q2hpbGROb2RlcyIsInJpZ2h0Q2hpbGROb2RlcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBZ0hnQkE7ZUFBQUE7O1FBekJBQztlQUFBQTs7OzRCQXJGZTs0REFFWDswQkFFc0I7OEJBQ0E7Ozs7OztBQUUxQyxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQywwQkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVU7QUFFaEMsTUFBTUcsdUJBQXVCQyxZQUFPO0lBQ2xDLE9BQU9DLE9BQU87UUFDWjtZQUNFQyxrQkFBa0JKO1lBQ2xCSyxtQkFBbUJMO1lBQ25CTSxLQUFLLENBQUNDLGNBQWNDLGVBQWVDO2dCQUNqQyxJQUFJQyxVQUFVO2dCQUVkSCxlQUFlSSxJQUFBQSxtQ0FBeUIsRUFBQ0osZUFBZSxHQUFHO2dCQUMzREMsZ0JBQWdCRyxJQUFBQSxtQ0FBeUIsRUFBQ0gsZ0JBQWdCLEdBQUc7Z0JBRTdELElBQUksQ0FBQ0UsU0FBUztvQkFDWixNQUFNRSxlQUFlSCxRQUFRSSxlQUFl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
|