@1money/component-ui 0.0.73 → 0.0.75

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.
Files changed (91) hide show
  1. package/es/components/Dialog/Dialog.js +7 -39
  2. package/es/components/Dialog/constants.d.ts +0 -3
  3. package/es/components/Dialog/constants.js +1 -4
  4. package/es/components/Dialog/style/Dialog.css +0 -21
  5. package/es/components/ProForm/ProForm.js +201 -48
  6. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  7. package/es/components/ProForm/ProFormDependency.js +29 -136
  8. package/es/components/ProForm/ProFormItem.js +81 -24
  9. package/es/components/ProForm/ProFormList.js +114 -62
  10. package/es/components/ProForm/Submitter.js +15 -4
  11. package/es/components/ProForm/context.d.ts +11 -3
  12. package/es/components/ProForm/context.js +32 -12
  13. package/es/components/ProForm/core/constants.d.ts +10 -2
  14. package/es/components/ProForm/core/constants.js +17 -3
  15. package/es/components/ProForm/core/formStore.d.ts +24 -0
  16. package/es/components/ProForm/core/formStore.js +101 -0
  17. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  18. package/es/components/ProForm/core/hooks/useForm.js +220 -120
  19. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  20. package/es/components/ProForm/core/hooks/useFormCore.js +114 -90
  21. package/es/components/ProForm/core/runRules.d.ts +5 -3
  22. package/es/components/ProForm/core/runRules.js +13 -5
  23. package/es/components/ProForm/core/useFormItem.d.ts +2 -2
  24. package/es/components/ProForm/core/useFormItem.js +46 -23
  25. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  26. package/es/components/ProForm/fields/createProFormField.js +14 -4
  27. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  28. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  29. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  30. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  31. package/es/components/ProForm/index.d.ts +2 -2
  32. package/es/components/ProForm/index.js +1 -1
  33. package/es/components/ProForm/interface.d.ts +105 -23
  34. package/es/components/ProForm/layouts/DialogForm.js +17 -7
  35. package/es/components/ProForm/layouts/DrawerForm.js +16 -7
  36. package/es/components/ProForm/layouts/QueryFilter.js +46 -135
  37. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  38. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  39. package/es/components/ProForm/style/ProForm.css +0 -7
  40. package/es/components/ProForm/utils.js +32 -8
  41. package/es/components/ProTable/ProTable.js +3 -3
  42. package/es/index.css +1 -1
  43. package/es/index.d.ts +1 -1
  44. package/es/index.js +1 -1
  45. package/lib/components/Dialog/Dialog.js +6 -38
  46. package/lib/components/Dialog/constants.d.ts +0 -3
  47. package/lib/components/Dialog/constants.js +1 -4
  48. package/lib/components/Dialog/style/Dialog.css +0 -21
  49. package/lib/components/ProForm/ProForm.js +201 -48
  50. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  51. package/lib/components/ProForm/ProFormDependency.js +30 -138
  52. package/lib/components/ProForm/ProFormItem.js +78 -21
  53. package/lib/components/ProForm/ProFormList.js +112 -60
  54. package/lib/components/ProForm/Submitter.js +15 -4
  55. package/lib/components/ProForm/context.d.ts +11 -3
  56. package/lib/components/ProForm/context.js +33 -13
  57. package/lib/components/ProForm/core/constants.d.ts +10 -2
  58. package/lib/components/ProForm/core/constants.js +18 -4
  59. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  60. package/lib/components/ProForm/core/formStore.js +110 -0
  61. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  62. package/lib/components/ProForm/core/hooks/useForm.js +220 -120
  63. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  64. package/lib/components/ProForm/core/hooks/useFormCore.js +113 -89
  65. package/lib/components/ProForm/core/runRules.d.ts +5 -3
  66. package/lib/components/ProForm/core/runRules.js +13 -5
  67. package/lib/components/ProForm/core/useFormItem.d.ts +2 -2
  68. package/lib/components/ProForm/core/useFormItem.js +44 -21
  69. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  70. package/lib/components/ProForm/fields/createProFormField.js +14 -4
  71. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  72. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  73. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  74. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  75. package/lib/components/ProForm/index.d.ts +2 -2
  76. package/lib/components/ProForm/index.js +1 -1
  77. package/lib/components/ProForm/interface.d.ts +105 -23
  78. package/lib/components/ProForm/layouts/DialogForm.js +17 -7
  79. package/lib/components/ProForm/layouts/DrawerForm.js +16 -7
  80. package/lib/components/ProForm/layouts/QueryFilter.js +45 -134
  81. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  82. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  83. package/lib/components/ProForm/style/ProForm.css +0 -7
  84. package/lib/components/ProForm/utils.js +32 -8
  85. package/lib/components/ProTable/ProTable.js +3 -3
  86. package/lib/index.css +1 -1
  87. package/lib/index.d.ts +1 -1
  88. package/lib/index.js +1 -1
  89. package/package.json +1 -1
  90. package/scripts/mcp-server/examples.generated.json +36 -0
  91. package/scripts/mcp-server/index.generated.json +538 -16
