@1money/component-ui 0.0.70 → 0.0.73

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 (247) hide show
  1. package/es/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +3 -2
  2. package/es/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +2 -2
  3. package/es/business/Select/Network/NetworkSelect.js +2 -2
  4. package/es/components/Accordion/Accordion.js +3 -2
  5. package/es/components/Calendar/Calendar.js +3 -2
  6. package/es/components/Carousel/Carousel.js +3 -2
  7. package/es/components/Checkbox/BaseCheckbox.js +3 -2
  8. package/es/components/Checkbox/Checkbox.js +2 -2
  9. package/es/components/Checkbox/CheckboxGroup.js +3 -2
  10. package/es/components/CoachMark/CoachMark.js +3 -2
  11. package/es/components/Copy/Copy.js +2 -2
  12. package/es/components/Dialog/Dialog.js +2 -2
  13. package/es/components/Drawer/Drawer.js +2 -2
  14. package/es/components/Input/Amount/Amount.js +2 -2
  15. package/es/components/Input/Input/Input.js +3 -2
  16. package/es/components/Input/Mask/Mask.js +3 -2
  17. package/es/components/Input/OTP/OTP.js +3 -2
  18. package/es/components/Input/Password/Password.js +3 -2
  19. package/es/components/Input/Search/Search.js +3 -2
  20. package/es/components/Input/TextArea/TextArea.js +3 -2
  21. package/es/components/Input/Trade/Trade.js +2 -2
  22. package/es/components/Input/useAmountInput.js +4 -2
  23. package/es/components/Input/useSyncRef.js +2 -2
  24. package/es/components/Navigation/Nav.js +2 -2
  25. package/es/components/Navigation/Navigation.js +5 -2
  26. package/es/components/Pagination/Pagination.js +2 -2
  27. package/es/components/Pagination/usePagination.js +3 -2
  28. package/es/components/Popconfirm/Popconfirm.js +2 -2
  29. package/es/components/Portal/Portal.js +2 -2
  30. package/es/components/ProForm/ProForm.d.ts +10 -2
  31. package/es/components/ProForm/ProForm.js +60 -24
  32. package/es/components/ProForm/ProFormDependency.js +4 -1
  33. package/es/components/ProForm/ProFormGroup.js +2 -2
  34. package/es/components/ProForm/ProFormItem.js +73 -36
  35. package/es/components/ProForm/ProFormList.js +3 -2
  36. package/es/components/ProForm/SchemaForm.d.ts +7 -0
  37. package/es/components/ProForm/SchemaForm.js +103 -0
  38. package/es/components/ProForm/Submitter.js +13 -3
  39. package/es/components/ProForm/context.d.ts +22 -3
  40. package/es/components/ProForm/context.js +49 -10
  41. package/es/components/ProForm/core/constants.d.ts +8 -1
  42. package/es/components/ProForm/core/constants.js +9 -6
  43. package/es/components/ProForm/core/hooks/useForm.js +174 -320
  44. package/es/components/ProForm/core/hooks/useFormCore.js +84 -178
  45. package/es/components/ProForm/core/interface.d.ts +33 -12
  46. package/es/components/ProForm/core/pathUtils.d.ts +6 -0
  47. package/es/components/ProForm/core/pathUtils.js +59 -0
  48. package/es/components/ProForm/core/runRules.d.ts +23 -0
  49. package/es/components/ProForm/core/runRules.js +233 -0
  50. package/es/components/ProForm/core/useFormItem.d.ts +10 -1
  51. package/es/components/ProForm/core/useFormItem.js +105 -61
  52. package/es/components/ProForm/fields/ProFormDatePicker.js +4 -1
  53. package/es/components/ProForm/fields/createProFormField.js +64 -59
  54. package/es/components/ProForm/hooks/useFieldRequest.js +7 -5
  55. package/es/components/ProForm/index.d.ts +11 -4
  56. package/es/components/ProForm/index.js +7 -2
  57. package/es/components/ProForm/interface.d.ts +89 -14
  58. package/es/components/ProForm/layouts/DialogForm.d.ts +5 -1
  59. package/es/components/ProForm/layouts/DialogForm.js +2 -1
  60. package/es/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  61. package/es/components/ProForm/layouts/DrawerForm.js +2 -1
  62. package/es/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  63. package/es/components/ProForm/layouts/QueryFilter.js +79 -13
  64. package/es/components/ProForm/layouts/useOverlayForm.js +23 -21
  65. package/es/components/ProForm/style/ProForm.css +6 -0
  66. package/es/components/ProForm/utils.d.ts +14 -3
  67. package/es/components/ProForm/utils.js +73 -70
  68. package/es/components/ProTable/ProTable.js +3 -2
  69. package/es/components/ProTable/core/useAwaitableReload.js +3 -2
  70. package/es/components/ProTable/useFetchData.js +4 -2
  71. package/es/components/Radio/Radio.js +3 -2
  72. package/es/components/Radio/RadioGroup.js +3 -2
  73. package/es/components/ResizeObserver/useResizeObserver.js +2 -2
  74. package/es/components/Segment/Segment.js +4 -2
  75. package/es/components/Select/Select.js +3 -2
  76. package/es/components/Select/SelectCustom.js +2 -2
  77. package/es/components/Select/useSelectShell.js +3 -2
  78. package/es/components/Slider/Slider.js +3 -2
  79. package/es/components/Switch/Switch.js +3 -2
  80. package/es/components/Table/Table.js +14 -28
  81. package/es/components/Table/VirtualTable.js +18 -28
  82. package/es/components/Table/core/columnUtil.d.ts +9 -0
  83. package/es/components/Table/core/columnUtil.js +34 -0
  84. package/es/components/Table/core/useTableColumns.d.ts +4 -13
  85. package/es/components/Table/core/useTableColumns.js +55 -24
  86. package/es/components/Table/core/useTableDataPipeline.d.ts +11 -16
  87. package/es/components/Table/core/useTableDataPipeline.js +66 -73
  88. package/es/components/Table/core/useTableExpand.js +3 -2
  89. package/es/components/Table/core/useTableSelection.js +7 -4
  90. package/es/components/Table/core/useTableSetup.js +4 -2
  91. package/es/components/Table/features/ExpandTrigger.d.ts +9 -3
  92. package/es/components/Table/features/ExpandTrigger.js +14 -8
  93. package/es/components/Table/features/FilterTrigger.js +21 -17
  94. package/es/components/Table/features/SelectionColumn.d.ts +11 -6
  95. package/es/components/Table/features/SelectionColumn.js +12 -5
  96. package/es/components/Table/features/SortTrigger.d.ts +4 -2
  97. package/es/components/Table/features/SortTrigger.js +8 -3
  98. package/es/components/Table/internal/kernel/Body/MeasureCell.js +2 -2
  99. package/es/components/Table/internal/kernel/Cell/index.js +2 -2
  100. package/es/components/Table/internal/kernel/Table.js +3 -3
  101. package/es/components/Table/internal/kernel/VirtualTable/index.js +2 -2
  102. package/es/components/Table/internal/kernel/hooks/useRowInfo.js +2 -2
  103. package/es/components/Table/internal/kernel/selector-context/context.js +3 -3
  104. package/es/components/Table/renderers/HeaderCell.js +3 -2
  105. package/es/components/Table/renderers/TableShell.d.ts +13 -0
  106. package/es/components/Table/renderers/TableShell.js +25 -0
  107. package/es/components/Table/style/Table.css +3 -0
  108. package/es/components/Tabs/Tabs.js +4 -2
  109. package/es/components/Tooltip/Tooltip.js +3 -2
  110. package/es/components/Tooltip/style/Tooltip.css +1 -0
  111. package/es/components/Tour/Tour.js +3 -2
  112. package/es/components/Trigger/Trigger.js +3 -2
  113. package/es/components/Typography/Typography.js +2 -2
  114. package/es/components/Typography/useTypographyEnhancements.js +3 -2
  115. package/es/components/Upload/Upload.js +2 -2
  116. package/es/components/Upload/UploadFileBar.js +2 -2
  117. package/es/components/VirtualList/VirtualList.js +3 -2
  118. package/es/components/VirtualList/hooks/useMobileTouchMove.js +2 -2
  119. package/es/components/VirtualList/hooks/useScrollTo.js +2 -2
  120. package/es/index.css +1 -1
  121. package/es/index.d.ts +2 -2
  122. package/es/index.js +2 -2
  123. package/lib/business/Dialog/VerificationDialog/hooks/useOtpVerification.js +9 -8
  124. package/lib/business/Dialog/VerificationDialog/hooks/useResendCountdown.js +3 -3
  125. package/lib/business/Select/Network/NetworkSelect.js +3 -3
  126. package/lib/components/Accordion/Accordion.js +5 -4
  127. package/lib/components/Calendar/Calendar.js +6 -5
  128. package/lib/components/Carousel/Carousel.js +5 -4
  129. package/lib/components/Checkbox/BaseCheckbox.js +5 -4
  130. package/lib/components/Checkbox/Checkbox.js +3 -3
  131. package/lib/components/Checkbox/CheckboxGroup.js +7 -6
  132. package/lib/components/CoachMark/CoachMark.js +7 -6
  133. package/lib/components/Copy/Copy.js +3 -3
  134. package/lib/components/Dialog/Dialog.js +6 -6
  135. package/lib/components/Drawer/Drawer.js +10 -10
  136. package/lib/components/Input/Amount/Amount.js +6 -5
  137. package/lib/components/Input/Input/Input.js +7 -6
  138. package/lib/components/Input/Mask/Mask.js +9 -8
  139. package/lib/components/Input/OTP/OTP.js +9 -8
  140. package/lib/components/Input/Password/Password.js +6 -5
  141. package/lib/components/Input/Search/Search.js +8 -7
  142. package/lib/components/Input/TextArea/TextArea.js +5 -4
  143. package/lib/components/Input/Trade/Trade.js +5 -4
  144. package/lib/components/Input/useAmountInput.js +13 -11
  145. package/lib/components/Input/useSyncRef.js +4 -3
  146. package/lib/components/Navigation/Nav.js +3 -3
  147. package/lib/components/Navigation/Navigation.js +10 -7
  148. package/lib/components/Pagination/Pagination.js +4 -3
  149. package/lib/components/Pagination/usePagination.js +7 -6
  150. package/lib/components/Popconfirm/Popconfirm.js +3 -3
  151. package/lib/components/Portal/Portal.js +4 -4
  152. package/lib/components/ProForm/ProForm.d.ts +10 -2
  153. package/lib/components/ProForm/ProForm.js +66 -30
  154. package/lib/components/ProForm/ProFormDependency.js +4 -1
  155. package/lib/components/ProForm/ProFormGroup.js +3 -3
  156. package/lib/components/ProForm/ProFormItem.js +72 -34
  157. package/lib/components/ProForm/ProFormList.js +10 -9
  158. package/lib/components/ProForm/SchemaForm.d.ts +7 -0
  159. package/lib/components/ProForm/SchemaForm.js +110 -0
  160. package/lib/components/ProForm/Submitter.js +15 -5
  161. package/lib/components/ProForm/context.d.ts +22 -3
  162. package/lib/components/ProForm/context.js +49 -10
  163. package/lib/components/ProForm/core/constants.d.ts +8 -1
  164. package/lib/components/ProForm/core/constants.js +10 -7
  165. package/lib/components/ProForm/core/hooks/useForm.js +181 -327
  166. package/lib/components/ProForm/core/hooks/useFormCore.js +96 -190
  167. package/lib/components/ProForm/core/interface.d.ts +33 -12
  168. package/lib/components/ProForm/core/pathUtils.d.ts +6 -0
  169. package/lib/components/ProForm/core/pathUtils.js +68 -0
  170. package/lib/components/ProForm/core/runRules.d.ts +23 -0
  171. package/lib/components/ProForm/core/runRules.js +242 -0
  172. package/lib/components/ProForm/core/useFormItem.d.ts +10 -1
  173. package/lib/components/ProForm/core/useFormItem.js +106 -62
  174. package/lib/components/ProForm/fields/ProFormDatePicker.js +4 -1
  175. package/lib/components/ProForm/fields/createProFormField.js +63 -58
  176. package/lib/components/ProForm/hooks/useFieldRequest.js +9 -7
  177. package/lib/components/ProForm/index.d.ts +11 -4
  178. package/lib/components/ProForm/index.js +16 -1
  179. package/lib/components/ProForm/interface.d.ts +89 -14
  180. package/lib/components/ProForm/layouts/DialogForm.d.ts +5 -1
  181. package/lib/components/ProForm/layouts/DialogForm.js +2 -1
  182. package/lib/components/ProForm/layouts/DrawerForm.d.ts +5 -1
  183. package/lib/components/ProForm/layouts/DrawerForm.js +2 -1
  184. package/lib/components/ProForm/layouts/QueryFilter.d.ts +5 -2
  185. package/lib/components/ProForm/layouts/QueryFilter.js +84 -18
  186. package/lib/components/ProForm/layouts/useOverlayForm.js +27 -27
  187. package/lib/components/ProForm/style/ProForm.css +6 -0
  188. package/lib/components/ProForm/utils.d.ts +14 -3
  189. package/lib/components/ProForm/utils.js +91 -74
  190. package/lib/components/ProTable/ProTable.js +10 -9
  191. package/lib/components/ProTable/core/useAwaitableReload.js +6 -5
  192. package/lib/components/ProTable/useFetchData.js +15 -13
  193. package/lib/components/Radio/Radio.js +6 -5
  194. package/lib/components/Radio/RadioGroup.js +5 -4
  195. package/lib/components/ResizeObserver/useResizeObserver.js +4 -3
  196. package/lib/components/Segment/Segment.js +7 -5
  197. package/lib/components/Select/Select.js +23 -22
  198. package/lib/components/Select/SelectCustom.js +8 -8
  199. package/lib/components/Select/useSelectShell.js +5 -4
  200. package/lib/components/Slider/Slider.js +6 -5
  201. package/lib/components/Switch/Switch.js +5 -4
  202. package/lib/components/Table/Table.js +13 -27
  203. package/lib/components/Table/VirtualTable.js +17 -27
  204. package/lib/components/Table/core/columnUtil.d.ts +9 -0
  205. package/lib/components/Table/core/columnUtil.js +42 -0
  206. package/lib/components/Table/core/useTableColumns.d.ts +4 -13
  207. package/lib/components/Table/core/useTableColumns.js +57 -26
  208. package/lib/components/Table/core/useTableDataPipeline.d.ts +11 -16
  209. package/lib/components/Table/core/useTableDataPipeline.js +73 -80
  210. package/lib/components/Table/core/useTableExpand.js +6 -5
  211. package/lib/components/Table/core/useTableSelection.js +13 -10
  212. package/lib/components/Table/core/useTableSetup.js +8 -5
  213. package/lib/components/Table/features/ExpandTrigger.d.ts +9 -3
  214. package/lib/components/Table/features/ExpandTrigger.js +14 -8
  215. package/lib/components/Table/features/FilterTrigger.js +21 -17
  216. package/lib/components/Table/features/SelectionColumn.d.ts +11 -6
  217. package/lib/components/Table/features/SelectionColumn.js +12 -5
  218. package/lib/components/Table/features/SortTrigger.d.ts +4 -2
  219. package/lib/components/Table/features/SortTrigger.js +8 -3
  220. package/lib/components/Table/internal/kernel/Body/MeasureCell.js +3 -3
  221. package/lib/components/Table/internal/kernel/Cell/index.js +4 -4
  222. package/lib/components/Table/internal/kernel/Table.js +7 -6
  223. package/lib/components/Table/internal/kernel/VirtualTable/index.js +4 -4
  224. package/lib/components/Table/internal/kernel/hooks/useRowInfo.js +3 -3
  225. package/lib/components/Table/internal/kernel/selector-context/context.js +6 -5
  226. package/lib/components/Table/renderers/HeaderCell.js +3 -2
  227. package/lib/components/Table/renderers/TableShell.d.ts +13 -0
  228. package/lib/components/Table/renderers/TableShell.js +31 -0
  229. package/lib/components/Table/style/Table.css +3 -0
  230. package/lib/components/Tabs/Tabs.js +7 -5
  231. package/lib/components/Tooltip/Tooltip.js +5 -4
  232. package/lib/components/Tooltip/style/Tooltip.css +1 -0
  233. package/lib/components/Tour/Tour.js +7 -6
  234. package/lib/components/Trigger/Trigger.js +5 -4
  235. package/lib/components/Typography/Typography.js +5 -4
  236. package/lib/components/Typography/useTypographyEnhancements.js +8 -7
  237. package/lib/components/Upload/Upload.js +5 -4
  238. package/lib/components/Upload/UploadFileBar.js +4 -3
  239. package/lib/components/VirtualList/VirtualList.js +8 -7
  240. package/lib/components/VirtualList/hooks/useMobileTouchMove.js +4 -3
  241. package/lib/components/VirtualList/hooks/useScrollTo.js +3 -3
  242. package/lib/index.css +1 -1
  243. package/lib/index.d.ts +2 -2
  244. package/lib/index.js +13 -1
  245. package/package.json +2 -2
  246. package/scripts/mcp-server/examples.generated.json +54 -0
  247. package/scripts/mcp-server/index.generated.json +1212 -80
