@1money/component-ui 0.0.73 → 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.
Files changed (83) hide show
  1. package/es/components/ProForm/ProForm.js +201 -48
  2. package/es/components/ProForm/ProFormDependency.d.ts +11 -2
  3. package/es/components/ProForm/ProFormDependency.js +29 -136
  4. package/es/components/ProForm/ProFormItem.js +81 -24
  5. package/es/components/ProForm/ProFormList.js +114 -62
  6. package/es/components/ProForm/Submitter.js +15 -4
  7. package/es/components/ProForm/context.d.ts +11 -3
  8. package/es/components/ProForm/context.js +32 -12
  9. package/es/components/ProForm/core/constants.d.ts +10 -2
  10. package/es/components/ProForm/core/constants.js +17 -3
  11. package/es/components/ProForm/core/formStore.d.ts +24 -0
  12. package/es/components/ProForm/core/formStore.js +101 -0
  13. package/es/components/ProForm/core/hooks/useForm.d.ts +4 -1
  14. package/es/components/ProForm/core/hooks/useForm.js +220 -120
  15. package/es/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  16. package/es/components/ProForm/core/hooks/useFormCore.js +114 -90
  17. package/es/components/ProForm/core/runRules.d.ts +5 -3
  18. package/es/components/ProForm/core/runRules.js +13 -5
  19. package/es/components/ProForm/core/useFormItem.d.ts +2 -2
  20. package/es/components/ProForm/core/useFormItem.js +46 -23
  21. package/es/components/ProForm/fields/ProFormFieldSet.js +20 -7
  22. package/es/components/ProForm/fields/createProFormField.js +14 -4
  23. package/es/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  24. package/es/components/ProForm/hooks/useFieldRequest.js +54 -9
  25. package/es/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  26. package/es/components/ProForm/hooks/useUrlSync.js +170 -0
  27. package/es/components/ProForm/index.d.ts +2 -2
  28. package/es/components/ProForm/index.js +1 -1
  29. package/es/components/ProForm/interface.d.ts +105 -23
  30. package/es/components/ProForm/layouts/DialogForm.js +17 -7
  31. package/es/components/ProForm/layouts/DrawerForm.js +16 -7
  32. package/es/components/ProForm/layouts/QueryFilter.js +46 -135
  33. package/es/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  34. package/es/components/ProForm/layouts/useOverlayForm.js +27 -8
  35. package/es/components/ProForm/style/ProForm.css +0 -6
  36. package/es/components/ProForm/utils.js +32 -8
  37. package/es/components/ProTable/ProTable.js +3 -3
  38. package/es/index.css +1 -1
  39. package/es/index.d.ts +1 -1
  40. package/es/index.js +1 -1
  41. package/lib/components/ProForm/ProForm.js +201 -48
  42. package/lib/components/ProForm/ProFormDependency.d.ts +11 -2
  43. package/lib/components/ProForm/ProFormDependency.js +30 -138
  44. package/lib/components/ProForm/ProFormItem.js +78 -21
  45. package/lib/components/ProForm/ProFormList.js +112 -60
  46. package/lib/components/ProForm/Submitter.js +15 -4
  47. package/lib/components/ProForm/context.d.ts +11 -3
  48. package/lib/components/ProForm/context.js +33 -13
  49. package/lib/components/ProForm/core/constants.d.ts +10 -2
  50. package/lib/components/ProForm/core/constants.js +18 -4
  51. package/lib/components/ProForm/core/formStore.d.ts +24 -0
  52. package/lib/components/ProForm/core/formStore.js +110 -0
  53. package/lib/components/ProForm/core/hooks/useForm.d.ts +4 -1
  54. package/lib/components/ProForm/core/hooks/useForm.js +220 -120
  55. package/lib/components/ProForm/core/hooks/useFormCore.d.ts +5 -1
  56. package/lib/components/ProForm/core/hooks/useFormCore.js +113 -89
  57. package/lib/components/ProForm/core/runRules.d.ts +5 -3
  58. package/lib/components/ProForm/core/runRules.js +13 -5
  59. package/lib/components/ProForm/core/useFormItem.d.ts +2 -2
  60. package/lib/components/ProForm/core/useFormItem.js +44 -21
  61. package/lib/components/ProForm/fields/ProFormFieldSet.js +19 -6
  62. package/lib/components/ProForm/fields/createProFormField.js +14 -4
  63. package/lib/components/ProForm/hooks/useFieldRequest.d.ts +6 -1
  64. package/lib/components/ProForm/hooks/useFieldRequest.js +53 -8
  65. package/lib/components/ProForm/hooks/useUrlSync.d.ts +16 -0
  66. package/lib/components/ProForm/hooks/useUrlSync.js +178 -0
  67. package/lib/components/ProForm/index.d.ts +2 -2
  68. package/lib/components/ProForm/index.js +1 -1
  69. package/lib/components/ProForm/interface.d.ts +105 -23
  70. package/lib/components/ProForm/layouts/DialogForm.js +17 -7
  71. package/lib/components/ProForm/layouts/DrawerForm.js +16 -7
  72. package/lib/components/ProForm/layouts/QueryFilter.js +45 -134
  73. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +2 -2
  74. package/lib/components/ProForm/layouts/useOverlayForm.js +30 -8
  75. package/lib/components/ProForm/style/ProForm.css +0 -6
  76. package/lib/components/ProForm/utils.js +32 -8
  77. package/lib/components/ProTable/ProTable.js +3 -3
  78. package/lib/index.css +1 -1
  79. package/lib/index.d.ts +1 -1
  80. package/lib/index.js +1 -1
  81. package/package.json +1 -1
  82. package/scripts/mcp-server/examples.generated.json +36 -0
  83. package/scripts/mcp-server/index.generated.json +538 -16
@@ -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 { useState, useMemo, useEffect, memo, Fragment } from 'react';
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 _useSafeState = useSafeState({}),
61
- _useSafeState2 = _slicedToArray(_useSafeState, 2),
62
- validating = _useSafeState2[0],
63
- setValidating = _useSafeState2[1];
64
- var _useState = useState({}),
65
- _useState2 = _slicedToArray(_useState, 2),
66
- extraTouched = _useState2[0],
67
- setExtraTouched = _useState2[1];
68
- var allTouched = useMemo(function () {
69
- return Object.assign(Object.assign({}, formCore.touched), extraTouched);
70
- }, [formCore.touched, extraTouched]);
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 _yield$runRulesAsync, error, warning;
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,9 +160,13 @@ export var useForm = function useForm() {
86
160
  error: null
87
161
  });
88
162
  case 1:
89
- setValidating(function (prev) {
90
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
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
172
  return runRulesAsync(name, value, formCore.getFieldsValue(), rules);
@@ -96,37 +174,25 @@ export var useForm = function useForm() {
96
174
  _yield$runRulesAsync = _context.sent;
97
175
  error = _yield$runRulesAsync.error;
98
176
  warning = _yield$runRulesAsync.warning;
99
- formCore.setFieldWarning(name, warning);
100
- if (!(error !== null)) {
101
- _context.next = 4;
102
- break;
103
- }
104
- formCore.setFieldError(name, error);
105
- return _context.abrupt("return", {
106
- isValid: false,
107
- error: error
108
- });
177
+ outcome = {
178
+ name: name,
179
+ error: error,
180
+ warning: warning
181
+ };
109
182
  case 4:
110
- if (formCore.errors[name]) {
111
- formCore.setFieldError(name, null);
112
- }
113
- return _context.abrupt("return", {
114
- isValid: true,
115
- error: null
116
- });
183
+ _context.prev = 4;
184
+ commitRuleOutcomes([outcome], flagged);
185
+ return _context.finish(4);
117
186
  case 5:
118
- _context.prev = 5;
119
- setValidating(function (prev) {
120
- var newValidating = Object.assign({}, prev);
121
- delete newValidating[name];
122
- return newValidating;
187
+ return _context.abrupt("return", {
188
+ isValid: outcome.error === null,
189
+ error: outcome.error
123
190
  });
124
- return _context.finish(5);
125
191
  case 6:
126
192
  case "end":
127
193
  return _context.stop();
128
194
  }
129
- }, _callee, null, [[2,, 5, 6]]);
195
+ }, _callee, null, [[2,, 4, 5]]);
130
196
  }));
131
197
  });
132
198
  // ---------------------------------------------------------------------------
@@ -134,13 +200,16 @@ export var useForm = function useForm() {
134
200
  // ---------------------------------------------------------------------------
135
201
  var handleFieldBlur = useEventCallback(function (name) {
136
202
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
137
- var rules;
203
+ var touched, rules;
138
204
  return _regeneratorRuntime.wrap(function (_context2) {
139
205
  while (1) switch (_context2.prev = _context2.next) {
140
206
  case 0:
141
- setExtraTouched(function (prev) {
142
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, true));
143
- });
207
+ touched = store.getState().touched;
208
+ if (!touched[name]) {
209
+ store.setState({
210
+ touched: Object.assign(Object.assign({}, touched), _defineProperty({}, name, true))
211
+ });
212
+ }
144
213
  rules = formCore.getFieldRules(name);
145
214
  if (!(rules && validateTrigger === 'onBlur')) {
146
215
  _context2.next = 1;
@@ -160,68 +229,84 @@ export var useForm = function useForm() {
160
229
  // ---------------------------------------------------------------------------
161
230
  var validateFieldsAsync = useMemoizedFn(function (nameList) {
162
231
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
163
- var fieldsToValidate, hasError, fieldErrors, validationPromises, error;
232
+ var fieldsToValidate, fieldErrors, flagged, outcomes, error;
164
233
  return _regeneratorRuntime.wrap(function (_context4) {
165
234
  while (1) switch (_context4.prev = _context4.next) {
166
235
  case 0:
167
236
  fieldsToValidate = nameList || Object.keys(formCore.fieldRules);
168
- hasError = false;
169
- fieldErrors = {};
170
- validationPromises = fieldsToValidate.map(function (name) {
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) {
171
248
  return __awaiter(void 0, void 0, void 0, /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
172
- var rules, _yield$validateFieldA, isValid, error;
249
+ var rules, _yield$runRulesAsync2, error, warning;
173
250
  return _regeneratorRuntime.wrap(function (_context3) {
174
251
  while (1) switch (_context3.prev = _context3.next) {
175
252
  case 0:
176
253
  rules = formCore.fieldRules[name];
177
- if (!rules) {
178
- _context3.next = 2;
254
+ if (rules) {
255
+ _context3.next = 1;
179
256
  break;
180
257
  }
181
- _context3.next = 1;
182
- return validateFieldAsync(name, resolveValue(formCore.getFieldsValue(), name), rules);
258
+ return _context3.abrupt("return");
183
259
  case 1:
184
- _yield$validateFieldA = _context3.sent;
185
- isValid = _yield$validateFieldA.isValid;
186
- error = _yield$validateFieldA.error;
187
- if (!isValid && error) {
188
- hasError = true;
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) {
189
272
  fieldErrors[name] = error;
190
273
  }
191
- case 2:
274
+ case 3:
192
275
  case "end":
193
276
  return _context3.stop();
194
277
  }
195
278
  }, _callee3);
196
279
  }));
197
- });
198
- _context4.next = 1;
199
- return Promise.all(validationPromises);
200
- case 1:
201
- if (!hasError) {
202
- _context4.next = 2;
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;
203
288
  break;
204
289
  }
205
290
  error = new Error('Validation failed');
206
291
  error.values = formCore.getFieldsValue();
207
292
  error.errors = fieldErrors;
208
293
  throw error;
209
- case 2:
294
+ case 4:
210
295
  if (!nameList) {
211
- _context4.next = 3;
296
+ _context4.next = 5;
212
297
  break;
213
298
  }
214
299
  return _context4.abrupt("return", nameList.reduce(function (acc, name) {
215
300
  acc[name] = resolveValue(formCore.getFieldsValue(), name);
216
301
  return acc;
217
302
  }, {}));
218
- case 3:
303
+ case 5:
219
304
  return _context4.abrupt("return", formCore.getFieldsValue());
220
- case 4:
305
+ case 6:
221
306
  case "end":
222
307
  return _context4.stop();
223
308
  }
224
- }, _callee4);
309
+ }, _callee4, null, [[1,, 2, 3]]);
225
310
  }));
226
311
  });
227
312
  // ---------------------------------------------------------------------------
