@1money/component-ui 0.0.46 → 0.0.48

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 (75) hide show
  1. package/es/components/Table/Table.d.ts +2 -2
  2. package/es/components/Table/Table.js +25 -148
  3. package/es/components/Table/VirtualTable.d.ts +2 -2
  4. package/es/components/Table/VirtualTable.js +30 -143
  5. package/es/components/Table/core/useTableColumns.d.ts +21 -7
  6. package/es/components/Table/core/useTableColumns.js +76 -14
  7. package/es/components/Table/core/useTableDataPipeline.d.ts +13 -6
  8. package/es/components/Table/core/useTableDataPipeline.js +193 -27
  9. package/es/components/Table/core/useTableExpand.d.ts +4 -2
  10. package/es/components/Table/core/useTableExpand.js +30 -5
  11. package/es/components/Table/core/useTableSelection.d.ts +3 -5
  12. package/es/components/Table/core/useTableSelection.js +1 -1
  13. package/es/components/Table/core/useTableSetup.d.ts +42 -0
  14. package/es/components/Table/core/useTableSetup.js +195 -0
  15. package/es/components/Table/features/ExpandTrigger.js +10 -2
  16. package/es/components/Table/features/FilterTrigger.d.ts +9 -0
  17. package/es/components/Table/features/FilterTrigger.js +157 -0
  18. package/es/components/Table/features/SelectionColumn.d.ts +3 -2
  19. package/es/components/Table/features/SelectionColumn.js +19 -6
  20. package/es/components/Table/interface.d.ts +103 -21
  21. package/es/components/Table/internal/kernel/FixedHolder/index.js +1 -2
  22. package/es/components/Table/internal/kernel/Table.d.ts +1 -1
  23. package/es/components/Table/internal/kernel/Table.js +2 -8
  24. package/es/components/Table/internal/kernel/VirtualTable/BodyGrid.js +1 -2
  25. package/es/components/Table/internal/kernel/VirtualTable/index.js +1 -2
  26. package/es/components/Table/internal/kernel/constant.d.ts +1 -1
  27. package/es/components/Table/internal/kernel/constant.js +1 -1
  28. package/es/components/Table/internal/kernel/hooks/useExpand.js +1 -2
  29. package/es/components/Table/internal/kernel/utils/offsetUtil.js +1 -2
  30. package/es/components/Table/renderers/BodyCell.d.ts +4 -4
  31. package/es/components/Table/renderers/BodyCell.js +1 -1
  32. package/es/components/Table/renderers/HeaderCell.d.ts +8 -4
  33. package/es/components/Table/renderers/HeaderCell.js +13 -3
  34. package/es/components/Table/style/Table.css +1 -1
  35. package/es/components/VirtualList/ScrollBar.js +1 -2
  36. package/es/index.css +1 -1
  37. package/lib/components/Table/Table.d.ts +2 -2
  38. package/lib/components/Table/Table.js +24 -150
  39. package/lib/components/Table/VirtualTable.d.ts +2 -2
  40. package/lib/components/Table/VirtualTable.js +28 -144
  41. package/lib/components/Table/core/useTableColumns.d.ts +21 -7
  42. package/lib/components/Table/core/useTableColumns.js +76 -14
  43. package/lib/components/Table/core/useTableDataPipeline.d.ts +13 -6
  44. package/lib/components/Table/core/useTableDataPipeline.js +192 -26
  45. package/lib/components/Table/core/useTableExpand.d.ts +4 -2
  46. package/lib/components/Table/core/useTableExpand.js +30 -5
  47. package/lib/components/Table/core/useTableSelection.d.ts +3 -5
  48. package/lib/components/Table/core/useTableSelection.js +1 -1
  49. package/lib/components/Table/core/useTableSetup.d.ts +42 -0
  50. package/lib/components/Table/core/useTableSetup.js +204 -0
  51. package/lib/components/Table/features/ExpandTrigger.js +10 -2
  52. package/lib/components/Table/features/FilterTrigger.d.ts +9 -0
  53. package/lib/components/Table/features/FilterTrigger.js +164 -0
  54. package/lib/components/Table/features/SelectionColumn.d.ts +3 -2
  55. package/lib/components/Table/features/SelectionColumn.js +19 -6
  56. package/lib/components/Table/interface.d.ts +103 -21
  57. package/lib/components/Table/internal/kernel/FixedHolder/index.js +1 -2
  58. package/lib/components/Table/internal/kernel/Table.d.ts +1 -1
  59. package/lib/components/Table/internal/kernel/Table.js +2 -8
  60. package/lib/components/Table/internal/kernel/VirtualTable/BodyGrid.js +1 -2
  61. package/lib/components/Table/internal/kernel/VirtualTable/index.js +1 -2
  62. package/lib/components/Table/internal/kernel/constant.d.ts +1 -1
  63. package/lib/components/Table/internal/kernel/constant.js +1 -1
  64. package/lib/components/Table/internal/kernel/hooks/useExpand.js +1 -2
  65. package/lib/components/Table/internal/kernel/utils/offsetUtil.js +1 -2
  66. package/lib/components/Table/renderers/BodyCell.d.ts +4 -4
  67. package/lib/components/Table/renderers/BodyCell.js +1 -1
  68. package/lib/components/Table/renderers/HeaderCell.d.ts +8 -4
  69. package/lib/components/Table/renderers/HeaderCell.js +13 -3
  70. package/lib/components/Table/style/Table.css +1 -1
  71. package/lib/components/VirtualList/ScrollBar.js +1 -2
  72. package/lib/index.css +1 -1
  73. package/package.json +1 -1
  74. package/scripts/mcp-server/examples.generated.json +132 -0
  75. package/scripts/mcp-server/index.generated.json +344 -14
@@ -93,17 +93,46 @@ function applySortToData(data, columns, sorterStates) {
93
93
  });
94
94
  return sorted;
95
95
  }
96
- var applyTablePipeline = exports.applyTablePipeline = function applyTablePipeline(_ref) {
97
- var columns = _ref.columns,
98
- dataSource = _ref.dataSource,
99
- sorter = _ref.sorter,
100
- pagination = _ref.pagination;
96
+ function applyFiltersToData(data, columns, filters) {
97
+ // Resolve which columns have an active filter selection AND a predicate.
98
+ var activeFilters = columns.map(function (col) {
99
+ if (col.key == null) return null;
100
+ var selected = filters[String(col.key)];
101
+ if (!selected || selected.length === 0) return null;
102
+ if (!col.onFilter) return null;
103
+ return {
104
+ onFilter: col.onFilter,
105
+ selected: selected
106
+ };
107
+ }).filter(Boolean);
108
+ if (activeFilters.length === 0) return data;
109
+ return data.filter(function (record) {
110
+ return (
111
+ // Row passes only if EVERY active column has at least one matching selected value.
112
+ activeFilters.every(function (_ref) {
113
+ var onFilter = _ref.onFilter,
114
+ selected = _ref.selected;
115
+ return selected.some(function (value) {
116
+ return onFilter(value, record);
117
+ });
118
+ })
119
+ );
120
+ });
121
+ }
122
+ var applyTablePipeline = exports.applyTablePipeline = function applyTablePipeline(_ref2) {
123
+ var columns = _ref2.columns,
124
+ dataSource = _ref2.dataSource,
125
+ sorter = _ref2.sorter,
126
+ _ref2$filters = _ref2.filters,
127
+ filters = _ref2$filters === void 0 ? {} : _ref2$filters,
128
+ pagination = _ref2.pagination;
101
129
  var sorterStates = sorter.columnKey != null && sorter.order ? [{
102
130
  columnKey: sorter.columnKey,
103
131
  order: sorter.order
104
132
  }] : [];
105
133
  var leafColumns = flattenColumns(columns);
106
- var sorted = applySortToData(dataSource, leafColumns, sorterStates);
134
+ var filtered = applyFiltersToData(dataSource, leafColumns, filters);
135
+ var sorted = applySortToData(filtered, leafColumns, sorterStates);
107
136
  if (!pagination) {
108
137
  return {
109
138
  currentDataSource: sorted,
@@ -163,24 +192,119 @@ var getControlledSorter = function getControlledSorter(columns) {
163
192
  order: (_a = controlledColumn.sortOrder) !== null && _a !== void 0 ? _a : null
164
193
  };
165
194
  };
166
- var useTableDataPipeline = exports.useTableDataPipeline = function useTableDataPipeline(_ref2) {
167
- var columns = _ref2.columns,
168
- dataSource = _ref2.dataSource,
169
- pagination = _ref2.pagination,
170
- onChange = _ref2.onChange;
195
+ var getInitialFilters = function getInitialFilters(columns) {
196
+ var _a;
197
+ var leaves = flattenColumns(columns);
198
+ var state = {};
199
+ var _iterator4 = _createForOfIteratorHelper(leaves),
200
+ _step4;
201
+ try {
202
+ for (_iterator4.s(); !(_step4 = _iterator4.n()).done;) {
203
+ var col = _step4.value;
204
+ if (col.key == null) continue;
205
+ var initial = (_a = col.defaultFilteredValue) !== null && _a !== void 0 ? _a : col.filteredValue;
206
+ if (initial !== undefined) {
207
+ state[String(col.key)] = initial !== null && initial !== void 0 ? initial : null;
208
+ }
209
+ }
210
+ } catch (err) {
211
+ _iterator4.e(err);
212
+ } finally {
213
+ _iterator4.f();
214
+ }
215
+ return state;
216
+ };
217
+ var getControlledFilters = function getControlledFilters(columns) {
218
+ var leaves = flattenColumns(columns);
219
+ var hasControlled = false;
220
+ var state = {};
221
+ var _iterator5 = _createForOfIteratorHelper(leaves),
222
+ _step5;
223
+ try {
224
+ for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
225
+ var col = _step5.value;
226
+ if (col.key == null) continue;
227
+ if (col.filteredValue !== undefined) {
228
+ hasControlled = true;
229
+ state[String(col.key)] = col.filteredValue;
230
+ }
231
+ }
232
+ } catch (err) {
233
+ _iterator5.e(err);
234
+ } finally {
235
+ _iterator5.f();
236
+ }
237
+ return hasControlled ? state : undefined;
238
+ };
239
+ /**
240
+ * Returns a value whose reference is preserved across renders as long as the
241
+ * shallow contents are unchanged (per `equal`). Used to stabilise the derived
242
+ * controlled candidates fed to `useControlledState` — they would otherwise be
243
+ * fresh objects every render and thrash the hook's internal `useLayoutEffect`.
244
+ */
245
+ function useStableRef(value, equal) {
246
+ var ref = (0, _react.useRef)(value);
247
+ if (!equal(ref.current, value)) {
248
+ ref.current = value;
249
+ }
250
+ return ref.current;
251
+ }
252
+ function sorterEqual(a, b) {
253
+ if (a === b) return true;
254
+ if (!a || !b) return false;
255
+ return a.columnKey === b.columnKey && a.order === b.order;
256
+ }
257
+ function filterValueEqual(a, b) {
258
+ if (a === b) return true;
259
+ if (!a || !b) return false;
260
+ if (a.length !== b.length) return false;
261
+ for (var i = 0; i < a.length; i++) {
262
+ if (a[i] !== b[i]) return false;
263
+ }
264
+ return true;
265
+ }
266
+ function filtersEqual(a, b) {
267
+ if (a === b) return true;
268
+ if (!a || !b) return false;
269
+ var keysA = Object.keys(a);
270
+ var keysB = Object.keys(b);
271
+ if (keysA.length !== keysB.length) return false;
272
+ for (var _i = 0, _keysA = keysA; _i < _keysA.length; _i++) {
273
+ var key = _keysA[_i];
274
+ if (!filterValueEqual(a[key], b[key])) return false;
275
+ }
276
+ return true;
277
+ }
278
+ var useTableDataPipeline = exports.useTableDataPipeline = function useTableDataPipeline(_ref3) {
279
+ var columns = _ref3.columns,
280
+ dataSource = _ref3.dataSource,
281
+ pagination = _ref3.pagination,
282
+ onChange = _ref3.onChange;
171
283
  var _a, _b, _c, _d;
172
- var _useControlledState = (0, _hooks.useControlledState)(getInitialSorter(columns), getControlledSorter(columns)),
284
+ // Sorter / filters are "derived controlled" — the controlled value is built
285
+ // by scanning column props (`sortOrder` / `filteredValue`), so `getControlled*`
286
+ // returns a fresh object every render even when the underlying inputs are
287
+ // unchanged. Without stabilisation, `useControlledState`'s internal
288
+ // `useLayoutEffect([value])` would re-sync on every render → infinite loop.
289
+ // Pin the reference via a shallow-equal ref.
290
+ var controlledSorter = useStableRef(getControlledSorter(columns), sorterEqual);
291
+ var controlledFilters = useStableRef(getControlledFilters(columns), filtersEqual);
292
+ var _useControlledState = (0, _hooks.useControlledState)(getInitialSorter(columns), controlledSorter),
173
293
  _useControlledState2 = (0, _slicedToArray2["default"])(_useControlledState, 2),
174
294
  sorter = _useControlledState2[0],
175
295
  setSorter = _useControlledState2[1];
176
- var _useControlledState3 = (0, _hooks.useControlledState)(pagination === false ? 1 : (_b = (_a = pagination === null || pagination === void 0 ? void 0 : pagination.defaultCurrent) !== null && _a !== void 0 ? _a : pagination === null || pagination === void 0 ? void 0 : pagination.current) !== null && _b !== void 0 ? _b : 1, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.current),
296
+ var _useControlledState3 = (0, _hooks.useControlledState)(getInitialFilters(columns), controlledFilters),
177
297
  _useControlledState4 = (0, _slicedToArray2["default"])(_useControlledState3, 2),
178
- current = _useControlledState4[0],
179
- setCurrent = _useControlledState4[1];
180
- var _useControlledState5 = (0, _hooks.useControlledState)(pagination === false ? 10 : (_d = (_c = pagination === null || pagination === void 0 ? void 0 : pagination.defaultPageSize) !== null && _c !== void 0 ? _c : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) !== null && _d !== void 0 ? _d : 10, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize),
298
+ filters = _useControlledState4[0],
299
+ setFilters = _useControlledState4[1];
300
+ var _useControlledState5 = (0, _hooks.useControlledState)(pagination === false ? 1 : (_b = (_a = pagination === null || pagination === void 0 ? void 0 : pagination.defaultCurrent) !== null && _a !== void 0 ? _a : pagination === null || pagination === void 0 ? void 0 : pagination.current) !== null && _b !== void 0 ? _b : 1, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.current),
181
301
  _useControlledState6 = (0, _slicedToArray2["default"])(_useControlledState5, 2),
182
- pageSize = _useControlledState6[0],
183
- setPageSize = _useControlledState6[1];
302
+ current = _useControlledState6[0],
303
+ setCurrent = _useControlledState6[1];
304
+ var _useControlledState7 = (0, _hooks.useControlledState)(pagination === false ? 10 : (_d = (_c = pagination === null || pagination === void 0 ? void 0 : pagination.defaultPageSize) !== null && _c !== void 0 ? _c : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize) !== null && _d !== void 0 ? _d : 10, pagination === false ? undefined : pagination === null || pagination === void 0 ? void 0 : pagination.pageSize),
305
+ _useControlledState8 = (0, _slicedToArray2["default"])(_useControlledState7, 2),
306
+ pageSize = _useControlledState8[0],
307
+ setPageSize = _useControlledState8[1];
184
308
  var mergedPagination = pagination === false ? false : {
185
309
  current: current,
186
310
  pageSize: pageSize
@@ -208,9 +332,19 @@ var useTableDataPipeline = exports.useTableDataPipeline = function useTableDataP
208
332
  columns: columns,
209
333
  dataSource: dataSource,
210
334
  sorter: sorter,
335
+ filters: filters,
211
336
  pagination: mergedPagination
212
337
  });
213
- }, [columns, dataSource, sorter, mergedPagination]);
338
+ }, [columns, dataSource, sorter, filters, mergedPagination]);
339
+ var emitChange = (0, _hooks.useMemoizedFn)(function (nextDataSource, action, nextState) {
340
+ onChange === null || onChange === void 0 ? void 0 : onChange({
341
+ currentDataSource: nextDataSource,
342
+ action: action,
343
+ sorter: nextState.sorter,
344
+ filters: nextState.filters,
345
+ pagination: nextState.pagination
346
+ });
347
+ });
214
348
  // useMemoizedFn: stable ref, always calls latest closure — no stale deps risk