@@ -8,6 +8,7 @@ Object.defineProperty(exports, "__esModule", {
8
8
  exports["default"] = exports.ProForm = void 0;
9
9
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
10
  var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
11
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
11
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
12
13
  var _jsxRuntime = require("react/jsx-runtime");
13
14
  var _react = _interopRequireWildcard(require("react"));
@@ -22,6 +23,9 @@ var _context4 = require("./context");
22
23
  var _Submitter = require("./Submitter");
23
24
  var _constants = require("./constants");
24
25
  var _utils = require("./utils");
26
+ var _formStore = require("./core/formStore");
27
+ var _useUrlSync2 = require("./hooks/useUrlSync");
28
+ var _pathUtils = require("./core/pathUtils");
25
29
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
26
30
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
27
31
  var __awaiter = void 0 && (void 0).__awaiter || function (thisArg, _arguments, P, generator) {
@@ -61,6 +65,9 @@ var __rest = void 0 && (void 0).__rest || function (s, e) {
61
65
  };
62
66
  var classes = (0, _classnames["default"])(_constants.CSS_PREFIX);
63
67
  var formClasses = (0, _classnames["default"])('form');
68
+ var DEFAULT_COL_PROPS = {
69
+ span: 24
70
+ };
64
71
  var ProFormBase = function ProFormBase(props) {
65
72
  var children = props.children,
66
73
  className = props.className,
@@ -81,6 +88,15 @@ var ProFormBase = function ProFormBase(props) {
81
88
  onFinishFailed = props.onFinishFailed,
82
89
  onValuesChange = props.onValuesChange,
83
90
  onReset = props.onReset,
91
+ onInit = props.onInit,
92
+ onLoadingChange = props.onLoadingChange,
93
+ syncToUrl = props.syncToUrl,
94
+ _props$syncToUrlAsImp = props.syncToUrlAsImportant,
95
+ syncToUrlAsImportant = _props$syncToUrlAsImp === void 0 ? false : _props$syncToUrlAsImp,
96
+ extraUrlParams = props.extraUrlParams,
97
+ _props$autoFocusFirst = props.autoFocusFirstInput,
98
+ autoFocusFirstInput = _props$autoFocusFirst === void 0 ? false : _props$autoFocusFirst,
99
+ formComponentType = props.formComponentType,
84
100
  formRef = props.formRef,
85
101
  _props$omitNil = props.omitNil,
86
102
  omitNil = _props$omitNil === void 0 ? true : _props$omitNil,
@@ -88,8 +104,9 @@ var ProFormBase = function ProFormBase(props) {
88
104
  dateFormatter = _props$dateFormatter === void 0 ? 'string' : _props$dateFormatter,
89
105
  fieldProps = props.fieldProps,
90
106
  formItemProps = props.formItemProps,
107
+ layout = props.layout,
91
108
  _props$size = props.size,
92
- size = _props$size === void 0 ? 'middle' : _props$size,
109
+ size = _props$size === void 0 ? 'large' : _props$size,
93
110
  _props$labelAlign = props.labelAlign,
94
111
  labelAlign = _props$labelAlign === void 0 ? 'left' : _props$labelAlign,
95
112
  _props$disabled = props.disabled,
@@ -101,16 +118,22 @@ var ProFormBase = function ProFormBase(props) {
101
118
  _props$validateTrigge = props.validateTrigger,
102
119
  validateTrigger = _props$validateTrigge === void 0 ? 'onChange' : _props$validateTrigge,
103
120
  _prefixCls = props.prefixCls,
104
- rest = __rest(props, ["children", "className", "submitter", "readonly", "mode", "grid", "colProps", "rowProps", "loading", "request", "params", "initialValues", "onFinish", "onFinishFailed", "onValuesChange", "onReset", "formRef", "omitNil", "dateFormatter", "fieldProps", "formItemProps", "size", "labelAlign", "disabled", "colon", "requiredMark", "validateTrigger", "prefixCls"]);
121
+ rest = __rest(props, ["children", "className", "submitter", "readonly", "mode", "grid", "colProps", "rowProps", "loading", "request", "params", "initialValues", "onFinish", "onFinishFailed", "onValuesChange", "onReset", "onInit", "onLoadingChange", "syncToUrl", "syncToUrlAsImportant", "extraUrlParams", "autoFocusFirstInput", "formComponentType", "formRef", "omitNil", "dateFormatter", "fieldProps", "formItemProps", "layout", "size", "labelAlign", "disabled", "colon", "requiredMark", "validateTrigger", "prefixCls"]);
105
122
  var mode = modeProp !== null && modeProp !== void 0 ? modeProp : readonly ? 'read' : 'edit';
106
123
  var _useSafeState = (0, _useSafeState5["default"])(false),
107
124
  _useSafeState2 = (0, _slicedToArray2["default"])(_useSafeState, 2),
108
125
  requestLoading = _useSafeState2[0],
109
126
  setRequestLoading = _useSafeState2[1];
127
+ // useSafeState for the RENDERED submitting state (its setter is unmount-safe
128
+ // — the finally below runs after awaiting onFinish, when the typical
129
+ // submit-then-close flow may already have unmounted the form on React
130
+ // 16/17). The ref is the synchronous re-entry guard; @1money/hooks has no
131
+ // single hook that is both unmount-safe and synchronously readable.
110
132
  var _useSafeState3 = (0, _useSafeState5["default"])(false),
111
133
  _useSafeState4 = (0, _slicedToArray2["default"])(_useSafeState3, 2),
112
134
  submitting = _useSafeState4[0],
113
135
  setSubmitting = _useSafeState4[1];
136
+ var submittingRef = (0, _react.useRef)(false);
114
137
  var isLoading = loading || requestLoading || submitting;
115
138
  // ── Transform / valueType registries ──
116
139
  var transformKeyRef = (0, _react.useRef)({});
@@ -118,16 +141,25 @@ var ProFormBase = function ProFormBase(props) {
118
141
  var registerTransform = (0, _useMemoizedFn["default"])(function (name, fn) {
119
142
  transformKeyRef.current[name] = fn;
120
143
  });
121
- var unregisterTransform = (0, _useMemoizedFn["default"])(function (name) {
122
- delete transformKeyRef.current[name];
144
+ // The optional second argument guards removal: delete only when the registry
145
+ // still holds the CALLER'S registration, so an unmounting instance can never
146
+ // wipe a same-name sibling's or successor's entry.
147
+ var unregisterTransform = (0, _useMemoizedFn["default"])(function (name, fn) {
148
+ if (fn === undefined || transformKeyRef.current[name] === fn) {
149
+ delete transformKeyRef.current[name];
150
+ }
123
151
  });
124
152
  var registerValueType = (0, _useMemoizedFn["default"])(function (name, valueType) {
125
153
  valueTypeRef.current[name] = valueType;
126
154
  });
127
- var unregisterValueType = (0, _useMemoizedFn["default"])(function (name) {
128
- delete valueTypeRef.current[name];
155
+ var unregisterValueType = (0, _useMemoizedFn["default"])(function (name, valueType) {
156
+ if (valueType === undefined || valueTypeRef.current[name] === valueType) {
157
+ delete valueTypeRef.current[name];
158
+ }
129
159
  });
130
160
  var onFinishRef = (0, _useLatest["default"])(onFinish);
161
+ var onInitRef = (0, _useLatest["default"])(onInit);
162
+ var onLoadingChangeRef = (0, _useLatest["default"])(onLoadingChange);
131
163
  // Submit pipeline: dates → field transforms → omitNil
132
164
  var applyPipeline = (0, _useMemoizedFn["default"])(function (values) {
133
165
  var result = (0, _utils.formatDateValues)(values, dateFormatter, valueTypeRef.current);
@@ -135,57 +167,124 @@ var ProFormBase = function ProFormBase(props) {
135
167
  if (omitNil) result = (0, _utils.omitNilValues)(result);
136
168
  return result;
137
169
  });
170
+ // Same pipeline WITHOUT omitNil — single-field readers must not see a field
171
+ // vanish just because its current value is empty.
172
+ var formatValuesKeepNil = (0, _useMemoizedFn["default"])(function (values) {
173
+ var result = (0, _utils.formatDateValues)(values, dateFormatter, valueTypeRef.current);
174
+ return (0, _utils.transformSubmitValues)(result, transformKeyRef.current);
175
+ });
176
+ // ── URL sync (syncToUrl / syncToUrlAsImportant / extraUrlParams) ──
177
+ var _useUrlSync = (0, _useUrlSync2.useUrlSync)({
178
+ syncToUrl: syncToUrl,
179
+ extraUrlParams: extraUrlParams
180
+ }),
181
+ urlInitialValues = _useUrlSync.urlInitialValues,
182
+ onUrlSyncFinish = _useUrlSync.onUrlSyncFinish,
183
+ onUrlSyncReset = _useUrlSync.onUrlSyncReset;
184
+ // initialValues is MOUNT-ONLY (documented contract; useFormCore re-freezes
185
+ // as a safety net) — compute the URL merge once so the freeze is visible
186
+ // where the props enter, instead of recomputing dead spreads per render.
187
+ var mergedInitialValuesRef = (0, _react.useRef)(null);
188
+ if (mergedInitialValuesRef.current === null) {
189
+ mergedInitialValuesRef.current = syncToUrl ? syncToUrlAsImportant ? Object.assign(Object.assign({}, initialValues), urlInitialValues) : Object.assign(Object.assign({}, urlInitialValues), initialValues) : initialValues !== null && initialValues !== void 0 ? initialValues : {};
190
+ }
191
+ var mergedInitialValues = mergedInitialValuesRef.current;
192
+ // Bumped on every reset — an in-flight submit captures it and aborts when
193
+ // it changed underneath (the user discarded the submission's values).
194
+ var resetEpochRef = (0, _react.useRef)(0);
195
+ // Reset chain: form-level onReset receives the (post-reset) formatted
196
+ // values, then the form's own URL params are cleared. useMemoizedFn defers
197
+ // execution to event time, when `formInstance` (created just below) exists.
198
+ var fireFormReset = (0, _useMemoizedFn["default"])(function () {
199
+ resetEpochRef.current += 1;
200
+ var finalValues = applyPipeline(formInstance.getFieldsValue());
201
+ onReset === null || onReset === void 0 ? void 0 : onReset(finalValues);
202
+ onUrlSyncReset();
203
+ });
138
204
  // ── Form engine (useForm with async validation) ──
139
205
  var _useForm = (0, _useForm2.useForm)({
140
- initialValues: initialValues,
206
+ initialValues: mergedInitialValues,
141
207
  onValuesChange: onValuesChange,
142
- onReset: onReset,
208
+ onReset: fireFormReset,
143
209
  size: size,
144
210
  labelAlign: labelAlign,
145
- disabled: disabled || isLoading,
211
+ disabled: disabled,
146
212
  colon: colon,
147
213
  requiredMark: requiredMark,
148
214
  validateTrigger: validateTrigger
149
215
  }),
150
216
  formInstance = _useForm.formInstance,
151
- internals = _useForm.internals;
217
+ internals = _useForm.internals,
218
+ store = _useForm.store;
152
219
  // ── Async submit with transform pipeline ──
220
+ // Re-entry guard: a second submit while one is in flight is ignored (the
221
+ // ref catches two calls in the same tick).
153
222
  var wrappedHandleSubmit = (0, _useEventCallback["default"])(function (e) {
154
223
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee() {
155
- var _a, validatedValues, pipelined, typed, _t;
224
+ var _a, _b, _c, epoch, validatedValues, pipelined, result, typed, _t;
156
225
  return _regenerator["default"].wrap(function (_context) {
157
226
  while (1) switch (_context.prev = _context.next) {
158
227
  case 0:
159
228
  e === null || e === void 0 ? void 0 : e.preventDefault();
229
+ if (!submittingRef.current) {
230
+ _context.next = 1;
231
+ break;
232
+ }
233
+ return _context.abrupt("return");
234
+ case 1:
235
+ submittingRef.current = true;
160
236
  setSubmitting(true);
161
- _context.prev = 1;
162
- _context.next = 2;
237
+ (_a = onLoadingChangeRef.current) === null || _a === void 0 ? void 0 : _a.call(onLoadingChangeRef, true);
238
+ epoch = resetEpochRef.current;
239
+ _context.prev = 2;
240
+ _context.next = 3;
163
241
  return formInstance.validateFields();
164
- case 2:
242
+ case 3:
165
243
  validatedValues = _context.sent;
244
+ if (!(epoch !== resetEpochRef.current)) {
245
+ _context.next = 4;
246
+ break;
247
+ }
248
+ return _context.abrupt("return");
249
+ case 4:
166
250
  pipelined = applyPipeline(validatedValues);
167
- _context.next = 3;
168
- return (_a = onFinishRef.current) === null || _a === void 0 ? void 0 : _a.call(onFinishRef, pipelined);
169
- case 3:
170
251
  _context.next = 5;
252
+ return (_b = onFinishRef.current) === null || _b === void 0 ? void 0 : _b.call(onFinishRef, pipelined);
253
+ case 5:
254
+ result = _context.sent;
255
+ // Sync the URL unless onFinish explicitly returned false (a throw above
256
+ // also skips — a failed submit must not pollute the URL), and only if
257
+ // the user did NOT reset the form while the submit was in flight.
258
+ if (result !== false && epoch === resetEpochRef.current) {
259
+ onUrlSyncFinish(pipelined);
260
+ }
261
+ _context.next = 8;
171
262
  break;
172
- case 4:
173
- _context.prev = 4;
174
- _t = _context["catch"](1);
263
+ case 6:
264
+ _context.prev = 6;
265
+ _t = _context["catch"](2);
266
+ if (!(epoch !== resetEpochRef.current)) {
267
+ _context.next = 7;
268
+ break;
269
+ }
270
+ return _context.abrupt("return");
271
+ case 7:
175
272
  typed = _t;
176
273
  onFinishFailed === null || onFinishFailed === void 0 ? void 0 : onFinishFailed({
177
274
  values: typed.values,
178
275
  errors: typed.errors
179
276
  });
180
- case 5:
181
- _context.prev = 5;
277
+ case 8:
278
+ _context.prev = 8;
279
+ submittingRef.current = false;
182
280
  setSubmitting(false);
183
- return _context.finish(5);
184
- case 6:
281
+ (_c = onLoadingChangeRef.current) === null || _c === void 0 ? void 0 : _c.call(onLoadingChangeRef, false);
282
+ return _context.finish(8);
283
+ case 9:
185
284
  case "end":
186
285
  return _context.stop();
187
286
  }
188
- }, _callee, null, [[1, 4, 5, 6]]);
287
+ }, _callee, null, [[2, 6, 8, 9]]);
189
288
  }));
190
289
  });
191
290
  // ── ProForm instance: superset of FormInstance ──
@@ -194,9 +293,18 @@ var ProFormBase = function ProFormBase(props) {
194
293
  getFieldsFormatValue: function getFieldsFormatValue() {
195
294
  return applyPipeline(formInstance.getFieldsValue());
196
295
  },
296
+ getFieldFormatValue: function getFieldFormatValue(name) {
297
+ return (0, _pathUtils.resolveValue)(formatValuesKeepNil(formInstance.getFieldsValue()), name);
298
+ },
299
+ getFieldFormatValueObject: function getFieldFormatValueObject(name) {
300
+ var formatted = formatValuesKeepNil(formInstance.getFieldsValue());
301
+ if (!name) return formatted;
302
+ var topKey = name.split('.')[0];
303
+ return (0, _defineProperty2["default"])({}, topKey, formatted[topKey]);
304
+ },
197
305
  validateFieldsReturnFormatValue: function validateFieldsReturnFormatValue() {
198
306
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
199
- var vals, _t2;
307
+ var vals, errors, _t2;
200
308
  return _regenerator["default"].wrap(function (_context2) {
201
309
  while (1) switch (_context2.prev = _context2.next) {
202
310
  case 0:
@@ -212,8 +320,12 @@ var ProFormBase = function ProFormBase(props) {
212
320
  case 2:
213
321
  _context2.prev = 2;
214
322
  _t2 = _context2["catch"](0);
323
+ // validateFields rejects with an Error carrying the field errors map
324
+ // (same shape wrappedHandleSubmit consumes above).
325
+ errors = _t2.errors;
215
326
  return _context2.abrupt("return", {
216
- success: false
327
+ success: false,
328
+ errors: errors !== null && errors !== void 0 ? errors : {}
217
329
  });
218
330
  case 3:
219
331
  case "end":
@@ -236,7 +348,20 @@ var ProFormBase = function ProFormBase(props) {
236
348
  var serializedParams = (0, _react.useMemo)(function () {
237
349
  return (0, _utils.stableSerialize)(params);
238
350
  }, [params]);
351
+ // onInit fires exactly once: after the FIRST request resolves when a
352
+ // request is configured, otherwise right after mount.
353
+ var initFiredRef = (0, _react.useRef)(false);
354
+ var fireInit = (0, _useMemoizedFn["default"])(function () {
355
+ var _a;
356
+ if (initFiredRef.current) return;
357
+ initFiredRef.current = true;
358
+ (_a = onInitRef.current) === null || _a === void 0 ? void 0 : _a.call(onInitRef, applyPipeline(formInstance.getFieldsValue()), proFormFormInstance);
359
+ });
239
360
  (0, _react.useEffect)(function () {
361
+ // Staleness guard: if params change again before this fetch resolves, the
362
+ // cleanup marks it stale so the late response can't overwrite the values
363
+ // a newer request already (or will) set.
364
+ var stale = false;
240
365
  var fetchData = function fetchData() {
241
366
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
242
367
  var requestFn, data;
@@ -256,12 +381,17 @@ var ProFormBase = function ProFormBase(props) {
256
381
  return requestFn(params);
257
382
  case 3:
258
383
  data = _context3.sent;
259
- if (data && (0, _typeof2["default"])(data) === 'object') {
384
+ if (!stale && data && (0, _typeof2["default"])(data) === 'object') {
260
385
  formInstance.setFieldsValue(data);
261
386
  }
262
387
  case 4:
263
388
  _context3.prev = 4;
264
- setRequestLoading(false);
389
+ if (!stale) {
390
+ setRequestLoading(false);
391
+ // Only a NON-superseded settle initializes the form: a stale
392
+ // request's data was discarded, so its values must not be reported.
393
+ fireInit();
394
+ }
265
395
  return _context3.finish(4);
266
396
  case 5:
267
397
  case "end":
@@ -272,22 +402,32 @@ var ProFormBase = function ProFormBase(props) {
272
402
  };
273
403
  if (requestRef.current) {
274
404
  fetchData();
405
+ } else {
406
+ fireInit();
275
407
  }
408
+ return function () {
409
+ stale = true;
410
+ };
276
411
  // Re-fetch ONLY when params change by VALUE: depending on the raw `params`
277
412
  // reference would re-run on every render for inline object literals and,
278
413
  // combined with the loading setState, loop forever.
279
414
  }, [serializedParams]);
415
+ // ── autoFocusFirstInput ──
416
+ var formElRef = (0, _react.useRef)(null);
417
+ (0, _react.useEffect)(function () {
418
+ var _a;
419
+ if (!autoFocusFirstInput || mode === 'read') return;
420
+ var firstInput = (_a = formElRef.current) === null || _a === void 0 ? void 0 : _a.querySelector('input:not([type="hidden"]):not([disabled]), textarea:not([disabled]), select:not([disabled])');
421
+ firstInput === null || firstInput === void 0 ? void 0 : firstInput.focus();
422
+ // Mount-only by design.
423
+ }, []);
280
424
  // ── Split context ──
281
- // Volatile slice: changes on every value/error update (per keystroke).
282
- var stateValue = (0, _react.useMemo)(function () {
283
- return {
284
- values: internals.values,
285
- errors: internals.errors,
286
- warnings: internals.warnings,
287
- touched: internals.touched,
288
- validating: internals.validating
289
- };
290
- }, [internals.values, internals.errors, internals.warnings, internals.touched, internals.validating]);
425
+ // Form-level prop bags are often inline literals: keep their identity
426
+ // stable while shallow-equal so the stable slice doesn't churn per render.
427
+ var stableFieldProps = (0, _formStore.useShallowStable)(fieldProps);
428
+ var stableFormItemProps = (0, _formStore.useShallowStable)(formItemProps);
429
+ var stableColProps = (0, _formStore.useShallowStable)(colProps);
430
+ var stableLayout = (0, _formStore.useShallowStable)(layout);
291
431
  // Stable slice: configuration + identity-stable dispatchers/instance.
292
432
  // Changes only when form-level props change — NOT on keystrokes, so
293
433
  // subscribers like Submitter and the field factories skip those renders.
@@ -303,7 +443,10 @@ var ProFormBase = function ProFormBase(props) {
303
443
  unregisterField: internals.unregisterField,
304
444
  size: size,
305
445
  labelAlign: labelAlign,
306
- disabled: disabled || isLoading,
446
+ // Submitting/loading does NOT disable fields — only the
447
+ // explicit `disabled` prop does. Keeping isLoading out of this slice
448
+ // means a submit cycle no longer re-renders every field shell.
449
+ disabled: disabled,
307
450
  colon: colon,
308
451
  requiredMark: requiredMark,
309
452
  validateTrigger: validateTrigger,
@@ -311,27 +454,37 @@ var ProFormBase = function ProFormBase(props) {
311
454
  readonly: readonly,
312
455
  mode: mode,
313
456
  grid: grid,
314
- colProps: colProps !== null && colProps !== void 0 ? colProps : {
315
- span: 24
316
- },
457
+ colProps: stableColProps !== null && stableColProps !== void 0 ? stableColProps : DEFAULT_COL_PROPS,
317
458
  registerTransform: registerTransform,
318
459
  unregisterTransform: unregisterTransform,
319
460
  registerValueType: registerValueType,
320
461
  unregisterValueType: unregisterValueType,
321
- fieldProps: fieldProps,
322
- formItemProps: formItemProps
462
+ fieldProps: stableFieldProps,
463
+ formItemProps: stableFormItemProps,
464
+ layout: stableLayout,
465
+ formComponentType: formComponentType
323
466
  };
324
- }, [proFormFormInstance, internals.setFieldValue, internals.setFieldError, internals.setFieldWarning, internals.validateField, internals.validateFieldAsync, internals.registerField, internals.unregisterField, size, labelAlign, disabled, isLoading, colon, requiredMark, validateTrigger, readonly, mode, grid, colProps, registerTransform, unregisterTransform, registerValueType, unregisterValueType, fieldProps, formItemProps]);
467
+ }, [proFormFormInstance, internals.setFieldValue, internals.setFieldError, internals.setFieldWarning, internals.validateField, internals.validateFieldAsync, internals.registerField, internals.unregisterField, size, labelAlign, disabled, colon, requiredMark, validateTrigger, readonly, mode, grid, stableColProps, registerTransform, unregisterTransform, registerValueType, unregisterValueType, stableFieldProps, stableFormItemProps, stableLayout, formComponentType]);
325
468
  var WrapperComponent = grid ? _Grid.Row : _react.Fragment;
326
469
  var wrapperProps = grid ? Object.assign({}, rowProps) : {};
470
+ // Reset callback chain: the Submitter resets the values first, then the
471
+ // submitter-level onReset, then the form-level onReset (with finalValues)
472
+ // and the URL cleanup — fired exactly once per reset action.
473
+ var handleSubmitterReset = (0, _useMemoizedFn["default"])(function () {
474
+ var _a;
475
+ if ((0, _typeof2["default"])(submitter) === 'object') (_a = submitter.onReset) === null || _a === void 0 ? void 0 : _a.call(submitter);
476
+ fireFormReset();
477
+ });
327
478
  var submitterNode = submitter !== false && mode !== 'read' ? (0, _jsxRuntime.jsx)(_Submitter.Submitter, Object.assign({}, (0, _typeof2["default"])(submitter) === 'object' ? submitter : {}, {
479
+ onReset: handleSubmitterReset,
328
480
  loading: isLoading
329
481
  })) : null;
330
482
  return (0, _jsxRuntime.jsx)(_context4.ProFormStableContext.Provider, {
331
483
  value: stableValue,
332
484
  children: (0, _jsxRuntime.jsx)(_context4.ProFormStateContext.Provider, {
333
- value: stateValue,
485
+ value: store,
334
486
  children: (0, _jsxRuntime.jsxs)("form", Object.assign({}, rest, {
487
+ ref: formElRef,
335
488
  className: formClasses(undefined, (0, _classnames.joinCls)(classes(), className)),
336
489
  onSubmit: wrappedHandleSubmit,
337
490
  onReset: internals.handleReset,
@@ -345,4 +498,4 @@ var ProFormBase = function ProFormBase(props) {
345
498
  ProFormBase.displayName = 'ProForm';
346
499
  var ProForm = exports.ProForm = /*#__PURE__*/(0, _react.memo)(ProFormBase);
347
500
  var _default = exports["default"] = ProForm;
348
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm0udHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3VzZUxhdGVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlU2FmZVN0YXRlNSIsIl91c2VNZW1vaXplZEZuIiwiX3VzZUV2ZW50Q2FsbGJhY2siLCJfY2xhc3NuYW1lcyIsIl9HcmlkIiwiX3VzZUZvcm0yIiwiX2NvbnRleHQ0IiwiX1N1Ym1pdHRlciIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJ2YWx1ZSIsInJlc29sdmUiLCJQcm9taXNlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwic3RlcCIsIm5leHQiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwicCIsInByb3RvdHlwZSIsImluZGV4T2YiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsImNsYXNzZXMiLCJjbGFzc25hbWVzIiwiQ1NTX1BSRUZJWCIsImZvcm1DbGFzc2VzIiwiUHJvRm9ybUJhc2UiLCJwcm9wcyIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwic3VibWl0dGVyIiwiX3Byb3BzJHJlYWRvbmx5IiwicmVhZG9ubHkiLCJtb2RlUHJvcCIsIm1vZGUiLCJfcHJvcHMkZ3JpZCIsImdyaWQiLCJjb2xQcm9wcyIsInJvd1Byb3BzIiwiX3Byb3BzJGxvYWRpbmciLCJsb2FkaW5nIiwicmVxdWVzdCIsInBhcmFtcyIsImluaXRpYWxWYWx1ZXMiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25WYWx1ZXNDaGFuZ2UiLCJvblJlc2V0IiwiZm9ybVJlZiIsIl9wcm9wcyRvbWl0TmlsIiwib21pdE5pbCIsIl9wcm9wcyRkYXRlRm9ybWF0dGVyIiwiZGF0ZUZvcm1hdHRlciIsImZpZWxkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiX3Byb3BzJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX3Byb3BzJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcHJvcHMkY29sb24iLCJjb2xvbiIsIl9wcm9wcyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfcHJvcHMkdmFsaWRhdGVUcmlnZ2UiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwicmVzdCIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInJlcXVlc3RMb2FkaW5nIiwic2V0UmVxdWVzdExvYWRpbmciLCJfdXNlU2FmZVN0YXRlMyIsIl91c2VTYWZlU3RhdGU0Iiwic3VibWl0dGluZyIsInNldFN1Ym1pdHRpbmciLCJpc0xvYWRpbmciLCJ0cmFuc2Zvcm1LZXlSZWYiLCJ1c2VSZWYiLCJ2YWx1ZVR5cGVSZWYiLCJyZWdpc3RlclRyYW5zZm9ybSIsInVzZU1lbW9pemVkRm4iLCJuYW1lIiwiZm4iLCJjdXJyZW50IiwidW5yZWdpc3RlclRyYW5zZm9ybSIsInJlZ2lzdGVyVmFsdWVUeXBlIiwidmFsdWVUeXBlIiwidW5yZWdpc3RlclZhbHVlVHlwZSIsIm9uRmluaXNoUmVmIiwidXNlTGF0ZXN0IiwiYXBwbHlQaXBlbGluZSIsInZhbHVlcyIsImZvcm1hdERhdGVWYWx1ZXMiLCJ0cmFuc2Zvcm1TdWJtaXRWYWx1ZXMiLCJvbWl0TmlsVmFsdWVzIiwiX3VzZUZvcm0iLCJ1c2VGb3JtIiwiZm9ybUluc3RhbmNlIiwiaW50ZXJuYWxzIiwid3JhcHBlZEhhbmRsZVN1Ym1pdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwidmFsaWRhdGVkVmFsdWVzIiwicGlwZWxpbmVkIiwidHlwZWQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJwcmV2ZW50RGVmYXVsdCIsInZhbGlkYXRlRmllbGRzIiwic2VudCIsImVycm9ycyIsImZpbmlzaCIsInN0b3AiLCJwcm9Gb3JtRm9ybUluc3RhbmNlIiwidXNlTWVtbyIsImFzc2lnbiIsImdldEZpZWxkc0Zvcm1hdFZhbHVlIiwiZ2V0RmllbGRzVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkc1JldHVybkZvcm1hdFZhbHVlIiwiX2NhbGxlZTIiLCJ2YWxzIiwiX3QyIiwiX2NvbnRleHQyIiwiYWJydXB0Iiwic3VjY2VzcyIsInN1Ym1pdEZvcm0iLCJ1c2VFZmZlY3QiLCJyZXF1ZXN0UmVmIiwic2VyaWFsaXplZFBhcmFtcyIsInN0YWJsZVNlcmlhbGl6ZSIsImZldGNoRGF0YSIsIl9jYWxsZWUzIiwicmVxdWVzdEZuIiwiZGF0YSIsIl9jb250ZXh0MyIsIl90eXBlb2YyIiwic2V0RmllbGRzVmFsdWUiLCJzdGF0ZVZhbHVlIiwid2FybmluZ3MiLCJ0b3VjaGVkIiwidmFsaWRhdGluZyIsInN0YWJsZVZhbHVlIiwic2V0RmllbGRWYWx1ZSIsInNldEZpZWxkRXJyb3IiLCJzZXRGaWVsZFdhcm5pbmciLCJ2YWxpZGF0ZUZpZWxkIiwidmFsaWRhdGVGaWVsZEFzeW5jIiwicmVnaXN0ZXJGaWVsZCIsInVucmVnaXN0ZXJGaWVsZCIsInNwYW4iLCJXcmFwcGVyQ29tcG9uZW50IiwiUm93IiwiRnJhZ21lbnQiLCJ3cmFwcGVyUHJvcHMiLCJzdWJtaXR0ZXJOb2RlIiwiX2pzeCIsIlN1Ym1pdHRlciIsIlByb0Zvcm1TdGFibGVDb250ZXh0IiwiUHJvdmlkZXIiLCJQcm9Gb3JtU3RhdGVDb250ZXh0IiwiX2pzeHMiLCJ1bmRlZmluZWQiLCJqb2luQ2xzIiwib25TdWJtaXQiLCJoYW5kbGVSZXNldCIsImRpc3BsYXlOYW1lIiwiUHJvRm9ybSIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBb0JBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ3BCQSxJQUFBQyxNQUFBLEdBQUFDLHVCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBRyxVQUFBLEdBQUFDLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFELHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTSxjQUFBLEdBQUFGLHNCQUFBLENBQUFKLE9BQUE7QUFDQSxJQUFBTyxpQkFBQSxHQUFBSCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBTix1QkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsS0FBQSxHQUFBVCxPQUFBO0FBQ0EsSUFBQVUsU0FBQSxHQUFBVixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksVUFBQSxHQUFBWixPQUFBO0FBQ0EsSUFBQWEsVUFBQSxHQUFBYixPQUFBO0FBQ0EsSUFBQWMsTUFBQSxHQUFBZCxPQUFBO0FBQWtHLFNBQUFlLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZCx3QkFBQWMsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENB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QUV3QztFQUFTLENBQUEsQ0FBQSxDQUNsQixHQUNBLElBQUk7RUFFVixPQUNFLElBQUFxRixlQUFBLEVBQUNFLDhCQUFvQixDQUFDQyxRQUFRLEVBQUE7SUFBQ3RLLEtBQUssRUFBRXFKLFdBQVc7SUFBQTNILFFBQUEsRUFDL0MsSUFBQXlJLGVBQUEsRUFBQ0ksNkJBQW1CLENBQUNELFFBQVEsRUFBQTtNQUFDdEssS0FBSyxFQUFFaUosVUFBVTtNQUFBdkgsUUFBQSxFQUM3QyxJQUFBOEksZ0JBQUEsRUFBQSxNQUFBLEVBQUF0TCxNQUFBLENBQUF5SSxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ014RCxJQUFJLEVBQUE7UUFDUnhDLFNBQVMsRUFBRUosV0FBVyxDQUFDa0osU0FBUyxFQUFFLElBQUFDLG1CQUFPLEVBQUN0SixPQUFPLENBQUEsQ0FBRSxFQUFFTyxTQUFTLENBQUMsQ0FBQztRQUNoRWdKLFFBQVEsRUFBRXJFLG1CQUFtQjtRQUM3QnpELE9BQU8sRUFBRXdELFNBQVMsQ0FBQ3VFLFdBQVc7UUFBQWxKLFFBQUEsRUFBQSxDQUU5QixJQUFBeUksZUFBQSxFQUFDTCxnQkFBZ0IsRUFBQTVLLE1BQUEsQ0FBQXlJLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBS3NDLFlBQVksRUFBQTtVQUFBdkksUUFBQSxFQUFHQTtRQUFRLENBQUEsQ0FBQSxDQUFvQixFQUNoRXdJLGFBQWE7TUFBQSxDQUFBLENBQUE7SUFDVCxDQUFBO0VBQ3NCLENBQUEsQ0FDRDtBQUVwQyxDQUFDO0FBRUQxSSxXQUFXLENBQUNxSixXQUFXLEdBQUcsU0FBUztBQVc1QixJQUFNQyxPQUFPLEdBQUFDLE9BQUEsQ0FBQUQsT0FBQSxnQkFBRyxJQUFBRSxXQUFJLEVBQUN4SixXQUFXLENBQWdDO0FBQUMsSUFBQXlKLFFBQUEsR0FBQUYsT0FBQSxjQUV6REQsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vUHJvRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTGF0ZXN0JztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMsIGpvaW5DbHMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL0dyaWQnO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJy4vY29yZS9ob29rcy91c2VGb3JtJztcbmltcG9ydCB7IFByb0Zvcm1TdGFibGVDb250ZXh0LCBQcm9Gb3JtU3RhdGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IFN1Ym1pdHRlciB9IGZyb20gJy4vU3VibWl0dGVyJztcbmltcG9ydCB7IENTU19QUkVGSVggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzdGFibGVTZXJpYWxpemUsIHRyYW5zZm9ybVN1Ym1pdFZhbHVlcywgb21pdE5pbFZhbHVlcywgZm9ybWF0RGF0ZVZhbHVlcyB9IGZyb20gJy4vdXRpbHMnO1xuY29uc3QgY2xhc3NlcyA9IGNsYXNzbmFtZXMoQ1NTX1BSRUZJWCk7XG5jb25zdCBmb3JtQ2xhc3NlcyA9IGNsYXNzbmFtZXMoJ2Zvcm0nKTtcbmNvbnN0IFByb0Zvcm1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdWJtaXR0ZXIsIHJlYWRvbmx5ID0gZmFsc2UsIG1vZGU6IG1vZGVQcm9wLCBncmlkID0gZmFsc2UsIGNvbFByb3BzLCByb3dQcm9wcywgbG9hZGluZyA9IGZhbHNlLCByZXF1ZXN0LCBwYXJhbXMsIGluaXRpYWxWYWx1ZXMsIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIGZvcm1SZWYsIG9taXROaWwgPSB0cnVlLCBkYXRlRm9ybWF0dGVyID0gJ3N0cmluZycsIGZpZWxkUHJvcHMsIGZvcm1JdGVtUHJvcHMsIHNpemUgPSAnbWlkZGxlJywgbGFiZWxBbGlnbiA9ICdsZWZ0JywgZGlzYWJsZWQgPSBmYWxzZSwgY29sb24gPSB0cnVlLCByZXF1aXJlZE1hcmsgPSB0cnVlLCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCBwcmVmaXhDbHM6IF9wcmVmaXhDbHMgfSA9IHByb3BzLCByZXN0ID0gX19yZXN0KHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcInN1Ym1pdHRlclwiLCBcInJlYWRvbmx5XCIsIFwibW9kZVwiLCBcImdyaWRcIiwgXCJjb2xQcm9wc1wiLCBcInJvd1Byb3BzXCIsIFwibG9hZGluZ1wiLCBcInJlcXVlc3RcIiwgXCJwYXJhbXNcIiwgXCJpbml0aWFsVmFsdWVzXCIsIFwib25GaW5pc2hcIiwgXCJvbkZpbmlzaEZhaWxlZFwiLCBcIm9uVmFsdWVzQ2hhbmdlXCIsIFwib25SZXNldFwiLCBcImZvcm1SZWZcIiwgXCJvbWl0TmlsXCIsIFwiZGF0ZUZvcm1hdHRlclwiLCBcImZpZWxkUHJvcHNcIiwgXCJmb3JtSXRlbVByb3BzXCIsIFwic2l6ZVwiLCBcImxhYmVsQWxpZ25cIiwgXCJkaXNhYmxlZFwiLCBcImNvbG9uXCIsIFwicmVxdWlyZWRNYXJrXCIsIFwidmFsaWRhdGVUcmlnZ2VyXCIsIFwicHJlZml4Q2xzXCJdKTtcbiAgICBjb25zdCBtb2RlID0gbW9kZVByb3AgIT09IG51bGwgJiYgbW9kZVByb3AgIT09IHZvaWQgMCA/IG1vZGVQcm9wIDogKHJlYWRvbmx5ID8gJ3JlYWQnIDogJ2VkaXQnKTtcbiAgICBjb25zdCBbcmVxdWVzdExvYWRpbmcsIHNldFJlcXVlc3RMb2FkaW5nXSA9IHVzZVNhZmVTdGF0ZShmYWxzZSk7XG4gICAgY29uc3QgW3N1Ym1pdHRpbmcsIHNldFN1Ym1pdHRpbmddID0gdXNlU2FmZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBsb2FkaW5nIHx8IHJlcXVlc3RMb2FkaW5nIHx8IHN1Ym1pdHRpbmc7XG4gICAgLy8g4pSA4pSAIFRyYW5zZm9ybSAvIHZhbHVlVHlwZSByZWdpc3RyaWVzIOKUgOKUgFxuICAgIGNvbnN0IHRyYW5zZm9ybUtleVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgdmFsdWVUeXBlUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCByZWdpc3RlclRyYW5zZm9ybSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGZuKSA9PiB7XG4gICAgICAgIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50W25hbWVdID0gZm47XG4gICAgfSk7XG4gICAgY29uc3QgdW5yZWdpc3RlclRyYW5zZm9ybSA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IHtcbiAgICAgICAgZGVsZXRlIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50W25hbWVdO1xuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyVmFsdWVUeXBlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWVUeXBlKSA9PiB7XG4gICAgICAgIHZhbHVlVHlwZVJlZi5jdXJyZW50W25hbWVdID0gdmFsdWVUeXBlO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJWYWx1ZVR5cGUgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiB7XG4gICAgICAgIGRlbGV0ZSB2YWx1ZVR5cGVSZWYuY3VycmVudFtuYW1lXTtcbiAgICB9KTtcbiAgICBjb25zdCBvbkZpbmlzaFJlZiA9IHVzZUxhdGVzdChvbkZpbmlzaCk7XG4gICAgLy8gU3VibWl0IHBpcGVsaW5lOiBkYXRlcyDihpIgZmllbGQgdHJhbnNmb3JtcyDihpIgb21pdE5pbFxuICAgIGNvbnN0IGFwcGx5UGlwZWxpbmUgPSB1c2VNZW1vaXplZEZuKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZvcm1hdERhdGVWYWx1ZXModmFsdWVzLCBkYXRlRm9ybWF0dGVyLCB2YWx1ZVR5cGVSZWYuY3VycmVudCk7XG4gICAgICAgIHJlc3VsdCA9IHRyYW5zZm9ybVN1Ym1pdFZhbHVlcyhyZXN1bHQsIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50KTtcbiAgICAgICAgaWYgKG9taXROaWwpXG4gICAgICAgICAgICByZXN1bHQgPSBvbWl0TmlsVmFsdWVzKHJlc3VsdCk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgLy8g4pSA4pSAIEZvcm0gZW5naW5lICh1c2VGb3JtIHdpdGggYXN5bmMgdmFsaWRhdGlvbikg4pSA4pSAXG4gICAgY29uc3QgeyBmb3JtSW5zdGFuY2UsIGludGVybmFscyB9ID0gdXNlRm9ybSh7XG4gICAgICAgIGluaXRpYWxWYWx1ZXMsXG4gICAgICAgIG9uVmFsdWVzQ2hhbmdlLFxuICAgICAgICBvblJlc2V0LFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQgfHwgaXNMb2FkaW5nLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgfSk7XG4gICAgLy8g4pSA4pSAIEFzeW5jIHN1Ym1pdCB3aXRoIHRyYW5zZm9ybSBwaXBlbGluZSDilIDilIBcbiAgICBjb25zdCB3cmFwcGVkSGFuZGxlU3VibWl0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNldFN1Ym1pdHRpbmcodHJ1ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRWYWx1ZXMgPSB5aWVsZCBmb3JtSW5zdGFuY2UudmFsaWRhdGVGaWVsZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lZCA9IGFwcGx5UGlwZWxpbmUodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIHlpZWxkICgoX2EgPSBvbkZpbmlzaFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvbkZpbmlzaFJlZiwgcGlwZWxpbmVkKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRTdWJtaXR0aW5nKGZhbHNlKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyDilIDilIAgUHJvRm9ybSBpbnN0YW5jZTogc3VwZXJzZXQgb2YgRm9ybUluc3RhbmNlIOKUgOKUgFxuICAgIGNvbnN0IHByb0Zvcm1Gb3JtSW5zdGFuY2UgPSB1c2VNZW1vKCgpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZvcm1JbnN0YW5jZSksIHsgZ2V0RmllbGRzRm9ybWF0VmFsdWU6ICgpID0+IGFwcGx5UGlwZWxpbmUoZm9ybUluc3RhbmNlLmdldEZpZWxkc1ZhbHVlKCkpLCB2YWxpZGF0ZUZpZWxkc1JldHVybkZvcm1hdFZhbHVlOiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFscyA9IHlpZWxkIGZvcm1JbnN0YW5jZS52YWxpZGF0ZUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlczogYXBwbHlQaXBlbGluZSh2YWxzKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIHN1Ym1pdEZvcm06IHdyYXBwZWRIYW5kbGVTdWJtaXQgfSkpLCBbZm9ybUluc3RhbmNlLCBhcHBseVBpcGVsaW5lLCB3cmFwcGVkSGFuZGxlU3VibWl0XSk7XG4gICAgLy8g4pSA4pSAIFN5bmMgdG8gZm9ybVJlZiBwcm9wIOKUgOKUgFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChmb3JtUmVmKSB7XG4gICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQgPSBwcm9Gb3JtRm9ybUluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfSwgW2Zvcm1SZWYsIHByb0Zvcm1Gb3JtSW5zdGFuY2VdKTtcbiAgICAvLyDilIDilIAgcmVxdWVzdCAvIHBhcmFtcyBhdXRvLWxvYWQg4pSA4pSAXG4gICAgY29uc3QgcmVxdWVzdFJlZiA9IHVzZUxhdGVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBzZXJpYWxpemVkUGFyYW1zID0gdXNlTWVtbygoKSA9PiBzdGFibGVTZXJpYWxpemUocGFyYW1zKSwgW3BhcmFtc10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZldGNoRGF0YSA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEZuID0gcmVxdWVzdFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Rm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UmVxdWVzdExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXF1ZXN0Rm4ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YSAmJiB0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUluc3RhbmNlLnNldEZpZWxkc1ZhbHVlKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNldFJlcXVlc3RMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXF1ZXN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZldGNoRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlLWZldGNoIE9OTFkgd2hlbiBwYXJhbXMgY2hhbmdlIGJ5IFZBTFVFOiBkZXBlbmRpbmcgb24gdGhlIHJhdyBgcGFyYW1zYFxuICAgICAgICAvLyByZWZlcmVuY2Ugd291bGQgcmUtcnVuIG9uIGV2ZXJ5IHJlbmRlciBmb3IgaW5saW5lIG9iamVjdCBsaXRlcmFscyBhbmQsXG4gICAgICAgIC8vIGNvbWJpbmVkIHdpdGggdGhlIGxvYWRpbmcgc2V0U3RhdGUsIGxvb3AgZm9yZXZlci5cbiAgICB9LCBbc2VyaWFsaXplZFBhcmFtc10pO1xuICAgIC8vIOKUgOKUgCBTcGxpdCBjb250ZXh0IOKUgOKUgFxuICAgIC8vIFZvbGF0aWxlIHNsaWNlOiBjaGFuZ2VzIG9uIGV2ZXJ5IHZhbHVlL2Vycm9yIHVwZGF0ZSAocGVyIGtleXN0cm9rZSkuXG4gICAgY29uc3Qgc3RhdGVWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgdmFsdWVzOiBpbnRlcm5hbHMudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGludGVybmFscy5lcnJvcnMsXG4gICAgICAgIHdhcm5pbmdzOiBpbnRlcm5hbHMud2FybmluZ3MsXG4gICAgICAgIHRvdWNoZWQ6IGludGVybmFscy50b3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nOiBpbnRlcm5hbHMudmFsaWRhdGluZyxcbiAgICB9KSwgW1xuICAgICAgICBpbnRlcm5hbHMudmFsdWVzLFxuICAgICAgICBpbnRlcm5hbHMuZXJyb3JzLFxuICAgICAgICBpbnRlcm5hbHMud2FybmluZ3MsXG4gICAgICAgIGludGVybmFscy50b3VjaGVkLFxuICAgICAgICBpbnRlcm5hbHMudmFsaWRhdGluZyxcbiAgICBdKTtcbiAgICAvLyBTdGFibGUgc2xpY2U6IGNvbmZpZ3VyYXRpb24gKyBpZGVudGl0eS1zdGFibGUgZGlzcGF0Y2hlcnMvaW5zdGFuY2UuXG4gICAgLy8gQ2hhbmdlcyBvbmx5IHdoZW4gZm9ybS1sZXZlbCBwcm9wcyBjaGFuZ2Ug4oCUIE5PVCBvbiBrZXlzdHJva2VzLCBzb1xuICAgIC8vIHN1YnNjcmliZXJzIGxpa2UgU3VibWl0dGVyIGFuZCB0aGUgZmllbGQgZmFjdG9yaWVzIHNraXAgdGhvc2UgcmVuZGVycy5cbiAgICBjb25zdCBzdGFibGVWYWx1ZSA9IHVzZU1lbW8oKCkgPT4gKHtcbiAgICAgICAgZm9ybUluc3RhbmNlOiBwcm9Gb3JtRm9ybUluc3RhbmNlLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBpbnRlcm5hbHMuc2V0RmllbGRWYWx1ZSxcbiAgICAgICAgc2V0RmllbGRFcnJvcjogaW50ZXJuYWxzLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIHNldEZpZWxkV2FybmluZzogaW50ZXJuYWxzLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogaW50ZXJuYWxzLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRBc3luYzogaW50ZXJuYWxzLnZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgcmVnaXN0ZXJGaWVsZDogaW50ZXJuYWxzLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHVucmVnaXN0ZXJGaWVsZDogaW50ZXJuYWxzLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkIHx8IGlzTG9hZGluZyxcbiAgICAgICAgY29sb24sXG4gICAgICAgIHJlcXVpcmVkTWFyayxcbiAgICAgICAgdmFsaWRhdGVUcmlnZ2VyLFxuICAgICAgICAvLyBQcm9Gb3JtIHNwZWNpZmljc1xuICAgICAgICByZWFkb25seSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgZ3JpZCxcbiAgICAgICAgY29sUHJvcHM6IGNvbFByb3BzICE9PSBudWxsICYmIGNvbFByb3BzICE9PSB2b2lkIDAgPyBjb2xQcm9wcyA6IHsgc3BhbjogMjQgfSxcbiAgICAgICAgcmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHVucmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICB1bnJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICBmaWVsZFByb3BzLFxuICAgICAgICBmb3JtSXRlbVByb3BzLFxuICAgIH0pLCBbXG4gICAgICAgIHByb0Zvcm1Gb3JtSW5zdGFuY2UsXG4gICAgICAgIGludGVybmFscy5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBpbnRlcm5hbHMuc2V0RmllbGRFcnJvcixcbiAgICAgICAgaW50ZXJuYWxzLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgaW50ZXJuYWxzLnZhbGlkYXRlRmllbGQsXG4gICAgICAgIGludGVybmFscy52YWxpZGF0ZUZpZWxkQXN5bmMsXG4gICAgICAgIGludGVybmFscy5yZWdpc3RlckZpZWxkLFxuICAgICAgICBpbnRlcm5hbHMudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgaXNMb2FkaW5nLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBtb2RlLFxuICAgICAgICBncmlkLFxuICAgICAgICBjb2xQcm9wcyxcbiAgICAgICAgcmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHVucmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICB1bnJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICBmaWVsZFByb3BzLFxuICAgICAgICBmb3JtSXRlbVByb3BzLFxuICAgIF0pO1xuICAgIGNvbnN0IFdyYXBwZXJDb21wb25lbnQgPSBncmlkID8gUm93IDogRnJhZ21lbnQ7XG4gICAgY29uc3Qgd3JhcHBlclByb3BzID0gZ3JpZCA/IE9iamVjdC5hc3NpZ24oe30sIHJvd1Byb3BzKSA6IHt9O1xuICAgIGNvbnN0IHN1Ym1pdHRlck5vZGUgPSBzdWJtaXR0ZXIgIT09IGZhbHNlICYmIG1vZGUgIT09ICdyZWFkJyA/IChfanN4KFN1Ym1pdHRlciwgT2JqZWN0LmFzc2lnbih7fSwgKHR5cGVvZiBzdWJtaXR0ZXIgPT09ICdvYmplY3QnID8gc3VibWl0dGVyIDoge30pLCB7IGxvYWRpbmc6IGlzTG9hZGluZyB9KSkpIDogbnVsbDtcbiAgICByZXR1cm4gKF9qc3goUHJvRm9ybVN0YWJsZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IHN0YWJsZVZhbHVlLCBjaGlsZHJlbjogX2pzeChQcm9Gb3JtU3RhdGVDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBzdGF0ZVZhbHVlLCBjaGlsZHJlbjogX2pzeHMoXCJmb3JtXCIsIE9iamVjdC5hc3NpZ24oe30sIHJlc3QsIHsgY2xhc3NOYW1lOiBmb3JtQ2xhc3Nlcyh1bmRlZmluZWQsIGpvaW5DbHMoY2xhc3NlcygpLCBjbGFzc05hbWUpKSwgb25TdWJtaXQ6IHdyYXBwZWRIYW5kbGVTdWJtaXQsIG9uUmVzZXQ6IGludGVybmFscy5oYW5kbGVSZXNldCwgY2hpbGRyZW46IFtfanN4KFdyYXBwZXJDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHdyYXBwZXJQcm9wcywgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkpLCBzdWJtaXR0ZXJOb2RlXSB9KSkgfSkgfSkpO1xufTtcblByb0Zvcm1CYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm0nO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm0gPSBtZW1vKFByb0Zvcm1CYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFByb0Zvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
501
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9Qcm9Gb3JtLmpzIiwiY29tcG9uZW50cy9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL1Byb0Zvcm0udHN4Il0sIm5hbWVzIjpbIl9qc3hSdW50aW1lIiwicmVxdWlyZSIsIl9yZWFjdCIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3VzZUxhdGVzdCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfdXNlU2FmZVN0YXRlNSIsIl91c2VNZW1vaXplZEZuIiwiX3VzZUV2ZW50Q2FsbGJhY2siLCJfY2xhc3NuYW1lcyIsIl9HcmlkIiwiX3VzZUZvcm0yIiwiX2NvbnRleHQ0IiwiX1N1Ym1pdHRlciIsIl9jb25zdGFudHMiLCJfdXRpbHMiLCJfZm9ybVN0b3JlIiwiX3VzZVVybFN5bmMyIiwiX3BhdGhVdGlscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiY2xhc3NlcyIsImNsYXNzbmFtZXMiLCJDU1NfUFJFRklYIiwiZm9ybUNsYXNzZXMiLCJERUZBVUxUX0NPTF9QUk9QUyIsInNwYW4iLCJQcm9Gb3JtQmFzZSIsInByb3BzIiwiY2hpbGRyZW4iLCJjbGFzc05hbWUiLCJzdWJtaXR0ZXIiLCJfcHJvcHMkcmVhZG9ubHkiLCJyZWFkb25seSIsIm1vZGVQcm9wIiwibW9kZSIsIl9wcm9wcyRncmlkIiwiZ3JpZCIsImNvbFByb3BzIiwicm93UHJvcHMiLCJfcHJvcHMkbG9hZGluZyIsImxvYWRpbmciLCJyZXF1ZXN0IiwicGFyYW1zIiwiaW5pdGlhbFZhbHVlcyIsIm9uRmluaXNoIiwib25GaW5pc2hGYWlsZWQiLCJvblZhbHVlc0NoYW5nZSIsIm9uUmVzZXQiLCJvbkluaXQiLCJvbkxvYWRpbmdDaGFuZ2UiLCJzeW5jVG9VcmwiLCJfcHJvcHMkc3luY1RvVXJsQXNJbXAiLCJzeW5jVG9VcmxBc0ltcG9ydGFudCIsImV4dHJhVXJsUGFyYW1zIiwiX3Byb3BzJGF1dG9Gb2N1c0ZpcnN0IiwiYXV0b0ZvY3VzRmlyc3RJbnB1dCIsImZvcm1Db21wb25lbnRUeXBlIiwiZm9ybVJlZiIsIl9wcm9wcyRvbWl0TmlsIiwib21pdE5pbCIsIl9wcm9wcyRkYXRlRm9ybWF0dGVyIiwiZGF0ZUZvcm1hdHRlciIsImZpZWxkUHJvcHMiLCJmb3JtSXRlbVByb3BzIiwibGF5b3V0IiwiX3Byb3BzJHNpemUiLCJzaXplIiwiX3Byb3BzJGxhYmVsQWxpZ24iLCJsYWJlbEFsaWduIiwiX3Byb3BzJGRpc2FibGVkIiwiZGlzYWJsZWQiLCJfcHJvcHMkY29sb24iLCJjb2xvbiIsIl9wcm9wcyRyZXF1aXJlZE1hcmsiLCJyZXF1aXJlZE1hcmsiLCJfcHJvcHMkdmFsaWRhdGVUcmlnZ2UiLCJ2YWxpZGF0ZVRyaWdnZXIiLCJfcHJlZml4Q2xzIiwicHJlZml4Q2xzIiwicmVzdCIsIl91c2VTYWZlU3RhdGUiLCJ1c2VTYWZlU3RhdGUiLCJfdXNlU2FmZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5MiIsInJlcXVlc3RMb2FkaW5nIiwic2V0UmVxdWVzdExvYWRpbmciLCJfdXNlU2FmZVN0YXRlMyIsIl91c2VTYWZlU3RhdGU0Iiwic3VibWl0dGluZyIsInNldFN1Ym1pdHRpbmciLCJzdWJtaXR0aW5nUmVmIiwidXNlUmVmIiwiaXNMb2FkaW5nIiwidHJhbnNmb3JtS2V5UmVmIiwidmFsdWVUeXBlUmVmIiwicmVnaXN0ZXJUcmFuc2Zvcm0iLCJ1c2VNZW1vaXplZEZuIiwibmFtZSIsImZuIiwiY3VycmVudCIsInVucmVnaXN0ZXJUcmFuc2Zvcm0iLCJ1bmRlZmluZWQiLCJyZWdpc3RlclZhbHVlVHlwZSIsInZhbHVlVHlwZSIsInVucmVnaXN0ZXJWYWx1ZVR5cGUiLCJvbkZpbmlzaFJlZiIsInVzZUxhdGVzdCIsIm9uSW5pdFJlZiIsIm9uTG9hZGluZ0NoYW5nZVJlZiIsImFwcGx5UGlwZWxpbmUiLCJ2YWx1ZXMiLCJmb3JtYXREYXRlVmFsdWVzIiwidHJhbnNmb3JtU3VibWl0VmFsdWVzIiwib21pdE5pbFZhbHVlcyIsImZvcm1hdFZhbHVlc0tlZXBOaWwiLCJfdXNlVXJsU3luYyIsInVzZVVybFN5bmMiLCJ1cmxJbml0aWFsVmFsdWVzIiwib25VcmxTeW5jRmluaXNoIiwib25VcmxTeW5jUmVzZXQiLCJtZXJnZWRJbml0aWFsVmFsdWVzUmVmIiwiYXNzaWduIiwibWVyZ2VkSW5pdGlhbFZhbHVlcyIsInJlc2V0RXBvY2hSZWYiLCJmaXJlRm9ybVJlc2V0IiwiZmluYWxWYWx1ZXMiLCJmb3JtSW5zdGFuY2UiLCJnZXRGaWVsZHNWYWx1ZSIsIl91c2VGb3JtIiwidXNlRm9ybSIsImludGVybmFscyIsInN0b3JlIiwid3JhcHBlZEhhbmRsZVN1Ym1pdCIsInVzZUV2ZW50Q2FsbGJhY2siLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsIl9hIiwiX2IiLCJfYyIsImVwb2NoIiwidmFsaWRhdGVkVmFsdWVzIiwicGlwZWxpbmVkIiwidHlwZWQiLCJfdCIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJwcmV2ZW50RGVmYXVsdCIsImFicnVwdCIsInZhbGlkYXRlRmllbGRzIiwic2VudCIsImVycm9ycyIsImZpbmlzaCIsInN0b3AiLCJwcm9Gb3JtRm9ybUluc3RhbmNlIiwidXNlTWVtbyIsImdldEZpZWxkc0Zvcm1hdFZhbHVlIiwiZ2V0RmllbGRGb3JtYXRWYWx1ZSIsInJlc29sdmVWYWx1ZSIsImdldEZpZWxkRm9ybWF0VmFsdWVPYmplY3QiLCJmb3JtYXR0ZWQiLCJ0b3BLZXkiLCJzcGxpdCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJ2YWxpZGF0ZUZpZWxkc1JldHVybkZvcm1hdFZhbHVlIiwiX2NhbGxlZTIiLCJ2YWxzIiwiX3QyIiwiX2NvbnRleHQyIiwic3VjY2VzcyIsInN1Ym1pdEZvcm0iLCJ1c2VFZmZlY3QiLCJyZXF1ZXN0UmVmIiwic2VyaWFsaXplZFBhcmFtcyIsInN0YWJsZVNlcmlhbGl6ZSIsImluaXRGaXJlZFJlZiIsImZpcmVJbml0Iiwic3RhbGUiLCJmZXRjaERhdGEiLCJfY2FsbGVlMyIsInJlcXVlc3RGbiIsImRhdGEiLCJfY29udGV4dDMiLCJfdHlwZW9mMiIsInNldEZpZWxkc1ZhbHVlIiwiZm9ybUVsUmVmIiwiZmlyc3RJbnB1dCIsInF1ZXJ5U2VsZWN0b3IiLCJmb2N1cyIsInN0YWJsZUZpZWxkUHJvcHMiLCJ1c2VTaGFsbG93U3RhYmxlIiwic3RhYmxlRm9ybUl0ZW1Qcm9wcyIsInN0YWJsZUNvbFByb3BzIiwic3RhYmxlTGF5b3V0Iiwic3RhYmxlVmFsdWUiLCJzZXRGaWVsZFZhbHVlIiwic2V0RmllbGRFcnJvciIsInNldEZpZWxkV2FybmluZyIsInZhbGlkYXRlRmllbGQiLCJ2YWxpZGF0ZUZpZWxkQXN5bmMiLCJyZWdpc3RlckZpZWxkIiwidW5yZWdpc3RlckZpZWxkIiwiV3JhcHBlckNvbXBvbmVudCIsIlJvdyIsIkZyYWdtZW50Iiwid3JhcHBlclByb3BzIiwiaGFuZGxlU3VibWl0dGVyUmVzZXQiLCJzdWJtaXR0ZXJOb2RlIiwiX2pzeCIsIlN1Ym1pdHRlciIsIlByb0Zvcm1TdGFibGVDb250ZXh0IiwiUHJvdmlkZXIiLCJQcm9Gb3JtU3RhdGVDb250ZXh0IiwiX2pzeHMiLCJyZWYiLCJqb2luQ2xzIiwib25TdWJtaXQiLCJoYW5kbGVSZXNldCIsImRpc3BsYXlOYW1lIiwiUHJvRm9ybSIsImV4cG9ydHMiLCJtZW1vIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQW9CQSxJQUFBQSxXQUFBLEdBQUFDLE9BQUE7QUNwQkEsSUFBQUMsTUFBQSxHQUFBQyx1QkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsVUFBQSxHQUFBQyxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQUssY0FBQSxHQUFBRCxzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU0sY0FBQSxHQUFBRixzQkFBQSxDQUFBSixPQUFBO0FBQ0EsSUFBQU8saUJBQUEsR0FBQUgsc0JBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQU4sdUJBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFTLEtBQUEsR0FBQVQsT0FBQTtBQUNBLElBQUFVLFNBQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFNBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLFVBQUEsR0FBQVosT0FBQTtBQUNBLElBQUFhLFVBQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLE1BQUEsR0FBQWQsT0FBQTtBQUNBLElBQUFlLFVBQUEsR0FBQWYsT0FBQTtBQUNBLElBQUFnQixZQUFBLEdBQUFoQixPQUFBO0FBQ0EsSUFBQWlCLFVBQUEsR0FBQWpCLE9BQUE7QUFBZ0QsU0FBQWtCLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBakIsd0JBQUFpQixDQUFBLEVBQUFFLENBQUEsU0FBQUEsQ0FBQSxJQUFBRixDQUFBLElBQUFBLENBQUEsQ0FBQUksVUFBQSxTQUFBSixDQUFBLGVBQUFBLENBQUEs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RSxFQUFFUyxTQUFTLENBQUMsQ0FBQztRQUNoRTRMLFFBQVEsRUFBRXJGLG1CQUFtQjtRQUM3QnJGLE9BQU8sRUFBRW1GLFNBQVMsQ0FBQ3dGLFdBQVc7UUFBQTlMLFFBQUEsRUFBQSxDQUU5QixJQUFBcUwsZUFBQSxFQUFDTixnQkFBZ0IsRUFBQXpOLE1BQUEsQ0FBQXVJLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBS3FGLFlBQVksRUFBQTtVQUFBbEwsUUFBQSxFQUFHQTtRQUFRLENBQUEsQ0FBQSxDQUFvQixFQUNoRW9MLGFBQWE7TUFBQSxDQUFBLENBQUE7SUFDVCxDQUFBO0VBQ3NCLENBQUEsQ0FDRDtBQUVwQyxDQUFDO0FBRUR0TCxXQUFXLENBQUNpTSxXQUFXLEdBQUcsU0FBUztBQVc1QixJQUFNQyxPQUFPLEdBQUFDLE9BQUEsQ0FBQUQsT0FBQSxnQkFBRyxJQUFBRSxXQUFJLEVBQUNwTSxXQUFXLENBQWdDO0FBQUMsSUFBQXFNLFFBQUEsR0FBQUYsT0FBQSxjQUV6REQsT0FBTyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vUHJvRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCBSZWFjdCwgeyBtZW1vLCB1c2VFZmZlY3QsIHVzZU1lbW8sIHVzZVJlZiwgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgdXNlTGF0ZXN0IGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTGF0ZXN0JztcbmltcG9ydCB1c2VTYWZlU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VTYWZlU3RhdGUnO1xuaW1wb3J0IHVzZU1lbW9pemVkRm4gZnJvbSAnQDFtb25leS9ob29rcy91c2VNZW1vaXplZEZuJztcbmltcG9ydCB1c2VFdmVudENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMsIGpvaW5DbHMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4uL0dyaWQnO1xuaW1wb3J0IHsgdXNlRm9ybSB9IGZyb20gJy4vY29yZS9ob29rcy91c2VGb3JtJztcbmltcG9ydCB7IFByb0Zvcm1TdGFibGVDb250ZXh0LCBQcm9Gb3JtU3RhdGVDb250ZXh0IH0gZnJvbSAnLi9jb250ZXh0JztcbmltcG9ydCB7IFN1Ym1pdHRlciB9IGZyb20gJy4vU3VibWl0dGVyJztcbmltcG9ydCB7IENTU19QUkVGSVggfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBzdGFibGVTZXJpYWxpemUsIHRyYW5zZm9ybVN1Ym1pdFZhbHVlcywgb21pdE5pbFZhbHVlcywgZm9ybWF0RGF0ZVZhbHVlcyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgdXNlU2hhbGxvd1N0YWJsZSB9IGZyb20gJy4vY29yZS9mb3JtU3RvcmUnO1xuaW1wb3J0IHsgdXNlVXJsU3luYyB9IGZyb20gJy4vaG9va3MvdXNlVXJsU3luYyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuL2NvcmUvcGF0aFV0aWxzJztcbmNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKENTU19QUkVGSVgpO1xuY29uc3QgZm9ybUNsYXNzZXMgPSBjbGFzc25hbWVzKCdmb3JtJyk7XG5jb25zdCBERUZBVUxUX0NPTF9QUk9QUyA9IHsgc3BhbjogMjQgfTtcbmNvbnN0IFByb0Zvcm1CYXNlID0gKHByb3BzKSA9PiB7XG4gICAgY29uc3QgeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBzdWJtaXR0ZXIsIHJlYWRvbmx5ID0gZmFsc2UsIG1vZGU6IG1vZGVQcm9wLCBncmlkID0gZmFsc2UsIGNvbFByb3BzLCByb3dQcm9wcywgbG9hZGluZyA9IGZhbHNlLCByZXF1ZXN0LCBwYXJhbXMsIGluaXRpYWxWYWx1ZXMsIG9uRmluaXNoLCBvbkZpbmlzaEZhaWxlZCwgb25WYWx1ZXNDaGFuZ2UsIG9uUmVzZXQsIG9uSW5pdCwgb25Mb2FkaW5nQ2hhbmdlLCBzeW5jVG9VcmwsIHN5bmNUb1VybEFzSW1wb3J0YW50ID0gZmFsc2UsIGV4dHJhVXJsUGFyYW1zLCBhdXRvRm9jdXNGaXJzdElucHV0ID0gZmFsc2UsIGZvcm1Db21wb25lbnRUeXBlLCBmb3JtUmVmLCBvbWl0TmlsID0gdHJ1ZSwgZGF0ZUZvcm1hdHRlciA9ICdzdHJpbmcnLCBmaWVsZFByb3BzLCBmb3JtSXRlbVByb3BzLCBsYXlvdXQsIHNpemUgPSAnbGFyZ2UnLCBsYWJlbEFsaWduID0gJ2xlZnQnLCBkaXNhYmxlZCA9IGZhbHNlLCBjb2xvbiA9IHRydWUsIHJlcXVpcmVkTWFyayA9IHRydWUsIHZhbGlkYXRlVHJpZ2dlciA9ICdvbkNoYW5nZScsIHByZWZpeENsczogX3ByZWZpeENscyB9ID0gcHJvcHMsIHJlc3QgPSBfX3Jlc3QocHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwic3VibWl0dGVyXCIsIFwicmVhZG9ubHlcIiwgXCJtb2RlXCIsIFwiZ3JpZFwiLCBcImNvbFByb3BzXCIsIFwicm93UHJvcHNcIiwgXCJsb2FkaW5nXCIsIFwicmVxdWVzdFwiLCBcInBhcmFtc1wiLCBcImluaXRpYWxWYWx1ZXNcIiwgXCJvbkZpbmlzaFwiLCBcIm9uRmluaXNoRmFpbGVkXCIsIFwib25WYWx1ZXNDaGFuZ2VcIiwgXCJvblJlc2V0XCIsIFwib25Jbml0XCIsIFwib25Mb2FkaW5nQ2hhbmdlXCIsIFwic3luY1RvVXJsXCIsIFwic3luY1RvVXJsQXNJbXBvcnRhbnRcIiwgXCJleHRyYVVybFBhcmFtc1wiLCBcImF1dG9Gb2N1c0ZpcnN0SW5wdXRcIiwgXCJmb3JtQ29tcG9uZW50VHlwZVwiLCBcImZvcm1SZWZcIiwgXCJvbWl0TmlsXCIsIFwiZGF0ZUZvcm1hdHRlclwiLCBcImZpZWxkUHJvcHNcIiwgXCJmb3JtSXRlbVByb3BzXCIsIFwibGF5b3V0XCIsIFwic2l6ZVwiLCBcImxhYmVsQWxpZ25cIiwgXCJkaXNhYmxlZFwiLCBcImNvbG9uXCIsIFwicmVxdWlyZWRNYXJrXCIsIFwidmFsaWRhdGVUcmlnZ2VyXCIsIFwicHJlZml4Q2xzXCJdKTtcbiAgICBjb25zdCBtb2RlID0gbW9kZVByb3AgIT09IG51bGwgJiYgbW9kZVByb3AgIT09IHZvaWQgMCA/IG1vZGVQcm9wIDogKHJlYWRvbmx5ID8gJ3JlYWQnIDogJ2VkaXQnKTtcbiAgICBjb25zdCBbcmVxdWVzdExvYWRpbmcsIHNldFJlcXVlc3RMb2FkaW5nXSA9IHVzZVNhZmVTdGF0ZShmYWxzZSk7XG4gICAgLy8gdXNlU2FmZVN0YXRlIGZvciB0aGUgUkVOREVSRUQgc3VibWl0dGluZyBzdGF0ZSAoaXRzIHNldHRlciBpcyB1bm1vdW50LXNhZmVcbiAgICAvLyDigJQgdGhlIGZpbmFsbHkgYmVsb3cgcnVucyBhZnRlciBhd2FpdGluZyBvbkZpbmlzaCwgd2hlbiB0aGUgdHlwaWNhbFxuICAgIC8vIHN1Ym1pdC10aGVuLWNsb3NlIGZsb3cgbWF5IGFscmVhZHkgaGF2ZSB1bm1vdW50ZWQgdGhlIGZvcm0gb24gUmVhY3RcbiAgICAvLyAxNi8xNykuIFRoZSByZWYgaXMgdGhlIHN5bmNocm9ub3VzIHJlLWVudHJ5IGd1YXJkOyBAMW1vbmV5L2hvb2tzIGhhcyBub1xuICAgIC8vIHNpbmdsZSBob29rIHRoYXQgaXMgYm90aCB1bm1vdW50LXNhZmUgYW5kIHN5bmNocm9ub3VzbHkgcmVhZGFibGUuXG4gICAgY29uc3QgW3N1Ym1pdHRpbmcsIHNldFN1Ym1pdHRpbmddID0gdXNlU2FmZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBzdWJtaXR0aW5nUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBsb2FkaW5nIHx8IHJlcXVlc3RMb2FkaW5nIHx8IHN1Ym1pdHRpbmc7XG4gICAgLy8g4pSA4pSAIFRyYW5zZm9ybSAvIHZhbHVlVHlwZSByZWdpc3RyaWVzIOKUgOKUgFxuICAgIGNvbnN0IHRyYW5zZm9ybUtleVJlZiA9IHVzZVJlZih7fSk7XG4gICAgY29uc3QgdmFsdWVUeXBlUmVmID0gdXNlUmVmKHt9KTtcbiAgICBjb25zdCByZWdpc3RlclRyYW5zZm9ybSA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGZuKSA9PiB7XG4gICAgICAgIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50W25hbWVdID0gZm47XG4gICAgfSk7XG4gICAgLy8gVGhlIG9wdGlvbmFsIHNlY29uZCBhcmd1bWVudCBndWFyZHMgcmVtb3ZhbDogZGVsZXRlIG9ubHkgd2hlbiB0aGUgcmVnaXN0cnlcbiAgICAvLyBzdGlsbCBob2xkcyB0aGUgQ0FMTEVSJ1MgcmVnaXN0cmF0aW9uLCBzbyBhbiB1bm1vdW50aW5nIGluc3RhbmNlIGNhbiBuZXZlclxuICAgIC8vIHdpcGUgYSBzYW1lLW5hbWUgc2libGluZydzIG9yIHN1Y2Nlc3NvcidzIGVudHJ5LlxuICAgIGNvbnN0IHVucmVnaXN0ZXJUcmFuc2Zvcm0gPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmbikgPT4ge1xuICAgICAgICBpZiAoZm4gPT09IHVuZGVmaW5lZCB8fCB0cmFuc2Zvcm1LZXlSZWYuY3VycmVudFtuYW1lXSA9PT0gZm4pIHtcbiAgICAgICAgICAgIGRlbGV0ZSB0cmFuc2Zvcm1LZXlSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHJlZ2lzdGVyVmFsdWVUeXBlID0gdXNlTWVtb2l6ZWRGbigobmFtZSwgdmFsdWVUeXBlKSA9PiB7XG4gICAgICAgIHZhbHVlVHlwZVJlZi5jdXJyZW50W25hbWVdID0gdmFsdWVUeXBlO1xuICAgIH0pO1xuICAgIGNvbnN0IHVucmVnaXN0ZXJWYWx1ZVR5cGUgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZVR5cGUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlVHlwZVJlZi5jdXJyZW50W25hbWVdID09PSB2YWx1ZVR5cGUpIHtcbiAgICAgICAgICAgIGRlbGV0ZSB2YWx1ZVR5cGVSZWYuY3VycmVudFtuYW1lXTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IG9uRmluaXNoUmVmID0gdXNlTGF0ZXN0KG9uRmluaXNoKTtcbiAgICBjb25zdCBvbkluaXRSZWYgPSB1c2VMYXRlc3Qob25Jbml0KTtcbiAgICBjb25zdCBvbkxvYWRpbmdDaGFuZ2VSZWYgPSB1c2VMYXRlc3Qob25Mb2FkaW5nQ2hhbmdlKTtcbiAgICAvLyBTdWJtaXQgcGlwZWxpbmU6IGRhdGVzIOKGkiBmaWVsZCB0cmFuc2Zvcm1zIOKGkiBvbWl0TmlsXG4gICAgY29uc3QgYXBwbHlQaXBlbGluZSA9IHVzZU1lbW9pemVkRm4oKHZhbHVlcykgPT4ge1xuICAgICAgICBsZXQgcmVzdWx0ID0gZm9ybWF0RGF0ZVZhbHVlcyh2YWx1ZXMsIGRhdGVGb3JtYXR0ZXIsIHZhbHVlVHlwZVJlZi5jdXJyZW50KTtcbiAgICAgICAgcmVzdWx0ID0gdHJhbnNmb3JtU3VibWl0VmFsdWVzKHJlc3VsdCwgdHJhbnNmb3JtS2V5UmVmLmN1cnJlbnQpO1xuICAgICAgICBpZiAob21pdE5pbClcbiAgICAgICAgICAgIHJlc3VsdCA9IG9taXROaWxWYWx1ZXMocmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgICAvLyBTYW1lIHBpcGVsaW5lIFdJVEhPVVQgb21pdE5pbCDigJQgc2luZ2xlLWZpZWxkIHJlYWRlcnMgbXVzdCBub3Qgc2VlIGEgZmllbGRcbiAgICAvLyB2YW5pc2gganVzdCBiZWNhdXNlIGl0cyBjdXJyZW50IHZhbHVlIGlzIGVtcHR5LlxuICAgIGNvbnN0IGZvcm1hdFZhbHVlc0tlZXBOaWwgPSB1c2VNZW1vaXplZEZuKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gZm9ybWF0RGF0ZVZhbHVlcyh2YWx1ZXMsIGRhdGVGb3JtYXR0ZXIsIHZhbHVlVHlwZVJlZi5jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybVN1Ym1pdFZhbHVlcyhyZXN1bHQsIHRyYW5zZm9ybUtleVJlZi5jdXJyZW50KTtcbiAgICB9KTtcbiAgICAvLyDilIDilIAgVVJMIHN5bmMgKHN5bmNUb1VybCAvIHN5bmNUb1VybEFzSW1wb3J0YW50IC8gZXh0cmFVcmxQYXJhbXMpIOKUgOKUgFxuICAgIGNvbnN0IHsgdXJsSW5pdGlhbFZhbHVlcywgb25VcmxTeW5jRmluaXNoLCBvblVybFN5bmNSZXNldCB9ID0gdXNlVXJsU3luYyh7XG4gICAgICAgIHN5bmNUb1VybCxcbiAgICAgICAgZXh0cmFVcmxQYXJhbXMsXG4gICAgfSk7XG4gICAgLy8gaW5pdGlhbFZhbHVlcyBpcyBNT1VOVC1PTkxZIChkb2N1bWVudGVkIGNvbnRyYWN0OyB1c2VGb3JtQ29yZSByZS1mcmVlemVzXG4gICAgLy8gYXMgYSBzYWZldHkgbmV0KSDigJQgY29tcHV0ZSB0aGUgVVJMIG1lcmdlIG9uY2Ugc28gdGhlIGZyZWV6ZSBpcyB2aXNpYmxlXG4gICAgLy8gd2hlcmUgdGhlIHByb3BzIGVudGVyLCBpbnN0ZWFkIG9mIHJlY29tcHV0aW5nIGRlYWQgc3ByZWFkcyBwZXIgcmVuZGVyLlxuICAgIGNvbnN0IG1lcmdlZEluaXRpYWxWYWx1ZXNSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgaWYgKG1lcmdlZEluaXRpYWxWYWx1ZXNSZWYuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICBtZXJnZWRJbml0aWFsVmFsdWVzUmVmLmN1cnJlbnQgPSBzeW5jVG9VcmxcbiAgICAgICAgICAgID8gKHN5bmNUb1VybEFzSW1wb3J0YW50XG4gICAgICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGluaXRpYWxWYWx1ZXMpLCB1cmxJbml0aWFsVmFsdWVzKSA6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdXJsSW5pdGlhbFZhbHVlcyksIGluaXRpYWxWYWx1ZXMpKVxuICAgICAgICAgICAgOiAoaW5pdGlhbFZhbHVlcyAhPT0gbnVsbCAmJiBpbml0aWFsVmFsdWVzICE9PSB2b2lkIDAgPyBpbml0aWFsVmFsdWVzIDoge30pO1xuICAgIH1cbiAgICBjb25zdCBtZXJnZWRJbml0aWFsVmFsdWVzID0gbWVyZ2VkSW5pdGlhbFZhbHVlc1JlZi5jdXJyZW50O1xuICAgIC8vIEJ1bXBlZCBvbiBldmVyeSByZXNldCDigJQgYW4gaW4tZmxpZ2h0IHN1Ym1pdCBjYXB0dXJlcyBpdCBhbmQgYWJvcnRzIHdoZW5cbiAgICAvLyBpdCBjaGFuZ2VkIHVuZGVybmVhdGggKHRoZSB1c2VyIGRpc2NhcmRlZCB0aGUgc3VibWlzc2lvbidzIHZhbHVlcykuXG4gICAgY29uc3QgcmVzZXRFcG9jaFJlZiA9IHVzZVJlZigwKTtcbiAgICAvLyBSZXNldCBjaGFpbjogZm9ybS1sZXZlbCBvblJlc2V0IHJlY2VpdmVzIHRoZSAocG9zdC1yZXNldCkgZm9ybWF0dGVkXG4gICAgLy8gdmFsdWVzLCB0aGVuIHRoZSBmb3JtJ3Mgb3duIFVSTCBwYXJhbXMgYXJlIGNsZWFyZWQuIHVzZU1lbW9pemVkRm4gZGVmZXJzXG4gICAgLy8gZXhlY3V0aW9uIHRvIGV2ZW50IHRpbWUsIHdoZW4gYGZvcm1JbnN0YW5jZWAgKGNyZWF0ZWQganVzdCBiZWxvdykgZXhpc3RzLlxuICAgIGNvbnN0IGZpcmVGb3JtUmVzZXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgcmVzZXRFcG9jaFJlZi5jdXJyZW50ICs9IDE7XG4gICAgICAgIGNvbnN0IGZpbmFsVmFsdWVzID0gYXBwbHlQaXBlbGluZShmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldChmaW5hbFZhbHVlcyk7XG4gICAgICAgIG9uVXJsU3luY1Jlc2V0KCk7XG4gICAgfSk7XG4gICAgLy8g4pSA4pSAIEZvcm0gZW5naW5lICh1c2VGb3JtIHdpdGggYXN5bmMgdmFsaWRhdGlvbikg4pSA4pSAXG4gICAgY29uc3QgeyBmb3JtSW5zdGFuY2UsIGludGVybmFscywgc3RvcmUgfSA9IHVzZUZvcm0oe1xuICAgICAgICBpbml0aWFsVmFsdWVzOiBtZXJnZWRJbml0aWFsVmFsdWVzLFxuICAgICAgICBvblZhbHVlc0NoYW5nZSxcbiAgICAgICAgb25SZXNldDogZmlyZUZvcm1SZXNldCxcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgbGFiZWxBbGlnbixcbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICB9KTtcbiAgICAvLyDilIDilIAgQXN5bmMgc3VibWl0IHdpdGggdHJhbnNmb3JtIHBpcGVsaW5lIOKUgOKUgFxuICAgIC8vIFJlLWVudHJ5IGd1YXJkOiBhIHNlY29uZCBzdWJtaXQgd2hpbGUgb25lIGlzIGluIGZsaWdodCBpcyBpZ25vcmVkICh0aGVcbiAgICAvLyByZWYgY2F0Y2hlcyB0d28gY2FsbHMgaW4gdGhlIHNhbWUgdGljaykuXG4gICAgY29uc3Qgd3JhcHBlZEhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgZSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChzdWJtaXR0aW5nUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHN1Ym1pdHRpbmdSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIHNldFN1Ym1pdHRpbmcodHJ1ZSk7XG4gICAgICAgIChfYSA9IG9uTG9hZGluZ0NoYW5nZVJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvbkxvYWRpbmdDaGFuZ2VSZWYsIHRydWUpO1xuICAgICAgICBjb25zdCBlcG9jaCA9IHJlc2V0RXBvY2hSZWYuY3VycmVudDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIGZvcm1JbnN0YW5jZS52YWxpZGF0ZUZpZWxkcygpO1xuICAgICAgICAgICAgLy8gQSByZXNldCBkdXJpbmcgKGFzeW5jKSB2YWxpZGF0aW9uIGRpc2NhcmRzIHRoaXMgc3VibWlzc2lvbiBlbnRpcmVseTpcbiAgICAgICAgICAgIC8vIHZhbGlkYXRlRmllbGRzIHJlLXJlYWRzIHRoZSBsaXZlIHN0b3JlLCBzbyBwcm9jZWVkaW5nIHdvdWxkIGhhbmRcbiAgICAgICAgICAgIC8vIG9uRmluaXNoIHRoZSBQT1NULXJlc2V0IHZhbHVlcy5cbiAgICAgICAgICAgIGlmIChlcG9jaCAhPT0gcmVzZXRFcG9jaFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHBpcGVsaW5lZCA9IGFwcGx5UGlwZWxpbmUodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHlpZWxkICgoX2IgPSBvbkZpbmlzaFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvbkZpbmlzaFJlZiwgcGlwZWxpbmVkKSk7XG4gICAgICAgICAgICAvLyBTeW5jIHRoZSBVUkwgdW5sZXNzIG9uRmluaXNoIGV4cGxpY2l0bHkgcmV0dXJuZWQgZmFsc2UgKGEgdGhyb3cgYWJvdmVcbiAgICAgICAgICAgIC8vIGFsc28gc2tpcHMg4oCUIGEgZmFpbGVkIHN1Ym1pdCBtdXN0IG5vdCBwb2xsdXRlIHRoZSBVUkwpLCBhbmQgb25seSBpZlxuICAgICAgICAgICAgLy8gdGhlIHVzZXIgZGlkIE5PVCByZXNldCB0aGUgZm9ybSB3aGlsZSB0aGUgc3VibWl0IHdhcyBpbiBmbGlnaHQuXG4gICAgICAgICAgICBpZiAocmVzdWx0ICE9PSBmYWxzZSAmJiBlcG9jaCA9PT0gcmVzZXRFcG9jaFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgb25VcmxTeW5jRmluaXNoKHBpcGVsaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gQSByZXNldCBkdXJpbmcgdmFsaWRhdGlvbiBhbHNvIGludmFsaWRhdGVzIHRoZSBGQUlMVVJFIGNhbGxiYWNrIOKAlFxuICAgICAgICAgICAgLy8gdGhlIGVycm9yIGNhcnJpZXMgcG9zdC1yZXNldCB2YWx1ZXMgZm9yIGEgZGlzY2FyZGVkIHN1Ym1pc3Npb24uXG4gICAgICAgICAgICAvLyAoRmllbGQgZXJyb3JzIHN0YW1wZWQgYnkgdGhlIGRlYWQgdmFsaWRhdGlvbiBtYXkgc3RpbGwgYXBwZWFyOyBhXG4gICAgICAgICAgICAvLyBkZWVwZXIgdmFsaWRhdGlvbi1lcG9jaCB3b3VsZCBiZSBuZWVkZWQgdG8gc3VwcHJlc3MgdGhvc2UuKVxuICAgICAgICAgICAgaWYgKGVwb2NoICE9PSByZXNldEVwb2NoUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgdHlwZWQgPSBlcnI7XG4gICAgICAgICAgICBvbkZpbmlzaEZhaWxlZCA9PT0gbnVsbCB8fCBvbkZpbmlzaEZhaWxlZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2hGYWlsZWQoeyB2YWx1ZXM6IHR5cGVkLnZhbHVlcywgZXJyb3JzOiB0eXBlZC5lcnJvcnMgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzdWJtaXR0aW5nUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIHNldFN1Ym1pdHRpbmcoZmFsc2UpO1xuICAgICAgICAgICAgKF9jID0gb25Mb2FkaW5nQ2hhbmdlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKG9uTG9hZGluZ0NoYW5nZVJlZiwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIOKUgOKUgCBQcm9Gb3JtIGluc3RhbmNlOiBzdXBlcnNldCBvZiBGb3JtSW5zdGFuY2Ug4pSA4pSAXG4gICAgY29uc3QgcHJvRm9ybUZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUluc3RhbmNlKSwgeyBnZXRGaWVsZHNGb3JtYXRWYWx1ZTogKCkgPT4gYXBwbHlQaXBlbGluZShmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSksIGdldEZpZWxkRm9ybWF0VmFsdWU6IChuYW1lKSA9PiByZXNvbHZlVmFsdWUoZm9ybWF0VmFsdWVzS2VlcE5pbChmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSksIG5hbWUpLCBnZXRGaWVsZEZvcm1hdFZhbHVlT2JqZWN0OiAobmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0VmFsdWVzS2VlcE5pbChmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSk7XG4gICAgICAgICAgICBpZiAoIW5hbWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlZDtcbiAgICAgICAgICAgIGNvbnN0IHRvcEtleSA9IG5hbWUuc3BsaXQoJy4nKVswXTtcbiAgICAgICAgICAgIHJldHVybiB7IFt0b3BLZXldOiBmb3JtYXR0ZWRbdG9wS2V5XSB9O1xuICAgICAgICB9LCB2YWxpZGF0ZUZpZWxkc1JldHVybkZvcm1hdFZhbHVlOiAoKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFscyA9IHlpZWxkIGZvcm1JbnN0YW5jZS52YWxpZGF0ZUZpZWxkcygpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN1Y2Nlc3M6IHRydWUsIHZhbHVlczogYXBwbHlQaXBlbGluZSh2YWxzKSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlRmllbGRzIHJlamVjdHMgd2l0aCBhbiBFcnJvciBjYXJyeWluZyB0aGUgZmllbGQgZXJyb3JzIG1hcFxuICAgICAgICAgICAgICAgIC8vIChzYW1lIHNoYXBlIHdyYXBwZWRIYW5kbGVTdWJtaXQgY29uc3VtZXMgYWJvdmUpLlxuICAgICAgICAgICAgICAgIGNvbnN0IHsgZXJyb3JzIH0gPSBlcnI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogZmFsc2UsIGVycm9yczogZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDoge30gfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSksIHN1Ym1pdEZvcm06IHdyYXBwZWRIYW5kbGVTdWJtaXQgfSkpLCBbZm9ybUluc3RhbmNlLCBhcHBseVBpcGVsaW5lLCB3cmFwcGVkSGFuZGxlU3VibWl0XSk7XG4gICAgLy8g4pSA4pSAIFN5bmMgdG8gZm9ybVJlZiBwcm9wIOKUgOKUgFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmIChmb3JtUmVmKSB7XG4gICAgICAgICAgICBmb3JtUmVmLmN1cnJlbnQgPSBwcm9Gb3JtRm9ybUluc3RhbmNlO1xuICAgICAgICB9XG4gICAgfSwgW2Zvcm1SZWYsIHByb0Zvcm1Gb3JtSW5zdGFuY2VdKTtcbiAgICAvLyDilIDilIAgcmVxdWVzdCAvIHBhcmFtcyBhdXRvLWxvYWQg4pSA4pSAXG4gICAgY29uc3QgcmVxdWVzdFJlZiA9IHVzZUxhdGVzdChyZXF1ZXN0KTtcbiAgICBjb25zdCBzZXJpYWxpemVkUGFyYW1zID0gdXNlTWVtbygoKSA9PiBzdGFibGVTZXJpYWxpemUocGFyYW1zKSwgW3BhcmFtc10pO1xuICAgIC8vIG9uSW5pdCBmaXJlcyBleGFjdGx5IG9uY2U6IGFmdGVyIHRoZSBGSVJTVCByZXF1ZXN0IHJlc29sdmVzIHdoZW4gYVxuICAgIC8vIHJlcXVlc3QgaXMgY29uZmlndXJlZCwgb3RoZXJ3aXNlIHJpZ2h0IGFmdGVyIG1vdW50LlxuICAgIGNvbnN0IGluaXRGaXJlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgZmlyZUluaXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaW5pdEZpcmVkUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGluaXRGaXJlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgKF9hID0gb25Jbml0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9uSW5pdFJlZiwgYXBwbHlQaXBlbGluZShmb3JtSW5zdGFuY2UuZ2V0RmllbGRzVmFsdWUoKSksIHByb0Zvcm1Gb3JtSW5zdGFuY2UpO1xuICAgIH0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIC8vIFN0YWxlbmVzcyBndWFyZDogaWYgcGFyYW1zIGNoYW5nZSBhZ2FpbiBiZWZvcmUgdGhpcyBmZXRjaCByZXNvbHZlcywgdGhlXG4gICAgICAgIC8vIGNsZWFudXAgbWFya3MgaXQgc3RhbGUgc28gdGhlIGxhdGUgcmVzcG9uc2UgY2FuJ3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZXNcbiAgICAgICAgLy8gYSBuZXdlciByZXF1ZXN0IGFscmVhZHkgKG9yIHdpbGwpIHNldC5cbiAgICAgICAgbGV0IHN0YWxlID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGZldGNoRGF0YSA9ICgpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEZuID0gcmVxdWVzdFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgaWYgKCFyZXF1ZXN0Rm4pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc2V0UmVxdWVzdExvYWRpbmcodHJ1ZSk7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB5aWVsZCByZXF1ZXN0Rm4ocGFyYW1zKTtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YWxlICYmIGRhdGEgJiYgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1JbnN0YW5jZS5zZXRGaWVsZHNWYWx1ZShkYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBpZiAoIXN0YWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlcXVlc3RMb2FkaW5nKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBhIE5PTi1zdXBlcnNlZGVkIHNldHRsZSBpbml0aWFsaXplcyB0aGUgZm9ybTogYSBzdGFsZVxuICAgICAgICAgICAgICAgICAgICAvLyByZXF1ZXN0J3MgZGF0YSB3YXMgZGlzY2FyZGVkLCBzbyBpdHMgdmFsdWVzIG11c3Qgbm90IGJlIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgICAgICBmaXJlSW5pdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChyZXF1ZXN0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGZldGNoRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmlyZUluaXQoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgc3RhbGUgPSB0cnVlO1xuICAgICAgICB9O1xuICAgICAgICAvLyBSZS1mZXRjaCBPTkxZIHdoZW4gcGFyYW1zIGNoYW5nZSBieSBWQUxVRTogZGVwZW5kaW5nIG9uIHRoZSByYXcgYHBhcmFtc2BcbiAgICAgICAgLy8gcmVmZXJlbmNlIHdvdWxkIHJlLXJ1biBvbiBldmVyeSByZW5kZXIgZm9yIGlubGluZSBvYmplY3QgbGl0ZXJhbHMgYW5kLFxuICAgICAgICAvLyBjb21iaW5lZCB3aXRoIHRoZSBsb2FkaW5nIHNldFN0YXRlLCBsb29wIGZvcmV2ZXIuXG4gICAgfSwgW3NlcmlhbGl6ZWRQYXJhbXNdKTtcbiAgICAvLyDilIDilIAgYXV0b0ZvY3VzRmlyc3RJbnB1dCDilIDilIBcbiAgICBjb25zdCBmb3JtRWxSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWF1dG9Gb2N1c0ZpcnN0SW5wdXQgfHwgbW9kZSA9PT0gJ3JlYWQnKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBmaXJzdElucHV0ID0gKF9hID0gZm9ybUVsUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5xdWVyeVNlbGVjdG9yKCdpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pOm5vdChbZGlzYWJsZWRdKSwgdGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pLCBzZWxlY3Q6bm90KFtkaXNhYmxlZF0pJyk7XG4gICAgICAgIGZpcnN0SW5wdXQgPT09IG51bGwgfHwgZmlyc3RJbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZmlyc3RJbnB1dC5mb2N1cygpO1xuICAgICAgICAvLyBNb3VudC1vbmx5IGJ5IGRlc2lnbi5cbiAgICB9LCBbXSk7XG4gICAgLy8g4pSA4pSAIFNwbGl0IGNvbnRleHQg4pSA4pSAXG4gICAgLy8gRm9ybS1sZXZlbCBwcm9wIGJhZ3MgYXJlIG9mdGVuIGlubGluZSBsaXRlcmFsczoga2VlcCB0aGVpciBpZGVudGl0eVxuICAgIC8vIHN0YWJsZSB3aGlsZSBzaGFsbG93LWVxdWFsIHNvIHRoZSBzdGFibGUgc2xpY2UgZG9lc24ndCBjaHVybiBwZXIgcmVuZGVyLlxuICAgIGNvbnN0IHN0YWJsZUZpZWxkUHJvcHMgPSB1c2VTaGFsbG93U3RhYmxlKGZpZWxkUHJvcHMpO1xuICAgIGNvbnN0IHN0YWJsZUZvcm1JdGVtUHJvcHMgPSB1c2VTaGFsbG93U3RhYmxlKGZvcm1JdGVtUHJvcHMpO1xuICAgIGNvbnN0IHN0YWJsZUNvbFByb3BzID0gdXNlU2hhbGxvd1N0YWJsZShjb2xQcm9wcyk7XG4gICAgY29uc3Qgc3RhYmxlTGF5b3V0ID0gdXNlU2hhbGxvd1N0YWJsZShsYXlvdXQpO1xuICAgIC8vIFN0YWJsZSBzbGljZTogY29uZmlndXJhdGlvbiArIGlkZW50aXR5LXN0YWJsZSBkaXNwYXRjaGVycy9pbnN0YW5jZS5cbiAgICAvLyBDaGFuZ2VzIG9ubHkgd2hlbiBmb3JtLWxldmVsIHByb3BzIGNoYW5nZSDigJQgTk9UIG9uIGtleXN0cm9rZXMsIHNvXG4gICAgLy8gc3Vic2NyaWJlcnMgbGlrZSBTdWJtaXR0ZXIgYW5kIHRoZSBmaWVsZCBmYWN0b3JpZXMgc2tpcCB0aG9zZSByZW5kZXJzLlxuICAgIGNvbnN0IHN0YWJsZVZhbHVlID0gdXNlTWVtbygoKSA9PiAoe1xuICAgICAgICBmb3JtSW5zdGFuY2U6IHByb0Zvcm1Gb3JtSW5zdGFuY2UsXG4gICAgICAgIHNldEZpZWxkVmFsdWU6IGludGVybmFscy5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBpbnRlcm5hbHMuc2V0RmllbGRFcnJvcixcbiAgICAgICAgc2V0RmllbGRXYXJuaW5nOiBpbnRlcm5hbHMuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICB2YWxpZGF0ZUZpZWxkOiBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jOiBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBpbnRlcm5hbHMucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgdW5yZWdpc3RlckZpZWxkOiBpbnRlcm5hbHMudW5yZWdpc3RlckZpZWxkLFxuICAgICAgICBzaXplLFxuICAgICAgICBsYWJlbEFsaWduLFxuICAgICAgICAvLyBTdWJtaXR0aW5nL2xvYWRpbmcgZG9lcyBOT1QgZGlzYWJsZSBmaWVsZHMg4oCUIG9ubHkgdGhlXG4gICAgICAgIC8vIGV4cGxpY2l0IGBkaXNhYmxlZGAgcHJvcCBkb2VzLiBLZWVwaW5nIGlzTG9hZGluZyBvdXQgb2YgdGhpcyBzbGljZVxuICAgICAgICAvLyBtZWFucyBhIHN1Ym1pdCBjeWNsZSBubyBsb25nZXIgcmUtcmVuZGVycyBldmVyeSBmaWVsZCBzaGVsbC5cbiAgICAgICAgZGlzYWJsZWQsXG4gICAgICAgIGNvbG9uLFxuICAgICAgICByZXF1aXJlZE1hcmssXG4gICAgICAgIHZhbGlkYXRlVHJpZ2dlcixcbiAgICAgICAgLy8gUHJvRm9ybSBzcGVjaWZpY3NcbiAgICAgICAgcmVhZG9ubHksXG4gICAgICAgIG1vZGUsXG4gICAgICAgIGdyaWQsXG4gICAgICAgIGNvbFByb3BzOiBzdGFibGVDb2xQcm9wcyAhPT0gbnVsbCAmJiBzdGFibGVDb2xQcm9wcyAhPT0gdm9pZCAwID8gc3RhYmxlQ29sUHJvcHMgOiBERUZBVUxUX0NPTF9QUk9QUyxcbiAgICAgICAgcmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHVucmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICB1bnJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICBmaWVsZFByb3BzOiBzdGFibGVGaWVsZFByb3BzLFxuICAgICAgICBmb3JtSXRlbVByb3BzOiBzdGFibGVGb3JtSXRlbVByb3BzLFxuICAgICAgICBsYXlvdXQ6IHN0YWJsZUxheW91dCxcbiAgICAgICAgZm9ybUNvbXBvbmVudFR5cGUsXG4gICAgfSksIFtcbiAgICAgICAgcHJvRm9ybUZvcm1JbnN0YW5jZSxcbiAgICAgICAgaW50ZXJuYWxzLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGludGVybmFscy5zZXRGaWVsZEVycm9yLFxuICAgICAgICBpbnRlcm5hbHMuc2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBpbnRlcm5hbHMudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgaW50ZXJuYWxzLnZhbGlkYXRlRmllbGRBc3luYyxcbiAgICAgICAgaW50ZXJuYWxzLnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGludGVybmFscy51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHNpemUsXG4gICAgICAgIGxhYmVsQWxpZ24sXG4gICAgICAgIGRpc2FibGVkLFxuICAgICAgICBjb2xvbixcbiAgICAgICAgcmVxdWlyZWRNYXJrLFxuICAgICAgICB2YWxpZGF0ZVRyaWdnZXIsXG4gICAgICAgIHJlYWRvbmx5LFxuICAgICAgICBtb2RlLFxuICAgICAgICBncmlkLFxuICAgICAgICBzdGFibGVDb2xQcm9wcyxcbiAgICAgICAgcmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHVucmVnaXN0ZXJUcmFuc2Zvcm0sXG4gICAgICAgIHJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICB1bnJlZ2lzdGVyVmFsdWVUeXBlLFxuICAgICAgICBzdGFibGVGaWVsZFByb3BzLFxuICAgICAgICBzdGFibGVGb3JtSXRlbVByb3BzLFxuICAgICAgICBzdGFibGVMYXlvdXQsXG4gICAgICAgIGZvcm1Db21wb25lbnRUeXBlLFxuICAgIF0pO1xuICAgIGNvbnN0IFdyYXBwZXJDb21wb25lbnQgPSBncmlkID8gUm93IDogRnJhZ21lbnQ7XG4gICAgY29uc3Qgd3JhcHBlclByb3BzID0gZ3JpZCA/IE9iamVjdC5hc3NpZ24oe30sIHJvd1Byb3BzKSA6IHt9O1xuICAgIC8vIFJlc2V0IGNhbGxiYWNrIGNoYWluOiB0aGUgU3VibWl0dGVyIHJlc2V0cyB0aGUgdmFsdWVzIGZpcnN0LCB0aGVuIHRoZVxuICAgIC8vIHN1Ym1pdHRlci1sZXZlbCBvblJlc2V0LCB0aGVuIHRoZSBmb3JtLWxldmVsIG9uUmVzZXQgKHdpdGggZmluYWxWYWx1ZXMpXG4gICAgLy8gYW5kIHRoZSBVUkwgY2xlYW51cCDigJQgZmlyZWQgZXhhY3RseSBvbmNlIHBlciByZXNldCBhY3Rpb24uXG4gICAgY29uc3QgaGFuZGxlU3VibWl0dGVyUmVzZXQgPSB1c2VNZW1vaXplZEZuKCgpID0+IHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodHlwZW9mIHN1Ym1pdHRlciA9PT0gJ29iamVjdCcpXG4gICAgICAgICAgICAoX2EgPSBzdWJtaXR0ZXIub25SZXNldCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwoc3VibWl0dGVyKTtcbiAgICAgICAgZmlyZUZvcm1SZXNldCgpO1xuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdHRlck5vZGUgPSBzdWJtaXR0ZXIgIT09IGZhbHNlICYmIG1vZGUgIT09ICdyZWFkJyA/IChfanN4KFN1Ym1pdHRlciwgT2JqZWN0LmFzc2lnbih7fSwgKHR5cGVvZiBzdWJtaXR0ZXIgPT09ICdvYmplY3QnID8gc3VibWl0dGVyIDoge30pLCB7IG9uUmVzZXQ6IGhhbmRsZVN1Ym1pdHRlclJlc2V0LCBsb2FkaW5nOiBpc0xvYWRpbmcgfSkpKSA6IG51bGw7XG4gICAgcmV0dXJuIChfanN4KFByb0Zvcm1TdGFibGVDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBzdGFibGVWYWx1ZSwgY2hpbGRyZW46IF9qc3goUHJvRm9ybVN0YXRlQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogc3RvcmUsIGNoaWxkcmVuOiBfanN4cyhcImZvcm1cIiwgT2JqZWN0LmFzc2lnbih7fSwgcmVzdCwgeyByZWY6IGZvcm1FbFJlZiwgY2xhc3NOYW1lOiBmb3JtQ2xhc3Nlcyh1bmRlZmluZWQsIGpvaW5DbHMoY2xhc3NlcygpLCBjbGFzc05hbWUpKSwgb25TdWJtaXQ6IHdyYXBwZWRIYW5kbGVTdWJtaXQsIG9uUmVzZXQ6IGludGVybmFscy5oYW5kbGVSZXNldCwgY2hpbGRyZW46IFtfanN4KFdyYXBwZXJDb21wb25lbnQsIE9iamVjdC5hc3NpZ24oe30sIHdyYXBwZXJQcm9wcywgeyBjaGlsZHJlbjogY2hpbGRyZW4gfSkpLCBzdWJtaXR0ZXJOb2RlXSB9KSkgfSkgfSkpO1xufTtcblByb0Zvcm1CYXNlLmRpc3BsYXlOYW1lID0gJ1Byb0Zvcm0nO1xuZXhwb3J0IGNvbnN0IFByb0Zvcm0gPSBtZW1vKFByb0Zvcm1CYXNlKTtcbmV4cG9ydCBkZWZhdWx0IFByb0Zvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9