@@ -232,14 +317,20 @@ export var useForm = function useForm() {
232
317
  var _fieldOptions$rules = fieldOptions.rules,
233
318
  rules = _fieldOptions$rules === void 0 ? [] : _fieldOptions$rules;
234
319
  var FieldComponent = /*#__PURE__*/memo(function (_a) {
235
- var _b;
236
320
  var children = _a.children,
237
321
  render = _a.render,
238
322
  props = __rest(_a, ["children", "render"]);
239
- var fieldValue = (_b = formCore.values[name]) !== null && _b !== void 0 ? _b : '';
240
- var fieldError = formCore.errors[name];
241
- var fieldTouched = allTouched[name];
242
- var fieldValidating = validating[name];
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];
243
334
  useEffect(function () {
244
335
  var existingRules = formCore.getFieldRules(name);
245
336
  if (!existingRules && rules.length > 0) {
@@ -349,55 +440,55 @@ export var useForm = function useForm() {
349
440
  var handleReset = useEventCallback(function (e) {
350
441
  e === null || e === void 0 ? void 0 : e.preventDefault();
351
442
  formCore.resetFields();
352
- setExtraTouched({});
353
- setValidating({});
354
443
  onReset === null || onReset === void 0 ? void 0 : onReset();
355
444
  });
356
445
  // ---------------------------------------------------------------------------
357
446
  // FormInstance – enhanced API for consumers.
358
447
  //
359
448
  // Every method is wrapped in useMemoizedFn (stable identity, always reads the
360
- // latest render's state) so the instance object itself is IDENTITY-STABLE for
449
+ // latest store state) so the instance object itself is IDENTITY-STABLE for
361
450
  // the lifetime of the form — this is what lets ProForm publish it through the
362
451
  // stable context without re-rendering subscribers on each keystroke.
363
452
  // ---------------------------------------------------------------------------
364
453
  var getFieldError = useMemoizedFn(function (name) {
365
- return formCore.errors[name];
454
+ return store.getState().errors[name];
366
455
  });
367
456
  var getFieldWarning = useMemoizedFn(function (name) {
368
- return formCore.warnings[name];
457
+ return store.getState().warnings[name];
369
458
  });
370
459
  var getFieldsError = useMemoizedFn(function (nameList) {
371
- if (!nameList) return formCore.errors;
460
+ var errors = store.getState().errors;
461
+ if (!nameList) return errors;
372
462
  var result = {};
373
463
  nameList.forEach(function (name) {
374
- if (formCore.errors[name]) {
375
- result[name] = formCore.errors[name];
464
+ if (errors[name]) {
465
+ result[name] = errors[name];
376
466
  }
377
467
  });
378
468
  return result;
379
469
  });
380
470
  var isFieldTouched = useMemoizedFn(function (name) {
381
- return allTouched[name] || false;
471
+ return store.getState().touched[name] || false;
382
472
  });
383
473
  var isFieldsTouched = useMemoizedFn(function (nameList) {
384
474
  var allFieldsTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
475
+ var touched = store.getState().touched;
385
476
  if (!nameList) {
386
- return Object.keys(allTouched).some(function (key) {
387
- return allTouched[key];
477
+ return Object.keys(touched).some(function (key) {
478
+ return touched[key];
388
479
  });
389
480
  }
390
481
  if (allFieldsTouched) {
391
482
  return nameList.every(function (name) {
392
- return allTouched[name];
483
+ return touched[name];
393
484
  });
394
485
  }
395
486
  return nameList.some(function (name) {
396
- return allTouched[name];
487
+ return touched[name];
397
488
  });
398
489
  });
399
490
  var isFieldValidating = useMemoizedFn(function (name) {
400
- return validating[name] || false;
491
+ return store.getState().validating[name] || false;
401
492
  });
402
493
  var setFieldsError = useMemoizedFn(function (fieldsError) {
403
494
  Object.entries(fieldsError).forEach(function (_ref) {
@@ -409,40 +500,37 @@ export var useForm = function useForm() {
409
500
  });
410
501
  var setFieldTouched = useMemoizedFn(function (name) {
411
502
  var isTouched = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
412
- setExtraTouched(function (prev) {
413
- return Object.assign(Object.assign({}, prev), _defineProperty({}, name, isTouched));
503
+ store.setState({
504
+ touched: Object.assign(Object.assign({}, store.getState().touched), _defineProperty({}, name, isTouched))
414
505
  });
415
506
  });
416
507
  var setFieldsTouched = useMemoizedFn(function (fieldsTouch) {
417
- setExtraTouched(function (prev) {
418
- return Object.assign(Object.assign({}, prev), fieldsTouch);
508
+ store.setState({
509
+ touched: Object.assign(Object.assign({}, store.getState().touched), fieldsTouch)
419
510
  });
420
511
  });
421
512
  var resetFormFields = useMemoizedFn(function (fields) {
422
513
  if (!fields) {
423
514
  formCore.resetFields();
424
- setExtraTouched({});
425
- setValidating({});
426
515
  } else {
427
516
  var resetValues = {};
428
517
  fields.forEach(function (field) {
429
- var _a;
430
- resetValues[field] = ((_a = config.initialValues) !== null && _a !== void 0 ? _a : {})[field];
518
+ // Mount-frozen initialValues — consistent with the full resetFields.
519
+ resetValues[field] = formCore.getInitialValues()[field];
431
520
  });
432
521
  formCore.setFieldsValue(resetValues);
433
- setExtraTouched(function (prev) {
434
- var newTouched = Object.assign({}, prev);
435
- fields.forEach(function (field) {
436
- delete newTouched[field];
437
- });
438
- return newTouched;
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];
439
530
  });
440
- setValidating(function (prev) {
441
- var newValidating = Object.assign({}, prev);
442
- fields.forEach(function (field) {
443
- delete newValidating[field];
444
- });
445
- return newValidating;
531
+ store.setState({
532
+ touched: newTouched,
533
+ validating: newValidating
446
534
  });
447
535
  fields.forEach(function (field) {
448
536
  formCore.setFieldError(field, null);
@@ -501,15 +589,26 @@ export var useForm = function useForm() {
501
589
  });
502
590
  }, [formCore.formInstance, formCore.setFieldValue, formCore.setFieldError, formCore.registerField, formCore.unregisterField, validateFieldsAsync, getFieldError, getFieldWarning, getFieldsError, isFieldTouched, isFieldsTouched, isFieldValidating, setFieldsError, setFieldTouched, setFieldsTouched, resetFormFields, submitWithValidation, defineField]);
503
591
  // ---------------------------------------------------------------------------
504
- // 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.
505
594
  // ---------------------------------------------------------------------------
506
595
  var internals = useMemo(function () {
507
596
  return {
508
- values: formCore.values,
509
- errors: formCore.errors,
510
- warnings: formCore.warnings,
511
- touched: allTouched,
512
- validating: validating,
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
+ },
513
612
  fieldRules: formCore.fieldRules,
514
613
  setFieldValue: formCore.setFieldValue,
515
614
  setFieldError: formCore.setFieldError,
@@ -521,11 +620,12 @@ export var useForm = function useForm() {
521
620
  handleSubmit: handleSubmit,
522
621
  handleReset: handleReset
523
622
  };
524
- }, [formCore.values, formCore.errors, formCore.warnings, allTouched, validating, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
623
+ }, [store, formCore.fieldRules, formCore.setFieldValue, formCore.setFieldError, formCore.setFieldWarning, formCore.validateField, validateFieldAsync, formCore.registerField, formCore.unregisterField, handleSubmit, handleReset]);
525
624
  return {
526
625
  formInstance: formInstance,
527
- internals: internals
626
+ internals: internals,
627
+ store: store
528
628
  };
529
629
  };
530
630
  export default useForm;
531
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9jb3JlL2hvb2tzL3VzZUZvcm0uanMiLCJjb21wb25lbnRzL1Byb0Zvcm0vY29yZS9zcmMvY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJfX3Jlc3QiLCJzIiwidCIsInAiLCJPYmplY3QiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpbmRleE9mIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiaSIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidXNlU3RhdGUiLCJ1c2VNZW1vIiwidXNlRWZmZWN0IiwibWVtbyIsIkZyYWdtZW50IiwiUmVhY3QiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlTWVtb2l6ZWRGbiIsInVzZVNhZmVTdGF0ZSIsInVzZUZvcm1Db3JlIiwicmVzb2x2ZVZhbHVlIiwicnVuUnVsZXNBc3luYyIsInVzZUZvcm0iLCJjb25maWciLCJhcmd1bWVudHMiLCJ1bmRlZmluZWQiLCJvbkZpbmlzaCIsIm9uRmluaXNoRmFpbGVkIiwib25SZXNldCIsIl9jb25maWckdmFsaWRhdGVUcmlnZyIsInZhbGlkYXRlVHJpZ2dlciIsImZvcm1Db3JlIiwiX3VzZVNhZmVTdGF0ZSIsIl91c2VTYWZlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkiLCJ2YWxpZGF0aW5nIiwic2V0VmFsaWRhdGluZyIsIl91c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJleHRyYVRvdWNoZWQiLCJzZXRFeHRyYVRvdWNoZWQiLCJhbGxUb3VjaGVkIiwiYXNzaWduIiwidG91Y2hlZCIsInZhbGlkYXRlRmllbGRBc3luYyIsIm5hbWUiLCJydWxlcyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIl95aWVsZCRydW5SdWxlc0FzeW5jIiwiZXJyb3IiLCJ3YXJuaW5nIiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsImFicnVwdCIsImlzVmFsaWQiLCJfZGVmaW5lUHJvcGVydHkiLCJnZXRGaWVsZHNWYWx1ZSIsInNlbnQiLCJzZXRGaWVsZFdhcm5pbmciLCJzZXRGaWVsZEVycm9yIiwiZXJyb3JzIiwibmV3VmFsaWRhdGluZyIsImZpbmlzaCIsInN0b3AiLCJoYW5kbGVGaWVsZEJsdXIiLCJfY2FsbGVlMiIsIl9jb250ZXh0MiIsImdldEZpZWxkUnVsZXMiLCJ2YWxpZGF0ZUZpZWxkc0FzeW5jIiwibmFtZUxpc3QiLCJfY2FsbGVlNCIsImZpZWxkc1RvVmFsaWRhdGUiLCJoYXNFcnJvciIsImZpZWxkRXJyb3JzIiwidmFsaWRhdGlvblByb21pc2VzIiwiX2NvbnRleHQ0Iiwia2V5cyIsImZpZWxkUnVsZXMiLCJtYXAiLCJfY2FsbGVlMyIsIl95aWVsZCR2YWxpZGF0ZUZpZWxkQSIsIl9jb250ZXh0MyIsImFsbCIsIkVycm9yIiwidmFsdWVzIiwicmVkdWNlIiwiYWNjIiwiZGVmaW5lRmllbGQiLCJmaWVsZE9wdGlvbnMiLCJfZmllbGRPcHRpb25zJHJ1bGVzIiwiRmllbGRDb21wb25lbnQiLCJfYSIsIl9iIiwiY2hpbGRyZW4iLCJyZW5kZXIiLCJwcm9wcyIsImZpZWxkVmFsdWUiLCJmaWVsZEVycm9yIiwiZmllbGRUb3VjaGVkIiwiZmllbGRWYWxpZGF0aW5nIiwiZXhpc3RpbmdSdWxlcyIsInJlZ2lzdGVyRmllbGQiLCJ1bnJlZ2lzdGVyRmllbGQiLCJoYW5kbGVGaWVsZENoYW5nZSIsInNldEZpZWxkVmFsdWUiLCJ2YWxpZGF0ZUZpZWxkIiwiaGFuZGxlQmx1ciIsImZpZWxkUHJvcHMiLCJvbkNoYW5nZSIsIm9uQmx1ciIsImhhbmRsZU1lcmdlQ2hhbmdlIiwiX3R5cGVvZiIsInRhcmdldCIsImlzVmFsaWRFbGVtZW50IiwiaGFuZGxlTWVyZ2VCbHVyIiwibWVyZ2VkUHJvcHMiLCJjbG9uZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJjcmVhdGVFbGVtZW50IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiY2hpbGQiLCJpbmRleCIsImtleSIsImRpc3BsYXlOYW1lIiwiaGFuZGxlU3VibWl0IiwiX2NhbGxlZTUiLCJ2YWxpZGF0ZWRWYWx1ZXMiLCJ0eXBlZCIsIl90IiwiX2NvbnRleHQ1IiwicHJldmVudERlZmF1bHQiLCJoYW5kbGVSZXNldCIsInJlc2V0RmllbGRzIiwiZ2V0RmllbGRFcnJvciIsImdldEZpZWxkV2FybmluZyIsIndhcm5pbmdzIiwiZ2V0RmllbGRzRXJyb3IiLCJmb3JFYWNoIiwiaXNGaWVsZFRvdWNoZWQiLCJpc0ZpZWxkc1RvdWNoZWQiLCJhbGxGaWVsZHNUb3VjaGVkIiwic29tZSIsImV2ZXJ5IiwiaXNGaWVsZFZhbGlkYXRpbmciLCJzZXRGaWVsZHNFcnJvciIsImZpZWxkc0Vycm9yIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsInNldEZpZWxkVG91Y2hlZCIsImlzVG91Y2hlZCIsInNldEZpZWxkc1RvdWNoZWQiLCJmaWVsZHNUb3VjaCIsInJlc2V0Rm9ybUZpZWxkcyIsImZpZWxkcyIsInJlc2V0VmFsdWVzIiwiZmllbGQiLCJpbml0aWFsVmFsdWVzIiwic2V0RmllbGRzVmFsdWUiLCJuZXdUb3VjaGVkIiwic3VibWl0V2l0aFZhbGlkYXRpb24iLCJjYWxsYmFjayIsIl9jYWxsZWU2IiwiX3QyIiwiX2NvbnRleHQ2IiwiZm9ybUluc3RhbmNlIiwidmFsaWRhdGVGaWVsZHMiLCJzdWJtaXQiLCJpbnRlcm5hbHMiXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsSUFBSUEsU0FBUyxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLFNBQVMsSUFBSyxVQUFVQyxPQUFPLEVBQUVDLFVBQVUsRUFBRUMsQ0FBQyxFQUFFQyxTQUFTLEVBQUU7RUFDckYsU0FBU0MsS0FBS0EsQ0FBQ0MsS0FBSyxFQUFFO0lBQUUsT0FBT0EsS0FBSyxZQUFZSCxDQUFDLEdBQUdHLEtBQUssR0FBRyxJQUFJSCxDQUFDLENBQUMsVUFBVUksT0FBTyxFQUFFO01BQUVBLE9BQU8sQ0FBQ0QsS0FBSyxDQUFDO0lBQUUsQ0FBQyxDQUFDO0VBQUU7RUFDM0csT0FBTyxLQUFLSCxDQUFDLEtBQUtBLENBQUMsR0FBR0ssT0FBTyxDQUFDLEVBQUUsVUFBVUQsT0FBTyxFQUFFRSxNQUFNLEVBQUU7SUFDdkQsU0FBU0MsU0FBU0EsQ0FBQ0osS0FBSyxFQUFFO01BQUUsSUFBSTtRQUFFSyxJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsSUFBSSxDQUFDTixLQUFLLENBQUMsQ0FBQztNQUFFLENBQUMsQ0FBQyxPQUFPTyxDQUFDLEVBQUU7UUFBRUosTUFBTSxDQUFDSSxDQUFDLENBQUM7TUFBRTtJQUFFO0lBQzFGLFNBQVNDLFFBQVFBLENBQUNSLEtBQUssRUFBRTtNQUFFLElBQUk7UUFBRUssSUFBSSxDQUFDUCxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUNFLEtBQUssQ0FBQyxDQUFDO01BQUUsQ0FBQyxDQUFDLE9BQU9PLENBQUMsRUFBRTtRQUFFSixNQUFNLENBQUNJLENBQUMsQ0FBQztNQUFFO0lBQUU7SUFDN0YsU0FBU0YsSUFBSUEsQ0FBQ0ksTUFBTSxFQUFFO01BQUVBLE1BQU0sQ0FBQ0MsSUFBSSxHQUFHVCxPQUFPLENBQUNRLE1BQU0sQ0FBQ1QsS0FBSyxDQUFDLEdBQUdELEtBQUssQ0FBQ1UsTUFBTSxDQUFDVCxLQUFLLENBQUMsQ0FBQ1csSUFBSSxDQUFDUCxTQUFTLEVBQUVJLFFBQVEsQ0FBQztJQUFFO0lBQzdHSCxJQUFJLENBQUMsQ0FBQ1AsU0FBUyxHQUFHQSxTQUFTLENBQUNjLEtBQUssQ0FBQ2pCLE9BQU8sRUFBRUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxFQUFFVSxJQUFJLENBQUMsQ0FBQyxDQUFDO0VBQ3pFLENBQUMsQ0FBQztBQUNOLENBQUM7QUFDRCxJQUFJTyxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRVAsQ0FBQyxFQUFFO0VBQ2xELElBQUlRLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUYsQ0FBQyxFQUFFLElBQUlHLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ04sQ0FBQyxFQUFFRSxDQUFDLENBQUMsSUFBSVQsQ0FBQyxDQUFDYyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdGLENBQUMsQ0FBQ0UsQ0FBQyxDQUFDO0VBQ2YsSUFBSUYsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPRyxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdBQUdDLE1BQU0sQ0FBQ0sscUJBQXFCLENBQUNSLENBQUMsQ0FBQyxFQUFFUyxDQUFDLEdBQUdQLENBQUMsQ0FBQ1EsTUFBTSxFQUFFRCxDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJaEIsQ0FBQyxDQUFDYyxPQUFPLENBQUNMLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlOLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDTyxvQkFBb0IsQ0FBQ0wsSUFBSSxDQUFDTixDQUFDLEVBQUVFLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsRUFDMUVSLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDTyxDQUFDLENBQUMsQ0FBQyxHQUFHVCxDQUFDLENBQUNFLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUM7RUFDekI7RUFDSixPQUFPUixDQUFDO0FBQ1osQ0FBQztBQ25CRCxTQUFTVyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsU0FBUyxFQUFFQyxJQUFJLEVBQUVDLFFBQVEsUUFBUSxPQUFPO0FBRXBFLE9BQU9DLEtBQUssTUFBTSxPQUFPO0FBQ3pCLE9BQU9DLGdCQUFnQixNQUFNLGdDQUFnQztBQUM3RCxPQUFPQyxhQUFhLE1BQU0sNkJBQTZCO0FBQ3ZELE9BQU9DLFlBQVksTUFBTSw0QkFBNEI7QUFDckQsU0FBU0MsV0FBVyxRQUFRLGVBQWU7QUFDM0MsU0FBU0MsWUFBWSxRQUFRLGNBQWM7QUFDM0MsU0FBU0MsYUFBYSxRQUFRLGFBQWE7QUFZM0M7QUFDQTtBQUNBO0FBQ0EsT0FBTyxJQUFNQyxPQUFPLEdBQUcsU0FBVkEsT0FBT0EsQ0FBQSxFQUFpRDtFQUFBLElBQTdDQyxNQUFBLEdBQUFDLFNBQUEsQ0FBQWhCLE1BQUEsUUFBQWdCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQXdCLENBQUEsQ0FBRTtFQUNoRCxJQUNFRSxRQUFRLEdBSU5ILE1BQU0sQ0FKUkcsUUFBUTtJQUNSQyxjQUFjLEdBR1pKLE1BQU0sQ0FIUkksY0FBYztJQUNkQyxPQUFPLEdBRUxMLE1BQU0sQ0FGUkssT0FBTztJQUFBQyxxQkFBQSxHQUVMTixNQUFNLENBRFJPLGVBQWU7SUFBZkEsZUFBZSxHQUFBRCxxQkFBQSxjQUFHLFVBQVUsR0FBQUEscUJBQUE7RUFHOUIsSUFBTUUsUUFBUSxHQUFHWixXQUFXLENBQUNJLE1BQU0sQ0FBQztFQUVwQyxJQUFBUyxhQUFBLEdBQW9DZCxZQUFZLENBQTBCLENBQUEsQ0FBRSxDQUFDO0lBQUFlLGNBQUEsR0FBQUMsY0FBQSxDQUFBRixhQUFBO0lBQXRFRyxVQUFVLEdBQUFGLGNBQUE7SUFBRUcsYUFBYSxHQUFBSCxjQUFBO0VBQ2hDLElBQUFJLFNBQUEsR0FBd0MzQixRQUFRLENBQTBCLENBQUEsQ0FBRSxDQUFDO0lBQUE0QixVQUFBLEdBQUFKLGNBQUEsQ0FBQUcsU0FBQTtJQUF0RUUsWUFBWSxHQUFBRCxVQUFBO0lBQUVFLGVBQWUsR0FBQUYsVUFBQTtFQUVwQyxJQUFNRyxVQUFVLEdBQUc5QixPQUFPLENBQ3hCO0lBQUEsT0FBTVYsTUFBQSxDQUFBeUMsTUFBQSxDQUFBekMsTUFBQSxDQUFBeUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFNWCxRQUFRLENBQUNZLE9BQU8sQ0FBQSxFQUFLSixZQUFZLENBQUE7RUFBQSxDQUFHLEVBQ2hELENBQUNSLFFBQVEsQ0FBQ1ksT0FBTyxFQUFFSixZQUFZLENBQUMsQ0FDakM7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNSyxrQkFBa0IsR0FBRzNCLGFBQWEsQ0FDdEMsVUFDRTRCLElBQVksRUFDWjdELEtBQWMsRUFDZDhELEtBQWE7SUFBQSxPQUMwQ3BFLFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQXFFLG1CQUFBLENBQUFDLElBQUEsQ0FBQSxTQUFBQyxRQUFBO01BQUEsSUFBQUMsb0JBQUEsRUFBQUMsS0FBQSxFQUFBQyxPQUFBO01BQUEsT0FBQUwsbUJBQUEsQ0FBQU0sSUFBQSxXQUFBQyxRQUFBO1FBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFoRSxJQUFBO1VBQUE7WUFBQSxNQUNuRCxDQUFDd0QsS0FBSyxJQUFJQSxLQUFLLENBQUN0QyxNQUFNLEtBQUssQ0FBQztjQUFBOEMsUUFBQSxDQUFBaEUsSUFBQTtjQUFBO1lBQUE7WUFBQSxPQUFBZ0UsUUFBQSxDQUFBRSxNQUFBLFdBQVM7Y0FBRUMsT0FBTyxFQUFFLElBQUk7Y0FBRU4sS0FBSyxFQUFFO1lBQUksQ0FBRTtVQUFBO1lBRXZFZixhQUFhLENBQUMsVUFBQ21CLElBQUk7Y0FBQSxPQUFLdEQsTUFBQSxDQUFBeUMsTUFBQSxDQUFBekMsTUFBQSxDQUFBeUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFNYSxJQUFJLENBQUEsRUFBQUcsZUFBQSxLQUFHYixJQUFJLEVBQUcsSUFBSSxDQUFBLENBQUE7WUFBQSxDQUFHLENBQUM7WUFBQ1MsUUFBQSxDQUFBQyxJQUFBO1lBQUFELFFBQUEsQ0FBQWhFLElBQUE7WUFHeEIsT0FBTStCLGFBQWEsQ0FBQ3dCLElBQUksRUFBRTdELEtBQUssRUFBRStDLFFBQVEsQ0FBQzRCLGNBQWMsQ0FBQSxDQUFFLEVBQUViLEtBQUssQ0FBQztVQUFBO1lBQUFJLG9CQUFBLEdBQUFJLFFBQUEsQ0FBQU0sSUFBQTtZQUFyRlQsS0FBSyxHQUFBRCxvQkFBQSxDQUFMQyxLQUFLO1lBQUVDLE9BQU8sR0FBQUYsb0JBQUEsQ0FBUEUsT0FBTztZQUN0QnJCLFFBQVEsQ0FBQzhCLGVBQWUsQ0FBQ2hCLElBQUksRUFBRU8sT0FBTyxDQUFDO1lBQUMsTUFDcENELEtBQUssS0FBSyxJQUFJO2NBQUFHLFFBQUEsQ0FBQWhFLElBQUE7Y0FBQTtZQUFBO1lBQ2hCeUMsUUFBUSxDQUFDK0IsYUFBYSxDQUFDakIsSUFBSSxFQUFFTSxLQUFLLENBQUM7WUFBQyxPQUFBRyxRQUFBLENBQUFFLE1BQUEsV0FDN0I7Y0FBRUMsT0FBTyxFQUFFLEtBQUs7Y0FBRU4sS0FBSyxFQUFMQTtZQUFLLENBQUU7VUFBQTtZQUdsQyxJQUFJcEIsUUFBUSxDQUFDZ0MsTUFBTSxDQUFDbEIsSUFBSSxDQUFDLEVBQUU7Y0FDekJkLFFBQVEsQ0FBQytCLGFBQWEsQ0FBQ2pCLElBQUksRUFBRSxJQUFJLENBQUM7WUFDcEM7WUFBQyxPQUFBUyxRQUFBLENBQUFFLE1BQUEsV0FDTTtjQUFFQyxPQUFPLEVBQUUsSUFBSTtjQUFFTixLQUFLLEVBQUU7WUFBSSxDQUFFO1VBQUE7WUFBQUcsUUFBQSxDQUFBQyxJQUFBO1lBRXJDbkIsYUFBYSxDQUFDLFVBQUNtQixJQUFJLEVBQUk7Y0FDckIsSUFBTVMsYUFBYSxHQUFBL0QsTUFBQSxDQUFBeUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFRYSxJQUFJLENBQUU7Y0FDakMsT0FBT1MsYUFBYSxDQUFDbkIsSUFBSSxDQUFDO2NBQzFCLE9BQU9tQixhQUFhO1lBQ3RCLENBQUMsQ0FBQztZQUFDLE9BQUFWLFFBQUEsQ0FBQVcsTUFBQTtVQUFBO1VBQUE7WUFBQSxPQUFBWCxRQUFBLENBQUFZLElBQUE7UUFBQTtNQUFBLEdBQUFqQixPQUFBO0lBQUEsQ0FFTixFQUFBO0VBQUEsRUFDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU1rQixlQUFlLEdBQUduRCxnQkFBZ0IsQ0FBQyxVQUFPNkIsSUFBWTtJQUFBLE9BQUluRSxTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxtQkFBQSxDQUFBQyxJQUFBLENBQUEsU0FBQW9CLFNBQUE7TUFBQSxJQUFBdEIsS0FBQTtNQUFBLE9BQUFDLG1CQUFBLENBQUFNLElBQUEsV0FBQWdCLFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQS9FLElBQUE7VUFBQTtZQUM5RGtELGVBQWUsQ0FBQyxVQUFDZSxJQUFJO2NBQUEsT0FBS3RELE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQXpDLE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFBTWEsSUFBSSxDQUFBLEVBQUFHLGVBQUEsS0FBR2IsSUFBSSxFQUFHLElBQUksQ0FBQSxDQUFBO1lBQUEsQ0FBRyxDQUFDO1lBRWhEQyxLQUFLLEdBQUdmLFFBQVEsQ0FBQ3VDLGFBQWEsQ0FBQ3pCLElBQUksQ0FBQztZQUFBLE1BQ3RDQyxLQUFLLElBQUloQixlQUFlLEtBQUssUUFBUTtjQUFBdUMsU0FBQSxDQUFBL0UsSUFBQTtjQUFBO1lBQUE7WUFBQStFLFNBQUEsQ0FBQS9FLElBQUE7WUFDdkMsT0FBTXNELGtCQUFrQixDQUFDQyxJQUFJLEVBQUV6QixZQUFZLENBQUNXLFFBQVEsQ0FBQzRCLGNBQWMsQ0FBQSxDQUFFLEVBQUVkLElBQUksQ0FBQyxFQUFFQyxLQUFLLENBQUM7VUFBQTtVQUFBO1lBQUEsT0FBQXVCLFNBQUEsQ0FBQUgsSUFBQTtRQUFBO01BQUEsR0FBQUUsUUFBQTtJQUFBLENBRXZGLEVBQUE7RUFBQSxFQUFDO0VBRUY7RUFDQTtFQUNBO0VBQ0EsSUFBTUcsbUJBQW1CLEdBQUd0RCxhQUFhLENBQ3ZDLFVBQU91RCxRQUFtQjtJQUFBLE9BQXNDOUYsU0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxlQUFBcUUsbUJBQUEsQ0FBQUMsSUFBQSxDQUFBLFNBQUF5QixTQUFBO01BQUEsSUFBQUMsZ0JBQUEsRUFBQUMsUUFBQSxFQUFBQyxXQUFBLEVBQUFDLGtCQUFBLEVBQUExQixLQUFBO01BQUEsT0FBQUosbUJBQUEsQ0FBQU0sSUFBQSxXQUFBeUIsU0FBQTtRQUFBLGtCQUFBQSxTQUFBLENBQUF2QixJQUFBLEdBQUF1QixTQUFBLENBQUF4RixJQUFBO1VBQUE7WUFDeERvRixnQkFBZ0IsR0FBR0YsUUFBUSxJQUFJdkUsTUFBTSxDQUFDOEUsSUFBSSxDQUFDaEQsUUFBUSxDQUFDaUQsVUFBVSxDQUFDO1lBQ2pFTCxRQUFRLEdBQUcsS0FBSztZQUNkQyxXQUFXLEdBQTJCLENBQUEsQ0FBRTtZQUV4Q0Msa0JBQWtCLEdBQUdILGdCQUFnQixDQUFDTyxHQUFHLENBQUMsVUFBT3BDLElBQUk7Y0FBQSxPQUFJbkUsU0FBQSxDQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxFQUFBLEtBQUEsQ0FBQSxlQUFBcUUsbUJBQUEsQ0FBQUMsSUFBQSxDQUFBLFNBQUFrQyxTQUFBO2dCQUFBLElBQUFwQyxLQUFBLEVBQUFxQyxxQkFBQSxFQUFBMUIsT0FBQSxFQUFBTixLQUFBO2dCQUFBLE9BQUFKLG1CQUFBLENBQUFNLElBQUEsV0FBQStCLFNBQUE7a0JBQUEsa0JBQUFBLFNBQUEsQ0FBQTdCLElBQUEsR0FBQTZCLFNBQUEsQ0FBQTlGLElBQUE7b0JBQUE7c0JBQ3ZEd0QsS0FBSyxHQUFHZixRQUFRLENBQUNpRCxVQUFVLENBQUNuQyxJQUFJLENBQUM7c0JBQUEsS0FDbkNDLEtBQUs7d0JBQUFzQyxTQUFBLENBQUE5RixJQUFBO3dCQUFBO3NCQUFBO3NCQUFBOEYsU0FBQSxDQUFBOUYsSUFBQTtzQkFDb0IsT0FBTXNELGtCQUFrQixDQUNqREMsSUFBSSxFQUNKekIsWUFBWSxDQUFDVyxRQUFRLENBQUM0QixjQUFjLENBQUEsQ0FBRSxFQUFFZCxJQUFJLENBQUMsRUFDN0NDLEtBQUssQ0FDTjtvQkFBQTtzQkFBQXFDLHFCQUFBLEdBQUFDLFNBQUEsQ0FBQXhCLElBQUE7c0JBSk9ILE9BQU8sR0FBQTBCLHFCQUFBLENBQVAxQixPQUFPO3NCQUFFTixLQUFLLEdBQUFnQyxxQkFBQSxDQUFMaEMsS0FBSztzQkFLdEIsSUFBSSxDQUFDTSxPQUFPLElBQUlOLEtBQUssRUFBRTt3QkFDckJ3QixRQUFRLEdBQUcsSUFBSTt3QkFDZkMsV0FBVyxDQUFDL0IsSUFBSSxDQUFDLEdBQUdNLEtBQUs7c0JBQzNCO29CQUFDO29CQUFBO3NCQUFBLE9BQUFpQyxTQUFBLENBQUFsQixJQUFBO2tCQUFBO2dCQUFBLEdBQUFnQixRQUFBO2NBQUEsQ0FFSixFQUFBO1lBQUEsRUFBQztZQUFBSixTQUFBLENBQUF4RixJQUFBO1lBRUYsT0FBTUosT0FBTyxDQUFDbUcsR0FBRyxDQUFDUixrQkFBa0IsQ0FBQztVQUFBO1lBQUEsS0FFakNGLFFBQVE7Y0FBQUcsU0FBQSxDQUFBeEYsSUFBQTtjQUFBO1lBQUE7WUFDSjZELEtBQUssR0FBRyxJQUFJbUMsS0FBSyxDQUFDLG1CQUFtQixDQUcxQztZQUNEbkMsS0FBSyxDQUFDb0MsTUFBTSxHQUFHeEQsUUFBUSxDQUFDNEIsY0FBYyxDQUFBLENBQUU7WUFDeENSLEtBQUssQ0FBQ1ksTUFBTSxHQUFHYSxXQUFXO1lBQUMsTUFDckJ6QixLQUFLO1VBQUE7WUFBQSxLQUdUcUIsUUFBUTtjQUFBTSxTQUFBLENBQUF4RixJQUFBO2NBQUE7WUFBQTtZQUFBLE9BQUF3RixTQUFBLENBQUF0QixNQUFBLFdBQ0hnQixRQUFRLENBQUNnQixNQUFNLENBQTBCLFVBQUNDLEdBQUcsRUFBRTVDLElBQUksRUFBSTtjQUM1RDRDLEdBQUcsQ0FBQzVDLElBQUksQ0FBQyxHQUFHekIsWUFBWSxDQUFDVyxRQUFRLENBQUM0QixjQUFjLENBQUEsQ0FBRSxFQUFFZCxJQUFJLENBQUM7Y0FDekQsT0FBTzRDLEdBQUc7WUFDWixDQUFDLEVBQUUsQ0FBQSxDQUFFLENBQUM7VUFBQTtZQUFBLE9BQUFYLFNBQUEsQ0FBQXRCLE1BQUEsV0FHRHpCLFFBQVEsQ0FBQzRCLGNBQWMsQ0FBQSxDQUFFO1VBQUE7VUFBQTtZQUFBLE9BQUFtQixTQUFBLENBQUFaLElBQUE7UUFBQTtNQUFBLEdBQUFPLFFBQUE7SUFBQSxDQUNqQyxFQUFBO0VBQUEsRUFDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU1pQixXQUFXLEdBQUd6RSxhQUFhLENBQy9CLFVBQUM0QixJQUFZLEVBQW9FO0lBQUEsSUFBbEU4QyxZQUFBLEdBQUFuRSxTQUFBLENBQUFoQixNQUFBLFFBQUFnQixTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUE2QixDQUFBLENBQUU7SUFDNUMsSUFBQW9FLG1CQUFBLEdBQXVCRCxZQUFZLENBQTNCN0MsS0FBSztNQUFMQSxLQUFLLEdBQUE4QyxtQkFBQSxjQUFHLEVBQUUsR0FBQUEsbUJBQUE7SUFFbEIsSUFBTUMsY0FBYyxnQkFBa0NoRixJQUFJLENBQ3hELFVBQUNpRixFQUE4QixFQUFJO01EL0IvQixJQUFJQyxFQUFFO01BQ04sSUM4QkRDLFFBQVEsR0FBUUYsRUFBWSxDQUE1QkUsUUFBUTtRQUFFQyxNQUFNLEdBQUFILEVBQVksQ0FBbEJHLE1BQU07UUFBS0MsS0FBSyxHQUFBckcsTUFBQSxDQUFBaUcsRUFBQSxFQUE1QixDQUFBLFVBQUEsRUFBQSxRQUFBLENBQThCLENBQUY7TUFDM0IsSUFBTUssVUFBVSxHQUFHLENBQUFKLEVBQUEsR0FBQWhFLFFBQVEsQ0FBQ3dELE1BQU0sQ0FBQzFDLElBQUksQ0FBQyxNQUFBLElBQUEsSUFBQWtELEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLEVBQUU7TUFDOUMsSUFBTUssVUFBVSxHQUFHckUsUUFBUSxDQUFDZ0MsTUFBTSxDQUFDbEIsSUFBSSxDQUFDO01BQ3hDLElBQU13RCxZQUFZLEdBQUc1RCxVQUFVLENBQUNJLElBQUksQ0FBQztNQUNyQyxJQUFNeUQsZUFBZSxHQUFHbkUsVUFBVSxDQUFDVSxJQUFJLENBQUM7TUFFeENqQyxTQUFTLENBQUMsWUFBSztRQUNiLElBQU0yRixhQUFhLEdBQUd4RSxRQUFRLENBQUN1QyxhQUFhLENBQUN6QixJQUFJLENBQUM7UUFDbEQsSUFBSSxDQUFDMEQsYUFBYSxJQUFJekQsS0FBSyxDQUFDdEMsTUFBTSxHQUFHLENBQUMsRUFBRTtVQUN0Q3VCLFFBQVEsQ0FBQ3lFLGFBQWEsQ0FBQzNELElBQUksRUFBRUMsS0FBSyxDQUFDO1FBQ3JDO1FBQ0EsT0FBTyxZQUFLO1VBQ1ZmLFFBQVEsQ0FBQzBFLGVBQWUsQ0FBQzVELElBQUksQ0FBQztRQUNoQyxDQUFDO01BQ0gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7TUFFUixJQUFNNkQsaUJBQWlCLEdBQUcxRixnQkFBZ0IsQ0FBQyxVQUFDaEMsS0FBYyxFQUFJO1FBQzVEK0MsUUFBUSxDQUFDNEUsYUFBYSxDQUFDOUQsSUFBSSxFQUFFN0QsS0FBSyxDQUFDO1FBQ25DLElBQUk4QyxlQUFlLEtBQUssVUFBVSxFQUFFO1VBQ2xDQyxRQUFRLENBQUM2RSxhQUFhLENBQUMvRCxJQUFJLEVBQUVDLEtBQUssRUFBRTlELEtBQUssQ0FBQztRQUM1QztNQUNGLENBQUMsQ0FBQztNQUVGLElBQU02SCxVQUFVLEdBQUc3RixnQkFBZ0IsQ0FBQyxZQUFLO1FBQ3ZDbUQsZUFBZSxDQUFDdEIsSUFBSSxDQUFDO01BQ3ZCLENBQUMsQ0FBQztNQUVGLElBQU1pRSxVQUFVLEdBQUE3RyxNQUFBLENBQUF5QyxNQUFBLENBQUE7UUFDZEcsSUFBSSxFQUFKQSxJQUFJO1FBQ0o3RCxLQUFLLEVBQUVtSCxVQUFVO1FBQ2pCaEQsS0FBSyxFQUFFaUQsVUFBVTtRQUNqQnpELE9BQU8sRUFBRTBELFlBQVk7UUFDckJsRSxVQUFVLEVBQUVtRSxlQUFlO1FBQzNCUyxRQUFRLEVBQUVMLGlCQUFpQjtRQUMzQk0sTUFBTSxFQUFFSDtNQUFVLENBQUEsRUFDZlgsS0FBSyxDQUNUO01BRUQsSUFBTWUsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFpQkEsQ0FBSTFILENBQVUsRUFBSTtRRDNDbkMsSUFBSXVHLEVBQUU7UUM0Q1YsSUFBTTlHLEtBQUssR0FDVE8sQ0FBQyxJQUFJMkgsT0FBQSxDQUFPM0gsQ0FBQyxNQUFLLFFBQVEsSUFBSSxRQUFRLElBQUlBLENBQUMsR0FDdENBLENBQXlDLENBQUM0SCxNQUFNLENBQUNuSSxLQUFLLEdBQ3ZETyxDQUFDO1FBQ1BtSCxpQkFBaUIsQ0FBQzFILEtBQUssQ0FBQztRQUN4QixJQUNFLGFBQUErQixLQUFLLENBQUNxRyxjQUFjLENBQUNwQixRQUFRLENBQUMsS0FDOUIsQ0FBQUYsRUFBQSxHQUFDRSxRQUFRLENBQUNFLEtBQWlDLE1BQUEsSUFBQSxJQUFBSixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRWlCLFFBQVEsQ0FBQSxFQUNyRDtVQUNFZixRQUFRLENBQUNFLEtBQWlDLENBQUNhLFFBQWlDLENBQUMvSCxLQUFLLENBQUM7UUFDdkY7TUFDRixDQUFDO01BRUQsSUFBTXFJLGVBQWUsR0FBRyxTQUFsQkEsZUFBZUEsQ0FBQSxFQUFRO1FEOUN2QixJQUFJdkIsRUFBRTtRQytDVmUsVUFBVSxDQUFBLENBQUU7UUFDWixJQUNFLGFBQUE5RixLQUFLLENBQUNxRyxjQUFjLENBQUNwQixRQUFRLENBQUMsS0FDOUIsQ0FBQUYsRUFBQSxHQUFDRSxRQUFRLENBQUNFLEtBQWlDLE1BQUEsSUFBQSxJQUFBSixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRWtCLE1BQU0sQ0FBQSxFQUNuRDtVQUNFaEIsUUFBUSxDQUFDRSxLQUFpQyxDQUFDYyxNQUFxQixDQUFBLENBQUU7UUFDdEU7TUFDRixDQUFDO01BRUQsSUFBSWYsTUFBTSxJQUFJLE9BQU9BLE1BQU0sS0FBSyxVQUFVLEVBQUU7UUFDMUMsT0FBT0EsTUFBTSxDQUFDYSxVQUFVLENBQUM7TUFDM0I7TUFFQSxJQUFJLE9BQU9kLFFBQVEsS0FBSyxVQUFVLEVBQUU7UUFDbEMsT0FBUUEsUUFBbUQsQ0FBQ2MsVUFBVSxDQUF1QjtNQUMvRjtNQUVBLGlCQUFJL0YsS0FBSyxDQUFDcUcsY0FBYyxDQUFDcEIsUUFBUSxDQUFDLEVBQUU7UUFDbEMsSUFBTXNCLFdBQVcsR0FBQXJILE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQXpDLE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDWm9FLFVBQVUsQ0FBQSxFQUFBO1VBQ2JDLFFBQVEsRUFBRUUsaUJBQWlCO1VBQzNCRCxNQUFNLEVBQUVLO1FBQWUsQ0FBQSxDQUN4QjtRQUNELG9CQUFPdEcsS0FBSyxDQUFDd0csWUFBWSxDQUFDdkIsUUFBOEIsRUFBRXNCLFdBQVcsQ0FBQztNQUN4RTtNQUVBLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDekIsUUFBUSxDQUFDLEVBQUU7UUFDM0Isb0JBQU9qRixLQUFLLENBQUMyRyxhQUFhLENBQUE5SCxLQUFBLENBQW5CbUIsS0FBSyxHQUNWRCxRQUFRLEVBQ1IsSUFBSSxFQUFBNkcsTUFBQSxDQUFBQyxrQkFBQSxDQUNENUIsUUFBUSxDQUFDZixHQUFHLENBQUMsVUFBQzRDLEtBQUssRUFBRUMsS0FBSyxFQUFJO1VBQy9CLGlCQUFJL0csS0FBSyxDQUFDcUcsY0FBYyxDQUFDUyxLQUFLLENBQUMsRUFBRTtZQUMvQixJQUFNUCxZQUFXLEdBQUFySCxNQUFBLENBQUF5QyxNQUFBLENBQUF6QyxNQUFBLENBQUF5QyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ1pvRSxVQUFVLENBQUEsRUFBQTtjQUNiaUIsR0FBRyxFQUFFRixLQUFLLENBQUNFLEdBQUcsSUFBSUQsS0FBSztjQUN2QmYsUUFBUSxFQUFFRSxpQkFBaUI7Y0FDM0JELE1BQU0sRUFBRUs7WUFBZSxDQUFBLENBQ3hCO1lBQ0Qsb0JBQU90RyxLQUFLLENBQUN3RyxZQUFZLENBQUNNLEtBQTJCLEVBQUVQLFlBQVcsQ0FBQztVQUNyRTtVQUNBLE9BQU9PLEtBQUs7UUFDZCxDQUFDLENBQUMsR0FDSDtNQUNIO01BRUEsT0FBTyxJQUFJO0lBQ2IsQ0FBQyxDQUNGO0lBRURoQyxjQUFjLENBQUNtQyxXQUFXLFlBQUFMLE1BQUEsQ0FBWTlFLElBQUksTUFBRztJQUU3QyxPQUFPZ0QsY0FBYztFQUN2QixDQUFDLENBQ0Y7RUFFRDtFQUNBO0VBQ0E7RUFDQSxJQUFNb0MsWUFBWSxHQUFHakgsZ0JBQWdCLENBQUMsVUFBT3pCLENBQWE7SUFBQSxPQUFJYixTQUFBLENBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLEVBQUEsS0FBQSxDQUFBLGVBQUFxRSxtQkFBQSxDQUFBQyxJQUFBLENBQUEsU0FBQWtGLFNBQUE7TUFBQSxJQUFBQyxlQUFBLEVBQUFDLEtBQUEsRUFBQUMsRUFBQTtNQUFBLE9BQUF0RixtQkFBQSxDQUFBTSxJQUFBLFdBQUFpRixTQUFBO1FBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQWhKLElBQUE7VUFBQTtZQUM1REMsQ0FBQyxLQUFBLElBQUEsSUFBREEsQ0FBQyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFEQSxDQUFDLENBQUVnSixjQUFjLENBQUEsQ0FBRTtZQUFDRCxTQUFBLENBQUEvRSxJQUFBO1lBQUErRSxTQUFBLENBQUFoSixJQUFBO1lBRU0sT0FBTWlGLG1CQUFtQixDQUFBLENBQUU7VUFBQTtZQUE3QzRELGVBQWUsR0FBQUcsU0FBQSxDQUFBMUUsSUFBQTtZQUNyQmxDLFFBQVEsS0FBQSxJQUFBLElBQVJBLFFBQVEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUkEsUUFBUSxDQUFHeUcsZUFBZSxDQUFDO1lBQUNHLFNBQUEsQ0FBQWhKLElBQUE7WUFBQTtVQUFBO1lBQUFnSixTQUFBLENBQUEvRSxJQUFBO1lBQUE4RSxFQUFBLEdBQUFDLFNBQUE7WUFFdEJGLEtBQUssR0FBQUMsRUFBQTtZQUlYMUcsY0FBYyxLQUFBLElBQUEsSUFBZEEsY0FBYyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFkQSxjQUFjLENBQUc7Y0FBRTRELE1BQU0sRUFBRTZDLEtBQUssQ0FBQzdDLE1BQU07Y0FBRXhCLE1BQU0sRUFBRXFFLEtBQUssQ0FBQ3JFO1lBQU0sQ0FBRSxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUF1RSxTQUFBLENBQUFwRSxJQUFBO1FBQUE7TUFBQSxHQUFBZ0UsUUFBQTtJQUFBLENBRXBFLEVBQUE7RUFBQSxFQUFDO0VBRUYsSUFBTU0sV0FBVyxHQUFHeEgsZ0JBQWdCLENBQUMsVUFBQ3pCLENBQWEsRUFBSTtJQUNyREEsQ0FBQyxLQUFBLElBQUEsSUFBREEsQ0FBQyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFEQSxDQUFDLENBQUVnSixjQUFjLENBQUEsQ0FBRTtJQUNuQnhHLFFBQVEsQ0FBQzBHLFdBQVcsQ0FBQSxDQUFFO0lBQ3RCakcsZUFBZSxDQUFDLENBQUEsQ0FBRSxDQUFDO0lBQ25CSixhQUFhLENBQUMsQ0FBQSxDQUFFLENBQUM7SUFDakJSLE9BQU8sS0FBQSxJQUFBLElBQVBBLE9BQU8sS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUEEsT0FBTyxDQUFBLENBQUk7RUFDYixDQUFDLENBQUM7RUFFRjtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsSUFBTThHLGFBQWEsR0FBR3pILGFBQWEsQ0FBQyxVQUFDNEIsSUFBWTtJQUFBLE9BQUtkLFFBQVEsQ0FBQ2dDLE1BQU0sQ0FBQ2xCLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDNUUsSUFBTThGLGVBQWUsR0FBRzFILGFBQWEsQ0FBQyxVQUFDNEIsSUFBWTtJQUFBLE9BQUtkLFFBQVEsQ0FBQzZHLFFBQVEsQ0FBQy9GLElBQUksQ0FBQztFQUFBLEVBQUM7RUFDaEYsSUFBTWdHLGNBQWMsR0FBRzVILGFBQWEsQ0FBQyxVQUFDdUQsUUFBbUIsRUFBSTtJQUMzRCxJQUFJLENBQUNBLFFBQVEsRUFBRSxPQUFPekMsUUFBUSxDQUFDZ0MsTUFBTTtJQUNyQyxJQUFNdEUsTUFBTSxHQUEyQixDQUFBLENBQUU7SUFDekMrRSxRQUFRLENBQUNzRSxPQUFPLENBQUMsVUFBQ2pHLElBQUksRUFBSTtNQUN4QixJQUFJZCxRQUFRLENBQUNnQyxNQUFNLENBQUNsQixJQUFJLENBQUMsRUFBRTtRQUN6QnBELE1BQU0sQ0FBQ29ELElBQUksQ0FBQyxHQUFHZCxRQUFRLENBQUNnQyxNQUFNLENBQUNsQixJQUFJLENBQUM7TUFDdEM7SUFDRixDQUFDLENBQUM7SUFDRixPQUFPcEQsTUFBTTtFQUNmLENBQUMsQ0FBQztFQUNGLElBQU1zSixjQUFjLEdBQUc5SCxhQUFhLENBQUMsVUFBQzRCLElBQVk7SUFBQSxPQUFLSixVQUFVLENBQUNJLElBQUksQ0FBQyxJQUFJLEtBQUs7RUFBQSxFQUFDO0VBQ2pGLElBQU1tRyxlQUFlLEdBQUcvSCxhQUFhLENBQ25DLFVBQUN1RCxRQUFtQixFQUE4QjtJQUFBLElBQTVCeUUsZ0JBQWdCLEdBQUF6SCxTQUFBLENBQUFoQixNQUFBLFFBQUFnQixTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEtBQUs7SUFDNUMsSUFBSSxDQUFDZ0QsUUFBUSxFQUFFO01BQ2IsT0FBT3ZFLE1BQU0sQ0FBQzhFLElBQUksQ0FBQ3RDLFVBQVUsQ0FBQyxDQUFDeUcsSUFBSSxDQUFDLFVBQUNuQixHQUFHO1FBQUEsT0FBS3RGLFVBQVUsQ0FBQ3NGLEdBQUcsQ0FBQztNQUFBLEVBQUM7SUFDL0Q7SUFDQSxJQUFJa0IsZ0JBQWdCLEVBQUU7TUFDcEIsT0FBT3pFLFFBQVEsQ0FBQzJFLEtBQUssQ0FBQyxVQUFDdEcsSUFBSTtRQUFBLE9BQUtKLFVBQVUsQ0FBQ0ksSUFBSSxDQUFDO01BQUEsRUFBQztJQUNuRDtJQUNBLE9BQU8yQixRQUFRLENBQUMwRSxJQUFJLENBQUMsVUFBQ3JHLElBQUk7TUFBQSxPQUFLSixVQUFVLENBQUNJLElBQUksQ0FBQztJQUFBLEVBQUM7RUFDbEQsQ0FBQyxDQUNGO0VBQ0QsSUFBTXVHLGlCQUFpQixHQUFHbkksYUFBYSxDQUFDLFVBQUM0QixJQUFZO0lBQUEsT0FBS1YsVUFBVSxDQUFDVSxJQUFJLENBQUMsSUFBSSxLQUFLO0VBQUEsRUFBQztFQUNwRixJQUFNd0csY0FBYyxHQUFHcEksYUFBYSxDQUFDLFVBQUNxSSxXQUFtQyxFQUFJO0lBQzNFckosTUFBTSxDQUFDc0osT0FBTyxDQUFDRCxXQUFXLENBQUMsQ0FBQ1IsT0FBTyxDQUFDLFVBQUFVLElBQUEsRUFBa0I7TUFBQSxJQUFBQyxLQUFBLEdBQUF2SCxjQUFBLENBQUFzSCxJQUFBO1FBQWhCM0csSUFBSSxHQUFBNEcsS0FBQTtRQUFFdEcsS0FBSyxHQUFBc0csS0FBQTtNQUMvQzFILFFBQVEsQ0FBQytCLGFBQWEsQ0FBQ2pCLElBQUksRUFBRU0sS0FBSyxDQUFDO0lBQ3JDLENBQUMsQ0FBQztFQUNKLENBQUMsQ0FBQztFQUNGLElBQU11RyxlQUFlLEdBQUd6SSxhQUFhLENBQUMsVUFBQzRCLElBQVksRUFBK0I7SUFBQSxJQUE3QjhHLFNBQUEsR0FBQW5JLFNBQUEsQ0FBQWhCLE1BQUEsUUFBQWdCLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQXFCLElBQUk7SUFDNUVnQixlQUFlLENBQUMsVUFBQ2UsSUFBSTtNQUFBLE9BQUt0RCxNQUFBLENBQUF5QyxNQUFBLENBQUF6QyxNQUFBLENBQUF5QyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQU1hLElBQUksQ0FBQSxFQUFBRyxlQUFBLEtBQUdiLElBQUksRUFBRzhHLFNBQVMsQ0FBQSxDQUFBO0lBQUEsQ0FBRyxDQUFDO0VBQzdELENBQUMsQ0FBQztFQUNGLElBQU1DLGdCQUFnQixHQUFHM0ksYUFBYSxDQUFDLFVBQUM0SSxXQUFvQyxFQUFJO0lBQzlFckgsZUFBZSxDQUFDLFVBQUNlLElBQUk7TUFBQSxPQUFLdEQsTUFBQSxDQUFBeUMsTUFBQSxDQUFBekMsTUFBQSxDQUFBeUMsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUFNYSxJQUFJLENBQUEsRUFBS3NHLFdBQVcsQ0FBQTtJQUFBLENBQUcsQ0FBQztFQUMxRCxDQUFDLENBQUM7RUFDRixJQUFNQyxlQUFlLEdBQUc3SSxhQUFhLENBQUMsVUFBQzhJLE1BQWlCLEVBQUk7SUFDMUQsSUFBSSxDQUFDQSxNQUFNLEVBQUU7TUFDWGhJLFFBQVEsQ0FBQzBHLFdBQVcsQ0FBQSxDQUFFO01BQ3RCakcsZUFBZSxDQUFDLENBQUEsQ0FBRSxDQUFDO01BQ25CSixhQUFhLENBQUMsQ0FBQSxDQUFFLENBQUM7SUFDbkIsQ0FBQyxNQUFNO01BQ0wsSUFBTTRILFdBQVcsR0FBNEIsQ0FBQSxDQUFFO01BQy9DRCxNQUFNLENBQUNqQixPQUFPLENBQUMsVUFBQ21CLEtBQUssRUFBSTtRRDFFZixJQUFJbkUsRUFBRTtRQzJFZGtFLFdBQVcsQ0FBQ0MsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBbkUsRUFBQSxHQUFBdkUsTUFBTSxDQUFDMkksYUFBYSxNQUFBLElBQUEsSUFBQXBFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxHQUFJLENBQUEsQ0FBRSxFQUFFbUUsS0FBSyxDQUFDO01BQzFELENBQUMsQ0FBQztNQUNGbEksUUFBUSxDQUFDb0ksY0FBYyxDQUFDSCxXQUFXLENBQUM7TUFFcEN4SCxlQUFlLENBQUMsVUFBQ2UsSUFBSSxFQUFJO1FBQ3ZCLElBQU02RyxVQUFVLEdBQUFuSyxNQUFBLENBQUF5QyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFhLElBQUksQ0FBRTtRQUM5QndHLE1BQU0sQ0FBQ2pCLE9BQU8sQ0FBQyxVQUFDbUIsS0FBSyxFQUFJO1VBQ3ZCLE9BQU9HLFVBQVUsQ0FBQ0gsS0FBSyxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUNGLE9BQU9HLFVBQVU7TUFDbkIsQ0FBQyxDQUFDO01BRUZoSSxhQUFhLENBQUMsVUFBQ21CLElBQUksRUFBSTtRQUNyQixJQUFNUyxhQUFhLEdBQUEvRCxNQUFBLENBQUF5QyxNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVFhLElBQUksQ0FBRTtRQUNqQ3dHLE1BQU0sQ0FBQ2pCLE9BQU8sQ0FBQyxVQUFDbUIsS0FBSyxFQUFJO1VBQ3ZCLE9BQU9qRyxhQUFhLENBQUNpRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxDQUFDO1FBQ0YsT0FBT2pHLGFBQWE7TUFDdEIsQ0FBQyxDQUFDO01BRUYrRixNQUFNLENBQUNqQixPQUFPLENBQUMsVUFBQ21CLEtBQUssRUFBSTtRQUN2QmxJLFFBQVEsQ0FBQytCLGFBQWEsQ0FBQ21HLEtBQUssRUFBRSxJQUFJLENBQUM7TUFDckMsQ0FBQyxDQUFDO0lBQ0o7RUFDRixDQUFDLENBQUM7RUFDRixJQUFNSSxvQkFBb0IsR0FBR3BKLGFBQWEsQ0FDeEMsVUFBT3FKLFFBQW9FO0lBQUEsT0FBSTVMLFNBQUEsQ0FBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsRUFBQSxLQUFBLENBQUEsZUFBQXFFLG1CQUFBLENBQUFDLElBQUEsQ0FBQSxTQUFBdUgsU0FBQTtNQUFBLElBQUFwQyxlQUFBLEVBQUFxQyxHQUFBO01BQUEsT0FBQXpILG1CQUFBLENBQUFNLElBQUEsV0FBQW9ILFNBQUE7UUFBQSxrQkFBQUEsU0FBQSxDQUFBbEgsSUFBQSxHQUFBa0gsU0FBQSxDQUFBbkwsSUFBQTtVQUFBO1lBQUFtTCxTQUFBLENBQUFsSCxJQUFBO1lBQUFrSCxTQUFBLENBQUFuTCxJQUFBO1lBRW5ELE9BQU1pRixtQkFBbUIsQ0FBQSxDQUFFO1VBQUE7WUFBN0M0RCxlQUFlLEdBQUFzQyxTQUFBLENBQUE3RyxJQUFBO1lBQUEsS0FDakIwRyxRQUFRO2NBQUFHLFNBQUEsQ0FBQW5MLElBQUE7Y0FBQTtZQUFBO1lBQUFtTCxTQUFBLENBQUFuTCxJQUFBO1lBQ1YsT0FBTWdMLFFBQVEsQ0FBQ25DLGVBQWUsQ0FBQztVQUFBO1lBQUEsT0FBQXNDLFNBQUEsQ0FBQWpILE1BQUEsV0FFMUIyRSxlQUFlO1VBQUE7WUFBQXNDLFNBQUEsQ0FBQWxILElBQUE7WUFBQWlILEdBQUEsR0FBQUMsU0FBQTtZQUFBLE9BQUFBLFNBQUEsQ0FBQWpILE1BQUEsV0FFZi9CLFNBQVM7VUFBQTtVQUFBO1lBQUEsT0FBQWdKLFNBQUEsQ0FBQXZHLElBQUE7UUFBQTtNQUFBLEdBQUFxRyxRQUFBO0lBQUEsQ0FFbkIsRUFBQTtFQUFBLEVBQ0Y7RUFFRCxJQUFNRyxZQUFZLEdBQWlCL0osT0FBTyxDQUN4QztJQUFBLE9BQU1WLE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQXpDLE1BQUEsQ0FBQXlDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDRFgsUUFBUSxDQUFDMkksWUFBWSxDQUFBLEVBQUE7TUFFeEJDLGNBQWMsRUFBRXBHLG1CQUFtQjtNQUNuQ29DLGFBQWEsRUFBRTVFLFFBQVEsQ0FBQzRFLGFBQWE7TUFFckMrQixhQUFhLEVBQWJBLGFBQWE7TUFDYkMsZUFBZSxFQUFmQSxlQUFlO01BQ2ZFLGNBQWMsRUFBZEEsY0FBYztNQUNkRSxjQUFjLEVBQWRBLGNBQWM7TUFDZEMsZUFBZSxFQUFmQSxlQUFlO01BQ2ZJLGlCQUFpQixFQUFqQkEsaUJBQWlCO01BQ2pCdEYsYUFBYSxFQUFFL0IsUUFBUSxDQUFDK0IsYUFBYTtNQUNyQ3VGLGNBQWMsRUFBZEEsY0FBYztNQUNkSyxlQUFlLEVBQWZBLGVBQWU7TUFDZkUsZ0JBQWdCLEVBQWhCQSxnQkFBZ0I7TUFDaEJuQixXQUFXLEVBQUVxQixlQUFlO01BQzVCYyxNQUFNLEVBQUVQLG9CQUFvQjtNQUM1QjNFLFdBQVcsRUFBWEEsV0FBVztNQUNYYyxhQUFhLEVBQUV6RSxRQUFRLENBQUN5RSxhQUFhO01BQ3JDQyxlQUFlLEVBQUUxRSxRQUFRLENBQUMwRTtJQUFlLENBQUEsQ0FBQTtFQUFBLENBQ3pDLEVBQ0YsQ0FDRTFFLFFBQVEsQ0FBQzJJLFlBQVksRUFDckIzSSxRQUFRLENBQUM0RSxhQUFhLEVBQ3RCNUUsUUFBUSxDQUFDK0IsYUFBYSxFQUN0Qi9CLFFBQVEsQ0FBQ3lFLGFBQWEsRUFDdEJ6RSxRQUFRLENBQUMwRSxlQUFlLEVBQ3hCbEMsbUJBQW1CLEVBQ25CbUUsYUFBYSxFQUNiQyxlQUFlLEVBQ2ZFLGNBQWMsRUFDZEUsY0FBYyxFQUNkQyxlQUFlLEVBQ2ZJLGlCQUFpQixFQUNqQkMsY0FBYyxFQUNkSyxlQUFlLEVBQ2ZFLGdCQUFnQixFQUNoQkUsZUFBZSxFQUNmTyxvQkFBb0IsRUFDcEIzRSxXQUFXLENBQ1osQ0FDRjtFQUVEO0VBQ0E7RUFDQTtFQUNBLElBQU1tRixTQUFTLEdBQXFCbEssT0FBTyxDQUN6QztJQUFBLE9BQU87TUFDTDRFLE1BQU0sRUFBRXhELFFBQVEsQ0FBQ3dELE1BQU07TUFDdkJ4QixNQUFNLEVBQUVoQyxRQUFRLENBQUNnQyxNQUFNO01BQ3ZCNkUsUUFBUSxFQUFFN0csUUFBUSxDQUFDNkcsUUFBUTtNQUMzQmpHLE9BQU8sRUFBRUYsVUFBVTtNQUNuQk4sVUFBVSxFQUFWQSxVQUFVO01BQ1Y2QyxVQUFVLEVBQUVqRCxRQUFRLENBQUNpRCxVQUFVO01BQy9CMkIsYUFBYSxFQUFFNUUsUUFBUSxDQUFDNEUsYUFBYTtNQUNyQzdDLGFBQWEsRUFBRS9CLFFBQVEsQ0FBQytCLGFBQWE7TUFDckNELGVBQWUsRUFBRTlCLFFBQVEsQ0FBQzhCLGVBQWU7TUFDekMrQyxhQUFhLEVBQUU3RSxRQUFRLENBQUM2RSxhQUFhO01BQ3JDaEUsa0JBQWtCLEVBQWxCQSxrQkFBa0I7TUFDbEI0RCxhQUFhLEVBQUV6RSxRQUFRLENBQUN5RSxhQUFhO01BQ3JDQyxlQUFlLEVBQUUxRSxRQUFRLENBQUMwRSxlQUFlO01BQ3pDd0IsWUFBWSxFQUFaQSxZQUFZO01BQ1pPLFdBQVcsRUFBWEE7SURqR0YsQ0NrR0M7RUFBQSxDQUFDLEVBQ0YsQ0FDRXpHLFFBQVEsQ0FBQ3dELE1BQU0sRUFDZnhELFFBQVEsQ0FBQ2dDLE1BQU0sRUFDZmhDLFFBQVEsQ0FBQzZHLFFBQVEsRUFDakJuRyxVQUFVLEVBQ1ZOLFVBQVUsRUFDVkosUUFBUSxDQUFDaUQsVUFBVSxFQUNuQmpELFFBQVEsQ0FBQzRFLGFBQWEsRUFDdEI1RSxRQUFRLENBQUMrQixhQUFhLEVBQ3RCL0IsUUFBUSxDQUFDOEIsZUFBZSxFQUN4QjlCLFFBQVEsQ0FBQzZFLGFBQWEsRUFDdEJoRSxrQkFBa0IsRUFDbEJiLFFBQVEsQ0FBQ3lFLGFBQWEsRUFDdEJ6RSxRQUFRLENBQUMwRSxlQUFlLEVBQ3hCd0IsWUFBWSxFQUNaTyxXQUFXLENBQ1osQ0FDRjtFQUVELE9BQU87SUFBRWtDLFlBQVksRUFBWkEsWUFBWTtJQUFFRyxTQUFTLEVBQVRBO0VBQVMsQ0FBRTtBQUNwQyxDQUFDO0FBRUQsZUFBZXZKLE9BQU8iLCJmaWxlIjoiY29tcG9uZW50cy9Qcm9Gb3JtL2NvcmUvaG9va3MvdXNlRm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZU1lbW8sIHVzZUVmZmVjdCwgbWVtbywgRnJhZ21lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VNZW1vaXplZEZuIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlTWVtb2l6ZWRGbic7XG5pbXBvcnQgdXNlU2FmZVN0YXRlIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlU2FmZVN0YXRlJztcbmltcG9ydCB7IHVzZUZvcm1Db3JlIH0gZnJvbSAnLi91c2VGb3JtQ29yZSc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9wYXRoVXRpbHMnO1xuaW1wb3J0IHsgcnVuUnVsZXNBc3luYyB9IGZyb20gJy4uL3J1blJ1bGVzJztcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdXNlRm9ybVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgY29uc3QgdXNlRm9ybSA9IChjb25maWcgPSB7fSkgPT4ge1xuICAgIGNvbnN0IHsgb25GaW5pc2gsIG9uRmluaXNoRmFpbGVkLCBvblJlc2V0LCB2YWxpZGF0ZVRyaWdnZXIgPSAnb25DaGFuZ2UnLCB9ID0gY29uZmlnO1xuICAgIGNvbnN0IGZvcm1Db3JlID0gdXNlRm9ybUNvcmUoY29uZmlnKTtcbiAgICBjb25zdCBbdmFsaWRhdGluZywgc2V0VmFsaWRhdGluZ10gPSB1c2VTYWZlU3RhdGUoe30pO1xuICAgIGNvbnN0IFtleHRyYVRvdWNoZWQsIHNldEV4dHJhVG91Y2hlZF0gPSB1c2VTdGF0ZSh7fSk7XG4gICAgY29uc3QgYWxsVG91Y2hlZCA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUudG91Y2hlZCksIGV4dHJhVG91Y2hlZCkpLCBbZm9ybUNvcmUudG91Y2hlZCwgZXh0cmFUb3VjaGVkXSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgdmFsaWRhdGlvbiDigJMgZWFjaCBydWxlIGlzIHByb2Nlc3NlZCBleGFjdGx5IG9uY2VcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCB2YWxpZGF0ZUZpZWxkQXN5bmMgPSB1c2VNZW1vaXplZEZuKChuYW1lLCB2YWx1ZSwgcnVsZXMpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBpZiAoIXJ1bGVzIHx8IHJ1bGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCB7IFtuYW1lXTogdHJ1ZSB9KSkpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgeyBlcnJvciwgd2FybmluZyB9ID0geWllbGQgcnVuUnVsZXNBc3luYyhuYW1lLCB2YWx1ZSwgZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgcnVsZXMpO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRXYXJuaW5nKG5hbWUsIHdhcm5pbmcpO1xuICAgICAgICAgICAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgaXNWYWxpZDogZmFsc2UsIGVycm9yIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZm9ybUNvcmUuZXJyb3JzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICBzZXRWYWxpZGF0aW5nKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VmFsaWRhdGluZyA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW25hbWVdO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXdWYWxpZGF0aW5nO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgLy8gQXN5bmMgZmllbGQgYmx1ciBoYW5kbGVyXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgaGFuZGxlRmllbGRCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygobmFtZSkgPT4gX19hd2FpdGVyKHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHNldEV4dHJhVG91Y2hlZCgocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW25hbWVdOiB0cnVlIH0pKSk7XG4gICAgICAgIGNvbnN0IHJ1bGVzID0gZm9ybUNvcmUuZ2V0RmllbGRSdWxlcyhuYW1lKTtcbiAgICAgICAgaWYgKHJ1bGVzICYmIHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQmx1cicpIHtcbiAgICAgICAgICAgIHlpZWxkIHZhbGlkYXRlRmllbGRBc3luYyhuYW1lLCByZXNvbHZlVmFsdWUoZm9ybUNvcmUuZ2V0RmllbGRzVmFsdWUoKSwgbmFtZSksIHJ1bGVzKTtcbiAgICAgICAgfVxuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBWYWxpZGF0ZSBhbGwgZmllbGRzIGFzeW5jXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgdmFsaWRhdGVGaWVsZHNBc3luYyA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmllbGRzVG9WYWxpZGF0ZSA9IG5hbWVMaXN0IHx8IE9iamVjdC5rZXlzKGZvcm1Db3JlLmZpZWxkUnVsZXMpO1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb21pc2VzID0gZmllbGRzVG9WYWxpZGF0ZS5tYXAoKG5hbWUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcnVsZXMgPSBmb3JtQ29yZS5maWVsZFJ1bGVzW25hbWVdO1xuICAgICAgICAgICAgaWYgKHJ1bGVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBpc1ZhbGlkLCBlcnJvciB9ID0geWllbGQgdmFsaWRhdGVGaWVsZEFzeW5jKG5hbWUsIHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKSwgcnVsZXMpO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZCAmJiBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzW25hbWVdID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHlpZWxkIFByb21pc2UuYWxsKHZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoJ1ZhbGlkYXRpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBlcnJvci52YWx1ZXMgPSBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgICAgICAgICAgZXJyb3IuZXJyb3JzID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5yZWR1Y2UoKGFjYywgbmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tuYW1lXSA9IHJlc29sdmVWYWx1ZShmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpLCBuYW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtQ29yZS5nZXRGaWVsZHNWYWx1ZSgpO1xuICAgIH0pKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBkZWZpbmVGaWVsZCDigJMgdXNlZCBieSBzdGFuZGFsb25lIChub24tUHJvRm9ybSkgY29uc3VtZXJzXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgY29uc3QgZGVmaW5lRmllbGQgPSB1c2VNZW1vaXplZEZuKChuYW1lLCBmaWVsZE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgICAgICBjb25zdCB7IHJ1bGVzID0gW10gfSA9IGZpZWxkT3B0aW9ucztcbiAgICAgICAgY29uc3QgRmllbGRDb21wb25lbnQgPSBtZW1vKChfYSkgPT4ge1xuICAgICAgICAgICAgdmFyIF9iO1xuICAgICAgICAgICAgdmFyIHsgY2hpbGRyZW4sIHJlbmRlciB9ID0gX2EsIHByb3BzID0gX19yZXN0KF9hLCBbXCJjaGlsZHJlblwiLCBcInJlbmRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID0gKF9iID0gZm9ybUNvcmUudmFsdWVzW25hbWVdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRXJyb3IgPSBmb3JtQ29yZS5lcnJvcnNbbmFtZV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFRvdWNoZWQgPSBhbGxUb3VjaGVkW25hbWVdO1xuICAgICAgICAgICAgY29uc3QgZmllbGRWYWxpZGF0aW5nID0gdmFsaWRhdGluZ1tuYW1lXTtcbiAgICAgICAgICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdSdWxlcyA9IGZvcm1Db3JlLmdldEZpZWxkUnVsZXMobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFleGlzdGluZ1J1bGVzICYmIHJ1bGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUNvcmUucmVnaXN0ZXJGaWVsZChuYW1lLCBydWxlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZChuYW1lKTtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSwgW10pOyAvLyBPbmx5IHJlZ2lzdGVyIG9uIG1vdW50XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVGaWVsZENoYW5nZSA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRWYWx1ZShuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRlVHJpZ2dlciA9PT0gJ29uQ2hhbmdlJykge1xuICAgICAgICAgICAgICAgICAgICBmb3JtQ29yZS52YWxpZGF0ZUZpZWxkKG5hbWUsIHJ1bGVzLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgaGFuZGxlRmllbGRCbHVyKG5hbWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFByb3BzID0gT2JqZWN0LmFzc2lnbih7IG5hbWUsIHZhbHVlOiBmaWVsZFZhbHVlLCBlcnJvcjogZmllbGRFcnJvciwgdG91Y2hlZDogZmllbGRUb3VjaGVkLCB2YWxpZGF0aW5nOiBmaWVsZFZhbGlkYXRpbmcsIG9uQ2hhbmdlOiBoYW5kbGVGaWVsZENoYW5nZSwgb25CbHVyOiBoYW5kbGVCbHVyIH0sIHByb3BzKTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQ2hhbmdlID0gKGUpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBlICYmIHR5cGVvZiBlID09PSAnb2JqZWN0JyAmJiAndGFyZ2V0JyBpbiBlXG4gICAgICAgICAgICAgICAgICAgID8gZS50YXJnZXQudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBlO1xuICAgICAgICAgICAgICAgIGhhbmRsZUZpZWxkQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pICYmXG4gICAgICAgICAgICAgICAgICAgICgoX2EgPSBjaGlsZHJlbi5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2hhbmdlKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZU1lcmdlQmx1ciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlQmx1cigpO1xuICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZHJlbikgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IGNoaWxkcmVuLnByb3BzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Eub25CbHVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjaGlsZHJlbi5wcm9wcy5vbkJsdXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHJlbmRlciAmJiB0eXBlb2YgcmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlcihmaWVsZFByb3BzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRyZW4oZmllbGRQcm9wcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoUmVhY3QuaXNWYWxpZEVsZW1lbnQoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWVyZ2VkUHJvcHMgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGZpZWxkUHJvcHMpLCB7IG9uQ2hhbmdlOiBoYW5kbGVNZXJnZUNoYW5nZSwgb25CbHVyOiBoYW5kbGVNZXJnZUJsdXIgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwgbWVyZ2VkUHJvcHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoRnJhZ21lbnQsIG51bGwsIC4uLmNoaWxkcmVuLm1hcCgoY2hpbGQsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1lcmdlZFByb3BzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBmaWVsZFByb3BzKSwgeyBrZXk6IGNoaWxkLmtleSB8fCBpbmRleCwgb25DaGFuZ2U6IGhhbmRsZU1lcmdlQ2hhbmdlLCBvbkJsdXI6IGhhbmRsZU1lcmdlQmx1ciB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGQsIG1lcmdlZFByb3BzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGQ7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgICBGaWVsZENvbXBvbmVudC5kaXNwbGF5TmFtZSA9IGBGaWVsZCgke25hbWV9KWA7XG4gICAgICAgIHJldHVybiBGaWVsZENvbXBvbmVudDtcbiAgICB9KTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBoYW5kbGVTdWJtaXQgLyBoYW5kbGVSZXNldCDigJMgZm9yIDxmb3JtPiBldmVudCBoYW5kbGVyc1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGhhbmRsZVN1Ym1pdCA9IHVzZUV2ZW50Q2FsbGJhY2soKGUpID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhbHVlcyA9IHlpZWxkIHZhbGlkYXRlRmllbGRzQXN5bmMoKTtcbiAgICAgICAgICAgIG9uRmluaXNoID09PSBudWxsIHx8IG9uRmluaXNoID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZpbmlzaCh2YWxpZGF0ZWRWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVkID0gZXJyO1xuICAgICAgICAgICAgb25GaW5pc2hGYWlsZWQgPT09IG51bGwgfHwgb25GaW5pc2hGYWlsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoRmFpbGVkKHsgdmFsdWVzOiB0eXBlZC52YWx1ZXMsIGVycm9yczogdHlwZWQuZXJyb3JzIH0pO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGhhbmRsZVJlc2V0ID0gdXNlRXZlbnRDYWxsYmFjaygoZSkgPT4ge1xuICAgICAgICBlID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZm9ybUNvcmUucmVzZXRGaWVsZHMoKTtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKHt9KTtcbiAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIG9uUmVzZXQgPT09IG51bGwgfHwgb25SZXNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25SZXNldCgpO1xuICAgIH0pO1xuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIC8vIEZvcm1JbnN0YW5jZSDigJMgZW5oYW5jZWQgQVBJIGZvciBjb25zdW1lcnMuXG4gICAgLy9cbiAgICAvLyBFdmVyeSBtZXRob2QgaXMgd3JhcHBlZCBpbiB1c2VNZW1vaXplZEZuIChzdGFibGUgaWRlbnRpdHksIGFsd2F5cyByZWFkcyB0aGVcbiAgICAvLyBsYXRlc3QgcmVuZGVyJ3Mgc3RhdGUpIHNvIHRoZSBpbnN0YW5jZSBvYmplY3QgaXRzZWxmIGlzIElERU5USVRZLVNUQUJMRSBmb3JcbiAgICAvLyB0aGUgbGlmZXRpbWUgb2YgdGhlIGZvcm0g4oCUIHRoaXMgaXMgd2hhdCBsZXRzIFByb0Zvcm0gcHVibGlzaCBpdCB0aHJvdWdoIHRoZVxuICAgIC8vIHN0YWJsZSBjb250ZXh0IHdpdGhvdXQgcmUtcmVuZGVyaW5nIHN1YnNjcmliZXJzIG9uIGVhY2gga2V5c3Ryb2tlLlxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIGNvbnN0IGdldEZpZWxkRXJyb3IgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBmb3JtQ29yZS5lcnJvcnNbbmFtZV0pO1xuICAgIGNvbnN0IGdldEZpZWxkV2FybmluZyA9IHVzZU1lbW9pemVkRm4oKG5hbWUpID0+IGZvcm1Db3JlLndhcm5pbmdzW25hbWVdKTtcbiAgICBjb25zdCBnZXRGaWVsZHNFcnJvciA9IHVzZU1lbW9pemVkRm4oKG5hbWVMaXN0KSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpXG4gICAgICAgICAgICByZXR1cm4gZm9ybUNvcmUuZXJyb3JzO1xuICAgICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgICAgbmFtZUxpc3QuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICAgICAgaWYgKGZvcm1Db3JlLmVycm9yc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IGZvcm1Db3JlLmVycm9yc1tuYW1lXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gICAgY29uc3QgaXNGaWVsZFRvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lKSA9PiBhbGxUb3VjaGVkW25hbWVdIHx8IGZhbHNlKTtcbiAgICBjb25zdCBpc0ZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChuYW1lTGlzdCwgYWxsRmllbGRzVG91Y2hlZCA9IGZhbHNlKSA9PiB7XG4gICAgICAgIGlmICghbmFtZUxpc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhbGxUb3VjaGVkKS5zb21lKChrZXkpID0+IGFsbFRvdWNoZWRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFsbEZpZWxkc1RvdWNoZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lTGlzdC5ldmVyeSgobmFtZSkgPT4gYWxsVG91Y2hlZFtuYW1lXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5hbWVMaXN0LnNvbWUoKG5hbWUpID0+IGFsbFRvdWNoZWRbbmFtZV0pO1xuICAgIH0pO1xuICAgIGNvbnN0IGlzRmllbGRWYWxpZGF0aW5nID0gdXNlTWVtb2l6ZWRGbigobmFtZSkgPT4gdmFsaWRhdGluZ1tuYW1lXSB8fCBmYWxzZSk7XG4gICAgY29uc3Qgc2V0RmllbGRzRXJyb3IgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNFcnJvcikgPT4ge1xuICAgICAgICBPYmplY3QuZW50cmllcyhmaWVsZHNFcnJvcikuZm9yRWFjaCgoW25hbWUsIGVycm9yXSkgPT4ge1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihuYW1lLCBlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkVG91Y2hlZCA9IHVzZU1lbW9pemVkRm4oKG5hbWUsIGlzVG91Y2hlZCA9IHRydWUpID0+IHtcbiAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwcmV2KSwgeyBbbmFtZV06IGlzVG91Y2hlZCB9KSkpO1xuICAgIH0pO1xuICAgIGNvbnN0IHNldEZpZWxkc1RvdWNoZWQgPSB1c2VNZW1vaXplZEZuKChmaWVsZHNUb3VjaCkgPT4ge1xuICAgICAgICBzZXRFeHRyYVRvdWNoZWQoKHByZXYpID0+IChPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHByZXYpLCBmaWVsZHNUb3VjaCkpKTtcbiAgICB9KTtcbiAgICBjb25zdCByZXNldEZvcm1GaWVsZHMgPSB1c2VNZW1vaXplZEZuKChmaWVsZHMpID0+IHtcbiAgICAgICAgaWYgKCFmaWVsZHMpIHtcbiAgICAgICAgICAgIGZvcm1Db3JlLnJlc2V0RmllbGRzKCk7XG4gICAgICAgICAgICBzZXRFeHRyYVRvdWNoZWQoe30pO1xuICAgICAgICAgICAgc2V0VmFsaWRhdGluZyh7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2ZpZWxkXSA9ICgoX2EgPSBjb25maWcuaW5pdGlhbFZhbHVlcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDoge30pW2ZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRzVmFsdWUocmVzZXRWYWx1ZXMpO1xuICAgICAgICAgICAgc2V0RXh0cmFUb3VjaGVkKChwcmV2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3VG91Y2hlZCA9IE9iamVjdC5hc3NpZ24oe30sIHByZXYpO1xuICAgICAgICAgICAgICAgIGZpZWxkcy5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbmV3VG91Y2hlZFtmaWVsZF07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RvdWNoZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNldFZhbGlkYXRpbmcoKHByZXYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdWYWxpZGF0aW5nID0gT2JqZWN0LmFzc2lnbih7fSwgcHJldik7XG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdWYWxpZGF0aW5nW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3VmFsaWRhdGluZztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9ybUNvcmUuc2V0RmllbGRFcnJvcihmaWVsZCwgbnVsbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHN1Ym1pdFdpdGhWYWxpZGF0aW9uID0gdXNlTWVtb2l6ZWRGbigoY2FsbGJhY2spID0+IF9fYXdhaXRlcih2b2lkIDAsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGVkVmFsdWVzID0geWllbGQgdmFsaWRhdGVGaWVsZHNBc3luYygpO1xuICAgICAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICAgICAgeWllbGQgY2FsbGJhY2sodmFsaWRhdGVkVmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB2YWxpZGF0ZWRWYWx1ZXM7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKF9hKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfSkpO1xuICAgIGNvbnN0IGZvcm1JbnN0YW5jZSA9IHVzZU1lbW8oKCkgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgZm9ybUNvcmUuZm9ybUluc3RhbmNlKSwgeyB2YWxpZGF0ZUZpZWxkczogdmFsaWRhdGVGaWVsZHNBc3luYywgc2V0RmllbGRWYWx1ZTogZm9ybUNvcmUuc2V0RmllbGRWYWx1ZSwgZ2V0RmllbGRFcnJvcixcbiAgICAgICAgZ2V0RmllbGRXYXJuaW5nLFxuICAgICAgICBnZXRGaWVsZHNFcnJvcixcbiAgICAgICAgaXNGaWVsZFRvdWNoZWQsXG4gICAgICAgIGlzRmllbGRzVG91Y2hlZCxcbiAgICAgICAgaXNGaWVsZFZhbGlkYXRpbmcsIHNldEZpZWxkRXJyb3I6IGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsIHNldEZpZWxkc0Vycm9yLFxuICAgICAgICBzZXRGaWVsZFRvdWNoZWQsXG4gICAgICAgIHNldEZpZWxkc1RvdWNoZWQsIHJlc2V0RmllbGRzOiByZXNldEZvcm1GaWVsZHMsIHN1Ym1pdDogc3VibWl0V2l0aFZhbGlkYXRpb24sIGRlZmluZUZpZWxkLCByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLCB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCB9KSksIFtcbiAgICAgICAgZm9ybUNvcmUuZm9ybUluc3RhbmNlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIHZhbGlkYXRlRmllbGRzQXN5bmMsXG4gICAgICAgIGdldEZpZWxkRXJyb3IsXG4gICAgICAgIGdldEZpZWxkV2FybmluZyxcbiAgICAgICAgZ2V0RmllbGRzRXJyb3IsXG4gICAgICAgIGlzRmllbGRUb3VjaGVkLFxuICAgICAgICBpc0ZpZWxkc1RvdWNoZWQsXG4gICAgICAgIGlzRmllbGRWYWxpZGF0aW5nLFxuICAgICAgICBzZXRGaWVsZHNFcnJvcixcbiAgICAgICAgc2V0RmllbGRUb3VjaGVkLFxuICAgICAgICBzZXRGaWVsZHNUb3VjaGVkLFxuICAgICAgICByZXNldEZvcm1GaWVsZHMsXG4gICAgICAgIHN1Ym1pdFdpdGhWYWxpZGF0aW9uLFxuICAgICAgICBkZWZpbmVGaWVsZCxcbiAgICBdKTtcbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICAvLyBJbnRlcm5hbHMg4oCTIGV4cG9zZWQgZm9yIFByb0Zvcm0gaW50ZWdyYXRpb25cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICAgIHZhbHVlczogZm9ybUNvcmUudmFsdWVzLFxuICAgICAgICBlcnJvcnM6IGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgd2FybmluZ3M6IGZvcm1Db3JlLndhcm5pbmdzLFxuICAgICAgICB0b3VjaGVkOiBhbGxUb3VjaGVkLFxuICAgICAgICB2YWxpZGF0aW5nLFxuICAgICAgICBmaWVsZFJ1bGVzOiBmb3JtQ29yZS5maWVsZFJ1bGVzLFxuICAgICAgICBzZXRGaWVsZFZhbHVlOiBmb3JtQ29yZS5zZXRGaWVsZFZhbHVlLFxuICAgICAgICBzZXRGaWVsZEVycm9yOiBmb3JtQ29yZS5zZXRGaWVsZEVycm9yLFxuICAgICAgICBzZXRGaWVsZFdhcm5pbmc6IGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgdmFsaWRhdGVGaWVsZDogZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICByZWdpc3RlckZpZWxkOiBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICB1bnJlZ2lzdGVyRmllbGQ6IGZvcm1Db3JlLnVucmVnaXN0ZXJGaWVsZCxcbiAgICAgICAgaGFuZGxlU3VibWl0LFxuICAgICAgICBoYW5kbGVSZXNldCxcbiAgICB9KSwgW1xuICAgICAgICBmb3JtQ29yZS52YWx1ZXMsXG4gICAgICAgIGZvcm1Db3JlLmVycm9ycyxcbiAgICAgICAgZm9ybUNvcmUud2FybmluZ3MsXG4gICAgICAgIGFsbFRvdWNoZWQsXG4gICAgICAgIHZhbGlkYXRpbmcsXG4gICAgICAgIGZvcm1Db3JlLmZpZWxkUnVsZXMsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkVmFsdWUsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkRXJyb3IsXG4gICAgICAgIGZvcm1Db3JlLnNldEZpZWxkV2FybmluZyxcbiAgICAgICAgZm9ybUNvcmUudmFsaWRhdGVGaWVsZCxcbiAgICAgICAgdmFsaWRhdGVGaWVsZEFzeW5jLFxuICAgICAgICBmb3JtQ29yZS5yZWdpc3RlckZpZWxkLFxuICAgICAgICBmb3JtQ29yZS51bnJlZ2lzdGVyRmllbGQsXG4gICAgICAgIGhhbmRsZVN1Ym1pdCxcbiAgICAgICAgaGFuZGxlUmVzZXQsXG4gICAgXSk7XG4gICAgcmV0dXJuIHsgZm9ybUluc3RhbmNlLCBpbnRlcm5hbHMgfTtcbn07XG5leHBvcnQgZGVmYXVsdCB1c2VGb3JtOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
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