215
349
  var wrappedSetSorter = (0, _hooks.useMemoizedFn)(function (updater) {
216
350
  var nextSorter = typeof updater === 'function' ? updater(sorter) : updater;
@@ -228,11 +362,39 @@ var useTableDataPipeline = exports.useTableDataPipeline = function useTableDataP
228
362
  columns: columns,
229
363
  dataSource: dataSource,
230
364
  sorter: nextSorter,
365
+ filters: filters,
231
366
  pagination: resetPagination
232
367
  });
233
- onChange({
234
- currentDataSource: nextResult.currentDataSource,
235
- action: 'sort'
368
+ emitChange(nextResult.currentDataSource, 'sort', {
369
+ sorter: nextSorter,
370
+ filters: filters,
371
+ pagination: resetPagination
372
+ });
373
+ }
374
+ });
375
+ var wrappedSetFilters = (0, _hooks.useMemoizedFn)(function (updater) {
376
+ var nextFilters = typeof updater === 'function' ? updater(filters) : updater;
377
+ setFilters(nextFilters);
378
+ // Reset pagination to page 1 when filters change
379
+ if (mergedPagination !== false) {
380
+ setCurrent(1);
381
+ }
382
+ if (onChange) {
383
+ var resetPagination = mergedPagination === false ? false : {
384
+ current: 1,
385
+ pageSize: pageSize
386
+ };
387
+ var nextResult = applyTablePipeline({
388
+ columns: columns,
389
+ dataSource: dataSource,
390
+ sorter: sorter,
391
+ filters: nextFilters,
392
+ pagination: resetPagination
393
+ });
394
+ emitChange(nextResult.currentDataSource, 'filter', {
395
+ sorter: sorter,
396
+ filters: nextFilters,
397
+ pagination: resetPagination
236
398
  });
237
399
  }
238
400
  });
@@ -250,20 +412,24 @@ var useTableDataPipeline = exports.useTableDataPipeline = function useTableDataP
250
412
  columns: columns,
251
413
  dataSource: dataSource,
252
414
  sorter: sorter,
415
+ filters: filters,
253
416
  pagination: nextValue
254
417
  });
255
- onChange({
256
- currentDataSource: nextResult.currentDataSource,
257
- action: 'paginate'
418
+ emitChange(nextResult.currentDataSource, 'paginate', {
419
+ sorter: sorter,
420
+ filters: filters,
421
+ pagination: nextValue
258
422
  });
259
423
  }
260
424
  });
261
425
  return Object.assign(Object.assign({}, result), {
262
426
  sorter: sorter,
263
427
  sorterStates: sorterStates,
428
+ filters: filters,
264
429
  pagination: mergedPagination,
265
430
  setSorter: wrappedSetSorter,
431
+ setFilters: wrappedSetFilters,
266
432
  setPagination: wrappedSetPagination
267
433
  });
268
434
  };
