occam-nominal 1.0.468 → 1.0.471
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/type.js +49 -78
- package/lib/element/claim/axiom.js +21 -30
- package/lib/element/claim.js +35 -48
- package/lib/element/combinator/bracketed.js +5 -11
- package/lib/element/combinator.js +9 -11
- package/lib/element/declaration/constructor.js +17 -23
- package/lib/element/declaration/type.js +41 -43
- package/lib/element/fact/supposition.js +16 -28
- package/lib/element/fact.js +20 -38
- package/lib/element/label.js +23 -46
- package/lib/element/metavariable.js +46 -63
- package/lib/element/statement.js +10 -15
- package/lib/element/term.js +21 -38
- package/lib/element/type.js +6 -1
- package/lib/element/variable.js +6 -10
- package/lib/process/unify.js +60 -159
- package/lib/process/validation.js +107 -227
- package/package.json +3 -3
- package/src/element/assertion/type.js +59 -87
- package/src/element/claim/axiom.js +18 -30
- package/src/element/claim.js +30 -44
- package/src/element/combinator/bracketed.js +4 -12
- package/src/element/combinator.js +8 -10
- package/src/element/declaration/constructor.js +17 -23
- package/src/element/declaration/type.js +53 -51
- package/src/element/fact/supposition.js +15 -31
- package/src/element/fact.js +19 -43
- package/src/element/label.js +22 -52
- package/src/element/metavariable.js +49 -71
- package/src/element/statement.js +9 -15
- package/src/element/term.js +21 -45
- package/src/element/type.js +6 -0
- package/src/element/variable.js +5 -11
- package/src/process/unify.js +59 -203
- package/src/process/validation.js +111 -294
|
@@ -60,7 +60,7 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
60
60
|
}
|
|
61
61
|
return discharges;
|
|
62
62
|
}
|
|
63
|
-
validate(state, context,
|
|
63
|
+
validate(state, context, back, forward) {
|
|
64
64
|
let assertion;
|
|
65
65
|
const typeAssertionString = this.getString(); ///
|
|
66
66
|
context.trace(`Validating the '${typeAssertionString}' type assertion...`);
|
|
@@ -68,111 +68,82 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
68
68
|
if (assertion !== null) {
|
|
69
69
|
const typeAssertion = assertion; ///
|
|
70
70
|
context.debug(`The '${typeAssertionString}' type assertion is already present.`);
|
|
71
|
-
return
|
|
71
|
+
return forward(typeAssertion, context);
|
|
72
72
|
}
|
|
73
73
|
const validateType = this.validateType.bind(this);
|
|
74
74
|
return all([
|
|
75
75
|
validateType
|
|
76
|
-
], state, context,
|
|
77
|
-
if (!validates) {
|
|
78
|
-
const typeAssertion = assertion; ///
|
|
79
|
-
return continuation(typeAssertion, context);
|
|
80
|
-
}
|
|
76
|
+
], state, context, back, (state, context)=>{
|
|
81
77
|
const validateWhenDeclared = this.validateWhenDeclared.bind(this), validateWhenDerived = this.validateWhenDerived.bind(this);
|
|
82
78
|
return exists([
|
|
83
79
|
validateWhenDeclared,
|
|
84
80
|
validateWhenDerived
|
|
85
|
-
], state, context,
|
|
86
|
-
if (!validates) {
|
|
87
|
-
const typeAssertion = assertion; ///
|
|
88
|
-
return continuation(typeAssertion, context);
|
|
89
|
-
}
|
|
81
|
+
], state, context, back, (state, context)=>{
|
|
90
82
|
assertion = this; ///
|
|
91
83
|
context.addAssertion(assertion);
|
|
92
84
|
const typeAssertion = assertion; ///
|
|
93
85
|
context.debug(`...validated the '${typeAssertionString}' type assertion.`);
|
|
94
|
-
return
|
|
86
|
+
return forward(typeAssertion, context);
|
|
95
87
|
});
|
|
96
88
|
});
|
|
97
89
|
}
|
|
98
|
-
validateType(state, context,
|
|
99
|
-
let typeValidates = false;
|
|
90
|
+
validateType(state, context, back, forward) {
|
|
100
91
|
const typeAssertionString = this.getString(); ///
|
|
101
92
|
context.trace(`Validating the '${typeAssertionString}' type assertion's type...`);
|
|
102
93
|
const nominalTypeName = this.type.getNominalTypeName(), type = context.findTypeByNominalTypeName(nominalTypeName);
|
|
103
|
-
if (type
|
|
104
|
-
this.type = type;
|
|
105
|
-
typeValidates = true;
|
|
106
|
-
} else {
|
|
94
|
+
if (type === null) {
|
|
107
95
|
const typeString = this.type.getString();
|
|
108
96
|
context.debug(`The '${typeString}' type is not present.`);
|
|
97
|
+
return back();
|
|
109
98
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return continuation(typeValidates, state, context);
|
|
99
|
+
this.type = type;
|
|
100
|
+
context.debug(`...validated the '${typeAssertionString}' type assertion's type.`);
|
|
101
|
+
return forward(state, context);
|
|
114
102
|
}
|
|
115
|
-
validateWhenDeclared(state, context,
|
|
116
|
-
let validatesWhenDeclared = false;
|
|
103
|
+
validateWhenDeclared(state, context, back, forward) {
|
|
117
104
|
const declared = (0, _state.isDeclared)(state);
|
|
118
105
|
if (!declared) {
|
|
119
|
-
return
|
|
106
|
+
return back();
|
|
120
107
|
}
|
|
121
108
|
const typeAssertionString = this.getString(); ///
|
|
122
109
|
context.trace(`Validating the '${typeAssertionString}' declared type assertion...`);
|
|
123
|
-
return this.term.validate(state, context, (term, context)=>{
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
// if (validates) {
|
|
145
|
-
// validatesWhenDeclared = true;
|
|
146
|
-
// }
|
|
147
|
-
//
|
|
148
|
-
// if (validatesWhenDeclared) {
|
|
149
|
-
// this.term = term;
|
|
150
|
-
//
|
|
151
|
-
// context.debug(`...validated the '${typeAssertionString}' declared type assertion.`);
|
|
152
|
-
// }
|
|
153
|
-
return continuation(validatesWhenDeclared, state, context);
|
|
110
|
+
return this.term.validate(state, context, back, (term, context, back)=>{
|
|
111
|
+
let validatesWhenDeclared = false;
|
|
112
|
+
if (term !== null) {
|
|
113
|
+
const termType = term.getType(), termTypeEqualToType = termType.isEqualTo(this.type), termTypeSuperTypeOfType = termType.isSuperTypeOf(this.type);
|
|
114
|
+
if (false) {
|
|
115
|
+
///
|
|
116
|
+
} else if (termTypeEqualToType) {
|
|
117
|
+
validatesWhenDeclared = true;
|
|
118
|
+
} else if (termTypeSuperTypeOfType) {
|
|
119
|
+
const termEstablished = term.isEstablished();
|
|
120
|
+
if (termEstablished) {
|
|
121
|
+
validatesWhenDeclared = true;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (!validatesWhenDeclared) {
|
|
126
|
+
return back();
|
|
127
|
+
}
|
|
128
|
+
this.term = term;
|
|
129
|
+
context.debug(`...validated the '${typeAssertionString}' declared type assertion.`);
|
|
130
|
+
return forward(state, context);
|
|
154
131
|
});
|
|
155
132
|
}
|
|
156
|
-
validateWhenDerived(state, context,
|
|
157
|
-
let validatesWhenDerived = false;
|
|
133
|
+
validateWhenDerived(state, context, back, forward) {
|
|
158
134
|
const derived = (0, _state.isDerived)(state);
|
|
159
135
|
if (!derived) {
|
|
160
|
-
return
|
|
136
|
+
return back();
|
|
161
137
|
}
|
|
162
138
|
const typeAssertionString = this.getString(); ///
|
|
163
139
|
context.trace(`Validating the '${typeAssertionString}' derived type assertion...`);
|
|
164
|
-
return validateWhenDerived(this.term, this.type, state, context, (term, context)=>{
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
if (validatesWhenDerived) {
|
|
169
|
-
this.term = term;
|
|
170
|
-
context.debug(`...validated the '${typeAssertionString}' derived type assertion.`);
|
|
171
|
-
}
|
|
172
|
-
return continuation(validatesWhenDerived, state, context);
|
|
140
|
+
return validateWhenDerived(this.term, this.type, state, context, back, (term, context)=>{
|
|
141
|
+
this.term = term;
|
|
142
|
+
context.debug(`...validated the '${typeAssertionString}' derived type assertion.`);
|
|
143
|
+
return forward(state, context);
|
|
173
144
|
});
|
|
174
145
|
}
|
|
175
|
-
unifyIndependently(generalContext, specificContext,
|
|
146
|
+
unifyIndependently(generalContext, specificContext, back, forward) {
|
|
176
147
|
let unifiesIndependently = false;
|
|
177
148
|
const context = specificContext, typeAssertionString = this.getString(); ///
|
|
178
149
|
context.trace(`Unifying the '${typeAssertionString}' type assertion independently...`);
|
|
@@ -230,23 +201,23 @@ const _default = (0, _elements.define)(class TypeAssertion extends _assertion.de
|
|
|
230
201
|
return typeAssertion;
|
|
231
202
|
}
|
|
232
203
|
});
|
|
233
|
-
function validateWhenDerived(term, type, state, context,
|
|
234
|
-
return term.validate(state, context, (term, context)=>{
|
|
235
|
-
let
|
|
204
|
+
function validateWhenDerived(term, type, state, context, back, forward) {
|
|
205
|
+
return term.validate(state, context, back, (term, context)=>{
|
|
206
|
+
let validatesWhenDerived = false;
|
|
236
207
|
if (term !== null) {
|
|
237
208
|
const termType = term.getType(), termTypeEqualToOrSubTypeOfType = termType.isEqualToOrSubTypeOf(type);
|
|
238
209
|
if (termTypeEqualToOrSubTypeOfType) {
|
|
239
210
|
const termEstablished = term.isEstablished();
|
|
240
211
|
if (termEstablished) {
|
|
241
|
-
|
|
212
|
+
validatesWhenDerived = true;
|
|
242
213
|
}
|
|
243
214
|
}
|
|
244
215
|
}
|
|
245
|
-
if (!
|
|
246
|
-
|
|
216
|
+
if (!validatesWhenDerived) {
|
|
217
|
+
return back();
|
|
247
218
|
}
|
|
248
|
-
return
|
|
219
|
+
return forward(term, context);
|
|
249
220
|
});
|
|
250
221
|
}
|
|
251
222
|
|
|
252
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcbmltcG9ydCB7IGRlcml2ZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkLCBpc1RyYW5zaWVudH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYWxsLCBleGlzdHMgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZGlzY2hhcmdlKGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGRpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY2hhcmdlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgYXNzZXJ0aW9uO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gICAgYXNzZXJ0aW9uID0gdGhpcy5maW5kQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgaWYgKGFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgIGNvbnRleHQuZGVidWcoYFRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24gaXMgYWxyZWFkeSBwcmVzZW50LmApO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbGlkYXRlVHlwZSA9IHRoaXMudmFsaWRhdGVUeXBlLmJpbmQodGhpcyk7XG5cbiAgICByZXR1cm4gYWxsKFtcbiAgICAgIHZhbGlkYXRlVHlwZVxuICAgIF0sIHN0YXRlLCBjb250ZXh0LCAodmFsaWRhdGVzLCBzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgaWYgKCF2YWxpZGF0ZXMpIHtcbiAgICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlQXNzZXJ0aW9uLCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsICh2YWxpZGF0ZXMsIHN0YXRlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGlmICghdmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IGFzc2VydGlvbjsgLy8vXG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXNzZXJ0aW9uID0gdGhpczsgLy8vXG5cbiAgICAgICAgY29udGV4dC5hZGRBc3NlcnRpb24oYXNzZXJ0aW9uKTtcblxuICAgICAgICBjb25zdCB0eXBlQXNzZXJ0aW9uID0gYXNzZXJ0aW9uOyAvLy9cblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVR5cGUoc3RhdGUsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGxldCB0eXBlVmFsaWRhdGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlICE9PSBudWxsKSB7XG4gICAgICB0aGlzLnR5cGUgPSB0eXBlO1xuXG4gICAgICB0eXBlVmFsaWRhdGVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdHlwZVN0cmluZyA9IHRoaXMudHlwZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3R5cGVTdHJpbmd9JyB0eXBlIGlzIG5vdCBwcmVzZW50LmApO1xuICAgIH1cblxuICAgIGlmICh0eXBlVmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbidzIHR5cGUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0eXBlVmFsaWRhdGVzLCBzdGF0ZSwgY29udGV4dClcbiAgfVxuXG4gIHZhbGlkYXRlV2hlbkRlY2xhcmVkKHN0YXRlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZWNsYXJlZCkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVjbGFyZWQsIHN0YXRlLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAvLyBsZXQgdmFsaWRhdGVzID0gZmFsc2U7XG4gICAgICAvL1xuICAgICAgLy8gaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgIC8vICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgIC8vICAgICAgICAgdGVybVR5cGVFcXVhbFRvVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUbyh0aGlzLnR5cGUpLFxuICAgICAgLy8gICAgICAgICB0ZXJtVHlwZVN1cGVyVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzU3VwZXJUeXBlT2YodGhpcy50eXBlKTtcbiAgICAgIC8vXG4gICAgICAvLyAgIGlmIChmYWxzZSkge1xuICAgICAgLy8gICAgIC8vL1xuICAgICAgLy8gICB9IGVsc2UgaWYgKHRlcm1UeXBlRXF1YWxUb1R5cGUpIHtcbiAgICAgIC8vICAgICB2YWxpZGF0ZXMgPSB0cnVlO1xuICAgICAgLy8gICB9IGVsc2UgaWYgKHRlcm1UeXBlU3VwZXJUeXBlT2ZUeXBlKSB7XG4gICAgICAvLyAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG4gICAgICAvL1xuICAgICAgLy8gICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgIC8vICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAvLyAgICAgfVxuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG4gICAgICAvL1xuICAgICAgLy8gaWYgKHZhbGlkYXRlcykge1xuICAgICAgLy8gICB2YWxpZGF0ZXNXaGVuRGVjbGFyZWQgPSB0cnVlO1xuICAgICAgLy8gfVxuICAgICAgLy9cbiAgICAgIC8vIGlmICh2YWxpZGF0ZXNXaGVuRGVjbGFyZWQpIHtcbiAgICAgIC8vICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICAgIC8vXG4gICAgICAvLyAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgICAgLy8gfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1doZW5EZWNsYXJlZCwgc3RhdGUsIGNvbnRleHQpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVyaXZlZChzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBkZXJpdmVkID0gaXNEZXJpdmVkKHN0YXRlKTtcblxuICAgIGlmICghZGVyaXZlZCkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNXaGVuRGVyaXZlZCwgc3RhdGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyBkZXJpdmVkIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICByZXR1cm4gdmFsaWRhdGVXaGVuRGVyaXZlZCh0aGlzLnRlcm0sIHRoaXMudHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmICh2YWxpZGF0ZXNXaGVuRGVyaXZlZCkge1xuICAgICAgICB0aGlzLnRlcm0gPSB0ZXJtO1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzV2hlbkRlcml2ZWQsIHN0YXRlLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgdW5pZmllc0luZGVwZW5kZW50bHkgPSBmYWxzZTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsIC8vL1xuICAgICAgICAgIHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS4uLmApO1xuXG4gICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybUFuZFN1YnN0aXR1dGlvbnModGhpcy50ZXJtLCBjb250ZXh0KTtcblxuICAgIGRlcml2ZSgoc3RhdGUpID0+IHtcbiAgICAgIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgICAgIHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gdHJ1ZTtcblxuICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBpZiAodW5pZmllc0luZGVwZW5kZW50bHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbiBpbmRlcGVuZGVudGx5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odW5pZmllc0luZGVwZW5kZW50bHkpO1xuICB9XG5cbiAgYXNzaWduKHN0YXRlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSksXG4gICAgICAgICAgdHJhbnNpZW50ID0gaXNUcmFuc2llbnQoc3RhdGUpO1xuXG4gICAgaWYgKGRlcml2ZWQgfHwgdHJhbnNpZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvbiA9IHRoaXMsIC8vL1xuICAgICAgICAgIHZhcmlhYmxlQXNzaWdtZW50ID0gdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24odHlwZUFzc2VydGlvbiwgY29udGV4dCk7XG5cbiAgICBjb250ZXh0LmFkZEFzc2lnbm1lbnQodmFyaWFibGVBc3NpZ21lbnQpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IHR5cGVKU09OID0gdHlwZVRvVHlwZUpTT04odGhpcy50eXBlKSxcbiAgICAgICAgICBuYW1lID0gdGhpcy5nZXROYW1lKCksXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTtcblxuICAgIGxldCBicmVha1BvaW50O1xuXG4gICAgYnJlYWtQb2ludCA9IHRoaXMuZ2V0QnJlYWtQb2ludCgpO1xuXG4gICAgY29uc3QgYnJlYWtQb2ludEpTT04gPSBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTihicmVha1BvaW50KTtcblxuICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50SlNPTjsgIC8vL1xuXG4gICAgY29uc3QgdHlwZSA9IHR5cGVKU09OLFxuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIHR5cGVcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiVHlwZUFzc2VydGlvblwiO1xuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBjb250ZXh0KSB7XG4gICAgbGV0IHR5cGVBc3NlcnRpb24gPSBudWxsO1xuXG4gICAgY29uc3QgeyBuYW1lIH0gPSBqc29uO1xuXG4gICAgaWYgKHRoaXMubmFtZSA9PT0gbmFtZSkge1xuICAgICAgaW5zdGFudGlhdGUoKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgeyBzdHJpbmcgfSA9IGpzb24sXG4gICAgICAgICAgICAgIHR5cGVBc3NlcnRpb25Ob2RlID0gaW5zdGFudGlhdGVUeXBlQXNzZXJ0aW9uKHN0cmluZywgY29udGV4dCksXG4gICAgICAgICAgICAgIG5vZGUgPSB0eXBlQXNzZXJ0aW9uTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgICAgIHRlcm0gPSB0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlKHR5cGVBc3NlcnRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdHlwZSA9IHR5cGVGcm9tSlNPTihqc29uLCBjb250ZXh0KTtcblxuICAgICAgICBjb250ZXh0ID0gbnVsbDtcblxuICAgICAgICB0eXBlQXNzZXJ0aW9uID0gbmV3IFR5cGVBc3NlcnRpb24oY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCB0ZXJtLCB0eXBlKTtcbiAgICAgIH0sIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgICAgdHlwZUFzc2VydGlvbiA9IHR5cGVBc3NlcnRpb25Gcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiB0eXBlQXNzZXJ0aW9uO1xuICB9XG59KTtcblxuZnVuY3Rpb24gdmFsaWRhdGVXaGVuRGVyaXZlZCh0ZXJtLCB0eXBlLCBzdGF0ZSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIHJldHVybiB0ZXJtLnZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCAodGVybSwgY29udGV4dCkgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXMgPSBmYWxzZTtcblxuICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICBjb25zdCB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgIGlmICh0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZlR5cGUpIHtcbiAgICAgICAgY29uc3QgdGVybUVzdGFibGlzaGVkID0gdGVybS5pc0VzdGFibGlzaGVkKCk7XG5cbiAgICAgICAgaWYgKHRlcm1Fc3RhYmxpc2hlZCkge1xuICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlcykge1xuICAgICAgdGVybSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih0ZXJtLCBjb250ZXh0KTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiYWxsIiwiZXhpc3RzIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiYnJlYWtQb2ludEZyb21KU09OIiwiYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04iLCJicmVha1BvaW50VXRpbGl0aWVzIiwiZGVmaW5lIiwiVHlwZUFzc2VydGlvbiIsIkFzc2VydGlvbiIsImNvbnRleHQiLCJzdHJpbmciLCJub2RlIiwiYnJlYWtQb2ludCIsInRlcm0iLCJ0eXBlIiwiZ2V0VGVybSIsImdldFR5cGUiLCJnZXRUeXBlQXNzZXJ0aW9uTkJvZGUiLCJnZXROb2RlIiwidHlwZUFzc2VydGlvbk5vZGUiLCJkaXNjaGFyZ2UiLCJkaXNjaGFyZ2VzIiwidHlwZUFzc2VydGlvblN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyIsImRlcml2ZSIsInN0YXRlIiwidmFsaWRhdGVzV2hlbkRlcml2ZWQiLCJ2YWxpZGF0ZVdoZW5EZXJpdmVkIiwiZGVidWciLCJ2YWxpZGF0ZSIsImNvbnRpbnVhdGlvbiIsImFzc2VydGlvbiIsImZpbmRBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVUeXBlIiwiYmluZCIsInZhbGlkYXRlcyIsInZhbGlkYXRlV2hlbkRlY2xhcmVkIiwiYWRkQXNzZXJ0aW9uIiwidHlwZVZhbGlkYXRlcyIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwiZGVyaXZlZCIsImlzRGVyaXZlZCIsInVuaWZ5SW5kZXBlbmRlbnRseSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwidW5pZmllc0luZGVwZW5kZW50bHkiLCJhc3NpZ24iLCJ0cmFuc2llbnQiLCJpc1RyYW5zaWVudCIsInZhcmlhYmxlQXNzaWdtZW50IiwidmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24iLCJhZGRBc3NpZ25tZW50IiwidG9KU09OIiwidHlwZUpTT04iLCJ0eXBlVG9UeXBlSlNPTiIsIm5hbWUiLCJnZXROYW1lIiwiZ2V0QnJlYWtQb2ludCIsImJyZWFrUG9pbnRKU09OIiwianNvbiIsImZyb21KU09OIiwiaW5zdGFudGlhdGUiLCJpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24iLCJ0ZXJtRnJvbVR5cGVBc3NlcnRpb25Ob2RlIiwidHlwZUZyb21KU09OIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudCIsInN0YXRlbWVudE5vZGUiLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUiLCJ0ZXJtVHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwidGVybUVzdGFibGlzaGVkIiwiaXNFc3RhYmxpc2hlZCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBa0JBOzs7ZUFBQTs7O2dDQWhCMkQ7a0VBRXJDOzBCQUVDO3lCQUNLOzZCQUNhO3NCQUNJOytCQUNBO3dCQUNPO3VCQUNNO3lCQUNnQjs7Ozs7O0FBRTFFLE1BQU0sRUFBRUEsR0FBRyxFQUFFQyxNQUFNLEVBQUUsR0FBR0MscUNBQXFCLEVBQ3ZDLEVBQUVDLGtCQUFrQixFQUFFQywwQkFBMEIsRUFBRSxHQUFHQyxtQ0FBbUI7TUFFOUUsV0FBZUMsSUFBQUEsZ0JBQU0sRUFBQyxNQUFNQyxzQkFBc0JDLGtCQUFTO0lBQ3pELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsSUFBSSxFQUFFQyxJQUFJLENBQUU7UUFDekQsS0FBSyxDQUFDTCxTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLElBQUks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
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2Fzc2VydGlvbi90eXBlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBBc3NlcnRpb24gZnJvbSBcIi4uL2Fzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGluc3RhbnRpYXRlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBpbnN0YW50aWF0ZVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9pbnN0YW50aWF0ZVwiO1xuaW1wb3J0IHsgdHlwZUZyb21KU09OLCB0eXBlVG9UeXBlSlNPTiB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvanNvblwiO1xuaW1wb3J0IHsgdGVybUZyb21UZXJtQW5kU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IHsgdmFyaWFibGVBc3NpZ25tZW50RnJvbVR5cGVBc3NlcnRpb24gfSBmcm9tIFwiLi4vLi4vcHJvY2Vzcy9hc3NpZ25cIjtcbmltcG9ydCB7IGRlcml2ZSwgaXNEZXJpdmVkLCBpc0RlY2xhcmVkLCBpc1RyYW5zaWVudH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdGF0ZVwiO1xuaW1wb3J0IHsgdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSwgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgYWxsLCBleGlzdHMgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcyxcbiAgICAgIHsgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFR5cGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIHRlcm0sIHR5cGUpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgICB0aGlzLnR5cGUgPSB0eXBlO1xuICB9XG5cbiAgZ2V0VGVybSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJtO1xuICB9XG5cbiAgZ2V0VHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlO1xuICB9XG5cbiAgZ2V0VHlwZUFzc2VydGlvbk5Cb2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IG5vZGU7IC8vL1xuXG4gICAgcmV0dXJuIHR5cGVBc3NlcnRpb25Ob2RlO1xuICB9XG5cbiAgZGlzY2hhcmdlKGNvbnRleHQpIHtcbiAgICBsZXQgZGlzY2hhcmdlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7ICAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYERpc2NoYXJnaW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICBjb25zdCB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkO1xuXG4gICAgICAgIHZhbGlkYXRlc1doZW5EZXJpdmVkID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gdmFsaWRhdGVzV2hlbkRlcml2ZWQ7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICAgIGRpc2NoYXJnZXMgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpc2NoYXJnZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLmRpc2NoYXJnZWQgdGhlICcke3R5cGVBc3NlcnRpb25TdHJpbmd9JyB0eXBlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzY2hhcmdlcztcbiAgfVxuXG4gIHZhbGlkYXRlKHN0YXRlLCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gICAgbGV0IGFzc2VydGlvbjtcblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb25TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIGFzc2VydGlvbiA9IHRoaXMuZmluZEFzc2VydGlvbihjb250ZXh0KTtcblxuICAgIGlmIChhc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGlzIGFscmVhZHkgcHJlc2VudC5gKTtcblxuICAgICAgcmV0dXJuIGZvcndhcmQodHlwZUFzc2VydGlvbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdGVUeXBlID0gdGhpcy52YWxpZGF0ZVR5cGUuYmluZCh0aGlzKTtcblxuICAgIHJldHVybiBhbGwoW1xuICAgICAgdmFsaWRhdGVUeXBlXG4gICAgXSwgc3RhdGUsIGNvbnRleHQsIGJhY2ssIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgdmFsaWRhdGVXaGVuRGVjbGFyZWQgPSB0aGlzLnZhbGlkYXRlV2hlbkRlY2xhcmVkLmJpbmQodGhpcyksXG4gICAgICAgICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkID0gdGhpcy52YWxpZGF0ZVdoZW5EZXJpdmVkLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBleGlzdHMoW1xuICAgICAgICB2YWxpZGF0ZVdoZW5EZWNsYXJlZCxcbiAgICAgICAgdmFsaWRhdGVXaGVuRGVyaXZlZFxuICAgICAgXSwgc3RhdGUsIGNvbnRleHQsIGJhY2ssIChzdGF0ZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBhc3NlcnRpb24gPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEFzc2VydGlvbihhc3NlcnRpb24pO1xuXG4gICAgICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSBhc3NlcnRpb247IC8vL1xuXG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVR5cGUoc3RhdGUsIGNvbnRleHQsIGJhY2ssIGZvcndhcmQpIHtcbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS4uLmApO1xuXG4gICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdGhpcy50eXBlLmdldE5vbWluYWxUeXBlTmFtZSgpLFxuICAgICAgICAgIHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgIGlmICh0eXBlID09PSBudWxsKSB7XG4gICAgICBjb25zdCB0eXBlU3RyaW5nID0gdGhpcy50eXBlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7dHlwZVN0cmluZ30nIHR5cGUgaXMgbm90IHByZXNlbnQuYCk7XG5cbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy50eXBlID0gdHlwZTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uJ3MgdHlwZS5gKTtcblxuICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0KVxuICB9XG5cbiAgdmFsaWRhdGVXaGVuRGVjbGFyZWQoc3RhdGUsIGNvbnRleHQsIGJhY2ssIGZvcndhcmQpIHtcbiAgICBjb25zdCBkZWNsYXJlZCA9IGlzRGVjbGFyZWQoc3RhdGUpO1xuXG4gICAgaWYgKCFkZWNsYXJlZCkge1xuICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgZGVjbGFyZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB0aGlzLnRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGJhY2ssICh0ZXJtLCBjb250ZXh0LCBiYWNrKSA9PiB7XG4gICAgICBsZXQgdmFsaWRhdGVzV2hlbkRlY2xhcmVkID0gZmFsc2U7XG5cbiAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRlcm1UeXBlID0gdGVybS5nZXRUeXBlKCksXG4gICAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb1R5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG8odGhpcy50eXBlKSxcbiAgICAgICAgICAgICAgdGVybVR5cGVTdXBlclR5cGVPZlR5cGUgPSB0ZXJtVHlwZS5pc1N1cGVyVHlwZU9mKHRoaXMudHlwZSk7XG5cbiAgICAgICAgaWYgKGZhbHNlKSB7XG4gICAgICAgICAgLy8vXG4gICAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVFcXVhbFRvVHlwZSkge1xuICAgICAgICAgIHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGVybVR5cGVTdXBlclR5cGVPZlR5cGUpIHtcbiAgICAgICAgICBjb25zdCB0ZXJtRXN0YWJsaXNoZWQgPSB0ZXJtLmlzRXN0YWJsaXNoZWQoKTtcblxuICAgICAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlc1doZW5EZWNsYXJlZCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghdmFsaWRhdGVzV2hlbkRlY2xhcmVkKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlY2xhcmVkIHR5cGUgYXNzZXJ0aW9uLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChzdGF0ZSwgY29udGV4dCk7XG4gICAgfSk7XG4gIH1cblxuICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHN0YXRlLCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gICAgY29uc3QgZGVyaXZlZCA9IGlzRGVyaXZlZChzdGF0ZSk7XG5cbiAgICBpZiAoIWRlcml2ZWQpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZUFzc2VydGlvblN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHJldHVybiB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRoaXMudGVybSwgdGhpcy50eXBlLCBzdGF0ZSwgY29udGV4dCwgYmFjaywgKHRlcm0sIGNvbnRleHQpID0+IHtcbiAgICAgIHRoaXMudGVybSA9IHRlcm07XG5cbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIGRlcml2ZWQgdHlwZSBhc3NlcnRpb24uYCk7XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKHN0YXRlLCBjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5SW5kZXBlbmRlbnRseShnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gICAgbGV0IHVuaWZpZXNJbmRlcGVuZGVudGx5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAvLy9cbiAgICAgICAgICB0eXBlQXNzZXJ0aW9uU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7dHlwZUFzc2VydGlvblN0cmluZ30nIHR5cGUgYXNzZXJ0aW9uIGluZGVwZW5kZW50bHkuLi5gKTtcblxuICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zKHRoaXMudGVybSwgY29udGV4dCk7XG5cbiAgICBkZXJpdmUoKHN0YXRlKSA9PiB7XG4gICAgICB2YWxpZGF0ZVdoZW5EZXJpdmVkKHRlcm0sIHRoaXMudHlwZSwgc3RhdGUsIGNvbnRleHQsICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcblxuICAgICAgICB1bmlmaWVzSW5kZXBlbmRlbnRseSA9IHRydWU7XG5cbiAgICAgICAgdmFsaWRhdGVzV2hlbkRlcml2ZWQgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiB2YWxpZGF0ZXNXaGVuRGVyaXZlZDtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgaWYgKHVuaWZpZXNJbmRlcGVuZGVudGx5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHt0eXBlQXNzZXJ0aW9uU3RyaW5nfScgdHlwZSBhc3NlcnRpb24gaW5kZXBlbmRlbnRseS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHVuaWZpZXNJbmRlcGVuZGVudGx5KTtcbiAgfVxuXG4gIGFzc2lnbihzdGF0ZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGRlcml2ZWQgPSBpc0Rlcml2ZWQoc3RhdGUpLFxuICAgICAgICAgIHRyYW5zaWVudCA9IGlzVHJhbnNpZW50KHN0YXRlKTtcblxuICAgIGlmIChkZXJpdmVkIHx8IHRyYW5zaWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGVBc3NlcnRpb24gPSB0aGlzLCAvLy9cbiAgICAgICAgICB2YXJpYWJsZUFzc2lnbWVudCA9IHZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uKHR5cGVBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgY29udGV4dC5hZGRBc3NpZ25tZW50KHZhcmlhYmxlQXNzaWdtZW50KTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCB0eXBlSlNPTiA9IHR5cGVUb1R5cGVKU09OKHRoaXMudHlwZSksXG4gICAgICAgICAgbmFtZSA9IHRoaXMuZ2V0TmFtZSgpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IHR5cGUgPSB0eXBlSlNPTixcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIGJyZWFrUG9pbnQsXG4gICAgICAgICAgICB0eXBlXG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlR5cGVBc3NlcnRpb25cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGxldCB0eXBlQXNzZXJ0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHsgbmFtZSB9ID0ganNvbjtcblxuICAgIGlmICh0aGlzLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIGluc3RhbnRpYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgICAgICB0eXBlQXNzZXJ0aW9uTm9kZSA9IGluc3RhbnRpYXRlVHlwZUFzc2VydGlvbihzdHJpbmcsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBub2RlID0gdHlwZUFzc2VydGlvbk5vZGUsIC8vL1xuICAgICAgICAgICAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEZyb21KU09OKGpzb24pLFxuICAgICAgICAgICAgICB0ZXJtID0gdGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSh0eXBlQXNzZXJ0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGUgPSB0eXBlRnJvbUpTT04oanNvbiwgY29udGV4dCk7XG5cbiAgICAgICAgY29udGV4dCA9IG51bGw7XG5cbiAgICAgICAgdHlwZUFzc2VydGlvbiA9IG5ldyBUeXBlQXNzZXJ0aW9uKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgdGVybSwgdHlwZSk7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gdHlwZUFzc2VydGlvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV2hlbkRlcml2ZWQodGVybSwgdHlwZSwgc3RhdGUsIGNvbnRleHQsIGJhY2ssIGZvcndhcmQpIHtcbiAgcmV0dXJuIHRlcm0udmFsaWRhdGUoc3RhdGUsIGNvbnRleHQsIGJhY2ssICh0ZXJtLCBjb250ZXh0KSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1doZW5EZXJpdmVkID0gZmFsc2U7XG5cbiAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgIHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mVHlwZSA9IHRlcm1UeXBlLmlzRXF1YWxUb09yU3ViVHlwZU9mKHR5cGUpO1xuXG4gICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlKSB7XG4gICAgICAgIGNvbnN0IHRlcm1Fc3RhYmxpc2hlZCA9IHRlcm0uaXNFc3RhYmxpc2hlZCgpO1xuXG4gICAgICAgIGlmICh0ZXJtRXN0YWJsaXNoZWQpIHtcbiAgICAgICAgICB2YWxpZGF0ZXNXaGVuRGVyaXZlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXZhbGlkYXRlc1doZW5EZXJpdmVkKSB7XG4gICAgICByZXR1cm4gYmFjaygpO1xuICAgIH1cblxuICAgIHJldHVybiBmb3J3YXJkKHRlcm0sIGNvbnRleHQpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJhbGwiLCJleGlzdHMiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJicmVha1BvaW50RnJvbUpTT04iLCJicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiIsImJyZWFrUG9pbnRVdGlsaXRpZXMiLCJkZWZpbmUiLCJUeXBlQXNzZXJ0aW9uIiwiQXNzZXJ0aW9uIiwiY29udGV4dCIsInN0cmluZyIsIm5vZGUiLCJicmVha1BvaW50IiwidGVybSIsInR5cGUiLCJnZXRUZXJtIiwiZ2V0VHlwZSIsImdldFR5cGVBc3NlcnRpb25OQm9kZSIsImdldE5vZGUiLCJ0eXBlQXNzZXJ0aW9uTm9kZSIsImRpc2NoYXJnZSIsImRpc2NoYXJnZXMiLCJ0eXBlQXNzZXJ0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ0ZXJtRnJvbVRlcm1BbmRTdWJzdGl0dXRpb25zIiwiZGVyaXZlIiwic3RhdGUiLCJ2YWxpZGF0ZXNXaGVuRGVyaXZlZCIsInZhbGlkYXRlV2hlbkRlcml2ZWQiLCJkZWJ1ZyIsInZhbGlkYXRlIiwiYmFjayIsImZvcndhcmQiLCJhc3NlcnRpb24iLCJmaW5kQXNzZXJ0aW9uIiwidHlwZUFzc2VydGlvbiIsInZhbGlkYXRlVHlwZSIsImJpbmQiLCJ2YWxpZGF0ZVdoZW5EZWNsYXJlZCIsImFkZEFzc2VydGlvbiIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUiLCJ0eXBlU3RyaW5nIiwiZGVjbGFyZWQiLCJpc0RlY2xhcmVkIiwidmFsaWRhdGVzV2hlbkRlY2xhcmVkIiwidGVybVR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9UeXBlIiwiaXNFcXVhbFRvIiwidGVybVR5cGVTdXBlclR5cGVPZlR5cGUiLCJpc1N1cGVyVHlwZU9mIiwidGVybUVzdGFibGlzaGVkIiwiaXNFc3RhYmxpc2hlZCIsImRlcml2ZWQiLCJpc0Rlcml2ZWQiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZpZXNJbmRlcGVuZGVudGx5IiwiY29udGludWF0aW9uIiwiYXNzaWduIiwidHJhbnNpZW50IiwiaXNUcmFuc2llbnQiLCJ2YXJpYWJsZUFzc2lnbWVudCIsInZhcmlhYmxlQXNzaWdubWVudEZyb21UeXBlQXNzZXJ0aW9uIiwiYWRkQXNzaWdubWVudCIsInRvSlNPTiIsInR5cGVKU09OIiwidHlwZVRvVHlwZUpTT04iLCJuYW1lIiwiZ2V0TmFtZSIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJmcm9tSlNPTiIsImluc3RhbnRpYXRlIiwiaW5zdGFudGlhdGVUeXBlQXNzZXJ0aW9uIiwidGVybUZyb21UeXBlQXNzZXJ0aW9uTm9kZSIsInR5cGVGcm9tSlNPTiIsImZyb21TdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnROb2RlIiwidHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnROb2RlIiwidGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZUeXBlIiwiaXNFcXVhbFRvT3JTdWJUeXBlT2YiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWtCQTs7O2VBQUE7OztnQ0FoQjJEO2tFQUVyQzswQkFFQzt5QkFDSzs2QkFDYTtzQkFDSTsrQkFDQTt3QkFDTzt1QkFDTTt5QkFDZ0I7Ozs7OztBQUUxRSxNQUFNLEVBQUVBLEdBQUcsRUFBRUMsTUFBTSxFQUFFLEdBQUdDLHFDQUFxQixFQUN2QyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsc0JBQXNCQyxrQkFBUztJQUN6RCxZQUFZQyxPQUFPLEVBQUVDLE1BQU0sRUFBRUMs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
|
|
@@ -28,40 +28,31 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
28
28
|
const signature = this.getSignature(), satisfiable = signature !== null;
|
|
29
29
|
return satisfiable;
|
|
30
30
|
}
|
|
31
|
-
verify = breakable(function(context,
|
|
31
|
+
verify = breakable(function(context, back, forward) {
|
|
32
32
|
const axiomString = this.getString(); ///
|
|
33
33
|
context.trace(`Verifying the '${axiomString}' axiom...`);
|
|
34
|
-
this.verifySignature(context, (
|
|
35
|
-
|
|
36
|
-
const
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
if (verifies) {
|
|
41
|
-
const axiom = this; ///
|
|
42
|
-
context.addAxiom(axiom);
|
|
43
|
-
context.debug(`...verified the '${axiomString}' axiom.`);
|
|
44
|
-
}
|
|
45
|
-
return continuation(verifies, context);
|
|
34
|
+
this.verifySignature(context, back, ()=>{
|
|
35
|
+
return this.verifyEx(context, back, ()=>{
|
|
36
|
+
const axiom = this; ///
|
|
37
|
+
context.addAxiom(axiom);
|
|
38
|
+
context.debug(`...verified the '${axiomString}' axiom.`);
|
|
39
|
+
return forward(context);
|
|
46
40
|
});
|
|
47
41
|
});
|
|
48
42
|
});
|
|
49
|
-
verifySignature(context,
|
|
43
|
+
verifySignature(context, back, forward) {
|
|
50
44
|
const satisfiable = this.isSatisfiable();
|
|
51
45
|
if (!satisfiable) {
|
|
52
|
-
|
|
53
|
-
return continuation(signatureVerifies);
|
|
46
|
+
return forward(context);
|
|
54
47
|
}
|
|
55
48
|
const signature = this.getSignature(), axiomString = this.getString(); ///
|
|
56
49
|
context.trace(`Verifying the '${axiomString}' axiom's signature...`);
|
|
57
|
-
return signature.verify(context, (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
}
|
|
61
|
-
return continuation(signatureVerifies);
|
|
50
|
+
return signature.verify(context, back, ()=>{
|
|
51
|
+
context.trace(`...verified the '${axiomString}' axiom's signature.`);
|
|
52
|
+
return forward(context);
|
|
62
53
|
});
|
|
63
54
|
}
|
|
64
|
-
unifyTerms(terms, context,
|
|
55
|
+
unifyTerms(terms, context, back, forward) {
|
|
65
56
|
const quoted = true, termsString = (0, _string.termsStringFromTerms)(terms, quoted), axiomString = this.getString(); ///
|
|
66
57
|
context.trace(`Unifying the ${termsString} terms with the '${axiomString}' axiom...`);
|
|
67
58
|
const signature = this.getSignature();
|
|
@@ -72,7 +63,7 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
72
63
|
return continuation(termsUnify);
|
|
73
64
|
});
|
|
74
65
|
}
|
|
75
|
-
unifyClaim(claim, context,
|
|
66
|
+
unifyClaim(claim, context, back, forward) {
|
|
76
67
|
let claimUnifies = false;
|
|
77
68
|
const axiomString = this.getString(), claimString = claim.getString();
|
|
78
69
|
context.trace(`Unifying the '${claimString}' claim with the '${axiomString}' axiom...`);
|
|
@@ -98,7 +89,7 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
98
89
|
});
|
|
99
90
|
}, context);
|
|
100
91
|
}
|
|
101
|
-
unifyDeduction(deduction, context,
|
|
92
|
+
unifyDeduction(deduction, context, back, forward) {
|
|
102
93
|
let deductionUnifies = false;
|
|
103
94
|
const generalDeduction = this.getDeduction(), specificDeduction = deduction, generalDeductionString = generalDeduction.getString(), specificDeductionString = specificDeduction.getString();
|
|
104
95
|
context.trace(`Unifying the '${specificDeductionString}' deduction with the '${generalDeductionString}' deduction...`);
|
|
@@ -122,7 +113,7 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
122
113
|
}, specificContext);
|
|
123
114
|
}, specificContext, context);
|
|
124
115
|
}
|
|
125
|
-
unifySupposition(specificSupposition, generalSupposition, context,
|
|
116
|
+
unifySupposition(specificSupposition, generalSupposition, context, back, forward) {
|
|
126
117
|
let suppositionUnifies = false;
|
|
127
118
|
const generalSuppositionString = generalSupposition.getString(), specificSuppositionString = specificSupposition.getString();
|
|
128
119
|
context.trace(`Unifying the '${specificSuppositionString}' supposition with the '${generalSuppositionString}' supposition...`);
|
|
@@ -145,7 +136,7 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
145
136
|
}, specificContext);
|
|
146
137
|
}, specificContext, context);
|
|
147
138
|
}
|
|
148
|
-
unifySuppositions(suppositions, context,
|
|
139
|
+
unifySuppositions(suppositions, context, back, forward) {
|
|
149
140
|
let suppositionsUnify = false;
|
|
150
141
|
const specificSuppositions = suppositions, specificSuppositionsLength = specificSuppositions.length;
|
|
151
142
|
suppositions = this.getSuppositions();
|
|
@@ -154,13 +145,13 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
154
145
|
return continuation(suppositionsUnify);
|
|
155
146
|
}
|
|
156
147
|
let index = specificSuppositionsLength;
|
|
157
|
-
return backwardsEvery(generalSuppositions, (generalSupposition,
|
|
148
|
+
return backwardsEvery(generalSuppositions, (generalSupposition, continuation1)=>{
|
|
158
149
|
index--;
|
|
159
150
|
const specificSupposition = specificSuppositions[index];
|
|
160
|
-
return this.unifySupposition(specificSupposition, generalSupposition, context,
|
|
151
|
+
return this.unifySupposition(specificSupposition, generalSupposition, context, continuation1);
|
|
161
152
|
}, continuation);
|
|
162
153
|
}
|
|
163
|
-
unifySignatureAssertion(signatureAssertion, context,
|
|
154
|
+
unifySignatureAssertion(signatureAssertion, context, back, forward) {
|
|
164
155
|
let signatureAssertionUnifies = false;
|
|
165
156
|
const axiomString = this.getString(), signatureAssertionString = signatureAssertion.getString();
|
|
166
157
|
context.trace(`Unifying the '${signatureAssertionString}' signature assertion with the '${axiomString}' axiom...`);
|
|
@@ -181,4 +172,4 @@ const _default = (0, _elements.define)(class Axiom extends _claim.default {
|
|
|
181
172
|
}
|
|
182
173
|
});
|
|
183
174
|
|
|
184
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHRlcm1zU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBBeGlvbSBleHRlbmRzIENsYWltIHtcbiAgZ2V0QXhpb21Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBheGlvbU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBheGlvbU5vZGU7XG4gIH1cblxuICBpc1NhdGlzZmlhYmxlKCkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCksXG4gICAgICAgICAgc2F0aXNmaWFibGUgPSAoc2lnbmF0dXJlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgdGhpcy52ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgKHNpZ25hdHVyZVZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAoIXNpZ25hdHVyZVZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IHZlcmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2ZXJpZmllcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUV4KGNvbnRleHQsICh2ZXJpZmllcykgPT4ge1xuICAgICAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBheGlvbSA9IHRoaXM7IC8vL1xuXG4gICAgICAgICAgY29udGV4dC5hZGRBeGlvbShheGlvbSk7XG5cbiAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHZlcmlmeVNpZ25hdHVyZShjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzYXRpc2ZpYWJsZSA9IHRoaXMuaXNTYXRpc2ZpYWJsZSgpO1xuXG4gICAgaWYgKCFzYXRpc2ZpYWJsZSkge1xuICAgICAgY29uc3Qgc2lnbmF0dXJlVmVyaWZpZXMgPSB0cnVlOyAvLy9cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzaWduYXR1cmVWZXJpZmllcyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKSxcbiAgICAgICAgICBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tJ3Mgc2lnbmF0dXJlLi4uYCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnZlcmlmeShjb250ZXh0LCAoc2lnbmF0dXJlVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChzaWduYXR1cmVWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LnRyYWNlKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbSdzIHNpZ25hdHVyZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzaWduYXR1cmVWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBxdW90ZWQgPSB0cnVlLFxuICAgICAgICAgIHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMsIHF1b3RlZCksXG4gICAgICAgICAgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAke3Rlcm1zU3RyaW5nfSB0ZXJtcyB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZS51bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCAodGVybXNVbmlmeSkgPT4ge1xuICAgICAgaWYgKHRlcm1zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1zVW5pZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IGNsYWltVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBjbGFpbVN0cmluZyA9IGNsYWltLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2NsYWltU3RyaW5nfScgY2xhaW0gd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuXG4gICAgcmV0dXJuIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgZGVkdWN0aW9uID0gY2xhaW0uZ2V0RGVkdWN0aW9uKCk7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgKGRlZHVjdGlvblVuaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKCFkZWR1Y3Rpb25VbmlmaWVzKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjbGFpbVVuaWZpZXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25zID0gY2xhaW0uZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbnMoc3VwcG9zaXRpb25zLCBjb250ZXh0LCAoc3VwcG9zaXRpb25zVW5pZnkpID0+IHtcbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25zVW5pZnkpIHtcbiAgICAgICAgICAgIGNsYWltVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2xhaW1VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjbGFpbVVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlEZWR1Y3Rpb24oZGVkdWN0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgZGVkdWN0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbERlZHVjdGlvbiA9IHRoaXMuZ2V0RGVkdWN0aW9uKCksIC8vL1xuICAgICAgICAgIHNwZWNpZmljRGVkdWN0aW9uID0gZGVkdWN0aW9uLCAgLy8vXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvblN0cmluZyA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmcgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzcGVjaWZpY0RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLi4uYCk7XG5cbiAgICBjb25zdCBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRDb250ZXh0KCksXG4gICAgICAgICAgZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQgPSBnZW5lcmFsRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY0RlZHVjdGlvbkNvbnRleHQsICAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb25Db250ZXh0OyAvLy9cblxuICAgIHJldHVybiBqb2luKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiByZWNvbmNpbGUoKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBzcGVjaWZpY0RlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgICAgICBkZWR1Y3Rpb24gPSBnZW5lcmFsRGVkdWN0aW9uOyAvLy9cblxuICAgICAgICByZXR1cm4gZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgZGVkdWN0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dC5jb21taXQoY29udGV4dCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGRlZHVjdGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihkZWR1Y3Rpb25VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9LCBzcGVjaWZpY0NvbnRleHQpO1xuICAgIH0sIHNwZWNpZmljQ29udGV4dCwgY29udGV4dCk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2l0aW9uKHNwZWNpZmljU3VwcG9zaXRpb24sIGdlbmVyYWxTdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nID0gZ2VuZXJhbFN1cHBvc2l0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3VwcG9zaXRpb25TdHJpbmcgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0ID0gZ2VuZXJhbFN1cHBvc2l0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgc3VwcG9zaXRpb24gPSBnZW5lcmFsU3VwcG9zaXRpb247IC8vL1xuXG4gICAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uc1VuaWZ5ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucywgIC8vL1xuICAgICAgICAgIHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoID0gc3BlY2lmaWNTdXBwb3NpdGlvbnMubGVuZ3RoO1xuXG4gICAgc3VwcG9zaXRpb25zID0gdGhpcy5nZXRTdXBwb3NpdGlvbnMoKTtcblxuICAgIGNvbnN0IGdlbmVyYWxTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsIC8vL1xuICAgICAgICAgIGdlbmVyYWxTdXBwb3NpdGlvbnNMZW5ndGggPSBnZW5lcmFsU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoICE9PSBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCkge1xuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvbnNVbmlmeSk7XG4gICAgfVxuXG4gICAgbGV0IGluZGV4ID0gc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGg7XG5cbiAgICByZXR1cm4gYmFja3dhcmRzRXZlcnkoZ2VuZXJhbFN1cHBvc2l0aW9ucywgKGdlbmVyYWxTdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBpbmRleC0tO1xuXG4gICAgICBjb25zdCBzcGVjaWZpY1N1cHBvc2l0aW9uID0gc3BlY2lmaWNTdXBwb3NpdGlvbnNbaW5kZXhdO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVN1cHBvc2l0aW9uKHNwZWNpZmljU3VwcG9zaXRpb24sIGdlbmVyYWxTdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250aW51YXRpb24pO1xuICB9XG5cbiAgdW5pZnlTaWduYXR1cmVBc3NlcnRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBsZXQgc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25TdHJpbmcgPSBzaWduYXR1cmVBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtcyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRUZXJtcygpLFxuICAgICAgICAgIHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCk7XG5cbiAgICByZXR1cm4gc2lnbmF0dXJlLnVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsICh0ZXJtc1VuaWZ5KSA9PiB7XG4gICAgICBpZiAodGVybXNVbmlmeSkge1xuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c2lnbmF0dXJlQXNzZXJ0aW9uU3RyaW5nfScgc2lnbmF0dXJlIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkF4aW9tXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHsgcmV0dXJuIENsYWltLmZyb21KU09OKEF4aW9tLCBqc29uLCBjb250ZXh0KTsgfVxufSk7XG4iXSwibmFtZXMiOlsiYnJlYWthYmxlIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImJhY2t3YXJkc0V2ZXJ5IiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwiZGVmaW5lIiwiQXhpb20iLCJDbGFpbSIsImdldEF4aW9tTm9kZSIsIm5vZGUiLCJnZXROb2RlIiwiYXhpb21Ob2RlIiwiaXNTYXRpc2ZpYWJsZSIsInNpZ25hdHVyZSIsImdldFNpZ25hdHVyZSIsInNhdGlzZmlhYmxlIiwidmVyaWZ5IiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsImF4aW9tU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2ZXJpZnlTaWduYXR1cmUiLCJzaWduYXR1cmVWZXJpZmllcyIsInZlcmlmaWVzIiwidmVyaWZ5RXgiLCJheGlvbSIsImFkZEF4aW9tIiwiZGVidWciLCJ1bmlmeVRlcm1zIiwidGVybXMiLCJxdW90ZWQiLCJ0ZXJtc1N0cmluZyIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidGVybXNVbmlmeSIsInVuaWZ5Q2xhaW0iLCJjbGFpbSIsImNsYWltVW5pZmllcyIsImNsYWltU3RyaW5nIiwicmVjb25jaWxlIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsImNvbW1pdCIsImdlbmVyYWxEZWR1Y3Rpb24iLCJzcGVjaWZpY0RlZHVjdGlvbiIsImdlbmVyYWxEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvblN0cmluZyIsInNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsRGVkdWN0aW9uQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwiam9pbiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3VwcG9zaXRpb24iLCJzcGVjaWZpY1N1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25VbmlmaWVzIiwiZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0IiwiZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uIiwic3BlY2lmaWNTdXBwb3NpdGlvbnMiLCJzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsImdlbmVyYWxTdXBwb3NpdGlvbnMiLCJnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoIiwiaW5kZXgiLCJ1bmlmeVNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMiLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJnZXRUZXJtcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDs4REFFekM7MEJBRUs7eUJBQ1M7d0JBQ0s7Ozs7OztBQUVyQyxNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVoRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLGNBQUs7SUFDN0NDLGVBQWU7UUFDYixNQUFNQyxPQUFPLElBQUksQ0FBQ0MsT0FBTyxJQUNuQkMsWUFBWUYsTUFBTSxHQUFHO1FBRTNCLE9BQU9FO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTUMsWUFBWSxJQUFJLENBQUNDLFlBQVksSUFDN0JDLGNBQWVGLGNBQWM7UUFFbkMsT0FBT0U7SUFDVDtJQUVBQyxTQUFTZixVQUFVLFNBQVVnQixPQUFPLEVBQUVDLFlBQVk7UUFDaEQsTUFBTUMsY0FBYyxJQUFJLENBQUNDLFNBQVMsSUFBSSxHQUFHO1FBRXpDSCxRQUFRSSxLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLFlBQVksVUFBVSxDQUFDO1FBRXZELElBQUksQ0FBQ0csZUFBZSxDQUFDTCxTQUFTLENBQUNNO1lBQzdCLElBQUksQ0FBQ0EsbUJBQW1CO2dCQUN0QixNQUFNQyxXQUFXO2dCQUVqQixPQUFPTixhQUFhTTtZQUN0QjtZQUVBLE9BQU8sSUFBSSxDQUFDQyxRQUFRLENBQUNSLFNBQVMsQ0FBQ087Z0JBQzdCLElBQUlBLFVBQVU7b0JBQ1osTUFBTUUsUUFBUSxJQUFJLEVBQUUsR0FBRztvQkFFdkJULFFBQVFVLFFBQVEsQ0FBQ0Q7b0JBRWpCVCxRQUFRVyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRVQsWUFBWSxRQUFRLENBQUM7Z0JBQ3pEO2dCQUVBLE9BQU9ELGFBQWFNLFVBQVVQ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
|
|
175
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L2NsYWltL2F4aW9tLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBicmVha1BvaW50VXRpbGl0aWVzLCBjb250aW51YXRpb25VdGlsaXRpZXMgfSBmcm9tIFwib2NjYW0tbGFuZ3VhZ2VzXCI7XG5cbmltcG9ydCBDbGFpbSBmcm9tIFwiLi4vY2xhaW1cIjtcblxuaW1wb3J0IHsgZGVmaW5lIH0gZnJvbSBcIi4uLy4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgeyBqb2luLCByZWNvbmNpbGUgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHRlcm1zU3RyaW5nRnJvbVRlcm1zIH0gZnJvbSBcIi4uLy4uL3V0aWxpdGllcy9zdHJpbmdcIjtcblxuY29uc3QgeyBicmVha2FibGUgfSA9IGJyZWFrUG9pbnRVdGlsaXRpZXMsXG4gICAgICB7IGJhY2t3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBBeGlvbSBleHRlbmRzIENsYWltIHtcbiAgZ2V0QXhpb21Ob2RlKCkge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmdldE5vZGUoKSxcbiAgICAgICAgICBheGlvbU5vZGUgPSBub2RlOyAvLy9cblxuICAgIHJldHVybiBheGlvbU5vZGU7XG4gIH1cblxuICBpc1NhdGlzZmlhYmxlKCkge1xuICAgIGNvbnN0IHNpZ25hdHVyZSA9IHRoaXMuZ2V0U2lnbmF0dXJlKCksXG4gICAgICAgICAgc2F0aXNmaWFibGUgPSAoc2lnbmF0dXJlICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzYXRpc2ZpYWJsZTtcbiAgfVxuXG4gIHZlcmlmeSA9IGJyZWFrYWJsZShmdW5jdGlvbiAoY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIHRoaXMudmVyaWZ5U2lnbmF0dXJlKGNvbnRleHQsIGJhY2ssICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnZlcmlmeUV4KGNvbnRleHQsIGJhY2ssICgpID0+IHtcbiAgICAgICAgY29uc3QgYXhpb20gPSB0aGlzOyAvLy9cblxuICAgICAgICBjb250ZXh0LmFkZEF4aW9tKGF4aW9tKTtcblxuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS5gKTtcblxuICAgICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcblxuICB2ZXJpZnlTaWduYXR1cmUoY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGNvbnN0IHNhdGlzZmlhYmxlID0gdGhpcy5pc1NhdGlzZmlhYmxlKCk7XG5cbiAgICBpZiAoIXNhdGlzZmlhYmxlKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0KTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpLFxuICAgICAgICAgIGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20ncyBzaWduYXR1cmUuLi5gKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudmVyaWZ5KGNvbnRleHQsIGJhY2ssICgpID0+IHtcbiAgICAgIGNvbnRleHQudHJhY2UoYC4uLnZlcmlmaWVkIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tJ3Mgc2lnbmF0dXJlLmApO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChjb250ZXh0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5VGVybXModGVybXMsIGNvbnRleHQsIGJhY2ssIGZvcndhcmQpIHtcbiAgICBjb25zdCBxdW90ZWQgPSB0cnVlLFxuICAgICAgICAgIHRlcm1zU3RyaW5nID0gdGVybXNTdHJpbmdGcm9tVGVybXModGVybXMsIHF1b3RlZCksXG4gICAgICAgICAgYXhpb21TdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAke3Rlcm1zU3RyaW5nfSB0ZXJtcyB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLi4uYCk7XG5cbiAgICBjb25zdCBzaWduYXR1cmUgPSB0aGlzLmdldFNpZ25hdHVyZSgpO1xuXG4gICAgcmV0dXJuIHNpZ25hdHVyZS51bmlmeVRlcm1zKHRlcm1zLCBjb250ZXh0LCAodGVybXNVbmlmeSkgPT4ge1xuICAgICAgaWYgKHRlcm1zVW5pZnkpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJHt0ZXJtc1N0cmluZ30gdGVybXMgd2l0aCB0aGUgJyR7YXhpb21TdHJpbmd9JyBheGlvbS4uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1zVW5pZnkpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlDbGFpbShjbGFpbSwgY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGxldCBjbGFpbVVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGF4aW9tU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgLy8vXG4gICAgICAgICAgY2xhaW1TdHJpbmcgPSBjbGFpbS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtjbGFpbVN0cmluZ30nIGNsYWltIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIHJldHVybiByZWNvbmNpbGUoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IGRlZHVjdGlvbiA9IGNsYWltLmdldERlZHVjdGlvbigpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeURlZHVjdGlvbihkZWR1Y3Rpb24sIGNvbnRleHQsIChkZWR1Y3Rpb25VbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oY2xhaW1VbmlmaWVzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IGNsYWltLmdldFN1cHBvc2l0aW9ucygpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgY29udGV4dCwgKHN1cHBvc2l0aW9uc1VuaWZ5KSA9PiB7XG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgICBjbGFpbVVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChjbGFpbVVuaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGNsYWltVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7Y2xhaW1TdHJpbmd9JyBjbGFpbSB3aXRoIHRoZSAnJHtheGlvbVN0cmluZ30nIGF4aW9tLmApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oY2xhaW1VbmlmaWVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWN0aW9uKGRlZHVjdGlvbiwgY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGxldCBkZWR1Y3Rpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBnZW5lcmFsRGVkdWN0aW9uID0gdGhpcy5nZXREZWR1Y3Rpb24oKSwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNEZWR1Y3Rpb24gPSBkZWR1Y3Rpb24sICAvLy9cbiAgICAgICAgICBnZW5lcmFsRGVkdWN0aW9uU3RyaW5nID0gZ2VuZXJhbERlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzcGVjaWZpY0RlZHVjdGlvblN0cmluZyA9IHNwZWNpZmljRGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljRGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uIHdpdGggdGhlICcke2dlbmVyYWxEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIGNvbnN0IHNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCA9IHNwZWNpZmljRGVkdWN0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsRGVkdWN0aW9uQ29udGV4dCA9IGdlbmVyYWxEZWR1Y3Rpb24uZ2V0Q29udGV4dCgpLFxuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IHNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbERlZHVjdGlvbkNvbnRleHQ7IC8vL1xuXG4gICAgcmV0dXJuIGpvaW4oKHNwZWNpZmljQ29udGV4dCkgPT4ge1xuICAgICAgcmV0dXJuIHJlY29uY2lsZSgoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHNwZWNpZmljRGVkdWN0aW9uLmdldFN0YXRlbWVudCgpO1xuXG4gICAgICAgIGRlZHVjdGlvbiA9IGdlbmVyYWxEZWR1Y3Rpb247IC8vL1xuXG4gICAgICAgIHJldHVybiBkZWR1Y3Rpb24udW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBkZWR1Y3Rpb25VbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3BlY2lmaWNEZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbERlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi5gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb24oc3BlY2lmaWNTdXBwb3NpdGlvbiwgZ2VuZXJhbFN1cHBvc2l0aW9uLCBjb250ZXh0LCBiYWNrLCBmb3J3YXJkKSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nID0gZ2VuZXJhbFN1cHBvc2l0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHNwZWNpZmljU3VwcG9zaXRpb25TdHJpbmcgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3NwZWNpZmljU3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbiB3aXRoIHRoZSAnJHtnZW5lcmFsU3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbkNvbnRleHQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25Db250ZXh0ID0gZ2VuZXJhbFN1cHBvc2l0aW9uLmdldENvbnRleHQoKSxcbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBzcGVjaWZpY1N1cHBvc2l0aW9uQ29udGV4dCwgIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dDsgLy8vXG5cbiAgICByZXR1cm4gam9pbigoc3BlY2lmaWNDb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gcmVjb25jaWxlKChzcGVjaWZpY0NvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGVtZW50ID0gc3BlY2lmaWNTdXBwb3NpdGlvbi5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgc3VwcG9zaXRpb24gPSBnZW5lcmFsU3VwcG9zaXRpb247IC8vL1xuXG4gICAgICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVW5pZmllcykge1xuICAgICAgICAgICAgc3BlY2lmaWNDb250ZXh0LmNvbW1pdChjb250ZXh0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzcGVjaWZpY1N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24gd2l0aCB0aGUgJyR7Z2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uYCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdXBwb3NpdGlvblVuaWZpZXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHNwZWNpZmljQ29udGV4dCk7XG4gICAgfSwgc3BlY2lmaWNDb250ZXh0LCBjb250ZXh0KTtcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zaXRpb25zKHN1cHBvc2l0aW9ucywgY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGxldCBzdXBwb3NpdGlvbnNVbmlmeSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnMsICAvLy9cbiAgICAgICAgICBzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCA9IHNwZWNpZmljU3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIHN1cHBvc2l0aW9ucyA9IHRoaXMuZ2V0U3VwcG9zaXRpb25zKCk7XG5cbiAgICBjb25zdCBnZW5lcmFsU3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zLCAvLy9cbiAgICAgICAgICBnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoID0gZ2VuZXJhbFN1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoZ2VuZXJhbFN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3BlY2lmaWNTdXBwb3NpdGlvbnNMZW5ndGgpIHtcbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVW5pZnkpO1xuICAgIH1cblxuICAgIGxldCBpbmRleCA9IHNwZWNpZmljU3VwcG9zaXRpb25zTGVuZ3RoO1xuXG4gICAgcmV0dXJuIGJhY2t3YXJkc0V2ZXJ5KGdlbmVyYWxTdXBwb3NpdGlvbnMsIChnZW5lcmFsU3VwcG9zaXRpb24sIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgaW5kZXgtLTtcblxuICAgICAgY29uc3Qgc3BlY2lmaWNTdXBwb3NpdGlvbiA9IHNwZWNpZmljU3VwcG9zaXRpb25zW2luZGV4XTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NpdGlvbihzcGVjaWZpY1N1cHBvc2l0aW9uLCBnZW5lcmFsU3VwcG9zaXRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHVuaWZ5U2lnbmF0dXJlQXNzZXJ0aW9uKHNpZ25hdHVyZUFzc2VydGlvbiwgY29udGV4dCwgYmFjaywgZm9yd2FyZCkge1xuICAgIGxldCBzaWduYXR1cmVBc3NlcnRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBheGlvbVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblN0cmluZyA9IHNpZ25hdHVyZUFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uLi5gKTtcblxuICAgIGNvbnN0IHRlcm1zID0gc2lnbmF0dXJlQXNzZXJ0aW9uLmdldFRlcm1zKCksXG4gICAgICAgICAgc2lnbmF0dXJlID0gdGhpcy5nZXRTaWduYXR1cmUoKTtcblxuICAgIHJldHVybiBzaWduYXR1cmUudW5pZnlUZXJtcyh0ZXJtcywgY29udGV4dCwgKHRlcm1zVW5pZnkpID0+IHtcbiAgICAgIGlmICh0ZXJtc1VuaWZ5KSB7XG4gICAgICAgIHNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzaWduYXR1cmVBc3NlcnRpb25TdHJpbmd9JyBzaWduYXR1cmUgYXNzZXJ0aW9uIHdpdGggdGhlICcke2F4aW9tU3RyaW5nfScgYXhpb20uYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc2lnbmF0dXJlQXNzZXJ0aW9uVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiQXhpb21cIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkgeyByZXR1cm4gQ2xhaW0uZnJvbUpTT04oQXhpb20sIGpzb24sIGNvbnRleHQpOyB9XG59KTtcbiJdLCJuYW1lcyI6WyJicmVha2FibGUiLCJicmVha1BvaW50VXRpbGl0aWVzIiwiYmFja3dhcmRzRXZlcnkiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJkZWZpbmUiLCJBeGlvbSIsIkNsYWltIiwiZ2V0QXhpb21Ob2RlIiwibm9kZSIsImdldE5vZGUiLCJheGlvbU5vZGUiLCJpc1NhdGlzZmlhYmxlIiwic2lnbmF0dXJlIiwiZ2V0U2lnbmF0dXJlIiwic2F0aXNmaWFibGUiLCJ2ZXJpZnkiLCJjb250ZXh0IiwiYmFjayIsImZvcndhcmQiLCJheGlvbVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmVyaWZ5U2lnbmF0dXJlIiwidmVyaWZ5RXgiLCJheGlvbSIsImFkZEF4aW9tIiwiZGVidWciLCJ1bmlmeVRlcm1zIiwidGVybXMiLCJxdW90ZWQiLCJ0ZXJtc1N0cmluZyIsInRlcm1zU3RyaW5nRnJvbVRlcm1zIiwidGVybXNVbmlmeSIsImNvbnRpbnVhdGlvbiIsInVuaWZ5Q2xhaW0iLCJjbGFpbSIsImNsYWltVW5pZmllcyIsImNsYWltU3RyaW5nIiwicmVjb25jaWxlIiwiZGVkdWN0aW9uIiwiZ2V0RGVkdWN0aW9uIiwidW5pZnlEZWR1Y3Rpb24iLCJkZWR1Y3Rpb25VbmlmaWVzIiwic3VwcG9zaXRpb25zIiwiZ2V0U3VwcG9zaXRpb25zIiwidW5pZnlTdXBwb3NpdGlvbnMiLCJzdXBwb3NpdGlvbnNVbmlmeSIsImNvbW1pdCIsImdlbmVyYWxEZWR1Y3Rpb24iLCJzcGVjaWZpY0RlZHVjdGlvbiIsImdlbmVyYWxEZWR1Y3Rpb25TdHJpbmciLCJzcGVjaWZpY0RlZHVjdGlvblN0cmluZyIsInNwZWNpZmljRGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsRGVkdWN0aW9uQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsImdlbmVyYWxDb250ZXh0Iiwiam9pbiIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsInVuaWZ5U3VwcG9zaXRpb24iLCJzcGVjaWZpY1N1cHBvc2l0aW9uIiwiZ2VuZXJhbFN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25VbmlmaWVzIiwiZ2VuZXJhbFN1cHBvc2l0aW9uU3RyaW5nIiwic3BlY2lmaWNTdXBwb3NpdGlvblN0cmluZyIsInNwZWNpZmljU3VwcG9zaXRpb25Db250ZXh0IiwiZ2VuZXJhbFN1cHBvc2l0aW9uQ29udGV4dCIsInN1cHBvc2l0aW9uIiwic3BlY2lmaWNTdXBwb3NpdGlvbnMiLCJzcGVjaWZpY1N1cHBvc2l0aW9uc0xlbmd0aCIsImxlbmd0aCIsImdlbmVyYWxTdXBwb3NpdGlvbnMiLCJnZW5lcmFsU3VwcG9zaXRpb25zTGVuZ3RoIiwiaW5kZXgiLCJ1bmlmeVNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvbiIsInNpZ25hdHVyZUFzc2VydGlvblVuaWZpZXMiLCJzaWduYXR1cmVBc3NlcnRpb25TdHJpbmciLCJnZXRUZXJtcyIsIm5hbWUiLCJmcm9tSlNPTiIsImpzb24iXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQWFBOzs7ZUFBQTs7O2dDQVgyRDs4REFFekM7MEJBRUs7eUJBQ1M7d0JBQ0s7Ozs7OztBQUVyQyxNQUFNLEVBQUVBLFNBQVMsRUFBRSxHQUFHQyxtQ0FBbUIsRUFDbkMsRUFBRUMsY0FBYyxFQUFFLEdBQUdDLHFDQUFxQjtNQUVoRCxXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGNBQWNDLGNBQUs7SUFDN0NDLGVBQWU7UUFDYixNQUFNQyxPQUFPLElBQUksQ0FB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
|