@@ -27,9 +27,10 @@ var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, gene
27
27
  step((generator = generator.apply(thisArg, _arguments || [])).next());
28
28
  });
29
29
  };
30
- import { useState, useCallback, useRef } from 'react';
31
30
  import React from 'react';
32
- import { useEventCallback } from '@1money/hooks';
31
+ import useControlledState from '@1money/hooks/useControlledState';
32
+ import useDebouncedCallback from '@1money/hooks/useDebouncedCallback';
33
+ import useEventCallback from '@1money/hooks/useEventCallback';
33
34
  export function useOverlayForm(options, onFinish) {
34
35
  var _this = this;
35
36
  var controlledOpen = options.open,
@@ -38,26 +39,29 @@ export function useOverlayForm(options, onFinish) {
38
39
  _options$autoClose = options.autoClose,
39
40
  autoClose = _options$autoClose === void 0 ? true : _options$autoClose,
40
41
  submitTimeout = options.submitTimeout;
41
- var isControlled = controlledOpen !== undefined;
42
- var _useState = useState(false),
43
- _useState2 = _slicedToArray(_useState, 2),
44
- internalOpen = _useState2[0],
45
- setInternalOpen = _useState2[1];
46
- var mergedOpen = isControlled ? controlledOpen : internalOpen;
47
- var timeoutRef = useRef(null);
48
- var setOpen = useCallback(function (nextOpen) {
49
- if (!isControlled) {
50
- setInternalOpen(nextOpen);
51
- }
42
+ // Controlled when `controlledOpen` is passed, internal otherwise — and always
43
+ // forward the change to `onOpenChange`.
44
+ var _useControlledState = useControlledState(false, controlledOpen),
45
+ _useControlledState2 = _slicedToArray(_useControlledState, 2),
46
+ mergedOpen = _useControlledState2[0],
47
+ setMergedOpen = _useControlledState2[1];
48
+ var setOpen = useEventCallback(function (nextOpen) {
49
+ setMergedOpen(nextOpen);
52
50
  onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(nextOpen);
53
- }, [isControlled, onOpenChange]);
51
+ });
52
+ // Deferred auto-close after submit. `cancel` clears any pending close (e.g.
53
+ // when the overlay is hidden first); the timer is also auto-cancelled on
54
+ // unmount.
55
+ var _useDebouncedCallback = useDebouncedCallback(function () {
56
+ return setOpen(false);
57
+ }, submitTimeout),
58
+ scheduleClose = _useDebouncedCallback.run,
59
+ cancelScheduledClose = _useDebouncedCallback.cancel;
54
60
  var handleShow = useEventCallback(function () {
55
61
  setOpen(true);
56
62
  });
57
63
  var handleHide = useEventCallback(function () {
58
- if (timeoutRef.current) {
59
- clearTimeout(timeoutRef.current);
60
- }
64
+ cancelScheduledClose();
61
65
  setOpen(false);
62
66
  });
63
67
  var handleFinish = useEventCallback(function (values) {
@@ -70,9 +74,7 @@ export function useOverlayForm(options, onFinish) {
70
74
  case 1:
71
75
  if (autoClose) {
72
76
  if (submitTimeout && submitTimeout > 0) {
73
- timeoutRef.current = setTimeout(function () {
74
- setOpen(false);
75
- }, submitTimeout);
77
+ scheduleClose();
76
78
  } else {
77
79
  setOpen(false);
78
80
  }
@@ -104,4 +106,4 @@ export function useOverlayForm(options, onFinish) {
104
106
  };
105
107
  }
106
108
  export default useOverlayForm;
107
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9sYXlvdXRzL3VzZU92ZXJsYXlGb3JtLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJ1c2VTdGF0ZSIsInVzZUNhbGxiYWNrIiwidXNlUmVmIiwiUmVhY3QiLCJ1c2VFdmVudENhbGxiYWNrIiwidXNlT3ZlcmxheUZvcm0iLCJvcHRpb25zIiwib25GaW5pc2giLCJfdGhpcyIsImNvbnRyb2xsZWRPcGVuIiwib3BlbiIsIm9uT3BlbkNoYW5nZSIsInRyaWdnZXIiLCJfb3B0aW9ucyRhdXRvQ2xvc2UiLCJhdXRvQ2xvc2UiLCJzdWJtaXRUaW1lb3V0IiwiaXNDb250cm9sbGVkIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlIiwiX3VzZVN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwiaW50ZXJuYWxPcGVuIiwic2V0SW50ZXJuYWxPcGVuIiwibWVyZ2VkT3BlbiIsInRpbWVvdXRSZWYiLCJzZXRPcGVuIiwibmV4dE9wZW4iLCJoYW5kbGVTaG93IiwiaGFuZGxlSGlkZSIsImN1cnJlbnQiLCJjbGVhclRpbWVvdXQiLCJoYW5kbGVGaW5pc2giLCJ2YWx1ZXMiLCJfcmVnZW5lcmF0b3JSdW50aW1lIiwibWFyayIsIl9jYWxsZWUiLCJ3cmFwIiwiX2NvbnRleHQiLCJwcmV2Iiwic2V0VGltZW91dCIsInN0b3AiLCJ0cmlnZ2VyTm9kZSIsImNsb25lRWxlbWVudCIsIm9uQ2xpY2siLCJfYSIsIm9yaWdpbmFsT25DbGljayIsInByb3Bz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Y0FDbkIsQ0FBQyxNQUFNO2dCQUNMVSxPQUFPLENBQUMsS0FBSyxDQUFDO2NBQ2hCO1lBQ0Y7VUFBQztVQUFBO1lBQUEsT0FBQVksUUFBQSxDQUFBRyxJQUFBO1FBQUE7TUFBQSxHQUFBTCxPQUFBO0lBQUEsQ0FDRixFQUFBO0VBQUEsRUFBQztFQUVGO0VBQ0EsSUFBTU0sV0FBVyxHQUFHN0IsT0FBTyxnQkFDdkJULEtBQUssQ0FBQ3VDLFlBQVksQ0FBQzlCLE9BQXNELEVBQUU7SUFDekUrQixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUF5QjtNRDFCeEIsSUFBSUMsRUFBRTtNQzJCWmpCLFVBQVUsQ0FBQSxDQUFFO01BQ1osSUFBTWtCLGVBQWUsR0FBRyxDQUFBRCxFQUFBLEdBQUNoQyxPQUFPLENBQUNrQyxLQUFpQyxNQUFBLElBQUEsSUFBQUYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVELE9BQU87TUFDM0UsSUFBSSxPQUFPRSxlQUFlLEtBQUssVUFBVSxFQUFFO1FBQ3hDQSxlQUE2QyxDQUFBOUMsS0FBQSxTQUFBZ0QsU0FBUSxDQUFDO01BQ3pEO0lBQ0Y7RUR6QkEsQ0MwQkQsQ0FBQyxHQUNGLElBQUk7RUFFUixPQUFPO0lBQ0x4QixVQUFVLEVBQVZBLFVBQVU7SUFDVmtCLFdBQVcsRUFBWEEsV0FBVztJQUNYVixZQUFZLEVBQVpBLFlBQVk7SUFDWkgsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZELFVBQVUsRUFBVkE7RUQxQkEsQ0MyQkQ7QUFDSDtBQUVBLGVBQWV0QixjQUFjIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS9sYXlvdXRzL3VzZU92ZXJsYXlGb3JtLmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZVJlZiB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VFdmVudENhbGxiYWNrIH0gZnJvbSAnQDFtb25leS9ob29rcyc7XG5leHBvcnQgZnVuY3Rpb24gdXNlT3ZlcmxheUZvcm0ob3B0aW9ucywgb25GaW5pc2gpIHtcbiAgICBjb25zdCB7IG9wZW46IGNvbnRyb2xsZWRPcGVuLCBvbk9wZW5DaGFuZ2UsIHRyaWdnZXIsIGF1dG9DbG9zZSA9IHRydWUsIHN1Ym1pdFRpbWVvdXQsIH0gPSBvcHRpb25zO1xuICAgIGNvbnN0IGlzQ29udHJvbGxlZCA9IGNvbnRyb2xsZWRPcGVuICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgW2ludGVybmFsT3Blbiwgc2V0SW50ZXJuYWxPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBtZXJnZWRPcGVuID0gaXNDb250cm9sbGVkID8gY29udHJvbGxlZE9wZW4gOiBpbnRlcm5hbE9wZW47XG4gICAgY29uc3QgdGltZW91dFJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZXRPcGVuID0gdXNlQ2FsbGJhY2soKG5leHRPcGVuKSA9PiB7XG4gICAgICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICAgICAgICBzZXRJbnRlcm5hbE9wZW4obmV4dE9wZW4pO1xuICAgICAgICB9XG4gICAgICAgIG9uT3BlbkNoYW5nZSA9PT0gbnVsbCB8fCBvbk9wZW5DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uT3BlbkNoYW5nZShuZXh0T3Blbik7XG4gICAgfSwgW2lzQ29udHJvbGxlZCwgb25PcGVuQ2hhbmdlXSk7XG4gICAgY29uc3QgaGFuZGxlU2hvdyA9IHVzZUV2ZW50Q2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBzZXRPcGVuKHRydWUpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUhpZGUgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRSZWYuY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlRmluaXNoID0gdXNlRXZlbnRDYWxsYmFjaygodmFsdWVzKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIChvbkZpbmlzaCA9PT0gbnVsbCB8fCBvbkZpbmlzaCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25GaW5pc2godmFsdWVzKSk7XG4gICAgICAgIGlmIChhdXRvQ2xvc2UpIHtcbiAgICAgICAgICAgIGlmIChzdWJtaXRUaW1lb3V0ICYmIHN1Ym1pdFRpbWVvdXQgPiAwKSB7XG4gICAgICAgICAgICAgICAgdGltZW91dFJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0sIHN1Ym1pdFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2V0T3BlbihmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KSk7XG4gICAgLy8gQ2xvbmUgdHJpZ2dlciB3aXRoIG9uQ2xpY2sgaGFuZGxlclxuICAgIGNvbnN0IHRyaWdnZXJOb2RlID0gdHJpZ2dlclxuICAgICAgICA/IFJlYWN0LmNsb25lRWxlbWVudCh0cmlnZ2VyLCB7XG4gICAgICAgICAgICBvbkNsaWNrOiAoLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBoYW5kbGVTaG93KCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxPbkNsaWNrID0gKF9hID0gdHJpZ2dlci5wcm9wcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm9uQ2xpY2s7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbE9uQ2xpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPbkNsaWNrKC4uLmFyZ3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICAgIDogbnVsbDtcbiAgICByZXR1cm4ge1xuICAgICAgICBtZXJnZWRPcGVuLFxuICAgICAgICB0cmlnZ2VyTm9kZSxcbiAgICAgICAgaGFuZGxlRmluaXNoLFxuICAgICAgICBoYW5kbGVIaWRlLFxuICAgICAgICBoYW5kbGVTaG93LFxuICAgIH07XG59XG5leHBvcnQgZGVmYXVsdCB1c2VPdmVybGF5Rm9ybTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
109
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS9sYXlvdXRzL3VzZU92ZXJsYXlGb3JtLmpzIiwiY29tcG9uZW50cy9Qcm9Gb3JtL3NyYy9jb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS50cyJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJhZG9wdCIsInZhbHVlIiwicmVzb2x2ZSIsIlByb21pc2UiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsImUiLCJyZWplY3RlZCIsInJlc3VsdCIsImRvbmUiLCJ0aGVuIiwiYXBwbHkiLCJSZWFjdCIsInVzZUNvbnRyb2xsZWRTdGF0ZSIsInVzZURlYm91bmNlZENhbGxiYWNrIiwidXNlRXZlbnRDYWxsYmFjayIsInVzZU92ZXJsYXlGb3JtIiwib3B0aW9ucyIsIm9uRmluaXNoIiwiX3RoaXMiLCJjb250cm9sbGVkT3BlbiIsIm9wZW4iLCJvbk9wZW5DaGFuZ2UiLCJ0cmlnZ2VyIiwiX29wdGlvbnMkYXV0b0Nsb3NlIiwiYXV0b0Nsb3NlIiwic3VibWl0VGltZW91dCIsIl91c2VDb250cm9sbGVkU3RhdGUiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsIl9zbGljZWRUb0FycmF5IiwibWVyZ2VkT3BlbiIsInNldE1lcmdlZE9wZW4iLCJzZXRPcGVuIiwibmV4dE9wZW4iLCJfdXNlRGVib3VuY2VkQ2FsbGJhY2siLCJzY2hlZHVsZUNsb3NlIiwicnVuIiwiY2FuY2VsU2NoZWR1bGVkQ2xvc2UiLCJjYW5jZWwiLCJoYW5kbGVTaG93IiwiaGFuZGxlSGlkZSIsImhhbmRsZUZpbmlzaCIsInZhbHVlcyIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIndyYXAiLCJfY29udGV4dCIsInByZXYiLCJzdG9wIiwidHJpZ2dlck5vZGUiLCJjbG9uZUVsZW1lbnQiLCJvbkNsaWNrIiwiX2EiLCJvcmlnaW5hbE9u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TUFBQSxHQUFBSixPQUFBO0lBQUEsQ0FDRixFQUFBO0VBQUEsRUFBQztFQUVGO0VBQ0EsSUFBTUssV0FBVyxHQUFHM0IsT0FBTyxnQkFDdkJYLEtBQUssQ0FBQ3VDLFlBQVksQ0FBQzVCLE9BQXNELEVBQUU7SUFDekU2QixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUF5QjtNRDNCeEIsSUFBSUMsRUFBRTtNQzRCWmQsVUFBVSxDQUFBLENBQUU7TUFDWixJQUFNZSxlQUFlLEdBQUcsQ0FBQUQsRUFBQSxHQUFDOUIsT0FBTyxDQUFDZ0MsS0FBaUMsTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFRCxPQUFPO01BQzNFLElBQUksT0FBT0UsZUFBZSxLQUFLLFVBQVUsRUFBRTtRQUN4Q0EsZUFBNkMsQ0FBQTNDLEtBQUEsU0FBQTZDLFNBQVEsQ0FBQztNQUN6RDtJQUNGO0VEMUJBLENDMkJELENBQUMsR0FDRixJQUFJO0VBRVIsT0FBTztJQUNMMUIsVUFBVSxFQUFWQSxVQUFVO0lBQ1ZvQixXQUFXLEVBQVhBLFdBQVc7SUFDWFQsWUFBWSxFQUFaQSxZQUFZO0lBQ1pELFVBQVUsRUFBVkEsVUFBVTtJQUNWRCxVQUFVLEVBQVZBO0VEM0JBLENDNEJEO0FBQ0g7QUFFQSxlQUFldkIsY0FBYyIsImZpbGUiOiJjb21wb25lbnRzL1Byb0Zvcm0vbGF5b3V0cy91c2VPdmVybGF5Rm9ybS5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB1c2VDb250cm9sbGVkU3RhdGUgZnJvbSAnQDFtb25leS9ob29rcy91c2VDb250cm9sbGVkU3RhdGUnO1xuaW1wb3J0IHVzZURlYm91bmNlZENhbGxiYWNrIGZyb20gJ0AxbW9uZXkvaG9va3MvdXNlRGVib3VuY2VkQ2FsbGJhY2snO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnQDFtb25leS9ob29rcy91c2VFdmVudENhbGxiYWNrJztcbmV4cG9ydCBmdW5jdGlvbiB1c2VPdmVybGF5Rm9ybShvcHRpb25zLCBvbkZpbmlzaCkge1xuICAgIGNvbnN0IHsgb3BlbjogY29udHJvbGxlZE9wZW4sIG9uT3BlbkNoYW5nZSwgdHJpZ2dlciwgYXV0b0Nsb3NlID0gdHJ1ZSwgc3VibWl0VGltZW91dCwgfSA9IG9wdGlvbnM7XG4gICAgLy8gQ29udHJvbGxlZCB3aGVuIGBjb250cm9sbGVkT3BlbmAgaXMgcGFzc2VkLCBpbnRlcm5hbCBvdGhlcndpc2Ug4oCUIGFuZCBhbHdheXNcbiAgICAvLyBmb3J3YXJkIHRoZSBjaGFuZ2UgdG8gYG9uT3BlbkNoYW5nZWAuXG4gICAgY29uc3QgW21lcmdlZE9wZW4sIHNldE1lcmdlZE9wZW5dID0gdXNlQ29udHJvbGxlZFN0YXRlKGZhbHNlLCBjb250cm9sbGVkT3Blbik7XG4gICAgY29uc3Qgc2V0T3BlbiA9IHVzZUV2ZW50Q2FsbGJhY2soKG5leHRPcGVuKSA9PiB7XG4gICAgICAgIHNldE1lcmdlZE9wZW4obmV4dE9wZW4pO1xuICAgICAgICBvbk9wZW5DaGFuZ2UgPT09IG51bGwgfHwgb25PcGVuQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbk9wZW5DaGFuZ2UobmV4dE9wZW4pO1xuICAgIH0pO1xuICAgIC8vIERlZmVycmVkIGF1dG8tY2xvc2UgYWZ0ZXIgc3VibWl0LiBgY2FuY2VsYCBjbGVhcnMgYW55IHBlbmRpbmcgY2xvc2UgKGUuZy5cbiAgICAvLyB3aGVuIHRoZSBvdmVybGF5IGlzIGhpZGRlbiBmaXJzdCk7IHRoZSB0aW1lciBpcyBhbHNvIGF1dG8tY2FuY2VsbGVkIG9uXG4gICAgLy8gdW5tb3VudC5cbiAgICBjb25zdCB7IHJ1bjogc2NoZWR1bGVDbG9zZSwgY2FuY2VsOiBjYW5jZWxTY2hlZHVsZWRDbG9zZSB9ID0gdXNlRGVib3VuY2VkQ2FsbGJhY2soKCkgPT4gc2V0T3BlbihmYWxzZSksIHN1Ym1pdFRpbWVvdXQpO1xuICAgIGNvbnN0IGhhbmRsZVNob3cgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0T3Blbih0cnVlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVIaWRlID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIGNhbmNlbFNjaGVkdWxlZENsb3NlKCk7XG4gICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZUZpbmlzaCA9IHVzZUV2ZW50Q2FsbGJhY2soKHZhbHVlcykgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICB5aWVsZCAob25GaW5pc2ggPT09IG51bGwgfHwgb25GaW5pc2ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRmluaXNoKHZhbHVlcykpO1xuICAgICAgICBpZiAoYXV0b0Nsb3NlKSB7XG4gICAgICAgICAgICBpZiAoc3VibWl0VGltZW91dCAmJiBzdWJtaXRUaW1lb3V0ID4gMCkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlQ2xvc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNldE9wZW4oZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSkpO1xuICAgIC8vIENsb25lIHRyaWdnZXIgd2l0aCBvbkNsaWNrIGhhbmRsZXJcbiAgICBjb25zdCB0cmlnZ2VyTm9kZSA9IHRyaWdnZXJcbiAgICAgICAgPyBSZWFjdC5jbG9uZUVsZW1lbnQodHJpZ2dlciwge1xuICAgICAgICAgICAgb25DbGljazogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaGFuZGxlU2hvdygpO1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdpbmFsT25DbGljayA9IChfYSA9IHRyaWdnZXIucHJvcHMpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5vbkNsaWNrO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxPbkNsaWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsT25DbGljayguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgICA6IG51bGw7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWVyZ2VkT3BlbixcbiAgICAgICAgdHJpZ2dlck5vZGUsXG4gICAgICAgIGhhbmRsZUZpbmlzaCxcbiAgICAgICAgaGFuZGxlSGlkZSxcbiAgICAgICAgaGFuZGxlU2hvdyxcbiAgICB9O1xufVxuZXhwb3J0IGRlZmF1bHQgdXNlT3ZlcmxheUZvcm07IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
@@ -27,6 +27,9 @@
27
27
  .om-component-ui-form-item {
28
28
  margin-bottom: var(--om-spacing-300, 12px);
29
29
  }
30
+ .om-component-ui-form-item-large {
31
+ margin-bottom: var(--om-spacing-600, 24px);
32
+ }
30
33
  .om-component-ui-form-item-small {
31
34
  margin-bottom: var(--om-spacing-200, 8px);
32
35
  }
@@ -54,6 +57,9 @@
54
57
  .om-component-ui-form-item .om-component-ui-form-item-error {
55
58
  margin-top: 8px;
56
59
  }
60
+ .om-component-ui-form-item .om-component-ui-form-item-warning {
61
+ margin-top: 8px;
62
+ }
57
63
  .om-component-ui-form-item .om-component-ui-form-item-feedback {
58
64
  margin-top: 8px;
59
65
  }
@@ -1,18 +1,29 @@
1
1
  import type { ReactNode } from 'react';
2
2
  import type { ButtonProps } from "../Button";
3
- import type { ProFormFieldTransformFn, ProFormValueEnumObj } from './interface';
3
+ import { getNestedValue, setNestedValue } from './core/pathUtils';
4
+ import type { ProFormDateFormatter, ProFormFieldTransformFn, ProFormValueEnumObj, ProFormValueType } from './interface';
5
+ export { getNestedValue, setNestedValue };
4
6
  export declare function stableSerialize(value: unknown): string;
5
7
  export declare function renderTextReadonly(value: unknown): ReactNode;
6
8
  export declare function renderBooleanReadonly(value: unknown): ReactNode;
7
9
  export declare function renderNumericReadonly(value: unknown): ReactNode;
8
- export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
9
- export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): Record<string, unknown>;
10
10
  export declare function resolveWidth(width: 'sm' | 'md' | 'lg' | 'xl' | number): number;
11
11
  export declare function extractButtonProps(config: false | Partial<ButtonProps> | undefined): {
12
12
  disabled: boolean;
13
13
  rest: Partial<ButtonProps>;
14
14
  };
15
15
  export declare function transformSubmitValues(values: Record<string, unknown>, transforms: Record<string, ProFormFieldTransformFn>): Record<string, unknown>;
16
+ export declare const DATE_FORMAT = "YYYY-MM-DD";
17
+ export declare const DATE_TIME_FORMAT = "YYYY-MM-DD HH:mm:ss";
18
+ /** Minimal pattern formatter supporting YYYY / MM / DD / HH / mm / ss tokens. */
19
+ export declare function formatDateByPattern(date: Date, pattern: string): string;
20
+ /**
21
+ * Recursively serialize every `Date` in `values` according to `dateFormatter`.
22
+ * With `'string'`, fields registered as `valueType: 'dateTime'` use
23
+ * `YYYY-MM-DD HH:mm:ss`, everything else `YYYY-MM-DD`. Untouched when the
24
+ * formatter is `false`. Non-Date values pass through unchanged.
25
+ */
26
+ export declare function formatDateValues(values: Record<string, unknown>, dateFormatter: ProFormDateFormatter, valueTypes: Record<string, ProFormValueType>): Record<string, unknown>;
16
27
  export declare function omitNilValues(values: Record<string, unknown>): Record<string, unknown>;
17
28
  export interface ValueEnumOption {
18
29
  label: string;
@@ -1,10 +1,6 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray";
3
2
  import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
4
3
  import _typeof from "@babel/runtime/helpers/esm/typeof";
5
- 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; } } }; }
6
- 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; } }
7
- 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; }
8
4
  var __rest = this && this.__rest || function (s, e) {
9
5
  var t = {};
10
6
  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];
