occam-nominal 1.0.303 → 1.0.305
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/element/assertion/contained.js +113 -88
- package/lib/element/assertion/defined.js +104 -79
- package/lib/element/declaration/variable.js +21 -19
- package/lib/element/equality.js +68 -54
- package/lib/element/judgement.js +70 -55
- package/lib/element/metavariable.js +4 -3
- package/lib/element/procedureCall.js +3 -3
- package/lib/element/proofAssertion/premise.js +4 -3
- package/lib/element/proofAssertion/step.js +5 -4
- package/lib/element/proofAssertion/supposition.js +42 -28
- package/lib/element/rule.js +4 -3
- package/lib/element/statement.js +4 -3
- package/lib/element/subproof.js +4 -3
- package/lib/element/substitution/frame.js +55 -55
- package/lib/element/substitution/statement.js +4 -3
- package/lib/element/substitution/term.js +54 -60
- package/lib/element/term.js +20 -30
- package/lib/element/topLevelAssertion/axiom.js +29 -27
- package/lib/element/topLevelAssertion/conjecture.js +13 -12
- package/lib/element/topLevelAssertion/lemma.js +13 -12
- package/lib/element/topLevelAssertion/theorem.js +13 -12
- package/lib/element/topLevelAssertion.js +85 -95
- package/lib/element/variable.js +13 -16
- package/lib/process/validation.js +31 -32
- package/lib/utilities/continuation.js +61 -0
- package/package.json +3 -3
- package/src/element/assertion/contained.js +138 -96
- package/src/element/assertion/defined.js +128 -85
- package/src/element/declaration/variable.js +23 -22
- package/src/element/equality.js +81 -60
- package/src/element/judgement.js +84 -62
- package/src/element/metavariable.js +3 -3
- package/src/element/procedureCall.js +2 -2
- package/src/element/proofAssertion/premise.js +2 -2
- package/src/element/proofAssertion/step.js +3 -2
- package/src/element/proofAssertion/supposition.js +50 -35
- package/src/element/rule.js +2 -1
- package/src/element/statement.js +3 -3
- package/src/element/subproof.js +2 -1
- package/src/element/substitution/frame.js +66 -66
- package/src/element/substitution/statement.js +3 -3
- package/src/element/substitution/term.js +67 -75
- package/src/element/term.js +22 -37
- package/src/element/topLevelAssertion/axiom.js +32 -29
- package/src/element/topLevelAssertion/conjecture.js +14 -14
- package/src/element/topLevelAssertion/lemma.js +16 -16
- package/src/element/topLevelAssertion/theorem.js +14 -14
- package/src/element/topLevelAssertion.js +93 -116
- package/src/element/variable.js +20 -23
- package/src/process/validation.js +36 -36
- package/src/utilities/continuation.js +21 -0
|
@@ -12,6 +12,7 @@ const _occamlanguages = require("occam-languages");
|
|
|
12
12
|
const _assertion = /*#__PURE__*/ _interop_require_default(require("../assertion"));
|
|
13
13
|
const _elements = require("../../elements");
|
|
14
14
|
const _context = require("../../utilities/context");
|
|
15
|
+
const _continuation = require("../../utilities/continuation");
|
|
15
16
|
const _instantiate = require("../../process/instantiate");
|
|
16
17
|
const _substitutions = require("../../utilities/substitutions");
|
|
17
18
|
const _element = require("../../utilities/element");
|
|
@@ -45,102 +46,120 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
|
|
|
45
46
|
const node = this.getNode(), containedAssertionNode = node; ///
|
|
46
47
|
return containedAssertionNode;
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
let containedAssertion = null;
|
|
49
|
+
validate(context, continuation) {
|
|
50
50
|
const containedAssertionString = this.getString(); ///
|
|
51
51
|
context.trace(`Validating the '${containedAssertionString}' contained assertion...`);
|
|
52
|
-
let validates = false;
|
|
53
52
|
const validAssertion = this.findValidAssertion(context);
|
|
54
53
|
if (validAssertion !== null) {
|
|
55
|
-
|
|
56
|
-
containedAssertion = validAssertion; ///
|
|
54
|
+
const containedAssertion = validAssertion; ///
|
|
57
55
|
context.debug(`...the '${containedAssertionString}' contained assertion is already valid.`);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
56
|
+
continuation(containedAssertion);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const validateTerm = this.validateTerm.bind(this), validateFrame = this.validateFrame.bind(this), validateStatement = this.validateStatement.bind(this);
|
|
60
|
+
(0, _continuation.all)([
|
|
61
|
+
validateTerm,
|
|
62
|
+
validateFrame,
|
|
63
|
+
validateStatement
|
|
64
|
+
], context, (validaets)=>{
|
|
65
|
+
if (!validaets) {
|
|
66
|
+
const containedAssertion = null;
|
|
67
|
+
continuation(containedAssertion);
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
const validatesWhenStated = this.validateWhenStated.bind(this), validatesWhenDerived = this.validateWhenDerived.bind(this);
|
|
71
|
+
(0, _continuation.exists)([
|
|
72
|
+
validatesWhenStated,
|
|
73
|
+
validatesWhenDerived
|
|
74
|
+
], context, (validates)=>{
|
|
75
|
+
let containedAssertion = null;
|
|
76
|
+
if (validates) {
|
|
77
|
+
const assertion = this; ///
|
|
78
|
+
containedAssertion = assertion; ///
|
|
79
|
+
context.addAssertion(assertion);
|
|
67
80
|
}
|
|
68
|
-
if (
|
|
69
|
-
|
|
81
|
+
if (validates) {
|
|
82
|
+
context.debug(`...validated the '${containedAssertionString}' contained assertion.`);
|
|
70
83
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
84
|
+
continuation(containedAssertion);
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
validateTerm(context, continuation) {
|
|
89
|
+
if (this.term === null) {
|
|
90
|
+
const termValidates = true; ///
|
|
91
|
+
continuation(termValidates);
|
|
92
|
+
return;
|
|
77
93
|
}
|
|
78
|
-
|
|
79
|
-
|
|
94
|
+
const termString = this.term.getString(), continaedAssertionString = this.getString(); ///
|
|
95
|
+
context.trace(`Validating the '${continaedAssertionString}' continaed assertion's term...`);
|
|
96
|
+
const termSingular = this.term.isSingular();
|
|
97
|
+
if (!termSingular) {
|
|
98
|
+
const termValidates = false;
|
|
99
|
+
context.debug(`The '${termString}' term is not singular.`);
|
|
100
|
+
continuation(termValidates);
|
|
101
|
+
return;
|
|
80
102
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
if (termSingular) {
|
|
90
|
-
const term = await this.term.validate(context, async (term, context)=>{
|
|
91
|
-
const validatesForwards = true;
|
|
92
|
-
return validatesForwards;
|
|
93
|
-
});
|
|
94
|
-
if (term !== null) {
|
|
95
|
-
this.term = term;
|
|
96
|
-
termValidates = true;
|
|
97
|
-
}
|
|
98
|
-
if (termValidates) {
|
|
99
|
-
context.debug(`...validated the '${containedAssertionString}' contained assertion's term.`);
|
|
100
|
-
}
|
|
101
|
-
} else {
|
|
102
|
-
context.debug(`The '${termString}' term is not singular.`);
|
|
103
|
+
this.term.validate(context, (term, context)=>{
|
|
104
|
+
let termValidates = false;
|
|
105
|
+
if (term !== null) {
|
|
106
|
+
this.term = term; ///
|
|
107
|
+
termValidates = true;
|
|
108
|
+
}
|
|
109
|
+
if (termValidates) {
|
|
110
|
+
context.debug(`...validates the'${continaedAssertionString}' continaed assertion's term.`);
|
|
103
111
|
}
|
|
112
|
+
continuation(termValidates);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
validateFrame(context, continuation) {
|
|
116
|
+
if (this.frame === null) {
|
|
117
|
+
const frameValidates = true; ///
|
|
118
|
+
continuation(frameValidates);
|
|
119
|
+
return;
|
|
104
120
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
} else {
|
|
120
|
-
context.debug(`The '${frameString}' frame is not singular.`);
|
|
121
|
+
const frameString = this.frame.getString(), continaedAssertionString = this.getString(); ///
|
|
122
|
+
context.trace(`Validating the'${continaedAssertionString}' continaed assertion's '${frameString}' frame...`);
|
|
123
|
+
const frameSingular = this.frame.isSingular();
|
|
124
|
+
if (!frameSingular) {
|
|
125
|
+
const frameValidates = false;
|
|
126
|
+
context.debug(`The '${frameString}' frame is not singular.`);
|
|
127
|
+
continuation(frameValidates);
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
this.frame.validate(context, (frame)=>{
|
|
131
|
+
let frameValidates = false;
|
|
132
|
+
if (frame !== null) {
|
|
133
|
+
this.frame = frame;
|
|
134
|
+
frameValidates = true;
|
|
121
135
|
}
|
|
122
136
|
if (frameValidates) {
|
|
123
|
-
context.debug(`...
|
|
137
|
+
context.debug(`...validates the'${continaedAssertionString}' continaed assertion's '${frameString}' frame.`);
|
|
124
138
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
const statement = await this.statement.validate(context);
|
|
139
|
+
continuation(frameValidates);
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
validateStatement(context, continuation) {
|
|
143
|
+
const statementString = this.statement.getString();
|
|
144
|
+
context.trace(`Validating the '${statementString}' statement...`);
|
|
145
|
+
this.statement.validate(context, (statement)=>{
|
|
146
|
+
let statementValidates = false;
|
|
134
147
|
if (statement !== null) {
|
|
135
148
|
statementValidates = true;
|
|
136
149
|
}
|
|
137
150
|
if (statementValidates) {
|
|
138
151
|
context.debug(`...validated the '${statementString}' statement.`);
|
|
139
152
|
}
|
|
153
|
+
continuation(statementValidates);
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
validateWhenStated(context, continuation) {
|
|
157
|
+
const stated = context.isStated();
|
|
158
|
+
if (!stated) {
|
|
159
|
+
const validatesWhenStated = false;
|
|
160
|
+
continuation(validatesWhenStated);
|
|
161
|
+
return;
|
|
140
162
|
}
|
|
141
|
-
return statementValidates;
|
|
142
|
-
}
|
|
143
|
-
validateWhenStated(context) {
|
|
144
163
|
let validatesWhenStated;
|
|
145
164
|
const containedAssertionString = this.getString(); ///
|
|
146
165
|
context.trace(`Validating the '${containedAssertionString}' stated contained assertion...`);
|
|
@@ -148,19 +167,25 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
|
|
|
148
167
|
if (validatesWhenStated) {
|
|
149
168
|
context.debug(`...validated the '${containedAssertionString}' stated contained assertion.`);
|
|
150
169
|
}
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
validateWhenDerived(context) {
|
|
154
|
-
|
|
170
|
+
continuation(validatesWhenStated);
|
|
171
|
+
}
|
|
172
|
+
validateWhenDerived(context, continuation) {
|
|
173
|
+
const stated = context.isStated();
|
|
174
|
+
if (stated) {
|
|
175
|
+
const validatesWhenDerived = false;
|
|
176
|
+
continuation(validatesWhenDerived);
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
155
179
|
const containedAssertionString = this.getString(); ///
|
|
156
180
|
context.trace(`Validating the '${containedAssertionString}' derived contained assertion...`);
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
181
|
+
validateWhenDerived(this.term, this.frame, this.statement, this.negated, context, (validatesWhenDerived)=>{
|
|
182
|
+
if (validatesWhenDerived) {
|
|
183
|
+
context.debug(`...validated the '${containedAssertionString}' derived contained assertion.`);
|
|
184
|
+
}
|
|
185
|
+
continuation(validatesWhenDerived);
|
|
186
|
+
});
|
|
162
187
|
}
|
|
163
|
-
unifyIndependently(generalContext, specificContext) {
|
|
188
|
+
unifyIndependently(generalContext, specificContext, continuation) {
|
|
164
189
|
let unifiesIndependently = false;
|
|
165
190
|
const context = specificContext, containedAssertionString = this.getString(); ///
|
|
166
191
|
context.trace(`Unifying the '${containedAssertionString}' contained assertion independently...`);
|
|
@@ -191,7 +216,7 @@ const _default = (0, _elements.define)(class ContainedAssertion extends _asserti
|
|
|
191
216
|
return containedAssertion;
|
|
192
217
|
}
|
|
193
218
|
});
|
|
194
|
-
function validateWhenDerived(term, frame, statement, negated, context) {
|
|
219
|
+
function validateWhenDerived(term, frame, statement, negated, context, continuation) {
|
|
195
220
|
let validatesWhenDerived = false;
|
|
196
221
|
if (statement !== null) {
|
|
197
222
|
if (term !== null) {
|
|
@@ -213,7 +238,7 @@ function validateWhenDerived(term, frame, statement, negated, context) {
|
|
|
213
238
|
}
|
|
214
239
|
}
|
|
215
240
|
}
|
|
216
|
-
|
|
241
|
+
continuation(validatesWhenDerived);
|
|
217
242
|
}
|
|
218
243
|
|
|
219
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZShjb250ZXh0KSB7XG4gICAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBhd2FpdCB0aGlzLnZhbGlkYXRlVGVybShjb250ZXh0KSxcbiAgICAgICAgICAgIGZyYW1lVmFsaWRhdGVzID0gYXdhaXQgdGhpcy52YWxpZGF0ZUZyYW1lKGNvbnRleHQpLFxuICAgICAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gYXdhaXQgdGhpcy52YWxpZGF0ZVN0YXRlbWVudChjb250ZXh0KVxuXG4gICAgICBpZiAodGVybVZhbGlkYXRlcyB8fCBmcmFtZVZhbGlkYXRlcyB8fCBzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3Qgc3RhdGVkID0gY29udGV4dC5pc1N0YXRlZCgpO1xuXG4gICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gZmFsc2UsXG4gICAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdGF0ZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuU3RhdGVkID0gdGhpcy52YWxpZGF0ZVdoZW5TdGF0ZWQoY29udGV4dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQoY29udGV4dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzV2hlblN0YXRlZCB8fCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICBjb25zdCBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBhc3NlcnRpb247ICAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGFpbmVkQXNzZXJ0aW9uO1xuICB9XG5cbiAgYXN5bmMgdmFsaWRhdGVUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMudGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uJ3MgdGVybS4uLmApO1xuXG4gICAgICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0aGlzLnRlcm0uaXNTaW5ndWxhcigpO1xuXG4gICAgICBpZiAodGVybVNpbmd1bGFyKSB7XG4gICAgICAgIGNvbnN0IHRlcm0gPSBhd2FpdCB0aGlzLnRlcm0udmFsaWRhdGUoY29udGV4dCwgYXN5bmMgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzRm9yd2FyZHM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgdGhpcy50ZXJtID0gdGVybTtcblxuICAgICAgICAgIHRlcm1WYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dGVybVN0cmluZ30nIHRlcm0gaXMgbm90IHNpbmd1bGFyLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtVmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVGcmFtZShjb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5mcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVTdHJpbmcgPSB0aGlzLmZyYW1lLmdldFN0cmluZygpLFxuICAgICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24ncyBmcmFtZS4uLmApO1xuXG4gICAgICBjb25zdCBmcmFtZVNpbmd1bGFyID0gdGhpcy5mcmFtZS5pc1Npbmd1bGFyKCk7XG5cbiAgICAgIGlmIChmcmFtZVNpbmd1bGFyKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gdGhpcy5mcmFtZS52YWxpZGF0ZShjb250ZXh0KTtcblxuICAgICAgICBpZiAoZnJhbWUgIT09IG51bGwpIHtcbiAgICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgICBmcmFtZVZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHtmcmFtZVN0cmluZ30nIGZyYW1lIGlzIG5vdCBzaW5ndWxhci5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZyYW1lVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbidzIGZyYW1lLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmcmFtZVZhbGlkYXRlcztcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlU3RhdGVtZW50KGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHRoaXMuc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gYXdhaXQgdGhpcy5zdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudC5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VmFsaWRhdGVzO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuU3RhdGVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlc1doZW5TdGF0ZWQ7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKGNvbnRleHQpIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG5cbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy5mcmFtZSwgdGhpcy5zdGF0ZW1lbnQsIHRoaXMubmVnYXRlZCwgY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRhdGVzV2hlbkRlcml2ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgZGVyaXZlZCBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5Li4uYCk7XG5cbiAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyh0aGlzLnRlcm0sIGNvbnRleHQpLFxuICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zKHRoaXMuZnJhbWUsIGNvbnRleHQpLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zKHRoaXMuc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIHN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0KTtcblxuICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgdW5pZmllc0luZGVwZW5kZW50bHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh1bmlmaWVzSW5kZXBlbmRlbnRseSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgY29udGFpbmVkIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzSW5kZXBlbmRlbnRseTtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJDb250YWluZWRBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCBjb250YWluZWRBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbk5vZGUgPSBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBmcmFtZSA9IGZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG5lZ2F0ZWQgPSBuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlKGNvbnRhaW5lZEFzc2VydGlvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IG5ldyBDb250YWluZWRBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCBmcmFtZSwgbmVnYXRlZCwgc3RhdGVtZW50KTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBjb250YWluZWRBc3NlcnRpb247XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIGZyYW1lLCBzdGF0ZW1lbnQsIG5lZ2F0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtQ29udGFpbmVkID0gc3RhdGVtZW50LmlzVGVybUNvbnRhaW5lZCh0ZXJtLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFuZWdhdGVkICYmIHRlcm1Db250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAobmVnYXRlZCAmJiAhdGVybUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc0ZyYW1lQ29udGFpbmVkKGZyYW1lLCBjb250ZXh0KTtcblxuICAgICAgaWYgKCFuZWdhdGVkICYmIGZyYW1lQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZWQgJiYgIWZyYW1lQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG59Il0sIm5hbWVzIjpbImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJDb250YWluZWRBc3NlcnRpb24iLCJBc3NlcnRpb24iLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJ0ZXJtIiwiZnJhbWUiLCJuZWdhdGVkIiwic3RhdGVtZW50IiwiZ2V0VGVybSIsImdldEZyYW1lIiwiaXNOZWdhdGVkIiwiZ2V0U3RhdGVtZW50IiwiZ2V0Q29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImdldE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Ob2RlIiwidmFsaWRhdGUiLCJjb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInZhbGlkYXRlcyIsInZhbGlkQXNzZXJ0aW9uIiwiZmluZFZhbGlkQXNzZXJ0aW9uIiwiZGVidWciLCJ0ZXJtVmFsaWRhdGVzIiwidmFsaWRhdGVUZXJtIiwiZnJhbWVWYWxpZGF0ZXMiLCJ2YWxpZGF0ZUZyYW1lIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInZhbGlkYXRlc1doZW5TdGF0ZWQiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlblN0YXRlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJhc3NlcnRpb24iLCJhZGRBc3NlcnRpb24iLCJ0ZXJtU3RyaW5nIiwidGVybVNpbmd1bGFyIiwiaXNTaW5ndWxhciIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZnJhbWVTdHJpbmciLCJmcmFtZVNpbmd1bGFyIiwic3RhdGVtZW50U3RyaW5nIiwidW5pZnlJbmRlcGVuZGVudGx5IiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ1bmlmaWVzSW5kZXBlbmRlbnRseSIsInRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnMiLCJmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50QW5kU3Vic3RpdHV0aW9ucyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iLCJpbnN0YW50aWF0ZSIsImluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uIiwidGVybUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsIm5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsInN0YXRlbWVudEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSIsInRlcm1Db250YWluZWQiLCJpc1Rlcm1Db250YWluZWQiLCJmcmFtZUNvbnRhaW5lZCIsImlzRnJhbWVDb250YWluZWQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OztnQ0FoQm9DO2tFQUVkOzBCQUVDO3lCQUNLOzZCQUNrQjsrQkFDdUU7eUJBS2pFOzs7Ozs7QUFFcEQsTUFBTSxFQUFFQSxrQkFBa0IsRUFBRSxH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
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi9jb250YWluZWQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGJyZWFrUG9pbnRVdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBhbGwsIGV4aXN0cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiB9IGZyb20gXCIuLi8uLi9wcm9jZXNzL2luc3RhbnRpYXRlXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zLCBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnMsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnRBbmRTdWJzdGl0dXRpb25zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdWJzdGl0dXRpb25zXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBmcmFtZUZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgbmVnYXRlZEZyb21Db250YWluZWRBc3NlcnRpb25Ob2RlLFxuICAgICAgICAgc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUsXG4gICAgICAgICBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuXG5jb25zdCB7IGJyZWFrUG9pbnRGcm9tSlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIENvbnRhaW5lZEFzc2VydGlvbiBleHRlbmRzIEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgZnJhbWUsIG5lZ2F0ZWQsIHN0YXRlbWVudCkge1xuICAgIHN1cGVyKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCk7XG5cbiAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm5lZ2F0ZWQgPSBuZWdhdGVkO1xuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBpc05lZ2F0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMubmVnYXRlZDtcbiAgfVxuXG4gIGdldFN0YXRlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZW1lbnQ7XG4gIH1cblxuICBnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25Ob2RlID0gbm9kZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbk5vZGU7XG4gIH1cblxuICB2YWxpZGF0ZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHZhbGlkQXNzZXJ0aW9uID0gdGhpcy5maW5kVmFsaWRBc3NlcnRpb24oY29udGV4dCk7XG5cbiAgICBpZiAodmFsaWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvbiA9IHZhbGlkQXNzZXJ0aW9uOyAgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGlzIGFscmVhZHkgdmFsaWQuYCk7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihjb250YWluZWRBc3NlcnRpb24pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVUZXJtID0gdGhpcy52YWxpZGF0ZVRlcm0uYmluZCh0aGlzKSxcbiAgICAgICAgICB2YWxpZGF0ZUZyYW1lID0gdGhpcy52YWxpZGF0ZUZyYW1lLmJpbmQodGhpcyksXG4gICAgICAgICAgdmFsaWRhdGVTdGF0ZW1lbnQgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50LmJpbmQodGhpcyk7XG5cbiAgICBhbGwoW1xuICAgICAgdmFsaWRhdGVUZXJtLFxuICAgICAgdmFsaWRhdGVGcmFtZSxcbiAgICAgIHZhbGlkYXRlU3RhdGVtZW50XG4gICAgXSwgY29udGV4dCwgKHZhbGlkYWV0cykgPT4ge1xuICAgICAgaWYgKCF2YWxpZGFldHMpIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgICAgICBjb250aW51YXRpb24oY29udGFpbmVkQXNzZXJ0aW9uKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0aGlzLnZhbGlkYXRlV2hlblN0YXRlZC5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlcml2ZWQuYmluZCh0aGlzKTtcblxuICAgICAgZXhpc3RzKFtcbiAgICAgICAgdmFsaWRhdGVzV2hlblN0YXRlZCxcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWRcbiAgICAgIF0sIGNvbnRleHQsICh2YWxpZGF0ZXMpID0+IHtcbiAgICAgICAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgICAgICAgaWYgKHZhbGlkYXRlcykge1xuICAgICAgICAgIGNvbnN0IGFzc2VydGlvbiA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICAgIGNvbnRleHQuYWRkQXNzZXJ0aW9uKGFzc2VydGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWF0aW9uKGNvbnRhaW5lZEFzc2VydGlvbik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlVGVybShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBpZiAodGhpcy50ZXJtID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtVmFsaWRhdGVzID0gdHJ1ZTsgLy8vXG5cbiAgICAgIGNvbnRpbnVhdGlvbih0ZXJtVmFsaWRhdGVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHRlcm1TdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIGNvbnRpbmFlZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke2NvbnRpbmFlZEFzc2VydGlvblN0cmluZ30nIGNvbnRpbmFlZCBhc3NlcnRpb24ncyB0ZXJtLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtU2luZ3VsYXIgPSB0aGlzLnRlcm0uaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCF0ZXJtU2luZ3VsYXIpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGlzIG5vdCBzaW5ndWxhci5gKTtcblxuICAgICAgY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy50ZXJtLnZhbGlkYXRlKGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgdGVybVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtOyAvLy9cblxuICAgICAgICB0ZXJtVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRlcm1WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2NvbnRpbmFlZEFzc2VydGlvblN0cmluZ30nIGNvbnRpbmFlZCBhc3NlcnRpb24ncyB0ZXJtLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24odGVybVZhbGlkYXRlcyk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZUZyYW1lKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGlmICh0aGlzLmZyYW1lID09PSBudWxsKSB7XG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IHRydWU7ICAvLy9cblxuICAgICAgY29udGludWF0aW9uKGZyYW1lVmFsaWRhdGVzKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5mcmFtZS5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgY29udGluYWVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUnJHtjb250aW5hZWRBc3NlcnRpb25TdHJpbmd9JyBjb250aW5hZWQgYXNzZXJ0aW9uJ3MgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZS4uLmApO1xuXG4gICAgY29uc3QgZnJhbWVTaW5ndWxhciA9IHRoaXMuZnJhbWUuaXNTaW5ndWxhcigpO1xuXG4gICAgaWYgKCFmcmFtZVNpbmd1bGFyKSB7XG4gICAgICBjb25zdCBmcmFtZVZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZnJhbWVTdHJpbmd9JyBmcmFtZSBpcyBub3Qgc2luZ3VsYXIuYCk7XG5cbiAgICAgIGNvbnRpbnVhdGlvbihmcmFtZVZhbGlkYXRlcyk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgbGV0IGZyYW1lVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmZyYW1lID0gZnJhbWU7XG5cbiAgICAgICAgZnJhbWVWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZnJhbWVWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVzIHRoZScke2NvbnRpbmFlZEFzc2VydGlvblN0cmluZ30nIGNvbnRpbmFlZCBhc3NlcnRpb24ncyAnJHtmcmFtZVN0cmluZ30nIGZyYW1lLmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24oZnJhbWVWYWxpZGF0ZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVTdGF0ZW1lbnQoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gdGhpcy5zdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQuLi5gKTtcblxuICAgIHRoaXMuc3RhdGVtZW50LnZhbGlkYXRlKGNvbnRleHQsIChzdGF0ZW1lbnQpID0+IHtcbiAgICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50LmApO1xuICAgICAgfVxuXG4gICAgICBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhbGlkYXRlV2hlblN0YXRlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoIXN0YXRlZCkge1xuICAgICAgY29uc3QgdmFsaWRhdGVzV2hlblN0YXRlZCA9IGZhbHNlO1xuXG4gICAgICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlblN0YXRlZCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdGVzV2hlblN0YXRlZDtcblxuICAgIGNvbnN0IGNvbnRhaW5lZEFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlc1doZW5TdGF0ZWQgPSB0cnVlO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5TdGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7Y29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nfScgc3RhdGVkIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5TdGF0ZWQpO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzdGF0ZWQgPSBjb250ZXh0LmlzU3RhdGVkKCk7XG5cbiAgICBpZiAoc3RhdGVkKSB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gICAgICBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVkQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQodGhpcy50ZXJtLCB0aGlzLmZyYW1lLCB0aGlzLnN0YXRlbWVudCwgdGhpcy5uZWdhdGVkLCBjb250ZXh0LCAodmFsaWRhdGVzV2hlbkRlcml2ZWQpID0+IHtcbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke2NvbnRhaW5lZEFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgY29udGFpbmVkIGFzc2VydGlvbi5gKTtcbiAgICAgIH1cblxuICAgICAgY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICBjb250YWluZWRBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCksXG4gICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZUFuZFN1YnN0aXR1dGlvbnModGhpcy5mcmFtZSwgY29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnModGhpcy5zdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCBmcmFtZSwgc3RhdGVtZW50LCB0aGlzLm5lZ2F0ZWQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtjb250YWluZWRBc3NlcnRpb25TdHJpbmd9JyBjb250YWluZWQgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNJbmRlcGVuZGVudGx5O1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkNvbnRhaW5lZEFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCB7IG5hbWUgfSA9IGpzb247XG5cbiAgICBpZiAodGhpcy5uYW1lID09PSBuYW1lKSB7XG4gICAgICBpbnN0YW50aWF0ZSgoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCB7IHN0cmluZyB9ID0ganNvbixcbiAgICAgICAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlQ29udGFpbmVkQXNzZXJ0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSBjb250YWluZWRBc3NlcnRpb25Ob2RlLCAgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbmVnYXRlZCA9IG5lZ2F0ZWRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZShjb250YWluZWRBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUoY29udGFpbmVkQXNzZXJ0aW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gbmV3IENvbnRhaW5lZEFzc2VydGlvbihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIGZyYW1lLCBuZWdhdGVkLCBzdGF0ZW1lbnQpO1xuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGNvbnRhaW5lZEFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgZnJhbWUsIHN0YXRlbWVudCwgbmVnYXRlZCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IGZhbHNlO1xuXG4gIGlmIChzdGF0ZW1lbnQgIT09IG51bGwpIHtcbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybUNvbnRhaW5lZCA9IHN0YXRlbWVudC5pc1Rlcm1Db250YWluZWQodGVybSwgY29udGV4dCk7XG5cbiAgICAgIGlmICghbmVnYXRlZCAmJiB0ZXJtQ29udGFpbmVkKSB7XG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5lZ2F0ZWQgJiYgIXRlcm1Db250YWluZWQpIHtcbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZnJhbWVDb250YWluZWQgPSBzdGF0ZW1lbnQuaXNGcmFtZUNvbnRhaW5lZChmcmFtZSwgY29udGV4dCk7XG5cbiAgICAgIGlmICghbmVnYXRlZCAmJiBmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWdhdGVkICYmICFmcmFtZUNvbnRhaW5lZCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZXJpdmVkKTtcbn0iXSwibmFtZXMiOlsiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIkNvbnRhaW5lZEFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJmcmFtZSIsIm5lZ2F0ZWQiLCJzdGF0ZW1lbnQiLCJnZXRUZXJtIiwiZ2V0RnJhbWUiLCJpc05lZ2F0ZWQiLCJnZXRTdGF0ZW1lbnQiLCJnZXRDb250YWluZWRBc3NlcnRpb25Ob2RlIiwiZ2V0Tm9kZSIsImNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImNvbnRhaW5lZEFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRBc3NlcnRpb24iLCJmaW5kVmFsaWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJkZWJ1ZyIsInZhbGlkYXRlVGVybSIsImJpbmQiLCJ2YWxpZGF0ZUZyYW1lIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJhbGwiLCJ2YWxpZGFldHMiLCJ2YWxpZGF0ZXNXaGVuU3RhdGVkIiwidmFsaWRhdGVXaGVuU3RhdGVkIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZXhpc3RzIiwidmFsaWRhdGVzIiwiYXNzZXJ0aW9uIiwiYWRkQXNzZXJ0aW9uIiwidGVybVZhbGlkYXRlcyIsInRlcm1TdHJpbmciLCJjb250aW5hZWRBc3NlcnRpb25TdHJpbmciLCJ0ZXJtU2luZ3VsYXIiLCJpc1Npbmd1bGFyIiwiZnJhbWVWYWxpZGF0ZXMiLCJmcmFtZVN0cmluZyIsImZyYW1lU2luZ3VsYXIiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdGF0ZW1lbnRWYWxpZGF0ZXMiLCJzdGF0ZWQiLCJpc1N0YXRlZCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZnJhbWVGcm9tRnJhbWVBbmRTdWJzdGl0dXRpb25zIiwic3RhdGVtZW50RnJvbVN0YXRlbWVudEFuZFN1YnN0aXR1dGlvbnMiLCJuYW1lIiwiZnJvbUpTT04iLCJqc29uIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZUNvbnRhaW5lZEFzc2VydGlvbiIsInRlcm1Gcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyYW1lRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJuZWdhdGVkRnJvbUNvbnRhaW5lZEFzc2VydGlvbk5vZGUiLCJzdGF0ZW1lbnRGcm9tQ29udGFpbmVkQXNzZXJ0aW9uTm9kZSIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtQ29udGFpbmVkIiwiaXNUZXJtQ29udGFpbmVkIiwiZnJhbWVDb250YWluZWQiLCJpc0ZyYW1lQ29udGFpbmVkIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFtQkE7OztlQUFBOzs7Z0NBakJvQztrRUFFZDswQkFFQzt5QkFDSzs4QkFDQTs2QkFDa0I7K0JBQ3VFO3lCQUtqRTs7Ozs7O0FBRXBELE1BQU0sRUFBRUEsa0JBQWtCLEVBQUUsR0FBR0MsbUNBQW1CO01BRWxELFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsMkJBQTJCQyxrQkFBUztJ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
|