@1money/component-ui 0.0.74 → 0.0.76
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/es/components/Dialog/Dialog.js +7 -39
- package/es/components/Dialog/constants.d.ts +0 -3
- package/es/components/Dialog/constants.js +1 -4
- package/es/components/Dialog/style/Dialog.css +0 -21
- package/es/components/ProForm/ProForm.js +46 -33
- package/es/components/ProForm/ProFormDependency.js +6 -16
- package/es/components/ProForm/ProFormItem.js +5 -7
- package/es/components/ProForm/ProFormList.js +112 -40
- package/es/components/ProForm/core/constants.d.ts +2 -0
- package/es/components/ProForm/core/constants.js +7 -1
- package/es/components/ProForm/core/devWarning.d.ts +3 -0
- package/es/components/ProForm/core/devWarning.js +22 -0
- package/es/components/ProForm/core/formStore.d.ts +10 -2
- package/es/components/ProForm/core/formStore.js +21 -2
- package/es/components/ProForm/core/hooks/useForm.js +246 -103
- package/es/components/ProForm/core/hooks/useFormCore.js +134 -28
- package/es/components/ProForm/core/interface.d.ts +124 -49
- package/es/components/ProForm/core/runRules.d.ts +44 -12
- package/es/components/ProForm/core/runRules.js +584 -133
- package/es/components/ProForm/core/useFormItem.d.ts +6 -7
- package/es/components/ProForm/core/useFormItem.js +44 -22
- package/es/components/ProForm/core/validationError.d.ts +13 -0
- package/es/components/ProForm/core/validationError.js +29 -0
- package/es/components/ProForm/fields/ProFormCheckboxGroup.js +19 -5
- package/es/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/es/components/ProForm/fields/ProFormRadioGroup.js +8 -3
- package/es/components/ProForm/fields/ProFormSelect.js +13 -7
- package/es/components/ProForm/fields/createProFormField.js +18 -25
- package/es/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/es/components/ProForm/index.d.ts +2 -1
- package/es/components/ProForm/index.js +4 -1
- package/es/components/ProForm/interface.d.ts +31 -40
- package/es/components/ProForm/layouts/QueryFilter.js +24 -16
- package/es/components/ProForm/style/ProForm.css +0 -1
- package/es/components/ProForm/utils.d.ts +8 -0
- package/es/components/ProForm/utils.js +51 -3
- package/es/components/Table/core/useTableSetup.js +2 -2
- package/es/components/Table/interface.d.ts +1 -1
- package/es/index.css +1 -1
- package/lib/components/Dialog/Dialog.js +6 -38
- package/lib/components/Dialog/constants.d.ts +0 -3
- package/lib/components/Dialog/constants.js +1 -4
- package/lib/components/Dialog/style/Dialog.css +0 -21
- package/lib/components/ProForm/ProForm.js +45 -32
- package/lib/components/ProForm/ProFormDependency.js +5 -15
- package/lib/components/ProForm/ProFormItem.js +5 -7
- package/lib/components/ProForm/ProFormList.js +110 -38
- package/lib/components/ProForm/core/constants.d.ts +2 -0
- package/lib/components/ProForm/core/constants.js +8 -2
- package/lib/components/ProForm/core/devWarning.d.ts +3 -0
- package/lib/components/ProForm/core/devWarning.js +29 -0
- package/lib/components/ProForm/core/formStore.d.ts +10 -2
- package/lib/components/ProForm/core/formStore.js +23 -2
- package/lib/components/ProForm/core/hooks/useForm.js +242 -99
- package/lib/components/ProForm/core/hooks/useFormCore.js +133 -27
- package/lib/components/ProForm/core/interface.d.ts +124 -49
- package/lib/components/ProForm/core/runRules.d.ts +44 -12
- package/lib/components/ProForm/core/runRules.js +587 -133
- package/lib/components/ProForm/core/useFormItem.d.ts +6 -7
- package/lib/components/ProForm/core/useFormItem.js +43 -21
- package/lib/components/ProForm/core/validationError.d.ts +13 -0
- package/lib/components/ProForm/core/validationError.js +36 -0
- package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +18 -4
- package/lib/components/ProForm/fields/ProFormFieldSet.js +51 -12
- package/lib/components/ProForm/fields/ProFormRadioGroup.js +7 -2
- package/lib/components/ProForm/fields/ProFormSelect.js +13 -7
- package/lib/components/ProForm/fields/createProFormField.js +18 -25
- package/lib/components/ProForm/hooks/useFieldRequest.js +10 -8
- package/lib/components/ProForm/index.d.ts +2 -1
- package/lib/components/ProForm/index.js +10 -1
- package/lib/components/ProForm/interface.d.ts +31 -40
- package/lib/components/ProForm/layouts/QueryFilter.js +24 -16
- package/lib/components/ProForm/style/ProForm.css +0 -1
- package/lib/components/ProForm/utils.d.ts +8 -0
- package/lib/components/ProForm/utils.js +52 -3
- package/lib/components/Table/core/useTableSetup.js +2 -2
- package/lib/components/Table/interface.d.ts +1 -1
- package/lib/index.css +1 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +42 -36
- package/scripts/mcp-server/index.generated.json +23 -67
|
@@ -18,6 +18,7 @@ var _useFormCore = require("./useFormCore");
|
|
|
18
18
|
var _pathUtils = require("../pathUtils");
|
|
19
19
|
var _runRules = require("../runRules");
|
|
20
20
|
var _formStore = require("../formStore");
|
|
21
|
+
var _validationError = require("../validationError");
|
|
21
22
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
22
23
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
23
24
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -61,10 +62,12 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
|
|
|
61
62
|
/**
|
|
62
63
|
* Only rules with a custom `validator` can be genuinely asynchronous —
|
|
63
64
|
* builtin rules resolve within a microtask, so flipping `validating` for
|
|
64
|
-
* them would only churn subscribers without ever being visible.
|
|
65
|
+
* them would only churn subscribers without ever being visible. Decided on
|
|
66
|
+
* RESOLVED rules: a function-form rule that resolves to builtin-only checks
|
|
67
|
+
* must not flicker the flag.
|
|
65
68
|
*/
|
|
66
|
-
var
|
|
67
|
-
return
|
|
69
|
+
var hasResolvedValidator = function hasResolvedValidator(resolved) {
|
|
70
|
+
return resolved.some(function (rule) {
|
|
68
71
|
return typeof rule.validator === 'function';
|
|
69
72
|
});
|
|
70
73
|
};
|
|
@@ -80,6 +83,12 @@ var useForm = exports.useForm = function useForm() {
|
|
|
80
83
|
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
81
84
|
var formCore = (0, _useFormCore.useFormCore)(config);
|
|
82
85
|
var store = formCore.store;
|
|
86
|
+
// Epoch of the LATEST async run that raised each field's `validating` flag.
|
|
87
|
+
// A settling run clears the flag only while it is still the latest raiser —
|
|
88
|
+
// an older run must not blank the spinner of a newer one, and a run
|
|
89
|
+
// superseded by a SYNC commit (which never touches flags) must still clean
|
|
90
|
+
// up after itself.
|
|
91
|
+
var lastAsyncEpochRef = (0, _react.useRef)({});
|
|
83
92
|
// Mark fields as validating in ONE commit. validating / touched live in the
|
|
84
93
|
// store alongside values — flipping them (e.g. async validation around a
|
|
85
94
|
// blur) must not re-render the form root, only the fields that subscribed.
|
|
@@ -117,7 +126,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
117
126
|
delete newErrors[name];
|
|
118
127
|
errorsChanged = true;
|
|
119
128
|
}
|
|
120
|
-
} else if (newErrors[name]
|
|
129
|
+
} else if (!(0, _formStore.sameValidationNode)(newErrors[name], error)) {
|
|
121
130
|
newErrors[name] = error;
|
|
122
131
|
errorsChanged = true;
|
|
123
132
|
}
|
|
@@ -126,7 +135,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
126
135
|
delete newWarnings[name];
|
|
127
136
|
warningsChanged = true;
|
|
128
137
|
}
|
|
129
|
-
} else if (newWarnings[name]
|
|
138
|
+
} else if (!(0, _formStore.sameValidationNode)(newWarnings[name], warning)) {
|
|
130
139
|
newWarnings[name] = warning;
|
|
131
140
|
warningsChanged = true;
|
|
132
141
|
}
|
|
@@ -156,7 +165,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
156
165
|
// ---------------------------------------------------------------------------
|
|
157
166
|
var validateFieldAsync = (0, _useMemoizedFn["default"])(function (name, value, rules) {
|
|
158
167
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
|
|
159
|
-
var flagged, outcome, _yield$runRulesAsync, error, warning;
|
|
168
|
+
var _a, epoch, values, resolved, flagged, outcome, _yield$runRulesAsync, error, warning, isCurrent, clearFlags, _t;
|
|
160
169
|
return _regenerator["default"].wrap(function (_context) {
|
|
161
170
|
while (1) switch (_context.prev = _context.next) {
|
|
162
171
|
case 0:
|
|
@@ -169,8 +178,18 @@ var useForm = exports.useForm = function useForm() {
|
|
|
169
178
|
error: null
|
|
170
179
|
});
|
|
171
180
|
case 1:
|
|
172
|
-
|
|
181
|
+
// Capture this run's epoch: if a NEWER run (sync or async) starts for
|
|
182
|
+
// the field before this one settles, the outcome below is stale and is
|
|
183
|
+
// discarded instead of overwriting the newer result.
|
|
184
|
+
epoch = formCore.beginValidationRun(name); // Resolve once: the flag decision needs resolved rules, and passing the
|
|
185
|
+
// resolved array onward spares the engine a re-resolution.
|
|
186
|
+
values = formCore.getFieldsValue();
|
|
187
|
+
resolved = (0, _runRules.resolveRules)(rules, values, formCore.getRuleContextInstance());
|
|
188
|
+
flagged = hasResolvedValidator(resolved) ? [name] : [];
|
|
173
189
|
markValidating(flagged);
|
|
190
|
+
flagged.forEach(function (flaggedName) {
|
|
191
|
+
lastAsyncEpochRef.current[flaggedName] = epoch;
|
|
192
|
+
});
|
|
174
193
|
outcome = {
|
|
175
194
|
name: name,
|
|
176
195
|
error: null,
|
|
@@ -178,7 +197,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
178
197
|
};
|
|
179
198
|
_context.prev = 2;
|
|
180
199
|
_context.next = 3;
|
|
181
|
-
return (0, _runRules.runRulesAsync)(name, value, formCore.
|
|
200
|
+
return (0, _runRules.runRulesAsync)(name, value, values, resolved, formCore.getRuleContextInstance());
|
|
182
201
|
case 3:
|
|
183
202
|
_yield$runRulesAsync = _context.sent;
|
|
184
203
|
error = _yield$runRulesAsync.error;
|
|
@@ -188,28 +207,45 @@ var useForm = exports.useForm = function useForm() {
|
|
|
188
207
|
error: error,
|
|
189
208
|
warning: warning
|
|
190
209
|
};
|
|
210
|
+
_context.next = 5;
|
|
211
|
+
break;
|
|
191
212
|
case 4:
|
|
192
213
|
_context.prev = 4;
|
|
193
|
-
|
|
194
|
-
|
|
214
|
+
_t = _context["catch"](2);
|
|
215
|
+
// The engine contains rule-level throws itself; this is a last-resort
|
|
216
|
+
// net so an unexpected failure surfaces as a field error instead of
|
|
217
|
+
// leaving the field marked valid.
|
|
218
|
+
outcome = {
|
|
219
|
+
name: name,
|
|
220
|
+
error: (_a = (0, _runRules.coerceFailureReason)(_t)) !== null && _a !== void 0 ? _a : 'Validation failed',
|
|
221
|
+
warning: null
|
|
222
|
+
};
|
|
195
223
|
case 5:
|
|
224
|
+
_context.prev = 5;
|
|
225
|
+
isCurrent = formCore.isValidationRunCurrent(name, epoch);
|
|
226
|
+
clearFlags = flagged.filter(function (flaggedName) {
|
|
227
|
+
return lastAsyncEpochRef.current[flaggedName] === epoch;
|
|
228
|
+
});
|
|
229
|
+
commitRuleOutcomes(isCurrent ? [outcome] : [], clearFlags);
|
|
230
|
+
return _context.finish(5);
|
|
231
|
+
case 6:
|
|
196
232
|
return _context.abrupt("return", {
|
|
197
233
|
isValid: outcome.error === null,
|
|
198
234
|
error: outcome.error
|
|
199
235
|
});
|
|
200
|
-
case
|
|
236
|
+
case 7:
|
|
201
237
|
case "end":
|
|
202
238
|
return _context.stop();
|
|
203
239
|
}
|
|
204
|
-
}, _callee, null, [[2
|
|
240
|
+
}, _callee, null, [[2, 4, 5, 6]]);
|
|
205
241
|
}));
|
|
206
242
|
});
|
|
207
243
|
// ---------------------------------------------------------------------------
|
|
208
244
|
// Async field blur handler
|
|
209
245
|
// ---------------------------------------------------------------------------
|
|
210
|
-
var handleFieldBlur = (0, _useEventCallback["default"])(function (name) {
|
|
246
|
+
var handleFieldBlur = (0, _useEventCallback["default"])(function (name, fieldTrigger) {
|
|
211
247
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
|
|
212
|
-
var touched, rules;
|
|
248
|
+
var touched, rules, values, applicable;
|
|
213
249
|
return _regenerator["default"].wrap(function (_context2) {
|
|
214
250
|
while (1) switch (_context2.prev = _context2.next) {
|
|
215
251
|
case 0:
|
|
@@ -220,13 +256,21 @@ var useForm = exports.useForm = function useForm() {
|
|
|
220
256
|
});
|
|
221
257
|
}
|
|
222
258
|
rules = formCore.getFieldRules(name);
|
|
223
|
-
if (
|
|
259
|
+
if (rules) {
|
|
224
260
|
_context2.next = 1;
|
|
225
261
|
break;
|
|
226
262
|
}
|
|
227
|
-
_context2.
|
|
228
|
-
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), rules);
|
|
263
|
+
return _context2.abrupt("return");
|
|
229
264
|
case 1:
|
|
265
|
+
values = formCore.getFieldsValue();
|
|
266
|
+
applicable = (0, _runRules.filterRulesByTrigger)((0, _runRules.resolveRules)(rules, values, formCore.getRuleContextInstance()), 'onBlur', (0, _runRules.normalizeTriggers)(fieldTrigger, validateTrigger), name);
|
|
267
|
+
if (!(applicable.length > 0)) {
|
|
268
|
+
_context2.next = 2;
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
_context2.next = 2;
|
|
272
|
+
return validateFieldAsync(name, (0, _pathUtils.resolveValue)(values, name), applicable);
|
|
273
|
+
case 2:
|
|
230
274
|
case "end":
|
|
231
275
|
return _context2.stop();
|
|
232
276
|
}
|
|
@@ -238,68 +282,111 @@ var useForm = exports.useForm = function useForm() {
|
|
|
238
282
|
// ---------------------------------------------------------------------------
|
|
239
283
|
var validateFieldsAsync = (0, _useMemoizedFn["default"])(function (nameList) {
|
|
240
284
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
241
|
-
var fieldsToValidate, fieldErrors, flagged, outcomes,
|
|
285
|
+
var fieldsToValidate, fieldErrors, resolvedByField, epochByField, _iterator2, _step2, name, rules, flagged, outcomes, clearFlags;
|
|
242
286
|
return _regenerator["default"].wrap(function (_context4) {
|
|
243
287
|
while (1) switch (_context4.prev = _context4.next) {
|
|
244
288
|
case 0:
|
|
245
289
|
fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
|
|
246
|
-
fieldErrors = {}; //
|
|
247
|
-
//
|
|
290
|
+
fieldErrors = {}; // Resolve every field once up front: the flag decision needs resolved
|
|
291
|
+
// rules, and the resolved arrays are reused for the actual runs. Each
|
|
292
|
+
// field also captures its validation epoch — a field whose value
|
|
293
|
+
// changes mid-submit gets a newer run, and this run's stale outcome
|
|
294
|
+
// must not overwrite it in the store.
|
|
295
|
+
resolvedByField = new Map();
|
|
296
|
+
epochByField = new Map();
|
|
297
|
+
_iterator2 = _createForOfIteratorHelper(fieldsToValidate);
|
|
298
|
+
try {
|
|
299
|
+
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
|
|
300
|
+
name = _step2.value;
|
|
301
|
+
rules = formCore.fieldRules[name];
|
|
302
|
+
if (rules) {
|
|
303
|
+
epochByField.set(name, formCore.beginValidationRun(name));
|
|
304
|
+
resolvedByField.set(name, (0, _runRules.resolveRules)(rules, formCore.getFieldsValue(), formCore.getRuleContextInstance()));
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
// One commit to raise the validating flags (validator-bearing fields
|
|
308
|
+
// only), one commit to land every error/warning and clear the flags.
|
|
309
|
+
} catch (err) {
|
|
310
|
+
_iterator2.e(err);
|
|
311
|
+
} finally {
|
|
312
|
+
_iterator2.f();
|
|
313
|
+
}
|
|
248
314
|
flagged = fieldsToValidate.filter(function (name) {
|
|
249
|
-
var
|
|
250
|
-
return
|
|
315
|
+
var resolved = resolvedByField.get(name);
|
|
316
|
+
return resolved ? hasResolvedValidator(resolved) : false;
|
|
251
317
|
});
|
|
252
318
|
markValidating(flagged);
|
|
319
|
+
flagged.forEach(function (name) {
|
|
320
|
+
lastAsyncEpochRef.current[name] = epochByField.get(name);
|
|
321
|
+
});
|
|
253
322
|
outcomes = [];
|
|
254
323
|
_context4.prev = 1;
|
|
255
324
|
_context4.next = 2;
|
|
256
325
|
return Promise.all(fieldsToValidate.map(function (name) {
|
|
257
326
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
258
|
-
var
|
|
327
|
+
var _a, resolved, error, warning, _yield$runRulesAsync2, epoch, _t2;
|
|
259
328
|
return _regenerator["default"].wrap(function (_context3) {
|
|
260
329
|
while (1) switch (_context3.prev = _context3.next) {
|
|
261
330
|
case 0:
|
|
262
|
-
|
|
263
|
-
if (
|
|
331
|
+
resolved = resolvedByField.get(name);
|
|
332
|
+
if (resolved) {
|
|
264
333
|
_context3.next = 1;
|
|
265
334
|
break;
|
|
266
335
|
}
|
|
267
336
|
return _context3.abrupt("return");
|
|
268
337
|
case 1:
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
338
|
+
error = null;
|
|
339
|
+
warning = null;
|
|
340
|
+
_context3.prev = 2;
|
|
341
|
+
_context3.next = 3;
|
|
342
|
+
return (0, _runRules.runRulesAsync)(name, (0, _pathUtils.resolveValue)(formCore.getFieldsValue(), name), formCore.getFieldsValue(), resolved, formCore.getRuleContextInstance());
|
|
343
|
+
case 3:
|
|
272
344
|
_yield$runRulesAsync2 = _context3.sent;
|
|
273
345
|
error = _yield$runRulesAsync2.error;
|
|
274
346
|
warning = _yield$runRulesAsync2.warning;
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
347
|
+
_context3.next = 5;
|
|
348
|
+
break;
|
|
349
|
+
case 4:
|
|
350
|
+
_context3.prev = 4;
|
|
351
|
+
_t2 = _context3["catch"](2);
|
|
352
|
+
// Last-resort net (see validateFieldAsync) — keep the normal
|
|
353
|
+
// constructed-error flow so onFinishFailed gets a real payload.
|
|
354
|
+
error = (_a = (0, _runRules.coerceFailureReason)(_t2)) !== null && _a !== void 0 ? _a : 'Validation failed';
|
|
355
|
+
case 5:
|
|
356
|
+
// The store commit is staleness-guarded; the SUBMIT decision
|
|
357
|
+
// (fieldErrors / the thrown FormValidationError) still reflects
|
|
358
|
+
// this run's own results for the values it validated.
|
|
359
|
+
epoch = epochByField.get(name);
|
|
360
|
+
if (epoch !== undefined && formCore.isValidationRunCurrent(name, epoch)) {
|
|
361
|
+
outcomes.push({
|
|
362
|
+
name: name,
|
|
363
|
+
error: error,
|
|
364
|
+
warning: warning
|
|
365
|
+
});
|
|
366
|
+
}
|
|
280
367
|
if (error !== null) {
|
|
281
368
|
fieldErrors[name] = error;
|
|
282
369
|
}
|
|
283
|
-
case
|
|
370
|
+
case 6:
|
|
284
371
|
case "end":
|
|
285
372
|
return _context3.stop();
|
|
286
373
|
}
|
|
287
|
-
}, _callee3);
|
|
374
|
+
}, _callee3, null, [[2, 4]]);
|
|
288
375
|
}));
|
|
289
376
|
}));
|
|
290
377
|
case 2:
|
|
291
378
|
_context4.prev = 2;
|
|
292
|
-
|
|
379
|
+
clearFlags = flagged.filter(function (name) {
|
|
380
|
+
return lastAsyncEpochRef.current[name] === epochByField.get(name);
|
|
381
|
+
});
|
|
382
|
+
commitRuleOutcomes(outcomes, clearFlags);
|
|
293
383
|
return _context4.finish(2);
|
|
294
384
|
case 3:
|
|
295
385
|
if (!(Object.keys(fieldErrors).length > 0)) {
|
|
296
386
|
_context4.next = 4;
|
|
297
387
|
break;
|
|
298
388
|
}
|
|
299
|
-
|
|
300
|
-
error.values = formCore.getFieldsValue();
|
|
301
|
-
error.errors = fieldErrors;
|
|
302
|
-
throw error;
|
|
389
|
+
throw new _validationError.FormValidationError(formCore.getFieldsValue(), fieldErrors);
|
|
303
390
|
case 4:
|
|
304
391
|
if (!nameList) {
|
|
305
392
|
_context4.next = 5;
|
|
@@ -330,10 +417,11 @@ var useForm = exports.useForm = function useForm() {
|
|
|
330
417
|
render = _a.render,
|
|
331
418
|
props = __rest(_a, ["children", "render"]);
|
|
332
419
|
// Per-field store subscription: this field re-renders only when its
|
|
333
|
-
// own value/error/touched/validating slice changes.
|
|
420
|
+
// own value/error/touched/validating slice changes. Dot-paths
|
|
421
|
+
// resolve into the nested values like everywhere else.
|
|
334
422
|
var _useStoreSelector = (0, _formStore.useStoreSelector)(store, function (state) {
|
|
335
423
|
var _a;
|
|
336
|
-
return [(_a = state.values
|
|
424
|
+
return [(_a = (0, _pathUtils.resolveValue)(state.values, name)) !== null && _a !== void 0 ? _a : '', state.errors[name], state.touched[name], state.validating[name]];
|
|
337
425
|
}, _formStore.shallowEqualArrays),
|
|
338
426
|
_useStoreSelector2 = (0, _slicedToArray2["default"])(_useStoreSelector, 4),
|
|
339
427
|
fieldValue = _useStoreSelector2[0],
|
|
@@ -341,22 +429,36 @@ var useForm = exports.useForm = function useForm() {
|
|
|
341
429
|
fieldTouched = _useStoreSelector2[2],
|
|
342
430
|
fieldValidating = _useStoreSelector2[3];
|
|
343
431
|
(0, _react.useEffect)(function () {
|
|
432
|
+
// Mount-counted: releaseField removes the rules only when the
|
|
433
|
+
// LAST same-name instance unmounts — an instance that piggybacked
|
|
434
|
+
// on an existing registration (e.g. a ProForm.Item's) can never
|
|
435
|
+
// wipe it on its own unmount.
|
|
436
|
+
formCore.retainField(name);
|
|
344
437
|
var existingRules = formCore.getFieldRules(name);
|
|
345
438
|
if (!existingRules && rules.length > 0) {
|
|
346
439
|
formCore.registerField(name, rules);
|
|
347
440
|
}
|
|
348
441
|
return function () {
|
|
349
|
-
formCore.
|
|
442
|
+
formCore.releaseField(name);
|
|
350
443
|
};
|
|
351
444
|
}, []); // Only register on mount
|
|
352
445
|
var handleFieldChange = (0, _useEventCallback["default"])(function (value) {
|
|
353
446
|
formCore.setFieldValue(name, value);
|
|
354
|
-
|
|
355
|
-
|
|
447
|
+
// Touched is set by the user change trigger (matching the
|
|
448
|
+
// ProForm.Item path) — programmatic setFieldsValue does not.
|
|
449
|
+
var touched = store.getState().touched;
|
|
450
|
+
if (!touched[name]) {
|
|
451
|
+
store.setState({
|
|
452
|
+
touched: Object.assign(Object.assign({}, touched), (0, _defineProperty2["default"])({}, name, true))
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
var applicable = (0, _runRules.filterRulesByTrigger)((0, _runRules.resolveRules)(rules, formCore.getFieldsValue(), formCore.getRuleContextInstance()), 'onChange', (0, _runRules.normalizeTriggers)(fieldOptions.validateTrigger, validateTrigger), name);
|
|
456
|
+
if (applicable.length > 0) {
|
|
457
|
+
formCore.validateField(name, applicable, value);
|
|
356
458
|
}
|
|
357
459
|
});
|
|
358
460
|
var handleBlur = (0, _useEventCallback["default"])(function () {
|
|
359
|
-
handleFieldBlur(name);
|
|
461
|
+
handleFieldBlur(name, fieldOptions.validateTrigger);
|
|
360
462
|
});
|
|
361
463
|
var fieldProps = Object.assign({
|
|
362
464
|
name: name,
|
|
@@ -388,22 +490,25 @@ var useForm = exports.useForm = function useForm() {
|
|
|
388
490
|
if (typeof children === 'function') {
|
|
389
491
|
return children(fieldProps);
|
|
390
492
|
}
|
|
493
|
+
// Element children receive only DOM-safe props — error/touched/
|
|
494
|
+
// validating are field META, not control props; spreading them onto
|
|
495
|
+
// a host element would leak unknown attributes. Render-prop and
|
|
496
|
+
// function children keep the full fieldProps.
|
|
497
|
+
var domSafeProps = Object.assign({
|
|
498
|
+
name: name,
|
|
499
|
+
value: fieldValue,
|
|
500
|
+
onChange: handleMergeChange,
|
|
501
|
+
onBlur: handleMergeBlur
|
|
502
|
+
}, props);
|
|
391
503
|
if (/*#__PURE__*/_react["default"].isValidElement(children)) {
|
|
392
|
-
|
|
393
|
-
onChange: handleMergeChange,
|
|
394
|
-
onBlur: handleMergeBlur
|
|
395
|
-
});
|
|
396
|
-
return /*#__PURE__*/_react["default"].cloneElement(children, mergedProps);
|
|
504
|
+
return /*#__PURE__*/_react["default"].cloneElement(children, domSafeProps);
|
|
397
505
|
}
|
|
398
506
|
if (Array.isArray(children)) {
|
|
399
507
|
return /*#__PURE__*/_react["default"].createElement.apply(_react["default"], [_react.Fragment, null].concat((0, _toConsumableArray2["default"])(children.map(function (child, index) {
|
|
400
508
|
if (/*#__PURE__*/_react["default"].isValidElement(child)) {
|
|
401
|
-
|
|
402
|
-
key: child.key || index
|
|
403
|
-
|
|
404
|
-
onBlur: handleMergeBlur
|
|
405
|
-
});
|
|
406
|
-
return /*#__PURE__*/_react["default"].cloneElement(child, _mergedProps);
|
|
509
|
+
return /*#__PURE__*/_react["default"].cloneElement(child, Object.assign(Object.assign({}, domSafeProps), {
|
|
510
|
+
key: child.key || index
|
|
511
|
+
}));
|
|
407
512
|
}
|
|
408
513
|
return child;
|
|
409
514
|
}))));
|
|
@@ -418,7 +523,7 @@ var useForm = exports.useForm = function useForm() {
|
|
|
418
523
|
// ---------------------------------------------------------------------------
|
|
419
524
|
var handleSubmit = (0, _useEventCallback["default"])(function (e) {
|
|
420
525
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee5() {
|
|
421
|
-
var validatedValues,
|
|
526
|
+
var validatedValues, _t3;
|
|
422
527
|
return _regenerator["default"].wrap(function (_context5) {
|
|
423
528
|
while (1) switch (_context5.prev = _context5.next) {
|
|
424
529
|
case 0:
|
|
@@ -433,12 +538,18 @@ var useForm = exports.useForm = function useForm() {
|
|
|
433
538
|
break;
|
|
434
539
|
case 3:
|
|
435
540
|
_context5.prev = 3;
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
541
|
+
_t3 = _context5["catch"](1);
|
|
542
|
+
// Only a VALIDATION failure reaches onFinishFailed — an exception out
|
|
543
|
+
// of the consumer's own onFinish is not a validation result and is
|
|
544
|
+
// surfaced instead of being misreported.
|
|
545
|
+
if (_t3 instanceof _validationError.FormValidationError) {
|
|
546
|
+
onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
|
|
547
|
+
values: _t3.values,
|
|
548
|
+
errors: _t3.errors
|
|
549
|
+
});
|
|
550
|
+
} else {
|
|
551
|
+
console.error('[ProForm] onFinish threw during submit:', _t3);
|
|
552
|
+
}
|
|
442
553
|
case 4:
|
|
443
554
|
case "end":
|
|
444
555
|
return _context5.stop();
|
|
@@ -521,34 +632,45 @@ var useForm = exports.useForm = function useForm() {
|
|
|
521
632
|
var resetFormFields = (0, _useMemoizedFn["default"])(function (fields) {
|
|
522
633
|
if (!fields) {
|
|
523
634
|
formCore.resetFields();
|
|
524
|
-
|
|
525
|
-
var resetValues = {};
|
|
526
|
-
fields.forEach(function (field) {
|
|
527
|
-
// Mount-frozen initialValues — consistent with the full resetFields.
|
|
528
|
-
resetValues[field] = formCore.getInitialValues()[field];
|
|
529
|
-
});
|
|
530
|
-
formCore.setFieldsValue(resetValues);
|
|
531
|
-
var _store$getState = store.getState(),
|
|
532
|
-
touched = _store$getState.touched,
|
|
533
|
-
validating = _store$getState.validating;
|
|
534
|
-
var newTouched = Object.assign({}, touched);
|
|
535
|
-
var newValidating = Object.assign({}, validating);
|
|
536
|
-
fields.forEach(function (field) {
|
|
537
|
-
delete newTouched[field];
|
|
538
|
-
delete newValidating[field];
|
|
539
|
-
});
|
|
540
|
-
store.setState({
|
|
541
|
-
touched: newTouched,
|
|
542
|
-
validating: newValidating
|
|
543
|
-
});
|
|
544
|
-
fields.forEach(function (field) {
|
|
545
|
-
formCore.setFieldError(field, null);
|
|
546
|
-
});
|
|
635
|
+
return;
|
|
547
636
|
}
|
|
637
|
+
// Mount-frozen initialValues — consistent with the full resetFields.
|
|
638
|
+
// Reads AND writes are nested-path aware, so dot-path names
|
|
639
|
+
// (`address.city`, `items.0.title`) reset correctly instead of probing a
|
|
640
|
+
// literal key and shallow-merging one back.
|
|
641
|
+
var initialValues = formCore.getInitialValues();
|
|
642
|
+
var state = store.getState();
|
|
643
|
+
var newValues = state.values;
|
|
644
|
+
fields.forEach(function (field) {
|
|
645
|
+
var initial = (0, _pathUtils.resolveValue)(initialValues, field);
|
|
646
|
+
newValues = field.includes('.') ? (0, _pathUtils.setNestedValue)(newValues, field, initial) : Object.assign(Object.assign({}, newValues), (0, _defineProperty2["default"])({}, field, initial));
|
|
647
|
+
});
|
|
648
|
+
// Like the full reset: clear ALL per-field meta (errors AND warnings AND
|
|
649
|
+
// touched/validating), invalidate in-flight validation runs, and land
|
|
650
|
+
// everything in ONE commit. No onValuesChange — reset is not a change
|
|
651
|
+
// event on either path.
|
|
652
|
+
formCore.invalidateValidationRuns(fields);
|
|
653
|
+
var newErrors = Object.assign({}, state.errors);
|
|
654
|
+
var newWarnings = Object.assign({}, state.warnings);
|
|
655
|
+
var newTouched = Object.assign({}, state.touched);
|
|
656
|
+
var newValidating = Object.assign({}, state.validating);
|
|
657
|
+
fields.forEach(function (field) {
|
|
658
|
+
delete newErrors[field];
|
|
659
|
+
delete newWarnings[field];
|
|
660
|
+
delete newTouched[field];
|
|
661
|
+
delete newValidating[field];
|
|
662
|
+
});
|
|
663
|
+
store.setState({
|
|
664
|
+
values: newValues,
|
|
665
|
+
errors: newErrors,
|
|
666
|
+
warnings: newWarnings,
|
|
667
|
+
touched: newTouched,
|
|
668
|
+
validating: newValidating
|
|
669
|
+
});
|
|
548
670
|
});
|
|
549
671
|
var submitWithValidation = (0, _useMemoizedFn["default"])(function (callback) {
|
|
550
672
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
551
|
-
var validatedValues,
|
|
673
|
+
var validatedValues, _t4, _t5;
|
|
552
674
|
return _regenerator["default"].wrap(function (_context6) {
|
|
553
675
|
while (1) switch (_context6.prev = _context6.next) {
|
|
554
676
|
case 0:
|
|
@@ -557,23 +679,38 @@ var useForm = exports.useForm = function useForm() {
|
|
|
557
679
|
return validateFieldsAsync();
|
|
558
680
|
case 1:
|
|
559
681
|
validatedValues = _context6.sent;
|
|
682
|
+
_context6.next = 3;
|
|
683
|
+
break;
|
|
684
|
+
case 2:
|
|
685
|
+
_context6.prev = 2;
|
|
686
|
+
_t4 = _context6["catch"](0);
|
|
687
|
+
return _context6.abrupt("return", undefined);
|
|
688
|
+
case 3:
|
|
560
689
|
if (!callback) {
|
|
561
|
-
_context6.next =
|
|
690
|
+
_context6.next = 7;
|
|
562
691
|
break;
|
|
563
692
|
}
|
|
564
|
-
_context6.
|
|
693
|
+
_context6.prev = 4;
|
|
694
|
+
_context6.next = 5;
|
|
565
695
|
return callback(validatedValues);
|
|
566
|
-
case
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
696
|
+
case 5:
|
|
697
|
+
_context6.next = 7;
|
|
698
|
+
break;
|
|
699
|
+
case 6:
|
|
700
|
+
_context6.prev = 6;
|
|
701
|
+
_t5 = _context6["catch"](4);
|
|
702
|
+
// A throwing callback is a consumer bug, not a validation failure —
|
|
703
|
+
// surface it (mirroring rc-field-form's onFinish handling) instead
|
|
704
|
+
// of swallowing it silently.
|
|
705
|
+
console.error('[ProForm] submit callback threw:', _t5);
|
|
571
706
|
return _context6.abrupt("return", undefined);
|
|
572
|
-
case
|
|
707
|
+
case 7:
|
|
708
|
+
return _context6.abrupt("return", validatedValues);
|
|
709
|
+
case 8:
|
|
573
710
|
case "end":
|
|
574
711
|
return _context6.stop();
|
|
575
712
|
}
|
|
576
|
-
}, _callee6, null, [[0,
|
|
713
|
+
}, _callee6, null, [[0, 2], [4, 6]]);
|
|
577
714
|
}));
|
|
578
715
|
});
|
|
579
716
|
var formInstance = (0, _react.useMemo)(function () {
|
|
@@ -597,6 +734,10 @@ var useForm = exports.useForm = function useForm() {
|
|
|
597
734
|
unregisterField: formCore.unregisterField
|
|
598
735
|
});
|
|
599
736
|
}, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
|
|
737
|
+
// Function-form rules get the FULL form instance (error getters, touched
|
|
738
|
+
// state, mutators) instead of the bare core methods. Ref write — cheap and
|
|
739
|
+
// idempotent per render.
|
|
740
|
+
formCore.setRuleContextInstance(formInstance);
|
|
600
741
|
// ---------------------------------------------------------------------------
|
|
601
742
|
// Internals – exposed for ProForm integration. Data fields are GETTERS that
|
|
602
743
|
// read the live store, so the object is identity-stable yet never stale.
|
|
@@ -626,10 +767,12 @@ var useForm = exports.useForm = function useForm() {
|
|
|
626
767
|
validateFieldAsync: validateFieldAsync,
|
|
627
768
|
registerField: formCore.registerField,
|
|
628
769
|
unregisterField: formCore.unregisterField,
|
|
770
|
+
retainField: formCore.retainField,
|
|
771
|
+
releaseField: formCore.releaseField,
|
|
629
772
|
handleSubmit: handleSubmit,
|
|
630
773
|
handleReset: handleReset
|
|
631
774
|
};
|
|
632
|
-
}, [store, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
775
|
+
}, [store, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, formCore.retainField, formCore.releaseField, handleSubmit, handleReset]);
|
|
633
776
|
return {
|
|
634
777
|
formInstance: formInstance,
|
|
635
778
|
internals: internals,
|
|
@@ -637,4 +780,4 @@ var useForm = exports.useForm = function useForm() {
|
|
|
637
780
|
};
|
|
638
781
|
};
|
|
639
782
|
var _default = exports["default"] = useForm;
|
|
640
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VGb3JtQ29yZSIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mMyIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJBcnJheSIsImlzQXJyYXkiLCJfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkiLCJsZW5ndGgiLCJfbiIsIkYiLCJzIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsInJlamVjdGVkIiwicmVzdWx0IiwidGhlbiIsImFwcGx5IiwiX19yZXN0IiwicCIsInByb3RvdHlwZSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImhhc0N1c3RvbVZhbGlkYXRvciIsInJ1bGVzIiwic29tZSIsInJ1bGUiLCJ2YWxpZGF0b3IiLCJ1c2VGb3JtIiwiZXhwb3J0cyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsInN0b3JlIiwibWFya1ZhbGlkYXRpbmciLCJ1c2VNZW1vaXplZEZuIiwibmFtZXMiLCJhc3NpZ24iLCJnZXRTdGF0ZSIsInZhbGlkYXRpbmciLCJmb3JFYWNoIiwic2V0U3RhdGUiLCJjb21taXRSdWxlT3V0Y29tZXMiLCJvdXRjb21lcyIsImNsZWFyVmFsaWRhdGluZyIsInN0YXRlIiwiZXJyb3JzQ2hhbmdlZCIsIndhcm5pbmdzQ2hhbmdlZCIsIm5ld0Vycm9ycyIsImVycm9ycyIsIm5ld1dhcm5pbmdzIiwid2FybmluZ3MiLCJfaXRlcmF0b3IiLCJfc3RlcCIsIl9zdGVwJHZhbHVlIiwiZXJyb3IiLCJ3YXJuaW5nIiwiZXJyIiwiZmxhZ3NUb0NsZWFyIiwiZmlsdGVyIiwicGF0Y2giLCJuZXdWYWxpZGF0aW5nIiwia2V5cyIsInZhbGlkYXRlRmllbGRBc3luYyIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiZmxhZ2dlZCIsIm91dGNvbWUiLCJfeWllbGQkcnVuUnVsZXNBc3luYyIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJhYnJ1cHQiLCJpc1ZhbGlkIiwicnVuUnVsZXNBc3luYyIsImdldEZpZWxkc1ZhbHVlIiwic2VudCIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJ1c2VFdmVudENhbGxiYWNrIiwiX2NhbGxlZTIiLCJ0b3VjaGVkIiwiX2NvbnRleHQyIiwiX2RlZmluZVByb3BlcnR5MiIsImdldEZpZWxkUnVsZXMiLCJyZXNvbHZlVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJmaWVsZEVycm9ycyIsIl9jb250ZXh0NCIsImZpZWxkUnVsZXMiLCJhbGwiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCRydW5SdWxlc0FzeW5jMiIsIl9jb250ZXh0MyIsInB1c2giLCJFcnJvciIsInZhbHVlcyIsInJlZHVjZSIsImFjYyIsImRlZmluZUZpZWxkIiwiZmllbGRPcHRpb25zIiwiX2ZpZWxkT3B0aW9ucyRydWxlcyIsIkZpZWxkQ29tcG9uZW50IiwibWVtbyIsIl9hIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsIl91c2VTdG9yZVNlbGVjdG9yIiwidXNlU3RvcmVTZWxlY3RvciIsInNoYWxsb3dFcXVhbEFycmF5cyIsIl91c2VTdG9yZVNlbGVjdG9yMiIsIl9zbGljZWRUb0FycmF5MiIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwidXNlRWZmZWN0IiwiZXhpc3RpbmdSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZjIiLCJ0YXJnZXQiLCJSZWFjdCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiRnJhZ21lbnQiLCJjb25jYXQiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsImdldEZpZWxkc0Vycm9yIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwiZXZlcnkiLCJpc0ZpZWxkVmFsaWRhdGluZyIsInNldEZpZWxkc0Vycm9yIiwiZmllbGRzRXJyb3IiLCJlbnRyaWVzIiwiX3JlZiIsIl9yZWYyIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJnZXRJbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJfc3RvcmUkZ2V0U3RhdGUiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3QyIiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwidXNlTWVtbyIsInZhbGlkYXRlRmllbGRzIiwic3VibWl0IiwiaW50ZXJuYWxzIiwic2V0RmllbGRXYXJuaW5nIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFBQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsY0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksWUFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssVUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sU0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sVUFBQSxHQUFBUCxPQUFBO0FBQW9FLFNBQUFRLHlCQUFB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cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19yZXN0ID0gKHRoaXMgJiYgdGhpcy5fX3Jlc3QpIHx8IGZ1bmN0aW9uIChzLCBlKSB7XG4gICAgdmFyIHQgPSB7fTtcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcbiAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XG4gICAgICAgIH1cbiAgICByZXR1cm4gdDtcbn07XG5pbXBvcnQgeyB1c2VNZW1vLCB1c2VFZmZlY3QsIG1lbW8sIEZyYWdtZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgdXNlTWVtb2l6ZWRGbiBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZU1lbW9pemVkRm4nO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc0FzeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuaW1wb3J0IHsgdXNlU3RvcmVTZWxlY3Rvciwgc2hhbGxvd0VxdWFsQXJyYXlzIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbi8qKlxuICogT25seSBydWxlcyB3aXRoIGEgY3VzdG9tIGB2YWxpZGF0b3JgIGNhbiBiZSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIOKAlFxuICogYnVpbHRpbiBydWxlcyByZXNvbHZlIHdpdGhpbiBhIG1pY3JvdGFzaywgc28gZmxpcHBpbmcgYHZhbGlkYXRpbmdgIGZvclxuICogdGhlbSB3b3VsZCBvbmx5IGNodXJuIHN1YnNjcmliZXJzIHdpdGhvdXQgZXZlciBiZWluZyB2aXNpYmxlLlxuICovXG5jb25zdCBoYXNDdXN0b21WYWxpZGF0b3IgPSAocnVsZXMpID0+IHJ1bGVzLnNvbWUoKHJ1bGUpID0+IHR5cGVvZiBydWxlLnZhbGlkYXRvciA9PT0gJ2Z1bmN0aW9uJyk7XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHVzZUZvcm1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGNvbnN0IHVzZUZvcm0gPSAoY29uZmlnID0ge30pID0+IHtcbiAgICBjb25zdCB7IG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25SZXNldCwgdmFsaWRhdGVUcmlnZ2VyID0gJ29uQ2hhbmdlJywgfSA9IGNvbmZpZztcbiAgICBjb25zdCBmb3JtQ29yZSA9IHVzZUZvcm1Db3JlKGNvbmZpZyk7XG4gICAgY29uc3QgeyBzdG9yZSB9ID0gZm9ybUNvcmU7XG4gICAgLy8gTWFyayBmaWVsZHMgYXMgdmFsaWRhdGluZyBpbiBPTkUgY29tbWl0LiB2YWxpZGF0aW5nIC8gdG91Y2hlZCBsaXZlIGluIHRoZVxuICAgIC8vIHN0b3JlIGFsb25nc2lkZSB2YWx1ZXMg4oCUIGZsaXBwaW5nIHRoZW0gKGUuZy4gYXN5bmMgdmFsaWRhdGlvbiBhcm91bmQgYVxuICAgIC8vIGJsdXIpIG11c3Qgbm90IHJlLXJlbmRlciB0aGUgZm9ybSByb290LCBvbmx5IHRoZSBmaWVsZHMgdGhhdCBzdWJzY3JpYmVkLlxuICAgIGNvbnN0IG1hcmtWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZXMpID0+IHtcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZyk7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIG5leHRbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB2YWxpZGF0aW5nOiBuZXh0IH0pO1xuICAgIH0pO1xuICAgIC8vIEZvbGQgcGVyLWZpZWxkIHJ1bGUgb3V0Y29tZXMgaW50byBBVCBNT1NUIG9uZSBzdG9yZSBjb21taXQ6IGVycm9ycyBhbmRcbiAgICAvLyB3YXJuaW5ncyBhcmUgbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgbWFwcyBhbmQgdGhlIGBjbGVhclZhbGlkYXRpbmdgIGZsYWdzXG4gICAgLy8gYXJlIHJlbW92ZWQgaW4gdGhlIFNBTUUgcGF0Y2guIEEgbm8tb3Agb3V0Y29tZSBjb21taXRzIG5vdGhpbmcgYXQgYWxsIOKAlFxuICAgIC8vIHBlci1maWVsZCBjb21taXRzIGhlcmUgcHJldmlvdXNseSBtYWRlIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gc3dlZXAgZXZlcnlcbiAgICAvLyBzdWJzY3JpYmVyIE8oZmllbGRzKSB0aW1lcy5cbiAgICBjb25zdCBjb21taXRSdWxlT3V0Y29tZXMgPSB1c2VNZW1vaXplZEZuKChvdXRjb21lcywgY2xlYXJWYWxpZGF0aW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IGVycm9yc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHdhcm5pbmdzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0gb2Ygb3V0Y29tZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld0Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdFcnJvcnNbbmFtZV0gIT09IGVycm9yKSB7XG4gICAgICAgICAgICAgICAgbmV3RXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgZXJyb3JzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld1dhcm5pbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdXYXJuaW5nc1tuYW1lXSAhPT0gd2FybmluZykge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW25hbWVdID0gd2FybmluZztcbiAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzVG9DbGVhciA9IGNsZWFyVmFsaWRhdGluZy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgaW4gc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgIGNvbnN0IHBhdGNoID0ge307XG4gICAgICAgIGlmIChlcnJvcnNDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2guZXJyb3JzID0gbmV3RXJyb3JzO1xuICAgICAgICBpZiAod2FybmluZ3NDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2gud2FybmluZ3MgPSBuZXdXYXJuaW5ncztcbiAgICAgICAgaWYgKGZsYWdzVG9DbGVhci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgICAgICBmbGFnc1RvQ2xlYXIuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXRjaC52YWxpZGF0aW5nID0gbmV3VmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZShwYXRjaCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBoYXNDdXN0b21WYWxpZGF0b3IocnVsZXMpID8gW25hbWVdIDogW107XG4gICAgICAgIG1hcmtWYWxpZGF0aW5nKGZsYWdnZWQpO1xuICAgICAgICBsZXQgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3I6IG51bGwsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIHJ1bGVzKTtcbiAgICAgICAgICAgIG91dGNvbWUgPSB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMoW291dGNvbWVdLCBmbGFnZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiBvdXRjb21lLmVycm9yID09PSBudWxsLCBlcnJvcjogb3V0Y29tZS5lcnJvciB9O1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCBibHVyIGhhbmRsZXJcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVGaWVsZEJsdXIgPSB1c2VFdmVudENhbGxiYWNrKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgaWYgKCF0b3VjaGVkW25hbWVdKSB7XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG91Y2hlZCksIHsgW25hbWVdOiB0cnVlIH0pIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICAvLyBPbmUgY29tbWl0IHRvIHJhaXNlIHRoZSB2YWxpZGF0aW5nIGZsYWdzICh2YWxpZGF0b3ItYmVhcmluZyBmaWVsZHNcbiAgICAgICAgLy8gb25seSksIG9uZSBjb21taXQgdG8gbGFuZCBldmVyeSBlcnJvci93YXJuaW5nIGFuZCBjbGVhciB0aGUgZmxhZ3MuXG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBmaWVsZHNUb1ZhbGlkYXRlLmZpbHRlcigobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzID8gaGFzQ3VzdG9tVmFsaWRhdG9yKHJ1bGVzKSA6IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFya1ZhbGlkYXRpbmcoZmxhZ2dlZCk7XG4gICAgICAgIGNvbnN0IG91dGNvbWVzID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5aWVsZCBQcm9taXNlLmFsbChmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGlmICghcnVsZXMpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGVycm9yLCB3YXJuaW5nIH0gPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIG91dGNvbWVzLnB1c2goeyBuYW1lLCBlcnJvciwgd2FybmluZyB9KTtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgY29tbWl0UnVsZU91dGNvbWVzKG91dGNvbWVzLCBmbGFnZ2VkKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICAgICAgICAgIGVycm9yLmVycm9ycyA9IGZpZWxkRXJyb3JzO1xuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QucmVkdWNlKChhY2MsIG5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBhY2NbbmFtZV0gPSByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgZmllbGRPcHRpb25zID0ge30pID0+IHtcbiAgICAgICAgY29uc3QgeyBydWxlcyA9IFtdIH0gPSBmaWVsZE9wdGlvbnM7XG4gICAgICAgIGNvbnN0IEZpZWxkQ29tcG9uZW50ID0gbWVtbygoX2EpID0+IHtcbiAgICAgICAgICAgIHZhciB7IGNoaWxkcmVuLCByZW5kZXIgfSA9IF9hLCBwcm9wcyA9IF9fcmVzdChfYSwgW1wiY2hpbGRyZW5cIiwgXCJyZW5kZXJcIl0pO1xuICAgICAgICAgICAgLy8gUGVyLWZpZWxkIHN0b3JlIHN1YnNjcmlwdGlvbjogdGhpcyBmaWVsZCByZS1yZW5kZXJzIG9ubHkgd2hlbiBpdHNcbiAgICAgICAgICAgIC8vIG93biB2YWx1ZS9lcnJvci90b3VjaGVkL3ZhbGlkYXRpbmcgc2xpY2UgY2hhbmdlcy5cbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZFZhbHVlLCBmaWVsZEVycm9yLCBmaWVsZFRvdWNoZWQsIGZpZWxkVmFsaWRhdGluZ10gPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gc3RhdGUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuZXJyb3JzW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS50b3VjaGVkW25hbWVdLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS52YWxpZGF0aW5nW25hbWVdLFxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9LCBzaGFsbG93RXF1YWxBcnJheXMpO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBvblJlc2V0ID09PSBudWxsIHx8IG9uUmVzZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uUmVzZXQoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBGb3JtSW5zdGFuY2Ug4oCTIGVuaGFuY2VkIEFQSSBmb3IgY29uc3VtZXJzLlxuICAgIC8vXG4gICAgLy8gRXZlcnkgbWV0aG9kIGlzIHdyYXBwZWQgaW4gdXNlTWVtb2l6ZWRGbiAoc3RhYmxlIGlkZW50aXR5LCBhbHdheXMgcmVhZHMgdGhlXG4gICAgLy8gbGF0ZXN0IHN0b3JlIHN0YXRlKSBzbyB0aGUgaW5zdGFuY2Ugb2JqZWN0IGl0c2VsZiBpcyBJREVOVElUWS1TVEFCTEUgZm9yXG4gICAgLy8gdGhlIGxpZmV0aW1lIG9mIHRoZSBmb3JtIOKAlCB0aGlzIGlzIHdoYXQgbGV0cyBQcm9Gb3JtIHB1Ymxpc2ggaXQgdGhyb3VnaCB0aGVcbiAgICAvLyBzdGFibGUgY29udGV4dCB3aXRob3V0IHJlLXJlbmRlcmluZyBzdWJzY3JpYmVycyBvbiBlYWNoIGtleXN0cm9rZS5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBnZXRGaWVsZEVycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3NbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkc0Vycm9yID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IHtcbiAgICAgICAgY29uc3QgZXJyb3JzID0gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWRbbmFtZV0gfHwgZmFsc2UpO1xuICAgIGNvbnN0IGlzRmllbGRzVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgaWYgKCFuYW1lTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRvdWNoZWQpLnNvbWUoKGtleSkgPT4gdG91Y2hlZFtrZXldKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsRmllbGRzVG91Y2hlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LmV2ZXJ5KChuYW1lKSA9PiB0b3VjaGVkW25hbWVdKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZUxpc3Quc29tZSgobmFtZSkgPT4gdG91Y2hlZFtuYW1lXSk7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFZhbGlkYXRpbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UpO1xuICAgIGNvbnN0IHNldEZpZWxkc0Vycm9yID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZmllbGRzRXJyb3IpLmZvckVhY2goKFtuYW1lLCBlcnJvcl0pID0+IHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IobmFtZSwgZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBpc1RvdWNoZWQgPSB0cnVlKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQpLCB7IFtuYW1lXTogaXNUb3VjaGVkIH0pIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkKSwgZmllbGRzVG91Y2gpIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlc2V0Rm9ybUZpZWxkcyA9IHVzZU1lbW9pemVkRm4oKGZpZWxkcykgPT4ge1xuICAgICAgICBpZiAoIWZpZWxkcykge1xuICAgICAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0VmFsdWVzID0ge307XG4gICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBNb3VudC1mcm96ZW4gaW5pdGlhbFZhbHVlcyDigJQgY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIHJlc2V0RmllbGRzLlxuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9IGZvcm1Db3JlLmdldEluaXRpYWxWYWx1ZXMoKVtmaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkc1ZhbHVlKHJlc2V0VmFsdWVzKTtcbiAgICAgICAgICAgIGNvbnN0IHsgdG91Y2hlZCwgdmFsaWRhdGluZyB9ID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCB2YWxpZGF0aW5nKTtcbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdUb3VjaGVkW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogbmV3VG91Y2hlZCwgdmFsaWRhdGluZzogbmV3VmFsaWRhdGluZyB9KTtcbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IoZmllbGQsIG51bGwpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBzdWJtaXRXaXRoVmFsaWRhdGlvbiA9IHVzZU1lbW9pemVkRm4oKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBmb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSksIHsgdmFsaWRhdGVGaWVsZHM6IHZhbGlkYXRlRmllbGRzQXN5bmMsIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLCBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLCBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLCByZXNldEZpZWxkczogcmVzZXRGb3JtRmllbGRzLCBzdWJtaXQ6IHN1Ym1pdFdpdGhWYWxpZGF0aW9uLCBkZWZpbmVGaWVsZCwgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCwgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQgfSkpLCBbXG4gICAgICAgIGZvcm1Db3JlLmZvcm1JbnN0YW5jZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkc0FzeW5jLFxuICAgICAgICBnZXRGaWVsZEVycm9yLFxuICAgICAgICBnZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIGdldEZpZWxkc0Vycm9yLFxuICAgICAgICBpc0ZpZWxkVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZHNUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkVmFsaWRhdGluZyxcbiAgICAgICAgc2V0RmllbGRzRXJyb3IsXG4gICAgICAgIHNldEZpZWxkVG91Y2hlZCxcbiAgICAgICAgc2V0RmllbGRzVG91Y2hlZCxcbiAgICAgICAgcmVzZXRGb3JtRmllbGRzLFxuICAgICAgICBzdWJtaXRXaXRoVmFsaWRhdGlvbixcbiAgICAgICAgZGVmaW5lRmllbGQsXG4gICAgXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gSW50ZXJuYWxzIOKAkyBleHBvc2VkIGZvciBQcm9Gb3JtIGludGVncmF0aW9uLiBEYXRhIGZpZWxkcyBhcmUgR0VUVEVSUyB0aGF0XG4gICAgLy8gcmVhZCB0aGUgbGl2ZSBzdG9yZSwgc28gdGhlIG9iamVjdCBpcyBpZGVudGl0eS1zdGFibGUgeWV0IG5ldmVyIHN0YWxlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGludGVybmFscyA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgZ2V0IHZhbHVlcygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9ycygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHdhcm5pbmdzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkud2FybmluZ3M7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB0b3VjaGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHZhbGlkYXRpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBzdG9yZSxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICBdKTtcbiAgICByZXR1cm4geyBmb3JtSW5zdGFuY2UsIGludGVybmFscywgc3RvcmUgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
|
|
783
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLnRzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlTWVtb2l6ZWRGbiIsIl91c2VGb3JtQ29yZSIsIl9wYXRoVXRpbHMiLCJfcnVuUnVsZXMiLCJfZm9ybVN0b3JlIiwiX3ZhbGlkYXRpb25FcnJvciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJyZXNvbHZlIiwiUHJvbWlzZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJyZWplY3RlZCIsInJlc3VsdCIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInAiLCJwcm90b3R5cGUiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJoYXNSZXNvbHZlZFZhbGlkYXRvciIsInJlc29sdmVkIiwic29tZSIsInJ1bGUiLCJ2YWxpZGF0b3IiLCJ1c2VGb3JtIiwiZXhwb3J0cyIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJ1c2VGb3JtQ29yZSIsInN0b3JlIiwibGFzdEFzeW5jRXBvY2hSZWYiLCJ1c2VSZWYiLCJtYXJrVmFsaWRhdGluZyIsInVzZU1lbW9pemVkRm4iLCJuYW1lcyIsImFzc2lnbiIsImdldFN0YXRlIiwidmFsaWRhdGluZyIsImZvckVhY2giLCJzZXRTdGF0ZSIsImNvbW1pdFJ1bGVPdXRjb21lcyIsIm91dGNvbWVzIiwiY2xlYXJWYWxpZGF0aW5nIiwic3RhdGUiLCJlcnJvcnNDaGFuZ2VkIiwid2FybmluZ3NDaGFuZ2VkIiwibmV3RXJyb3JzIiwiZXJyb3JzIiwibmV3V2FybmluZ3MiLCJ3YXJuaW5ncyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX3N0ZXAkdmFsdWUiLCJlcnJvciIsIndhcm5pbmciLCJzYW1lVmFsaWRhdGlvbk5vZGUiLCJlcnIiLCJmbGFnc1RvQ2xlYXIiLCJmaWx0ZXIiLCJwYXRjaCIsIm5ld1ZhbGlkYXRpbmciLCJrZXlzIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwicnVsZXMiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwiZXBvY2giLCJ2YWx1ZXMiLCJmbGFnZ2VkIiwib3V0Y29tZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiaXNDdXJyZW50IiwiY2xlYXJGbGFncyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJiZWdpblZhbGlkYXRpb25SdW4iLCJnZXRGaWVsZHNWYWx1ZSIsInJlc29sdmVSdWxlcyIsImdldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJmbGFnZ2VkTmFtZSIsImN1cnJlbnQiLCJydW5SdWxlc0FzeW5jIiwic2VudCIsImNvZXJjZUZhaWx1cmVSZWFzb24iLCJpc1ZhbGlkYXRpb25SdW5DdXJyZW50IiwiZmluaXNoIiwic3RvcCIsImhhbmRsZUZpZWxkQmx1ciIsInVzZUV2ZW50Q2FsbGJhY2siLCJmaWVsZFRyaWdnZXIiLCJfY2FsbGVlMiIsInRvdWNoZWQiLCJhcHBsaWNhYmxlIiwiX2NvbnRleHQyIiwiX2RlZmluZVByb3BlcnR5MiIsImdldEZpZWxkUnVsZXMiLCJmaWx0ZXJSdWxlc0J5VHJpZ2dlciIsIm5vcm1hbGl6ZVRyaWdnZXJzIiwicmVzb2x2ZVZhbHVlIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiZmllbGRFcnJvcnMiLCJyZXNvbHZlZEJ5RmllbGQiLCJlcG9jaEJ5RmllbGQiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiX2NvbnRleHQ0IiwiZmllbGRSdWxlcyIsIk1hcCIsImFsbCIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMyIiwiX3QyIiwiX2NvbnRleHQzIiwicHVzaCIsIkZvcm1WYWxpZGF0aW9uRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIm1lbW8iLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiX3VzZVN0b3JlU2VsZWN0b3IiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkyIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJ1c2VFZmZlY3QiLCJyZXRhaW5GaWVsZCIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwicmVsZWFzZUZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YyIiwidGFyZ2V0IiwiUmVhY3QiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsImRvbVNhZmVQcm9wcyIsImNsb25lRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJGcmFnbWVudCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJjaGlsZCIsImluZGV4Iiwia2V5IiwiZGlzcGxheU5hbWUiLCJoYW5kbGVTdWJtaXQiLCJfY2FsbGVlNSIsInZhbGlkYXRlZFZhbHVlcyIsIl90MyIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiY29uc29sZSIsImhhbmRsZVJlc2V0IiwicmVzZXRGaWVsZHMiLCJnZXRGaWVsZEVycm9yIiwiZ2V0RmllbGRXYXJuaW5nIiwiZ2V0RmllbGRzRXJyb3IiLCJpc0ZpZWxkVG91Y2hlZCIsImlzRmllbGRzVG91Y2hlZCIsImFsbEZpZWxkc1RvdWNoZWQiLCJldmVyeSIsImlzRmllbGRWYWxpZGF0aW5nIiwic2V0RmllbGRzRXJyb3IiLCJmaWVsZHNFcnJvciIsImVudHJpZXMiLCJfcmVmIiwiX3JlZjIiLCJzZXRGaWVsZEVycm9yIiwic2V0RmllbGRUb3VjaGVkIiwiaXNUb3VjaGVkIiwic2V0RmllbGRzVG91Y2hlZCIsImZpZWxkc1RvdWNoIiwicmVzZXRGb3JtRmllbGRzIiwiZmllbGRzIiwiaW5pdGlhbFZhbHVlcyIsImdldEluaXRpYWxWYWx1ZXMiLCJuZXdWYWx1ZXMiLCJmaWVsZCIsImluaXRpYWwiLCJpbmNsdWRlcyIsInNldE5lc3RlZFZhbHVlIiwiaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zIiwibmV3VG91Y2hlZCIsInN1Ym1pdFdpdGhWYWxpZGF0aW9uIiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90NCIsIl90NSIsIl9jb250ZXh0NiIsImZvcm1JbnN0YW5jZSIsInVzZU1lbW8iLCJ2YWxpZGF0ZUZpZWxkcyIsInN1Ym1pdCIsInVucmVnaXN0ZXJGaWVsZCIsInNldFJ1bGVDb250ZXh0SW5zdGFuY2UiLCJpbnRlcm5hbHMiLCJzZXRGaWVsZFdhcm5pbmciLCJfZGVmYXVsdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxjQUFBLEdBQUFELHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBSSxZQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxVQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxTQUFBLEdBQUFOLE9BQUE7QUFPQSxJQUFBTyxVQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxnQkFBQSxHQUFBUixPQUFBO0FBQXlELFNBQUFTLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBWCx3QkFBQVcsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxRQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENB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O01BQ3pDM0UsV0FBVyxFQUFFdEgsUUFBUSxDQUFDc0gsV0FBVztNQUNqQ0csWUFBWSxFQUFFekgsUUFBUSxDQUFDeUgsWUFBWTtNQUNuQ3dCLFlBQVksRUFBWkEsWUFBWTtNQUNaTyxXQUFXLEVBQVhBO0lDcElGLENEcUlDO0VBQUEsQ0FBQyxFQUNGLENBQ0V0SixLQUFLLEVBQ0xGLFFBQVEsQ0FBQ3dGLFVBQVUsRUFDbkJ4RixRQUFRLENBQUMySCxhQUFhLEVBQ3RCM0gsUUFBUSxDQUFDdUssYUFBYSxFQUN0QnZLLFFBQVEsQ0FBQ29NLGVBQWUsRUFDeEJwTSxRQUFRLENBQUM0SCxhQUFhLEVBQ3RCekYsa0JBQWtCLEVBQ2xCbkMsUUFBUSxDQUFDd0gsYUFBYSxFQUN0QnhILFFBQVEsQ0FBQ2lNLGVBQWUsRUFDeEJqTSxRQUFRLENBQUNzSCxXQUFXLEVBQ3BCdEgsUUFBUSxDQUFDeUgsWUFBWSxFQUNyQndCLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVxQyxZQUFZLEVBQVpBLFlBQVk7SUFBRU0sU0FBUyxFQUFUQSxTQUFTO0lBQUVqTSxLQUFLLEVBQUxBO0VBQUssQ0FBRTtBQUMzQyxDQUFDO0FBQUMsSUFBQW1NLFFBQUEsR0FBQTlNLE9BQUEsY0FFYUQsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9ob29rcy91c2VGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgdXNlUmVmLCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IGNvZXJjZUZhaWx1cmVSZWFzb24sIGZpbHRlclJ1bGVzQnlUcmlnZ2VyLCBub3JtYWxpemVUcmlnZ2VycywgcmVzb2x2ZVJ1bGVzLCBydW5SdWxlc0FzeW5jLCB9IGZyb20gJy4uL3J1blJ1bGVzJztcbmltcG9ydCB7IHVzZVN0b3JlU2VsZWN0b3IsIHNoYWxsb3dFcXVhbEFycmF5cywgc2FtZVZhbGlkYXRpb25Ob2RlIH0gZnJvbSAnLi4vZm9ybVN0b3JlJztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uRXJyb3IgfSBmcm9tICcuLi92YWxpZGF0aW9uRXJyb3InO1xuLyoqXG4gKiBPbmx5IHJ1bGVzIHdpdGggYSBjdXN0b20gYHZhbGlkYXRvcmAgY2FuIGJlIGdlbnVpbmVseSBhc3luY2hyb25vdXMg4oCUXG4gKiBidWlsdGluIHJ1bGVzIHJlc29sdmUgd2l0aGluIGEgbWljcm90YXNrLCBzbyBmbGlwcGluZyBgdmFsaWRhdGluZ2AgZm9yXG4gKiB0aGVtIHdvdWxkIG9ubHkgY2h1cm4gc3Vic2NyaWJlcnMgd2l0aG91dCBldmVyIGJlaW5nIHZpc2libGUuIERlY2lkZWQgb25cbiAqIFJFU09MVkVEIHJ1bGVzOiBhIGZ1bmN0aW9uLWZvcm0gcnVsZSB0aGF0IHJlc29sdmVzIHRvIGJ1aWx0aW4tb25seSBjaGVja3NcbiAqIG11c3Qgbm90IGZsaWNrZXIgdGhlIGZsYWcuXG4gKi9cbmNvbnN0IGhhc1Jlc29sdmVkVmFsaWRhdG9yID0gKHJlc29sdmVkKSA9PiByZXNvbHZlZC5zb21lKChydWxlKSA9PiB0eXBlb2YgcnVsZS52YWxpZGF0b3IgPT09ICdmdW5jdGlvbicpO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IHsgc3RvcmUgfSA9IGZvcm1Db3JlO1xuICAgIC8vIEVwb2NoIG9mIHRoZSBMQVRFU1QgYXN5bmMgcnVuIHRoYXQgcmFpc2VkIGVhY2ggZmllbGQncyBgdmFsaWRhdGluZ2AgZmxhZy5cbiAgICAvLyBBIHNldHRsaW5nIHJ1biBjbGVhcnMgdGhlIGZsYWcgb25seSB3aGlsZSBpdCBpcyBzdGlsbCB0aGUgbGF0ZXN0IHJhaXNlciDigJRcbiAgICAvLyBhbiBvbGRlciBydW4gbXVzdCBub3QgYmxhbmsgdGhlIHNwaW5uZXIgb2YgYSBuZXdlciBvbmUsIGFuZCBhIHJ1blxuICAgIC8vIHN1cGVyc2VkZWQgYnkgYSBTWU5DIGNvbW1pdCAod2hpY2ggbmV2ZXIgdG91Y2hlcyBmbGFncykgbXVzdCBzdGlsbCBjbGVhblxuICAgIC8vIHVwIGFmdGVyIGl0c2VsZi5cbiAgICBjb25zdCBsYXN0QXN5bmNFcG9jaFJlZiA9IHVzZVJlZih7fSk7XG4gICAgLy8gTWFyayBmaWVsZHMgYXMgdmFsaWRhdGluZyBpbiBPTkUgY29tbWl0LiB2YWxpZGF0aW5nIC8gdG91Y2hlZCBsaXZlIGluIHRoZVxuICAgIC8vIHN0b3JlIGFsb25nc2lkZSB2YWx1ZXMg4oCUIGZsaXBwaW5nIHRoZW0gKGUuZy4gYXN5bmMgdmFsaWRhdGlvbiBhcm91bmQgYVxuICAgIC8vIGJsdXIpIG11c3Qgbm90IHJlLXJlbmRlciB0aGUgZm9ybSByb290LCBvbmx5IHRoZSBmaWVsZHMgdGhhdCBzdWJzY3JpYmVkLlxuICAgIGNvbnN0IG1hcmtWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZXMpID0+IHtcbiAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmV4dCA9IE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZyk7XG4gICAgICAgIG5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIG5leHRbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB2YWxpZGF0aW5nOiBuZXh0IH0pO1xuICAgIH0pO1xuICAgIC8vIEZvbGQgcGVyLWZpZWxkIHJ1bGUgb3V0Y29tZXMgaW50byBBVCBNT1NUIG9uZSBzdG9yZSBjb21taXQ6IGVycm9ycyBhbmRcbiAgICAvLyB3YXJuaW5ncyBhcmUgbWVyZ2VkIG92ZXIgdGhlIGN1cnJlbnQgbWFwcyBhbmQgdGhlIGBjbGVhclZhbGlkYXRpbmdgIGZsYWdzXG4gICAgLy8gYXJlIHJlbW92ZWQgaW4gdGhlIFNBTUUgcGF0Y2guIEEgbm8tb3Agb3V0Y29tZSBjb21taXRzIG5vdGhpbmcgYXQgYWxsIOKAlFxuICAgIC8vIHBlci1maWVsZCBjb21taXRzIGhlcmUgcHJldmlvdXNseSBtYWRlIHN1Ym1pdC10aW1lIHZhbGlkYXRpb24gc3dlZXAgZXZlcnlcbiAgICAvLyBzdWJzY3JpYmVyIE8oZmllbGRzKSB0aW1lcy5cbiAgICBjb25zdCBjb21taXRSdWxlT3V0Y29tZXMgPSB1c2VNZW1vaXplZEZuKChvdXRjb21lcywgY2xlYXJWYWxpZGF0aW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0U3RhdGUoKTtcbiAgICAgICAgbGV0IGVycm9yc0NoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgbGV0IHdhcm5pbmdzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBjb25zdCBuZXdFcnJvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5lcnJvcnMpO1xuICAgICAgICBjb25zdCBuZXdXYXJuaW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLndhcm5pbmdzKTtcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0gb2Ygb3V0Y29tZXMpIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld0Vycm9ycykge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2FtZVZhbGlkYXRpb25Ob2RlKG5ld0Vycm9yc1tuYW1lXSwgZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgbmV3RXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgZXJyb3JzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAod2FybmluZyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChuYW1lIGluIG5ld1dhcm5pbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tuYW1lXTtcbiAgICAgICAgICAgICAgICAgICAgd2FybmluZ3NDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghc2FtZVZhbGlkYXRpb25Ob2RlKG5ld1dhcm5pbmdzW25hbWVdLCB3YXJuaW5nKSkge1xuICAgICAgICAgICAgICAgIG5ld1dhcm5pbmdzW25hbWVdID0gd2FybmluZztcbiAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYWdzVG9DbGVhciA9IGNsZWFyVmFsaWRhdGluZy5maWx0ZXIoKG5hbWUpID0+IG5hbWUgaW4gc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgIGNvbnN0IHBhdGNoID0ge307XG4gICAgICAgIGlmIChlcnJvcnNDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2guZXJyb3JzID0gbmV3RXJyb3JzO1xuICAgICAgICBpZiAod2FybmluZ3NDaGFuZ2VkKVxuICAgICAgICAgICAgcGF0Y2gud2FybmluZ3MgPSBuZXdXYXJuaW5ncztcbiAgICAgICAgaWYgKGZsYWdzVG9DbGVhci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudmFsaWRhdGluZyk7XG4gICAgICAgICAgICBmbGFnc1RvQ2xlYXIuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYXRjaC52YWxpZGF0aW5nID0gbmV3VmFsaWRhdGluZztcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCA+IDApXG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZShwYXRjaCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgLy8gQ2FwdHVyZSB0aGlzIHJ1bidzIGVwb2NoOiBpZiBhIE5FV0VSIHJ1biAoc3luYyBvciBhc3luYykgc3RhcnRzIGZvclxuICAgICAgICAvLyB0aGUgZmllbGQgYmVmb3JlIHRoaXMgb25lIHNldHRsZXMsIHRoZSBvdXRjb21lIGJlbG93IGlzIHN0YWxlIGFuZCBpc1xuICAgICAgICAvLyBkaXNjYXJkZWQgaW5zdGVhZCBvZiBvdmVyd3JpdGluZyB0aGUgbmV3ZXIgcmVzdWx0LlxuICAgICAgICBjb25zdCBlcG9jaCA9IGZvcm1Db3JlLmJlZ2luVmFsaWRhdGlvblJ1bihuYW1lKTtcbiAgICAgICAgLy8gUmVzb2x2ZSBvbmNlOiB0aGUgZmxhZyBkZWNpc2lvbiBuZWVkcyByZXNvbHZlZCBydWxlcywgYW5kIHBhc3NpbmcgdGhlXG4gICAgICAgIC8vIHJlc29sdmVkIGFycmF5IG9ud2FyZCBzcGFyZXMgdGhlIGVuZ2luZSBhIHJlLXJlc29sdXRpb24uXG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCk7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZVJ1bGVzKHJ1bGVzLCB2YWx1ZXMsIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSk7XG4gICAgICAgIGNvbnN0IGZsYWdnZWQgPSBoYXNSZXNvbHZlZFZhbGlkYXRvcihyZXNvbHZlZCkgPyBbbmFtZV0gOiBbXTtcbiAgICAgICAgbWFya1ZhbGlkYXRpbmcoZmxhZ2dlZCk7XG4gICAgICAgIGZsYWdnZWQuZm9yRWFjaCgoZmxhZ2dlZE5hbWUpID0+IHtcbiAgICAgICAgICAgIGxhc3RBc3luY0Vwb2NoUmVmLmN1cnJlbnRbZmxhZ2dlZE5hbWVdID0gZXBvY2g7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3I6IG51bGwsIHdhcm5pbmc6IG51bGwgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIHZhbHVlcywgcmVzb2x2ZWQsIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSk7XG4gICAgICAgICAgICBvdXRjb21lID0geyBuYW1lLCBlcnJvciwgd2FybmluZyB9O1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIFRoZSBlbmdpbmUgY29udGFpbnMgcnVsZS1sZXZlbCB0aHJvd3MgaXRzZWxmOyB0aGlzIGlzIGEgbGFzdC1yZXNvcnRcbiAgICAgICAgICAgIC8vIG5ldCBzbyBhbiB1bmV4cGVjdGVkIGZhaWx1cmUgc3VyZmFjZXMgYXMgYSBmaWVsZCBlcnJvciBpbnN0ZWFkIG9mXG4gICAgICAgICAgICAvLyBsZWF2aW5nIHRoZSBmaWVsZCBtYXJrZWQgdmFsaWQuXG4gICAgICAgICAgICBvdXRjb21lID0geyBuYW1lLCBlcnJvcjogKF9hID0gY29lcmNlRmFpbHVyZVJlYXNvbihlcnIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnVmFsaWRhdGlvbiBmYWlsZWQnLCB3YXJuaW5nOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCBpc0N1cnJlbnQgPSBmb3JtQ29yZS5pc1ZhbGlkYXRpb25SdW5DdXJyZW50KG5hbWUsIGVwb2NoKTtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFyRmxhZ3MgPSBmbGFnZ2VkLmZpbHRlcigoZmxhZ2dlZE5hbWUpID0+IGxhc3RBc3luY0Vwb2NoUmVmLmN1cnJlbnRbZmxhZ2dlZE5hbWVdID09PSBlcG9jaCk7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMoaXNDdXJyZW50ID8gW291dGNvbWVdIDogW10sIGNsZWFyRmxhZ3MpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBDQUxMRVIgZ2V0cyB0aGlzIHJ1bidzIG93biByZXN1bHQgZWl0aGVyIHdheSAoaXRzIHByb21pc2UgaXNcbiAgICAgICAgLy8gYWJvdXQgdGhlIHZhbHVlIGl0IHdhcyBhc2tlZCB0byB2YWxpZGF0ZSk7IG9ubHkgdGhlIFNUT1JFIGNvbW1pdCBpc1xuICAgICAgICAvLyBzdGFsZW5lc3MtZ3VhcmRlZC5cbiAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogb3V0Y29tZS5lcnJvciA9PT0gbnVsbCwgZXJyb3I6IG91dGNvbWUuZXJyb3IgfTtcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSwgZmllbGRUcmlnZ2VyKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdG91Y2hlZCA9IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZDtcbiAgICAgICAgaWYgKCF0b3VjaGVkW25hbWVdKSB7XG4gICAgICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG91Y2hlZCksIHsgW25hbWVdOiB0cnVlIH0pIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKCFydWxlcylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKTtcbiAgICAgICAgY29uc3QgYXBwbGljYWJsZSA9IGZpbHRlclJ1bGVzQnlUcmlnZ2VyKHJlc29sdmVSdWxlcyhydWxlcywgdmFsdWVzLCBmb3JtQ29yZS5nZXRSdWxlQ29udGV4dEluc3RhbmNlKCkpLCAnb25CbHVyJywgbm9ybWFsaXplVHJpZ2dlcnMoZmllbGRUcmlnZ2VyLCB2YWxpZGF0ZVRyaWdnZXIpLCBuYW1lKTtcbiAgICAgICAgaWYgKGFwcGxpY2FibGUubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZSh2YWx1ZXMsIG5hbWUpLCBhcHBsaWNhYmxlKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICAvLyBSZXNvbHZlIGV2ZXJ5IGZpZWxkIG9uY2UgdXAgZnJvbnQ6IHRoZSBmbGFnIGRlY2lzaW9uIG5lZWRzIHJlc29sdmVkXG4gICAgICAgIC8vIHJ1bGVzLCBhbmQgdGhlIHJlc29sdmVkIGFycmF5cyBhcmUgcmV1c2VkIGZvciB0aGUgYWN0dWFsIHJ1bnMuIEVhY2hcbiAgICAgICAgLy8gZmllbGQgYWxzbyBjYXB0dXJlcyBpdHMgdmFsaWRhdGlvbiBlcG9jaCDigJQgYSBmaWVsZCB3aG9zZSB2YWx1ZVxuICAgICAgICAvLyBjaGFuZ2VzIG1pZC1zdWJtaXQgZ2V0cyBhIG5ld2VyIHJ1biwgYW5kIHRoaXMgcnVuJ3Mgc3RhbGUgb3V0Y29tZVxuICAgICAgICAvLyBtdXN0IG5vdCBvdmVyd3JpdGUgaXQgaW4gdGhlIHN0b3JlLlxuICAgICAgICBjb25zdCByZXNvbHZlZEJ5RmllbGQgPSBuZXcgTWFwKCk7XG4gICAgICAgIGNvbnN0IGVwb2NoQnlGaWVsZCA9IG5ldyBNYXAoKTtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGZpZWxkc1RvVmFsaWRhdGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgICAgIGlmIChydWxlcykge1xuICAgICAgICAgICAgICAgIGVwb2NoQnlGaWVsZC5zZXQobmFtZSwgZm9ybUNvcmUuYmVnaW5WYWxpZGF0aW9uUnVuKG5hbWUpKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlZEJ5RmllbGQuc2V0KG5hbWUsIHJlc29sdmVSdWxlcyhydWxlcywgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgZm9ybUNvcmUuZ2V0UnVsZUNvbnRleHRJbnN0YW5jZSgpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gT25lIGNvbW1pdCB0byByYWlzZSB0aGUgdmFsaWRhdGluZyBmbGFncyAodmFsaWRhdG9yLWJlYXJpbmcgZmllbGRzXG4gICAgICAgIC8vIG9ubHkpLCBvbmUgY29tbWl0IHRvIGxhbmQgZXZlcnkgZXJyb3Ivd2FybmluZyBhbmQgY2xlYXIgdGhlIGZsYWdzLlxuICAgICAgICBjb25zdCBmbGFnZ2VkID0gZmllbGRzVG9WYWxpZGF0ZS5maWx0ZXIoKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZWRCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlZCA/IGhhc1Jlc29sdmVkVmFsaWRhdG9yKHJlc29sdmVkKSA6IGZhbHNlO1xuICAgICAgICB9KTtcbiAgICAgICAgbWFya1ZhbGlkYXRpbmcoZmxhZ2dlZCk7XG4gICAgICAgIGZsYWdnZWQuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgbGFzdEFzeW5jRXBvY2hSZWYuY3VycmVudFtuYW1lXSA9IGVwb2NoQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBvdXRjb21lcyA9IFtdO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgeWllbGQgUHJvbWlzZS5hbGwoZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNvbHZlZCA9IHJlc29sdmVkQnlGaWVsZC5nZXQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgbGV0IHdhcm5pbmcgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICh7IGVycm9yLCB3YXJuaW5nIH0gPSB5aWVsZCBydW5SdWxlc0FzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcmVzb2x2ZWQsIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExhc3QtcmVzb3J0IG5ldCAoc2VlIHZhbGlkYXRlRmllbGRBc3luYykg4oCUIGtlZXAgdGhlIG5vcm1hbFxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3RlZC1lcnJvciBmbG93IHNvIG9uRmluaXNoRmFpbGVkIGdldHMgYSByZWFsIHBheWxvYWQuXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gKF9hID0gY29lcmNlRmFpbHVyZVJlYXNvbihlcnIpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnVmFsaWRhdGlvbiBmYWlsZWQnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBUaGUgc3RvcmUgY29tbWl0IGlzIHN0YWxlbmVzcy1ndWFyZGVkOyB0aGUgU1VCTUlUIGRlY2lzaW9uXG4gICAgICAgICAgICAgICAgLy8gKGZpZWxkRXJyb3JzIC8gdGhlIHRocm93biBGb3JtVmFsaWRhdGlvbkVycm9yKSBzdGlsbCByZWZsZWN0c1xuICAgICAgICAgICAgICAgIC8vIHRoaXMgcnVuJ3Mgb3duIHJlc3VsdHMgZm9yIHRoZSB2YWx1ZXMgaXQgdmFsaWRhdGVkLlxuICAgICAgICAgICAgICAgIGNvbnN0IGVwb2NoID0gZXBvY2hCeUZpZWxkLmdldChuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZXBvY2ggIT09IHVuZGVmaW5lZCAmJiBmb3JtQ29yZS5pc1ZhbGlkYXRpb25SdW5DdXJyZW50KG5hbWUsIGVwb2NoKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRjb21lcy5wdXNoKHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjb25zdCBjbGVhckZsYWdzID0gZmxhZ2dlZC5maWx0ZXIoKG5hbWUpID0+IGxhc3RBc3luY0Vwb2NoUmVmLmN1cnJlbnRbbmFtZV0gPT09IGVwb2NoQnlGaWVsZC5nZXQobmFtZSkpO1xuICAgICAgICAgICAgY29tbWl0UnVsZU91dGNvbWVzKG91dGNvbWVzLCBjbGVhckZsYWdzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoT2JqZWN0LmtleXMoZmllbGRFcnJvcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBGb3JtVmFsaWRhdGlvbkVycm9yKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIGZpZWxkRXJyb3JzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICAvLyBQZXItZmllbGQgc3RvcmUgc3Vic2NyaXB0aW9uOiB0aGlzIGZpZWxkIHJlLXJlbmRlcnMgb25seSB3aGVuIGl0c1xuICAgICAgICAgICAgLy8gb3duIHZhbHVlL2Vycm9yL3RvdWNoZWQvdmFsaWRhdGluZyBzbGljZSBjaGFuZ2VzLiBEb3QtcGF0aHNcbiAgICAgICAgICAgIC8vIHJlc29sdmUgaW50byB0aGUgbmVzdGVkIHZhbHVlcyBsaWtlIGV2ZXJ5d2hlcmUgZWxzZS5cbiAgICAgICAgICAgIGNvbnN0IFtmaWVsZFZhbHVlLCBmaWVsZEVycm9yLCBmaWVsZFRvdWNoZWQsIGZpZWxkVmFsaWRhdGluZ10gPSB1c2VTdG9yZVNlbGVjdG9yKHN0b3JlLCAoc3RhdGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgKF9hID0gcmVzb2x2ZVZhbHVlKHN0YXRlLnZhbHVlcywgbmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcnNbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnRvdWNoZWRbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZhbGlkYXRpbmdbbmFtZV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sIHNoYWxsb3dFcXVhbEFycmF5cyk7XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1vdW50LWNvdW50ZWQ6IHJlbGVhc2VGaWVsZCByZW1vdmVzIHRoZSBydWxlcyBvbmx5IHdoZW4gdGhlXG4gICAgICAgICAgICAgICAgLy8gTEFTVCBzYW1lLW5hbWUgaW5zdGFuY2UgdW5tb3VudHMg4oCUIGFuIGluc3RhbmNlIHRoYXQgcGlnZ3liYWNrZWRcbiAgICAgICAgICAgICAgICAvLyBvbiBhbiBleGlzdGluZyByZWdpc3RyYXRpb24gKGUuZy4gYSBQcm9Gb3JtLkl0ZW0ncykgY2FuIG5ldmVyXG4gICAgICAgICAgICAgICAgLy8gd2lwZSBpdCBvbiBpdHMgb3duIHVubW91bnQuXG4gICAgICAgICAgICAgICAgZm9ybUNvcmUucmV0YWluRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlbGVhc2VGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVG91Y2hlZCBpcyBzZXQgYnkgdGhlIHVzZXIgY2hhbmdlIHRyaWdnZXIgKG1hdGNoaW5nIHRoZVxuICAgICAgICAgICAgICAgIC8vIFByb0Zvcm0uSXRlbSBwYXRoKSDigJQgcHJvZ3JhbW1hdGljIHNldEZpZWxkc1ZhbHVlIGRvZXMgbm90LlxuICAgICAgICAgICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCF0b3VjaGVkW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKSwgeyBbbmFtZV06IHRydWUgfSkgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGFwcGxpY2FibGUgPSBmaWx0ZXJSdWxlc0J5VHJpZ2dlcihyZXNvbHZlUnVsZXMocnVsZXMsIGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIGZvcm1Db3JlLmdldFJ1bGVDb250ZXh0SW5zdGFuY2UoKSksICdvbkNoYW5nZScsIG5vcm1hbGl6ZVRyaWdnZXJzKGZpZWxkT3B0aW9ucy52YWxpZGF0ZVRyaWdnZXIsIHZhbGlkYXRlVHJpZ2dlciksIG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChhcHBsaWNhYmxlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBhcHBsaWNhYmxlLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUsIGZpZWxkT3B0aW9ucy52YWxpZGF0ZVRyaWdnZXIpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBFbGVtZW50IGNoaWxkcmVuIHJlY2VpdmUgb25seSBET00tc2FmZSBwcm9wcyDigJQgZXJyb3IvdG91Y2hlZC9cbiAgICAgICAgICAgIC8vIHZhbGlkYXRpbmcgYXJlIGZpZWxkIE1FVEEsIG5vdCBjb250cm9sIHByb3BzOyBzcHJlYWRpbmcgdGhlbSBvbnRvXG4gICAgICAgICAgICAvLyBhIGhvc3QgZWxlbWVudCB3b3VsZCBsZWFrIHVua25vd24gYXR0cmlidXRlcy4gUmVuZGVyLXByb3AgYW5kXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBjaGlsZHJlbiBrZWVwIHRoZSBmdWxsIGZpZWxkUHJvcHMuXG4gICAgICAgICAgICBjb25zdCBkb21TYWZlUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGRvbVNhZmVQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBkb21TYWZlUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4IH0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIE9ubHkgYSBWQUxJREFUSU9OIGZhaWx1cmUgcmVhY2hlcyBvbkZpbmlzaEZhaWxlZCDigJQgYW4gZXhjZXB0aW9uIG91dFxuICAgICAgICAgICAgLy8gb2YgdGhlIGNvbnN1bWVyJ3Mgb3duIG9uRmluaXNoIGlzIG5vdCBhIHZhbGlkYXRpb24gcmVzdWx0IGFuZCBpc1xuICAgICAgICAgICAgLy8gc3VyZmFjZWQgaW5zdGVhZCBvZiBiZWluZyBtaXNyZXBvcnRlZC5cbiAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBGb3JtVmFsaWRhdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiBlcnIudmFsdWVzLCBlcnJvcnM6IGVyci5lcnJvcnMgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdbUHJvRm9ybV0gb25GaW5pc2ggdGhyZXcgZHVyaW5nIHN1Ym1pdDonLCBlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVycy5cbiAgICAvL1xuICAgIC8vIEV2ZXJ5IG1ldGhvZCBpcyB3cmFwcGVkIGluIHVzZU1lbW9pemVkRm4gKHN0YWJsZSBpZGVudGl0eSwgYWx3YXlzIHJlYWRzIHRoZVxuICAgIC8vIGxhdGVzdCBzdG9yZSBzdGF0ZSkgc28gdGhlIGluc3RhbmNlIG9iamVjdCBpdHNlbGYgaXMgSURFTlRJVFktU1RBQkxFIGZvclxuICAgIC8vIHRoZSBsaWZldGltZSBvZiB0aGUgZm9ybSDigJQgdGhpcyBpcyB3aGF0IGxldHMgUHJvRm9ybSBwdWJsaXNoIGl0IHRocm91Z2ggdGhlXG4gICAgLy8gc3RhYmxlIGNvbnRleHQgd2l0aG91dCByZS1yZW5kZXJpbmcgc3Vic2NyaWJlcnMgb24gZWFjaCBrZXlzdHJva2UuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZ2V0RmllbGRFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZFdhcm5pbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KVxuICAgICAgICAgICAgcmV0dXJuIGVycm9ycztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgIG5hbWVMaXN0LmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChlcnJvcnNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBlcnJvcnNbbmFtZV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRvdWNoZWQgPSBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh0b3VjaGVkKS5zb21lKChrZXkpID0+IHRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gdG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBzZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc0Vycm9yKSA9PiB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yKG5hbWUsIGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHRvdWNoZWQ6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkKSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCBzZXRGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIGZpZWxkc1RvdWNoKSB9KTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTW91bnQtZnJvemVuIGluaXRpYWxWYWx1ZXMg4oCUIGNvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCByZXNldEZpZWxkcy5cbiAgICAgICAgLy8gUmVhZHMgQU5EIHdyaXRlcyBhcmUgbmVzdGVkLXBhdGggYXdhcmUsIHNvIGRvdC1wYXRoIG5hbWVzXG4gICAgICAgIC8vIChgYWRkcmVzcy5jaXR5YCwgYGl0ZW1zLjAudGl0bGVgKSByZXNldCBjb3JyZWN0bHkgaW5zdGVhZCBvZiBwcm9iaW5nIGFcbiAgICAgICAgLy8gbGl0ZXJhbCBrZXkgYW5kIHNoYWxsb3ctbWVyZ2luZyBvbmUgYmFjay5cbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlcyA9IGZvcm1Db3JlLmdldEluaXRpYWxWYWx1ZXMoKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgbmV3VmFsdWVzID0gc3RhdGUudmFsdWVzO1xuICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWwgPSByZXNvbHZlVmFsdWUoaW5pdGlhbFZhbHVlcywgZmllbGQpO1xuICAgICAgICAgICAgbmV3VmFsdWVzID0gZmllbGQuaW5jbHVkZXMoJy4nKVxuICAgICAgICAgICAgICAgID8gc2V0TmVzdGVkVmFsdWUobmV3VmFsdWVzLCBmaWVsZCwgaW5pdGlhbClcbiAgICAgICAgICAgICAgICA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbmV3VmFsdWVzKSwgeyBbZmllbGRdOiBpbml0aWFsIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gTGlrZSB0aGUgZnVsbCByZXNldDogY2xlYXIgQUxMIHBlci1maWVsZCBtZXRhIChlcnJvcnMgQU5EIHdhcm5pbmdzIEFORFxuICAgICAgICAvLyB0b3VjaGVkL3ZhbGlkYXRpbmcpLCBpbnZhbGlkYXRlIGluLWZsaWdodCB2YWxpZGF0aW9uIHJ1bnMsIGFuZCBsYW5kXG4gICAgICAgIC8vIGV2ZXJ5dGhpbmcgaW4gT05FIGNvbW1pdC4gTm8gb25WYWx1ZXNDaGFuZ2Ug4oCUIHJlc2V0IGlzIG5vdCBhIGNoYW5nZVxuICAgICAgICAvLyBldmVudCBvbiBlaXRoZXIgcGF0aC5cbiAgICAgICAgZm9ybUNvcmUuaW52YWxpZGF0ZVZhbGlkYXRpb25SdW5zKGZpZWxkcyk7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBjb25zdCBuZXdUb3VjaGVkID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUudG91Y2hlZCk7XG4gICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBkZWxldGUgbmV3RXJyb3JzW2ZpZWxkXTtcbiAgICAgICAgICAgIGRlbGV0ZSBuZXdXYXJuaW5nc1tmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7XG4gICAgICAgICAgICB2YWx1ZXM6IG5ld1ZhbHVlcyxcbiAgICAgICAgICAgIGVycm9yczogbmV3RXJyb3JzLFxuICAgICAgICAgICAgd2FybmluZ3M6IG5ld1dhcm5pbmdzLFxuICAgICAgICAgICAgdG91Y2hlZDogbmV3VG91Y2hlZCxcbiAgICAgICAgICAgIHZhbGlkYXRpbmc6IG5ld1ZhbGlkYXRpbmcsXG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBsZXQgdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGlvbiBmYWlsdXJlIOKAlCB0aGUgZmllbGQgZXJyb3JzIGFyZSBhbHJlYWR5IGluIHRoZSBzdG9yZS5cbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHlpZWxkIGNhbGxiYWNrKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gQSB0aHJvd2luZyBjYWxsYmFjayBpcyBhIGNvbnN1bWVyIGJ1Zywgbm90IGEgdmFsaWRhdGlvbiBmYWlsdXJlIOKAlFxuICAgICAgICAgICAgICAgIC8vIHN1cmZhY2UgaXQgKG1pcnJvcmluZyByYy1maWVsZC1mb3JtJ3Mgb25GaW5pc2ggaGFuZGxpbmcpIGluc3RlYWRcbiAgICAgICAgICAgICAgICAvLyBvZiBzd2FsbG93aW5nIGl0IHNpbGVudGx5LlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1tQcm9Gb3JtXSBzdWJtaXQgY2FsbGJhY2sgdGhyZXc6JywgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyBGdW5jdGlvbi1mb3JtIHJ1bGVzIGdldCB0aGUgRlVMTCBmb3JtIGluc3RhbmNlIChlcnJvciBnZXR0ZXJzLCB0b3VjaGVkXG4gICAgLy8gc3RhdGUsIG11dGF0b3JzKSBpbnN0ZWFkIG9mIHRoZSBiYXJlIGNvcmUgbWV0aG9kcy4gUmVmIHdyaXRlIOKAlCBjaGVhcCBhbmRcbiAgICAvLyBpZGVtcG90ZW50IHBlciByZW5kZXIuXG4gICAgZm9ybUNvcmUuc2V0UnVsZUNvbnRleHRJbnN0YW5jZShmb3JtSW5zdGFuY2UpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEludGVybmFscyDigJMgZXhwb3NlZCBmb3IgUHJvRm9ybSBpbnRlZ3JhdGlvbi4gRGF0YSBmaWVsZHMgYXJlIEdFVFRFUlMgdGhhdFxuICAgIC8vIHJlYWQgdGhlIGxpdmUgc3RvcmUsIHNvIHRoZSBvYmplY3QgaXMgaWRlbnRpdHktc3RhYmxlIHlldCBuZXZlciBzdGFsZS5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS52YWx1ZXM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS5lcnJvcnM7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB3YXJuaW5ncygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLndhcm5pbmdzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdG91Y2hlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCB2YWxpZGF0aW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nOiBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGQ6IGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHJldGFpbkZpZWxkOiBmb3JtQ29yZS5yZXRhaW5GaWVsZCxcbiAgICAgICAgcmVsZWFzZUZpZWxkOiBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgfSksIFtcbiAgICAgICAgc3RvcmUsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGZvcm1Db3JlLnJldGFpbkZpZWxkLFxuICAgICAgICBmb3JtQ29yZS5yZWxlYXNlRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMsIHN0b3JlIH07XG59O1xuZXhwb3J0IGRlZmF1bHQgdXNlRm9ybTsiXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|