@@ -14,6 +10,10 @@ var __rest = this && this.__rest || function (s, e) {
14
10
  return t;
15
11
  };
16
12
  import { WIDTH_SIZE_MAP } from './constants';
13
+ import { getNestedValue, setNestedValue } from './core/pathUtils';
14
+ // Re-exported for consumers that import the nested-path helpers from `./utils`
15
+ // (ProFormDependency, ProFormList). Canonical definitions live in core/pathUtils.
16
+ export { getNestedValue, setNestedValue };
17
17
  // ---------------------------------------------------------------------------
18
18
  // stableSerialize — deterministic deep serialization for params comparison
19
19
  // ---------------------------------------------------------------------------
@@ -47,51 +47,6 @@ export function renderNumericReadonly(value) {
47
47
  return String(num);
48
48
  }
49
49
  // ---------------------------------------------------------------------------
50
- // Nested path utilities
51
- // ---------------------------------------------------------------------------
52
- export function getNestedValue(obj, path) {
53
- var keys = path.split('.');
54
- var current = obj;
55
- var _iterator = _createForOfIteratorHelper(keys),
56
- _step;
57
- try {
58
- for (_iterator.s(); !(_step = _iterator.n()).done;) {
59
- var key = _step.value;
60
- if (current === null || current === undefined || _typeof(current) !== 'object') {
61
- return undefined;
62
- }
63
- current = current[key];
64
- }
65
- } catch (err) {
66
- _iterator.e(err);
67
- } finally {
68
- _iterator.f();
69
- }
70
- return current;
71
- }
72
- export function setNestedValue(obj, path, value) {
73
- var keys = path.split('.');
74
- if (keys.length === 1) return Object.assign(Object.assign({}, obj), _defineProperty({}, path, value));
75
- var result = Object.assign({}, obj);
76
- var current = result;
77
- for (var i = 0; i < keys.length - 1; i++) {
78
- var key = keys[i];
79
- var nextKey = keys[i + 1];
80
- var isNextArray = /^\d+$/.test(nextKey);
81
- if (current[key] === undefined || current[key] === null) {
82
- current[key] = isNextArray ? [] : {};
83
- }
84
- if (Array.isArray(current[key])) {
85
- current[key] = _toConsumableArray(current[key]);
86
- } else {
87
- current[key] = Object.assign({}, current[key]);
88
- }
89
- current = current[key];
90
- }
91
- current[keys[keys.length - 1]] = value;
92
- return result;
93
- }
94
- // ---------------------------------------------------------------------------
95
50
  // resolveWidth — convert named width to px or pass through number
