occam-nominal 1.0.334 → 1.0.340
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context.js +5 -1
- package/lib/element/assertion/contained.js +4 -4
- package/lib/element/assertion/defined.js +3 -3
- package/lib/element/assertion/subproof.js +6 -6
- package/lib/element/assertion/type.js +3 -3
- package/lib/element/assumption.js +134 -111
- package/lib/element/combinator/bracketed.js +2 -2
- package/lib/element/constraint.js +114 -102
- package/lib/element/constructor/bracketed.js +3 -3
- package/lib/element/deduction.js +2 -2
- package/lib/element/equality.js +3 -3
- package/lib/element/frame.js +3 -3
- package/lib/element/goal.js +67 -57
- package/lib/element/hypothesis.js +2 -2
- package/lib/element/judgement.js +15 -16
- package/lib/element/label.js +25 -22
- package/lib/element/metaType.js +2 -2
- package/lib/element/metavariable.js +54 -45
- package/lib/element/parameter.js +2 -2
- package/lib/element/procedureCall.js +2 -2
- package/lib/element/procedureReference.js +2 -2
- package/lib/element/proofAssertion/step.js +7 -7
- package/lib/element/proofAssertion/supposition.js +2 -2
- package/lib/element/proofAssertion.js +2 -2
- package/lib/element/reference.js +27 -24
- package/lib/element/schema.js +165 -154
- package/lib/element/signature.js +2 -2
- package/lib/element/statement.js +7 -5
- package/lib/element/substitution/reference.js +22 -29
- package/lib/element/substitution/statement.js +5 -5
- package/lib/element/term.js +2 -2
- package/lib/element/typePrefix.js +2 -2
- package/lib/element/variable.js +2 -2
- package/lib/process/unification.js +41 -47
- package/lib/process/unify.js +10 -10
- package/lib/process/validate.js +6 -6
- package/lib/process/validation.js +13 -13
- package/package.json +9 -9
- package/src/context.js +6 -0
- package/src/element/assertion/contained.js +3 -3
- package/src/element/assertion/defined.js +2 -2
- package/src/element/assertion/subproof.js +5 -5
- package/src/element/assertion/type.js +2 -2
- package/src/element/assumption.js +158 -132
- package/src/element/combinator/bracketed.js +1 -1
- package/src/element/constraint.js +134 -125
- package/src/element/constructor/bracketed.js +2 -2
- package/src/element/deduction.js +1 -1
- package/src/element/equality.js +2 -2
- package/src/element/frame.js +2 -2
- package/src/element/goal.js +82 -74
- package/src/element/hypothesis.js +2 -2
- package/src/element/judgement.js +20 -22
- package/src/element/label.js +26 -25
- package/src/element/metaType.js +2 -2
- package/src/element/metavariable.js +70 -53
- package/src/element/parameter.js +2 -2
- package/src/element/procedureCall.js +2 -2
- package/src/element/procedureReference.js +2 -2
- package/src/element/proofAssertion/step.js +6 -6
- package/src/element/proofAssertion/supposition.js +1 -1
- package/src/element/proofAssertion.js +1 -1
- package/src/element/reference.js +28 -27
- package/src/element/schema.js +193 -195
- package/src/element/signature.js +2 -2
- package/src/element/statement.js +9 -5
- package/src/element/substitution/reference.js +22 -35
- package/src/element/substitution/statement.js +4 -4
- package/src/element/term.js +1 -1
- package/src/element/typePrefix.js +2 -2
- package/src/element/variable.js +1 -1
- package/src/process/unification.js +44 -59
- package/src/process/unify.js +9 -9
- package/src/process/validate.js +5 -5
- package/src/process/validation.js +12 -12
package/lib/element/schema.js
CHANGED
|
@@ -10,6 +10,7 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
const _occamlanguages = require("occam-languages");
|
|
12
12
|
const _elements = /*#__PURE__*/ _interop_require_wildcard(require("../elements"));
|
|
13
|
+
const _continuation = require("../utilities/continuation");
|
|
13
14
|
const _context = require("../utilities/context");
|
|
14
15
|
const _string = require("../utilities/string");
|
|
15
16
|
const _json = require("../utilities/json");
|
|
@@ -54,7 +55,7 @@ function _interop_require_wildcard(obj, nodeInterop) {
|
|
|
54
55
|
}
|
|
55
56
|
return newObj;
|
|
56
57
|
}
|
|
57
|
-
const { forwardsEvery } = _occamlanguages.continuationUtilities, { breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
58
|
+
const { every, forwardsEvery } = _occamlanguages.continuationUtilities, { breakable, breakPointFromJSON, breakPointToBreakPointJSON } = _occamlanguages.breakPointUtilities;
|
|
58
59
|
const _default = (0, _elements.define)(class Schema extends _occamlanguages.Element {
|
|
59
60
|
constructor(context, string, node, breakPoint, label, suppositions, deduction, proof, constraints){
|
|
60
61
|
super(context, string, node, breakPoint);
|
|
@@ -91,204 +92,214 @@ const _default = (0, _elements.define)(class Schema extends _occamlanguages.Elem
|
|
|
91
92
|
const label = this.getLabel(), labelComparesToRefference = label.compareReference(reference), comparesToReference = labelComparesToRefference; ///
|
|
92
93
|
return comparesToReference;
|
|
93
94
|
}
|
|
94
|
-
|
|
95
|
-
let verifies;
|
|
96
|
-
await this.break(context);
|
|
95
|
+
verify = breakable(function(context, continuation) {
|
|
97
96
|
const schemaString = this.getString(); ///
|
|
98
97
|
context.trace(`Verifying the '${schemaString}' schema...`);
|
|
99
|
-
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
98
|
+
(0, _context.encapsulate)((context)=>{
|
|
99
|
+
const verifyLabel = this.verifyLabel.bind(this), verifyProof = this.verifyProof.bind(this), verifyDeduction = this.verifyDeduction.bind(this), verifySuppositions = this.verifySuppositions.bind(this);
|
|
100
|
+
return (0, _continuation.all)([
|
|
101
|
+
verifyLabel,
|
|
102
|
+
verifySuppositions,
|
|
103
|
+
verifyDeduction,
|
|
104
|
+
verifyProof
|
|
105
|
+
], context, (verifies)=>{
|
|
106
|
+
if (verifies) {
|
|
107
|
+
const schema = this; ///
|
|
108
|
+
context.addSchema(schema);
|
|
109
|
+
context.debug(`...verified the '${schemaString}' schema.`);
|
|
111
110
|
}
|
|
112
|
-
|
|
111
|
+
return continuation(verifies);
|
|
112
|
+
});
|
|
113
113
|
}, this.constraints, context);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
context.addSchema(schema);
|
|
117
|
-
context.debug(`...verified the '${schemaString}' schema.`);
|
|
118
|
-
}
|
|
119
|
-
return verifies;
|
|
120
|
-
}
|
|
121
|
-
verifyLabel(context) {
|
|
122
|
-
let labelVerifies;
|
|
114
|
+
});
|
|
115
|
+
verifyLabel(context, continuation) {
|
|
123
116
|
const schemaString = this.getString(), labelString = this.label.getString();
|
|
124
117
|
context.trace(`Verifying the '${schemaString}' schema's '${labelString}' label...`);
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
118
|
+
return this.label.verify((labelVerifies)=>{
|
|
119
|
+
if (labelVerifies) {
|
|
120
|
+
context.debug(`...verified the '${schemaString}' schema's '${labelString}' label.`);
|
|
121
|
+
}
|
|
122
|
+
return continuation(labelVerifies);
|
|
123
|
+
});
|
|
130
124
|
}
|
|
131
|
-
|
|
132
|
-
let proofVerifies;
|
|
125
|
+
verifyProof(context, continuation) {
|
|
133
126
|
const schemaString = this.getString(); ///
|
|
134
127
|
context.trace(`Verifying the '${schemaString}' schema's proof...`);
|
|
135
128
|
const statement = this.deduction.getStatement();
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
129
|
+
return this.proof.verify(statement, context, (proofVerifies)=>{
|
|
130
|
+
if (proofVerifies) {
|
|
131
|
+
context.debug(`...verified the '${schemaString}' schema's proof.`);
|
|
132
|
+
}
|
|
133
|
+
return continuation(proofVerifies);
|
|
134
|
+
});
|
|
141
135
|
}
|
|
142
|
-
|
|
143
|
-
let deductionVerifies;
|
|
136
|
+
verifyDeduction(context, continuation) {
|
|
144
137
|
const schemaString = this.getString(), deductionString = this.deduction.getString();
|
|
145
138
|
context.trace(`Verifying the '${schemaString}' top level meta assertion's '${deductionString}' deduction...`);
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
async verifySupposition(supposition, context) {
|
|
153
|
-
let suppositionVerifies;
|
|
154
|
-
const schemaString = this.getString(), suppositionString = supposition.getString();
|
|
155
|
-
context.trace(`Verifying the '${schemaString}' schema's '${suppositionString}' supposition...`);
|
|
156
|
-
suppositionVerifies = await supposition.verify(context);
|
|
157
|
-
if (suppositionVerifies) {
|
|
158
|
-
const subproofOrProofAssertion = supposition; ////
|
|
159
|
-
context.assignAssignments();
|
|
160
|
-
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
161
|
-
}
|
|
162
|
-
if (suppositionVerifies) {
|
|
163
|
-
context.debug(`...verified the '${schemaString}' schema's '${suppositionString}' supposition.`);
|
|
164
|
-
}
|
|
165
|
-
return suppositionVerifies;
|
|
139
|
+
return this.deduction.verify(context, (deductionVerifies)=>{
|
|
140
|
+
if (deductionVerifies) {
|
|
141
|
+
context.debug(`...verified the '${schemaString}' top level meta assertion's '${deductionString}' deduction.`);
|
|
142
|
+
}
|
|
143
|
+
return continuation(deductionVerifies);
|
|
144
|
+
});
|
|
166
145
|
}
|
|
167
|
-
|
|
168
|
-
let suppositionsVerify;
|
|
146
|
+
verifySuppositions(context, continuation) {
|
|
169
147
|
const schemaString = this.getString(); ///
|
|
170
148
|
context.trace(`Verifying the '${schemaString}' schema's suppositions...`);
|
|
171
|
-
|
|
172
|
-
|
|
149
|
+
return forwardsEvery(this.suppositions, (supposition, continuation)=>{
|
|
150
|
+
return this.verifySupposition(supposition, context, continuation);
|
|
151
|
+
}, (suppositionsVerify)=>{
|
|
152
|
+
if (suppositionsVerify) {
|
|
153
|
+
context.debug(`...verified the '${schemaString}' schema's suppositions.`);
|
|
154
|
+
}
|
|
155
|
+
return continuation(suppositionsVerify);
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
verifySupposition(supposition, context, continuation) {
|
|
159
|
+
const schemaString = this.getString(), suppositionString = supposition.getString();
|
|
160
|
+
context.trace(`Verifying the '${schemaString}' schema's '${suppositionString}' supposition...`);
|
|
161
|
+
return supposition.verify(context, (suppositionVerifies)=>{
|
|
162
|
+
if (suppositionVerifies) {
|
|
163
|
+
const subproofOrProofAssertion = supposition; ////
|
|
164
|
+
context.assignAssignments();
|
|
165
|
+
context.addSubproofOrProofAssertion(subproofOrProofAssertion);
|
|
166
|
+
}
|
|
173
167
|
if (suppositionVerifies) {
|
|
174
|
-
|
|
168
|
+
context.debug(`...verified the '${schemaString}' schema's '${suppositionString}' supposition.`);
|
|
175
169
|
}
|
|
170
|
+
return continuation(suppositionVerifies);
|
|
176
171
|
});
|
|
177
|
-
if (suppositionsVerify) {
|
|
178
|
-
context.debug(`...verified the '${schemaString}' schema's suppositions.`);
|
|
179
|
-
}
|
|
180
|
-
return suppositionsVerify;
|
|
181
172
|
}
|
|
182
|
-
unifyJudgement(judgement, context) {
|
|
183
|
-
let judgementUnifies = false;
|
|
173
|
+
unifyJudgement(judgement, context, continuation) {
|
|
184
174
|
const schemaString = this.getString(), judgementString = judgement.getString();
|
|
185
175
|
context.trace(`Unifying the '${judgementString}' judgement with the '${schemaString}' schema...`);
|
|
186
176
|
(0, _context.reconcile)((context)=>{
|
|
187
|
-
const reference = judgement.getReference()
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
177
|
+
const reference = judgement.getReference();
|
|
178
|
+
return this.unifyReference(reference, context, (referenceUnifies)=>{
|
|
179
|
+
if (!referenceUnifies) {
|
|
180
|
+
const judgementUnifies = false;
|
|
181
|
+
return continuation(judgementUnifies);
|
|
182
|
+
}
|
|
183
|
+
const assumptions = judgement.getAssumptions(context);
|
|
184
|
+
return this.unifyAssumptions(assumptions, context, (assumptionsUnify)=>{
|
|
185
|
+
if (!assumptionsUnify) {
|
|
186
|
+
const judgementUnifies = false;
|
|
187
|
+
return continuation(judgementUnifies);
|
|
197
188
|
}
|
|
198
|
-
|
|
199
|
-
if (
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
189
|
+
const statement = judgement.getStatement(), conditional = this.isConditional(), subproofAssertion = subproofAssertionFromStatement(statement, context);
|
|
190
|
+
if (conditional) {
|
|
191
|
+
if (subproofAssertion === null) {
|
|
192
|
+
const judgementUnifies = false;
|
|
193
|
+
return continuation(judgementUnifies);
|
|
203
194
|
}
|
|
195
|
+
return this.unifySubproofAssertion(subproofAssertion, context, (subproofassertionUnifies)=>{
|
|
196
|
+
let judgementUnifies = false;
|
|
197
|
+
if (subproofassertionUnifies) {
|
|
198
|
+
judgementUnifies = true;
|
|
199
|
+
}
|
|
200
|
+
if (judgementUnifies) {
|
|
201
|
+
context.debug(`...unified the '${judgementString}' judgement with the '${schemaString}' schema.`);
|
|
202
|
+
}
|
|
203
|
+
return continuation(judgementUnifies);
|
|
204
|
+
});
|
|
204
205
|
}
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (assumptionsUnify) {
|
|
209
|
-
judgementUnifies = true;
|
|
206
|
+
if (subproofAssertion !== null) {
|
|
207
|
+
const judgementUnifies = false;
|
|
208
|
+
return continuation(judgementUnifies);
|
|
210
209
|
}
|
|
211
|
-
|
|
212
|
-
|
|
210
|
+
const deducedStatment = statement; ///
|
|
211
|
+
return this.unifyDeducedStatement(deducedStatment, context, (deducedStatmentUnfifies)=>{
|
|
212
|
+
let judgementUnifies = false;
|
|
213
|
+
if (deducedStatmentUnfifies) {
|
|
214
|
+
judgementUnifies = true;
|
|
215
|
+
}
|
|
216
|
+
if (judgementUnifies) {
|
|
217
|
+
context.debug(`...unified the '${judgementString}' judgement with the '${schemaString}' schema.`);
|
|
218
|
+
}
|
|
219
|
+
return continuation(judgementUnifies);
|
|
220
|
+
});
|
|
221
|
+
});
|
|
222
|
+
});
|
|
213
223
|
}, context);
|
|
214
|
-
if (judgementUnifies) {
|
|
215
|
-
context.debug(`...unified the '${judgementString}' judgement with the '${schemaString}' schema.`);
|
|
216
|
-
}
|
|
217
|
-
return judgementUnifies;
|
|
218
224
|
}
|
|
219
|
-
unifyReference(reference, context) {
|
|
220
|
-
let referenceUnifies;
|
|
225
|
+
unifyReference(reference, context, continuation) {
|
|
221
226
|
const schemaString = this.getString(), referenceString = reference.getString();
|
|
222
227
|
context.trace(`Unifying the '${referenceString}' reference with the '${schemaString}' schema...`);
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
}
|
|
227
|
-
return referenceUnifies;
|
|
228
|
-
}
|
|
229
|
-
unifyAssumptions(assumptions, context) {
|
|
230
|
-
const assumptionsUnify = this.constraints.every((constraint)=>{
|
|
231
|
-
const assumptionsUnify = constraint.unifyAssumptions(assumptions, context);
|
|
232
|
-
if (assumptionsUnify) {
|
|
233
|
-
return true;
|
|
228
|
+
return this.label.unifyReference(reference, context, (referenceUnifies)=>{
|
|
229
|
+
if (referenceUnifies) {
|
|
230
|
+
context.debug(`...unified the '${referenceString}' reference with the '${schemaString}' schema.`);
|
|
234
231
|
}
|
|
232
|
+
return continuation(referenceUnifies);
|
|
235
233
|
});
|
|
236
|
-
return assumptionsUnify;
|
|
237
234
|
}
|
|
238
|
-
|
|
239
|
-
|
|
235
|
+
unifyAssumptions(assumptions, context, continuation) {
|
|
236
|
+
every(this.constraints, (constraint, continuation)=>{
|
|
237
|
+
constraint.unifyAssumptions(assumptions, context, continuation);
|
|
238
|
+
}, continuation);
|
|
239
|
+
}
|
|
240
|
+
unifyDeducedStatement(deducedStatement, context, continuation) {
|
|
240
241
|
const deductionString = this.deduction.getString(), deducedStatementString = deducedStatement.getString();
|
|
241
242
|
context.trace(`Unifying the '${deducedStatementString}' deduced statement with the '${deductionString}' deductino...`);
|
|
242
|
-
const deductionContext = this.deduction.getContext(), statement = deducedStatement, generalContext = deductionContext, specificContext = context
|
|
243
|
-
|
|
244
|
-
deducedStatementUnifies =
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
243
|
+
const deductionContext = this.deduction.getContext(), statement = deducedStatement, generalContext = deductionContext, specificContext = context; ///
|
|
244
|
+
return this.deduction.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
|
|
245
|
+
let deducedStatementUnifies = false;
|
|
246
|
+
if (statementUnifies) {
|
|
247
|
+
deducedStatementUnifies = true;
|
|
248
|
+
}
|
|
249
|
+
if (deducedStatementUnifies) {
|
|
250
|
+
context.debug(`...unified the '${deducedStatementString}' deduced statement with the '${deductionString}' deduction`);
|
|
251
|
+
}
|
|
252
|
+
return continuation(deducedStatementUnifies);
|
|
253
|
+
});
|
|
250
254
|
}
|
|
251
|
-
unifySubproofAssertion(subproofAssertion, context) {
|
|
252
|
-
let subproofAssertionUnifies = false;
|
|
255
|
+
unifySubproofAssertion(subproofAssertion, context, continuation) {
|
|
253
256
|
const schemaString = this.getString(), subproofAssertionString = subproofAssertion.getString();
|
|
254
257
|
context.trace(`Unifying the '${subproofAssertionString}' subproof assertion with the '${schemaString}' schema...`);
|
|
255
|
-
const deducedStatement = subproofAssertion.getDeducedStatement()
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
subproofAssertionUnifies
|
|
258
|
+
const deducedStatement = subproofAssertion.getDeducedStatement();
|
|
259
|
+
return this.unifyDeducedStatement(deducedStatement, context, (deducedStatementUnifies)=>{
|
|
260
|
+
if (!deducedStatementUnifies) {
|
|
261
|
+
const subproofAssertionUnifies = false;
|
|
262
|
+
return continuation(subproofAssertionUnifies);
|
|
260
263
|
}
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
264
|
+
const supposedStatements = subproofAssertion.getSupposedStatements();
|
|
265
|
+
return this.unifySupposedStatements(supposedStatements, context, (supposedStatementsUnify)=>{
|
|
266
|
+
let subproofAssertionUnifies = false;
|
|
267
|
+
if (supposedStatementsUnify) {
|
|
268
|
+
subproofAssertionUnifies = true;
|
|
269
|
+
}
|
|
270
|
+
if (subproofAssertionUnifies) {
|
|
271
|
+
context.debug(`...unified the '${subproofAssertionString}' subproof assertion with the '${schemaString}' schema.`);
|
|
272
|
+
}
|
|
273
|
+
return continuation(subproofAssertionUnifies);
|
|
274
|
+
});
|
|
275
|
+
});
|
|
266
276
|
}
|
|
267
|
-
|
|
268
|
-
let supposedStatementUnifies = false;
|
|
277
|
+
unifySupposedStatement(supposedStatement, index, context, continuation) {
|
|
269
278
|
const supposition = this.getSupposition(index), suppositionString = supposition.getString(), supposedStatementString = supposedStatement.getString();
|
|
270
279
|
context.trace(`Unifying the '${supposedStatementString}' supposed statement with the '${suppositionString}' supposition...`);
|
|
271
|
-
const suppositionContext = supposition.getContext(), statement = supposedStatement, generalContext = suppositionContext, specificContext = context
|
|
272
|
-
|
|
273
|
-
supposedStatementUnifies =
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
280
|
+
const suppositionContext = supposition.getContext(), statement = supposedStatement, generalContext = suppositionContext, specificContext = context; ///
|
|
281
|
+
return supposition.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
|
|
282
|
+
let supposedStatementUnifies = false;
|
|
283
|
+
if (statementUnifies) {
|
|
284
|
+
supposedStatementUnifies = true;
|
|
285
|
+
}
|
|
286
|
+
if (supposedStatementUnifies) {
|
|
287
|
+
context.debug(`...unified the '${supposedStatementString}' supposed statement with the '${suppositionString}' supposition`);
|
|
288
|
+
}
|
|
289
|
+
return continuation(supposedStatementUnifies);
|
|
290
|
+
});
|
|
279
291
|
}
|
|
280
|
-
unifySupposedStatements(supposedStatements, context) {
|
|
281
|
-
let supposedStatementsUnify = false;
|
|
292
|
+
unifySupposedStatements(supposedStatements, context, continuation) {
|
|
282
293
|
const suppositionsLength = this.suppositions.length, supposedStatementsLength = supposedStatements.length;
|
|
283
|
-
if (suppositionsLength
|
|
284
|
-
supposedStatementsUnify =
|
|
285
|
-
|
|
286
|
-
if (supposedStatementUnifies) {
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
});
|
|
294
|
+
if (suppositionsLength !== supposedStatementsLength) {
|
|
295
|
+
const supposedStatementsUnify = false;
|
|
296
|
+
return continuation(supposedStatementsUnify);
|
|
290
297
|
}
|
|
291
|
-
|
|
298
|
+
let index = -1;
|
|
299
|
+
every(supposedStatements, (supposedStatement, continuation)=>{
|
|
300
|
+
index++;
|
|
301
|
+
return this.unifySupposedStatement(supposedStatement, index, context, continuation);
|
|
302
|
+
});
|
|
292
303
|
}
|
|
293
304
|
toJSON() {
|
|
294
305
|
const labelJSON = (0, _json.labelToLabelJSON)(this.label), deductionJSON = (0, _json.deductionToDeductionJSON)(this.deduction), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions), constraintsJSON = (0, _json.constraintsToConstraintsJSON)(this.constraints), string = this.getString();
|
|
@@ -322,4 +333,4 @@ function subproofAssertionFromStatement(statement, context) {
|
|
|
322
333
|
return subproofAssertion;
|
|
323
334
|
}
|
|
324
335
|
|
|
325
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3NjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgcmVjb25jaWxlLCBlbmNhcHN1bGF0ZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdHJpbmdcIjtcbmltcG9ydCB7IGxhYmVsRnJvbUpTT04sXG4gICAgICAgICBsYWJlbFRvTGFiZWxKU09OLFxuICAgICAgICAgZGVkdWN0aW9uRnJvbUpTT04sXG4gICAgICAgICBjb25zdHJhaW50c0Zyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04sXG4gICAgICAgICBjb25zdHJhaW50c1RvQ29uc3RyYWludHNKU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgZm9yd2FyZHNFdmVyeSB9ID0gY29udGludWF0aW9uVXRpbGl0aWVzLFxuICAgICAgeyBicmVha1BvaW50RnJvbUpTT04sIGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIH0gPSBicmVha1BvaW50VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBkZWZpbmUoY2xhc3MgU2NoZW1hIGV4dGVuZHMgRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIHN0cmluZywgbm9kZSwgYnJlYWtQb2ludCwgbGFiZWwsIHN1cHBvc2l0aW9ucywgZGVkdWN0aW9uLCBwcm9vZiwgY29uc3RyYWludHMpIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQpO1xuXG4gICAgdGhpcy5sYWJlbCA9IGxhYmVsO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuZGVkdWN0aW9uID0gZGVkdWN0aW9uO1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gIH1cblxuICBnZXRMYWJlbCgpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbDtcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXREZWR1Y3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uO1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBnZXRNQ29uc3RyYWludCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50cztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9uKGluZGV4KSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLnN1cHBvc2l0aW9uc1tpbmRleF0gfHwgbnVsbDtcblxuICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgfVxuXG4gIGlzQ29uZGl0aW9uYWwoKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGNvbmRpdGlvbmFsID0gKHN1cHBvc2l0aW9uc0xlbmd0aCA+IDApO1xuXG4gICAgcmV0dXJuIGNvbmRpdGlvbmFsO1xuICB9XG5cbiAgY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0TGFiZWwoKSxcbiAgICAgICAgICBsYWJlbENvbXBhcmVzVG9SZWZmZXJlbmNlID0gbGFiZWwuY29tcGFyZVJlZmVyZW5jZShyZWZlcmVuY2UpLFxuICAgICAgICAgIGNvbXBhcmVzVG9SZWZlcmVuY2UgPSBsYWJlbENvbXBhcmVzVG9SZWZmZXJlbmNlOyAgLy8vXG5cbiAgICByZXR1cm4gY29tcGFyZXNUb1JlZmVyZW5jZTtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVzO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIGF3YWl0IGVuY2Fwc3VsYXRlKGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCBsYWJlbFZlcmlmaWVzID0gdGhpcy52ZXJpZnlMYWJlbChjb250ZXh0KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25zVmVyaWZ5ID0gYXdhaXQgdGhpcy52ZXJpZnlTdXBwb3NpdGlvbnMoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmeSkge1xuICAgICAgICAgIGNvbnN0IGRlZHVjdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy52ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoZGVkdWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb29mVmVyaWZpZXMgPSBhd2FpdCB0aGlzLnZlcmlmeVByb29mKGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgdGhpcy5jb25zdHJhaW50cywgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnN0IHNjaGVtYSA9IHRoaXM7IC8vL1xuXG4gICAgICBjb250ZXh0LmFkZFNjaGVtYShzY2hlbWEpO1xuXG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllcztcbiAgfVxuXG4gIHZlcmlmeUxhYmVsKGNvbnRleHQpIHtcbiAgICBsZXQgbGFiZWxWZXJpZmllcztcblxuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IHRoaXMubGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIGxhYmVsVmVyaWZpZXMgPSB0aGlzLmxhYmVsLnZlcmlmeSgpO1xuXG4gICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyAnJHtsYWJlbFN0cmluZ30nIGxhYmVsLmApO1xuICAgIH1cblxuICAgIHJldHVybiBsYWJlbFZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5UHJvb2YoY29udGV4dCkge1xuICAgIGxldCBwcm9vZlZlcmlmaWVzO1xuXG4gICAgY29uc3Qgc2NoZW1hU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyBwcm9vZi4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBwcm9vZlZlcmlmaWVzID0gYXdhaXQgdGhpcy5wcm9vZi52ZXJpZnkoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChwcm9vZlZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hJ3MgcHJvb2YuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mVmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCkge1xuICAgIGxldCBkZWR1Y3Rpb25WZXJpZmllcztcblxuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvL1xuICAgICAgICAgIGRlZHVjdGlvblN0cmluZyA9IHRoaXMuZGVkdWN0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyB0b3AgbGV2ZWwgbWV0YSBhc3NlcnRpb24ncyAnJHtkZWR1Y3Rpb25TdHJpbmd9JyBkZWR1Y3Rpb24uLi5gKTtcblxuICAgIGRlZHVjdGlvblZlcmlmaWVzID0gYXdhaXQgdGhpcy5kZWR1Y3Rpb24udmVyaWZ5KGNvbnRleHQpO1xuXG4gICAgaWYgKGRlZHVjdGlvblZlcmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgdG9wIGxldmVsIG1ldGEgYXNzZXJ0aW9uJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBkZWR1Y3Rpb25WZXJpZmllcztcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1cHBvc2l0aW9uVmVyaWZpZXM7XG5cbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgc3VwcG9zaXRpb25WZXJpZmllcyA9IGF3YWl0IHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0KVxuXG4gICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnN0IHN1YnByb29mT3JQcm9vZkFzc2VydGlvbiA9IHN1cHBvc2l0aW9uOyAgLy8vL1xuXG4gICAgICBjb250ZXh0LmFzc2lnbkFzc2lnbm1lbnRzKCk7XG5cbiAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdXBwb3NpdGlvblZlcmlmaWVzO1xuICB9XG5cbiAgYXN5bmMgdmVyaWZ5U3VwcG9zaXRpb25zKGNvbnRleHQpIHtcbiAgICBsZXQgc3VwcG9zaXRpb25zVmVyaWZ5O1xuXG4gICAgY29uc3Qgc2NoZW1hU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgIC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyBzdXBwb3NpdGlvbnMuLi5gKTtcblxuICAgIHN1cHBvc2l0aW9uc1ZlcmlmeSA9IGF3YWl0IGZvcndhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIGFzeW5jIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllcyA9IGF3YWl0IHRoaXMudmVyaWZ5U3VwcG9zaXRpb24oc3VwcG9zaXRpb24sIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZnkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyBzdXBwb3NpdGlvbnMuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uc1ZlcmlmeTtcbiAgfVxuXG4gIHVuaWZ5SnVkZ2VtZW50KGp1ZGdlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBqdWRnZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0ganVkZ2VtZW50LmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgcmVmZXJlbmNlVW5pZmllcyA9IHRoaXMudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHJlZmVyZW5jZVVuaWZpZXMpIHtcbiAgICAgICAgbGV0IHN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBzdGF0ZW1lbnQgPSBqdWRnZW1lbnQuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgICAgICAgIGNvbmRpdGlvbmFsID0gdGhpcy5pc0NvbmRpdGlvbmFsKCksXG4gICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGNvbmRpdGlvbmFsKSB7XG4gICAgICAgICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzdWJwcm9vZmFzc2VydGlvblVuaWZpZXMgPSB0aGlzLnVuaWZ5U3VicHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoc3VicHJvb2Zhc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGRlZHVjZWRTdGF0bWVudCA9IHN0YXRlbWVudCwgIC8vL1xuICAgICAgICAgICAgICAgICAgZGVkdWNlZFN0YXRtZW50VW5maWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdG1lbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICBpZiAoZGVkdWNlZFN0YXRtZW50VW5maWZpZXMpIHtcbiAgICAgICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICBjb25zdCBhc3N1bXB0aW9ucyA9IGp1ZGdlbWVudC5nZXRBc3N1bXB0aW9ucyhjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBhc3N1bXB0aW9uc1VuaWZ5ID0gdGhpcy51bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChhc3N1bXB0aW9uc1VuaWZ5KSB7XG4gICAgICAgICAgICBqdWRnZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmIChqdWRnZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgd2l0aCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hLmApO1xuICAgIH1cblxuICAgIHJldHVybiBqdWRnZW1lbnRVbmlmaWVzO1xuICB9XG5cbiAgdW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVVuaWZpZXM7XG5cbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIHJlZmVyZW5jZVVuaWZpZXMgPSB0aGlzLmxhYmVsLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCk7XG5cbiAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7cmVmZXJlbmNlU3RyaW5nfScgcmVmZXJlbmNlIHdpdGggdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVmZXJlbmNlVW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBhc3N1bXB0aW9uc1VuaWZ5ID0gdGhpcy5jb25zdHJhaW50cy5ldmVyeSgoY29uc3RyYWludCkgPT4ge1xuICAgICAgY29uc3QgYXNzdW1wdGlvbnNVbmlmeSA9IGNvbnN0cmFpbnQudW5pZnlBc3N1bXB0aW9ucyhhc3N1bXB0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChhc3N1bXB0aW9uc1VuaWZ5KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFzc3VtcHRpb25zVW5pZnk7XG4gIH1cblxuICBhc3luYyB1bmlmeURlZHVjZWRTdGF0ZW1lbnQoZGVkdWNlZFN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBkZWR1Y2VkU3RhdGVtZW50VW5pZmllcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFN0cmluZyA9IGRlZHVjZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50IHdpdGggdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGluby4uLmApO1xuXG4gICAgY29uc3QgZGVkdWN0aW9uQ29udGV4dCA9IHRoaXMuZGVkdWN0aW9uLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gZGVkdWNlZFN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBkZWR1Y3Rpb25Db250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IGF3YWl0IHRoaXMuZGVkdWN0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChkZWR1Y2VkU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50IHdpdGggdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbmApO1xuICAgIH1cblxuICAgIHJldHVybiBkZWR1Y2VkU3RhdGVtZW50VW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgc3VicHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgc3VicHJvb2ZBc3NlcnRpb25TdHJpbmcgPSBzdWJwcm9vZkFzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdWJwcm9vZkFzc2VydGlvblN0cmluZ30nIHN1YnByb29mIGFzc2VydGlvbiB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIGNvbnN0IGRlZHVjZWRTdGF0ZW1lbnQgPSBzdWJwcm9vZkFzc2VydGlvbi5nZXREZWR1Y2VkU3RhdGVtZW50KCksXG4gICAgICAgICAgZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMgPSB0aGlzLnVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgIGlmIChkZWR1Y2VkU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRzID0gc3VicHJvb2ZBc3NlcnRpb24uZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzKCksXG4gICAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNVbmlmeSA9IHRoaXMudW5pZnlTdXBwb3NlZFN0YXRlbWVudHMoc3VwcG9zZWRTdGF0ZW1lbnRzLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN1cHBvc2VkU3RhdGVtZW50c1VuaWZ5KSB7XG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uVW5pZmllcykge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hLmApO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZkFzc2VydGlvblVuaWZpZXM7XG4gIH1cblxuICBhc3luYyB1bmlmeVN1cHBvc2VkU3RhdGVtZW50KHN1cHBvc2VkU3RhdGVtZW50LCBpbmRleCwgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NlZFN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gdGhpcy5nZXRTdXBwb3NpdGlvbihpbmRleCksXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudFN0cmluZyA9IHN1cHBvc2VkU3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1cHBvc2VkU3RhdGVtZW50U3RyaW5nfScgc3VwcG9zZWQgc3RhdGVtZW50IHdpdGggdGhlICcke3N1cHBvc2l0aW9uU3RyaW5nfScgc3VwcG9zaXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9uQ29udGV4dCA9IHN1cHBvc2l0aW9uLmdldENvbnRleHQoKSwgLy8vXG4gICAgICAgICAgc3RhdGVtZW50ID0gc3VwcG9zZWRTdGF0ZW1lbnQsIC8vL1xuICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gc3VwcG9zaXRpb25Db250ZXh0LCAvLy9cbiAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IGF3YWl0IHN1cHBvc2l0aW9uLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgc3VwcG9zZWRTdGF0ZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3VwcG9zZWRTdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdXBwb3NlZFN0YXRlbWVudFN0cmluZ30nIHN1cHBvc2VkIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cHBvc2VkU3RhdGVtZW50VW5pZmllcztcbiAgfVxuXG4gIHVuaWZ5U3VwcG9zZWRTdGF0ZW1lbnRzKHN1cHBvc2VkU3RhdGVtZW50cywgY29udGV4dCkge1xuICAgIGxldCBzdXBwb3NlZFN0YXRlbWVudHNVbmlmeSA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25zTGVuZ3RoID0gdGhpcy5zdXBwb3NpdGlvbnMubGVuZ3RoLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50c0xlbmd0aCA9IHN1cHBvc2VkU3RhdGVtZW50cy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoID09PSBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGgpIHtcbiAgICAgIHN1cHBvc2VkU3RhdGVtZW50c1VuaWZ5ID0gc3VwcG9zZWRTdGF0ZW1lbnRzLmV2ZXJ5KChzdXBwb3NlZFN0YXRlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3Qgc3VwcG9zZWRTdGF0ZW1lbnRVbmlmaWVzID0gdGhpcy51bmlmeVN1cHBvc2VkU3RhdGVtZW50KHN1cHBvc2VkU3RhdGVtZW50LCBpbmRleCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1cHBvc2VkU3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwcG9zZWRTdGF0ZW1lbnRzVW5pZnk7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxKU09OID0gbGFiZWxUb0xhYmVsSlNPTih0aGlzLmxhYmVsKSxcbiAgICAgICAgICBkZWR1Y3Rpb25KU09OID0gZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OKHRoaXMuZGVkdWN0aW9uKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBjb25zdHJhaW50c0pTT04gPSBjb25zdHJhaW50c1RvQ29uc3RyYWludHNKU09OKHRoaXMuY29uc3RyYWludHMpLFxuICAgICAgICAgIHN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7XG5cbiAgICBsZXQgYnJlYWtQb2ludDtcblxuICAgIGJyZWFrUG9pbnQgPSB0aGlzLmdldEJyZWFrUG9pbnQoKTtcblxuICAgIGNvbnN0IGJyZWFrUG9pbnRKU09OID0gYnJlYWtQb2ludFRvQnJlYWtQb2ludEpTT04oYnJlYWtQb2ludCk7XG5cbiAgICBicmVha1BvaW50ID0gYnJlYWtQb2ludEpTT047ICAvLy9cblxuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxKU09OLCAgLy8vXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uSlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzSlNPTiwgIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBzdHJpbmcsXG4gICAgICAgICAgICBicmVha1BvaW50LFxuICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICBkZWR1Y3Rpb24sXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnMsXG4gICAgICAgICAgICBjb25zdHJhaW50c1xuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJTY2hlbWFcIjtcblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgY29udGV4dCkge1xuICAgIGNvbnN0IGxhYmVsID0gbGFiZWxGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBkZWR1Y3Rpb24gPSBkZWR1Y3Rpb25Gcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBjb250ZXh0KSxcbiAgICAgICAgICBjb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc2NoZW1hU3RyaW5nRnJvbUxhYmVsU3VwcG9zaXRpb25zQW5kRGVkdWN0aW9uKGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiksXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRGcm9tSlNPTihqc29uKSxcbiAgICAgICAgICBwcm9vZiA9IG51bGwsXG4gICAgICAgICAgc2NoZW1hID0gbmV3IFNjaGVtYShjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIGNvbnN0cmFpbnRzKTtcblxuICAgIHJldHVybiBzY2hlbWE7XG4gIH1cbn0pO1xuXG5mdW5jdGlvbiBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdWJwcm9vZkFzc2VydGlvbjtcblxuICBjb25zdCB7IFN1YnByb29mQXNzZXJ0aW9uIH0gPSBlbGVtZW50cztcblxuICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBzdWJwcm9vZkFzc2VydGlvbiA9IHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN1YnByb29mQXNzZXJ0aW9uO1xuXG59XG4iXSwibmFtZXMiOlsiZm9yd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNjaGVtYSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsYWJlbCIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwiY29uc3RyYWludHMiLCJnZXRMYWJlbCIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0TUNvbnN0cmFpbnQiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc0NvbmRpdGlvbmFsIiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiY29uZGl0aW9uYWwiLCJjb21wYXJlUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSIsImNvbXBhcmVzVG9SZWZlcmVuY2UiLCJ2ZXJpZnkiLCJ2ZXJpZmllcyIsImJyZWFrIiwic2NoZW1hU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJlbmNhcHN1bGF0ZSIsImxhYmVsVmVyaWZpZXMiLCJ2ZXJpZnlMYWJlbCIsInN1cHBvc2l0aW9uc1ZlcmlmeSIsInZlcmlmeVN1cHBvc2l0aW9ucyIsImRlZHVjdGlvblZlcmlmaWVzIiwidmVyaWZ5RGVkdWN0aW9uIiwicHJvb2ZWZXJpZmllcyIsInZlcmlmeVByb29mIiwic2NoZW1hIiwiYWRkU2NoZW1hIiwiZGVidWciLCJsYWJlbFN0cmluZyIsInN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImRlZHVjdGlvblN0cmluZyIsInZlcmlmeVN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25WZXJpZmllcyIsInN1cHBvc2l0aW9uU3RyaW5nIiwic3VicHJvb2ZPclByb29mQXNzZXJ0aW9uIiwiYXNzaWduQXNzaWdubWVudHMiLCJhZGRTdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJ1bmlmeUp1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudFVuaWZpZXMiLCJqdWRnZW1lbnRTdHJpbmciLCJyZWNvbmNpbGUiLCJnZXRSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwidW5pZnlSZWZlcmVuY2UiLCJzdGF0ZW1lbnRVbmlmaWVzIiwic3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJzdWJwcm9vZmFzc2VydGlvblVuaWZpZXMiLCJ1bmlmeVN1YnByb29mQXNzZXJ0aW9uIiwiZGVkdWNlZFN0YXRtZW50IiwiZGVkdWNlZFN0YXRtZW50VW5maWZpZXMiLCJ1bmlmeURlZHVjZWRTdGF0ZW1lbnQiLCJhc3N1bXB0aW9ucyIsImdldEFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInVuaWZ5QXNzdW1wdGlvbnMiLCJyZWZlcmVuY2VTdHJpbmciLCJldmVyeSIsImNvbnN0cmFpbnQiLCJkZWR1Y2VkU3RhdGVtZW50IiwiZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMiLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXREZWR1Y2VkU3RhdGVtZW50Iiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwiZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzIiwic3VwcG9zZWRTdGF0ZW1lbnRzVW5pZnkiLCJ1bmlmeVN1cHBvc2VkU3RhdGVtZW50cyIsInVuaWZ5U3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NlZFN0YXRlbWVudCIsInN1cHBvc2VkU3RhdGVtZW50VW5pZmllcyIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwibGFiZWxKU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwiY29uc3RyYWludHNKU09OIiwiY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJsYWJlbEZyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsImNvbnN0cmFpbnRzRnJvbUpTT04iLCJzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCIsInZhbGlkYXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFxQkE7OztlQUFBOzs7Z0NBbkJvRTtrRUFFL0M7eUJBR2tCO3dCQUN1QjtzQkFRZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLE1BQU0sRUFBRUEsYUFBYSxFQUFFLEdBQUdDLHFDQUFxQixFQUN6QyxFQUFFQyxrQkFBa0IsRUFBRUMsMEJBQTBCLEVBQUUsR0FBR0MsbUNBQW1CO01BRTlFLFdBQWVDLElBQUFBLGdCQUFNLEVBQUMsTUFBTUMsZUFBZUMsdUJBQU87SUFDaEQsWUFBWUMsT0FBTyxFQUFFQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsVUFBVSxFQUFFQyxLQUFLLEVBQUVDLFlBQVksRUFBRUMsU0FBUyxFQUFFQyxLQUFLLEVBQUVDLFdBQVcsQ0FBRTtRQUNqRyxLQUFLLENBQUNSLFNBQVNDLFFBQVFDLE1BQU1DO1FBRTdCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLFNBQVMsR0FBR0E7UUFDakIsSUFBSSxDQUFDQyxLQUFLLEdBQUdBO1FBQ2IsSUFBSSxDQUFDQyxXQUFXLEdBQUdBO0lBQ3JCO0lBRUFDLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ0wsS0FBSztJQUNuQjtJQUVBTSxrQkFBa0I7UUFDaEIsT0FBTyxJQUFJLENBQUNMLFlBQVk7SUFDMUI7SUFFQU0sZUFBZTtRQUNiLE9BQU8sSUFBSSxDQUFDTCxTQUFTO0lBQ3ZCO0lBRUFNLFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQ0wsS0FBSztJQUNuQjtJQUVBTSxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQ0wsV0FBVztJQUN6QjtJQUVBTSxlQUFlQyxLQUFLLEVBQUU7UUFDcEIsTUFBTUMsY0FBYyxJQUFJLENBQUNYLFlBQVksQ0FBQ1UsTUFBTSxJQUFJO1FBRWhELE9BQU9DO0lBQ1Q7SUFFQUMsZ0JBQWdCO1FBQ2QsTUFBTUMscUJBQXFCLElBQUksQ0FBQ2IsWUFBWSxDQUFDYyxNQUFNLEVBQzdDQyxjQUFlRixxQkFBcUI7UUFFMUMsT0FBT0U7SUFDVDtJQUVBQyxpQkFBaUJDLFNBQVMsRUFBRTtRQUMxQixNQUFNbEIsUUFBUSxJQUFJLENBQUNLLFFBQVEsSUFDckJjLDRCQUE0Qm5CLE1BQU1pQixnQkFBZ0IsQ0FBQ0MsWUFDbkRFLHNCQUFzQkQsMkJBQTRCLEdBQUc7UUFFM0QsT0FBT0M7SUFDVDtJQUVBLE1BQU1DLE9BQU96QixPQUFPLEVBQUU7UUFDcEIsSUFBSTBCO1FBRUosTUFBTSxJQUFJLENBQUNDLEtBQUssQ0FBQzNCO1FBRWpCLE1BQU00QixlQUFlLElBQUksQ0FBQ0MsU0FBUyxJQUFJLEdBQUc7UUFFMUM3QixRQUFROEIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixhQUFhLFdBQVcsQ0FBQztRQUV6RCxNQUFNRyxJQUFBQSxvQkFBVyxFQUFDLE9BQU8vQjtZQUN2QixNQUFNZ0MsZ0JBQWdCLElBQUksQ0FBQ0MsV0FBVyxDQUFDakM7WUFFdkMsSUFBSWdDLGVBQWU7Z0JBQ2pCLE1BQU1FLHFCQUFxQixNQUFNLElBQUksQ0FBQ0Msa0JBQWtCLENBQUNuQztnQkFFekQsSUFBSWtDLG9CQUFvQjtvQkFDdEIsTUFBTUUsb0JBQW9CLE1BQU0sSUFBSSxDQUFDQyxlQUFlLENBQUNyQztvQkFFckQsSUFBSW9DLG1CQUFtQjt3QkFDckIsTUFBTUUsZ0JBQWdCLE1BQU0sSUFBSSxDQUFDQyxXQUFXLENBQUN2Qzt3QkFFN0MsSUFBSXNDLGVBQWU7NEJBQ2pCWixXQUFXO3dCQUNiO29CQUNGO2dCQUNGO1lBQ0Y7UUFDRixHQUFHLElBQUksQ0FBQ2xCLFdBQVcsRUFBRVI7UUFFckIsSUFBSTBCLFVBQVU7WUFDWixNQUFNYyxTQUFTLElBQUksRUFBRSxHQUFHO1lBRXhCeEMsUUFBUXlDLFNBQVMsQ0FBQ0Q7WUFFbEJ4QyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVkLGFBQWEsU0FBUyxDQUFDO1FBQzNEO1FBRUEsT0FBT0Y7SUFDVDtJQUVBTyxZQUFZakMsT0FBTyxFQUFFO1FBQ25CLElBQUlnQztRQUVKLE1BQU1KLGVBQWUsSUFBSSxDQUFDQyxTQUFTLElBQzdCYyxjQUFjLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQ3lCLFNBQVM7UUFFeEM3QixRQUFROEIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixhQUFhLFlBQVksRUFBRWUsWUFBWSxVQUFVLENBQUM7UUFFbEZYLGdCQUFnQixJQUFJLENBQUM1QixLQUFLLENBQUNxQixNQUFNO1FBRWpDLElBQUlPLGVBQWU7WUFDakJoQyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVkLGFBQWEsWUFBWSxFQUFFZSxZQUFZLFFBQVEsQ0FBQztRQUNwRjtRQUVBLE9BQU9YO0lBQ1Q7SUFFQSxNQUFNTyxZQUFZdkMsT0FBTyxFQUFFO1FBQ3pCLElBQUlzQztRQUVKLE1BQU1WLGVBQWUsSUFBSSxDQUFDQyxTQUFTLElBQUssR0FBRztRQUUzQzdCLFFBQVE4QixLQUFLLENBQUMsQ0FBQyxlQUFlLEVBQUVGLGFBQWEsbUJBQW1CLENBQUM7UUFFakUsTUFBTWdCLFlBQVksSUFBSSxDQUFDdEMsU0FBUyxDQUFDdUMsWUFBWTtRQUU3Q1AsZ0JBQWdCLE1BQU0sSUFBSSxDQUFDL0IsS0FBSyxDQUFDa0IsTUFBTSxDQUFDbUIsV0FBVzVDO1FBRW5ELElBQUlzQyxlQUFlO1lBQ2pCdEMsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFZCxhQUFhLGlCQUFpQixDQUFDO1FBQ25FO1FBRUEsT0FBT1U7SUFDVDtJQUVBLE1BQU1ELGdCQUFnQnJDLE9BQU8sRUFBRTtRQUM3QixJQUFJb0M7UUFFSixNQUFNUixlQUFlLElBQUksQ0FBQ0MsU0FBUyxJQUM3QmlCLGtCQUFrQixJQUFJLENBQUN4QyxTQUFTLENBQUN1QixTQUFTO1FBRWhEN0IsUUFBUThCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsYUFBYSw4QkFBOEIsRUFBRWtCLGdCQUFnQixjQUFjLENBQUM7UUFFNUdWLG9CQUFvQixNQUFNLElBQUksQ0FBQzlCLFNBQVMsQ0FBQ21CLE1BQU0sQ0FBQ3pCO1FBRWhELElBQUlvQyxtQkFBbUI7WUFDckJwQyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVkLGFBQWEsOEJBQThCLEVBQUVrQixnQkFBZ0IsWUFBWSxDQUFDO1FBQzlHO1FBRUEsT0FBT1Y7SUFDVDtJQUVBLE1BQU1XLGtCQUFrQi9CLFdBQVcsRUFBRWhCLE9BQU8sRUFBRTtRQUM1QyxJQUFJZ0Q7UUFFSixNQUFNcEIsZUFBZSxJQUFJLENBQUNDLFNBQVMsSUFDN0JvQixvQkFBb0JqQyxZQUFZYSxTQUFTO1FBRS9DN0IsUUFBUThCLEtBQUssQ0FBQyxDQUFDLGVBQWUsRUFBRUYsYUFBYSxZQUFZLEVBQUVxQixrQkFBa0IsZ0JBQWdCLENBQUM7UUFFOUZELHNCQUFzQixNQUFNaEMsWUFBWVMsTUFBTSxDQUFDekI7UUFFL0MsSUFBSWdELHFCQUFxQjtZQUN2QixNQUFNRSwyQkFBMkJsQyxhQUFjLElBQUk7WUFFbkRoQixRQUFRbUQsaUJBQWlCO1lBRXpCbkQsUUFBUW9ELDJCQUEyQixDQUFDRjtRQUN0QztRQUVBLElBQUlGLHFCQUFxQjtZQUN2QmhELFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxpQkFBaUIsRUFBRWQsYUFBYSxZQUFZLEVBQUVxQixrQkFBa0IsY0FBYyxDQUFDO1FBQ2hHO1FBRUEsT0FBT0Q7SUFDVDtJQUVBLE1BQU1iLG1CQUFtQm5DLE9BQU8sRUFBRTtRQUNoQyxJQUFJa0M7UUFFSixNQUFNTixlQUFlLElBQUksQ0FBQ0MsU0FBUyxJQUFLLEdBQUc7UUFFM0M3QixRQUFROEIsS0FBSyxDQUFDLENBQUMsZUFBZSxFQUFFRixhQUFhLDBCQUEwQixDQUFDO1FBRXhFTSxxQkFBcUIsTUFBTTFDLGNBQWMsSUFBSSxDQUFDYSxZQUFZLEVBQUUsT0FBT1c7WUFDakUsTUFBTWdDLHNCQUFzQixNQUFNLElBQUksQ0FBQ0QsaUJBQWlCLENBQUMvQixhQUFhaEI7WUFFdEUsSUFBSWdELHFCQUFxQjtnQkFDdkIsT0FBTztZQUNUO1FBQ0Y7UUFFQSxJQUFJZCxvQkFBb0I7WUFDdEJsQyxRQUFRMEMsS0FBSyxDQUFDLENBQUMsaUJBQWlCLEVBQUVkLGFBQWEsd0JBQXdCLENBQUM7UUFDMUU7UUFFQSxPQUFPTTtJQUNUO0lBRUFtQixlQUFlQyxTQUFTLEVBQUV0RCxPQUFPLEVBQUU7UUFDakMsSUFBSXVELG1CQUFtQjtRQUV2QixNQUFNM0IsZUFBZSxJQUFJLENBQUNDLFNBQVMsSUFDN0IyQixrQkFBa0JGLFVBQVV6QixTQUFTO1FBRTNDN0IsUUFBUThCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRTBCLGdCQUFnQixzQkFBc0IsRUFBRTVCLGFBQWEsV0FBVyxDQUFDO1FBRWhHNkIsSUFBQUEsa0JBQVMsRUFBQyxDQUFDekQ7WUFDVCxNQUFNc0IsWUFBWWdDLFVBQVVJLFlBQVksSUFDbENDLG1CQUFtQixJQUFJLENBQUNDLGNBQWMsQ0FBQ3RDLFdBQVd0QjtZQUV4RCxJQUFJMkQsa0JBQWtCO2dCQUNwQixJQUFJRSxtQkFBbUI7Z0JBRXZCLE1BQU1qQixZQUFZVSxVQUFVVCxZQUFZLElBQ2xDekIsY0FBYyxJQUFJLENBQUNILGFBQWEsSUFDaEM2QyxvQkFBb0JDLCtCQUErQm5CLFdBQVc1QztnQkFFcEUsSUFBSW9CLGFBQWE7b0JBQ2YsSUFBSTBDLHNCQUFzQixNQUFNO3dCQUM5QixNQUFNRSwyQkFBMkIsSUFBSSxDQUFDQyxzQkFBc0IsQ0FBQ0gsbUJBQW1COUQ7d0JBRWhGLElBQUlnRSwwQkFBMEI7NEJBQzVCSCxtQkFBbUI7d0JBQ3JCO29CQUNGO2dCQUNGLE9BQU87b0JBQ0wsSUFBSUMsc0JBQXNCLE1BQU07d0JBQzlCLE1BQU1JLGtCQUFrQnRCLFdBQ2xCdUIsMEJBQTBCLElBQUksQ0FBQ0MscUJBQXFCLENBQUNGLGlCQUFpQmxFO3dCQUU1RSxJQUFJbUUseUJBQXlCOzRCQUMzQk4sbUJBQW1CO3dCQUNyQjtvQkFDRjtnQkFDRjtnQkFFQSxJQUFJQSxrQkFBa0I7b0JBQ3BCLE1BQU1RLGNBQWNmLFVBQVVnQixjQUFjLENBQUN0RSxVQUN2Q3VFLG1CQUFtQixJQUFJLENBQUNDLGdCQUFnQixDQUFDSCxhQUFhckU7b0JBRTVELElBQUl1RSxrQkFBa0I7d0JBQ3BCaEIsbUJBQW1CO29CQUNyQjtnQkFDRjtZQUNGO1FBQ0YsR0FBR3ZEO1FBRUgsSUFBSXVELGtCQUFrQjtZQUNwQnZELFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRWMsZ0JBQWdCLHNCQUFzQixFQUFFNUIsYUFBYSxTQUFTLENBQUM7UUFDbEc7UUFFQSxPQUFPMkI7SUFDVDtJQUVBSyxlQUFldEMsU0FBUyxFQUFFdEIsT0FBTyxFQUFFO1FBQ2pDLElBQUkyRDtRQUVKLE1BQU0vQixlQUFlLElBQUksQ0FBQ0MsU0FBUyxJQUM3QjRDLGtCQUFrQm5ELFVBQVVPLFNBQVM7UUFFM0M3QixRQUFROEIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFMkMsZ0JBQWdCLHNCQUFzQixFQUFFN0MsYUFBYSxXQUFXLENBQUM7UUFFaEcrQixtQkFBbUIsSUFBSSxDQUFDdkQsS0FBSyxDQUFDd0QsY0FBYyxDQUFDdEMsV0FBV3RCO1FBRXhELElBQUkyRCxrQkFBa0I7WUFDcEIzRCxRQUFRMEMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUUrQixnQkFBZ0Isc0JBQXNCLEVBQUU3QyxhQUFhLFNBQVMsQ0FBQztRQUNsRztRQUVBLE9BQU8rQjtJQUNUO0lBRUFhLGlCQUFpQkgsV0FBVyxFQUFFckUsT0FBTyxFQUFFO1FBQ3JDLE1BQU11RSxtQkFBbUIsSUFBSSxDQUFDL0QsV0FBVyxDQUFDa0UsS0FBSyxDQUFDLENBQUNDO1lBQy9DLE1BQU1KLG1CQUFtQkksV0FBV0gsZ0JBQWdCLENBQUNILGFBQWFyRTtZQUVsRSxJQUFJdUUsa0JBQWtCO2dCQUNwQixPQUFPO1lBQ1Q7UUFDRjtRQUVBLE9BQU9BO0lBQ1Q7SUFFQSxNQUFNSCxzQkFBc0JRLGdCQUFnQixFQUFFNUUsT0FBTyxFQUFFO1FBQ3JELElBQUk2RSwwQkFBMEI7UUFFOUIsTUFBTS9CLGtCQUFrQixJQUFJLENBQUN4QyxTQUFTLENBQUN1QixTQUFTLElBQzFDaUQseUJBQXlCRixpQkFBaUIvQyxTQUFTO1FBRXpEN0IsUUFBUThCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRWdELHVCQUF1Qiw4QkFBOEIsRUFBRWhDLGdCQUFnQixjQUFjLENBQUM7UUFFckgsTUFBTWlDLG1CQUFtQixJQUFJLENBQUN6RSxTQUFTLENBQUMwRSxVQUFVLElBQzVDcEMsWUFBWWdDLGtCQUNaSyxpQkFBaUJGLGtCQUNqQkcsa0JBQWtCbEYsU0FDbEI2RCxtQkFBbUIsTUFBTSxJQUFJLENBQUN2RCxTQUFTLENBQUM2RSxjQUFjLENBQUN2QyxXQUFXcUMsZ0JBQWdCQztRQUV4RixJQUFJckIsa0JBQWtCO1lBQ3BCZ0IsMEJBQTBCO1FBQzVCO1FBRUEsSUFBSUEseUJBQXlCO1lBQzNCN0UsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFb0MsdUJBQXVCLDhCQUE4QixFQUFFaEMsZ0JBQWdCLFdBQVcsQ0FBQztRQUN0SDtRQUVBLE9BQU8rQjtJQUNUO0lBRUFaLHVCQUF1QkgsaUJBQWlCLEVBQUU5RCxPQUFPLEVBQUU7UUFDakQsSUFBSW9GLDJCQUEyQjtRQUUvQixNQUFNeEQsZUFBZSxJQUFJLENBQUNDLFNBQVMsSUFDN0J3RCwwQkFBMEJ2QixrQkFBa0JqQyxTQUFTO1FBRTNEN0IsUUFBUThCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRXVELHdCQUF3QiwrQkFBK0IsRUFBRXpELGFBQWEsV0FBVyxDQUFDO1FBRWpILE1BQU1nRCxtQkFBbUJkLGtCQUFrQndCLG1CQUFtQixJQUN4RFQsMEJBQTBCLElBQUksQ0FBQ1QscUJBQXFCLENBQUNRLGtCQUFrQjVFO1FBRTdFLElBQUk2RSx5QkFBeUI7WUFDM0IsTUFBTVUscUJBQXFCekIsa0JBQWtCMEIscUJBQXFCLElBQzVEQywwQkFBMEIsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ0gsb0JBQW9CdkY7WUFFakYsSUFBSXlGLHlCQUF5QjtnQkFDM0JMLDJCQUEyQjtZQUM3QjtRQUNGO1FBRUEsSUFBSUEsMEJBQTBCO1lBQzVCcEYsUUFBUTBDLEtBQUssQ0FBQyxDQUFDLGdCQUFnQixFQUFFMkMsd0JBQXdCLCtCQUErQixFQUFFekQsYUFBYSxTQUFTLENBQUM7UUFDbkg7UUFFQSxPQUFPd0Q7SUFDVDtJQUVBLE1BQU1PLHVCQUF1QkMsaUJBQWlCLEVBQUU3RSxLQUFLLEVBQUVmLE9BQU8sRUFBRTtRQUM5RCxJQUFJNkYsMkJBQTJCO1FBRS9CLE1BQU03RSxjQUFjLElBQUksQ0FBQ0YsY0FBYyxDQUFDQyxRQUNsQ2tDLG9CQUFvQmpDLFlBQVlhLFNBQVMsSUFDekNpRSwwQkFBMEJGLGtCQUFrQi9ELFNBQVM7UUFFM0Q3QixRQUFROEIsS0FBSyxDQUFDLENBQUMsY0FBYyxFQUFFZ0Usd0JBQXdCLCtCQUErQixFQUFFN0Msa0JBQWtCLGdCQUFnQixDQUFDO1FBRTNILE1BQU04QyxxQkFBcUIvRSxZQUFZZ0UsVUFBVSxJQUMzQ3BDLFlBQVlnRCxtQkFDWlgsaUJBQWlCYyxvQkFDakJiLGtCQUFrQmxGLFNBQ2xCNkQsbUJBQW1CLE1BQU03QyxZQUFZbUUsY0FBYyxDQUFDdkMsV0FBV3FDLGdCQUFnQkM7UUFFckYsSUFBSXJCLGtCQUFrQjtZQUNwQmdDLDJCQUEyQjtRQUM3QjtRQUVBLElBQUlBLDBCQUEwQjtZQUM1QjdGLFFBQVEwQyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRW9ELHdCQUF3QiwrQkFBK0IsRUFBRTdDLGtCQUFrQixhQUFhLENBQUM7UUFDNUg7UUFFQSxPQUFPNEM7SUFDVDtJQUVBSCx3QkFBd0JILGtCQUFrQixFQUFFdkYsT0FBTyxFQUFFO1FBQ25ELElBQUl5RiwwQkFBMEI7UUFFOUIsTUFBTXZFLHFCQUFxQixJQUFJLENBQUNiLFlBQVksQ0FBQ2MsTUFBTSxFQUM3QzZFLDJCQUEyQlQsbUJBQW1CcEUsTUFBTTtRQUUxRCxJQUFJRCx1QkFBdUI4RSwwQkFBMEI7WUFDbkRQLDBCQUEwQkYsbUJBQW1CYixLQUFLLENBQUMsQ0FBQ2tCLG1CQUFtQjdFO2dCQUNyRSxNQUFNOEUsMkJBQTJCLElBQUksQ0FBQ0Ysc0JBQXNCLENBQUNDLG1CQUFtQjdFLE9BQU9mO2dCQUV2RixJQUFJNkYsMEJBQTBCO29CQUM1QixPQUFPO2dCQUNUO1lBQ0Y7UUFDRjtRQUVBLE9BQU9KO0lBQ1Q7SUFFQVEsU0FBUztRQUNQLE1BQU1DLFlBQVlDLElBQUFBLHNCQUFnQixFQUFDLElBQUksQ0FBQy9GLEtBQUssR0FDdkNnRyxnQkFBZ0JDLElBQUFBLDhCQUF3QixFQUFDLElBQUksQ0FBQy9GLFNBQVMsR0FDdkRnRyxtQkFBbUJDLElBQUFBLG9DQUE4QixFQUFDLElBQUksQ0FBQ2xHLFlBQVksR0FDbkVtRyxrQkFBa0JDLElBQUFBLGtDQUE0QixFQUFDLElBQUksQ0FBQ2pHLFdBQVcsR0FDL0RQLFNBQVMsSUFBSSxDQUFDNEIsU0FBUztRQUU3QixJQUFJMUI7UUFFSkEsYUFBYSxJQUFJLENBQUN1RyxhQUFhO1FBRS9CLE1BQU1DLGlCQUFpQmhILDJCQUEyQlE7UUFFbERBLGFBQWF3RyxnQkFBaUIsR0FBRztRQUVqQyxNQUFNdkcsUUFBUThGLFdBQ1I1RixZQUFZOEYsZUFDWi9GLGVBQWVpRyxrQkFDZjlGLGNBQWNnRyxpQkFDZEksT0FBTztZQUNMM0c7WUFDQUU7WUFDQUM7WUFDQUU7WUFDQUQ7WUFDQUc7UUFDRjtRQUVOLE9BQU9vRztJQUNUO0lBRUEsT0FBT0MsT0FBTyxTQUFTO0lBRXZCLE9BQU9DLFNBQVNGLElBQUksRUFBRTVHLE9BQU8sRUFBRTtRQUM3QixNQUFNSSxRQUFRMkcsSUFBQUEsbUJBQWEsRUFBQ0gsTUFBTTVHLFVBQzVCTSxZQUFZMEcsSUFBQUEsdUJBQWlCLEVBQUNKLE1BQU01RyxVQUNwQ0ssZUFBZTRHLElBQUFBLDBCQUFvQixFQUFDTCxNQUFNNUcsVUFDMUNRLGNBQWMwRyxJQUFBQSx5QkFBbUIsRUFBQ04sTUFBTTVHLFVBQ3hDQyxTQUFTa0gsSUFBQUEscURBQTZDLEVBQUMvRyxPQUFPQyxjQUFjQyxZQUM1RUosT0FBTyxNQUNQQyxhQUFhVCxtQkFBbUJrSCxPQUNoQ3JHLFFBQVEsTUFDUmlDLFNBQVMsSUFBSTFDLE9BQU9FLFNBQVNDLFFBQVFDLE1BQU1DLFlBQVlDLE9BQU9DLGNBQWNDLFdBQVdDLE9BQU9DO1FBRXBHLE9BQU9nQztJQUNUO0FBQ0Y7QUFFQSxTQUFTdUIsK0JBQStCbkIsU0FBUyxFQUFFNUMsT0FBTztJQUN4RCxJQUFJOEQ7SUFFSixNQUFNLEVBQUVzRCxpQkFBaUIsRUFBRSxHQUFHQyxpQkFBUTtJQUV0Q3ZELG9CQUFvQnNELGtCQUFrQkUsYUFBYSxDQUFDMUUsV0FBVzVDO0lBRS9ELElBQUk4RCxzQkFBc0IsTUFBTTtRQUM5QkEsb0JBQW9CQSxrQkFBa0J5RCxRQUFRLENBQUN2SDtJQUNqRDtJQUVBLE9BQU84RDtBQUVUIn0=
|
|
336
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L3NjaGVtYS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgRWxlbWVudCwgYnJlYWtQb2ludFV0aWxpdGllcywgY29udGludWF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5cbmltcG9ydCB7IGFsbCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGludWF0aW9uXCI7XG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHJlY29uY2lsZSwgZW5jYXBzdWxhdGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbiB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBsYWJlbEZyb21KU09OLFxuICAgICAgICAgbGFiZWxUb0xhYmVsSlNPTixcbiAgICAgICAgIGRlZHVjdGlvbkZyb21KU09OLFxuICAgICAgICAgY29uc3RyYWludHNGcm9tSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc0Zyb21KU09OLFxuICAgICAgICAgZGVkdWN0aW9uVG9EZWR1Y3Rpb25KU09OLFxuICAgICAgICAgY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiB9IGZyb20gXCIuLi91dGlsaXRpZXMvanNvblwiO1xuXG5jb25zdCB7IGV2ZXJ5LCBmb3J3YXJkc0V2ZXJ5IH0gPSBjb250aW51YXRpb25VdGlsaXRpZXMsXG4gICAgICB7IGJyZWFrYWJsZSwgYnJlYWtQb2ludEZyb21KU09OLCBicmVha1BvaW50VG9CcmVha1BvaW50SlNPTiB9ID0gYnJlYWtQb2ludFV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIFNjaGVtYSBleHRlbmRzIEVsZW1lbnQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIGJyZWFrUG9pbnQsIGxhYmVsLCBzdXBwb3NpdGlvbnMsIGRlZHVjdGlvbiwgcHJvb2YsIGNvbnN0cmFpbnRzKSB7XG4gICAgc3VwZXIoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50KTtcblxuICAgIHRoaXMubGFiZWwgPSBsYWJlbDtcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmRlZHVjdGlvbiA9IGRlZHVjdGlvbjtcbiAgICB0aGlzLnByb29mID0gcHJvb2Y7XG4gICAgdGhpcy5jb25zdHJhaW50cyA9IGNvbnN0cmFpbnRzO1xuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWw7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0RGVkdWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbjtcbiAgfVxuXG4gIGdldFByb29mKCkge1xuICAgIHJldHVybiB0aGlzLnByb29mO1xuICB9XG5cbiAgZ2V0TUNvbnN0cmFpbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RyYWludHM7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbihpbmRleCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gdGhpcy5zdXBwb3NpdGlvbnNbaW5kZXhdIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3VwcG9zaXRpb247XG4gIH1cblxuICBpc0NvbmRpdGlvbmFsKCkge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBjb25kaXRpb25hbCA9IChzdXBwb3NpdGlvbnNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBjb25kaXRpb25hbDtcbiAgfVxuXG4gIGNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmdldExhYmVsKCksXG4gICAgICAgICAgbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSA9IGxhYmVsLmNvbXBhcmVSZWZlcmVuY2UocmVmZXJlbmNlKSxcbiAgICAgICAgICBjb21wYXJlc1RvUmVmZXJlbmNlID0gbGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZTsgIC8vL1xuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9SZWZlcmVuY2U7XG4gIH1cblxuICB2ZXJpZnkgPSBicmVha2FibGUoZnVuY3Rpb24gKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIGVuY2Fwc3VsYXRlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB2ZXJpZnlMYWJlbCA9IHRoaXMudmVyaWZ5TGFiZWwuYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVByb29mID0gdGhpcy52ZXJpZnlQcm9vZi5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdmVyaWZ5RGVkdWN0aW9uID0gdGhpcy52ZXJpZnlEZWR1Y3Rpb24uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIHZlcmlmeVN1cHBvc2l0aW9ucyA9IHRoaXMudmVyaWZ5U3VwcG9zaXRpb25zLmJpbmQodGhpcyk7XG5cbiAgICAgIHJldHVybiBhbGwoW1xuICAgICAgICB2ZXJpZnlMYWJlbCxcbiAgICAgICAgdmVyaWZ5U3VwcG9zaXRpb25zLFxuICAgICAgICB2ZXJpZnlEZWR1Y3Rpb24sXG4gICAgICAgIHZlcmlmeVByb29mXG4gICAgICBdLCBjb250ZXh0LCAodmVyaWZpZXMpID0+IHtcbiAgICAgICAgaWYgKHZlcmlmaWVzKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpczsgLy8vXG5cbiAgICAgICAgICBjb250ZXh0LmFkZFNjaGVtYShzY2hlbWEpO1xuXG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250aW51YXRpb24odmVyaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5jb25zdHJhaW50cywgY29udGV4dCk7XG4gIH0pO1xuXG4gIHZlcmlmeUxhYmVsKGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBsYWJlbFN0cmluZyA9IHRoaXMubGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmxhYmVsLnZlcmlmeSgobGFiZWxWZXJpZmllcykgPT4ge1xuICAgICAgaWYgKGxhYmVsVmVyaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzICcke2xhYmVsU3RyaW5nfScgbGFiZWwuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24obGFiZWxWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlQcm9vZihjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIHByb29mLi4uYCk7XG5cbiAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnByb29mLnZlcmlmeShzdGF0ZW1lbnQsIGNvbnRleHQsIChwcm9vZlZlcmlmaWVzKSA9PiB7XG4gICAgICBpZiAocHJvb2ZWZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hJ3MgcHJvb2YuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocHJvb2ZWZXJpZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlEZWR1Y3Rpb24oY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc2NoZW1hU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vXG4gICAgICAgICAgZGVkdWN0aW9uU3RyaW5nID0gdGhpcy5kZWR1Y3Rpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHRvcCBsZXZlbCBtZXRhIGFzc2VydGlvbidzICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHRoaXMuZGVkdWN0aW9uLnZlcmlmeShjb250ZXh0LCAoZGVkdWN0aW9uVmVyaWZpZXMpID0+IHtcbiAgICAgIGlmIChkZWR1Y3Rpb25WZXJpZmllcykge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgdG9wIGxldmVsIG1ldGEgYXNzZXJ0aW9uJ3MgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjdGlvblZlcmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9ucyhjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYSdzIHN1cHBvc2l0aW9ucy4uLmApO1xuXG4gICAgcmV0dXJuIGZvcndhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbiwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy52ZXJpZnlTdXBwb3NpdGlvbihzdXBwb3NpdGlvbiwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCAoc3VwcG9zaXRpb25zVmVyaWZ5KSA9PiB7XG4gICAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZ5KSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyBzdXBwb3NpdGlvbnMuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VwcG9zaXRpb25zVmVyaWZ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHZlcmlmeVN1cHBvc2l0aW9uKHN1cHBvc2l0aW9uLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25TdHJpbmcgPSBzdXBwb3NpdGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hJ3MgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgcmV0dXJuIHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0LCAoc3VwcG9zaXRpb25WZXJpZmllcykgPT4ge1xuICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZPclByb29mQXNzZXJ0aW9uID0gc3VwcG9zaXRpb247ICAvLy8vXG5cbiAgICAgICAgY29udGV4dC5hc3NpZ25Bc3NpZ25tZW50cygpO1xuXG4gICAgICAgIGNvbnRleHQuYWRkU3VicHJvb2ZPclByb29mQXNzZXJ0aW9uKHN1YnByb29mT3JQcm9vZkFzc2VydGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEncyAnJHtzdXBwb3NpdGlvblN0cmluZ30nIHN1cHBvc2l0aW9uLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2l0aW9uVmVyaWZpZXMpO1xuICAgIH0pO1xuICB9XG5cbiAgdW5pZnlKdWRnZW1lbnQoanVkZ2VtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAganVkZ2VtZW50U3RyaW5nID0ganVkZ2VtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke2p1ZGdlbWVudFN0cmluZ30nIGp1ZGdlbWVudCB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVmZXJlbmNlID0ganVkZ2VtZW50LmdldFJlZmVyZW5jZSgpO1xuXG4gICAgICByZXR1cm4gdGhpcy51bmlmeVJlZmVyZW5jZShyZWZlcmVuY2UsIGNvbnRleHQsIChyZWZlcmVuY2VVbmlmaWVzKSA9PiB7XG4gICAgICAgIGlmICghcmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50VW5pZmllcyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhc3N1bXB0aW9ucyA9IGp1ZGdlbWVudC5nZXRBc3N1bXB0aW9ucyhjb250ZXh0KTtcblxuICAgICAgICByZXR1cm4gdGhpcy51bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCAoYXNzdW1wdGlvbnNVbmlmeSkgPT4ge1xuICAgICAgICAgIGlmICghYXNzdW1wdGlvbnNVbmlmeSkge1xuICAgICAgICAgICAgY29uc3QganVkZ2VtZW50VW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGp1ZGdlbWVudFVuaWZpZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGp1ZGdlbWVudC5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICAgICAgICBjb25kaXRpb25hbCA9IHRoaXMuaXNDb25kaXRpb25hbCgpLFxuICAgICAgICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgICAgICAgICBpZiAoY29uZGl0aW9uYWwpIHtcbiAgICAgICAgICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICBjb25zdCBqdWRnZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihqdWRnZW1lbnRVbmlmaWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdWJwcm9vZkFzc2VydGlvbihzdWJwcm9vZkFzc2VydGlvbiwgY29udGV4dCwgKHN1YnByb29mYXNzZXJ0aW9uVW5pZmllcykgPT4ge1xuICAgICAgICAgICAgICBsZXQganVkZ2VtZW50VW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgIGlmIChzdWJwcm9vZmFzc2VydGlvblVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgICBqdWRnZW1lbnRVbmlmaWVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChqdWRnZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7anVkZ2VtZW50U3RyaW5nfScganVkZ2VtZW50IHdpdGggdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYS5gKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oanVkZ2VtZW50VW5pZmllcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGp1ZGdlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihqdWRnZW1lbnRVbmlmaWVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBkZWR1Y2VkU3RhdG1lbnQgPSBzdGF0ZW1lbnQ7ICAvLy9cblxuICAgICAgICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdG1lbnQsIGNvbnRleHQsIChkZWR1Y2VkU3RhdG1lbnRVbmZpZmllcykgPT4ge1xuICAgICAgICAgICAgbGV0IGp1ZGdlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRlZHVjZWRTdGF0bWVudFVuZmlmaWVzKSB7XG4gICAgICAgICAgICAgIGp1ZGdlbWVudFVuaWZpZXMgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoanVkZ2VtZW50VW5pZmllcykge1xuICAgICAgICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtqdWRnZW1lbnRTdHJpbmd9JyBqdWRnZW1lbnQgd2l0aCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hLmApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKGp1ZGdlbWVudFVuaWZpZXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgdW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBzY2hlbWFTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgcmVmZXJlbmNlU3RyaW5nID0gcmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuLi5gKTtcblxuICAgIHJldHVybiB0aGlzLmxhYmVsLnVuaWZ5UmVmZXJlbmNlKHJlZmVyZW5jZSwgY29udGV4dCwgKHJlZmVyZW5jZVVuaWZpZXMpID0+IHtcbiAgICAgIGlmIChyZWZlcmVuY2VVbmlmaWVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZSB3aXRoIHRoZSAnJHtzY2hlbWFTdHJpbmd9JyBzY2hlbWEuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24ocmVmZXJlbmNlVW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeUFzc3VtcHRpb25zKGFzc3VtcHRpb25zLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBldmVyeSh0aGlzLmNvbnN0cmFpbnRzLCAoY29uc3RyYWludCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICBjb25zdHJhaW50LnVuaWZ5QXNzdW1wdGlvbnMoYXNzdW1wdGlvbnMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGludWF0aW9uKTtcbiAgfVxuXG4gIHVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgICBjb25zdCBkZWR1Y3Rpb25TdHJpbmcgPSB0aGlzLmRlZHVjdGlvbi5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBkZWR1Y2VkU3RhdGVtZW50U3RyaW5nID0gZGVkdWNlZFN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtkZWR1Y2VkU3RhdGVtZW50U3RyaW5nfScgZGVkdWNlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7ZGVkdWN0aW9uU3RyaW5nfScgZGVkdWN0aW5vLi4uYCk7XG5cbiAgICBjb25zdCBkZWR1Y3Rpb25Db250ZXh0ID0gdGhpcy5kZWR1Y3Rpb24uZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBkZWR1Y2VkU3RhdGVtZW50LCAvLy9cbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGRlZHVjdGlvbkNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiB0aGlzLmRlZHVjdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMgPSBmYWxzZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7ZGVkdWNlZFN0YXRlbWVudFN0cmluZ30nIGRlZHVjZWQgc3RhdGVtZW50IHdpdGggdGhlICcke2RlZHVjdGlvblN0cmluZ30nIGRlZHVjdGlvbmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKGRlZHVjZWRTdGF0ZW1lbnRVbmlmaWVzKTtcbiAgICB9KTtcbiAgfVxuXG4gIHVuaWZ5U3VicHJvb2ZBc3NlcnRpb24oc3VicHJvb2ZBc3NlcnRpb24sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHNjaGVtYVN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICBzdWJwcm9vZkFzc2VydGlvblN0cmluZyA9IHN1YnByb29mQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVW5pZnlpbmcgdGhlICcke3N1YnByb29mQXNzZXJ0aW9uU3RyaW5nfScgc3VicHJvb2YgYXNzZXJ0aW9uIHdpdGggdGhlICcke3NjaGVtYVN0cmluZ30nIHNjaGVtYS4uLmApO1xuXG4gICAgY29uc3QgZGVkdWNlZFN0YXRlbWVudCA9IHN1YnByb29mQXNzZXJ0aW9uLmdldERlZHVjZWRTdGF0ZW1lbnQoKTtcblxuICAgIHJldHVybiB0aGlzLnVuaWZ5RGVkdWNlZFN0YXRlbWVudChkZWR1Y2VkU3RhdGVtZW50LCBjb250ZXh0LCAoZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMpID0+IHtcbiAgICAgIGlmICghZGVkdWNlZFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29uc3Qgc3VicHJvb2ZBc3NlcnRpb25VbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZkFzc2VydGlvblVuaWZpZXMpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHMgPSBzdWJwcm9vZkFzc2VydGlvbi5nZXRTdXBwb3NlZFN0YXRlbWVudHMoKTtcblxuICAgICAgcmV0dXJuIHRoaXMudW5pZnlTdXBwb3NlZFN0YXRlbWVudHMoc3VwcG9zZWRTdGF0ZW1lbnRzLCBjb250ZXh0LCAoc3VwcG9zZWRTdGF0ZW1lbnRzVW5pZnkpID0+IHtcbiAgICAgICAgbGV0IHN1YnByb29mQXNzZXJ0aW9uVW5pZmllcyA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChzdXBwb3NlZFN0YXRlbWVudHNVbmlmeSkge1xuICAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uVW5pZmllcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25VbmlmaWVzKSB7XG4gICAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VicHJvb2ZBc3NlcnRpb25TdHJpbmd9JyBzdWJwcm9vZiBhc3NlcnRpb24gd2l0aCB0aGUgJyR7c2NoZW1hU3RyaW5nfScgc2NoZW1hLmApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWJwcm9vZkFzc2VydGlvblVuaWZpZXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2VkU3RhdGVtZW50KHN1cHBvc2VkU3RhdGVtZW50LCBpbmRleCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gICAgY29uc3Qgc3VwcG9zaXRpb24gPSB0aGlzLmdldFN1cHBvc2l0aW9uKGluZGV4KSxcbiAgICAgICAgICBzdXBwb3NpdGlvblN0cmluZyA9IHN1cHBvc2l0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIHN1cHBvc2VkU3RhdGVtZW50U3RyaW5nID0gc3VwcG9zZWRTdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbi4uLmApO1xuXG4gICAgY29uc3Qgc3VwcG9zaXRpb25Db250ZXh0ID0gc3VwcG9zaXRpb24uZ2V0Q29udGV4dCgpLCAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdXBwb3NlZFN0YXRlbWVudCwgLy8vXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBzdXBwb3NpdGlvbkNvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgIHJldHVybiBzdXBwb3NpdGlvbi51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICBsZXQgc3VwcG9zZWRTdGF0ZW1lbnRVbmlmaWVzID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgIHN1cHBvc2VkU3RhdGVtZW50VW5pZmllcyA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdXBwb3NlZFN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3VwcG9zZWRTdGF0ZW1lbnRTdHJpbmd9JyBzdXBwb3NlZCBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7c3VwcG9zaXRpb25TdHJpbmd9JyBzdXBwb3NpdGlvbmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2VkU3RhdGVtZW50VW5pZmllcyk7XG4gICAgfSk7XG4gIH1cblxuICB1bmlmeVN1cHBvc2VkU3RhdGVtZW50cyhzdXBwb3NlZFN0YXRlbWVudHMsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICAgIGNvbnN0IHN1cHBvc2l0aW9uc0xlbmd0aCA9IHRoaXMuc3VwcG9zaXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBzdXBwb3NlZFN0YXRlbWVudHNMZW5ndGggPSBzdXBwb3NlZFN0YXRlbWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKHN1cHBvc2l0aW9uc0xlbmd0aCAhPT0gc3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoKSB7XG4gICAgICBjb25zdCBzdXBwb3NlZFN0YXRlbWVudHNVbmlmeSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN1cHBvc2VkU3RhdGVtZW50c1VuaWZ5KTtcbiAgICB9XG5cbiAgICBsZXQgaW5kZXggPSAtMTtcblxuICAgIGV2ZXJ5KHN1cHBvc2VkU3RhdGVtZW50cywgKHN1cHBvc2VkU3RhdGVtZW50LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgIGluZGV4Kys7XG5cbiAgICAgIHJldHVybiB0aGlzLnVuaWZ5U3VwcG9zZWRTdGF0ZW1lbnQoc3VwcG9zZWRTdGF0ZW1lbnQsIGluZGV4LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuICAgIH0pO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsSlNPTiA9IGxhYmVsVG9MYWJlbEpTT04odGhpcy5sYWJlbCksXG4gICAgICAgICAgZGVkdWN0aW9uSlNPTiA9IGRlZHVjdGlvblRvRGVkdWN0aW9uSlNPTih0aGlzLmRlZHVjdGlvbiksXG4gICAgICAgICAgc3VwcG9zaXRpb25zSlNPTiA9IHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTih0aGlzLnN1cHBvc2l0aW9ucyksXG4gICAgICAgICAgY29uc3RyYWludHNKU09OID0gY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTih0aGlzLmNvbnN0cmFpbnRzKSxcbiAgICAgICAgICBzdHJpbmcgPSB0aGlzLmdldFN0cmluZygpO1xuXG4gICAgbGV0IGJyZWFrUG9pbnQ7XG5cbiAgICBicmVha1BvaW50ID0gdGhpcy5nZXRCcmVha1BvaW50KCk7XG5cbiAgICBjb25zdCBicmVha1BvaW50SlNPTiA9IGJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OKGJyZWFrUG9pbnQpO1xuXG4gICAgYnJlYWtQb2ludCA9IGJyZWFrUG9pbnRKU09OOyAgLy8vXG5cbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsSlNPTiwgIC8vL1xuICAgICAgICAgIGRlZHVjdGlvbiA9IGRlZHVjdGlvbkpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgc3RyaW5nLFxuICAgICAgICAgICAgYnJlYWtQb2ludCxcbiAgICAgICAgICAgIGxhYmVsLFxuICAgICAgICAgICAgZGVkdWN0aW9uLFxuICAgICAgICAgICAgc3VwcG9zaXRpb25zLFxuICAgICAgICAgICAgY29uc3RyYWludHNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgbmFtZSA9IFwiU2NoZW1hXCI7XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIGNvbnRleHQpIHtcbiAgICBjb25zdCBsYWJlbCA9IGxhYmVsRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgZGVkdWN0aW9uID0gZGVkdWN0aW9uRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbUpTT04oanNvbiwgY29udGV4dCksXG4gICAgICAgICAgY29uc3RyYWludHMgPSBjb25zdHJhaW50c0Zyb21KU09OKGpzb24sIGNvbnRleHQpLFxuICAgICAgICAgIHN0cmluZyA9IHNjaGVtYVN0cmluZ0Zyb21MYWJlbFN1cHBvc2l0aW9uc0FuZERlZHVjdGlvbihsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24pLFxuICAgICAgICAgIG5vZGUgPSBudWxsLFxuICAgICAgICAgIGJyZWFrUG9pbnQgPSBicmVha1BvaW50RnJvbUpTT04oanNvbiksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHNjaGVtYSA9IG5ldyBTY2hlbWEoY29udGV4dCwgc3RyaW5nLCBub2RlLCBicmVha1BvaW50LCBsYWJlbCwgc3VwcG9zaXRpb25zLCBkZWR1Y3Rpb24sIHByb29mLCBjb25zdHJhaW50cyk7XG5cbiAgICByZXR1cm4gc2NoZW1hO1xuICB9XG59KTtcblxuZnVuY3Rpb24gc3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICBsZXQgc3VicHJvb2ZBc3NlcnRpb247XG5cbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHM7XG5cbiAgc3VicHJvb2ZBc3NlcnRpb24gPSBTdWJwcm9vZkFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0KTtcbiAgfVxuXG4gIHJldHVybiBzdWJwcm9vZkFzc2VydGlvbjtcblxufVxuIl0sIm5hbWVzIjpbImV2ZXJ5IiwiZm9yd2FyZHNFdmVyeSIsImNvbnRpbnVhdGlvblV0aWxpdGllcyIsImJyZWFrYWJsZSIsImJyZWFrUG9pbnRGcm9tSlNPTiIsImJyZWFrUG9pbnRUb0JyZWFrUG9pbnRKU09OIiwiYnJlYWtQb2ludFV0aWxpdGllcyIsImRlZmluZSIsIlNjaGVtYSIsIkVsZW1lbnQiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsImJyZWFrUG9pbnQiLCJsYWJlbCIsInN1cHBvc2l0aW9ucyIsImRlZHVjdGlvbiIsInByb29mIiwiY29uc3RyYWludHMiLCJnZXRMYWJlbCIsImdldFN1cHBvc2l0aW9ucyIsImdldERlZHVjdGlvbiIsImdldFByb29mIiwiZ2V0TUNvbnN0cmFpbnQiLCJnZXRTdXBwb3NpdGlvbiIsImluZGV4Iiwic3VwcG9zaXRpb24iLCJpc0NvbmRpdGlvbmFsIiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiY29uZGl0aW9uYWwiLCJjb21wYXJlUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwibGFiZWxDb21wYXJlc1RvUmVmZmVyZW5jZSIsImNvbXBhcmVzVG9SZWZlcmVuY2UiLCJ2ZXJpZnkiLCJjb250aW51YXRpb24iLCJzY2hlbWFTdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsImVuY2Fwc3VsYXRlIiwidmVyaWZ5TGFiZWwiLCJiaW5kIiwidmVyaWZ5UHJvb2YiLCJ2ZXJpZnlEZWR1Y3Rpb24iLCJ2ZXJpZnlTdXBwb3NpdGlvbnMiLCJhbGwiLCJ2ZXJpZmllcyIsInNjaGVtYSIsImFkZFNjaGVtYSIsImRlYnVnIiwibGFiZWxTdHJpbmciLCJsYWJlbFZlcmlmaWVzIiwic3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwicHJvb2ZWZXJpZmllcyIsImRlZHVjdGlvblN0cmluZyIsImRlZHVjdGlvblZlcmlmaWVzIiwidmVyaWZ5U3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbnNWZXJpZnkiLCJzdXBwb3NpdGlvblN0cmluZyIsInN1cHBvc2l0aW9uVmVyaWZpZXMiLCJzdWJwcm9vZk9yUHJvb2ZBc3NlcnRpb24iLCJhc3NpZ25Bc3NpZ25tZW50cyIsImFkZFN1YnByb29mT3JQcm9vZkFzc2VydGlvbiIsInVuaWZ5SnVkZ2VtZW50IiwianVkZ2VtZW50IiwianVkZ2VtZW50U3RyaW5nIiwicmVjb25jaWxlIiwiZ2V0UmVmZXJlbmNlIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwianVkZ2VtZW50VW5pZmllcyIsImFzc3VtcHRpb25zIiwiZ2V0QXNzdW1wdGlvbnMiLCJ1bmlmeUFzc3VtcHRpb25zIiwiYXNzdW1wdGlvbnNVbmlmeSIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidW5pZnlTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mYXNzZXJ0aW9uVW5pZmllcyIsImRlZHVjZWRTdGF0bWVudCIsInVuaWZ5RGVkdWNlZFN0YXRlbWVudCIsImRlZHVjZWRTdGF0bWVudFVuZmlmaWVzIiwicmVmZXJlbmNlU3RyaW5nIiwiY29uc3RyYWludCIsImRlZHVjZWRTdGF0ZW1lbnQiLCJkZWR1Y2VkU3RhdGVtZW50U3RyaW5nIiwiZGVkdWN0aW9uQ29udGV4dCIsImdldENvbnRleHQiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllcyIsImRlZHVjZWRTdGF0ZW1lbnRVbmlmaWVzIiwic3VicHJvb2ZBc3NlcnRpb25TdHJpbmciLCJnZXREZWR1Y2VkU3RhdGVtZW50Iiwic3VicHJvb2ZBc3NlcnRpb25VbmlmaWVzIiwic3VwcG9zZWRTdGF0ZW1lbnRzIiwiZ2V0U3VwcG9zZWRTdGF0ZW1lbnRzIiwidW5pZnlTdXBwb3NlZFN0YXRlbWVudHMiLCJzdXBwb3NlZFN0YXRlbWVudHNVbmlmeSIsInVuaWZ5U3VwcG9zZWRTdGF0ZW1lbnQiLCJzdXBwb3NlZFN0YXRlbWVudCIsInN1cHBvc2VkU3RhdGVtZW50U3RyaW5nIiwic3VwcG9zaXRpb25Db250ZXh0Iiwic3VwcG9zZWRTdGF0ZW1lbnRVbmlmaWVzIiwic3VwcG9zZWRTdGF0ZW1lbnRzTGVuZ3RoIiwidG9KU09OIiwibGFiZWxKU09OIiwibGFiZWxUb0xhYmVsSlNPTiIsImRlZHVjdGlvbkpTT04iLCJkZWR1Y3Rpb25Ub0RlZHVjdGlvbkpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwiY29uc3RyYWludHNKU09OIiwiY29uc3RyYWludHNUb0NvbnN0cmFpbnRzSlNPTiIsImdldEJyZWFrUG9pbnQiLCJicmVha1BvaW50SlNPTiIsImpzb24iLCJuYW1lIiwiZnJvbUpTT04iLCJsYWJlbEZyb21KU09OIiwiZGVkdWN0aW9uRnJvbUpTT04iLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsImNvbnN0cmFpbnRzRnJvbUpTT04iLCJzY2hlbWFTdHJpbmdGcm9tTGFiZWxTdXBwb3NpdGlvbnNBbmREZWR1Y3Rpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsImVsZW1lbnRzIiwiZnJvbVN0YXRlbWVudCIsInZhbGlkYXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFzQkE7OztlQUFBOzs7Z0NBcEJvRTtrRUFFL0M7OEJBRUQ7eUJBRW1CO3dCQUN1QjtzQkFRZjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRS9DLE1BQU0sRUFBRUEsS0FBSyxFQUFFQyxhQUFhLEVBQUUsR0FBR0MscUNBQXFCLEVBQ2hELEVBQUVDLFNBQVMsRUFBRUMsa0JBQWtCLEVBQUVDLDBCQUEwQixFQUFFLEdBQUdDLG1DQUFtQjtNQUV6RixXQUFlQyxJQUFBQSxnQkFBTSxFQUFDLE1BQU1DLGVBQWVDLHVCQUFPO0lBQ2hELFlBQVlDLE9BQU8sRUFBRUMsTUFBTSxFQUFFQyxJQUFJLEVBQUVDLFVBQVUsRUFBRUMsS0FBSyxFQUFFQyxZQUFZLEVBQUVDLFNBQVMsRUFBRUMsS0FBSyxFQUFFQyxXQUFXLENBQUU7UUFDakcsS0FBSyxDQUFDUixTQUFTQyxRQUFRQyxNQUFNQztRQUU3QixJQUFJLENBQUNDLEtBQUssR0FBR0E7UUFDYixJQUFJLENBQUNDLFlBQVksR0FBR0E7UUFDcEIsSUFBSSxDQUFDQyxTQUFTLEdBQUdBO1FBQ2pCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQTtRQUNiLElBQUksQ0FBQ0MsV0FBVyxHQUFHQTtJQUNyQjtJQUVBQyxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNMLEtBQUs7SUFDbkI7SUFFQU0sa0JBQWtCO1FBQ2hCLE9BQU8sSUFBSSxDQUFDTCxZQUFZO0lBQzFCO0lBRUFNLGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQ0wsU0FBUztJQUN2QjtJQUVBTSxXQUFXO1FBQ1QsT0FBTyxJQUFJLENBQUNMLEtBQUs7SUFDbkI7SUFFQU0saUJBQWlCO1FBQ2YsT0FBTyxJ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
|