@1money/component-ui 0.0.71 → 0.0.74
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/ProForm/ProForm.d.ts +10 -2
- package/es/components/ProForm/ProForm.js +241 -55
- package/es/components/ProForm/ProFormDependency.d.ts +11 -2
- package/es/components/ProForm/ProFormDependency.js +29 -133
- package/es/components/ProForm/ProFormItem.js +146 -52
- package/es/components/ProForm/ProFormList.js +114 -62
- package/es/components/ProForm/SchemaForm.d.ts +7 -0
- package/es/components/ProForm/SchemaForm.js +103 -0
- package/es/components/ProForm/Submitter.js +26 -5
- package/es/components/ProForm/context.d.ts +30 -3
- package/es/components/ProForm/context.js +69 -10
- package/es/components/ProForm/core/constants.d.ts +12 -3
- package/es/components/ProForm/core/constants.js +18 -7
- package/es/components/ProForm/core/formStore.d.ts +24 -0
- package/es/components/ProForm/core/formStore.js +101 -0
- package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
- package/es/components/ProForm/core/hooks/useForm.js +336 -212
- package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
- package/es/components/ProForm/core/hooks/useFormCore.js +151 -93
- package/es/components/ProForm/core/interface.d.ts +33 -12
- package/es/components/ProForm/core/runRules.d.ts +20 -8
- package/es/components/ProForm/core/runRules.js +105 -50
- package/es/components/ProForm/core/useFormItem.d.ts +10 -1
- package/es/components/ProForm/core/useFormItem.js +141 -56
- package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
- package/es/components/ProForm/fields/createProFormField.js +61 -32
- package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
- package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
- package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
- package/es/components/ProForm/hooks/useUrlSync.js +170 -0
- package/es/components/ProForm/index.d.ts +12 -5
- package/es/components/ProForm/index.js +7 -2
- package/es/components/ProForm/interface.d.ts +185 -28
- package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DialogForm.js +18 -7
- package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/es/components/ProForm/layouts/DrawerForm.js +17 -7
- package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/es/components/ProForm/layouts/QueryFilter.js +47 -71
- package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
- package/es/components/ProForm/style/ProForm.css +4 -4
- package/es/components/ProForm/utils.d.ts +12 -1
- package/es/components/ProForm/utils.js +101 -28
- package/es/components/ProTable/ProTable.js +3 -3
- package/es/components/Tooltip/style/Tooltip.css +1 -0
- package/es/index.css +1 -1
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/lib/components/ProForm/ProForm.d.ts +10 -2
- package/lib/components/ProForm/ProForm.js +239 -53
- package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
- package/lib/components/ProForm/ProFormDependency.js +30 -135
- package/lib/components/ProForm/ProFormItem.js +143 -48
- package/lib/components/ProForm/ProFormList.js +112 -60
- package/lib/components/ProForm/SchemaForm.d.ts +7 -0
- package/lib/components/ProForm/SchemaForm.js +110 -0
- package/lib/components/ProForm/Submitter.js +26 -5
- package/lib/components/ProForm/context.d.ts +30 -3
- package/lib/components/ProForm/context.js +69 -10
- package/lib/components/ProForm/core/constants.d.ts +12 -3
- package/lib/components/ProForm/core/constants.js +19 -8
- package/lib/components/ProForm/core/formStore.d.ts +24 -0
- package/lib/components/ProForm/core/formStore.js +110 -0
- package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
- package/lib/components/ProForm/core/hooks/useForm.js +336 -212
- package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
- package/lib/components/ProForm/core/hooks/useFormCore.js +150 -92
- package/lib/components/ProForm/core/interface.d.ts +33 -12
- package/lib/components/ProForm/core/runRules.d.ts +20 -8
- package/lib/components/ProForm/core/runRules.js +106 -50
- package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
- package/lib/components/ProForm/core/useFormItem.js +138 -53
- package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
- package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
- package/lib/components/ProForm/fields/createProFormField.js +61 -32
- package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
- package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
- package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
- package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
- package/lib/components/ProForm/index.d.ts +12 -5
- package/lib/components/ProForm/index.js +16 -1
- package/lib/components/ProForm/interface.d.ts +185 -28
- package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DialogForm.js +18 -7
- package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
- package/lib/components/ProForm/layouts/DrawerForm.js +17 -7
- package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
- package/lib/components/ProForm/layouts/QueryFilter.js +46 -70
- package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
- package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
- package/lib/components/ProForm/style/ProForm.css +4 -4
- package/lib/components/ProForm/utils.d.ts +12 -1
- package/lib/components/ProForm/utils.js +104 -28
- package/lib/components/ProTable/ProTable.js +3 -3
- package/lib/components/Tooltip/style/Tooltip.css +1 -0
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -2
- package/lib/index.js +13 -1
- package/package.json +1 -1
- package/scripts/mcp-server/examples.generated.json +90 -0
- package/scripts/mcp-server/index.generated.json +1866 -212
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
|
|
2
2
|
import _typeof from "@babel/runtime/helpers/esm/typeof";
|
|
3
|
-
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
4
3
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
4
|
+
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
|
|
5
5
|
import _regeneratorRuntime from "@babel/runtime/regenerator";
|
|
6
|
+
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; } } }; }
|
|
7
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
8
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
6
9
|
var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {
|
|
7
10
|
function adopt(value) {
|
|
8
11
|
return value instanceof P ? value : new P(function (resolve) {
|
|
@@ -38,14 +41,24 @@ var __rest = this && this.__rest || function (s, e) {
|
|
|
38
41
|
}
|
|
39
42
|
return t;
|
|
40
43
|
};
|
|
41
|
-
import {
|
|
44
|
+
import { useMemo, useEffect, memo, Fragment } from 'react';
|
|
42
45
|
import React from 'react';
|
|
43
46
|
import useEventCallback from '@1money/hooks/useEventCallback';
|
|
44
47
|
import useMemoizedFn from '@1money/hooks/useMemoizedFn';
|
|
45
|
-
import useSafeState from '@1money/hooks/useSafeState';
|
|
46
48
|
import { useFormCore } from './useFormCore';
|
|
47
49
|
import { resolveValue } from '../pathUtils';
|
|
48
50
|
import { runRulesAsync } from '../runRules';
|
|
51
|
+
import { useStoreSelector, shallowEqualArrays } from '../formStore';
|
|
52
|
+
/**
|
|
53
|
+
* Only rules with a custom `validator` can be genuinely asynchronous —
|
|
54
|
+
* builtin rules resolve within a microtask, so flipping `validating` for
|
|
55
|
+
* them would only churn subscribers without ever being visible.
|
|
56
|
+
*/
|
|
57
|
+
var hasCustomValidator = function hasCustomValidator(rules) {
|
|
58
|
+
return rules.some(function (rule) {
|
|
59
|
+
return typeof rule.validator === 'function';
|
|
60
|
+
});
|
|
61
|
+
};
|
|
49
62
|
// ---------------------------------------------------------------------------
|
|
50
63
|
// useForm
|
|
51
64
|
// ---------------------------------------------------------------------------
|
|
@@ -57,23 +70,84 @@ export var useForm = function useForm() {
|
|
|
57
70
|
_config$validateTrigg = config.validateTrigger,
|
|
58
71
|
validateTrigger = _config$validateTrigg === void 0 ? 'onChange' : _config$validateTrigg;
|
|
59
72
|
var formCore = useFormCore(config);
|
|
60
|
-
var
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
var
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
73
|
+
var store = formCore.store;
|
|
74
|
+
// Mark fields as validating in ONE commit. validating / touched live in the
|
|
75
|
+
// store alongside values — flipping them (e.g. async validation around a
|
|
76
|
+
// blur) must not re-render the form root, only the fields that subscribed.
|
|
77
|
+
var markValidating = useMemoizedFn(function (names) {
|
|
78
|
+
if (names.length === 0) return;
|
|
79
|
+
var next = Object.assign({}, store.getState().validating);
|
|
80
|
+
names.forEach(function (name) {
|
|
81
|
+
next[name] = true;
|
|
82
|
+
});
|
|
83
|
+
store.setState({
|
|
84
|
+
validating: next
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
// Fold per-field rule outcomes into AT MOST one store commit: errors and
|
|
88
|
+
// warnings are merged over the current maps and the `clearValidating` flags
|
|
89
|
+
// are removed in the SAME patch. A no-op outcome commits nothing at all —
|
|
90
|
+
// per-field commits here previously made submit-time validation sweep every
|
|
91
|
+
// subscriber O(fields) times.
|
|
92
|
+
var commitRuleOutcomes = useMemoizedFn(function (outcomes, clearValidating) {
|
|
93
|
+
var state = store.getState();
|
|
94
|
+
var errorsChanged = false;
|
|
95
|
+
var warningsChanged = false;
|
|
96
|
+
var newErrors = Object.assign({}, state.errors);
|
|
97
|
+
var newWarnings = Object.assign({}, state.warnings);
|
|
98
|
+
var _iterator = _createForOfIteratorHelper(outcomes),
|
|
99
|
+
_step;
|
|
100
|
+
try {
|
|
101
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
102
|
+
var _step$value = _step.value,
|
|
103
|
+
name = _step$value.name,
|
|
104
|
+
error = _step$value.error,
|
|
105
|
+
warning = _step$value.warning;
|
|
106
|
+
if (error === null) {
|
|
107
|
+
if (name in newErrors) {
|
|
108
|
+
delete newErrors[name];
|
|
109
|
+
errorsChanged = true;
|
|
110
|
+
}
|
|
111
|
+
} else if (newErrors[name] !== error) {
|
|
112
|
+
newErrors[name] = error;
|
|
113
|
+
errorsChanged = true;
|
|
114
|
+
}
|
|
115
|
+
if (warning === null) {
|
|
116
|
+
if (name in newWarnings) {
|
|
117
|
+
delete newWarnings[name];
|
|
118
|
+
warningsChanged = true;
|
|
119
|
+
}
|
|
120
|
+
} else if (newWarnings[name] !== warning) {
|
|
121
|
+
newWarnings[name] = warning;
|
|
122
|
+
warningsChanged = true;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
} catch (err) {
|
|
126
|
+
_iterator.e(err);
|
|
127
|
+
} finally {
|
|
128
|
+
_iterator.f();
|
|
129
|
+
}
|
|
130
|
+
var flagsToClear = clearValidating.filter(function (name) {
|
|
131
|
+
return name in state.validating;
|
|
132
|
+
});
|
|
133
|
+
var patch = {};
|
|
134
|
+
if (errorsChanged) patch.errors = newErrors;
|
|
135
|
+
if (warningsChanged) patch.warnings = newWarnings;
|
|
136
|
+
if (flagsToClear.length > 0) {
|
|
137
|
+
var newValidating = Object.assign({}, state.validating);
|
|
138
|
+
flagsToClear.forEach(function (name) {
|
|
139
|
+
delete newValidating[name];
|
|
140
|
+
});
|
|
141
|
+
patch.validating = newValidating;
|
|
142
|
+
}
|
|
143
|
+
if (Object.keys(patch).length > 0) store.setState(patch);
|
|
144
|
+
});
|
|
71
145
|
// ---------------------------------------------------------------------------
|
|
72
146
|
// Async field validation – each rule is processed exactly once
|
|
73
147
|
// ---------------------------------------------------------------------------
|
|
74
148
|
var validateFieldAsync = useMemoizedFn(function (name, value, rules) {
|
|
75
149
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee() {
|
|
76
|
-
var error;
|
|
150
|
+
var flagged, outcome, _yield$runRulesAsync, error, warning;
|
|
77
151
|
return _regeneratorRuntime.wrap(function (_context) {
|
|
78
152
|
while (1) switch (_context.prev = _context.next) {
|
|
79
153
|
case 0:
|
|
@@ -86,44 +160,39 @@ export var useForm = function useForm() {
|
|
|
86
160
|
error: null
|
|
87
161
|
});
|
|
88
162
|
case 1:
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
163
|
+
flagged = hasCustomValidator(rules) ? [name] : [];
|
|
164
|
+
markValidating(flagged);
|
|
165
|
+
outcome = {
|
|
166
|
+
name: name,
|
|
167
|
+
error: null,
|
|
168
|
+
warning: null
|
|
169
|
+
};
|
|
92
170
|
_context.prev = 2;
|
|
93
171
|
_context.next = 3;
|
|
94
|
-
return runRulesAsync(name, value, formCore.
|
|
172
|
+
return runRulesAsync(name, value, formCore.getFieldsValue(), rules);
|
|
95
173
|
case 3:
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
error: error
|
|
105
|
-
});
|
|
174
|
+
_yield$runRulesAsync = _context.sent;
|
|
175
|
+
error = _yield$runRulesAsync.error;
|
|
176
|
+
warning = _yield$runRulesAsync.warning;
|
|
177
|
+
outcome = {
|
|
178
|
+
name: name,
|
|
179
|
+
error: error,
|
|
180
|
+
warning: warning
|
|
181
|
+
};
|
|
106
182
|
case 4:
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
return _context.abrupt("return", {
|
|
111
|
-
isValid: true,
|
|
112
|
-
error: null
|
|
113
|
-
});
|
|
183
|
+
_context.prev = 4;
|
|
184
|
+
commitRuleOutcomes([outcome], flagged);
|
|
185
|
+
return _context.finish(4);
|
|
114
186
|
case 5:
|
|
115
|
-
_context.
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
delete newValidating[name];
|
|
119
|
-
return newValidating;
|
|
187
|
+
return _context.abrupt("return", {
|
|
188
|
+
isValid: outcome.error === null,
|
|
189
|
+
error: outcome.error
|
|
120
190
|
});
|
|
121
|
-
return _context.finish(5);
|
|
122
191
|
case 6:
|
|
123
192
|
case "end":
|
|
124
193
|
return _context.stop();
|
|
125
194
|
}
|
|
126
|
-
}, _callee, null, [[2,,
|
|
195
|
+
}, _callee, null, [[2,, 4, 5]]);
|
|
127
196
|
}));
|
|
128
197
|
});
|
|
129
198
|
// ---------------------------------------------------------------------------
|
|
@@ -131,20 +200,23 @@ export var useForm = function useForm() {
|
|
|
131
200
|
// ---------------------------------------------------------------------------
|
|
132
201
|
var handleFieldBlur = useEventCallback(function (name) {
|
|
133
202
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
|
|
134
|
-
var rules;
|
|
203
|
+
var touched, rules;
|
|
135
204
|
return _regeneratorRuntime.wrap(function (_context2) {
|
|
136
205
|
while (1) switch (_context2.prev = _context2.next) {
|
|
137
206
|
case 0:
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
207
|
+
touched = store.getState().touched;
|
|
208
|
+
if (!touched[name]) {
|
|
209
|
+
store.setState({
|
|
210
|
+
touched: Object.assign(Object.assign({}, touched), _defineProperty({}, name, true))
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
rules = formCore.getFieldRules(name);
|
|
142
214
|
if (!(rules && validateTrigger === 'onBlur')) {
|
|
143
215
|
_context2.next = 1;
|
|
144
216
|
break;
|
|
145
217
|
}
|
|
146
218
|
_context2.next = 1;
|
|
147
|
-
return validateFieldAsync(name, resolveValue(formCore.
|
|
219
|
+
return validateFieldAsync(name, resolveValue(formCore.getFieldsValue(), name), rules);
|
|
148
220
|
case 1:
|
|
149
221
|
case "end":
|
|
150
222
|
return _context2.stop();
|
|
@@ -157,86 +229,108 @@ export var useForm = function useForm() {
|
|
|
157
229
|
// ---------------------------------------------------------------------------
|
|
158
230
|
var validateFieldsAsync = useMemoizedFn(function (nameList) {
|
|
159
231
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
|
|
160
|
-
var fieldsToValidate,
|
|
232
|
+
var fieldsToValidate, fieldErrors, flagged, outcomes, error;
|
|
161
233
|
return _regeneratorRuntime.wrap(function (_context4) {
|
|
162
234
|
while (1) switch (_context4.prev = _context4.next) {
|
|
163
235
|
case 0:
|
|
164
236
|
fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
237
|
+
fieldErrors = {}; // One commit to raise the validating flags (validator-bearing fields
|
|
238
|
+
// only), one commit to land every error/warning and clear the flags.
|
|
239
|
+
flagged = fieldsToValidate.filter(function (name) {
|
|
240
|
+
var rules = formCore.fieldRules[name];
|
|
241
|
+
return rules ? hasCustomValidator(rules) : false;
|
|
242
|
+
});
|
|
243
|
+
markValidating(flagged);
|
|
244
|
+
outcomes = [];
|
|
245
|
+
_context4.prev = 1;
|
|
246
|
+
_context4.next = 2;
|
|
247
|
+
return Promise.all(fieldsToValidate.map(function (name) {
|
|
168
248
|
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
169
|
-
var rules, _yield$
|
|
249
|
+
var rules, _yield$runRulesAsync2, error, warning;
|
|
170
250
|
return _regeneratorRuntime.wrap(function (_context3) {
|
|
171
251
|
while (1) switch (_context3.prev = _context3.next) {
|
|
172
252
|
case 0:
|
|
173
253
|
rules = formCore.fieldRules[name];
|
|
174
|
-
if (
|
|
175
|
-
_context3.next =
|
|
254
|
+
if (rules) {
|
|
255
|
+
_context3.next = 1;
|
|
176
256
|
break;
|
|
177
257
|
}
|
|
178
|
-
_context3.
|
|
179
|
-
return validateFieldAsync(name, resolveValue(formCore.values, name), rules);
|
|
258
|
+
return _context3.abrupt("return");
|
|
180
259
|
case 1:
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
260
|
+
_context3.next = 2;
|
|
261
|
+
return runRulesAsync(name, resolveValue(formCore.getFieldsValue(), name), formCore.getFieldsValue(), rules);
|
|
262
|
+
case 2:
|
|
263
|
+
_yield$runRulesAsync2 = _context3.sent;
|
|
264
|
+
error = _yield$runRulesAsync2.error;
|
|
265
|
+
warning = _yield$runRulesAsync2.warning;
|
|
266
|
+
outcomes.push({
|
|
267
|
+
name: name,
|
|
268
|
+
error: error,
|
|
269
|
+
warning: warning
|
|
270
|
+
});
|
|
271
|
+
if (error !== null) {
|
|
186
272
|
fieldErrors[name] = error;
|
|
187
273
|
}
|
|
188
|
-
case
|
|
274
|
+
case 3:
|
|
189
275
|
case "end":
|
|
190
276
|
return _context3.stop();
|
|
191
277
|
}
|
|
192
278
|
}, _callee3);
|
|
193
279
|
}));
|
|
194
|
-
});
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
280
|
+
}));
|
|
281
|
+
case 2:
|
|
282
|
+
_context4.prev = 2;
|
|
283
|
+
commitRuleOutcomes(outcomes, flagged);
|
|
284
|
+
return _context4.finish(2);
|
|
285
|
+
case 3:
|
|
286
|
+
if (!(Object.keys(fieldErrors).length > 0)) {
|
|
287
|
+
_context4.next = 4;
|
|
200
288
|
break;
|
|
201
289
|
}
|
|
202
290
|
error = new Error('Validation failed');
|
|
203
|
-
error.values = formCore.
|
|
291
|
+
error.values = formCore.getFieldsValue();
|
|
204
292
|
error.errors = fieldErrors;
|
|
205
293
|
throw error;
|
|
206
|
-
case
|
|
294
|
+
case 4:
|
|
207
295
|
if (!nameList) {
|
|
208
|
-
_context4.next =
|
|
296
|
+
_context4.next = 5;
|
|
209
297
|
break;
|
|
210
298
|
}
|
|
211
299
|
return _context4.abrupt("return", nameList.reduce(function (acc, name) {
|
|
212
|
-
acc[name] = resolveValue(formCore.
|
|
300
|
+
acc[name] = resolveValue(formCore.getFieldsValue(), name);
|
|
213
301
|
return acc;
|
|
214
302
|
}, {}));
|
|
215
|
-
case
|
|
216
|
-
return _context4.abrupt("return", formCore.
|
|
217
|
-
case
|
|
303
|
+
case 5:
|
|
304
|
+
return _context4.abrupt("return", formCore.getFieldsValue());
|
|
305
|
+
case 6:
|
|
218
306
|
case "end":
|
|
219
307
|
return _context4.stop();
|
|
220
308
|
}
|
|
221
|
-
}, _callee4);
|
|
309
|
+
}, _callee4, null, [[1,, 2, 3]]);
|
|
222
310
|
}));
|
|
223
311
|
});
|
|
224
312
|
// ---------------------------------------------------------------------------
|
|
225
313
|
// defineField – used by standalone (non-ProForm) consumers
|
|
226
314
|
// ---------------------------------------------------------------------------
|
|
227
|
-
var defineField =
|
|
315
|
+
var defineField = useMemoizedFn(function (name) {
|
|
228
316
|
var fieldOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
229
317
|
var _fieldOptions$rules = fieldOptions.rules,
|
|
230
318
|
rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
|
|
231
319
|
var FieldComponent = /*#__PURE__*/memo(function (_a) {
|
|
232
|
-
var _b;
|
|
233
320
|
var children = _a.children,
|
|
234
321
|
render = _a.render,
|
|
235
322
|
props = __rest(_a, ["children", "render"]);
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
var
|
|
239
|
-
|
|
323
|
+
// Per-field store subscription: this field re-renders only when its
|
|
324
|
+
// own value/error/touched/validating slice changes.
|
|
325
|
+
var _useStoreSelector = useStoreSelector(store, function (state) {
|
|
326
|
+
var _a;
|
|
327
|
+
return [(_a = state.values[name]) !== null && _a !== void 0 ? _a : '', state.errors[name], state.touched[name], state.validating[name]];
|
|
328
|
+
}, shallowEqualArrays),
|
|
329
|
+
_useStoreSelector2 = _slicedToArray(_useStoreSelector, 4),
|
|
330
|
+
fieldValue = _useStoreSelector2[0],
|
|
331
|
+
fieldError = _useStoreSelector2[1],
|
|
332
|
+
fieldTouched = _useStoreSelector2[2],
|
|
333
|
+
fieldValidating = _useStoreSelector2[3];
|
|
240
334
|
useEffect(function () {
|
|
241
335
|
var existingRules = formCore.getFieldRules(name);
|
|
242
336
|
if (!existingRules && rules.length > 0) {
|
|
@@ -309,7 +403,7 @@ export var useForm = function useForm() {
|
|
|
309
403
|
});
|
|
310
404
|
FieldComponent.displayName = "Field(".concat(name, ")");
|
|
311
405
|
return FieldComponent;
|
|
312
|
-
}
|
|
406
|
+
});
|
|
313
407
|
// ---------------------------------------------------------------------------
|
|
314
408
|
// handleSubmit / handleReset – for <form> event handlers
|
|
315
409
|
// ---------------------------------------------------------------------------
|
|
@@ -346,150 +440,179 @@ export var useForm = function useForm() {
|
|
|
346
440
|
var handleReset = useEventCallback(function (e) {
|
|
347
441
|
e === null || e === void 0 ? void 0 : e.preventDefault();
|
|
348
442
|
formCore.resetFields();
|
|
349
|
-
setExtraTouched({});
|
|
350
|
-
setValidating({});
|
|
351
443
|
onReset === null || onReset === void 0 ? void 0 : onReset();
|
|
352
444
|
});
|
|
353
445
|
// ---------------------------------------------------------------------------
|
|
354
|
-
// FormInstance – enhanced API for consumers
|
|
446
|
+
// FormInstance – enhanced API for consumers.
|
|
447
|
+
//
|
|
448
|
+
// Every method is wrapped in useMemoizedFn (stable identity, always reads the
|
|
449
|
+
// latest store state) so the instance object itself is IDENTITY-STABLE for
|
|
450
|
+
// the lifetime of the form — this is what lets ProForm publish it through the
|
|
451
|
+
// stable context without re-rendering subscribers on each keystroke.
|
|
355
452
|
// ---------------------------------------------------------------------------
|
|
453
|
+
var getFieldError = useMemoizedFn(function (name) {
|
|
454
|
+
return store.getState().errors[name];
|
|
455
|
+
});
|
|
456
|
+
var getFieldWarning = useMemoizedFn(function (name) {
|
|
457
|
+
return store.getState().warnings[name];
|
|
458
|
+
});
|
|
459
|
+
var getFieldsError = useMemoizedFn(function (nameList) {
|
|
460
|
+
var errors = store.getState().errors;
|
|
461
|
+
if (!nameList) return errors;
|
|
462
|
+
var result = {};
|
|
463
|
+
nameList.forEach(function (name) {
|
|
464
|
+
if (errors[name]) {
|
|
465
|
+
result[name] = errors[name];
|
|
466
|
+
}
|
|
467
|
+
});
|
|
468
|
+
return result;
|
|
469
|
+
});
|
|
470
|
+
var isFieldTouched = useMemoizedFn(function (name) {
|
|
471
|
+
return store.getState().touched[name] || false;
|
|
472
|
+
});
|
|
473
|
+
var isFieldsTouched = useMemoizedFn(function (nameList) {
|
|
474
|
+
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
475
|
+
var touched = store.getState().touched;
|
|
476
|
+
if (!nameList) {
|
|
477
|
+
return Object.keys(touched).some(function (key) {
|
|
478
|
+
return touched[key];
|
|
479
|
+
});
|
|
480
|
+
}
|
|
481
|
+
if (allFieldsTouched) {
|
|
482
|
+
return nameList.every(function (name) {
|
|
483
|
+
return touched[name];
|
|
484
|
+
});
|
|
485
|
+
}
|
|
486
|
+
return nameList.some(function (name) {
|
|
487
|
+
return touched[name];
|
|
488
|
+
});
|
|
489
|
+
});
|
|
490
|
+
var isFieldValidating = useMemoizedFn(function (name) {
|
|
491
|
+
return store.getState().validating[name] || false;
|
|
492
|
+
});
|
|
493
|
+
var setFieldsError = useMemoizedFn(function (fieldsError) {
|
|
494
|
+
Object.entries(fieldsError).forEach(function (_ref) {
|
|
495
|
+
var _ref2 = _slicedToArray(_ref, 2),
|
|
496
|
+
name = _ref2[0],
|
|
497
|
+
error = _ref2[1];
|
|
498
|
+
formCore.setFieldError(name, error);
|
|
499
|
+
});
|
|
500
|
+
});
|
|
501
|
+
var setFieldTouched = useMemoizedFn(function (name) {
|
|
502
|
+
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
503
|
+
store.setState({
|
|
504
|
+
touched: Object.assign(Object.assign({}, store.getState().touched), _defineProperty({}, name, isTouched))
|
|
505
|
+
});
|
|
506
|
+
});
|
|
507
|
+
var setFieldsTouched = useMemoizedFn(function (fieldsTouch) {
|
|
508
|
+
store.setState({
|
|
509
|
+
touched: Object.assign(Object.assign({}, store.getState().touched), fieldsTouch)
|
|
510
|
+
});
|
|
511
|
+
});
|
|
512
|
+
var resetFormFields = useMemoizedFn(function (fields) {
|
|
513
|
+
if (!fields) {
|
|
514
|
+
formCore.resetFields();
|
|
515
|
+
} else {
|
|
516
|
+
var resetValues = {};
|
|
517
|
+
fields.forEach(function (field) {
|
|
518
|
+
// Mount-frozen initialValues — consistent with the full resetFields.
|
|
519
|
+
resetValues[field] = formCore.getInitialValues()[field];
|
|
520
|
+
});
|
|
521
|
+
formCore.setFieldsValue(resetValues);
|
|
522
|
+
var _store$getState = store.getState(),
|
|
523
|
+
touched = _store$getState.touched,
|
|
524
|
+
validating = _store$getState.validating;
|
|
525
|
+
var newTouched = Object.assign({}, touched);
|
|
526
|
+
var newValidating = Object.assign({}, validating);
|
|
527
|
+
fields.forEach(function (field) {
|
|
528
|
+
delete newTouched[field];
|
|
529
|
+
delete newValidating[field];
|
|
530
|
+
});
|
|
531
|
+
store.setState({
|
|
532
|
+
touched: newTouched,
|
|
533
|
+
validating: newValidating
|
|
534
|
+
});
|
|
535
|
+
fields.forEach(function (field) {
|
|
536
|
+
formCore.setFieldError(field, null);
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
});
|
|
540
|
+
var submitWithValidation = useMemoizedFn(function (callback) {
|
|
541
|
+
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
542
|
+
var validatedValues, _t2;
|
|
543
|
+
return _regeneratorRuntime.wrap(function (_context6) {
|
|
544
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
545
|
+
case 0:
|
|
546
|
+
_context6.prev = 0;
|
|
547
|
+
_context6.next = 1;
|
|
548
|
+
return validateFieldsAsync();
|
|
549
|
+
case 1:
|
|
550
|
+
validatedValues = _context6.sent;
|
|
551
|
+
if (!callback) {
|
|
552
|
+
_context6.next = 2;
|
|
553
|
+
break;
|
|
554
|
+
}
|
|
555
|
+
_context6.next = 2;
|
|
556
|
+
return callback(validatedValues);
|
|
557
|
+
case 2:
|
|
558
|
+
return _context6.abrupt("return", validatedValues);
|
|
559
|
+
case 3:
|
|
560
|
+
_context6.prev = 3;
|
|
561
|
+
_t2 = _context6["catch"](0);
|
|
562
|
+
return _context6.abrupt("return", undefined);
|
|
563
|
+
case 4:
|
|
564
|
+
case "end":
|
|
565
|
+
return _context6.stop();
|
|
566
|
+
}
|
|
567
|
+
}, _callee6, null, [[0, 3]]);
|
|
568
|
+
}));
|
|
569
|
+
});
|
|
356
570
|
var formInstance = useMemo(function () {
|
|
357
571
|
return Object.assign(Object.assign({}, formCore.formInstance), {
|
|
358
572
|
validateFields: validateFieldsAsync,
|
|
359
573
|
setFieldValue: formCore.setFieldValue,
|
|
360
|
-
getFieldError:
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
nameList.forEach(function (name) {
|
|
367
|
-
if (formCore.errors[name]) {
|
|
368
|
-
result[name] = formCore.errors[name];
|
|
369
|
-
}
|
|
370
|
-
});
|
|
371
|
-
return result;
|
|
372
|
-
},
|
|
373
|
-
isFieldTouched: function isFieldTouched(name) {
|
|
374
|
-
return allTouched[name] || false;
|
|
375
|
-
},
|
|
376
|
-
isFieldsTouched: function isFieldsTouched(nameList) {
|
|
377
|
-
var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
378
|
-
if (!nameList) {
|
|
379
|
-
return Object.keys(allTouched).some(function (key) {
|
|
380
|
-
return allTouched[key];
|
|
381
|
-
});
|
|
382
|
-
}
|
|
383
|
-
if (allFieldsTouched) {
|
|
384
|
-
return nameList.every(function (name) {
|
|
385
|
-
return allTouched[name];
|
|
386
|
-
});
|
|
387
|
-
}
|
|
388
|
-
return nameList.some(function (name) {
|
|
389
|
-
return allTouched[name];
|
|
390
|
-
});
|
|
391
|
-
},
|
|
392
|
-
isFieldValidating: function isFieldValidating(name) {
|
|
393
|
-
return validating[name] || false;
|
|
394
|
-
},
|
|
574
|
+
getFieldError: getFieldError,
|
|
575
|
+
getFieldWarning: getFieldWarning,
|
|
576
|
+
getFieldsError: getFieldsError,
|
|
577
|
+
isFieldTouched: isFieldTouched,
|
|
578
|
+
isFieldsTouched: isFieldsTouched,
|
|
579
|
+
isFieldValidating: isFieldValidating,
|
|
395
580
|
setFieldError: formCore.setFieldError,
|
|
396
|
-
setFieldsError:
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
formCore.setFieldError(name, error);
|
|
402
|
-
});
|
|
403
|
-
},
|
|
404
|
-
setFieldTouched: function setFieldTouched(name) {
|
|
405
|
-
var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
406
|
-
setExtraTouched(function (prev) {
|
|
407
|
-
return Object.assign(Object.assign({}, prev), _defineProperty({}, name, isTouched));
|
|
408
|
-
});
|
|
409
|
-
},
|
|
410
|
-
setFieldsTouched: function setFieldsTouched(fieldsTouch) {
|
|
411
|
-
setExtraTouched(function (prev) {
|
|
412
|
-
return Object.assign(Object.assign({}, prev), fieldsTouch);
|
|
413
|
-
});
|
|
414
|
-
},
|
|
415
|
-
resetFields: function resetFields(fields) {
|
|
416
|
-
if (!fields) {
|
|
417
|
-
formCore.resetFields();
|
|
418
|
-
setExtraTouched({});
|
|
419
|
-
setValidating({});
|
|
420
|
-
} else {
|
|
421
|
-
var resetValues = {};
|
|
422
|
-
fields.forEach(function (field) {
|
|
423
|
-
var _a;
|
|
424
|
-
resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
|
|
425
|
-
});
|
|
426
|
-
formCore.setFieldsValue(resetValues);
|
|
427
|
-
setExtraTouched(function (prev) {
|
|
428
|
-
var newTouched = Object.assign({}, prev);
|
|
429
|
-
fields.forEach(function (field) {
|
|
430
|
-
delete newTouched[field];
|
|
431
|
-
});
|
|
432
|
-
return newTouched;
|
|
433
|
-
});
|
|
434
|
-
setValidating(function (prev) {
|
|
435
|
-
var newValidating = Object.assign({}, prev);
|
|
436
|
-
fields.forEach(function (field) {
|
|
437
|
-
delete newValidating[field];
|
|
438
|
-
});
|
|
439
|
-
return newValidating;
|
|
440
|
-
});
|
|
441
|
-
fields.forEach(function (field) {
|
|
442
|
-
formCore.setFieldError(field, null);
|
|
443
|
-
});
|
|
444
|
-
}
|
|
445
|
-
},
|
|
446
|
-
submit: function submit(callback) {
|
|
447
|
-
return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee6() {
|
|
448
|
-
var validatedValues, _t2;
|
|
449
|
-
return _regeneratorRuntime.wrap(function (_context6) {
|
|
450
|
-
while (1) switch (_context6.prev = _context6.next) {
|
|
451
|
-
case 0:
|
|
452
|
-
_context6.prev = 0;
|
|
453
|
-
_context6.next = 1;
|
|
454
|
-
return validateFieldsAsync();
|
|
455
|
-
case 1:
|
|
456
|
-
validatedValues = _context6.sent;
|
|
457
|
-
if (!callback) {
|
|
458
|
-
_context6.next = 2;
|
|
459
|
-
break;
|
|
460
|
-
}
|
|
461
|
-
_context6.next = 2;
|
|
462
|
-
return callback(validatedValues);
|
|
463
|
-
case 2:
|
|
464
|
-
return _context6.abrupt("return", validatedValues);
|
|
465
|
-
case 3:
|
|
466
|
-
_context6.prev = 3;
|
|
467
|
-
_t2 = _context6["catch"](0);
|
|
468
|
-
return _context6.abrupt("return", undefined);
|
|
469
|
-
case 4:
|
|
470
|
-
case "end":
|
|
471
|
-
return _context6.stop();
|
|
472
|
-
}
|
|
473
|
-
}, _callee6, null, [[0, 3]]);
|
|
474
|
-
}));
|
|
475
|
-
},
|
|
581
|
+
setFieldsError: setFieldsError,
|
|
582
|
+
setFieldTouched: setFieldTouched,
|
|
583
|
+
setFieldsTouched: setFieldsTouched,
|
|
584
|
+
resetFields: resetFormFields,
|
|
585
|
+
submit: submitWithValidation,
|
|
476
586
|
defineField: defineField,
|
|
477
587
|
registerField: formCore.registerField,
|
|
478
588
|
unregisterField: formCore.unregisterField
|
|
479
589
|
});
|
|
480
|
-
}, [formCore,
|
|
590
|
+
}, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
|
|
481
591
|
// ---------------------------------------------------------------------------
|
|
482
|
-
// Internals – exposed for ProForm integration
|
|
592
|
+
// Internals – exposed for ProForm integration. Data fields are GETTERS that
|
|
593
|
+
// read the live store, so the object is identity-stable yet never stale.
|
|
483
594
|
// ---------------------------------------------------------------------------
|
|
484
595
|
var internals = useMemo(function () {
|
|
485
596
|
return {
|
|
486
|
-
values
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
597
|
+
get values() {
|
|
598
|
+
return store.getState().values;
|
|
599
|
+
},
|
|
600
|
+
get errors() {
|
|
601
|
+
return store.getState().errors;
|
|
602
|
+
},
|
|
603
|
+
get warnings() {
|
|
604
|
+
return store.getState().warnings;
|
|
605
|
+
},
|
|
606
|
+
get touched() {
|
|
607
|
+
return store.getState().touched;
|
|
608
|
+
},
|
|
609
|
+
get validating() {
|
|
610
|
+
return store.getState().validating;
|
|
611
|
+
},
|
|
490
612
|
fieldRules: formCore.fieldRules,
|
|
491
613
|
setFieldValue: formCore.setFieldValue,
|
|
492
614
|
setFieldError: formCore.setFieldError,
|
|
615
|
+
setFieldWarning: formCore.setFieldWarning,
|
|
493
616
|
validateField: formCore.validateField,
|
|
494
617
|
validateFieldAsync: validateFieldAsync,
|
|
495
618
|
registerField: formCore.registerField,
|
|
@@ -497,11 +620,12 @@ export var useForm = function useForm() {
|
|
|
497
620
|
handleSubmit: handleSubmit,
|
|
498
621
|
handleReset: handleReset
|
|
499
622
|
};
|
|
500
|
-
}, [
|
|
623
|
+
}, [store, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
|
|
501
624
|
return {
|
|
502
625
|
formInstance: formInstance,
|
|
503
|
-
internals: internals
|
|
626
|
+
internals: internals,
|
|
627
|
+
store: store
|
|
504
628
|
};
|
|
505
629
|
};
|
|
506
630
|
export default useForm;
|
|
507
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlQ2FsbGJhY2siLCJ1c2VFZmZlY3QiLCJtZW1vIiwiRnJhZ21lbnQiLCJSZWFjdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJ1c2VNZW1vaXplZEZuIiwidXNlU2FmZVN0YXRlIiwidXNlRm9ybUNvcmUiLCJyZXNvbHZlVmFsdWUiLCJydW5SdWxlc0FzeW5jIiwidXNlRm9ybSIsImNvbmZpZyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblJlc2V0IiwiX2NvbmZpZyR2YWxpZGF0ZVRyaWdnIiwidmFsaWRhdGVUcmlnZ2VyIiwiZm9ybUNvcmUiLCJfdXNlU2FmZVN0YXRlIiwiX3VzZVNhZmVTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheSIsInZhbGlkYXRpbmciLCJzZXRWYWxpZGF0aW5nIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsImV4dHJhVG91Y2hlZCIsInNldEV4dHJhVG91Y2hlZCIsImFsbFRvdWNoZWQiLCJhc3NpZ24iLCJ0b3VjaGVkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwibmFtZSIsInJ1bGVzIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwiZXJyb3IiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsIl9kZWZpbmVQcm9wZXJ0eSIsInZhbHVlcyIsInNlbnQiLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsIm1hcCIsIl9jYWxsZWUzIiwiX3lpZWxkJHZhbGlkYXRlRmllbGRBIiwiX2NvbnRleHQzIiwiYWxsIiwiRXJyb3IiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIl9hIiwiX2IiLCJjaGlsZHJlbiIsInJlbmRlciIsInByb3BzIiwiZmllbGRWYWx1ZSIsImZpZWxkRXJyb3IiLCJmaWVsZFRvdWNoZWQiLCJmaWVsZFZhbGlkYXRpbmciLCJleGlzdGluZ1J1bGVzIiwiZ2V0RmllbGRSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZiIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZm9ybUluc3RhbmNlIiwidmFsaWRhdGVGaWVsZHMiLCJnZXRGaWVsZEVycm9yIiwiZ2V0RmllbGRzRXJyb3IiLCJmb3JFYWNoIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwic29tZSIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0IiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImludGVybmFscyJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxJQUFJQSxTQUFTLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsU0FBUyxJQUFLLFVBQVVDLE9BQU8sRUFBRUMsVUFBVSxFQUFFQyxDQUFDLEVBQUVDLFNBQVMsRUFBRTtFQUNyRixTQUFTQyxLQUFLQSxDQUFDQyxLQUFLLEVBQUU7SUFBRSxPQUFPQSxLQUFLLFlBQVlILENBQUMsR0FBR0csS0FBSyxHQUFHLElBQUlILENBQUMsQ0FBQyxVQUFVSSxPQUFPLEVBQUU7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SixPQUFPLENBQ3pDO0lBQUEsT0FBTztNQUNMK0MsTUFBTSxFQUFFMUIsUUFBUSxDQUFDMEIsTUFBTTtNQUN2QkcsTUFBTSxFQUFFN0IsUUFBUSxDQUFDNkIsTUFBTTtNQUN2QmpCLE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1ZnQyxVQUFVLEVBQUVwQyxRQUFRLENBQUNvQyxVQUFVO01BQy9Cb0MsYUFBYSxFQUFFeEUsUUFBUSxDQUFDd0UsYUFBYTtNQUNyQzVDLGFBQWEsRUFBRTVCLFFBQVEsQ0FBQzRCLGFBQWE7TUFDckM2QyxhQUFhLEVBQUV6RSxRQUFRLENBQUN5RSxhQUFhO01BQ3JDNUQsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEJ3RCxhQUFhLEVBQUVyRSxRQUFRLENBQUNxRSxhQUFhO01BQ3JDQyxlQUFlLEVBQUV0RSxRQUFRLENBQUNzRSxlQUFlO01BQ3pDd0IsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURyR0YsQ0NzR0M7RUFBQSxDQUFDLEVBQ0YsQ0FDRXJHLFFBQVEsQ0FBQzBCLE1BQU0sRUFDZjFCLFFBQVEsQ0FBQzZCLE1BQU0sRUFDZm5CLFVBQVUsRUFDVk4sVUFBVSxFQUNWSixRQUFRLENBQUNvQyxVQUFVLEVBQ25CcEMsUUFBUSxDQUFDd0UsYUFBYSxFQUN0QnhFLFFBQVEsQ0FBQzRCLGFBQWEsRUFDdEI1QixRQUFRLENBQUN5RSxhQUFhLEVBQ3RCNUQsa0JBQWtCLEVBQ2xCYixRQUFRLENBQUNxRSxhQUFhLEVBQ3RCckUsUUFBUSxDQUFDc0UsZUFBZSxFQUN4QndCLFlBQVksRUFDWk8sV0FBVyxDQUNaLENBQ0Y7RUFFRCxPQUFPO0lBQUVFLFlBQVksRUFBWkEsWUFBWTtJQUFFK0IsU0FBUyxFQUFUQTtFQUFTLENBQUU7QUFDcEMsQ0FBQztBQUVELGVBQWUvSSxPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCBtZW1vLCBGcmFnbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICdAMW1vbmV5L2hvb2tzL3VzZUV2ZW50Q2FsbGJhY2snO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHsgdXNlRm9ybUNvcmUgfSBmcm9tICcuL3VzZUZvcm1Db3JlJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4uL3BhdGhVdGlscyc7XG5pbXBvcnQgeyBydW5SdWxlc0FzeW5jIH0gZnJvbSAnLi4vcnVuUnVsZXMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyB1c2VGb3JtXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCB1c2VGb3JtID0gKGNvbmZpZyA9IHt9KSA9PiB7XG4gICAgY29uc3QgeyBvbkZpbmlzaCwgb25GaW5pc2hGYWlsZWQsIG9uUmVzZXQsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIH0gPSBjb25maWc7XG4gICAgY29uc3QgZm9ybUNvcmUgPSB1c2VGb3JtQ29yZShjb25maWcpO1xuICAgIGNvbnN0IFt2YWxpZGF0aW5nLCBzZXRWYWxpZGF0aW5nXSA9IHVzZVNhZmVTdGF0ZSh7fSk7XG4gICAgY29uc3QgW2V4dHJhVG91Y2hlZCwgc2V0RXh0cmFUb3VjaGVkXSA9IHVzZVN0YXRlKHt9KTtcbiAgICBjb25zdCBhbGxUb3VjaGVkID0gdXNlTWVtbygoKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmb3JtQ29yZS50b3VjaGVkKSwgZXh0cmFUb3VjaGVkKSksIFtmb3JtQ29yZS50b3VjaGVkLCBleHRyYVRvdWNoZWRdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgc2V0VmFsaWRhdGluZygocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgdmFsdWUsIGZvcm1Db3JlLnZhbHVlcywgcnVsZXMpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZmllbGRSdWxlc1tuYW1lXTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUudmFsdWVzLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBmaWVsZEVycm9ycyA9IHt9O1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUHJvbWlzZXMgPSBmaWVsZHNUb1ZhbGlkYXRlLm1hcCgobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICBpZiAocnVsZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGlzVmFsaWQsIGVycm9yIH0gPSB5aWVsZCB2YWxpZGF0ZUZpZWxkQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLnZhbHVlcywgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQgJiYgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICB5aWVsZCBQcm9taXNlLmFsbCh2YWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCdWYWxpZGF0aW9uIGZhaWxlZCcpO1xuICAgICAgICAgICAgZXJyb3IudmFsdWVzID0gZm9ybUNvcmUudmFsdWVzO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS52YWx1ZXMsIG5hbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1Db3JlLnZhbHVlcztcbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gZGVmaW5lRmllbGQg4oCTIHVzZWQgYnkgc3RhbmRhbG9uZSAobm9uLVByb0Zvcm0pIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGRlZmluZUZpZWxkID0gdXNlQ2FsbGJhY2soKG5hbWUsIGZpZWxkT3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcnVsZXMgPSBbXSB9ID0gZmllbGRPcHRpb25zO1xuICAgICAgICBjb25zdCBGaWVsZENvbXBvbmVudCA9IG1lbW8oKF9hKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2I7XG4gICAgICAgICAgICB2YXIgeyBjaGlsZHJlbiwgcmVuZGVyIH0gPSBfYSwgcHJvcHMgPSBfX3Jlc3QoX2EsIFtcImNoaWxkcmVuXCIsIFwicmVuZGVyXCJdKTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSAoX2IgPSBmb3JtQ29yZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZmllbGRFcnJvciA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVG91Y2hlZCA9IGFsbFRvdWNoZWRbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbGlkYXRpbmcgPSB2YWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1J1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoIWV4aXN0aW5nUnVsZXMgJiYgcnVsZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkKG5hbWUsIHJ1bGVzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkKG5hbWUpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LCBbXSk7IC8vIE9ubHkgcmVnaXN0ZXIgb24gbW91bnRcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUZpZWxkQ2hhbmdlID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlKG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdGVUcmlnZ2VyID09PSAnb25DaGFuZ2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQobmFtZSwgcnVsZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZEJsdXIobmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUHJvcHMgPSBPYmplY3QuYXNzaWduKHsgbmFtZSwgdmFsdWU6IGZpZWxkVmFsdWUsIGVycm9yOiBmaWVsZEVycm9yLCB0b3VjaGVkOiBmaWVsZFRvdWNoZWQsIHZhbGlkYXRpbmc6IGZpZWxkVmFsaWRhdGluZywgb25DaGFuZ2U6IGhhbmRsZUZpZWxkQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZUJsdXIgfSwgcHJvcHMpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VDaGFuZ2UgPSAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGUgJiYgdHlwZW9mIGUgPT09ICdvYmplY3QnICYmICd0YXJnZXQnIGluIGVcbiAgICAgICAgICAgICAgICAgICAgPyBlLnRhcmdldC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IGU7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25DaGFuZ2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlTWVyZ2VCbHVyID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkJsdXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuLnByb3BzLm9uQmx1cigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAocmVuZGVyICYmIHR5cGVvZiByZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVuZGVyKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZHJlbihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChGcmFnbWVudCwgbnVsbCwgLi4uY2hpbGRyZW4ubWFwKChjaGlsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IGtleTogY2hpbGQua2V5IHx8IGluZGV4LCBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZDtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIEZpZWxkQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gYEZpZWxkKCR7bmFtZX0pYDtcbiAgICAgICAgcmV0dXJuIEZpZWxkQ29tcG9uZW50O1xuICAgIH0sIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgaGFuZGxlRmllbGRCbHVyLFxuICAgIF0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIGhhbmRsZVN1Ym1pdCAvIGhhbmRsZVJlc2V0IOKAkyBmb3IgPGZvcm0+IGV2ZW50IGhhbmRsZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgb25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbGlkYXRlZFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgY29uc3QgaGFuZGxlUmVzZXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGUgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICBzZXRWYWxpZGF0aW5nKHt9KTtcbiAgICAgICAgb25SZXNldCA9PT0gbnVsbCB8fCBvblJlc2V0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblJlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gRm9ybUluc3RhbmNlIOKAkyBlbmhhbmNlZCBBUEkgZm9yIGNvbnN1bWVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcjogKG5hbWUpID0+IGZvcm1Db3JlLmVycm9yc1tuYW1lXSwgZ2V0RmllbGRzRXJyb3I6IChuYW1lTGlzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRbbmFtZV0gPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9LCBpc0ZpZWxkVG91Y2hlZDogKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0gfHwgZmFsc2UsIGlzRmllbGRzVG91Y2hlZDogKG5hbWVMaXN0LCBhbGxGaWVsZHNUb3VjaGVkID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoYWxsVG91Y2hlZCkuc29tZSgoa2V5KSA9PiBhbGxUb3VjaGVkW2tleV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9LCBpc0ZpZWxkVmFsaWRhdGluZzogKG5hbWUpID0+IHZhbGlkYXRpbmdbbmFtZV0gfHwgZmFsc2UsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yOiAoZmllbGRzRXJyb3IpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGZpZWxkc0Vycm9yKS5mb3JFYWNoKChbbmFtZSwgZXJyb3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgc2V0RmllbGRUb3VjaGVkOiAobmFtZSwgaXNUb3VjaGVkID0gdHJ1ZSkgPT4ge1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgICAgICB9LCBzZXRGaWVsZHNUb3VjaGVkOiAoZmllbGRzVG91Y2gpID0+IHtcbiAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIGZpZWxkc1RvdWNoKSkpO1xuICAgICAgICB9LCByZXNldEZpZWxkczogKGZpZWxkcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHNldEV4dHJhVG91Y2hlZCh7fSk7XG4gICAgICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZHNWYWx1ZShyZXNldFZhbHVlcyk7XG4gICAgICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RvdWNoZWQgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VG91Y2hlZDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBwcmV2KTtcbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VmFsaWRhdGluZ1tmaWVsZF07XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIHN1Ym1pdDogKGNhbGxiYWNrKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgICAgICAgICAgICB5aWVsZCBjYWxsYmFjayh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsaWRhdGVkVmFsdWVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGRlZmluZUZpZWxkLFxuICAgICAgICBjb25maWcuaW5pdGlhbFZhbHVlcyxcbiAgICAgICAgc2V0VmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgdG91Y2hlZDogYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZmllbGRSdWxlczogZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgYWxsVG91Y2hlZCxcbiAgICAgICAgdmFsaWRhdGluZyxcbiAgICAgICAgZm9ybUNvcmUuZmllbGRSdWxlcyxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcixcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
|
|
631
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlTWVtbyIsInVzZUVmZmVjdCIsIm1lbW8iLCJGcmFnbWVudCIsIlJlYWN0IiwidXNlRXZlbnRDYWxsYmFjayIsInVzZU1lbW9pemVkRm4iLCJ1c2VGb3JtQ29yZSIsInJlc29sdmVWYWx1ZSIsInJ1blJ1bGVzQXN5bmMiLCJ1c2VTdG9yZVNlbGVjdG9yIiwic2hhbGxvd0VxdWFsQXJyYXlzIiwiaGFzQ3VzdG9tVmFsaWRhdG9yIiwicnVsZXMiLCJzb21lIiwicnVsZSIsInZhbGlkYXRvciIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwic3RvcmUiLCJtYXJrVmFsaWRhdGluZyIsIm5hbWVzIiwiYXNzaWduIiwiZ2V0U3RhdGUiLCJ2YWxpZGF0aW5nIiwiZm9yRWFjaCIsIm5hbWUiLCJzZXRTdGF0ZSIsImNvbW1pdFJ1bGVPdXRjb21lcyIsIm91dGNvbWVzIiwiY2xlYXJWYWxpZGF0aW5nIiwic3RhdGUiLCJlcnJvcnNDaGFuZ2VkIiwid2FybmluZ3NDaGFuZ2VkIiwibmV3RXJyb3JzIiwiZXJyb3JzIiwibmV3V2FybmluZ3MiLCJ3YXJuaW5ncyIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJuIiwiX3N0ZXAkdmFsdWUiLCJlcnJvciIsIndhcm5pbmciLCJlcnIiLCJmIiwiZmxhZ3NUb0NsZWFyIiwiZmlsdGVyIiwicGF0Y2giLCJuZXdWYWxpZGF0aW5nIiwia2V5cyIsInZhbGlkYXRlRmllbGRBc3luYyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsImZsYWdnZWQiLCJvdXRjb21lIiwiX3lpZWxkJHJ1blJ1bGVzQXN5bmMiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2IiwiYWJydXB0IiwiaXNWYWxpZCIsImdldEZpZWxkc1ZhbHVlIiwic2VudCIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsInRvdWNoZWQiLCJfY29udGV4dDIiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRGaWVsZFJ1bGVzIiwidmFsaWRhdGVGaWVsZHNBc3luYyIsIm5hbWVMaXN0IiwiX2NhbGxlZTQiLCJmaWVsZHNUb1ZhbGlkYXRlIiwiZmllbGRFcnJvcnMiLCJfY29udGV4dDQiLCJmaWVsZFJ1bGVzIiwiYWxsIiwibWFwIiwiX2NhbGxlZTMiLCJfeWllbGQkcnVuUnVsZXNBc3luYzIiLCJfY29udGV4dDMiLCJwdXNoIiwiRXJyb3IiLCJ2YWx1ZXMiLCJyZWR1Y2UiLCJhY2MiLCJkZWZpbmVGaWVsZCIsImZpZWxkT3B0aW9ucyIsIl9maWVsZE9wdGlvbnMkcnVsZXMiLCJGaWVsZENvbXBvbmVudCIsIl9hIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsIl91c2VTdG9yZVNlbGVjdG9yIiwiX3VzZVN0b3JlU2VsZWN0b3IyIiwiX3NsaWNlZFRvQXJyYXkiLCJmaWVsZFZhbHVlIiwiZmllbGRFcnJvciIsImZpZWxkVG91Y2hlZCIsImZpZWxkVmFsaWRhdGluZyIsImV4aXN0aW5nUnVsZXMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiaGFuZGxlRmllbGRDaGFuZ2UiLCJzZXRGaWVsZFZhbHVlIiwidmFsaWRhdGVGaWVsZCIsImhhbmRsZUJsdXIiLCJmaWVsZFByb3BzIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJoYW5kbGVNZXJnZUNoYW5nZSIsIl90eXBlb2YiLCJ0YXJnZXQiLCJpc1ZhbGlkRWxlbWVudCIsImhhbmRsZU1lcmdlQmx1ciIsIm1lcmdlZFByb3BzIiwiY2xvbmVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiY3JlYXRlRWxlbWVudCIsImNvbmNhdCIsIl90b0NvbnN1bWFibGVBcnJheSIsImNoaWxkIiwiaW5kZXgiLCJrZXkiLCJkaXNwbGF5TmFtZSIsImhhbmRsZVN1Ym1pdCIsIl9jYWxsZWU1IiwidmFsaWRhdGVkVmFsdWVzIiwidHlwZWQiLCJfdCIsIl9jb250ZXh0NSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlUmVzZXQiLCJyZXNldEZpZWxkcyIsImdldEZpZWxkRXJyb3IiLCJnZXRGaWVsZFdhcm5pbmciLCJnZXRGaWVsZHNFcnJvciIsImlzRmllbGRUb3VjaGVkIiwiaXNGaWVsZHNUb3VjaGVkIiwiYWxsRmllbGRzVG91Y2hlZCIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkRXJyb3IiLCJzZXRGaWVsZFRvdWNoZWQiLCJpc1RvdWNoZWQiLCJzZXRGaWVsZHNUb3VjaGVkIiwiZmllbGRzVG91Y2giLCJyZXNldEZvcm1GaWVsZHMiLCJmaWVsZHMiLCJyZXNldFZhbHVlcyIsImZpZWxkIiwiZ2V0SW5pdGlhbFZhbHVlcyIsInNldEZpZWxkc1ZhbHVlIiwiX3N0b3JlJGdldFN0YXRlIiwibmV3VG91Y2hlZCIsInN1Ym1pdFdpdGhWYWxpZGF0aW9uIiwiY2FsbGJhY2siLCJfY2FsbGVlNiIsIl90MiIsIl9jb250ZXh0NiIsImZvcm1JbnN0YW5jZSIsInZhbGlkYXRlRmllbGRzIiwic3VibWl0IiwiaW50ZXJuYWxzIiwic2V0RmllbGRXYXJuaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLElBQUlBLFNBQVMsR0FBSSxJQUFJLElBQUksSUFBSSxDQUFDQSxTQUFTLElBQUssVUFBVUMsT0FBTyxFQUFFQyxVQUFVLEVBQUVDLENBQUMsRUFBRUMsU0FBUyxFQUFFO0VBQ3JGLFNBQVNDLEtBQUtBLENBQUNDLEtBQUssRUFBRTtJQUFFLE9BQU9BLEtBQUssWUFBWUgsQ0FBQyxHQUFHRyxLQUFLLEdBQUcsSUFBSUgsQ0FBQyxDQUFDLFVBQVVJLE9BQU8sRUFBRTtNQUFFQSxPQUFPLENBQUNELEtBQUssQ0FBQztJQUFFLENBQUMsQ0FBQztFQUFFO0VBQzNHLE9BQU8sS0FBS0gsQ0FBQyxLQUFLQSxDQUFDLEdBQUdLLE9BQU8sQ0FBQyxFQUFFLFVBQVVELE9BQU8sRUFBRUUsTUFBTSxFQUFFO0lBQ3ZELFNBQVNDLFNBQVNBLENBQUNKLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUNRLElBQUksQ0FBQ04sS0FBSyxDQUFDLENBQUM7TUFBRSxDQUFDLENBQUMsT0FBT08sQ0FBQyxFQUFFO1FBQUVKLE1BQU0sQ0FBQ0ksQ0FBQyxDQUFDO01BQUU7SUFBRTtJQUMxRixTQUFTQyxRQUFRQSxDQUFDUixLQUFLLEVBQUU7TUFBRSxJQUFJO1FBQUVLLElBQUksQ0FBQ1AsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDRSxLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzdGLFNBQVNGLElBQUlBLENBQUNJLE1BQU0sRUFBRTtNQUFFQSxN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QzZGLGFBQWE7TUFDckMzRCxrQkFBa0IsRUFBbEJBLGtCQUFrQjtNQUNsQnVELGFBQWEsRUFBRXpGLFFBQVEsQ0FBQ3lGLGFBQWE7TUFDckNDLGVBQWUsRUFBRTFGLFFBQVEsQ0FBQzBGLGVBQWU7TUFDekN3QixZQUFZLEVBQVpBLFlBQVk7TUFDWk8sV0FBVyxFQUFYQTtJRDFHRixDQzJHQztFQUFBLENBQUMsRUFDRixDQUNFeEgsS0FBSyxFQUNMRCxRQUFRLENBQUM4RCxVQUFVLEVBQ25COUQsUUFBUSxDQUFDNEYsYUFBYSxFQUN0QjVGLFFBQVEsQ0FBQ3dJLGFBQWEsRUFDdEJ4SSxRQUFRLENBQUM4SixlQUFlLEVBQ3hCOUosUUFBUSxDQUFDNkYsYUFBYSxFQUN0QjNELGtCQUFrQixFQUNsQmxDLFFBQVEsQ0FBQ3lGLGFBQWEsRUFDdEJ6RixRQUFRLENBQUMwRixlQUFlLEVBQ3hCd0IsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRWlDLFlBQVksRUFBWkEsWUFBWTtJQUFFRyxTQUFTLEVBQVRBLFNBQVM7SUFBRTVKLEtBQUssRUFBTEE7RUFBSyxDQUFFO0FBQzNDLENBQUM7QUFFRCxlQUFlVixPQUFPIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IHVzZU1lbW8sIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgeyB1c2VGb3JtQ29yZSB9IGZyb20gJy4vdXNlRm9ybUNvcmUnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhbHVlIH0gZnJvbSAnLi4vcGF0aFV0aWxzJztcbmltcG9ydCB7IHJ1blJ1bGVzQXN5bmMgfSBmcm9tICcuLi9ydW5SdWxlcyc7XG5pbXBvcnQgeyB1c2VTdG9yZVNlbGVjdG9yLCBzaGFsbG93RXF1YWxBcnJheXMgfSBmcm9tICcuLi9mb3JtU3RvcmUnO1xuLyoqXG4gKiBPbmx5IHJ1bGVzIHdpdGggYSBjdXN0b20gYHZhbGlkYXRvcmAgY2FuIGJlIGdlbnVpbmVseSBhc3luY2hyb25vdXMg4oCUXG4gKiBidWlsdGluIHJ1bGVzIHJlc29sdmUgd2l0aGluIGEgbWljcm90YXNrLCBzbyBmbGlwcGluZyBgdmFsaWRhdGluZ2AgZm9yXG4gKiB0aGVtIHdvdWxkIG9ubHkgY2h1cm4gc3Vic2NyaWJlcnMgd2l0aG91dCBldmVyIGJlaW5nIHZpc2libGUuXG4gKi9cbmNvbnN0IGhhc0N1c3RvbVZhbGlkYXRvciA9IChydWxlcykgPT4gcnVsZXMuc29tZSgocnVsZSkgPT4gdHlwZW9mIHJ1bGUudmFsaWRhdG9yID09PSAnZnVuY3Rpb24nKTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCB7IHN0b3JlIH0gPSBmb3JtQ29yZTtcbiAgICAvLyBNYXJrIGZpZWxkcyBhcyB2YWxpZGF0aW5nIGluIE9ORSBjb21taXQuIHZhbGlkYXRpbmcgLyB0b3VjaGVkIGxpdmUgaW4gdGhlXG4gICAgLy8gc3RvcmUgYWxvbmdzaWRlIHZhbHVlcyDigJQgZmxpcHBpbmcgdGhlbSAoZS5nLiBhc3luYyB2YWxpZGF0aW9uIGFyb3VuZCBhXG4gICAgLy8gYmx1cikgbXVzdCBub3QgcmUtcmVuZGVyIHRoZSBmb3JtIHJvb3QsIG9ubHkgdGhlIGZpZWxkcyB0aGF0IHN1YnNjcmliZWQuXG4gICAgY29uc3QgbWFya1ZhbGlkYXRpbmcgPSB1c2VNZW1vaXplZEZuKChuYW1lcykgPT4ge1xuICAgICAgICBpZiAobmFtZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RvcmUuZ2V0U3RhdGUoKS52YWxpZGF0aW5nKTtcbiAgICAgICAgbmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgbmV4dFtuYW1lXSA9IHRydWU7XG4gICAgICAgIH0pO1xuICAgICAgICBzdG9yZS5zZXRTdGF0ZSh7IHZhbGlkYXRpbmc6IG5leHQgfSk7XG4gICAgfSk7XG4gICAgLy8gRm9sZCBwZXItZmllbGQgcnVsZSBvdXRjb21lcyBpbnRvIEFUIE1PU1Qgb25lIHN0b3JlIGNvbW1pdDogZXJyb3JzIGFuZFxuICAgIC8vIHdhcm5pbmdzIGFyZSBtZXJnZWQgb3ZlciB0aGUgY3VycmVudCBtYXBzIGFuZCB0aGUgYGNsZWFyVmFsaWRhdGluZ2AgZmxhZ3NcbiAgICAvLyBhcmUgcmVtb3ZlZCBpbiB0aGUgU0FNRSBwYXRjaC4gQSBuby1vcCBvdXRjb21lIGNvbW1pdHMgbm90aGluZyBhdCBhbGwg4oCUXG4gICAgLy8gcGVyLWZpZWxkIGNvbW1pdHMgaGVyZSBwcmV2aW91c2x5IG1hZGUgc3VibWl0LXRpbWUgdmFsaWRhdGlvbiBzd2VlcCBldmVyeVxuICAgIC8vIHN1YnNjcmliZXIgTyhmaWVsZHMpIHRpbWVzLlxuICAgIGNvbnN0IGNvbW1pdFJ1bGVPdXRjb21lcyA9IHVzZU1lbW9pemVkRm4oKG91dGNvbWVzLCBjbGVhclZhbGlkYXRpbmcpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICBsZXQgZXJyb3JzQ2hhbmdlZCA9IGZhbHNlO1xuICAgICAgICBsZXQgd2FybmluZ3NDaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IG5ld0Vycm9ycyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmVycm9ycyk7XG4gICAgICAgIGNvbnN0IG5ld1dhcm5pbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUud2FybmluZ3MpO1xuICAgICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfSBvZiBvdXRjb21lcykge1xuICAgICAgICAgICAgaWYgKGVycm9yID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3RXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdFcnJvcnNbbmFtZV07XG4gICAgICAgICAgICAgICAgICAgIGVycm9yc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5ld0Vycm9yc1tuYW1lXSAhPT0gZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBuZXdFcnJvcnNbbmFtZV0gPSBlcnJvcjtcbiAgICAgICAgICAgICAgICBlcnJvcnNDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh3YXJuaW5nID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWUgaW4gbmV3V2FybmluZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG5ld1dhcm5pbmdzW25hbWVdO1xuICAgICAgICAgICAgICAgICAgICB3YXJuaW5nc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKG5ld1dhcm5pbmdzW25hbWVdICE9PSB3YXJuaW5nKSB7XG4gICAgICAgICAgICAgICAgbmV3V2FybmluZ3NbbmFtZV0gPSB3YXJuaW5nO1xuICAgICAgICAgICAgICAgIHdhcm5pbmdzQ2hhbmdlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhZ3NUb0NsZWFyID0gY2xlYXJWYWxpZGF0aW5nLmZpbHRlcigobmFtZSkgPT4gbmFtZSBpbiBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgY29uc3QgcGF0Y2ggPSB7fTtcbiAgICAgICAgaWYgKGVycm9yc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC5lcnJvcnMgPSBuZXdFcnJvcnM7XG4gICAgICAgIGlmICh3YXJuaW5nc0NoYW5nZWQpXG4gICAgICAgICAgICBwYXRjaC53YXJuaW5ncyA9IG5ld1dhcm5pbmdzO1xuICAgICAgICBpZiAoZmxhZ3NUb0NsZWFyLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbGlkYXRpbmcgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS52YWxpZGF0aW5nKTtcbiAgICAgICAgICAgIGZsYWdzVG9DbGVhci5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1ZhbGlkYXRpbmdbbmFtZV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhdGNoLnZhbGlkYXRpbmcgPSBuZXdWYWxpZGF0aW5nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhwYXRjaCkubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHBhdGNoKTtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBBc3luYyBmaWVsZCB2YWxpZGF0aW9uIOKAkyBlYWNoIHJ1bGUgaXMgcHJvY2Vzc2VkIGV4YWN0bHkgb25jZVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IHZhbGlkYXRlRmllbGRBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIHZhbHVlLCBydWxlcykgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghcnVsZXMgfHwgcnVsZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgZXJyb3I6IG51bGwgfTtcbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGhhc0N1c3RvbVZhbGlkYXRvcihydWxlcykgPyBbbmFtZV0gOiBbXTtcbiAgICAgICAgbWFya1ZhbGlkYXRpbmcoZmxhZ2dlZCk7XG4gICAgICAgIGxldCBvdXRjb21lID0geyBuYW1lLCBlcnJvcjogbnVsbCwgd2FybmluZzogbnVsbCB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgb3V0Y29tZSA9IHsgbmFtZSwgZXJyb3IsIHdhcm5pbmcgfTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIGNvbW1pdFJ1bGVPdXRjb21lcyhbb3V0Y29tZV0sIGZsYWdnZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IG91dGNvbWUuZXJyb3IgPT09IG51bGwsIGVycm9yOiBvdXRjb21lLmVycm9yIH07XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEFzeW5jIGZpZWxkIGJsdXIgaGFuZGxlclxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZUZpZWxkQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIXRvdWNoZWRbbmFtZV0pIHtcbiAgICAgICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0b3VjaGVkKSwgeyBbbmFtZV06IHRydWUgfSkgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICBpZiAocnVsZXMgJiYgdmFsaWRhdGVUcmlnZ2VyID09PSAnb25CbHVyJykge1xuICAgICAgICAgICAgeWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIFZhbGlkYXRlIGFsbCBmaWVsZHMgYXN5bmNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkc0FzeW5jID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBmaWVsZHNUb1ZhbGlkYXRlID0gbmFtZUxpc3QgfHwgT2JqZWN0LmtleXMoZm9ybUNvcmUuZmllbGRSdWxlcyk7XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0ge307XG4gICAgICAgIC8vIE9uZSBjb21taXQgdG8gcmFpc2UgdGhlIHZhbGlkYXRpbmcgZmxhZ3MgKHZhbGlkYXRvci1iZWFyaW5nIGZpZWxkc1xuICAgICAgICAvLyBvbmx5KSwgb25lIGNvbW1pdCB0byBsYW5kIGV2ZXJ5IGVycm9yL3dhcm5pbmcgYW5kIGNsZWFyIHRoZSBmbGFncy5cbiAgICAgICAgY29uc3QgZmxhZ2dlZCA9IGZpZWxkc1RvVmFsaWRhdGUuZmlsdGVyKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gcnVsZXMgPyBoYXNDdXN0b21WYWxpZGF0b3IocnVsZXMpIDogZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgICBtYXJrVmFsaWRhdGluZyhmbGFnZ2VkKTtcbiAgICAgICAgY29uc3Qgb3V0Y29tZXMgPSBbXTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHlpZWxkIFByb21pc2UuYWxsKGZpZWxkc1RvVmFsaWRhdGUubWFwKChuYW1lKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBydWxlcyA9IGZvcm1Db3JlLmZpZWxkUnVsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgaWYgKCFydWxlcylcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3IsIHdhcm5pbmcgfSA9IHlpZWxkIHJ1blJ1bGVzQXN5bmMobmFtZSwgcmVzb2x2ZVZhbHVlKGZvcm1Db3JlLmdldEZpZWxkc1ZhbHVlKCksIG5hbWUpLCBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgb3V0Y29tZXMucHVzaCh7IG5hbWUsIGVycm9yLCB3YXJuaW5nIH0pO1xuICAgICAgICAgICAgICAgIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tuYW1lXSA9IGVycm9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBjb21taXRSdWxlT3V0Y29tZXMob3V0Y29tZXMsIGZsYWdnZWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhmaWVsZEVycm9ycykubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICAvLyBQZXItZmllbGQgc3RvcmUgc3Vic2NyaXB0aW9uOiB0aGlzIGZpZWxkIHJlLXJlbmRlcnMgb25seSB3aGVuIGl0c1xuICAgICAgICAgICAgLy8gb3duIHZhbHVlL2Vycm9yL3RvdWNoZWQvdmFsaWRhdGluZyBzbGljZSBjaGFuZ2VzLlxuICAgICAgICAgICAgY29uc3QgW2ZpZWxkVmFsdWUsIGZpZWxkRXJyb3IsIGZpZWxkVG91Y2hlZCwgZmllbGRWYWxpZGF0aW5nXSA9IHVzZVN0b3JlU2VsZWN0b3Ioc3RvcmUsIChzdGF0ZSkgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBzdGF0ZS52YWx1ZXNbbmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5lcnJvcnNbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnRvdWNoZWRbbmFtZV0sXG4gICAgICAgICAgICAgICAgICAgIHN0YXRlLnZhbGlkYXRpbmdbbmFtZV0sXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH0sIHNoYWxsb3dFcXVhbEFycmF5cyk7XG4gICAgICAgICAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nUnVsZXMgPSBmb3JtQ29yZS5nZXRGaWVsZFJ1bGVzKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICghZXhpc3RpbmdSdWxlcyAmJiBydWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQobmFtZSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQobmFtZSk7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0sIFtdKTsgLy8gT25seSByZWdpc3RlciBvbiBtb3VudFxuICAgICAgICAgICAgY29uc3QgaGFuZGxlRmllbGRDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0ZVRyaWdnZXIgPT09ICdvbkNoYW5nZScpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZChuYW1lLCBydWxlcywgdmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlQmx1ciA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQmx1cihuYW1lKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQcm9wcyA9IE9iamVjdC5hc3NpZ24oeyBuYW1lLCB2YWx1ZTogZmllbGRWYWx1ZSwgZXJyb3I6IGZpZWxkRXJyb3IsIHRvdWNoZWQ6IGZpZWxkVG91Y2hlZCwgdmFsaWRhdGluZzogZmllbGRWYWxpZGF0aW5nLCBvbkNoYW5nZTogaGFuZGxlRmllbGRDaGFuZ2UsIG9uQmx1cjogaGFuZGxlQmx1ciB9LCBwcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUNoYW5nZSA9IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZSAmJiB0eXBlb2YgZSA9PT0gJ29iamVjdCcgJiYgJ3RhcmdldCcgaW4gZVxuICAgICAgICAgICAgICAgICAgICA/IGUudGFyZ2V0LnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogZTtcbiAgICAgICAgICAgICAgICBoYW5kbGVGaWVsZENoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSAmJlxuICAgICAgICAgICAgICAgICAgICAoKF9hID0gY2hpbGRyZW4ucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25DaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVNZXJnZUJsdXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGhhbmRsZUJsdXIoKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQmx1cikpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW4ucHJvcHMub25CbHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChyZW5kZXIgJiYgdHlwZW9mIHJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiByZW5kZXIoZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkcmVuKGZpZWxkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBvbkNoYW5nZTogaGFuZGxlTWVyZ2VDaGFuZ2UsIG9uQmx1cjogaGFuZGxlTWVyZ2VCbHVyIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KEZyYWdtZW50LCBudWxsLCAuLi5jaGlsZHJlbi5tYXAoKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXJnZWRQcm9wcyA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZmllbGRQcm9wcyksIHsga2V5OiBjaGlsZC5rZXkgfHwgaW5kZXgsIG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBtZXJnZWRQcm9wcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9KTtcbiAgICAgICAgRmllbGRDb21wb25lbnQuZGlzcGxheU5hbWUgPSBgRmllbGQoJHtuYW1lfSlgO1xuICAgICAgICByZXR1cm4gRmllbGRDb21wb25lbnQ7XG4gICAgfSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gaGFuZGxlU3VibWl0IC8gaGFuZGxlUmVzZXQg4oCTIGZvciA8Zm9ybT4gZXZlbnQgaGFuZGxlcnNcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBoYW5kbGVTdWJtaXQgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCB2YWxpZGF0ZUZpZWxkc0FzeW5jKCk7XG4gICAgICAgICAgICBvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdCB0eXBlZCA9IGVycjtcbiAgICAgICAgICAgIG9uRmluaXNoRmFpbGVkID09PSBudWxsIHx8IG9uRmluaXNoRmFpbGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaEZhaWxlZCh7IHZhbHVlczogdHlwZWQudmFsdWVzLCBlcnJvcnM6IHR5cGVkLmVycm9ycyB9KTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICBjb25zdCBoYW5kbGVSZXNldCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IHtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3Qgc3RvcmUgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBzdG9yZS5nZXRTdGF0ZSgpLmVycm9yc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRXYXJuaW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5nc1tuYW1lXSk7XG4gICAgY29uc3QgZ2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvcnMgPSBzdG9yZS5nZXRTdGF0ZSgpLmVycm9ycztcbiAgICAgICAgaWYgKCFuYW1lTGlzdClcbiAgICAgICAgICAgIHJldHVybiBlcnJvcnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgICAgICBuYW1lTGlzdC5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0W25hbWVdID0gZXJyb3JzW25hbWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZFtuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3QgaXNGaWVsZHNUb3VjaGVkID0gdXNlTWVtb2l6ZWRGbigobmFtZUxpc3QsIGFsbEZpZWxkc1RvdWNoZWQgPSBmYWxzZSkgPT4ge1xuICAgICAgICBjb25zdCB0b3VjaGVkID0gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICBpZiAoIW5hbWVMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModG91Y2hlZCkuc29tZSgoa2V5KSA9PiB0b3VjaGVkW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhbGxGaWVsZHNUb3VjaGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZUxpc3QuZXZlcnkoKG5hbWUpID0+IHRvdWNoZWRbbmFtZV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuYW1lTGlzdC5zb21lKChuYW1lKSA9PiB0b3VjaGVkW25hbWVdKTtcbiAgICB9KTtcbiAgICBjb25zdCBpc0ZpZWxkVmFsaWRhdGluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHN0b3JlLmdldFN0YXRlKCkudmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHN0b3JlLmdldFN0YXRlKCkudG91Y2hlZCksIHsgW25hbWVdOiBpc1RvdWNoZWQgfSkgfSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc2V0RmllbGRzVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKGZpZWxkc1RvdWNoKSA9PiB7XG4gICAgICAgIHN0b3JlLnNldFN0YXRlKHsgdG91Y2hlZDogT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBzdG9yZS5nZXRTdGF0ZSgpLnRvdWNoZWQpLCBmaWVsZHNUb3VjaCkgfSk7XG4gICAgfSk7XG4gICAgY29uc3QgcmVzZXRGb3JtRmllbGRzID0gdXNlTWVtb2l6ZWRGbigoZmllbGRzKSA9PiB7XG4gICAgICAgIGlmICghZmllbGRzKSB7XG4gICAgICAgICAgICBmb3JtQ29yZS5yZXNldEZpZWxkcygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzZXRWYWx1ZXMgPSB7fTtcbiAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIE1vdW50LWZyb3plbiBpbml0aWFsVmFsdWVzIOKAlCBjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgcmVzZXRGaWVsZHMuXG4gICAgICAgICAgICAgICAgcmVzZXRWYWx1ZXNbZmllbGRdID0gZm9ybUNvcmUuZ2V0SW5pdGlhbFZhbHVlcygpW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgY29uc3QgeyB0b3VjaGVkLCB2YWxpZGF0aW5nIH0gPSBzdG9yZS5nZXRTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHRvdWNoZWQpO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHZhbGlkYXRpbmcpO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIG5ld1RvdWNoZWRbZmllbGRdO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3RvcmUuc2V0U3RhdGUoeyB0b3VjaGVkOiBuZXdUb3VjaGVkLCB2YWxpZGF0aW5nOiBuZXdWYWxpZGF0aW5nIH0pO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb24uIERhdGEgZmllbGRzIGFyZSBHRVRURVJTIHRoYXRcbiAgICAvLyByZWFkIHRoZSBsaXZlIHN0b3JlLCBzbyB0aGUgb2JqZWN0IGlzIGlkZW50aXR5LXN0YWJsZSB5ZXQgbmV2ZXIgc3RhbGUuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaW50ZXJuYWxzID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBnZXQgdmFsdWVzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkudmFsdWVzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3JzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHN0b3JlLmdldFN0YXRlKCkuZXJyb3JzO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgd2FybmluZ3MoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS53YXJuaW5ncztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IHRvdWNoZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RvcmUuZ2V0U3RhdGUoKS50b3VjaGVkO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgdmFsaWRhdGluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBzdG9yZS5nZXRTdGF0ZSgpLnZhbGlkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGZpZWxkUnVsZXM6IGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZzogZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkOiBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIHJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIH0pLCBbXG4gICAgICAgIHN0b3JlLFxuICAgICAgICBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFdhcm5pbmcsXG4gICAgICAgIGZvcm1Db3JlLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgZm9ybUNvcmUudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBoYW5kbGVTdWJtaXQsXG4gICAgICAgIGhhbmRsZVJlc2V0LFxuICAgIF0pO1xuICAgIHJldHVybiB7IGZvcm1JbnN0YW5jZSwgaW50ZXJuYWxzLCBzdG9yZSB9O1xufTtcbmV4cG9ydCBkZWZhdWx0IHVzZUZvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
|