269
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX2hvb2tzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJpc0NvbHVtbkdyb3VwIiwiY29sIiwiY2hpbGRyZW4iLCJmbGF0dGVuQ29sdW1ucyIsImNvbHVtbnMiLCJyZXN1bHQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInB1c2giLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJlcnIiLCJnZXRTb3J0RnVuY3Rpb24iLCJzb3J0ZXIiLCJfdHlwZW9mMiIsImNvbXBhcmUiLCJnZXRNdWx0aXBsZVByaW9yaXR5IiwiY29sdW1uIiwibXVsdGlwbGUiLCJhcHBseVNvcnRUb0RhdGEiLCJkYXRhIiwic29ydGVyU3RhdGVzIiwic29ydGVkIiwicnVubmluZ1NvcnRlcnMiLCJtYXAiLCJzdGF0ZSIsImZpbmQiLCJrZXkiLCJjb2x1bW5LZXkiLCJjb21wYXJlRm4iLCJwcmlvcml0eSIsIm9yZGVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJiIiwiYXAiLCJicCIsInJlY29yZDEiLCJyZWNvcmQyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9zdGVwMiR2YWx1ZSIsImFwcGx5VGFibGVQaXBlbGluZSIsImV4cG9ydHMiLCJfcmVmIiwiZGF0YVNvdXJjZSIsInBhZ2luYXRpb24iLCJsZWFmQ29sdW1ucyIsImN1cnJlbnREYXRhU291cmNlIiwidG90YWwiLCJzdGFydCIsImN1cnJlbnQiLCJwYWdlU2l6ZSIsImVuZCIsImNvbGxlY3RTb3J0ZXJTdGF0ZXMiLCJfYSIsImxlYXZlcyIsInN0YXRlcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJzb3J0T3JkZXIiLCJkZWZhdWx0U29ydE9yZGVyIiwiZ2V0SW5pdGlhbFNvcnRlciIsImdldENvbnRyb2xsZWRTb3J0ZXIiLCJjb250cm9sbGVkQ29sdW1uIiwidW5kZWZpbmVkIiwidXNlVGFibGVEYXRhUGlwZWxpbmUiLCJfcmVmMiIsIm9uQ2hhbmdlIiwiX2IiLCJfYyIsIl9kIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsIl91c2VDb250cm9sbGVkU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2V0U29ydGVyIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTMiLCJkZWZhdWx0Q3VycmVudCIsIl91c2VDb250cm9sbGVkU3RhdGU0Iiwic2V0Q3VycmVudCIsIl91c2VDb250cm9sbGVkU3RhdGU1IiwiZGVmYXVsdFBhZ2VTaXplIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTYiLCJzZXRQYWdlU2l6ZSIsIm1lcmdlZFBhZ2luYXRpb24iLCJ1c2VNZW1vIiwicHJpbWFyeSIsImFkZGl0aW9uYWwiLCJjb25jYXQiLCJ3cmFwcGVkU2V0U29ydGVyIiwidXNlTWVtb2l6ZWRGbiIsInVwZGF0ZXIiLCJuZXh0U29ydGVyIiwicmVzZXRQYWdpbmF0aW9uIiwibmV4dFJlc3VsdCIsImFjdGlvbiIsIndyYXBwZWRTZXRQYWdpbmF0aW9uIiwiY3VycmVudFZhbHVlIiwibmV4dFZhbHVlIiwiT2JqZWN0IiwiYXNzaWduIiwic2V0UGFnaW5hdGlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEs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LFVBQVUsS0FBSyxLQUFLLEVBQUU7SUFFMUIsSUFBTW9ELFlBQVksR0FBRztNQUFFL0MsT0FBTyxFQUFQQSxPQUFPO01BQUVDLFFBQVEsRUFBUkE7SUFBUSxDQUFFO0lBQzFDLElBQU0rQyxTQUFTLEdBQUcsT0FBT1AsT0FBTyxLQUFLLFVBQVUsR0FBR0EsT0FBTyxDQUFDTSxZQUFZLENBQUMsR0FBR04sT0FBTztJQUVqRlosVUFBVSxDQUFDbUIsU0FBUyxDQUFDaEQsT0FBTyxDQUFDO0lBQzdCaUMsV0FBVyxDQUFDZSxTQUFTLENBQUMvQyxRQUFRLENBQUM7SUFFL0IsSUFBSWdCLFFBQVEsRUFBRTtNQUNaLElBQU0yQixVQUFVLEdBQUdyRCxrQkFBa0IsQ0FBQztRQUNwQ3ZDLE9BQU8sRUFBUEEsT0FBTztRQUNQMEMsVUFBVSxFQUFWQSxVQUFVO1FBQ1ZqQyxNQUFNLEVBQU5BLE1BQU07UUFDTmtDLFVBQVUsRUFBRXFEO01DdEdWLENEdUdILENBQUM7TUFDRi9CLFFBQVEsQ0FBQztRQUFFcEIsaUJBQWlCLEVBQUUrQyxVQUFVLENBQUMvQyxpQkFBaUI7UUFBRWdELE1BQU0sRUFBRTtNQUFVLENBQUUsQ0FBQztJQUNuRjtFQUNGLENBQUMsQ0FDRjtFQUVELE9BQUFJLE1BQUEsQ0FBQUMsTUFBQSxDQUFBRCxNQUFBLENBQUFDLE1BQUEsQ0FBQSxDQUFBLENBQUEsRUFDS2pHLE1BQU0sQ0FBQSxFQUFBO0lBQ1RRLE1BQU0sRUFBTkEsTUFBTTtJQUNOUSxZQUFZLEVBQVpBLFlBQVk7SUFDWjBCLFVBQVUsRUFBRXVDLGdCQUFnQjtJQUM1QlQsU0FBUyxFQUFFYyxnQkFBZ0I7SUFDM0JZLGFBQWEsRUFBRUw7RUFBb0IsQ0FBQSxDQUFBO0FBRXZDLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlRGF0YVBpcGVsaW5lLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlLCB1c2VNZW1vaXplZEZuIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5mdW5jdGlvbiBpc0NvbHVtbkdyb3VwKGNvbCkge1xuICAgIHJldHVybiAnY2hpbGRyZW4nIGluIGNvbCAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbik7XG59XG5mdW5jdGlvbiBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoaXNDb2x1bW5Hcm91cChjb2wpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVuQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFNvcnRGdW5jdGlvbihzb3J0ZXIpIHtcbiAgICBpZiAodHlwZW9mIHNvcnRlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIHNvcnRlcjtcbiAgICBpZiAoc29ydGVyICYmIHR5cGVvZiBzb3J0ZXIgPT09ICdvYmplY3QnICYmICdjb21wYXJlJyBpbiBzb3J0ZXIpXG4gICAgICAgIHJldHVybiBzb3J0ZXIuY29tcGFyZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRNdWx0aXBsZVByaW9yaXR5KGNvbHVtbikge1xuICAgIGlmIChjb2x1bW4uc29ydGVyICYmIHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAnb2JqZWN0JyAmJiAnbXVsdGlwbGUnIGluIGNvbHVtbi5zb3J0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5zb3J0ZXIubXVsdGlwbGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFwcGx5U29ydFRvRGF0YShkYXRhLCBjb2x1bW5zLCBzb3J0ZXJTdGF0ZXMpIHtcbiAgICBpZiAoc29ydGVyU3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRhdGFdO1xuICAgIGNvbnN0IHJ1bm5pbmdTb3J0ZXJzID0gc29ydGVyU3RhdGVzXG4gICAgICAgIC5tYXAoKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wua2V5ID09PSBzdGF0ZS5jb2x1bW5LZXkpO1xuICAgICAgICBpZiAoIWNvbHVtbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjb21wYXJlRm4gPSBnZXRTb3J0RnVuY3Rpb24oY29sdW1uLnNvcnRlcik7XG4gICAgICAgIGlmICghY29tcGFyZUZuKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TXVsdGlwbGVQcmlvcml0eShjb2x1bW4pO1xuICAgICAgICByZXR1cm4geyBjb21wYXJlRm4sIG9yZGVyOiBzdGF0ZS5vcmRlciwgcHJpb3JpdHkgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChydW5uaW5nU29ydGVycy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIC8vIEhpZ2hlciBwcmlvcml0eSBudW1iZXIgPSBjb21wYXJlZCBmaXJzdFxuICAgIHJ1bm5pbmdTb3J0ZXJzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYXAgPSB0eXBlb2YgYS5wcmlvcml0eSA9PT0gJ251bWJlcicgPyBhLnByaW9yaXR5IDogMDtcbiAgICAgICAgY29uc3QgYnAgPSB0eXBlb2YgYi5wcmlvcml0eSA9PT0gJ251bWJlcicgPyBiLnByaW9yaXR5IDogMDtcbiAgICAgICAgcmV0dXJuIGJwIC0gYXA7XG4gICAgfSk7XG4gICAgc29ydGVkLnNvcnQoKHJlY29yZDEsIHJlY29yZDIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IGNvbXBhcmVGbiwgb3JkZXIgfSBvZiBydW5uaW5nU29ydGVycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZUZuKHJlY29yZDEsIHJlY29yZDIpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmRlciA9PT0gJ2FzY2VuZCcgPyByZXN1bHQgOiAtcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIHJldHVybiBzb3J0ZWQ7XG59XG5leHBvcnQgY29uc3QgYXBwbHlUYWJsZVBpcGVsaW5lID0gKHsgY29sdW1ucywgZGF0YVNvdXJjZSwgc29ydGVyLCBwYWdpbmF0aW9uLCB9KSA9PiB7XG4gICAgY29uc3Qgc29ydGVyU3RhdGVzID0gc29ydGVyLmNvbHVtbktleSAhPSBudWxsICYmIHNvcnRlci5vcmRlclxuICAgICAgICA/IFt7IGNvbHVtbktleTogc29ydGVyLmNvbHVtbktleSwgb3JkZXI6IHNvcnRlci5vcmRlciB9XVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IGxlYWZDb2x1bW5zID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3Qgc29ydGVkID0gYXBwbHlTb3J0VG9EYXRhKGRhdGFTb3VyY2UsIGxlYWZDb2x1bW5zLCBzb3J0ZXJTdGF0ZXMpO1xuICAgIGlmICghcGFnaW5hdGlvbikge1xuICAgICAgICByZXR1cm4geyBjdXJyZW50RGF0YVNvdXJjZTogc29ydGVkLCB0b3RhbDogc29ydGVkLmxlbmd0aCB9O1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IChwYWdpbmF0aW9uLmN1cnJlbnQgLSAxKSAqIHBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgY29uc3QgZW5kID0gc3RhcnQgKyBwYWdpbmF0aW9uLnBhZ2VTaXplO1xuICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnREYXRhU291cmNlOiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIGVuZCksXG4gICAgICAgIHRvdGFsOiBzb3J0ZWQubGVuZ3RoLFxuICAgIH07XG59O1xuZnVuY3Rpb24gY29sbGVjdFNvcnRlclN0YXRlcyhjb2x1bW5zKSB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgIGNvbnN0IHN0YXRlcyA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGxlYXZlcykge1xuICAgICAgICBjb25zdCBvcmRlciA9IChfYSA9IGNvbC5zb3J0T3JkZXIpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbC5kZWZhdWx0U29ydE9yZGVyO1xuICAgICAgICBpZiAoY29sLmtleSAhPSBudWxsICYmIG9yZGVyKSB7XG4gICAgICAgICAgICBzdGF0ZXMucHVzaCh7IGNvbHVtbktleTogY29sLmtleSwgb3JkZXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlcztcbn1cbmNvbnN0IGdldEluaXRpYWxTb3J0ZXIgPSAoY29sdW1ucykgPT4ge1xuICAgIGNvbnN0IHN0YXRlcyA9IGNvbGxlY3RTb3J0ZXJTdGF0ZXMoY29sdW1ucyk7XG4gICAgaWYgKHN0YXRlcy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB7fTtcbiAgICByZXR1cm4geyBjb2x1bW5LZXk6IHN0YXRlc1swXS5jb2x1bW5LZXksIG9yZGVyOiBzdGF0ZXNbMF0ub3JkZXIgfTtcbn07XG5jb25zdCBnZXRDb250cm9sbGVkU29ydGVyID0gKGNvbHVtbnMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3QgY29udHJvbGxlZENvbHVtbiA9IGxlYXZlcy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5zb3J0T3JkZXIgIT09IHVuZGVmaW5lZCk7XG4gICAgaWYgKCFjb250cm9sbGVkQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGNvbHVtbktleTogY29udHJvbGxlZENvbHVtbi5rZXksXG4gICAgICAgIG9yZGVyOiAoX2EgPSBjb250cm9sbGVkQ29sdW1uLnNvcnRPcmRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbCxcbiAgICB9O1xufTtcbmV4cG9ydCBjb25zdCB1c2VUYWJsZURhdGFQaXBlbGluZSA9ICh7IGNvbHVtbnMsIGRhdGFTb3VyY2UsIHBhZ2luYXRpb24sIG9uQ2hhbmdlLCB9KSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIGNvbnN0IFtzb3J0ZXIsIHNldFNvcnRlcl0gPSB1c2VDb250cm9sbGVkU3RhdGUoZ2V0SW5pdGlhbFNvcnRlcihjb2x1bW5zKSwgZ2V0Q29udHJvbGxlZFNvcnRlcihjb2x1bW5zKSk7XG4gICAgY29uc3QgW2N1cnJlbnQsIHNldEN1cnJlbnRdID0gdXNlQ29udHJvbGxlZFN0YXRlKHBhZ2luYXRpb24gPT09IGZhbHNlID8gMSA6ICgoX2IgPSAoX2EgPSBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uZGVmYXVsdEN1cnJlbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5jdXJyZW50KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxKSwgcGFnaW5hdGlvbiA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uY3VycmVudCk7XG4gICAgY29uc3QgW3BhZ2VTaXplLCBzZXRQYWdlU2l6ZV0gPSB1c2VDb250cm9sbGVkU3RhdGUocGFnaW5hdGlvbiA9PT0gZmFsc2UgPyAxMCA6ICgoX2QgPSAoX2MgPSBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24uZGVmYXVsdFBhZ2VTaXplKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24ucGFnZVNpemUpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDEwKSwgcGFnaW5hdGlvbiA9PT0gZmFsc2UgPyB1bmRlZmluZWQgOiBwYWdpbmF0aW9uID09PSBudWxsIHx8IHBhZ2luYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhZ2luYXRpb24ucGFnZVNpemUpO1xuICAgIGNvbnN0IG1lcmdlZFBhZ2luYXRpb24gPSBwYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICA/IGZhbHNlXG4gICAgICAgIDogeyBjdXJyZW50LCBwYWdlU2l6ZSB9O1xuICAgIGNvbnN0IHNvcnRlclN0YXRlcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICAvLyBTdGFydCB3aXRoIHRoZSBwcmltYXJ5IHVzZXItdG9nZ2xlZCBzb3J0ZXJcbiAgICAgICAgY29uc3QgcHJpbWFyeSA9IHNvcnRlci5jb2x1bW5LZXkgIT0gbnVsbCAmJiBzb3J0ZXIub3JkZXJcbiAgICAgICAgICAgID8gW3sgY29sdW1uS2V5OiBzb3J0ZXIuY29sdW1uS2V5LCBvcmRlcjogc29ydGVyLm9yZGVyIH1dXG4gICAgICAgICAgICA6IFtdO1xuICAgICAgICAvLyBDb2xsZWN0IGFueSBvdGhlciBjb2x1bW5zIHRoYXQgaGF2ZSBhIGNvbnRyb2xsZWQgc29ydE9yZGVyIChmb3IgbXVsdGktc29ydClcbiAgICAgICAgY29uc3QgbGVhZkNvbHVtbnMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICAgICAgY29uc3QgYWRkaXRpb25hbCA9IGxlYWZDb2x1bW5zXG4gICAgICAgICAgICAuZmlsdGVyKChjb2wpID0+IGNvbC5rZXkgIT0gbnVsbCAmJiBjb2wuc29ydE9yZGVyICYmIGNvbC5rZXkgIT09IHNvcnRlci5jb2x1bW5LZXkpXG4gICAgICAgICAgICAubWFwKChjb2wpID0+ICh7IGNvbHVtbktleTogY29sLmtleSwgb3JkZXI6IGNvbC5zb3J0T3JkZXIgfSkpO1xuICAgICAgICByZXR1cm4gWy4uLnByaW1hcnksIC4uLmFkZGl0aW9uYWxdO1xuICAgIH0sIFtzb3J0ZXIsIGNvbHVtbnNdKTtcbiAgICBjb25zdCByZXN1bHQgPSB1c2VNZW1vKCgpID0+IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgIGNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgIHNvcnRlcixcbiAgICAgICAgcGFnaW5hdGlvbjogbWVyZ2VkUGFnaW5hdGlvbixcbiAgICB9KSwgW2NvbHVtbnMsIGRhdGFTb3VyY2UsIHNvcnRlciwgbWVyZ2VkUGFnaW5hdGlvbl0pO1xuICAgIC8vIHVzZU1lbW9pemVkRm46IHN0YWJsZSByZWYsIGFsd2F5cyBjYWxscyBsYXRlc3QgY2xvc3VyZSDigJQgbm8gc3RhbGUgZGVwcyByaXNrXG4gICAgY29uc3Qgd3JhcHBlZFNldFNvcnRlciA9IHVzZU1lbW9pemVkRm4oKHVwZGF0ZXIpID0+IHtcbiAgICAgICAgY29uc3QgbmV4dFNvcnRlciA9IHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihzb3J0ZXIpIDogdXBkYXRlcjtcbiAgICAgICAgc2V0U29ydGVyKG5leHRTb3J0ZXIpO1xuICAgICAgICAvLyBSZXNldCBwYWdpbmF0aW9uIHRvIHBhZ2UgMSB3aGVuIHNvcnRpbmcgY2hhbmdlc1xuICAgICAgICBpZiAobWVyZ2VkUGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHNldEN1cnJlbnQoMSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCByZXNldFBhZ2luYXRpb24gPSBtZXJnZWRQYWdpbmF0aW9uID09PSBmYWxzZVxuICAgICAgICAgICAgICAgID8gZmFsc2VcbiAgICAgICAgICAgICAgICA6IHsgY3VycmVudDogMSwgcGFnZVNpemUgfTtcbiAgICAgICAgICAgIGNvbnN0IG5leHRSZXN1bHQgPSBhcHBseVRhYmxlUGlwZWxpbmUoe1xuICAgICAgICAgICAgICAgIGNvbHVtbnMsXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICBzb3J0ZXI6IG5leHRTb3J0ZXIsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcmVzZXRQYWdpbmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBvbkNoYW5nZSh7IGN1cnJlbnREYXRhU291cmNlOiBuZXh0UmVzdWx0LmN1cnJlbnREYXRhU291cmNlLCBhY3Rpb246ICdzb3J0JyB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHdyYXBwZWRTZXRQYWdpbmF0aW9uID0gdXNlTWVtb2l6ZWRGbigodXBkYXRlcikgPT4ge1xuICAgICAgICBpZiAocGFnaW5hdGlvbiA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IHsgY3VycmVudCwgcGFnZVNpemUgfTtcbiAgICAgICAgY29uc3QgbmV4dFZhbHVlID0gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKGN1cnJlbnRWYWx1ZSkgOiB1cGRhdGVyO1xuICAgICAgICBzZXRDdXJyZW50KG5leHRWYWx1ZS5jdXJyZW50KTtcbiAgICAgICAgc2V0UGFnZVNpemUobmV4dFZhbHVlLnBhZ2VTaXplKTtcbiAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBuZXh0UmVzdWx0ID0gYXBwbHlUYWJsZVBpcGVsaW5lKHtcbiAgICAgICAgICAgICAgICBjb2x1bW5zLFxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICAgICAgc29ydGVyLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IG5leHRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgb25DaGFuZ2UoeyBjdXJyZW50RGF0YVNvdXJjZTogbmV4dFJlc3VsdC5jdXJyZW50RGF0YVNvdXJjZSwgYWN0aW9uOiAncGFnaW5hdGUnIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcmVzdWx0KSwgeyBzb3J0ZXIsXG4gICAgICAgIHNvcnRlclN0YXRlcywgcGFnaW5hdGlvbjogbWVyZ2VkUGFnaW5hdGlvbiwgc2V0U29ydGVyOiB3cmFwcGVkU2V0U29ydGVyLCBzZXRQYWdpbmF0aW9uOiB3cmFwcGVkU2V0UGFnaW5hdGlvbiB9KTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
435
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS5qcyJdLCJuYW1lcyI6WyJfcmVhY3QiLCJyZXF1aXJlIiwiX2hvb2tzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJpc0NvbHVtbkdyb3VwIiwiY29sIiwiY2hpbGRyZW4iLCJmbGF0dGVuQ29sdW1ucyIsImNvbHVtbnMiLCJyZXN1bHQiLCJfaXRlcmF0b3IiLCJfc3RlcCIsInB1c2giLCJhcHBseSIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJlcnIiLCJnZXRTb3J0RnVuY3Rpb24iLCJzb3J0ZXIiLCJfdHlwZW9mMiIsImNvbXBhcmUiLCJnZXRNdWx0aXBsZVByaW9yaXR5IiwiY29sdW1uIiwibXVsdGlwbGUiLCJhcHBseVNvcnRUb0RhdGEiLCJkYXRhIiwic29ydGVyU3RhdGVzIiwic29ydGVkIiwicnVubmluZ1NvcnRlcnMiLCJtYXAiLCJzdGF0ZSIsImZpbmQiLCJrZXkiLCJjb2x1bW5LZXkiLCJjb21wYXJlRm4iLCJwcmlvcml0eSIsIm9yZGVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsInNvcnQiLCJiIiwiYXAiLCJicCIsInJlY29yZDEiLCJyZWNvcmQyIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsIl9zdGVwMiR2YWx1ZSIsImFwcGx5RmlsdGVyc1RvRGF0YSIsImZpbHRlcnMiLCJhY3RpdmVGaWx0ZXJzIiwic2VsZWN0ZWQiLCJTdHJpbmciLCJvbkZpbHRlciIsInJlY29yZCIsImV2ZXJ5IiwiX3JlZiIsInNvbWUiLCJhcHBseVRhYmxlUGlwZWxpbmUiLCJleHBvcnRzIiwiX3JlZjIiLCJkYXRhU291cmNlIiwiX3JlZjIkZmlsdGVycyIsInBhZ2luYXRpb24iLCJsZWFmQ29sdW1ucyIsImZpbHRlcmVkIiwiY3VycmVudERhdGFTb3VyY2UiLCJ0b3RhbCIsInN0YXJ0IiwiY3VycmVudCIsInBhZ2VTaXplIiwiZW5kIiwiY29sbGVjdFNvcnRlclN0YXRlcyIsIl9hIiwibGVhdmVzIiwic3RhdGVzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsInNvcnRPcmRlciIsImRlZmF1bHRTb3J0T3JkZXIiLCJnZXRJbml0aWFsU29ydGVyIiwiZ2V0Q29udHJvbGxlZFNvcnRlciIsImNvbnRyb2xsZWRDb2x1bW4iLCJ1bmRlZmluZWQiLCJnZXRJbml0aWFsRmlsdGVycyIsIl9pdGVyYXRvcjQiLCJfc3RlcDQiLCJpbml0aWFsIiwiZGVmYXVsdEZpbHRlcmVkVmFsdWUiLCJmaWx0ZXJlZFZhbHVlIiwiZ2V0Q29udHJvbGxlZEZpbHRlcnMiLCJoYXNDb250cm9sbGVkIiwiX2l0ZXJhdG9yNSIsIl9zdGVwNSIsInVzZVN0YWJsZVJlZiIsImVxdWFsIiwicmVmIiwidXNlUmVmIiwic29ydGVyRXF1YWwiLCJmaWx0ZXJWYWx1ZUVxdWFsIiwiaSIsImZpbHRlcnNFcXVhbCIsImtleXNBIiwiT2JqZWN0Iiwia2V5cyIsImtleXNCIiwiX2kiLCJfa2V5c0EiLCJ1c2VUYWJsZURhdGFQaXBlbGluZSIsIl9yZWYzIiwib25DaGFuZ2UiLCJfYiIsIl9jIiwiX2QiLCJjb250cm9sbGVkU29ydGVyIiwiY29udHJvbGxlZEZpbHRlcnMiLCJfdXNlQ29udHJvbGxlZFN0YXRlIiwidXNlQ29udHJvbGxlZFN0YXRlIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJzZXRTb3J0ZXIiLCJfdXNlQ29udHJvbGxlZFN0YXRlMyIsIl91c2VDb250cm9sbGVkU3RhdGU0Iiwic2V0RmlsdGVycyIsIl91c2VDb250cm9sbGVkU3RhdGU1IiwiZGVmYXVsdEN1cnJlbnQiLCJfdXNlQ29udHJvbGxlZFN0YXRlNiIsInNldEN1cnJlbnQiLCJfdXNlQ29udHJvbGxlZFN0YXRlNyIsImRlZmF1bHRQYWdlU2l6ZSIsIl91c2VDb250cm9sbGVkU3RhdGU4Iiwic2V0UGFnZVNpemUiLCJtZXJnZWRQYWdpbmF0aW9uIiwidXNlTWVtbyIsInByaW1hcnkiLCJhZGRpdGlvbmFsIiwiY29uY2F0IiwiZW1pdENoYW5nZSIsInVzZU1lbW9pemVkRm4iLCJuZXh0RGF0YVNvdXJjZSIsImFjdGlvbiIsIm5leHRTdGF0ZSIsIndyYXBwZWRTZXRTb3J0ZXIiLCJ1cGRhdGVyIiwibmV4dFNvcnRlciIsInJlc2V0UGFnaW5hdGlvbiIsIm5leHRSZXN1bHQiLCJ3cmFwcGVkU2V0RmlsdGVycyIsIm5leHRGaWx0ZXJzIiwid3JhcHBlZFNldFBhZ2luYXRpb24iLCJjdXJyZW50VmFsdWUiLCJuZXh0VmFsdWUiLCJhc3NpZ24iLCJzZXRQYWdpbmF0aW9uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBRCxPQUFBO0FBQWtFLFNBQUFFLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1B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Q3dCLFNBQVMsQ0FBQ2xGLE9BQU8sQ0FBQztJQUM3QjhELFdBQVcsQ0FBQ29CLFNBQVMsQ0FBQ2pGLFFBQVEsQ0FBQztJQUUvQixJQUFJd0MsUUFBUSxFQUFFO01BQ1osSUFBTW9DLFVBQVUsR0FBR3hGLGtCQUFrQixDQUFDO1FBQ3BDakQsT0FBTyxFQUFQQSxPQUFPO1FBQ1BvRCxVQUFVLEVBQVZBLFVBQVU7UUFDVjNDLE1BQU0sRUFBTkEsTUFBTTtRQUNOK0IsT0FBTyxFQUFQQSxPQUFPO1FBQ1BjLFVBQVUsRUFBRXdGO01DeEtWLENEeUtILENBQUM7TUFDRmQsVUFBVSxDQUFDUyxVQUFVLENBQUNoRixpQkFBaUIsRUFBRSxVQUFVLEVBQUU7UUFDbkRoRCxNQUFNLEVBQU5BLE1BQU07UUFDTitCLE9BQU8sRUFBUEEsT0FBTztRQUNQYyxVQUFVLEVBQUV3RjtNQ3hLVixDRHlLSCxDQUFDO0lBQ0o7RUFDRixDQUFDLENBQ0Y7RUFFRCxPQUFBaEQsTUFBQSxDQUFBaUQsTUFBQSxDQUFBakQsTUFBQSxDQUFBaUQsTUFBQSxDQUFBLENBQUEsQ0FBQSxFQUNLOUksTUFBTSxDQUFBLEVBQUE7SUFDVFEsTUFBTSxFQUFOQSxNQUFNO0lBQ05RLFlBQVksRUFBWkEsWUFBWTtJQUNadUIsT0FBTyxFQUFQQSxPQUFPO0lBQ1BjLFVBQVUsRUFBRXFFLGdCQUFnQjtJQUM1QlosU0FBUyxFQUFFc0IsZ0JBQWdCO0lBQzNCbkIsVUFBVSxFQUFFd0IsaUJBQWlCO0lBQzdCTSxhQUFhLEVBQUVKO0VBQW9CLENBQUEsQ0FBQTtBQUV2QyxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZURhdGFQaXBlbGluZS5qcyIsInNvdXJjZXNDb250ZW50IjpbbnVsbCwiaW1wb3J0IHsgdXNlTWVtbywgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlQ29udHJvbGxlZFN0YXRlLCB1c2VNZW1vaXplZEZuIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5mdW5jdGlvbiBpc0NvbHVtbkdyb3VwKGNvbCkge1xuICAgIHJldHVybiAnY2hpbGRyZW4nIGluIGNvbCAmJiBBcnJheS5pc0FycmF5KGNvbC5jaGlsZHJlbik7XG59XG5mdW5jdGlvbiBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICBpZiAoaXNDb2x1bW5Hcm91cChjb2wpKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi5mbGF0dGVuQ29sdW1ucyhjb2wuY2hpbGRyZW4pKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNvbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGdldFNvcnRGdW5jdGlvbihzb3J0ZXIpIHtcbiAgICBpZiAodHlwZW9mIHNvcnRlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgcmV0dXJuIHNvcnRlcjtcbiAgICBpZiAoc29ydGVyICYmIHR5cGVvZiBzb3J0ZXIgPT09ICdvYmplY3QnICYmICdjb21wYXJlJyBpbiBzb3J0ZXIpXG4gICAgICAgIHJldHVybiBzb3J0ZXIuY29tcGFyZTtcbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBnZXRNdWx0aXBsZVByaW9yaXR5KGNvbHVtbikge1xuICAgIGlmIChjb2x1bW4uc29ydGVyICYmIHR5cGVvZiBjb2x1bW4uc29ydGVyID09PSAnb2JqZWN0JyAmJiAnbXVsdGlwbGUnIGluIGNvbHVtbi5zb3J0ZXIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5zb3J0ZXIubXVsdGlwbGU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFwcGx5U29ydFRvRGF0YShkYXRhLCBjb2x1bW5zLCBzb3J0ZXJTdGF0ZXMpIHtcbiAgICBpZiAoc29ydGVyU3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgY29uc3Qgc29ydGVkID0gWy4uLmRhdGFdO1xuICAgIGNvbnN0IHJ1bm5pbmdTb3J0ZXJzID0gc29ydGVyU3RhdGVzXG4gICAgICAgIC5tYXAoKHN0YXRlKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wua2V5ID09PSBzdGF0ZS5jb2x1bW5LZXkpO1xuICAgICAgICBpZiAoIWNvbHVtbilcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjb21wYXJlRm4gPSBnZXRTb3J0RnVuY3Rpb24oY29sdW1uLnNvcnRlcik7XG4gICAgICAgIGlmICghY29tcGFyZUZuKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHByaW9yaXR5ID0gZ2V0TXVsdGlwbGVQcmlvcml0eShjb2x1bW4pO1xuICAgICAgICByZXR1cm4geyBjb21wYXJlRm4sIG9yZGVyOiBzdGF0ZS5vcmRlciwgcHJpb3JpdHkgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChydW5uaW5nU29ydGVycy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiBkYXRhO1xuICAgIC8vIEhpZ2hlciBwcmlvcml0eSBudW1iZXIgPSBjb21wYXJlZCBmaXJzdFxuICAgIHJ1bm5pbmdTb3J0ZXJzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgY29uc3QgYXAgPSB0eXBlb2YgYS5wcmlvcml0eSA9PT0gJ251bWJlcicgPyBhLnByaW9yaXR5IDogMDtcbiAgICAgICAgY29uc3QgYnAgPSB0eXBlb2YgYi5wcmlvcml0eSA9PT0gJ251bWJlcicgPyBiLnByaW9yaXR5IDogMDtcbiAgICAgICAgcmV0dXJuIGJwIC0gYXA7XG4gICAgfSk7XG4gICAgc29ydGVkLnNvcnQoKHJlY29yZDEsIHJlY29yZDIpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCB7IGNvbXBhcmVGbiwgb3JkZXIgfSBvZiBydW5uaW5nU29ydGVycykge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gY29tcGFyZUZuKHJlY29yZDEsIHJlY29yZDIpO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBvcmRlciA9PT0gJ2FzY2VuZCcgPyByZXN1bHQgOiAtcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICAgIHJldHVybiBzb3J0ZWQ7XG59XG5mdW5jdGlvbiBhcHBseUZpbHRlcnNUb0RhdGEoZGF0YSwgY29sdW1ucywgZmlsdGVycykge1xuICAgIC8vIFJlc29sdmUgd2hpY2ggY29sdW1ucyBoYXZlIGFuIGFjdGl2ZSBmaWx0ZXIgc2VsZWN0aW9uIEFORCBhIHByZWRpY2F0ZS5cbiAgICBjb25zdCBhY3RpdmVGaWx0ZXJzID0gY29sdW1uc1xuICAgICAgICAubWFwKChjb2wpID0+IHtcbiAgICAgICAgaWYgKGNvbC5rZXkgPT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBzZWxlY3RlZCA9IGZpbHRlcnNbU3RyaW5nKGNvbC5rZXkpXTtcbiAgICAgICAgaWYgKCFzZWxlY3RlZCB8fCBzZWxlY3RlZC5sZW5ndGggPT09IDApXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCFjb2wub25GaWx0ZXIpXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHsgb25GaWx0ZXI6IGNvbC5vbkZpbHRlciwgc2VsZWN0ZWQgfTtcbiAgICB9KVxuICAgICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICAgIGlmIChhY3RpdmVGaWx0ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgcmV0dXJuIGRhdGEuZmlsdGVyKChyZWNvcmQpID0+IFxuICAgIC8vIFJvdyBwYXNzZXMgb25seSBpZiBFVkVSWSBhY3RpdmUgY29sdW1uIGhhcyBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgc2VsZWN0ZWQgdmFsdWUuXG4gICAgYWN0aXZlRmlsdGVycy5ldmVyeSgoeyBvbkZpbHRlciwgc2VsZWN0ZWQgfSkgPT4gc2VsZWN0ZWQuc29tZSgodmFsdWUpID0+IG9uRmlsdGVyKHZhbHVlLCByZWNvcmQpKSkpO1xufVxuZXhwb3J0IGNvbnN0IGFwcGx5VGFibGVQaXBlbGluZSA9ICh7IGNvbHVtbnMsIGRhdGFTb3VyY2UsIHNvcnRlciwgZmlsdGVycyA9IHt9LCBwYWdpbmF0aW9uLCB9KSA9PiB7XG4gICAgY29uc3Qgc29ydGVyU3RhdGVzID0gc29ydGVyLmNvbHVtbktleSAhPSBudWxsICYmIHNvcnRlci5vcmRlclxuICAgICAgICA/IFt7IGNvbHVtbktleTogc29ydGVyLmNvbHVtbktleSwgb3JkZXI6IHNvcnRlci5vcmRlciB9XVxuICAgICAgICA6IFtdO1xuICAgIGNvbnN0IGxlYWZDb2x1bW5zID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBhcHBseUZpbHRlcnNUb0RhdGEoZGF0YVNvdXJjZSwgbGVhZkNvbHVtbnMsIGZpbHRlcnMpO1xuICAgIGNvbnN0IHNvcnRlZCA9IGFwcGx5U29ydFRvRGF0YShmaWx0ZXJlZCwgbGVhZkNvbHVtbnMsIHNvcnRlclN0YXRlcyk7XG4gICAgaWYgKCFwYWdpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiB7IGN1cnJlbnREYXRhU291cmNlOiBzb3J0ZWQsIHRvdGFsOiBzb3J0ZWQubGVuZ3RoIH07XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHBhZ2luYXRpb24uY3VycmVudCAtIDEpICogcGFnaW5hdGlvbi5wYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHBhZ2luYXRpb24ucGFnZVNpemU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudERhdGFTb3VyY2U6IHNvcnRlZC5zbGljZShzdGFydCwgZW5kKSxcbiAgICAgICAgdG90YWw6IHNvcnRlZC5sZW5ndGgsXG4gICAgfTtcbn07XG5mdW5jdGlvbiBjb2xsZWN0U29ydGVyU3RhdGVzKGNvbHVtbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgbGVhdmVzID0gZmxhdHRlbkNvbHVtbnMoY29sdW1ucyk7XG4gICAgY29uc3Qgc3RhdGVzID0gW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgbGVhdmVzKSB7XG4gICAgICAgIGNvbnN0IG9yZGVyID0gKF9hID0gY29sLnNvcnRPcmRlcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY29sLmRlZmF1bHRTb3J0T3JkZXI7XG4gICAgICAgIGlmIChjb2wua2V5ICE9IG51bGwgJiYgb3JkZXIpIHtcbiAgICAgICAgICAgIHN0YXRlcy5wdXNoKHsgY29sdW1uS2V5OiBjb2wua2V5LCBvcmRlciB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGVzO1xufVxuY29uc3QgZ2V0SW5pdGlhbFNvcnRlciA9IChjb2x1bW5zKSA9PiB7XG4gICAgY29uc3Qgc3RhdGVzID0gY29sbGVjdFNvcnRlclN0YXRlcyhjb2x1bW5zKTtcbiAgICBpZiAoc3RhdGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIHJldHVybiB7IGNvbHVtbktleTogc3RhdGVzWzBdLmNvbHVtbktleSwgb3JkZXI6IHN0YXRlc1swXS5vcmRlciB9O1xufTtcbmNvbnN0IGdldENvbnRyb2xsZWRTb3J0ZXIgPSAoY29sdW1ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBjb25zdCBjb250cm9sbGVkQ29sdW1uID0gbGVhdmVzLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLnNvcnRPcmRlciAhPT0gdW5kZWZpbmVkKTtcbiAgICBpZiAoIWNvbnRyb2xsZWRDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgY29sdW1uS2V5OiBjb250cm9sbGVkQ29sdW1uLmtleSxcbiAgICAgICAgb3JkZXI6IChfYSA9IGNvbnRyb2xsZWRDb2x1bW4uc29ydE9yZGVyKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsLFxuICAgIH07XG59O1xuY29uc3QgZ2V0SW5pdGlhbEZpbHRlcnMgPSAoY29sdW1ucykgPT4ge1xuICAgIHZhciBfYTtcbiAgICBjb25zdCBsZWF2ZXMgPSBmbGF0dGVuQ29sdW1ucyhjb2x1bW5zKTtcbiAgICBjb25zdCBzdGF0ZSA9IHt9O1xuICAgIGZvciAoY29uc3QgY29sIG9mIGxlYXZlcykge1xuICAgICAgICBpZiAoY29sLmtleSA9PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGluaXRpYWwgPSAoX2EgPSBjb2wuZGVmYXVsdEZpbHRlcmVkVmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGNvbC5maWx0ZXJlZFZhbHVlO1xuICAgICAgICBpZiAoaW5pdGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzdGF0ZVtTdHJpbmcoY29sLmtleSldID0gaW5pdGlhbCAhPT0gbnVsbCAmJiBpbml0aWFsICE9PSB2b2lkIDAgPyBpbml0aWFsIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG59O1xuY29uc3QgZ2V0Q29udHJvbGxlZEZpbHRlcnMgPSAoY29sdW1ucykgPT4ge1xuICAgIGNvbnN0IGxlYXZlcyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgIGxldCBoYXNDb250cm9sbGVkID0gZmFsc2U7XG4gICAgY29uc3Qgc3RhdGUgPSB7fTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBsZWF2ZXMpIHtcbiAgICAgICAgaWYgKGNvbC5rZXkgPT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoY29sLmZpbHRlcmVkVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaGFzQ29udHJvbGxlZCA9IHRydWU7XG4gICAgICAgICAgICBzdGF0ZVtTdHJpbmcoY29sLmtleSldID0gY29sLmZpbHRlcmVkVmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGhhc0NvbnRyb2xsZWQgPyBzdGF0ZSA6IHVuZGVmaW5lZDtcbn07XG4vKipcbiAqIFJldHVybnMgYSB2YWx1ZSB3aG9zZSByZWZlcmVuY2UgaXMgcHJlc2VydmVkIGFjcm9zcyByZW5kZXJzIGFzIGxvbmcgYXMgdGhlXG4gKiBzaGFsbG93IGNvbnRlbnRzIGFyZSB1bmNoYW5nZWQgKHBlciBgZXF1YWxgKS4gVXNlZCB0byBzdGFiaWxpc2UgdGhlIGRlcml2ZWRcbiAqIGNvbnRyb2xsZWQgY2FuZGlkYXRlcyBmZWQgdG8gYHVzZUNvbnRyb2xsZWRTdGF0ZWAg4oCUIHRoZXkgd291bGQgb3RoZXJ3aXNlIGJlXG4gKiBmcmVzaCBvYmplY3RzIGV2ZXJ5IHJlbmRlciBhbmQgdGhyYXNoIHRoZSBob29rJ3MgaW50ZXJuYWwgYHVzZUxheW91dEVmZmVjdGAuXG4gKi9cbmZ1bmN0aW9uIHVzZVN0YWJsZVJlZih2YWx1ZSwgZXF1YWwpIHtcbiAgICBjb25zdCByZWYgPSB1c2VSZWYodmFsdWUpO1xuICAgIGlmICghZXF1YWwocmVmLmN1cnJlbnQsIHZhbHVlKSkge1xuICAgICAgICByZWYuY3VycmVudCA9IHZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gcmVmLmN1cnJlbnQ7XG59XG5mdW5jdGlvbiBzb3J0ZXJFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBhLmNvbHVtbktleSA9PT0gYi5jb2x1bW5LZXkgJiYgYS5vcmRlciA9PT0gYi5vcmRlcjtcbn1cbmZ1bmN0aW9uIGZpbHRlclZhbHVlRXF1YWwoYSwgYikge1xuICAgIGlmIChhID09PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoIWEgfHwgIWIpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhW2ldICE9PSBiW2ldKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZpbHRlcnNFcXVhbChhLCBiKSB7XG4gICAgaWYgKGEgPT09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGtleXNBID0gT2JqZWN0LmtleXMoYSk7XG4gICAgY29uc3Qga2V5c0IgPSBPYmplY3Qua2V5cyhiKTtcbiAgICBpZiAoa2V5c0EubGVuZ3RoICE9PSBrZXlzQi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzQSkge1xuICAgICAgICBpZiAoIWZpbHRlclZhbHVlRXF1YWwoYVtrZXldLCBiW2tleV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbmV4cG9ydCBjb25zdCB1c2VUYWJsZURhdGFQaXBlbGluZSA9ICh7IGNvbHVtbnMsIGRhdGFTb3VyY2UsIHBhZ2luYXRpb24sIG9uQ2hhbmdlLCB9KSA9PiB7XG4gICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgIC8vIFNvcnRlciAvIGZpbHRlcnMgYXJlIFwiZGVyaXZlZCBjb250cm9sbGVkXCIg4oCUIHRoZSBjb250cm9sbGVkIHZhbHVlIGlzIGJ1aWx0XG4gICAgLy8gYnkgc2Nhbm5pbmcgY29sdW1uIHByb3BzIChgc29ydE9yZGVyYCAvIGBmaWx0ZXJlZFZhbHVlYCksIHNvIGBnZXRDb250cm9sbGVkKmBcbiAgICAvLyByZXR1cm5zIGEgZnJlc2ggb2JqZWN0IGV2ZXJ5IHJlbmRlciBldmVuIHdoZW4gdGhlIHVuZGVybHlpbmcgaW5wdXRzIGFyZVxuICAgIC8vIHVuY2hhbmdlZC4gV2l0aG91dCBzdGFiaWxpc2F0aW9uLCBgdXNlQ29udHJvbGxlZFN0YXRlYCdzIGludGVybmFsXG4gICAgLy8gYHVzZUxheW91dEVmZmVjdChbdmFsdWVdKWAgd291bGQgcmUtc3luYyBvbiBldmVyeSByZW5kZXIg4oaSIGluZmluaXRlIGxvb3AuXG4gICAgLy8gUGluIHRoZSByZWZlcmVuY2UgdmlhIGEgc2hhbGxvdy1lcXVhbCByZWYuXG4gICAgY29uc3QgY29udHJvbGxlZFNvcnRlciA9IHVzZVN0YWJsZVJlZihnZXRDb250cm9sbGVkU29ydGVyKGNvbHVtbnMpLCBzb3J0ZXJFcXVhbCk7XG4gICAgY29uc3QgY29udHJvbGxlZEZpbHRlcnMgPSB1c2VTdGFibGVSZWYoZ2V0Q29udHJvbGxlZEZpbHRlcnMoY29sdW1ucyksIGZpbHRlcnNFcXVhbCk7XG4gICAgY29uc3QgW3NvcnRlciwgc2V0U29ydGVyXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShnZXRJbml0aWFsU29ydGVyKGNvbHVtbnMpLCBjb250cm9sbGVkU29ydGVyKTtcbiAgICBjb25zdCBbZmlsdGVycywgc2V0RmlsdGVyc10gPSB1c2VDb250cm9sbGVkU3RhdGUoZ2V0SW5pdGlhbEZpbHRlcnMoY29sdW1ucyksIGNvbnRyb2xsZWRGaWx0ZXJzKTtcbiAgICBjb25zdCBbY3VycmVudCwgc2V0Q3VycmVudF0gPSB1c2VDb250cm9sbGVkU3RhdGUocGFnaW5hdGlvbiA9PT0gZmFsc2UgPyAxIDogKChfYiA9IChfYSA9IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5kZWZhdWx0Q3VycmVudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcGFnaW5hdGlvbiA9PT0gbnVsbCB8fCBwYWdpbmF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYWdpbmF0aW9uLmN1cnJlbnQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEpLCBwYWdpbmF0aW9uID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5jdXJyZW50KTtcbiAgICBjb25zdCBbcGFnZVNpemUsIHNldFBhZ2VTaXplXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShwYWdpbmF0aW9uID09PSBmYWxzZSA/IDEwIDogKChfZCA9IChfYyA9IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5kZWZhdWx0UGFnZVNpemUpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5wYWdlU2l6ZSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMTApLCBwYWdpbmF0aW9uID09PSBmYWxzZSA/IHVuZGVmaW5lZCA6IHBhZ2luYXRpb24gPT09IG51bGwgfHwgcGFnaW5hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFnaW5hdGlvbi5wYWdlU2l6ZSk7XG4gICAgY29uc3QgbWVyZ2VkUGFnaW5hdGlvbiA9IHBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgID8gZmFsc2VcbiAgICAgICAgOiB7IGN1cnJlbnQsIHBhZ2VTaXplIH07XG4gICAgY29uc3Qgc29ydGVyU3RhdGVzID0gdXNlTWVtbygoKSA9PiB7XG4gICAgICAgIC8vIFN0YXJ0IHdpdGggdGhlIHByaW1hcnkgdXNlci10b2dnbGVkIHNvcnRlclxuICAgICAgICBjb25zdCBwcmltYXJ5ID0gc29ydGVyLmNvbHVtbktleSAhPSBudWxsICYmIHNvcnRlci5vcmRlclxuICAgICAgICAgICAgPyBbeyBjb2x1bW5LZXk6IHNvcnRlci5jb2x1bW5LZXksIG9yZGVyOiBzb3J0ZXIub3JkZXIgfV1cbiAgICAgICAgICAgIDogW107XG4gICAgICAgIC8vIENvbGxlY3QgYW55IG90aGVyIGNvbHVtbnMgdGhhdCBoYXZlIGEgY29udHJvbGxlZCBzb3J0T3JkZXIgKGZvciBtdWx0aS1zb3J0KVxuICAgICAgICBjb25zdCBsZWFmQ29sdW1ucyA9IGZsYXR0ZW5Db2x1bW5zKGNvbHVtbnMpO1xuICAgICAgICBjb25zdCBhZGRpdGlvbmFsID0gbGVhZkNvbHVtbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGNvbCkgPT4gY29sLmtleSAhPSBudWxsICYmIGNvbC5zb3J0T3JkZXIgJiYgY29sLmtleSAhPT0gc29ydGVyLmNvbHVtbktleSlcbiAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4gKHsgY29sdW1uS2V5OiBjb2wua2V5LCBvcmRlcjogY29sLnNvcnRPcmRlciB9KSk7XG4gICAgICAgIHJldHVybiBbLi4ucHJpbWFyeSwgLi4uYWRkaXRpb25hbF07XG4gICAgfSwgW3NvcnRlciwgY29sdW1uc10pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHVzZU1lbW8oKCkgPT4gYXBwbHlUYWJsZVBpcGVsaW5lKHtcbiAgICAgICAgY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgc29ydGVyLFxuICAgICAgICBmaWx0ZXJzLFxuICAgICAgICBwYWdpbmF0aW9uOiBtZXJnZWRQYWdpbmF0aW9uLFxuICAgIH0pLCBbY29sdW1ucywgZGF0YVNvdXJjZSwgc29ydGVyLCBmaWx0ZXJzLCBtZXJnZWRQYWdpbmF0aW9uXSk7XG4gICAgY29uc3QgZW1pdENoYW5nZSA9IHVzZU1lbW9pemVkRm4oKG5leHREYXRhU291cmNlLCBhY3Rpb24sIG5leHRTdGF0ZSkgPT4ge1xuICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2Uoe1xuICAgICAgICAgICAgY3VycmVudERhdGFTb3VyY2U6IG5leHREYXRhU291cmNlLFxuICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgc29ydGVyOiBuZXh0U3RhdGUuc29ydGVyLFxuICAgICAgICAgICAgZmlsdGVyczogbmV4dFN0YXRlLmZpbHRlcnMsXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiBuZXh0U3RhdGUucGFnaW5hdGlvbixcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgLy8gdXNlTWVtb2l6ZWRGbjogc3RhYmxlIHJlZiwgYWx3YXlzIGNhbGxzIGxhdGVzdCBjbG9zdXJlIOKAlCBubyBzdGFsZSBkZXBzIHJpc2tcbiAgICBjb25zdCB3cmFwcGVkU2V0U29ydGVyID0gdXNlTWVtb2l6ZWRGbigodXBkYXRlcikgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U29ydGVyID0gdHlwZW9mIHVwZGF0ZXIgPT09ICdmdW5jdGlvbicgPyB1cGRhdGVyKHNvcnRlcikgOiB1cGRhdGVyO1xuICAgICAgICBzZXRTb3J0ZXIobmV4dFNvcnRlcik7XG4gICAgICAgIC8vIFJlc2V0IHBhZ2luYXRpb24gdG8gcGFnZSAxIHdoZW4gc29ydGluZyBjaGFuZ2VzXG4gICAgICAgIGlmIChtZXJnZWRQYWdpbmF0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0UGFnaW5hdGlvbiA9IG1lcmdlZFBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogeyBjdXJyZW50OiAxLCBwYWdlU2l6ZSB9O1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlc3VsdCA9IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHNvcnRlcjogbmV4dFNvcnRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHJlc2V0UGFnaW5hdGlvbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZW1pdENoYW5nZShuZXh0UmVzdWx0LmN1cnJlbnREYXRhU291cmNlLCAnc29ydCcsIHtcbiAgICAgICAgICAgICAgICBzb3J0ZXI6IG5leHRTb3J0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiByZXNldFBhZ2luYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IHdyYXBwZWRTZXRGaWx0ZXJzID0gdXNlTWVtb2l6ZWRGbigodXBkYXRlcikgPT4ge1xuICAgICAgICBjb25zdCBuZXh0RmlsdGVycyA9IHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihmaWx0ZXJzKSA6IHVwZGF0ZXI7XG4gICAgICAgIHNldEZpbHRlcnMobmV4dEZpbHRlcnMpO1xuICAgICAgICAvLyBSZXNldCBwYWdpbmF0aW9uIHRvIHBhZ2UgMSB3aGVuIGZpbHRlcnMgY2hhbmdlXG4gICAgICAgIGlmIChtZXJnZWRQYWdpbmF0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgc2V0Q3VycmVudCgxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc2V0UGFnaW5hdGlvbiA9IG1lcmdlZFBhZ2luYXRpb24gPT09IGZhbHNlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogeyBjdXJyZW50OiAxLCBwYWdlU2l6ZSB9O1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlc3VsdCA9IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHNvcnRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJzOiBuZXh0RmlsdGVycyxcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiByZXNldFBhZ2luYXRpb24sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVtaXRDaGFuZ2UobmV4dFJlc3VsdC5jdXJyZW50RGF0YVNvdXJjZSwgJ2ZpbHRlcicsIHtcbiAgICAgICAgICAgICAgICBzb3J0ZXIsXG4gICAgICAgICAgICAgICAgZmlsdGVyczogbmV4dEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogcmVzZXRQYWdpbmF0aW9uLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCB3cmFwcGVkU2V0UGFnaW5hdGlvbiA9IHVzZU1lbW9pemVkRm4oKHVwZGF0ZXIpID0+IHtcbiAgICAgICAgaWYgKHBhZ2luYXRpb24gPT09IGZhbHNlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSB7IGN1cnJlbnQsIHBhZ2VTaXplIH07XG4gICAgICAgIGNvbnN0IG5leHRWYWx1ZSA9IHR5cGVvZiB1cGRhdGVyID09PSAnZnVuY3Rpb24nID8gdXBkYXRlcihjdXJyZW50VmFsdWUpIDogdXBkYXRlcjtcbiAgICAgICAgc2V0Q3VycmVudChuZXh0VmFsdWUuY3VycmVudCk7XG4gICAgICAgIHNldFBhZ2VTaXplKG5leHRWYWx1ZS5wYWdlU2l6ZSk7XG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgICAgY29uc3QgbmV4dFJlc3VsdCA9IGFwcGx5VGFibGVQaXBlbGluZSh7XG4gICAgICAgICAgICAgICAgY29sdW1ucyxcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgIHNvcnRlcixcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IG5leHRWYWx1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZW1pdENoYW5nZShuZXh0UmVzdWx0LmN1cnJlbnREYXRhU291cmNlLCAncGFnaW5hdGUnLCB7XG4gICAgICAgICAgICAgICAgc29ydGVyLFxuICAgICAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbjogbmV4dFZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCByZXN1bHQpLCB7IHNvcnRlcixcbiAgICAgICAgc29ydGVyU3RhdGVzLFxuICAgICAgICBmaWx0ZXJzLCBwYWdpbmF0aW9uOiBtZXJnZWRQYWdpbmF0aW9uLCBzZXRTb3J0ZXI6IHdyYXBwZWRTZXRTb3J0ZXIsIHNldEZpbHRlcnM6IHdyYXBwZWRTZXRGaWx0ZXJzLCBzZXRQYWdpbmF0aW9uOiB3cmFwcGVkU2V0UGFnaW5hdGlvbiB9KTtcbn07Il0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==
@@ -1,7 +1,9 @@
1
1
  import type { Key } from 'react';