96
51
  // ---------------------------------------------------------------------------
97
52
  export function resolveWidth(width) {
@@ -126,6 +81,9 @@ function isPlainObject(value) {
126
81
  export function transformSubmitValues(values, transforms) {
127
82
  var keys = Object.keys(transforms);
128
83
  if (keys.length === 0) return values;
84
+ // All nested writes go through setNestedValue (clones every object/array on
85
+ // the path) — `values` is the live form state and must never be mutated;
86
+ // only `result` itself (our own shallow copy) may be written directly.
129
87
  var result = Object.assign({}, values);
130
88
  // Process transforms in sorted key order for determinism
131
89
  keys.sort().forEach(function (name) {
@@ -141,42 +99,87 @@ export function transformSubmitValues(values, transforms) {
141
99
  delete result[name];
142
100
  Object.assign(result, transformed);
143
101
  } else {
144
- // Nested field — delete original and merge into parent object
102
+ // Nested field — rebuild the parent without the original key, merged
145
103
  var parentPath = name.slice(0, dotIndex);
146
104
  var parent = getNestedValue(result, parentPath);
147
105
  if (isPlainObject(parent)) {
148
106
  var childKey = name.slice(dotIndex + 1);
149
- delete parent[childKey];
150
- Object.assign(parent, transformed);
107
+ var newParent = Object.assign({}, parent);
108
+ delete newParent[childKey];
109
+ Object.assign(newParent, transformed);
110
+ result = setNestedValue(result, parentPath, newParent);
151
111
  }
152
112
  }
153
113
  } else {
154
- // Primitive value — replace in-place
155
- var _keys = name.split('.');
156
- if (_keys.length === 1) {
157
- result[name] = transformed;
158
- } else {
159
- var current = result;
160
- for (var i = 0; i < _keys.length - 1; i++) {
161
- var key = _keys[i];
162
- if (!isPlainObject(current[key]) && !Array.isArray(current[key])) {
163
- current[key] = {};
164
- }
165
- current = current[key];
166
- }
167
- current[_keys[_keys.length - 1]] = transformed;
168
- }
114
+ // Primitive value — replace at the (possibly nested) path
115
+ result = name.includes('.') ? setNestedValue(result, name, transformed) : Object.assign(Object.assign({}, result), _defineProperty({}, name, transformed));
169
116
  }
170
117
  });
171
118
  return result;
172
119
  }
173
120
  // ---------------------------------------------------------------------------
121
+ // Date formatting (form-level dateFormatter, dependency-free)
122
+ // ---------------------------------------------------------------------------
123
+ export var DATE_FORMAT = 'YYYY-MM-DD';
124
+ export var DATE_TIME_FORMAT = 'YYYY-MM-DD HH:mm:ss';
125
+ /** Minimal pattern formatter supporting YYYY / MM / DD / HH / mm / ss tokens. */
126
+ export function formatDateByPattern(date, pattern) {
127
+ var pad = function pad(n) {
128
+ return String(n).padStart(2, '0');
129
+ };
130
+ return pattern.replace(/YYYY/g, String(date.getFullYear())).replace(/MM/g, pad(date.getMonth() + 1)).replace(/DD/g, pad(date.getDate())).replace(/HH/g, pad(date.getHours())).replace(/mm/g, pad(date.getMinutes())).replace(/ss/g, pad(date.getSeconds()));
131
+ }
132
+ /**
133
+ * Recursively serialize every `Date` in `values` according to `dateFormatter`.
134
+ * With `'string'`, fields registered as `valueType: 'dateTime'` use
135
+ * `YYYY-MM-DD HH:mm:ss`, everything else `YYYY-MM-DD`. Untouched when the
136
+ * formatter is `false`. Non-Date values pass through unchanged.
137
+ */
138
+ export function formatDateValues(values, dateFormatter, valueTypes) {
139
+ if (dateFormatter === false) return values;
140
+ var formatOne = function formatOne(date, path) {
141
+ if (typeof dateFormatter === 'function') return dateFormatter(date, path);
142
+ if (dateFormatter === 'number') return date.getTime();
143
+ if (dateFormatter === 'string') {
144
+ var pattern = valueTypes[path] === 'dateTime' ? DATE_TIME_FORMAT : DATE_FORMAT;
145
+ return formatDateByPattern(date, pattern);
146
+ }
147
+ return formatDateByPattern(date, dateFormatter);
148
+ };
149
+ var _walk = function walk(value, path) {
150
+ if (value instanceof Date) return formatOne(value, path);
151
+ if (Array.isArray(value)) {
152
+ var changed = false;
153
+ var next = value.map(function (item, index) {
154
+ var walked = _walk(item, path ? "".concat(path, ".").concat(index) : String(index));
155
+ if (walked !== item) changed = true;
156
+ return walked;
157
+ });
158
+ return changed ? next : value;
159
+ }
160
+ if (isPlainObject(value)) {
161
+ var _changed = false;
162
+ var _next = {};
163
+ for (var _i = 0, _Object$keys = Object.keys(value); _i < _Object$keys.length; _i++) {
164
+ var key = _Object$keys[_i];
165
+ var child = value[key];
166
+ var walked = _walk(child, path ? "".concat(path, ".").concat(key) : key);
167
+ if (walked !== child) _changed = true;
168
+ _next[key] = walked;
169
+ }
170
+ return _changed ? _next : value;
171
+ }
172
+ return value;
173
+ };
174
+ return _walk(values, '');
175
+ }
176
+ // ---------------------------------------------------------------------------
174
177
  // omitNilValues — recursively remove null / undefined / '' from object
175
178
  // ---------------------------------------------------------------------------
176
179
  export function omitNilValues(values) {
177
180
  var result = {};
178
- for (var _i = 0, _Object$keys = Object.keys(values); _i < _Object$keys.length; _i++) {
179
- var key = _Object$keys[_i];
181
+ for (var _i2 = 0, _Object$keys2 = Object.keys(values); _i2 < _Object$keys2.length; _i2++) {
182
+ var key = _Object$keys2[_i2];
180
183
  var v = values[key];
181
184
  if (v === null || v === undefined || v === '') continue;
182
185
  if (isPlainObject(v)) {
@@ -208,4 +211,4 @@ export function valueEnumToOptions(valueEnum) {
208
211
  };
209
212
  });
210
213
  }
211
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS91dGlscy50cyJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIldJRFRIX1NJWkVfTUFQIiwic3RhYmxlU2VyaWFsaXplIiwidmFsdWUiLCJ1bmRlZmluZWQiLCJTdHJpbmciLCJfdHlwZW9mIiwiSlNPTiIsInN0cmluZ2lmeSIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsImpvaW4iLCJrZXlzIiwic29ydCIsImsiLCJyZW5kZXJUZXh0UmVhZG9ubHkiLCJyZW5kZXJCb29sZWFuUmVhZG9ubHkiLCJyZW5kZXJOdW1lcmljUmVhZG9ubHkiLCJudW0iLCJOdW1iZXIiLCJpc05hTiIsImdldE5lc3RlZFZhbHVlIiwib2JqIiwicGF0aCIsInNwbGl0IiwiY3VycmVudCIsIl9pdGVyYXRvciIsIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwiX3N0ZXAiLCJuIiwiZG9uZSIsImtleSIsImVyciIsImYiLCJzZXROZXN0ZWRWYWx1ZSIsImFzc2lnbiIsIl9kZWZpbmVQcm9wZXJ0eSIsInJlc3VsdCIsIm5leHRLZXkiLCJpc05leHRBcnJheSIsInRlc3QiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJyZXNvbHZlV2lkdGgiLCJ3aWR0aCIsIl9hIiwibWQiLCJleHRyYWN0QnV0dG9uUHJvcHMiLCJjb25maWciLCJkaXNhYmxlZCIsInJlc3QiLCJfY29uZmlnJGRpc2FibGVkIiwiaXNQbGFpbk9iamVjdCIsInRyYW5zZm9ybVN1Ym1pdFZhbHVlcyIsInZhbHVlcyIsInRyYW5zZm9ybXMiLCJmb3JFYWNoIiwibmFtZSIsInRyYW5zZm9ybUZuIiwicmF3VmFsdWUiLCJ0cmFuc2Zvcm1lZCIsImRvdEluZGV4IiwibGFzdEluZGV4T2YiLCJwYXJlbnRQYXRoIiwic2xpY2UiLCJwYXJlbnQiLCJjaGlsZEtleSIsIm9taXROaWxWYWx1ZXMiLCJfaSIsIl9PYmplY3Qka2V5cyIsInYiLCJjbGVhbmVkIiwidmFsdWVFbnVtVG9PcHRpb25zIiwidmFsdWVFbnVtIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5IiwibGFiZWwiLCJ0ZXh0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsSUFBSUEsTUFBTSxHQUFJLElBQUksSUFBSSxJQUFJLENBQUNBLE1BQU0sSUFBSyxVQUFVQyxDQUFDLEVBQUVDLENBQUMsRUFBRTtFQUNsRCxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsS0FBSyxJQUFJQyxDQUFDLElBQUlILENBQUMsRUFBRSxJQUFJSSxNQUFNLENBQUNDLFNBQVMsQ0FBQ0MsY0FBYyxDQUFDQyxJQUFJLENBQUNQLENBQUMsRUFBRUcsQ0FBQyxDQUFDLElBQUlGLENBQUMsQ0FBQ08sT0FBTyxDQUFDTCxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQy9FRCxDQUFDLENBQUNDLENBQUMsQ0FBQyxHQUFHSCxDQUFDLENBQUNHLENBQUMsQ0FBQztFQUNmLElBQUlILENBQUMsSUFBSSxJQUFJLElBQUksT0FBT0ksTUFBTSxDQUFDSyxxQkFBcUIsS0FBSyxVQUFVLEVBQy9ELEtBQUssSUFBSUMsQ0FBQyxHQUFHLENBQUMsRUFBRVAsQ0FBQyxHQUFHQyxNQUFNLENBQUNLLHFCQUFxQixDQUFDVCxDQUFDLENBQUMsRUFBRVUsQ0FBQyxHQUFHUCxDQUFDLENBQUNRLE1BQU0sRUFBRUQsQ0FBQyxFQUFFLEVBQUU7SUFDcEUsSUFBSVQsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQ08sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUlOLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDTyxvQkFBb0IsQ0FBQ0wsSUFBSSxDQUFD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RyxDQUFDLENBQUM7TUFDaEMsSUFBSTlFLE1BQU0sQ0FBQ3FCLElBQUksQ0FBQzBELE9BQU8sQ0FBQyxDQUFDeEUsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQ3VDLE1BQU0sQ0FBQ04sR0FBRyxDQUFDLEdBQUd1QyxPQUFPO01BQ3ZCO0lBQ0YsQ0FBQyxNQUFNO01BQ0xqQyxNQUFNLENBQUNOLEdBQUcsQ0FBQyxHQUFHc0MsQ0FBQztJQUNqQjtFQUNGO0VBQ0EsT0FBT2hDLE1BQU07QUFDZjtBQVdBLE9BQU0sU0FBVWtDLGtCQUFrQkEsQ0FDaENDLFNBQThCLEVBQUE7RUFFOUIsT0FBT2pGLE1BQU0sQ0FBQ2tGLE9BQU8sQ0FBQ0QsU0FBUyxDQUFDLENBQUM5RCxHQUFHLENBQUMsVUFBQWdFLElBQUEsRUFBa0I7SUFBQSxJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUYsSUFBQTtNQUFoQjNDLEdBQUcsR0FBQTRDLEtBQUE7TUFBRTVCLE1BQU0sR0FBQTRCLEtBQUE7SUFDaEQsSUFBSSxPQUFPNUIsTUFBTSxLQUFLLFFBQVEsRUFBRTtNQUM5QixPQUFPO1FBQUU4QixLQUFLLEVBQUU5QixNQUFNO1FBQUU3QyxLQUFLLEVBQUU2QjtNQUFHLENBQUU7SUFDdEM7SUFDQSxPQUFPO01BQUU4QyxLQUFLLEVBQUU5QixNQUFNLENBQUMrQixJQUFJO01BQUU1RSxLQUFLLEVBQUU2QixHQUFHO01BQUVpQixRQUFRLEVBQUVELE1BQU0sQ0FBQ0M7SUFBUSxDQUFFO0VBQ3RFLENBQUMsQ0FBQztBQUNKIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IFdJRFRIX1NJWkVfTUFQIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBzdGFibGVTZXJpYWxpemUg4oCUIGRldGVybWluaXN0aWMgZGVlcCBzZXJpYWxpemF0aW9uIGZvciBwYXJhbXMgY29tcGFyaXNvblxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gc3RhYmxlU2VyaWFsaXplKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnKVxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gJ1snICsgdmFsdWUubWFwKHN0YWJsZVNlcmlhbGl6ZSkuam9pbignLCcpICsgJ10nO1xuICAgIH1cbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModmFsdWUpLnNvcnQoKTtcbiAgICByZXR1cm4gKCd7JyArXG4gICAgICAgIGtleXNcbiAgICAgICAgICAgIC5tYXAoKGspID0+IEpTT04uc3RyaW5naWZ5KGspICtcbiAgICAgICAgICAgICc6JyArXG4gICAgICAgICAgICBzdGFibGVTZXJpYWxpemUodmFsdWVba10pKVxuICAgICAgICAgICAgLmpvaW4oJywnKSArXG4gICAgICAgICd9Jyk7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIFJlYWRvbmx5IHJlbmRlcmVyc1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyVGV4dFJlYWRvbmx5KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJvb2xlYW5SZWFkb25seSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiB2YWx1ZSA/ICdZZXMnIDogJ05vJztcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJOdW1lcmljUmVhZG9ubHkodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpXG4gICAgICAgIHJldHVybiAnLSc7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgaWYgKE51bWJlci5pc05hTihudW0pKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIHJldHVybiBTdHJpbmcobnVtKTtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gTmVzdGVkIHBhdGggdXRpbGl0aWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgpIHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBjdXJyZW50ID0gb2JqO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09IG51bGwgfHwgY3VycmVudCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBjdXJyZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgIH1cbiAgICByZXR1cm4gY3VycmVudDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBzZXROZXN0ZWRWYWx1ZShvYmosIHBhdGgsIHZhbHVlKSB7XG4gICAgY29uc3Qga2V5cyA9IHBhdGguc3BsaXQoJy4nKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDEpXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG9iaiksIHsgW3BhdGhdOiB2YWx1ZSB9KTtcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBvYmopO1xuICAgIGxldCBjdXJyZW50ID0gcmVzdWx0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgY29uc3QgbmV4dEtleSA9IGtleXNbaSArIDFdO1xuICAgICAgICBjb25zdCBpc05leHRBcnJheSA9IC9eXFxkKyQvLnRlc3QobmV4dEtleSk7XG4gICAgICAgIGlmIChjdXJyZW50W2tleV0gPT09IHVuZGVmaW5lZCB8fCBjdXJyZW50W2tleV0gPT09IG51bGwpIHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IGlzTmV4dEFycmF5ID8gW10gOiB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICBjdXJyZW50W2tleV0gPSBbLi4uY3VycmVudFtrZXldXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGN1cnJlbnRba2V5XSA9IE9iamVjdC5hc3NpZ24oe30sIGN1cnJlbnRba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudCA9IGN1cnJlbnRba2V5XTtcbiAgICB9XG4gICAgY3VycmVudFtrZXlzW2tleXMubGVuZ3RoIC0gMV1dID0gdmFsdWU7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gcmVzb2x2ZVdpZHRoIOKAlCBjb252ZXJ0IG5hbWVkIHdpZHRoIHRvIHB4IG9yIHBhc3MgdGhyb3VnaCBudW1iZXJcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVXaWR0aCh3aWR0aCkge1xuICAgIHZhciBfYTtcbiAgICBpZiAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJylcbiAgICAgICAgcmV0dXJuIHdpZHRoO1xuICAgIHJldHVybiAoX2EgPSBXSURUSF9TSVpFX01BUFt3aWR0aF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFdJRFRIX1NJWkVfTUFQLm1kO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBleHRyYWN0QnV0dG9uUHJvcHMg4oCUIHNhZmVseSBleHRyYWN0IHByb3BzIGZyb20gYnV0dG9uIGNvbmZpZ1xuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdEJ1dHRvblByb3BzKGNvbmZpZykge1xuICAgIGlmIChjb25maWcgPT09IGZhbHNlIHx8IGNvbmZpZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7IGRpc2FibGVkOiBmYWxzZSwgcmVzdDoge30gfTtcbiAgICB9XG4gICAgY29uc3QgeyBkaXNhYmxlZCA9IGZhbHNlIH0gPSBjb25maWcsIHJlc3QgPSBfX3Jlc3QoY29uZmlnLCBbXCJkaXNhYmxlZFwiXSk7XG4gICAgcmV0dXJuIHsgZGlzYWJsZWQsIHJlc3QgfTtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gdHJhbnNmb3JtU3VibWl0VmFsdWVzIOKAlCBhcHBseSByZWdpc3RlcmVkIGZpZWxkIHRyYW5zZm9ybXMgdG8gZm9ybSB2YWx1ZXNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0cmFuc2Zvcm1TdWJtaXRWYWx1ZXModmFsdWVzLCB0cmFuc2Zvcm1zKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRyYW5zZm9ybXMpO1xuICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCB2YWx1ZXMpO1xuICAgIC8vIFByb2Nlc3MgdHJhbnNmb3JtcyBpbiBzb3J0ZWQga2V5IG9yZGVyIGZvciBkZXRlcm1pbmlzbVxuICAgIGtleXMuc29ydCgpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtRm4gPSB0cmFuc2Zvcm1zW25hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybUZuICE9PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCByYXdWYWx1ZSA9IGdldE5lc3RlZFZhbHVlKHJlc3VsdCwgbmFtZSk7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybWVkID0gdHJhbnNmb3JtRm4ocmF3VmFsdWUsIG5hbWUsIHJlc3VsdCk7XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHRyYW5zZm9ybWVkKSkge1xuICAgICAgICAgICAgLy8gSWYgdHJhbnNmb3JtIHJldHVybnMgYW4gb2JqZWN0LCBkZWxldGUgb3JpZ2luYWwga2V5IGFuZCBtZXJnZSB0byBwYXJlbnRcbiAgICAgICAgICAgIGNvbnN0IGRvdEluZGV4ID0gbmFtZS5sYXN0SW5kZXhPZignLicpO1xuICAgICAgICAgICAgaWYgKGRvdEluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIC8vIFRvcC1sZXZlbCBmaWVsZCDigJQgZGVsZXRlIG9yaWdpbmFsIGFuZCBtZXJnZSBhdCByb290XG4gICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtuYW1lXTtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHJlc3VsdCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTmVzdGVkIGZpZWxkIOKAlCBkZWxldGUgb3JpZ2luYWwgYW5kIG1lcmdlIGludG8gcGFyZW50IG9iamVjdFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBuYW1lLnNsaWNlKDAsIGRvdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRLZXkgPSBuYW1lLnNsaWNlKGRvdEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJlbnRbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKHBhcmVudCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFByaW1pdGl2ZSB2YWx1ZSDigJQgcmVwbGFjZSBpbi1wbGFjZVxuICAgICAgICAgICAgY29uc3Qga2V5cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtuYW1lXSA9IHRyYW5zZm9ybWVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGxhaW5PYmplY3QoY3VycmVudFtrZXldKSAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50W2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50W2tleV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudFtrZXldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJyZW50W2tleXNba2V5cy5sZW5ndGggLSAxXV0gPSB0cmFuc2Zvcm1lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIG9taXROaWxWYWx1ZXMg4oCUIHJlY3Vyc2l2ZWx5IHJlbW92ZSBudWxsIC8gdW5kZWZpbmVkIC8gJycgZnJvbSBvYmplY3Rcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIG9taXROaWxWYWx1ZXModmFsdWVzKSB7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXModmFsdWVzKSkge1xuICAgICAgICBjb25zdCB2ID0gdmFsdWVzW2tleV07XG4gICAgICAgIGlmICh2ID09PSBudWxsIHx8IHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSAnJylcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNQbGFpbk9iamVjdCh2KSkge1xuICAgICAgICAgICAgY29uc3QgY2xlYW5lZCA9IG9taXROaWxWYWx1ZXModik7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoY2xlYW5lZCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHJlc3VsdFtrZXldID0gY2xlYW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJlc3VsdFtrZXldID0gdjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZhbHVlRW51bVRvT3B0aW9ucyh2YWx1ZUVudW0pIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModmFsdWVFbnVtKS5tYXAoKFtrZXksIGNvbmZpZ10pID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4geyBsYWJlbDogY29uZmlnLCB2YWx1ZToga2V5IH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbmZpZy50ZXh0LCB2YWx1ZToga2V5LCBkaXNhYmxlZDogY29uZmlnLmRpc2FibGVkIH07XG4gICAgfSk7XG59IixudWxsXSwic291cmNlUm9vdCI6Ii4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYyJ9
214
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvUHJvRm9ybS91dGlscy50cyJdLCJuYW1lcyI6WyJfX3Jlc3QiLCJzIiwiZSIsInQiLCJwIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImkiLCJsZW5ndGgiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIldJRFRIX1NJWkVfTUFQIiwiZ2V0TmVzdGVkVmFsdWUiLCJzZXROZXN0ZWRWYWx1ZSIsInN0YWJsZVNlcmlhbGl6ZSIsInZhbHVlIiwidW5kZWZpbmVkIiwiU3RyaW5nIiwiX3R5cGVvZiIsIkpTT04iLCJzdHJpbmdpZnkiLCJBcnJheSIsImlzQXJyYXkiLCJtYXAiLCJqb2luIiwia2V5cyIsInNvcnQiLCJrIiwicmVuZGVyVGV4dFJlYWRvbmx5IiwicmVuZGVyQm9vbGVhblJlYWRvbmx5IiwicmVuZGVyTnVtZXJpY1JlYWRvbmx5IiwibnVtIiwiTnVtYmVyIiwiaXNOYU4iLCJyZXNvbHZlV2lkdGgiLCJ3aWR0aCIsIl9hIiwibWQiLCJleHRyYWN0QnV0dG9uUHJvcHMiLCJjb25maWciLCJkaXNhYmxlZCIsInJlc3QiLCJfY29uZmlnJGRpc2FibGVkIiwiaXNQbGFpbk9iamVjdCIsInRyYW5zZm9ybVN1Ym1pdFZhbHVlcyIsInZhbHVlcyIsInRyYW5zZm9ybXMiLCJyZXN1bHQiLCJhc3NpZ24iLCJmb3JFYWNoIiwibmFtZSIsInRyYW5zZm9ybUZuIiwicmF3VmFsdWUiLCJ0cmFuc2Zvcm1lZCIsImRvdEluZGV4IiwibGFzdEluZGV4T2YiLCJwYXJlbnRQYXRoIiwic2xpY2UiLCJwYXJlbnQiLCJjaGlsZEtleSIsIm5ld1BhcmVudCIsImluY2x1ZGVzIiwiX2RlZmluZVByb3BlcnR5IiwiREFURV9GT1JNQVQiLCJEQVRFX1RJTUVfRk9STUFUIiwiZm9ybWF0RGF0ZUJ5UGF0dGVybiIsImRhdGUiLCJwYXR0ZXJuIiwicGFkIiwibiIsInBhZFN0YXJ0IiwicmVwbGFjZSIsImdldEZ1bGxZZWFyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsImZvcm1hdERhdGVWYWx1ZXMiLCJkYXRlRm9ybWF0dGVyIiwidmFsdWVUeXBlcyIsImZvcm1hdE9uZSIsInBhdGgiLCJnZXRUaW1lIiwid2FsayIsIkRhdGUiLCJjaGFuZ2VkIiwibmV4dCIsIml0ZW0iLCJpbmRleCIsIndhbGtlZCIsImNvbmNhdCIsIl9pIiwiX09iamVjdCRrZXlzIiwia2V5IiwiY2hpbGQiLCJvbWl0TmlsVmFsdWVzIiwiX2kyIiwiX09iamVjdCRrZXlzMiIsInYiLCJjbGVhbmVkIiwidmFsdWVFbnVtVG9PcHRpb25zIiwidmFsdWVFbnVtIiwiZW50cmllcyIsIl9yZWYiLCJfcmVmMiIsIl9zbGljZWRUb0FycmF5IiwibGFiZWwiLCJ0ZXh0Il0sIm1hcHBpbmdzIjoiOzs7QUFBQSxJQUFJQSxNQUFNLEdBQUksSUFBSSxJQUFJLElBQUksQ0FBQ0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQ2xELElBQUlDLENBQUMsR0FBRyxDQUFDLENBQUM7RUFDVixLQUFLLElBQUlDLENBQUMsSUFBSUgsQ0FBQyxFQUFFLElBQUlJLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDQyxjQUFjLENBQUNDLElBQUksQ0FBQ1AsQ0FBQyxFQUFFRyxDQUFDLENBQUMsSUFBSUYsQ0FBQyxDQUFDTyxPQUFPLENBQUNMLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDL0VELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDLEdBQUdILENBQUMsQ0FBQ0csQ0FBQyxDQUFDO0VBQ2YsSUFBSUgsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPSSxNQUFNLENBQUNLLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFUCxDQUFDLEdB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QUMsR0FBR0ssQ0FBQztJQUNqQjtFQUNGO0VBQ0EsT0FBT3BELE1BQU07QUFDZjtBQVdBLE9BQU0sU0FBVXNELGtCQUFrQkEsQ0FDaENDLFNBQThCLEVBQUE7RUFFOUIsT0FBT3BHLE1BQU0sQ0FBQ3FHLE9BQU8sQ0FBQ0QsU0FBUyxDQUFDLENBQUMvRSxHQUFHLENBQUMsVUFBQWlGLElBQUEsRUFBa0I7SUFBQSxJQUFBQyxLQUFBLEdBQUFDLGNBQUEsQ0FBQUYsSUFBQTtNQUFoQlYsR0FBRyxHQUFBVyxLQUFBO01BQUVsRSxNQUFNLEdBQUFrRSxLQUFBO0lBQ2hELElBQUksT0FBT2xFLE1BQU0sS0FBSyxRQUFRLEVBQUU7TUFDOUIsT0FBTztRQUFFb0UsS0FBSyxFQUFFcEUsTUFBTTtRQUFFeEIsS0FBSyxFQUFFK0U7TUFBRyxDQUFFO0lBQ3RDO0lBQ0EsT0FBTztNQUFFYSxLQUFLLEVBQUVwRSxNQUFNLENBQUNxRSxJQUFJO01BQUU3RixLQUFLLEVBQUUrRSxHQUFHO01BQUV0RCxRQUFRLEVBQUVELE1BQU0sQ0FBQ0M7SUFBUSxDQUFFO0VBQ3RFLENBQUMsQ0FBQztBQUNKIiwiZmlsZSI6ImNvbXBvbmVudHMvUHJvRm9ybS91dGlscy5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IFdJRFRIX1NJWkVfTUFQIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkVmFsdWUsIHNldE5lc3RlZFZhbHVlIH0gZnJvbSAnLi9jb3JlL3BhdGhVdGlscyc7XG4vLyBSZS1leHBvcnRlZCBmb3IgY29uc3VtZXJzIHRoYXQgaW1wb3J0IHRoZSBuZXN0ZWQtcGF0aCBoZWxwZXJzIGZyb20gYC4vdXRpbHNgXG4vLyAoUHJvRm9ybURlcGVuZGVuY3ksIFByb0Zvcm1MaXN0KS4gQ2Fub25pY2FsIGRlZmluaXRpb25zIGxpdmUgaW4gY29yZS9wYXRoVXRpbHMuXG5leHBvcnQgeyBnZXROZXN0ZWRWYWx1ZSwgc2V0TmVzdGVkVmFsdWUgfTtcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gc3RhYmxlU2VyaWFsaXplIOKAlCBkZXRlcm1pbmlzdGljIGRlZXAgc2VyaWFsaXphdGlvbiBmb3IgcGFyYW1zIGNvbXBhcmlzb25cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHN0YWJsZVNlcmlhbGl6ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JylcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuICdbJyArIHZhbHVlLm1hcChzdGFibGVTZXJpYWxpemUpLmpvaW4oJywnKSArICddJztcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZhbHVlKS5zb3J0KCk7XG4gICAgcmV0dXJuICgneycgK1xuICAgICAgICBrZXlzXG4gICAgICAgICAgICAubWFwKChrKSA9PiBKU09OLnN0cmluZ2lmeShrKSArXG4gICAgICAgICAgICAnOicgK1xuICAgICAgICAgICAgc3RhYmxlU2VyaWFsaXplKHZhbHVlW2tdKSlcbiAgICAgICAgICAgIC5qb2luKCcsJykgK1xuICAgICAgICAnfScpO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBSZWFkb25seSByZW5kZXJlcnNcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclRleHRSZWFkb25seSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJylcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJCb29sZWFuUmVhZG9ubHkodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gdmFsdWUgPyAnWWVzJyA6ICdObyc7XG59XG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTnVtZXJpY1JlYWRvbmx5KHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKVxuICAgICAgICByZXR1cm4gJy0nO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSlcbiAgICAgICAgcmV0dXJuICctJztcbiAgICByZXR1cm4gU3RyaW5nKG51bSk7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHJlc29sdmVXaWR0aCDigJQgY29udmVydCBuYW1lZCB3aWR0aCB0byBweCBvciBwYXNzIHRocm91Z2ggbnVtYmVyXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlV2lkdGgod2lkdGgpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiB3aWR0aDtcbiAgICByZXR1cm4gKF9hID0gV0lEVEhfU0laRV9NQVBbd2lkdGhdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBXSURUSF9TSVpFX01BUC5tZDtcbn1cbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gZXh0cmFjdEJ1dHRvblByb3BzIOKAlCBzYWZlbHkgZXh0cmFjdCBwcm9wcyBmcm9tIGJ1dHRvbiBjb25maWdcbi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RCdXR0b25Qcm9wcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSBmYWxzZSB8fCBjb25maWcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geyBkaXNhYmxlZDogZmFsc2UsIHJlc3Q6IHt9IH07XG4gICAgfVxuICAgIGNvbnN0IHsgZGlzYWJsZWQgPSBmYWxzZSB9ID0gY29uZmlnLCByZXN0ID0gX19yZXN0KGNvbmZpZywgW1wiZGlzYWJsZWRcIl0pO1xuICAgIHJldHVybiB7IGRpc2FibGVkLCByZXN0IH07XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIHRyYW5zZm9ybVN1Ym1pdFZhbHVlcyDigJQgYXBwbHkgcmVnaXN0ZXJlZCBmaWVsZCB0cmFuc2Zvcm1zIHRvIGZvcm0gdmFsdWVzXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtU3VibWl0VmFsdWVzKHZhbHVlcywgdHJhbnNmb3Jtcykge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0cmFuc2Zvcm1zKTtcbiAgICBpZiAoa2V5cy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgLy8gQWxsIG5lc3RlZCB3cml0ZXMgZ28gdGhyb3VnaCBzZXROZXN0ZWRWYWx1ZSAoY2xvbmVzIGV2ZXJ5IG9iamVjdC9hcnJheSBvblxuICAgIC8vIHRoZSBwYXRoKSDigJQgYHZhbHVlc2AgaXMgdGhlIGxpdmUgZm9ybSBzdGF0ZSBhbmQgbXVzdCBuZXZlciBiZSBtdXRhdGVkO1xuICAgIC8vIG9ubHkgYHJlc3VsdGAgaXRzZWxmIChvdXIgb3duIHNoYWxsb3cgY29weSkgbWF5IGJlIHdyaXR0ZW4gZGlyZWN0bHkuXG4gICAgbGV0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIHZhbHVlcyk7XG4gICAgLy8gUHJvY2VzcyB0cmFuc2Zvcm1zIGluIHNvcnRlZCBrZXkgb3JkZXIgZm9yIGRldGVybWluaXNtXG4gICAga2V5cy5zb3J0KCkuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCB0cmFuc2Zvcm1GbiA9IHRyYW5zZm9ybXNbbmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgdHJhbnNmb3JtRm4gIT09ICdmdW5jdGlvbicpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gZ2V0TmVzdGVkVmFsdWUocmVzdWx0LCBuYW1lKTtcbiAgICAgICAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1GbihyYXdWYWx1ZSwgbmFtZSwgcmVzdWx0KTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodHJhbnNmb3JtZWQpKSB7XG4gICAgICAgICAgICAvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhbiBvYmplY3QsIGRlbGV0ZSBvcmlnaW5hbCBrZXkgYW5kIG1lcmdlIHRvIHBhcmVudFxuICAgICAgICAgICAgY29uc3QgZG90SW5kZXggPSBuYW1lLmxhc3RJbmRleE9mKCcuJyk7XG4gICAgICAgICAgICBpZiAoZG90SW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgLy8gVG9wLWxldmVsIGZpZWxkIOKAlCBkZWxldGUgb3JpZ2luYWwgYW5kIG1lcmdlIGF0IHJvb3RcbiAgICAgICAgICAgICAgICBkZWxldGUgcmVzdWx0W25hbWVdO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB0cmFuc2Zvcm1lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgZmllbGQg4oCUIHJlYnVpbGQgdGhlIHBhcmVudCB3aXRob3V0IHRoZSBvcmlnaW5hbCBrZXksIG1lcmdlZFxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSBuYW1lLnNsaWNlKDAsIGRvdEluZGV4KTtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSBnZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgpO1xuICAgICAgICAgICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHBhcmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hpbGRLZXkgPSBuYW1lLnNsaWNlKGRvdEluZGV4ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcmVudCA9IE9iamVjdC5hc3NpZ24oe30sIHBhcmVudCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBuZXdQYXJlbnRbY2hpbGRLZXldO1xuICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld1BhcmVudCwgdHJhbnNmb3JtZWQpO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBzZXROZXN0ZWRWYWx1ZShyZXN1bHQsIHBhcmVudFBhdGgsIG5ld1BhcmVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gUHJpbWl0aXZlIHZhbHVlIOKAlCByZXBsYWNlIGF0IHRoZSAocG9zc2libHkgbmVzdGVkKSBwYXRoXG4gICAgICAgICAgICByZXN1bHQgPSBuYW1lLmluY2x1ZGVzKCcuJylcbiAgICAgICAgICAgICAgICA/IHNldE5lc3RlZFZhbHVlKHJlc3VsdCwgbmFtZSwgdHJhbnNmb3JtZWQpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHJlc3VsdCksIHsgW25hbWVdOiB0cmFuc2Zvcm1lZCB9KTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG59XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbi8vIERhdGUgZm9ybWF0dGluZyAoZm9ybS1sZXZlbCBkYXRlRm9ybWF0dGVyLCBkZXBlbmRlbmN5LWZyZWUpXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBjb25zdCBEQVRFX0ZPUk1BVCA9ICdZWVlZLU1NLUREJztcbmV4cG9ydCBjb25zdCBEQVRFX1RJTUVfRk9STUFUID0gJ1lZWVktTU0tREQgSEg6bW06c3MnO1xuLyoqIE1pbmltYWwgcGF0dGVybiBmb3JtYXR0ZXIgc3VwcG9ydGluZyBZWVlZIC8gTU0gLyBERCAvIEhIIC8gbW0gLyBzcyB0b2tlbnMuICovXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBwYXR0ZXJuKSB7XG4gICAgY29uc3QgcGFkID0gKG4pID0+IFN0cmluZyhuKS5wYWRTdGFydCgyLCAnMCcpO1xuICAgIHJldHVybiBwYXR0ZXJuXG4gICAgICAgIC5yZXBsYWNlKC9ZWVlZL2csIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpKVxuICAgICAgICAucmVwbGFjZSgvTU0vZywgcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpKVxuICAgICAgICAucmVwbGFjZSgvREQvZywgcGFkKGRhdGUuZ2V0RGF0ZSgpKSlcbiAgICAgICAgLnJlcGxhY2UoL0hIL2csIHBhZChkYXRlLmdldEhvdXJzKCkpKVxuICAgICAgICAucmVwbGFjZSgvbW0vZywgcGFkKGRhdGUuZ2V0TWludXRlcygpKSlcbiAgICAgICAgLnJlcGxhY2UoL3NzL2csIHBhZChkYXRlLmdldFNlY29uZHMoKSkpO1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzZXJpYWxpemUgZXZlcnkgYERhdGVgIGluIGB2YWx1ZXNgIGFjY29yZGluZyB0byBgZGF0ZUZvcm1hdHRlcmAuXG4gKiBXaXRoIGAnc3RyaW5nJ2AsIGZpZWxkcyByZWdpc3RlcmVkIGFzIGB2YWx1ZVR5cGU6ICdkYXRlVGltZSdgIHVzZVxuICogYFlZWVktTU0tREQgSEg6bW06c3NgLCBldmVyeXRoaW5nIGVsc2UgYFlZWVktTU0tRERgLiBVbnRvdWNoZWQgd2hlbiB0aGVcbiAqIGZvcm1hdHRlciBpcyBgZmFsc2VgLiBOb24tRGF0ZSB2YWx1ZXMgcGFzcyB0aHJvdWdoIHVuY2hhbmdlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERhdGVWYWx1ZXModmFsdWVzLCBkYXRlRm9ybWF0dGVyLCB2YWx1ZVR5cGVzKSB7XG4gICAgaWYgKGRhdGVGb3JtYXR0ZXIgPT09IGZhbHNlKVxuICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgIGNvbnN0IGZvcm1hdE9uZSA9IChkYXRlLCBwYXRoKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0ZUZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIHJldHVybiBkYXRlRm9ybWF0dGVyKGRhdGUsIHBhdGgpO1xuICAgICAgICBpZiAoZGF0ZUZvcm1hdHRlciA9PT0gJ251bWJlcicpXG4gICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7XG4gICAgICAgIGlmIChkYXRlRm9ybWF0dGVyID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcGF0dGVybiA9IHZhbHVlVHlwZXNbcGF0aF0gPT09ICdkYXRlVGltZScgPyBEQVRFX1RJTUVfRk9STUFUIDogREFURV9GT1JNQVQ7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBwYXR0ZXJuKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0RGF0ZUJ5UGF0dGVybihkYXRlLCBkYXRlRm9ybWF0dGVyKTtcbiAgICB9O1xuICAgIGNvbnN0IHdhbGsgPSAodmFsdWUsIHBhdGgpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRPbmUodmFsdWUsIHBhdGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGxldCBjaGFuZ2VkID0gZmFsc2U7XG4gICAgICAgICAgICBjb25zdCBuZXh0ID0gdmFsdWUubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHdhbGtlZCA9IHdhbGsoaXRlbSwgcGF0aCA/IGAke3BhdGh9LiR7aW5kZXh9YCA6IFN0cmluZyhpbmRleCkpO1xuICAgICAgICAgICAgICAgIGlmICh3YWxrZWQgIT09IGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB3YWxrZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BsYWluT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gdmFsdWVba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCB3YWxrZWQgPSB3YWxrKGNoaWxkLCBwYXRoID8gYCR7cGF0aH0uJHtrZXl9YCA6IGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHdhbGtlZCAhPT0gY2hpbGQpXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIG5leHRba2V5XSA9IHdhbGtlZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjaGFuZ2VkID8gbmV4dCA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICAgIHJldHVybiB3YWxrKHZhbHVlcywgJycpO1xufVxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBvbWl0TmlsVmFsdWVzIOKAlCByZWN1cnNpdmVseSByZW1vdmUgbnVsbCAvIHVuZGVmaW5lZCAvICcnIGZyb20gb2JqZWN0XG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmV4cG9ydCBmdW5jdGlvbiBvbWl0TmlsVmFsdWVzKHZhbHVlcykge1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHZhbHVlcykpIHtcbiAgICAgICAgY29uc3QgdiA9IHZhbHVlc1trZXldO1xuICAgICAgICBpZiAodiA9PT0gbnVsbCB8fCB2ID09PSB1bmRlZmluZWQgfHwgdiA9PT0gJycpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodikpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsZWFuZWQgPSBvbWl0TmlsVmFsdWVzKHYpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGNsZWFuZWQpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRba2V5XSA9IGNsZWFuZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRba2V5XSA9IHY7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZUVudW1Ub09wdGlvbnModmFsdWVFbnVtKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHZhbHVlRW51bSkubWFwKChba2V5LCBjb25maWddKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgbGFiZWw6IGNvbmZpZywgdmFsdWU6IGtleSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGxhYmVsOiBjb25maWcudGV4dCwgdmFsdWU6IGtleSwgZGlzYWJsZWQ6IGNvbmZpZy5kaXNhYmxlZCB9O1xuICAgIH0pO1xufSIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==