2
- import type { TableExpandableConfig } from '../interface';
3
- export declare const useTableExpand: <T>({ expandable, }: {
2
+ import type { TableExpandableConfig, TableRecord } from '../interface';
3
+ export declare const useTableExpand: <T extends TableRecord = TableRecord>({ expandable, dataSource, getRowKey, }: {
4
4
  expandable?: TableExpandableConfig<T>;
5
+ dataSource?: readonly T[];
6
+ getRowKey?: (record: T, index: number) => Key;
5
7
  }) => {
6
8
  mergedExpandedRowKeys: Key[];
7
9
  triggerExpand: (recordKey: Key, record: T) => void;
@@ -5,18 +5,42 @@ Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
7
  exports.useTableExpand = void 0;
8
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
9
8
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
10
10
  var _hooks = require("@1money/hooks");
11
11
  var useTableExpand = exports.useTableExpand = function useTableExpand(_ref) {
12
- var expandable = _ref.expandable;
13
- var _a;
14
- var _useControlledState = (0, _hooks.useControlledState)((_a = expandable === null || expandable === void 0 ? void 0 : expandable.defaultExpandedRowKeys) !== null && _a !== void 0 ? _a : [], expandable === null || expandable === void 0 ? void 0 : expandable.expandedRowKeys),
12
+ var expandable = _ref.expandable,
13
+ dataSource = _ref.dataSource,
14
+ getRowKey = _ref.getRowKey;
15
+ // Match table: `defaultExpandAllRows` seeds initial expansion with every
16
+ // row whose key is expandable. `rowExpandable` (if present) still gates this.
17
+ var computeDefaultKeys = function computeDefaultKeys() {
18
+ if (expandable === null || expandable === void 0 ? void 0 : expandable.defaultExpandedRowKeys) return (0, _toConsumableArray2["default"])(expandable.defaultExpandedRowKeys);
19
+ if (!(expandable === null || expandable === void 0 ? void 0 : expandable.defaultExpandAllRows) || !dataSource || !getRowKey) return [];
20
+ var rowExpandable = expandable.rowExpandable;
21
+ return dataSource.map(function (record, index) {
22
+ return {
23
+ record: record,
24
+ key: getRowKey(record, index)
25
+ };
26
+ }).filter(function (_ref2) {
27
+ var record = _ref2.record;
28
+ return rowExpandable ? rowExpandable(record) : true;
29
+ }).map(function (_ref3) {
30
+ var key = _ref3.key;
31
+ return key;
32
+ });
33
+ };
34
+ var _useControlledState = (0, _hooks.useControlledState)(computeDefaultKeys(), expandable === null || expandable === void 0 ? void 0 : expandable.expandedRowKeys),
15
35
  _useControlledState2 = (0, _slicedToArray2["default"])(_useControlledState, 2),
16
36
  mergedExpandedRowKeys = _useControlledState2[0],
17
37
  setMergedExpandedRowKeys = _useControlledState2[1];
18
38
  var triggerExpand = (0, _hooks.useMemoizedFn)(function (recordKey, record) {
19
39
  var _a, _b;
40
+ // Honor `rowExpandable`: rows the predicate denies cannot be toggled. This
41
+ // also blocks programmatic callers (e.g. expandRowByClick on the kernel)
42
+ // from bypassing the predicate.
43
+ if ((expandable === null || expandable === void 0 ? void 0 : expandable.rowExpandable) && !expandable.rowExpandable(record)) return;
20
44
  var expanded = mergedExpandedRowKeys.includes(recordKey);
21
45
  var nextKeys = expanded ? mergedExpandedRowKeys.filter(function (key) {
22
46
  return key !== recordKey;
@@ -29,6 +53,7 @@ var useTableExpand = exports.useTableExpand = function useTableExpand(_ref) {
29
53
  // and delegates to user callbacks
30
54
  var onKernelExpand = (0, _hooks.useMemoizedFn)(function (expanded, record, recordKey) {
31
55
  var _a, _b;
56
+ if ((expandable === null || expandable === void 0 ? void 0 : expandable.rowExpandable) && !expandable.rowExpandable(record)) return;
32
57
  var nextKeys = expanded ? [].concat((0, _toConsumableArray2["default"])(mergedExpandedRowKeys), [recordKey]) : mergedExpandedRowKeys.filter(function (key) {
33
58
  return key !== recordKey;
34
59
  });
@@ -42,4 +67,4 @@ var useTableExpand = exports.useTableExpand = function useTableExpand(_ref) {
42
67
  onKernelExpand: onKernelExpand
43
68
  };
44
69
  };
45
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUV4cGFuZC50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUV4cGFuZC5qcyJdLCJuYW1lcyI6WyJfaG9va3MiLCJyZXF1aXJlIiwidXNlVGFibGVFeHBhbmQiLCJleHBvcnRzIiwiX3JlZiIsImV4cGFuZGFibGUiLCJfYSIsIl91c2VDb250cm9sbGVkU3RhdGUiLCJ1c2VDb250cm9sbGVkU3RhdGUiLCJkZWZhdWx0RXhwYW5kZWRSb3dLZXlzIiwiZXhwYW5kZWRSb3dLZXlzIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJzZXRNZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwidXNlTWVtb2l6ZWRGbiIsInJlY29yZEtleSIsInJlY29yZCIsIl9iIiwiZXhwYW5kZWQiLCJpbmNsdWRlcyIsIm5leHRLZXlzIiwiZmlsdGVyIiwia2V5IiwiY29uY2F0IiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm9uRXhwYW5kIiwiY2FsbCIsIm9uRXhwYW5kZWRSb3dzQ2hhbmdlIiwib25LZXJuZWxFeHBhbmQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUNBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUdPLElBQU1DLGNBQWMsR0FBQUMsT0FBQSxDQUFBRCxjQUFBLEdBQUcsU0FBakJBLGNBQWNBLENBQUFFLElBQUEsRUFJdEI7RUFBQSxJQUhIQyxVQUFVLEdBQUFELElBQUEsQ0FBVkMsVUFBVTtFQ0hSLElBQUlDLEVBQUU7RURPUixJQUFBQyxtQkFBQSxHQUEwRCxJQUFBQyx5QkFBa0IsRUFDMUUsQ0FBQUYsRUFBQSxHQUFBRCxVQUFVLEtBQUEsSUFBQSxJQUFWQSxVQUFVLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQVZBLFVBQVUsQ0FBRUksc0JBQXNCLE1B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RUFBYkEsYUFBYTtJQUNiZSxjQUFjLEVBQWRBO0VDWEEsQ0RZRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlRXhwYW5kLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUsIHVzZU1lbW9pemVkRm4gfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmV4cG9ydCBjb25zdCB1c2VUYWJsZUV4cGFuZCA9ICh7IGV4cGFuZGFibGUsIH0pID0+IHtcbiAgICB2YXIgX2E7XG4gICAgY29uc3QgW21lcmdlZEV4cGFuZGVkUm93S2V5cywgc2V0TWVyZ2VkRXhwYW5kZWRSb3dLZXlzXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZSgoX2EgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZGVmYXVsdEV4cGFuZGVkUm93S2V5cykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sIGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5leHBhbmRlZFJvd0tleXMpO1xuICAgIGNvbnN0IHRyaWdnZXJFeHBhbmQgPSB1c2VNZW1vaXplZEZuKChyZWNvcmRLZXksIHJlY29yZCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBleHBhbmRlZCA9IG1lcmdlZEV4cGFuZGVkUm93S2V5cy5pbmNsdWRlcyhyZWNvcmRLZXkpO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IGV4cGFuZGVkXG4gICAgICAgICAgICA/IG1lcmdlZEV4cGFuZGVkUm93S2V5cy5maWx0ZXIoa2V5ID0+IGtleSAhPT0gcmVjb3JkS2V5KVxuICAgICAgICAgICAgOiBbLi4ubWVyZ2VkRXhwYW5kZWRSb3dLZXlzLCByZWNvcmRLZXldO1xuICAgICAgICBzZXRNZXJnZWRFeHBhbmRlZFJvd0tleXMobmV4dEtleXMpO1xuICAgICAgICAoX2EgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUub25FeHBhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGV4cGFuZGFibGUsICFleHBhbmRlZCwgcmVjb3JkKTtcbiAgICAgICAgKF9iID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLm9uRXhwYW5kZWRSb3dzQ2hhbmdlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChleHBhbmRhYmxlLCBuZXh0S2V5cyk7XG4gICAgfSk7XG4gICAgLy8gQ2FsbGVkIGJ5IHRoZSBrZXJuZWwncyBvbkV4cGFuZCAoZS5nLiBleHBhbmRSb3dCeUNsaWNrKSDigJQgdXBkYXRlcyBzdGF0ZVxuICAgIC8vIGFuZCBkZWxlZ2F0ZXMgdG8gdXNlciBjYWxsYmFja3NcbiAgICBjb25zdCBvbktlcm5lbEV4cGFuZCA9IHVzZU1lbW9pemVkRm4oKGV4cGFuZGVkLCByZWNvcmQsIHJlY29yZEtleSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IGV4cGFuZGVkXG4gICAgICAgICAgICA/IFsuLi5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIHJlY29yZEtleV1cbiAgICAgICAgICAgIDogbWVyZ2VkRXhwYW5kZWRSb3dLZXlzLmZpbHRlcihrZXkgPT4ga2V5ICE9PSByZWNvcmRLZXkpO1xuICAgICAgICBzZXRNZXJnZWRFeHBhbmRlZFJvd0tleXMobmV4dEtleXMpO1xuICAgICAgICAoX2EgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUub25FeHBhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGV4cGFuZGFibGUsIGV4cGFuZGVkLCByZWNvcmQpO1xuICAgICAgICAoX2IgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUub25FeHBhbmRlZFJvd3NDaGFuZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGV4cGFuZGFibGUsIG5leHRLZXlzKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQsXG4gICAgICAgIG9uS2VybmVsRXhwYW5kLFxuICAgIH07XG59OyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
70
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvVGFibGUvc3JjL2NvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUV4cGFuZC50cyIsImNvbXBvbmVudHMvVGFibGUvY29yZS91c2VUYWJsZUV4cGFuZC5qcyJdLCJuYW1lcyI6WyJfaG9va3MiLCJyZXF1aXJlIiwidXNlVGFibGVFeHBhbmQiLCJleHBvcnRzIiwiX3JlZiIsImV4cGFuZGFibGUiLCJkYXRhU291cmNlIiwiZ2V0Um93S2V5IiwiY29tcHV0ZURlZmF1bHRLZXlzIiwiZGVmYXVsdEV4cGFuZGVkUm93S2V5cyIsIl90b0NvbnN1bWFibGVBcnJheTIiLCJkZWZhdWx0RXhwYW5kQWxsUm93cyIsInJvd0V4cGFuZGFibGUiLCJtYXAiLCJyZWNvcmQiLCJpbmRleCIsImtleSIsImZpbHRlciIsIl9yZWYyIiwiX3JlZjMiLCJfdXNlQ29udHJvbGxlZFN0YXRlIiwidXNlQ29udHJvbGxlZFN0YXRlIiwiZXhwYW5kZWRSb3dLZXlzIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJtZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJzZXRNZXJnZWRFeHBhbmRlZFJvd0tleXMiLCJ0cmlnZ2VyRXhwYW5kIiwidXNlTWVtb2l6ZWRGbiIsInJlY29yZEtleSIsIl9hIiwiX2IiLCJleHBhbmRlZCIsImluY2x1ZGVzIiwibmV4dEtleXMiLCJjb25jYXQiLCJvbkV4cGFuZCIsImNhbGwiLCJvbkV4cGFuZGVkUm93c0NoYW5nZSIsIm9uS2VybmVsRXhwYW5kIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFDQSxJQUFBQSxNQUFBLEdBQUFDLE9BQUE7QUFHTyxJQUFNQyxjQUFjLEdBQUFDLE9BQUEsQ0FBQUQsY0FBQSxHQUFHLFNBQWpCQSxjQUFjQSxDQUFBRSxJQUFBLEVBUXRCO0VBQUEsSUFQSEMsVUFBVSxHQUFBRCxJQUFBLENBQVZDLFVBQVU7SUFDVkMsVUFBVSxHQUFBRixJQUFBLENBQVZFLFVBQVU7SUFDVkMsU0FB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QUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLENBQUVpQyxvQkFBb0IsTUFBQSxJQUFBLElBQUFQLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBTSxJQUFBLENBQUFoQyxVQUFBLEVBQUc2QixRQUFRLENBQUM7RUFDOUMsQ0FBQyxDQUFDO0VBRUYsT0FBTztJQUNMVCxxQkFBcUIsRUFBckJBLHFCQUFxQjtJQUNyQkUsYUFBYSxFQUFiQSxhQUFhO0lBQ2JZLGNBQWMsRUFBZEE7RUNmQSxDRGdCRDtBQUNILENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9UYWJsZS9jb3JlL3VzZVRhYmxlRXhwYW5kLmpzIiwic291cmNlc0NvbnRlbnQiOltudWxsLCJpbXBvcnQgeyB1c2VDb250cm9sbGVkU3RhdGUsIHVzZU1lbW9pemVkRm4gfSBmcm9tICdAMW1vbmV5L2hvb2tzJztcbmV4cG9ydCBjb25zdCB1c2VUYWJsZUV4cGFuZCA9ICh7IGV4cGFuZGFibGUsIGRhdGFTb3VyY2UsIGdldFJvd0tleSwgfSkgPT4ge1xuICAgIC8vIE1hdGNoIHRhYmxlOiBgZGVmYXVsdEV4cGFuZEFsbFJvd3NgIHNlZWRzIGluaXRpYWwgZXhwYW5zaW9uIHdpdGggZXZlcnlcbiAgICAvLyByb3cgd2hvc2Uga2V5IGlzIGV4cGFuZGFibGUuIGByb3dFeHBhbmRhYmxlYCAoaWYgcHJlc2VudCkgc3RpbGwgZ2F0ZXMgdGhpcy5cbiAgICBjb25zdCBjb21wdXRlRGVmYXVsdEtleXMgPSAoKSA9PiB7XG4gICAgICAgIGlmIChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUuZGVmYXVsdEV4cGFuZGVkUm93S2V5cylcbiAgICAgICAgICAgIHJldHVybiBbLi4uZXhwYW5kYWJsZS5kZWZhdWx0RXhwYW5kZWRSb3dLZXlzXTtcbiAgICAgICAgaWYgKCEoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmRlZmF1bHRFeHBhbmRBbGxSb3dzKSB8fCAhZGF0YVNvdXJjZSB8fCAhZ2V0Um93S2V5KVxuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCByb3dFeHBhbmRhYmxlID0gZXhwYW5kYWJsZS5yb3dFeHBhbmRhYmxlO1xuICAgICAgICByZXR1cm4gZGF0YVNvdXJjZVxuICAgICAgICAgICAgLm1hcCgocmVjb3JkLCBpbmRleCkgPT4gKHsgcmVjb3JkLCBrZXk6IGdldFJvd0tleShyZWNvcmQsIGluZGV4KSB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKHsgcmVjb3JkIH0pID0+IChyb3dFeHBhbmRhYmxlID8gcm93RXhwYW5kYWJsZShyZWNvcmQpIDogdHJ1ZSkpXG4gICAgICAgICAgICAubWFwKCh7IGtleSB9KSA9PiBrZXkpO1xuICAgIH07XG4gICAgY29uc3QgW21lcmdlZEV4cGFuZGVkUm93S2V5cywgc2V0TWVyZ2VkRXhwYW5kZWRSb3dLZXlzXSA9IHVzZUNvbnRyb2xsZWRTdGF0ZShjb21wdXRlRGVmYXVsdEtleXMoKSwgZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLmV4cGFuZGVkUm93S2V5cyk7XG4gICAgY29uc3QgdHJpZ2dlckV4cGFuZCA9IHVzZU1lbW9pemVkRm4oKHJlY29yZEtleSwgcmVjb3JkKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIC8vIEhvbm9yIGByb3dFeHBhbmRhYmxlYDogcm93cyB0aGUgcHJlZGljYXRlIGRlbmllcyBjYW5ub3QgYmUgdG9nZ2xlZC4gVGhpc1xuICAgICAgICAvLyBhbHNvIGJsb2NrcyBwcm9ncmFtbWF0aWMgY2FsbGVycyAoZS5nLiBleHBhbmRSb3dCeUNsaWNrIG9uIHRoZSBrZXJuZWwpXG4gICAgICAgIC8vIGZyb20gYnlwYXNzaW5nIHRoZSBwcmVkaWNhdGUuXG4gICAgICAgIGlmICgoZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUpICYmICFleHBhbmRhYmxlLnJvd0V4cGFuZGFibGUocmVjb3JkKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgZXhwYW5kZWQgPSBtZXJnZWRFeHBhbmRlZFJvd0tleXMuaW5jbHVkZXMocmVjb3JkS2V5KTtcbiAgICAgICAgY29uc3QgbmV4dEtleXMgPSBleHBhbmRlZFxuICAgICAgICAgICAgPyBtZXJnZWRFeHBhbmRlZFJvd0tleXMuZmlsdGVyKGtleSA9PiBrZXkgIT09IHJlY29yZEtleSlcbiAgICAgICAgICAgIDogWy4uLm1lcmdlZEV4cGFuZGVkUm93S2V5cywgcmVjb3JkS2V5XTtcbiAgICAgICAgc2V0TWVyZ2VkRXhwYW5kZWRSb3dLZXlzKG5leHRLZXlzKTtcbiAgICAgICAgKF9hID0gZXhwYW5kYWJsZSA9PT0gbnVsbCB8fCBleHBhbmRhYmxlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBleHBhbmRhYmxlLm9uRXhwYW5kKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChleHBhbmRhYmxlLCAhZXhwYW5kZWQsIHJlY29yZCk7XG4gICAgICAgIChfYiA9IGV4cGFuZGFibGUgPT09IG51bGwgfHwgZXhwYW5kYWJsZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXhwYW5kYWJsZS5vbkV4cGFuZGVkUm93c0NoYW5nZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoZXhwYW5kYWJsZSwgbmV4dEtleXMpO1xuICAgIH0pO1xuICAgIC8vIENhbGxlZCBieSB0aGUga2VybmVsJ3Mgb25FeHBhbmQgKGUuZy4gZXhwYW5kUm93QnlDbGljaykg4oCUIHVwZGF0ZXMgc3RhdGVcbiAgICAvLyBhbmQgZGVsZWdhdGVzIHRvIHVzZXIgY2FsbGJhY2tzXG4gICAgY29uc3Qgb25LZXJuZWxFeHBhbmQgPSB1c2VNZW1vaXplZEZuKChleHBhbmRlZCwgcmVjb3JkLCByZWNvcmRLZXkpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKChleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUucm93RXhwYW5kYWJsZSkgJiYgIWV4cGFuZGFibGUucm93RXhwYW5kYWJsZShyZWNvcmQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBuZXh0S2V5cyA9IGV4cGFuZGVkXG4gICAgICAgICAgICA/IFsuLi5tZXJnZWRFeHBhbmRlZFJvd0tleXMsIHJlY29yZEtleV1cbiAgICAgICAgICAgIDogbWVyZ2VkRXhwYW5kZWRSb3dLZXlzLmZpbHRlcihrZXkgPT4ga2V5ICE9PSByZWNvcmRLZXkpO1xuICAgICAgICBzZXRNZXJnZWRFeHBhbmRlZFJvd0tleXMobmV4dEtleXMpO1xuICAgICAgICAoX2EgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUub25FeHBhbmQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGV4cGFuZGFibGUsIGV4cGFuZGVkLCByZWNvcmQpO1xuICAgICAgICAoX2IgPSBleHBhbmRhYmxlID09PSBudWxsIHx8IGV4cGFuZGFibGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGV4cGFuZGFibGUub25FeHBhbmRlZFJvd3NDaGFuZ2UpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKGV4cGFuZGFibGUsIG5leHRLZXlzKTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBtZXJnZWRFeHBhbmRlZFJvd0tleXMsXG4gICAgICAgIHRyaWdnZXJFeHBhbmQsXG4gICAgICAgIG9uS2VybmVsRXhwYW5kLFxuICAgIH07XG59OyJdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
@@ -1,15 +1,13 @@
1
1
  import { type Key } from 'react';
2
- import type { TableRowSelection } from '../interface';
3
- export declare const useTableSelection: <T>({ rowSelection, dataSource, currentDataSource, getRowKey, }: {
2
+ import type { TableRecord, TableRowSelection } from '../interface';
3
+ export declare const useTableSelection: <T extends TableRecord = TableRecord>({ rowSelection, dataSource, currentDataSource, getRowKey, }: {
4
4
  rowSelection?: TableRowSelection<T>;
5
5
  dataSource: T[];
6
6
  currentDataSource: T[];
7
7
  getRowKey: (record: T, index: number) => Key;
8
8
  }) => {
9
9
  mergedSelectedRowKeys: Key[];
10
- checkboxPropsMap: Map<Key, Partial<{
11
- disabled: boolean;
12
- }>>;
10
+ checkboxPropsMap: Map<Key, Partial<Omit<import("../../Checkbox").CheckboxProps, "checked" | "defaultChecked" | "onChange">>>;
13
11
  isAllSelected: boolean;
14
12
  isIndeterminate: boolean;
15
13
  triggerSelection: (recordKey: Key) => void;