@1money/react-ui 1.16.0 → 1.17.0

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 (268) hide show
  1. package/AGENTS.md +393 -0
  2. package/es/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  3. package/es/components/CheckboxGroup/CheckboxGroup.js +94 -91
  4. package/es/components/CheckboxGroup/interface.d.ts +21 -15
  5. package/es/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  6. package/es/components/Form/Form.d.ts +29 -0
  7. package/es/components/Form/Form.js +188 -0
  8. package/es/components/Form/FormItem.d.ts +4 -0
  9. package/es/components/Form/FormItem.js +165 -0
  10. package/es/components/Form/FormItemContent.d.ts +18 -0
  11. package/es/components/Form/FormItemContent.js +146 -0
  12. package/es/components/Form/constants.d.ts +46 -0
  13. package/es/components/Form/constants.js +65 -0
  14. package/es/components/Form/helper.d.ts +120 -0
  15. package/es/components/Form/helper.js +284 -0
  16. package/es/components/Form/index.d.ts +20 -0
  17. package/es/components/Form/index.js +21 -0
  18. package/es/components/Form/interface.d.ts +238 -0
  19. package/es/components/Form/interface.js +2 -0
  20. package/es/components/Form/style/Form.css +1 -0
  21. package/es/components/Form/style/Form.scss +167 -0
  22. package/es/components/Form/style/css.js +2 -0
  23. package/es/components/Form/style/index.d.ts +1 -0
  24. package/es/components/Form/style/index.js +2 -0
  25. package/es/components/Form/useFormItemContext.d.ts +32 -0
  26. package/es/components/Form/useFormItemContext.js +55 -0
  27. package/es/components/Form/useFormItemWatch.d.ts +51 -0
  28. package/es/components/Form/useFormItemWatch.js +69 -0
  29. package/es/components/Form/useValidationTrigger.d.ts +40 -0
  30. package/es/components/Form/useValidationTrigger.js +74 -0
  31. package/es/components/Input/Input.js +72 -74
  32. package/es/components/Input/interface.d.ts +9 -9
  33. package/es/components/InputAmount/InputAmount.js +228 -276
  34. package/es/components/InputAmount/helper.d.ts +46 -0
  35. package/es/components/InputAmount/helper.js +115 -0
  36. package/es/components/ProForm/ProForm.d.ts +33 -0
  37. package/es/components/ProForm/ProForm.js +208 -0
  38. package/es/components/ProForm/ProFormDependency.d.ts +12 -0
  39. package/es/components/ProForm/ProFormDependency.js +61 -0
  40. package/es/components/ProForm/ProFormList.d.ts +19 -0
  41. package/es/components/ProForm/ProFormList.js +348 -0
  42. package/es/components/ProForm/Submitter.d.ts +21 -0
  43. package/es/components/ProForm/Submitter.js +76 -0
  44. package/es/components/ProForm/constants.d.ts +34 -0
  45. package/es/components/ProForm/constants.js +40 -0
  46. package/es/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  47. package/es/components/ProForm/fields/ProFormCheckbox.js +11 -0
  48. package/es/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  49. package/es/components/ProForm/fields/ProFormCheckboxGroup.js +46 -0
  50. package/es/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  51. package/es/components/ProForm/fields/ProFormDigit.js +15 -0
  52. package/es/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  53. package/es/components/ProForm/fields/ProFormMoney.js +10 -0
  54. package/es/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  55. package/es/components/ProForm/fields/ProFormMultiSelect.js +27 -0
  56. package/es/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  57. package/es/components/ProForm/fields/ProFormPassword.js +16 -0
  58. package/es/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  59. package/es/components/ProForm/fields/ProFormRadio.js +13 -0
  60. package/es/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  61. package/es/components/ProForm/fields/ProFormSelect.js +13 -0
  62. package/es/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  63. package/es/components/ProForm/fields/ProFormSwitch.js +11 -0
  64. package/es/components/ProForm/fields/ProFormText.d.ts +6 -0
  65. package/es/components/ProForm/fields/ProFormText.js +15 -0
  66. package/es/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  67. package/es/components/ProForm/fields/ProFormTextArea.js +16 -0
  68. package/es/components/ProForm/fields/createProFormField.d.ts +43 -0
  69. package/es/components/ProForm/fields/createProFormField.js +200 -0
  70. package/es/components/ProForm/fields/index.d.ts +12 -0
  71. package/es/components/ProForm/fields/index.js +13 -0
  72. package/es/components/ProForm/index.d.ts +7 -0
  73. package/es/components/ProForm/index.js +7 -0
  74. package/es/components/ProForm/interface.d.ts +306 -0
  75. package/es/components/ProForm/interface.js +2 -0
  76. package/es/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  77. package/es/components/ProForm/layouts/DrawerForm.js +79 -0
  78. package/es/components/ProForm/layouts/ModalForm.d.ts +16 -0
  79. package/es/components/ProForm/layouts/ModalForm.js +89 -0
  80. package/es/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  81. package/es/components/ProForm/layouts/QueryFilter.js +132 -0
  82. package/es/components/ProForm/layouts/StepsForm.d.ts +13 -0
  83. package/es/components/ProForm/layouts/StepsForm.js +295 -0
  84. package/es/components/ProForm/layouts/index.d.ts +4 -0
  85. package/es/components/ProForm/layouts/index.js +5 -0
  86. package/es/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  87. package/es/components/ProForm/layouts/useOverlayForm.js +143 -0
  88. package/es/components/ProForm/style/ProForm.module.css +1 -0
  89. package/es/components/ProForm/style/ProForm.module.scss +59 -0
  90. package/es/components/ProForm/style/css.js +3 -0
  91. package/es/components/ProForm/style/index.d.ts +1 -0
  92. package/es/components/ProForm/style/index.js +3 -0
  93. package/es/components/ProForm/utils.d.ts +72 -0
  94. package/es/components/ProForm/utils.js +206 -0
  95. package/es/components/RadioGroup/RadioGroup.js +46 -23
  96. package/es/components/RadioGroup/interface.d.ts +3 -1
  97. package/es/components/Select/Select.d.ts +1 -1
  98. package/es/components/Select/Select.js +113 -106
  99. package/es/components/Select/constants.d.ts +18 -0
  100. package/es/components/Select/constants.js +19 -0
  101. package/es/components/Sidebar/Sidebar.js +21 -23
  102. package/es/components/Sidebar/SidebarLogo.d.ts +7 -0
  103. package/es/components/Sidebar/SidebarLogo.js +33 -0
  104. package/es/components/Sidebar/SimplySidebar.d.ts +2 -2
  105. package/es/components/Sidebar/SimplySidebar.js +18 -22
  106. package/es/components/Sidebar/Stepper.js +14 -14
  107. package/es/components/Sidebar/constants.d.ts +16 -0
  108. package/es/components/Sidebar/constants.js +17 -0
  109. package/es/components/Sidebar/style/Stepper.css +1 -1
  110. package/es/components/Sidebar/style/Stepper.scss +11 -1
  111. package/es/components/Switch/Switch.js +28 -25
  112. package/es/components/Switch/interface.d.ts +9 -4
  113. package/es/components/useControlledState/index.d.ts +14 -0
  114. package/es/components/useControlledState/index.js +32 -0
  115. package/es/components/useEventCallback/index.d.ts +11 -0
  116. package/es/components/useEventCallback/index.js +17 -0
  117. package/es/components/useLayoutEffect/index.d.ts +11 -0
  118. package/es/components/useLayoutEffect/index.js +17 -0
  119. package/es/components/useLayoutState/index.d.ts +13 -0
  120. package/es/components/useLayoutState/index.js +71 -0
  121. package/es/components/useMemoizedFn/index.d.ts +12 -0
  122. package/es/components/useMemoizedFn/index.js +27 -0
  123. package/es/components/usePrevious/index.d.ts +11 -0
  124. package/es/components/usePrevious/index.js +19 -0
  125. package/es/components/useSafeState/index.d.ts +12 -0
  126. package/es/components/useSafeState/index.js +24 -0
  127. package/es/components/useSyncState/index.d.ts +14 -0
  128. package/es/components/useSyncState/index.js +37 -0
  129. package/es/components/useUpdateEffect/index.d.ts +9 -0
  130. package/es/components/useUpdateEffect/index.js +19 -0
  131. package/es/index.css +1 -1
  132. package/es/index.d.ts +21 -2
  133. package/es/index.js +19 -1
  134. package/jest.setup.d.ts +1 -0
  135. package/jest.setup.ts +1 -0
  136. package/lib/components/CheckboxGroup/CheckboxGroup.d.ts +3 -3
  137. package/lib/components/CheckboxGroup/CheckboxGroup.js +92 -89
  138. package/lib/components/CheckboxGroup/interface.d.ts +21 -15
  139. package/lib/components/CheckboxGroup/style/CheckboxGroup.scss +0 -7
  140. package/lib/components/Form/Form.d.ts +29 -0
  141. package/lib/components/Form/Form.js +199 -0
  142. package/lib/components/Form/FormItem.d.ts +4 -0
  143. package/lib/components/Form/FormItem.js +176 -0
  144. package/lib/components/Form/FormItemContent.d.ts +18 -0
  145. package/lib/components/Form/FormItemContent.js +156 -0
  146. package/lib/components/Form/constants.d.ts +46 -0
  147. package/lib/components/Form/constants.js +71 -0
  148. package/lib/components/Form/helper.d.ts +120 -0
  149. package/lib/components/Form/helper.js +290 -0
  150. package/lib/components/Form/index.d.ts +20 -0
  151. package/lib/components/Form/index.js +45 -0
  152. package/lib/components/Form/interface.d.ts +238 -0
  153. package/lib/components/Form/interface.js +6 -0
  154. package/lib/components/Form/style/Form.css +1 -0
  155. package/lib/components/Form/style/Form.scss +167 -0
  156. package/lib/components/Form/style/css.js +4 -0
  157. package/lib/components/Form/style/index.d.ts +1 -0
  158. package/lib/components/Form/style/index.js +4 -0
  159. package/lib/components/Form/useFormItemContext.d.ts +32 -0
  160. package/lib/components/Form/useFormItemContext.js +62 -0
  161. package/lib/components/Form/useFormItemWatch.d.ts +51 -0
  162. package/lib/components/Form/useFormItemWatch.js +76 -0
  163. package/lib/components/Form/useValidationTrigger.d.ts +40 -0
  164. package/lib/components/Form/useValidationTrigger.js +81 -0
  165. package/lib/components/Input/Input.js +71 -73
  166. package/lib/components/Input/interface.d.ts +9 -9
  167. package/lib/components/InputAmount/InputAmount.js +230 -278
  168. package/lib/components/InputAmount/helper.d.ts +46 -0
  169. package/lib/components/InputAmount/helper.js +122 -0
  170. package/lib/components/ProForm/ProForm.d.ts +33 -0
  171. package/lib/components/ProForm/ProForm.js +216 -0
  172. package/lib/components/ProForm/ProFormDependency.d.ts +12 -0
  173. package/lib/components/ProForm/ProFormDependency.js +67 -0
  174. package/lib/components/ProForm/ProFormList.d.ts +19 -0
  175. package/lib/components/ProForm/ProFormList.js +355 -0
  176. package/lib/components/ProForm/Submitter.d.ts +21 -0
  177. package/lib/components/ProForm/Submitter.js +83 -0
  178. package/lib/components/ProForm/constants.d.ts +34 -0
  179. package/lib/components/ProForm/constants.js +46 -0
  180. package/lib/components/ProForm/fields/ProFormCheckbox.d.ts +6 -0
  181. package/lib/components/ProForm/fields/ProFormCheckbox.js +18 -0
  182. package/lib/components/ProForm/fields/ProFormCheckboxGroup.d.ts +6 -0
  183. package/lib/components/ProForm/fields/ProFormCheckboxGroup.js +53 -0
  184. package/lib/components/ProForm/fields/ProFormDigit.d.ts +6 -0
  185. package/lib/components/ProForm/fields/ProFormDigit.js +22 -0
  186. package/lib/components/ProForm/fields/ProFormMoney.d.ts +6 -0
  187. package/lib/components/ProForm/fields/ProFormMoney.js +17 -0
  188. package/lib/components/ProForm/fields/ProFormMultiSelect.d.ts +6 -0
  189. package/lib/components/ProForm/fields/ProFormMultiSelect.js +34 -0
  190. package/lib/components/ProForm/fields/ProFormPassword.d.ts +6 -0
  191. package/lib/components/ProForm/fields/ProFormPassword.js +23 -0
  192. package/lib/components/ProForm/fields/ProFormRadio.d.ts +6 -0
  193. package/lib/components/ProForm/fields/ProFormRadio.js +20 -0
  194. package/lib/components/ProForm/fields/ProFormSelect.d.ts +6 -0
  195. package/lib/components/ProForm/fields/ProFormSelect.js +20 -0
  196. package/lib/components/ProForm/fields/ProFormSwitch.d.ts +6 -0
  197. package/lib/components/ProForm/fields/ProFormSwitch.js +18 -0
  198. package/lib/components/ProForm/fields/ProFormText.d.ts +6 -0
  199. package/lib/components/ProForm/fields/ProFormText.js +22 -0
  200. package/lib/components/ProForm/fields/ProFormTextArea.d.ts +6 -0
  201. package/lib/components/ProForm/fields/ProFormTextArea.js +23 -0
  202. package/lib/components/ProForm/fields/createProFormField.d.ts +43 -0
  203. package/lib/components/ProForm/fields/createProFormField.js +208 -0
  204. package/lib/components/ProForm/fields/index.d.ts +12 -0
  205. package/lib/components/ProForm/fields/index.js +90 -0
  206. package/lib/components/ProForm/index.d.ts +7 -0
  207. package/lib/components/ProForm/index.js +73 -0
  208. package/lib/components/ProForm/interface.d.ts +306 -0
  209. package/lib/components/ProForm/interface.js +6 -0
  210. package/lib/components/ProForm/layouts/DrawerForm.d.ts +16 -0
  211. package/lib/components/ProForm/layouts/DrawerForm.js +86 -0
  212. package/lib/components/ProForm/layouts/ModalForm.d.ts +16 -0
  213. package/lib/components/ProForm/layouts/ModalForm.js +96 -0
  214. package/lib/components/ProForm/layouts/QueryFilter.d.ts +21 -0
  215. package/lib/components/ProForm/layouts/QueryFilter.js +139 -0
  216. package/lib/components/ProForm/layouts/StepsForm.d.ts +13 -0
  217. package/lib/components/ProForm/layouts/StepsForm.js +302 -0
  218. package/lib/components/ProForm/layouts/index.d.ts +4 -0
  219. package/lib/components/ProForm/layouts/index.js +40 -0
  220. package/lib/components/ProForm/layouts/useOverlayForm.d.ts +53 -0
  221. package/lib/components/ProForm/layouts/useOverlayForm.js +150 -0
  222. package/lib/components/ProForm/style/ProForm.module.css +1 -0
  223. package/lib/components/ProForm/style/ProForm.module.scss +59 -0
  224. package/lib/components/ProForm/style/css.js +4 -0
  225. package/lib/components/ProForm/style/index.d.ts +1 -0
  226. package/lib/components/ProForm/style/index.js +4 -0
  227. package/lib/components/ProForm/utils.d.ts +72 -0
  228. package/lib/components/ProForm/utils.js +213 -0
  229. package/lib/components/RadioGroup/RadioGroup.js +45 -22
  230. package/lib/components/RadioGroup/interface.d.ts +3 -1
  231. package/lib/components/Select/Select.d.ts +1 -1
  232. package/lib/components/Select/Select.js +114 -107
  233. package/lib/components/Select/constants.d.ts +18 -0
  234. package/lib/components/Select/constants.js +25 -0
  235. package/lib/components/Sidebar/Sidebar.js +21 -23
  236. package/lib/components/Sidebar/SidebarLogo.d.ts +7 -0
  237. package/lib/components/Sidebar/SidebarLogo.js +39 -0
  238. package/lib/components/Sidebar/SimplySidebar.d.ts +2 -2
  239. package/lib/components/Sidebar/SimplySidebar.js +17 -21
  240. package/lib/components/Sidebar/Stepper.js +14 -14
  241. package/lib/components/Sidebar/constants.d.ts +16 -0
  242. package/lib/components/Sidebar/constants.js +23 -0
  243. package/lib/components/Sidebar/style/Stepper.css +1 -1
  244. package/lib/components/Sidebar/style/Stepper.scss +11 -1
  245. package/lib/components/Switch/Switch.js +27 -24
  246. package/lib/components/Switch/interface.d.ts +9 -4
  247. package/lib/components/useControlledState/index.d.ts +14 -0
  248. package/lib/components/useControlledState/index.js +39 -0
  249. package/lib/components/useEventCallback/index.d.ts +11 -0
  250. package/lib/components/useEventCallback/index.js +24 -0
  251. package/lib/components/useLayoutEffect/index.d.ts +11 -0
  252. package/lib/components/useLayoutEffect/index.js +23 -0
  253. package/lib/components/useLayoutState/index.d.ts +13 -0
  254. package/lib/components/useLayoutState/index.js +79 -0
  255. package/lib/components/useMemoizedFn/index.d.ts +12 -0
  256. package/lib/components/useMemoizedFn/index.js +33 -0
  257. package/lib/components/usePrevious/index.d.ts +11 -0
  258. package/lib/components/usePrevious/index.js +25 -0
  259. package/lib/components/useSafeState/index.d.ts +12 -0
  260. package/lib/components/useSafeState/index.js +31 -0
  261. package/lib/components/useSyncState/index.d.ts +14 -0
  262. package/lib/components/useSyncState/index.js +44 -0
  263. package/lib/components/useUpdateEffect/index.d.ts +9 -0
  264. package/lib/components/useUpdateEffect/index.js +25 -0
  265. package/lib/index.css +1 -1
  266. package/lib/index.d.ts +21 -2
  267. package/lib/index.js +213 -1
  268. package/package.json +16 -1
@@ -9,14 +9,16 @@ exports["default"] = exports.Select = void 0;
9
9
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
10
10
  var _jsxRuntime = require("react/jsx-runtime");
11
11
  var _react = require("react");
12
- var _lodash = _interopRequireDefault(require("lodash.isequal"));
13
- var _lodash2 = _interopRequireDefault(require("lodash.debounce"));
12
+ var _lodash = _interopRequireDefault(require("lodash.debounce"));
14
13
  var _dropdown = require("primereact/dropdown");
15
14
  var _multiselect = require("primereact/multiselect");
16
15
  var _skeleton = require("primereact/skeleton");
17
16
  var _classnames = _interopRequireWildcard(require("../../utils/classnames"));
17
+ var _useControlledState3 = _interopRequireDefault(require("../useControlledState"));
18
+ var _useEventCallback = _interopRequireDefault(require("../useEventCallback"));
18
19
  var _Icons = require("../Icons");
19
20
  var _Spinner = require("../Spinner");
21
+ var _constants = require("./constants");
20
22
  function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
21
23
  function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
22
24
  var __rest = void 0 && (void 0).__rest || function (s, e) {
@@ -44,8 +46,8 @@ var SelectWrapper = /*#__PURE__*/(0, _react.memo)(function (props) {
44
46
  return (0, _jsxRuntime.jsxs)("div", {
45
47
  className: classes('wrapper', wrapperCls),
46
48
  children: [label ? loading ? (0, _jsxRuntime.jsx)(_skeleton.Skeleton, {
47
- width: '72px',
48
- height: '18px',
49
+ width: _constants.SKELETON_LABEL_WIDTH,
50
+ height: _constants.SKELETON_LABEL_HEIGHT,
49
51
  className: classes('label-loading')
50
52
  }) : (0, _jsxRuntime.jsx)("span", {
51
53
  className: classes('label', (0, _classnames.joinCls)(required && classes('label-required'), labelCls)),
@@ -63,20 +65,20 @@ var CustomDropdown = function CustomDropdown(props) {
63
65
  message = props.message,
64
66
  required = props.required,
65
67
  _props$prefixCls = props.prefixCls,
66
- prefixCls = _props$prefixCls === void 0 ? 'select' : _props$prefixCls,
68
+ prefixCls = _props$prefixCls === void 0 ? _constants.DEFAULT_PREFIX_CLS : _props$prefixCls,
67
69
  wrapperCls = props.wrapperCls,
68
70
  labelCls = props.labelCls,
69
71
  messageCls = props.messageCls,
70
72
  _props$size = props.size,
71
- size = _props$size === void 0 ? 'large' : _props$size,
73
+ size = _props$size === void 0 ? _constants.DEFAULT_SIZE : _props$size,
72
74
  success = props.success,
73
75
  invalid = props.invalid,
74
76
  disabled = props.disabled,
75
77
  editable = props.editable,
76
78
  _props$placeholder = props.placeholder,
77
- placeholder = _props$placeholder === void 0 ? '' : _props$placeholder,
79
+ placeholder = _props$placeholder === void 0 ? _constants.DEFAULT_PLACEHOLDER : _props$placeholder,
78
80
  _props$className = props.className,
79
- className = _props$className === void 0 ? '' : _props$className,
81
+ className = _props$className === void 0 ? _constants.DEFAULT_CLASSNAME : _props$className,
80
82
  selectedTemplate = props.selectedTemplate,
81
83
  tailTemplate = props.tailTemplate,
82
84
  _onClick = props.onClick,
@@ -110,38 +112,38 @@ var CustomDropdown = function CustomDropdown(props) {
110
112
  return selectRef.current;
111
113
  }
112
114
  };
113
- }, [ref]);
115
+ }, []);
114
116
  (0, _react.useEffect)(function () {
115
117
  dataIdRef.current = dataId;
116
118
  }, [dataId]);
119
+ var handleFocus = (0, _useEventCallback["default"])(function () {
120
+ return onFocus === null || onFocus === void 0 ? void 0 : onFocus();
121
+ });
122
+ var handleBlur = (0, _useEventCallback["default"])(function () {
123
+ return onBlur === null || onBlur === void 0 ? void 0 : onBlur();
124
+ });
117
125
  (0, _react.useEffect)(function () {
118
126
  if (isFocus !== lastFocusRef.current) {
119
127
  lastFocusRef.current = isFocus;
120
128
  if (isFocus) {
121
- onFocus === null || onFocus === void 0 ? void 0 : onFocus();
129
+ handleFocus();
122
130
  } else {
123
- onBlur === null || onBlur === void 0 ? void 0 : onBlur();
131
+ handleBlur();
124
132
  }
125
133
  }
126
- }, [isFocus, onFocus, onBlur]);
134
+ }, [isFocus]);
127
135
  (0, _react.useEffect)(function () {
128
- var _findCustomDropdownDataId = function findCustomDropdownDataId(target) {
129
- var _a;
130
- if (!dataIdRef.current) return false;
131
- if (((_a = target === null || target === void 0 ? void 0 : target.dataset) === null || _a === void 0 ? void 0 : _a.selectCustomDropdownId) === dataIdRef.current) return true;
132
- if (target === document.body || target === document) return false;
133
- var parent = target.parentNode || target.parentElement;
134
- if (!parent) return false;
135
- return _findCustomDropdownDataId(parent);
136
- };
137
136
  var removeFocus = function removeFocus(e) {
138
137
  if (isClickInside.current) {
139
138
  isClickInside.current = false;
140
139
  return;
141
140
  }
142
141
  setIsFocus(function (prev) {
142
+ var _a;
143
143
  if (!prev) return false;
144
- return _findCustomDropdownDataId(e.target);
144
+ if (!dataIdRef.current) return false;
145
+ var target = e.target;
146
+ return !!((_a = target === null || target === void 0 ? void 0 : target.closest) === null || _a === void 0 ? void 0 : _a.call(target, "[".concat(_constants.DATA_ATTR_SELECTOR, "=\"").concat(dataIdRef.current, "\"]")));
145
147
  });
146
148
  };
147
149
  document.addEventListener('click', removeFocus);
@@ -190,15 +192,14 @@ var CustomDropdown = function CustomDropdown(props) {
190
192
  children: placeholder
191
193
  }), editable ? null : typeof tailTemplate === 'function' ? tailTemplate(isFocus) : (0, _jsxRuntime.jsx)(_Icons.Icons, {
192
194
  name: 'chevronDown',
193
- color: '#131313',
194
- size: 20,
195
+ color: _constants.COLOR_PRIMARY_BLACK,
196
+ size: _constants.ICON_SIZE_MD,
195
197
  wrapperCls: classes('custom-tail', isFocus ? classes('custom-tail-focus') : '')
196
198
  })]
197
199
  })
198
200
  });
199
201
  };
200
202
  var Select = exports.Select = function Select(props) {
201
- var _a;
202
203
  var id = props.id,
203
204
  ref = props.ref,
204
205
  name = props.name,
@@ -206,13 +207,13 @@ var Select = exports.Select = function Select(props) {
206
207
  message = props.message,
207
208
  required = props.required,
208
209
  _props$prefixCls2 = props.prefixCls,
209
- prefixCls = _props$prefixCls2 === void 0 ? 'select' : _props$prefixCls2,
210
+ prefixCls = _props$prefixCls2 === void 0 ? _constants.DEFAULT_PREFIX_CLS : _props$prefixCls2,
210
211
  wrapperCls = props.wrapperCls,
211
212
  labelCls = props.labelCls,
212
213
  messageCls = props.messageCls,
213
214
  value = props.value,
214
215
  _props$size2 = props.size,
215
- size = _props$size2 === void 0 ? 'large' : _props$size2,
216
+ size = _props$size2 === void 0 ? _constants.DEFAULT_SIZE : _props$size2,
216
217
  success = props.success,
217
218
  _props$refreshAfterSh = props.refreshAfterShow,
218
219
  refreshAfterShow = _props$refreshAfterSh === void 0 ? true : _props$refreshAfterSh,
@@ -220,43 +221,49 @@ var Select = exports.Select = function Select(props) {
220
221
  disabled = props.disabled,
221
222
  placeholder = props.placeholder,
222
223
  _props$className2 = props.className,
223
- className = _props$className2 === void 0 ? '' : _props$className2,
224
+ className = _props$className2 === void 0 ? _constants.DEFAULT_CLASSNAME : _props$className2,
224
225
  multiple = props.multiple,
225
226
  options = props.options,
226
227
  panelClassName = props.panelClassName,
227
228
  defaultValue = props.defaultValue,
228
229
  _itemTemplate = props.itemTemplate,
229
- _onChange = props.onChange,
230
- _onHide = props.onHide,
231
- _onShow = props.onShow,
230
+ onChange = props.onChange,
231
+ onHide = props.onHide,
232
+ onShow = props.onShow,
232
233
  unselectable = props.unselectable,
233
234
  loading = props.loading,
234
235
  rest = __rest(props, ["id", "ref", "name", "label", "message", "required", "prefixCls", "wrapperCls", "labelCls", "messageCls", "value", "size", "success", "refreshAfterShow", "invalid", "disabled", "placeholder", "className", "multiple", "options", "panelClassName", "defaultValue", "itemTemplate", "onChange", "onHide", "onShow", "unselectable", "loading"]);
235
236
  var classes = (0, _classnames["default"])(prefixCls);
236
- var _useState5 = (0, _react.useState)((_a = value !== null && value !== void 0 ? value : defaultValue) !== null && _a !== void 0 ? _a : null),
237
+ var _useControlledState = (0, _useControlledState3["default"])(defaultValue !== null && defaultValue !== void 0 ? defaultValue : null, value),
238
+ _useControlledState2 = (0, _slicedToArray2["default"])(_useControlledState, 2),
239
+ selected = _useControlledState2[0],
240
+ setSelected = _useControlledState2[1];
241
+ var _useState5 = (0, _react.useState)(false),
237
242
  _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
238
- selected = _useState6[0],
239
- setSelected = _useState6[1];
243
+ isOpen = _useState6[0],
244
+ setIsOpen = _useState6[1];
240
245
  var _useState7 = (0, _react.useState)(false),
241
246
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
242
- isOpen = _useState8[0],
243
- setIsOpen = _useState8[1];
247
+ isHover = _useState8[0],
248
+ setIsHover = _useState8[1];
244
249
  var _useState9 = (0, _react.useState)(false),
245
250
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
246
- isHover = _useState10[0],
247
- setIsHover = _useState10[1];
248
- var _useState11 = (0, _react.useState)(false),
249
- _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
250
- isScrolling = _useState12[0],
251
- setIsScrolling = _useState12[1];
251
+ isScrolling = _useState10[0],
252
+ setIsScrolling = _useState10[1];
252
253
  var selectRef = (0, _react.useRef)(null);
253
- var _ref = (0, _react.useRef)(null);
254
254
  var selectCls = (0, _react.useMemo)(function () {
255
255
  return classes(void 0, (0, _classnames.joinCls)(classes(size), isOpen && classes('show'), success && classes('success'), invalid && classes('invalid'), disabled && classes('disabled'), loading && classes('loading'), (Array.isArray(selected) ? !!selected.length : !!selected) && classes('filled'), className));
256
256
  }, [size, isOpen, success, selected, invalid, disabled, loading, className]);
257
- var debouncedHandleScroll = (0, _lodash2["default"])(function () {
258
- return setIsScrolling(false);
259
- }, 500);
257
+ var debouncedHandleScroll = (0, _react.useMemo)(function () {
258
+ return (0, _lodash["default"])(function () {
259
+ return setIsScrolling(false);
260
+ }, _constants.DEBOUNCE_SCROLL_DELAY);
261
+ }, []);
262
+ (0, _react.useEffect)(function () {
263
+ return function () {
264
+ return debouncedHandleScroll.cancel();
265
+ };
266
+ }, [debouncedHandleScroll]);
260
267
  var refreshDOM = (0, _react.useCallback)(function () {
261
268
  var _a, _b;
262
269
  var ele = (_b = (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.getOverlay) === null || _b === void 0 ? void 0 : _b.call(_a);
@@ -269,14 +276,31 @@ var Select = exports.Select = function Select(props) {
269
276
  }, 0);
270
277
  }
271
278
  }, []);
279
+ var filterIconProps = (0, _react.useMemo)(function () {
280
+ var _a = rest,
281
+ filterIcon = _a.filterIcon,
282
+ filter = _a.filter,
283
+ others = __rest(_a, ["filterIcon", "filter"]);
284
+ var extraProps = filter ? {
285
+ filterIcon: filterIcon !== null && filterIcon !== void 0 ? filterIcon : (0, _jsxRuntime.jsx)(_Icons.Icons, {
286
+ name: 'search',
287
+ size: _constants.ICON_SIZE_MD,
288
+ color: _constants.COLOR_PRIMARY_BLACK,
289
+ wrapperCls: classes('filter-icon')
290
+ })
291
+ } : null;
292
+ return Object.assign(Object.assign(Object.assign({}, others), {
293
+ filter: filter
294
+ }), extraProps || {});
295
+ }, [rest.filter, rest.filterIcon]);
272
296
  var SelectComponent = (0, _react.useCallback)(function (props) {
273
297
  return multiple ? (0, _jsxRuntime.jsx)(_multiselect.MultiSelect, Object.assign({
274
298
  unselectable: unselectable,
275
299
  showSelectAll: false,
276
300
  checkboxIcon: (0, _jsxRuntime.jsx)(_Icons.Icons, {
277
301
  name: 'check',
278
- size: 12,
279
- color: '#FEFEFE'
302
+ size: _constants.ICON_SIZE_XS,
303
+ color: _constants.COLOR_WHITE
280
304
  }),
281
305
  removeIcon: function removeIcon(props) {
282
306
  var _props$iconProps = props.iconProps,
@@ -285,8 +309,8 @@ var Select = exports.Select = function Select(props) {
285
309
  tabIndex = _props$iconProps.tabIndex;
286
310
  return (0, _jsxRuntime.jsx)(_Icons.Icons, {
287
311
  name: 'close',
288
- size: 16,
289
- color: '#131313',
312
+ size: _constants.ICON_SIZE_SM,
313
+ color: _constants.COLOR_PRIMARY_BLACK,
290
314
  tabIndex: tabIndex,
291
315
  wrapperCls: classes('token-remove-icon'),
292
316
  onClick: onClick,
@@ -314,8 +338,8 @@ var Select = exports.Select = function Select(props) {
314
338
  },
315
339
  children: [(0, _jsxRuntime.jsx)(_Icons.Icons, {
316
340
  name: 'close',
317
- size: 16,
318
- color: '#AE0000',
341
+ size: _constants.ICON_SIZE_SM,
342
+ color: _constants.COLOR_NEGATIVE,
319
343
  wrapperCls: classes('panel-header-info-clear-icon')
320
344
  }), "Clear all"]
321
345
  })]
@@ -326,19 +350,14 @@ var Select = exports.Select = function Select(props) {
326
350
  collapseIcon: multiple ? void 0 : function () {
327
351
  return (0, _jsxRuntime.jsx)(_Icons.Icons, {
328
352
  name: 'chevronUp',
329
- color: '#131313',
330
- size: 20
353
+ color: _constants.COLOR_PRIMARY_BLACK,
354
+ size: _constants.ICON_SIZE_MD
331
355
  });
332
356
  }
333
357
  }, props));
334
358
  }, [multiple]);
335
- (0, _react.useEffect)(function () {
336
- if (value !== undefined && !(0, _lodash["default"])(selected, value)) {
337
- setSelected(value);
338
- }
339
- }, [value]);
340
359
  // @ts-expect-error
341
- (0, _react.useImperativeHandle)(ref !== null && ref !== void 0 ? ref : _ref, function () {
360
+ (0, _react.useImperativeHandle)(ref, function () {
342
361
  var _a, _b;
343
362
  return multiple ? {
344
363
  props: (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.props,
@@ -406,6 +425,28 @@ var Select = exports.Select = function Select(props) {
406
425
  }
407
426
  };
408
427
  }, [multiple]);
428
+ var handleChange = (0, _useEventCallback["default"])(function (e) {
429
+ var emitChange = onChange;
430
+ setSelected(e.value);
431
+ emitChange === null || emitChange === void 0 ? void 0 : emitChange(e);
432
+ });
433
+ var handleHide = (0, _useEventCallback["default"])(function () {
434
+ setIsOpen(false);
435
+ onHide === null || onHide === void 0 ? void 0 : onHide();
436
+ });
437
+ var handleShow = (0, _useEventCallback["default"])(function () {
438
+ setIsOpen(true);
439
+ onShow === null || onShow === void 0 ? void 0 : onShow();
440
+ if (!refreshAfterShow) return;
441
+ setTimeout(function () {
442
+ return refreshDOM();
443
+ }, 0);
444
+ });
445
+ var handleScroll = (0, _react.useCallback)(function () {
446
+ debouncedHandleScroll.cancel();
447
+ setIsScrolling(true);
448
+ debouncedHandleScroll();
449
+ }, [debouncedHandleScroll]);
409
450
  return (0, _jsxRuntime.jsx)(SelectWrapper, {
410
451
  label: label,
411
452
  message: message,
@@ -418,28 +459,12 @@ var Select = exports.Select = function Select(props) {
418
459
  invalid: invalid,
419
460
  disabled: disabled,
420
461
  loading: loading,
421
- children: (0, _jsxRuntime.jsx)(SelectComponent, Object.assign({}, function () {
422
- var _a = rest,
423
- filterIcon = _a.filterIcon,
424
- filter = _a.filter,
425
- others = __rest(_a, ["filterIcon", "filter"]);
426
- var extraProps = filter ? {
427
- filterIcon: filterIcon !== null && filterIcon !== void 0 ? filterIcon : (0, _jsxRuntime.jsx)(_Icons.Icons, {
428
- name: 'search',
429
- size: 20,
430
- color: '#131313',
431
- wrapperCls: classes('filter-icon')
432
- })
433
- } : null;
434
- return Object.assign(Object.assign(Object.assign({}, others), {
435
- filter: filter
436
- }), extraProps || {});
437
- }(), {
462
+ children: (0, _jsxRuntime.jsx)(SelectComponent, Object.assign({}, filterIconProps, {
438
463
  id: id,
439
464
  ref: selectRef,
440
465
  name: name,
441
466
  loading: loading,
442
- filterPlaceholder: 'Search',
467
+ filterPlaceholder: _constants.FILTER_PLACEHOLDER,
443
468
  required: required,
444
469
  disabled: disabled,
445
470
  invalid: invalid,
@@ -452,7 +477,7 @@ var Select = exports.Select = function Select(props) {
452
477
  className: classes('panel-item'),
453
478
  onClick: function onClick() {
454
479
  var _a;
455
- if (!multiple && unselectable === 'on' && option.value === selected) {
480
+ if (!multiple && unselectable === _constants.UNSELECTABLE_ON && option.value === selected) {
456
481
  (_a = selectRef.current) === null || _a === void 0 ? void 0 : _a.clear();
457
482
  }
458
483
  },
@@ -461,47 +486,29 @@ var Select = exports.Select = function Select(props) {
461
486
  children: _itemTemplate ? _itemTemplate(option) : option.label
462
487
  }), (0, _jsxRuntime.jsx)(_Icons.Icons, {
463
488
  name: 'check',
464
- size: 16,
465
- color: '#073387'
489
+ size: _constants.ICON_SIZE_SM,
490
+ color: _constants.COLOR_PRIMARY_BLUE
466
491
  })]
467
492
  });
468
493
  },
469
494
  loadingIcon: (0, _jsxRuntime.jsx)(_Spinner.Spinner, {
470
495
  className: classes('loading-icon'),
471
- strokeWidth: '4'
496
+ strokeWidth: _constants.SPINNER_STROKE_WIDTH
472
497
  }),
473
498
  panelClassName: classes('panel', (0, _classnames.joinCls)(panelClassName, isHover && classes('panel-hover'), isScrolling && classes('panel-scrolling'), rest.appendTo === 'self' && classes('panel-append-self'))),
474
- onChange: function onChange(e) {
475
- setSelected(e.value);
476
- // @ts-expect-error
477
- _onChange === null || _onChange === void 0 ? void 0 : _onChange(e);
478
- },
479
- onHide: function onHide() {
480
- setIsOpen(false);
481
- _onHide === null || _onHide === void 0 ? void 0 : _onHide();
482
- },
483
- onShow: function onShow() {
484
- setIsOpen(true);
485
- _onShow === null || _onShow === void 0 ? void 0 : _onShow();
486
- if (!refreshAfterShow) return;
487
- setTimeout(function () {
488
- return refreshDOM();
489
- }, 0);
490
- },
499
+ onChange: handleChange,
500
+ onHide: handleHide,
501
+ onShow: handleShow,
491
502
  dropdownIcon: function dropdownIcon() {
492
503
  return (0, _jsxRuntime.jsx)(_Icons.Icons, {
493
504
  name: 'chevronDown',
494
- color: '#131313',
495
- size: 20
505
+ color: _constants.COLOR_PRIMARY_BLACK,
506
+ size: _constants.ICON_SIZE_MD
496
507
  });
497
508
  },
498
509
  pt: {
499
510
  wrapper: {
500
- onScroll: function onScroll() {
501
- debouncedHandleScroll.cancel();
502
- setIsScrolling(true);
503
- debouncedHandleScroll();
504
- }
511
+ onScroll: handleScroll
505
512
  },
506
513
  panel: {
507
514
  onMouseEnter: function onMouseEnter() {
@@ -523,4 +530,4 @@ var Select = exports.Select = function Select(props) {
523
530
  };
524
531
  Select.CustomDropdown = CustomDropdown;
525
532
  var _default = exports["default"] = /*#__PURE__*/(0, _react.memo)(Select);
526
- //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbG9kYXNoMiIsIl9kcm9wZG93biIsIl9tdWx0aXNlbGVjdCIsIl9za2VsZXRvbiIsIl9jbGFzc25hbWVzIiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfSWNvbnMiLCJfU3Bpbm5lciIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiU2VsZWN0V3JhcHBlciIsIm1lbW8iLCJwcm9wcyIsImxhYmVsIiwibWVzc2FnZSIsInJlcXVpcmVkIiwicHJlZml4Q2xzIiwid3JhcHBlckNscyIsImxhYmVsQ2xzIiwibWVzc2FnZUNscyIsInN1Y2Nlc3MiLCJpbnZhbGlkIiwiZGlzYWJsZWQiLCJsb2FkaW5nIiwiY2hpbGRyZW4iLCJjbGFzc2VzIiwiY2xhc3NuYW1lcyIsIl9qc3hzIiwiY2xhc3NOYW1lIiwiX2pzeCIsIlNrZWxldG9uIiwid2lkdGgiLCJoZWlnaHQiLCJqb2luQ2xzIiwiQ3VzdG9tRHJvcGRvd24iLCJyZWYiLCJkYXRhSWQiLCJfcHJvcHMkcHJlZml4Q2xzIiwiX3Byb3BzJHNpemUiLCJzaXplIiwiZWRpdGFibGUiLCJfcHJvcHMkcGxhY2Vob2xkZXIiLCJwbGFjZWhvbGRlciIsIl9wcm9wcyRjbGFzc05hbWUiLCJzZWxlY3RlZFRlbXBsYXRlIiwidGFpbFRlbXBsYXRlIiwib25DbGljayIsIm9uRm9jdXMiLCJvbkJsdXIiLCJpc0NsaWNrSW5zaWRlIiwidXNlUmVmIiwiZGF0YUlkUmVmIiwibGFzdEZvY3VzUmVmIiwic2VsZWN0UmVmIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwidmFsdWUiLCJzZXRWYWx1ZSIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0IiwiaXNGb2N1cyIsInNldElzRm9jdXMiLCJzZWxlY3RDbHMiLCJ1c2VNZW1vIiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImZvY3VzIiwiYmx1ciIsImdldERPTU5vZGUiLCJjdXJyZW50IiwidXNlRWZmZWN0IiwiZmluZEN1c3RvbURyb3Bkb3duRGF0YUlkIiwidGFyZ2V0IiwiX2EiLCJkYXRhc2V0Iiwic2VsZWN0Q3VzdG9tRHJvcGRvd25JZCIsImRvY3VtZW50IiwiYm9keSIsInBhcmVudCIsInBhcmVudE5vZGUiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlRm9jdXMiLCJwcmV2IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJjb250ZW50RWRpdGFibGUiLCJhdXRvRm9jdXMiLCJvbklucHV0IiwidmFsIiwiY3VycmVudFRhcmdldCIsImlubmVyVGV4dCIsIkljb25zIiwibmFtZSIsImNvbG9yIiwiU2VsZWN0IiwiZXhwb3J0cyIsImlkIiwiX3Byb3BzJHByZWZpeENsczIiLCJfcHJvcHMkc2l6ZTIiLCJfcHJvcHMkcmVmcmVzaEFmdGVyU2giLCJyZWZyZXNoQWZ0ZXJTaG93IiwiX3Byb3BzJGNsYXNzTmFtZTIiLCJtdWx0aXBsZSIsIm9wdGlvbnMiLCJwYW5lbENsYXNzTmFtZSIsImRlZmF1bHRWYWx1ZSIsIml0ZW1UZW1wbGF0ZSIsIm9uQ2hhbmdlIiwib25IaWRlIiwib25TaG93IiwidW5zZWxlY3RhYmxlIiwicmVzdCIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2Iiwic2VsZWN0ZWQiLCJzZXRTZWxlY3RlZCIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNPcGVuIiwic2V0SXNPcGVuIiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTEwIiwiaXNIb3ZlciIsInNldElzSG92ZXIiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiaXNTY3JvbGxpbmciLCJzZXRJc1Njcm9sbGluZyIsIl9yZWYiLCJBcnJheSIsImlzQXJyYXkiLCJkZWJvdW5jZWRIYW5kbGVTY3JvbGwiLCJkZWJvdW5jZSIsInJlZnJlc2hET00iLCJ1c2VDYWxsYmFjayIsIl9iIiwiZWxlIiwiZ2V0T3ZlcmxheSIsIm9yaWdpblpJbmRleCIsInN0eWxlIiwiekluZGV4IiwidW5kZWZpbmVkIiwiY29uY2F0IiwicGFyc2VJbnQiLCJzZXRUaW1lb3V0IiwiU2VsZWN0Q29tcG9uZW50IiwiTXVsdGlTZWxlY3QiLCJhc3NpZ24iLCJzaG93U2VsZWN0QWxsIiwiY2hlY2tib3hJY29uIiwicmVtb3ZlSWNvbiIsIl9wcm9wcyRpY29uUHJvcHMiLCJpY29uUHJvcHMiLCJvbktleURvd24iLCJ0YWJJbmRleCIsInBhbmVsSGVhZGVyVGVtcGxhdGUiLCJfYyIsIl9kIiwiX2UiLCJmaWx0ZXJFbGVtZW50Iiwic2VsZWN0ZWROdW0iLCJtZXRhRGF0YSIsInVwZGF0ZU1vZGVsIiwiRHJvcGRvd24iLCJjb2xsYXBzZUljb24iLCJpc0VxdWFsIiwiaGlkZSIsInNob3ciLCJnZXRFbGVtZW50IiwiZ2V0SW5wdXQiLCJjbGVhciIsImdldEZvY3VzSW5wdXQiLCJnZXRWaXJ0dWFsU2Nyb2xsZXIiLCJmaWx0ZXJJY29uIiwiZmlsdGVyIiwib3RoZXJzIiwiZXh0cmFQcm9wcyIsImZpbHRlclBsYWNlaG9sZGVyIiwib3B0aW9uIiwibG9hZGluZ0ljb24iLCJTcGlubmVyIiwic3Ryb2tlV2lkdGgiLCJhcHBlbmRUbyIsImRyb3Bkb3duSWNvbiIsInB0Iiwid3JhcHBlciIsIm9uU2Nyb2xsIiwiY2FuY2VsIiwicGFuZWwiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoRW5kIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFFBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLFNBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFNBQUEsR0FBQVAsT0FBQTtBQUNBLElBQUFRLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQVQsT0FBQTtBQUNBLElBQUFVLE1BQUEsR0FBQVYsT0FBQTtBQUNBLElBQUFXLFFBQUEsR0FBQVgsT0FBQTtBQUFxQyxTQUFBWSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRix3QkFBQSxZQUFBQSx5QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQUosd0JBQUFJLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSxnQkFBQUssT0FBQSxDQUFBTCxDQUFBLDBCQUFBQSxDQUFBLHNCQUFBQSxDQUFBLFFBQUFHLENBQUEsR0FBQUosd0JBQUEsQ0FBQUcsQ0FBQSxPQUFBQyxDQUFBLElBQUFBLENBQUEsQ0FBQUcsR0FBQSxDQUFBTixDQUFBLFVBQUFHLENBQUEsQ0FBQUksR0FBQSxDQUFBUCxDQUFBLE9BQUFRLENBQUEsS0FBQUMsU0FBQSxVQUFBQyxDQUFBLEdBQUFDLE1BQUEsQ0FBQUMsY0FBQSxJQUFBRCxNQUFBLENBQUFFLHdCQUFBLFdBQUFDLENBQUEsSUFBQWQsQ0FBQSxvQkFBQWMsQ0FBQSxPQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQWhCLENBQUEsRUFBQWMsQ0FBQSxTQUFBRyxDQUFBLEdBQUFQLENBQUEsR0FBQUMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBYixDQUFBLEVBQUFjLENBQUEsVUFBQUcsQ0FBQSxLQUFBQSxDQUFBLENBQUFWLEdBQUEsSUFBQVUsQ0FBQSxDQUFBQyxHQUFBLElBQUFQLE1BQUEsQ0FBQUMsY0FBQSxDQUFBSixDQUFBLEVBQUFNLENBQUEsRUFBQUcsQ0FBQSxJQUFBVCxDQUFBLENBQUFNLENBQUEsSUFBQWQsQ0FBQSxDQUFBYyxDQUFBLFlBQUFOLENBQUEsY0FBQVIsQ0FBQSxFQUFBRyxDQUFBLElBQUFBLENBQUEsQ0FBQWUsR0FBQSxDQUFBbEIsQ0FBQSxFQUFBUSxDQUFBLEdBQUFBLENBQUE7QURSckMsSUFBSVcsTUFBTSxHQUFJLFVBQVEsU0FBS0EsTUFBTSxJQUFLLFVBQVVDLENBQUMsRUFBRXBCLENBQUMsRUFBRTtFQUNsRCxJQUFJRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0VBQ1YsS0FBSyxJQUFJa0IsQ0FBQyxJQUFJRCxDQUFDLEVBQUUsSUFBSVQsTUFBTSxDQUFDVyxTQUFTLENBQUNQLGNBQWMsQ0FBQ0MsSUFBSSxDQUFDSSxDQUFDLEVBQUVDLENBQUMsQ0FBQyxJQUFJckIsQ0FBQyxDQUFDdUIsT0FBTyxDQUFDRixDQUFDLENBQUMsR0FBRyxDQUFDLEVBQy9FbEIsQ0FBQyxDQUFDa0IsQ0FBQyxDQUFDLEdBQUdELENBQUMsQ0FBQ0MsQ0FBQyxDQUFDO0VBQ2YsSUFBSUQsQ0FBQyxJQUFJLElBQUksSUFBSSxPQUFPVCxNQUFNLENBQUNhLHFCQUFxQixLQUFLLFVBQVUsRUFDL0QsS0FBSyxJQUFJUCxDQUFDLEdBQUcsQ0FBQyxFQUFFSSxDQUFDLEdBQUdWLE1BQU0sQ0FBQ2EscUJBQXFCLENBQUNKLENBQUMsQ0FBQyxFQUFFSCxDQUFDLEdBQUdJLENBQUMsQ0FBQ0ksTUFBTSxFQUFFUixDQUFDLEVBQUUsRUFBRTtJQUNwRSxJQUFJakIsQ0FBQyxDQUFDdUIsT0FBTyxDQUFDRixDQUFDLENBQUNKLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJTixNQUFNLENBQUNXLFNBQVMsQ0FBQ0ksb0JBQW9CLENBQUNWLElBQUksQ0FBQ0ksQ0FBQyxFQUFFQyxDQUFDLENBQUNKLENBQUMsQ0FBQyxDQUFDLEVBQzFFZCxDQUFDLENBQUNrQixDQUFDLENBQUNKLENBQUMsQ0FBQyxDQUFDLEdBQUdHLENBQUMsQ0FBQ0MsQ0FBQyxDQUFDSixDQUFDLENBQUMsQ0FBQztFQUN6QjtFQUNKLE9BQU9kLENBQUM7QUFDWixDQUFDO0FDR0QsSUFBTXdCLGFBQWEsZ0JBQXlMLElBQUFDLFdBQUksRUFBQyxVQUFBQyxLQUFLLEVBQUc7RUFDdk4sSUFDRUMsS0FBSyxHQVlIRCxLQUFLLENBWlBDLEtBQUs7SUFDTEMsT0FBTyxHQVdMRixLQUFLLENBWFBFLE9BQU87SUFDUEMsUUFBUSxHQVVOSCxLQUFLLENBVlBHLFFBQVE7SUFDUkMsU0FBUyxHQVNQSixLQUFLLENBVFBJLFNBQVM7SUFDVEMsVUFBVSxHQVFSTCxLQUFLLENBUlBLLFVBQVU7SUFDVkMsUUFBUSxHQU9OTixLQUFLLENBUFBNLFFBQVE7SUFDUkMsVUFBVSxHQU1SUCxLQUFLLENBTlBPLFVBQVU7SUFDVkMsT0FBTyxHQUtMUixLQUFLLENBTFBRLE9BQU87SUFDUEMsT0FBTyxHQUlMVCxLQUFLLENBSlBTLE9BQU87SUFDUEMsUUFBUSxHQUdOVixLQUFLLENBSFBVLFFBQVE7SUFDUkMsT0FBTyxHQUVMWCxLQUFLLENBRlBXLE9BQU87SUFDUEMsUUFBUSxHQUNOWixLQUFLLENBRFBZLFFBQVE7RUFFVixJQUFNQyxPQUFPLEdBQUcsSUFBQUMsc0JBQVUsRUFBQ1YsU0FBUyxDQUFDO0VBRXJDLE9BQU8sSUFBQVcsZ0JBQUEsRUFBQSxLQUFBLEVBQUE7SUFBS0MsU0FBUyxFQUFFSCxPQUFPLENBQUMsU0FBUyxFQUFFUixVQUFVLENBQUM7SUFBQU8sUUFBQSxFQUFBLENBRWpEWCxLQUFLLEdBQ0hVLE9BQU8sR0FDSCxJQUFBTSxlQUFBLEVBQUNDLGtCQUFRLEVBQUE7TUFBQ0MsS0FBSyxFQUFDLE1BQU07TUFBQ0MsTUFBTSxFQUFDLE1BQU07TUFBQ0osU0FBUyxFQUFFSCxPQUFPLENBQUMsZUFBZTtJQUFDLENBQUEsQ0FBSSxHQUM1RSxJQUFBSSxlQUFBLEVBQUEsTUFBQSxFQUFBO01BQU1ELFNBQVMsRUFBRUgsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFBUSxtQkFBTyxFQUFDbEIsUUFBUSxJQUFJVSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsRUFBRVAsUUFBUSxDQUFDLENBQUM7TUFBQU0sUUFBQSxFQUFHWDtJQUFLLENBQUEsQ0FBUSxHQUM3RyxJQUFJLEVBRVRXLFFBQVEsRUFFUFYsT0FBTyxJQUFJLElBQUFlLGVBQUEsRUFBQSxNQUFBLEVBQUE7TUFDVEQsU0FBUyxFQUFFSCxPQUFPLENBQUMsU0FBUyxFQUFFLElBQUFRLG1CQUFPLEVBQ25DYixPQUFPLElBQUlLLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUNyQ0osT0FBTyxJQUFJSSxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQ25DTixVQUFVLENBQ1gsQ0FBQztNQUFBSyxRQUFBLEVBRURWO0lBQU8sQ0FBQSxDQUNIO0VBQUEsQ0FBQSxDQUVMO0FBQ1IsQ0FBQyxDQUFDO0FBRUYsSUFBTW9CLGNBQWMsR0FBK0MsU0FBN0RBLGNBQWNBLENBQStDdEIsS0FBSyxFQUFHO0VBQ3pFLElBQ0V1QixHQUFHLEdBcUJEdkIsS0FBSyxDQXJCUHVCLEdBQUc7SUFDSEMsTUFBTSxHQW9CSnhCLEtBQUssQ0FwQlB3QixNQUFNO0lBQ052QixLQUFLLEdBbUJIRCxLQUFLLENBbkJQQyxLQUFLO0lBQ0xDLE9BQU8sR0FrQkxGLEtBQUssQ0FsQlBFLE9BQU87SUFDUEMsUUFBUSxHQWlCTkgsS0FBSyxDQWpCUEcsUUFBUTtJQUFBc0IsZ0JBQUEsR0FpQk56QixLQUFLLENBaEJQSSxTQUFTO0lBQVRBLFNBQVMsR0FBQXFCLGdCQUFBLGNBQUcsUUFBUSxHQUFBQSxnQkFBQTtJQUNwQnBCLFVBQVUsR0FlUkwsS0FBSyxDQWZQSyxVQUFVO0lBQ1ZDLFFBQVEsR0FjTk4sS0FBSyxDQWRQTSxRQUFRO0lBQ1JDLFVBQVUsR0FhUlAsS0FBSyxDQWJQTyxVQUFVO0lBQUFtQixXQUFBLEdBYVIxQixLQUFLLENBWlAyQixJQUFJO0lBQUpBLElBQUksR0FBQUQsV0FBQSxjQUFHLE9BQU8sR0FBQUEsV0FBQTtJQUNkbEIsT0FBTyxHQVdMUixLQUFLLENBWFBRLE9BQU87SUFDUEMsT0FBTyxHQVVMVCxLQUFLLENBVlBTLE9BQU87SUFDUEMsUUFBUSxHQVNOVixLQUFLLENBVFBVLFFBQVE7SUFDUmtCLFFBQVEsR0FRTjVCLEtBQUssQ0FSUDRCLFFBQVE7SUFBQUMsa0JBQUEsR0FRTjdCLEtBQUssQ0FQUDhCLFdBQVc7SUFBWEEsV0FBVyxHQUFBRCxrQkFBQSxjQUFHLEVBQUUsR0FBQUEsa0JBQUE7SUFBQUUsZ0JBQUEsR0FPZC9CLEtBQUssQ0FOUGdCLFNBQVM7SUFBVEEsU0FBUyxHQUFBZSxnQkFBQSxjQUFHLEVBQUUsR0FBQUEsZ0JBQUE7SUFDZEMsZ0JBQWdCLEdBS2RoQyxLQUFLLENBTFBnQyxnQkFBZ0I7SUFDaEJDLFlBQVksR0FJVmpDLEtBQUssQ0FKUGlDLFlBQVk7SUFDWkMsUUFBTyxHQUdMbEMsS0FBSyxDQUhQa0MsT0FBTztJQUNQQyxPQUFPLEdBRUxuQyxLQUFLLENBRlBtQyxPQUFPO0lBQ1BDLE1BQU0sR0FDSnBDLEtBQUssQ0FEUG9DLE1BQU07RUFFUixJQUFNdkIsT0FBTyxHQUFHLElBQUFDLHNCQUFVLEVBQUNWLFNBQVMsQ0FBQztFQUVyQyxJQUFNaUMsYUFBYSxHQUFHLElBQUFDLGFBQU0sRUFBQyxLQUFLLENBQUM7RUFDbkMsSUFBTUMsU0FBUyxHQUFHLElBQUFELGFBQU0sRUFBQ2QsTUFBTSxDQUFDO0VBQ2hDLElBQU1nQixZQUFZLEdBQUcsSUFBQUYsYUFBTSxFQUFDLEtBQUssQ0FBQztFQUNsQyxJQUFNRyxTQUFTLEdBQUcsSUFBQUgsYUFBTSxFQUFpQixJQUFJLENBQUM7RUFFOUMsSUFBQUksU0FBQSxHQUEwQixJQUFBQyxlQUFRLEVBQUMsRUFBRSxDQUFDO0lBQUFDLFVBQUEsT0FBQUMsZUFBQSxhQUFBSCxTQUFBO0lBQS9CSSxLQUFLLEdBQUFGLFVBQUE7SUFBRUcsUUFBUSxHQUFBSCxVQUFBO0VBQ3RCLElBQUFJLFVBQUEsR0FBOEIsSUFBQUwsZUFBUSxFQUFDLEtBQUssQ0FBQztJQUFBTSxVQUFBLE9BQUFKLGVBQUEsYUFBQUcsVUFBQTtJQUF0Q0UsT0FBTyxHQUFBRCxVQUFBO0lBQUVFLFVBQVUsR0FBQUYsVUFBQTtFQUUxQixJQUFNRyxTQUFTLEdBQUcsSUFBQUMsY0FBTyxFQUFDO0lBQUEsT0FBTXhDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFBUSxtQkFBTyxFQUNyRFIsT0FBTyxDQUFDYyxJQUFJLENBQUMsRUFDYmQsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUNqQnFDLE9BQU8sSUFBSXJDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFDM0JMLE9BQU8sSUFBSUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUM3QkosT0FBTyxJQUFJSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQzdCSCxRQUFRLElBQUlHLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDL0JlLFFBQVEsSUFBSWYsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUMvQkcsU0FBUyxDQUNWLENBQUM7RUFBQSxHQUFFLENBQUNXLElBQUksRUFBRXVCLE9BQU8sRUFBRTFDLE9BQU8sRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUVrQixRQUFRLEVBQUVaLFNBQVMsQ0FBQyxDQUFDO0VBRXJFLElBQUFzQywwQkFBbUIsRUFBQy9CLEdBQUcsRUFBRTtJQUFBLE9BQU87TUFDOUJnQyxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBQTtRQUFBLE9BQVFKLFVBQVUsQ0FBQyxJQUFJLENBQUM7TUFBQTtNQUM3QkssSUFBSSxFQUFFLFNBQU5BLElBQUlBLENBQUE7UUFBQSxPQUFRTCxVQUFVLENBQUMsS0FBSyxDQUFDO01BQUE7TUFDN0JNLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBO1FBQUEsT0FBUWhCLFNBQVMsQ0FBQ2lCLE9BQU87TUFBQTtJRHpEbkMsQ0MwREQ7RUFBQSxDQUFDLEVBQUUsQ0FBQ25DLEdBQUcsQ0FBQyxDQUFDO0VBRVYsSUFBQW9DLGdCQUFTLEVBQUMsWUFBSztJQUNicEIsU0FBUyxDQUFDbUIsT0FBTyxHQUFHbEMsTUFBTTtFQUM1QixDQUFDLEVBQUUsQ0FBQ0EsTUFBTSxDQUFDLENBQUM7RUFFWixJQUFBbUMsZ0JBQVMsRUFBQyxZQUFLO0lBQ2IsSUFBSVQsT0FBTyxLQUFLVixZQUFZLENBQUNrQixPQUFPLEVBQUU7TUFDcENsQixZQUFZLENBQUNrQixPQUFPLEdBQUdSLE9BQU87TUFDOUIsSUFBSUEsT0FBTyxFQUFFO1FBQ1hmLE9BQU8sS0FBQSxJQUFBLElBQVBBLE9BQU8sS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUEEsT0FBTyxDQUFBLENBQUk7TUFDYixDQUFDLE1BQU07UUFDTEMsTUFBTSxLQUFBLElBQUEsSUFBTkEsTUFBTSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFOQSxNQUFNLENBQUEsQ0FBSTtNQUNaO0lBQ0Y7RUFDRixDQUFDLEVBQUUsQ0FBQ2MsT0FBTyxFQUFFZixPQUFPLEVBQUVDLE1BQU0sQ0FBQyxDQUFDO0VBRTlCLElBQUF1QixnQkFBUyxFQUFDLFlBQUs7SUFDYixJQUFNQyx5QkFBd0IsR0FBRyxTQUEzQkEsd0JBQXdCQSxDQUFJQyxNQUEwQixFQUFJO01EM0R4RCxJQUFJQyxFQUFFO01DNERaLElBQUksQ0FBQ3ZCLFNBQVMsQ0FBQ21CLE9BQU8sRUFBRSxPQUFPLEtBQUs7TUFDcEMsSUFBSSxDQUFBLENBQUFJLEVBQUEsR0FBQ0QsTUFBc0IsS0FBQSxJQUFBLElBQXRCQSxNQUFNLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQU5BLE1BQU0sQ0FBa0JFLE9BQU8sTUFBQSxJQUFBLElBQUFELEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFRSxzQkFBc0IsTUFBS3pCLFNBQVMsQ0FBQ21CLE9BQU8sRUFBRSxPQUFPLElBQUk7TUFDL0YsSUFBSUcsTUFBTSxLQUFLSSxRQUFRLENBQUNDLElBQUksSUFBSUwsTUFBTSxLQUFLSSxRQUFRLEVBQUUsT0FBTyxLQUFLO01BQ2pFLElBQU1FLE1BQU0sR0FBSU4sTUFBZSxDQUFDTyxVQUFVLElBQUtQLE1BQWtCLENBQUNRLGFBQWE7TUFDL0UsSUFBSSxDQUFDRixNQUFNLEVBQUUsT0FBTyxLQUFLO01BQ3pCLE9BQU9QLHlCQUF3QixDQUFDTyxNQUFNLENBQUM7SUFDekMsQ0FBQztJQUNELElBQU1HLFdBQVcsR0FBRyxTQUFkQSxXQUFXQSxDQUFJbkcsQ0FBYSxFQUFJO01BQ3BDLElBQUlrRSxhQUFhLENBQUNxQixPQUFPLEVBQUU7UUFDekJyQixhQUFhLENBQUNxQixPQUFPLEdBQUcsS0FBSztRQUM3QjtNQUNGO01BQ0FQLFVBQVUsQ0FBQyxVQUFBb0IsSUFBSSxFQUFHO1FBQ2hCLElBQUksQ0FBQ0EsSUFBSSxFQUFFLE9BQU8sS0FBSztRQUN2QixPQUFPWCx5QkFBd0IsQ0FBQ3pGLENBQUMsQ0FBQzBGLE1BQU0sQ0FBQztNQUMzQyxDQUFDLENBQUM7SUFDSixDQUFDO0lBQ0RJLFFBQVEsQ0FBQ08sZ0JBQWdCLENBQUMsT0FBTyxFQUFFRixXQUFXLENBQUM7SUFDL0MsT0FBTyxZQUFLO01BQ1ZMLFFBQVEsQ0FBQ1EsbUJBQW1CLENBQUMsT0FBTyxFQUFFSCxXQUFXLENBQUM7SUFDcEQsQ0FBQztFQUNILENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixPQUFPLElBQUFyRCxlQUFBLEVBQUNuQixhQUFhLEVBQUE7SUFDbkJHLEtBQUssRUFBRUEsS0FBSztJQUNaQyxPQUFPLEVBQUVBLE9BQU87SUFDaEJDLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkMsU0FBUyxFQUFFQSxTQUFTO0lBQ3BCQyxVQUFVLEVBQUVBLFVBQVU7SUFDdEJDLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkMsVUFBVSxFQUFFQSxVQUFVO0lBQ3RCQyxPQUFPLEVBQUVBLE9BQU87SUFDaEJDLE9BQU8sRUFBRUEsT0FBTztJQUNoQkMsUUFBUSxFQUFFQSxRQUFRO0lBQUFFLFFBQUEsRUFFbEIsSUFBQUcsZ0JBQUEsRUFBQSxLQUFBLEVBQUE7TUFDRVEsR0FBRyxFQUFFa0IsU0FBUztNQUNkekIsU0FBUyxFQUFFb0MsU0FBUztNQUNwQnNCLGVBQWUsRUFBRSxDQUFDaEUsUUFBUSxHQUFHa0IsUUFBUSxHQUFHLEtBQUs7TUFDN0MrQyxTQUFTLEVBQUUvQyxRQUFRO01BQUEsa0JBQUEsRUFDREUsV0FBVztNQUFBLFlBQUEsRUFDakJnQixLQUFLO01BQ2pCWixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBRy9ELENBQUMsRUFBSTtRQUNiLElBQUl1QyxRQUFRLEVBQUU7UUFDZCxJQUFJLENBQUNrQixRQUFRLEVBQUU7VUFDYlMsYUFBYSxDQUFDcUIsT0FBTyxHQUFHLElBQUk7VUFDNUJQLFVBQVUsQ0FBQyxVQUFBb0IsSUFBSTtZQUFBLE9BQUksQ0FBQ0EsSUFBSTtVQUFBLEVBQUM7UUFDM0I7UUFDQXJDLFFBQU8sS0FBQSxJQUFBLElBQVBBLFFBQU8sS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUEEsUUFBTyxDQUFHL0QsQ0FBQyxDQUFDO01BQ2QsQ0FBQztNQUNEeUcsT0FBTyxFQUFFLFNBQVRBLE9BQU9BLENBQUV6RyxDQUFDLEVBQUc7UUFDWCxJQUFJMEcsR0FBRyxHQUFHMUcsQ0FBQyxDQUFDMkcsYUFBYSxDQUFDQyxTQUFTO1FBQ25DLElBQUlGLEdBQUcsS0FBSyxJQUFJLEVBQUU7VUFDaEJBLEdBQUcsR0FBRyxFQUFFO1VBQ1IxRyxDQUFDLENBQUMyRyxhQUFhLENBQUNDLFNBQVMsR0FBRyxFQUFFO1FBQ2hDO1FBQ0FoQyxRQUFRLENBQUM4QixHQUFHLENBQUM7TUFDZixDQUFDO01BQUFqRSxRQUFBLEVBQUEsQ0FHQyxDQUFDRixRQUFRLElBQUlrQixRQUFRLEdBQ2pCLElBQUksR0FDSixPQUFPSSxnQkFBZ0IsS0FBSyxVQUFVLEdBQ3BDQSxnQkFBZ0IsQ0FBQ2tCLE9BQU8sQ0FBQyxHQUN6QixJQUFBakMsZUFBQSxFQUFBLE1BQUEsRUFBQTtRQUFNRCxTQUFTLEVBQUVILE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQztRQUFBRCxRQUFBLEVBQUdrQjtNQUFXLENBQUEsQ0FBUSxFQUcxRUYsUUFBUSxHQUNKLElBQUksR0FDSixPQUFPSyxZQUFZLEtBQUssVUFBVSxHQUNoQ0EsWUFBWSxDQUFDaUIsT0FBTyxDQUFDLEdBQ3JCLElBQUFqQyxlQUFBLEVBQUMrRCxZQUFLLEVBQUE7UUFBQ0MsSUFBSSxFQUFDLGFBQWE7UUFBQ0MsS0FBSyxFQUFDLFNBQVM7UUFBQ3ZELElBQUksRUFBRSxFQUFFO1FBQUV0QixVQUFVLEVBQUVRLE9BQU8sQ0FBQyxhQUFhLEVBQUVxQyxPQUFPLEdBQUdyQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFO01BQUMsQ0FBQSxDQUFJO0lBQUEsQ0FBQTtFQUUzSSxDQUFBLENBQ1E7QUFDbEIsQ0FBQztBQUVNLElBQU1zRSxNQUFNLEdBQUFDLE9BQUEsQ0FBQUQsTUFBQSxHQUFtRixTQUF6RkEsTUFBTUEsQ0FBbUZuRixLQUFLLEVBQUc7RURuRjFHLElBQUk4RCxFQUFFO0VDb0ZSLElBQ0V1QixFQUFFLEdBNkJBckYsS0FBSyxDQTdCUHFGLEVBQUU7SUFDRjlELEdBQUcsR0E0QkR2QixLQUFLLENBNUJQdUIsR0FBRztJQUNIMEQsSUFBSSxHQTJCRmpGLEtBQUssQ0EzQlBpRixJQUFJO0lBQ0poRixLQUFLLEdBMEJIRCxLQUFLLENBMUJQQyxLQUFLO0lBQ0xDLE9BQU8sR0F5QkxGLEtBQUssQ0F6QlBFLE9BQU87SUFDUEMsUUFBUSxHQXdCTkgsS0FBSyxDQXhCUEcsUUFBUTtJQUFBbUYsaUJBQUEsR0F3Qk50RixLQUFLLENBdkJQSSxTQUFTO0lBQVRBLFNBQVMsR0FBQWtGLGlCQUFBLGNBQUcsUUFBUSxHQUFBQSxpQkFBQTtJQUNwQmpGLFVBQVUsR0FzQlJMLEtBQUssQ0F0QlBLLFVBQVU7SUFDVkMsUUFBUSxHQXFCTk4sS0FBSyxDQXJCUE0sUUFBUTtJQUNSQyxVQUFVLEdBb0JSUCxLQUFLLENBcEJQTyxVQUFVO0lBQ1Z1QyxLQUFLLEdBbUJIOUMsS0FBSyxDQW5CUDhDLEtBQUs7SUFBQXlDLFlBQUEsR0FtQkh2RixLQUFLLENBbEJQMkIsSUFBSTtJQUFKQSxJQUFJLEdBQUE0RCxZQUFBLGNBQUcsT0FBTyxHQUFBQSxZQUFBO0lBQ2QvRSxPQUFPLEdBaUJMUixLQUFLLENBakJQUSxPQUFPO0lBQUFnRixxQkFBQSxHQWlCTHhGLEtBQUssQ0FoQlB5RixnQkFBZ0I7SUFBaEJBLGdCQUFnQixHQUFBRCxxQkFBQSxjQUFHLElBQUksR0FBQUEscUJBQUE7SUFDdkIvRSxPQUFPLEdBZUxULEtBQUssQ0FmUFMsT0FBTztJQUNQQyxRQUFRLEdBY05WLEtBQUssQ0FkUFUsUUFBUTtJQUNSb0IsV0FBVyxHQWFUOUIsS0FBSyxDQWJQOEIsV0FBVztJQUFBNEQsaUJBQUEsR0FhVDFGLEtBQUssQ0FaUGdCLFNBQVM7SUFBVEEsU0FBUyxHQUFBMEUsaUJBQUEsY0FBRyxFQUFFLEdBQUFBLGlCQUFBO0lBQ2RDLFFBQVEsR0FXTjNGLEtBQUssQ0FYUDJGLFFBQVE7SUFDUkMsT0FBTyxHQVVMNUYsS0FBSyxDQVZQNEYsT0FBTztJQUNQQyxjQUFjLEdBU1o3RixLQUFLLENBVFA2RixjQUFjO0lBQ2RDLFlBQVksR0FRVjlGLEtBQUssQ0FSUDhGLFlBQVk7SUFDWkMsYUFBWSxHQU9WL0YsS0FBSyxDQVBQK0YsWUFBWTtJQUNaQyxTQUFRLEdBTU5oRyxLQUFLLENBTlBnRyxRQUFRO0lBQ1JDLE9BQU0sR0FLSmpHLEtBQUssQ0FMUGlHLE1BQU07SUFDTkMsT0FBTSxHQUlKbEcsS0FBSyxDQUpQa0csTUFBTTtJQUNOQyxZQUFZLEdBR1ZuRyxLQUFLLENBSFBtRyxZQUFZO0lBQ1p4RixPQUFPLEdBRUxYLEtBQUssQ0FGUFcsT0FBTztJQUNKeUYsSUFBSSxHQUFBOUcsTUFBQSxDQUNMVSxLQUFLLEVBOUJILENBQUEsSUFBQSxFQUFBLEtBQUEsRUFBQSxNQUFBLEVBQUEsT0FBQSxFQUFBLFNBQUEsRUFBQSxVQUFBLEVBQUEsV0FBQSxFQUFBLFlBQUEsRUFBQSxVQUFBLEVBQUEsWUFBQSxFQUFBLE9BQUEsRUFBQSxNQUFBLEVBQUEsU0FBQSxFQUFBLGtCQUFBLEVBQUEsU0FBQSxFQUFBLFVBQUEsRUFBQSxhQUFBLEVBQUEsV0FBQSxFQUFBLFVBQUEsRUFBQSxTQUFBLEVBQUEsZ0JBQUEsRUFBQSxjQUFBLEVBQUEsY0FBQSxFQUFBLFVBQUEsRUFBQSxRQUFBLEVBQUEsUUFBQSxFQUFBLGNBQUEsRUFBQSxTQUFBLENBOEJMLENBQVE7RUFDVCxJQUFNYSxPQUFPLEdBQUcsSUFBQUMsc0JBQVUsRUFBQ1YsU0FBUyxDQUFDO0VBQ3JDLElBQUFpRyxVQUFBLEdBQWdDLElBQUExRCxlQUFRLEVBQTZDLENBQUFtQixFQUFBLEdBQUFoQixLQUFLLEtBQUEsSUFBQSxJQUFMQSxLQUFLLEtBQUEsS0FBQSxDQUFBLEdBQUxBLEtBQUssR0FBSWdELFlBQVksTUFBQSxJQUFBLElBQUFoQyxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsR0FBSSxJQUFJLENBQUM7SUFBQXdDLFVBQUEsT0FBQXpELGVBQUEsYUFBQXdELFVBQUE7SUFBNUdFLFFBQVEsR0FBQUQsVUFBQTtJQUFFRSxXQUFXLEdBQUFGLFVBQUE7RUFDNUIsSUFBQUcsVUFBQSxHQUE0QixJQUFBOUQsZUFBUSxFQUFDLEtBQUssQ0FBQztJQUFBK0QsVUFBQSxPQUFBN0QsZUFBQSxhQUFBNEQsVUFBQTtJQUFwQ0UsTUFBTSxHQUFBRCxVQUFBO0lBQUVFLFNBQVMsR0FBQUYsVUFBQTtFQUN4QixJQUFBRyxVQUFBLEdBQThCLElBQUFsRSxlQUFRLEVBQUMsS0FBSyxDQUFDO0lBQUFtRSxXQUFBLE9BQUFqRSxlQUFBLGFBQUFnRSxVQUFBO0lBQXRDRSxPQUFPLEdBQUFELFdBQUE7SUFBRUUsVUFBVSxHQUFBRixXQUFBO0VBQzFCLElBQUFHLFdBQUEsR0FBc0MsSUFBQXRFLGVBQVEsRUFBQyxLQUFLLENBQUM7SUFBQXVFLFdBQUEsT0FBQXJFLGVBQUEsYUFBQW9FLFdBQUE7SUFBOUNFLFdBQVcsR0FBQUQsV0FBQTtJQUFFRSxjQUFjLEdBQUFGLFdBQUE7RUFFbEMsSUFBTXpFLFNBQVMsR0FBRyxJQUFBSCxhQUFNLEVBQWdDLElBQUksQ0FBQztFQUM3RCxJQUFNK0UsSUFBSSxHQUFHLElBQUEvRSxhQUFNLEVBQWdDLElBQUksQ0FBQztFQUV4RCxJQUFNYyxTQUFTLEdBQUcsSUFBQUMsY0FBTyxFQUFDO0lBQUEsT0FBTXhDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFBUSxtQkFBTyxFQUNyRFIsT0FBTyxDQUFDYyxJQUFJLENBQUMsRUFDYmdGLE1BQU0sSUFBSTlGLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFDekJMLE9BQU8sSUFBSUssT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUM3QkosT0FBTyxJQUFJSSxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQzdCSCxRQUFRLElBQUlHLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFDL0JGLE9BQU8sSUFBSUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUM3QixDQUFDeUcsS0FBSyxDQUFDQyxPQUFPLENBQUNoQixRQUFRLENBQUMsR0FBRyxDQUFDLENBQUNBLFFBQVEsQ0FBQzNHLE1BQU0sR0FBRyxDQUFDLENBQUMyRyxRQUFRLEtBQUsxRixPQUFPLENBQUMsUUFBUSxDQUFDLEVBQy9FRyxTQUFTLENBQ1YsQ0FBQztFQUFBLEdBQUUsQ0FBQ1csSUFBSSxFQUFFZ0YsTUFBTSxFQUFFbkcsT0FBTyxFQUFFK0YsUUFBUSxFQUFFOUYsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUssU0FBUyxDQUFDLENBQUM7RUFFN0UsSUFBTXdHLHFCQUFxQixHQUFHLElBQUFDLG1CQUFRLEVBQUM7SUFBQSxPQUFNTCxjQUFjLENBQUMsS0FBSyxDQUFDO0VBQUEsR0FBRSxHQUFHLENBQUM7RUFFeEUsSUFBTU0sVUFBVSxHQUFHLElBQUFDLGtCQUFXLEVBQUMsWUFBSztJRDdIOUIsSUFBSTdELEVBQUUsRUFBRThELEVBQUU7SUM4SGQsSUFBTUMsR0FBRyxHQUFHLENBQUFELEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFBckIsU0FBUyxDQUFDaUIsT0FBTyxNQUFBLElBQUEsSUFBQUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVnRSxVQUFVLE1BQUEsSUFBQSxJQUFBRixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBQXpJLElBQUEsQ0FBQTJFLEVBQUEsQ0FBSTtJQUM3QyxJQUFJLENBQUMrRCxHQUFHLEVBQUU7SUFDVixJQUFNRSxZQUFZLEdBQUdGLEdBQUcsQ0FBQ0csS0FBSyxDQUFDQyxNQUFNO0lBQ3JDLElBQUlGLFlBQVksSUFBSUcsU0FBUyxFQUFFO01BQzdCTCxHQUFHLENBQUNHLEtBQUssQ0FBQ0MsTUFBTSxNQUFBRSxNQUFBLENBQU1DLFFBQVEsQ0FBQ0wsWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFFO01BQ2xETSxVQUFVLENBQUMsWUFBSztRQUNkUixHQUFHLENBQUNHLEtBQUssQ0FBQ0MsTUFBTSxHQUFHRixZQUFZO01BQ2pDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDUDtFQUNGLENBQUMsRUFBRSxFQUFFLENBQUM7RUFFTixJQUFNTyxlQUFlLEdBQUcsSUFBQVgsa0JBQVcsRUFDakMsVUFBQzNILEtBQXVDO0lBQUEsT0FBSzJGLFFBQVEsR0FDakQsSUFBQTFFLGVBQUEsRUFBQ3NILHdCQUFXLEVBQUF6SixNQUFBLENBQUEwSixNQUFBLENBQUE7TUFDWnJDLFlBQVksRUFBRUEsWUFBWTtNQUMxQnNDLGFBQWEsRUFBRSxLQUFLO01BQ3BCQyxZQUFZLEVBQUUsSUFBQXpILGVBQUEsRUFBQytELFlBQUssRUFBQTtRQUFDQyxJQUFJLEVBQUMsT0FBTztRQUFDdEQsSUFBSSxFQUFFLEVBQUU7UUFBRXVELEtBQUssRUFBQztNQUFTLENBQUEsQ0FBRztNQUM5RHlELFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFFM0ksS0FBSyxFQUFHO1FBQ2xCLElBQUE0SSxnQkFBQSxHQUF5QzVJLEtBQUssQ0FBQzZJLFNBQVM7VUFBaEQzRyxPQUFPLEdBQUEwRyxnQkFBQSxDQUFQMUcsT0FBTztVQUFFNEcsU0FBUyxHQUFBRixnQkFBQSxDQUFURSxTQUFTO1VBQUVDLFFBQVEsR0FBQUgsZ0JBQUEsQ0FBUkcsUUFBUTtRQUNwQyxPQUFPLElBQUE5SCxlQUFBLEVBQUMrRCxZQUFLLEVBQUE7VUFDWEMsSUFBSSxFQUFDLE9BQU87VUFDWnRELElBQUksRUFBRSxFQUFFO1VBQ1J1RCxLQUFLLEVBQUMsU0FBUztVQUNmNkQsUUFBUSxFQUFFQSxRQUFRO1VBQ2xCMUksVUFBVSxFQUFFUSxPQUFPLENBQUMsbUJBQW1CLENBQUM7VUFDeENxQixPQUFPLEVBQUVBLE9BQU87VUFDaEI0RyxTQUFTLEVBQUVBO1FBQVMsQ0FBQSxDQUNwQjtNQUNKLENBQUM7TUFDREUsbUJBQW1CLEVBQUUsU0FBckJBLG1CQUFtQkEsQ0FBRXBELE9BQU8sRUFBRztRRDFJdkIsSUFBSTlCLEVBQUUsRUFBRThELEVBQUUsRUFBRXFCLEVBQUUsRUFBRUMsRUFBRSxFQUFFQyxFQUFFO1FDMkk1QixJQUFRQyxhQUFhLEdBQVl4RCxPQUFPLENBQWhDd0QsYUFBYTtVQUFFcEosS0FBSyxHQUFLNEYsT0FBTyxDQUFqQjVGLEtBQUs7UUFDNUI7UUFDQSxJQUFNcUosV0FBVyxHQUFHLENBQUFILEVBQUEsR0FBQSxDQUFBRCxFQUFBLEdBQUEsQ0FBQXJCLEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFBOUQsS0FBSyxLQUFBLElBQUEsSUFBTEEsS0FBSyxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFMQSxLQUFLLENBQUVzSixRQUFRLE1BQUEsSUFBQSxJQUFBeEYsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUU5RCxLQUFLLE1BQUEsSUFBQSxJQUFBNEgsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUU5RSxLQUFLLE1BQUEsSUFBQSxJQUFBbUcsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVySixNQUFNLE1BQUEsSUFBQSxJQUFBc0osRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLEdBQUksQ0FBQztRQUM5RCxPQUFPLElBQUFuSSxnQkFBQSxFQUFBLEtBQUEsRUFBQTtVQUFLQyxTQUFTLEVBQUVILE9BQU8sQ0FBQyxjQUFjLENBQUM7VUFBQUQsUUFBQSxFQUFBLENBQzVDLElBQUFHLGdCQUFBLEVBQUEsS0FBQSxFQUFBO1lBQUtDLFNBQVMsRUFBRUgsT0FBTyxDQUFDLG1CQUFtQixDQUFDO1lBQUFELFFBQUEsRUFBQSxDQUMxQyxJQUFBRyxnQkFBQSxFQUFBLE1BQUEsRUFBQTtjQUFNQyxTQUFTLEVBQUVILE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztjQUFBRCxRQUFBLEVBQUEsQ0FDaER5SSxXQUFXLEVBQUEsV0FBQTtZQUFBLENBQUEsQ0FDUCxFQUNQLElBQUF0SSxnQkFBQSxFQUFBLE1BQUEsRUFBQTtjQUNFQyxTQUFTLEVBQUVILE9BQU8sQ0FBQyx5QkFBeUIsQ0FBQztjQUM3Q3FCLE9BQU8sRUFBRSxTQUFUQSxPQUFPQSxDQUFFL0QsQ0FBQyxFQUFHO2dCQUNYO2dCQUNBNkIsS0FBSyxDQUFDdUosV0FBVyxDQUNmcEwsQ0FBQyxFQUNELEVBQUUsRUFDRixFQUFFLENBQ0g7Y0FDSCxDQUFDO2NBQUF5QyxRQUFBLEVBQUEsQ0FFRCxJQUFBSyxlQUFBLEVBQUMrRCxZQUFLLEVBQUE7Z0JBQUNDLElBQUksRUFBQyxPQUFPO2dCQUFDdEQsSUFBSSxFQUFFLEVBQUU7Z0JBQUV1RCxLQUFLLEVBQUMsU0FBUztnQkFBQzdFLFVBQVUsRUFBRVEsT0FBTyxDQUFDLDhCQUE4QjtjQUFDLENBQUEsQ0FBSSxFQUFBLFdBQUE7WUFBQSxDQUFBLENBRWhHO1VBQUEsQ0FBQSxDQUNILEVBQ0wsQ0FBQXNJLEVBQUEsR0FBQUMsYUFBYSxLQUFBLElBQUEsSUFBYkEsYUFBYSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFiQSxhQUFhLENBQUVwSixLQUFLLE1BQUEsSUFBQSxJQUFBbUosRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUV2SSxRQUFRO1FBQUEsQ0FBQSxDQUMzQjtNQUNSO0lBQUMsQ0FBQSxFQUNJWixLQUEwQixDQUFBLENBQy9CLEdBQ0EsSUFBQWlCLGVBQUEsRUFBQ3VJLGtCQUFRLEVBQUExSyxNQUFBLENBQUEwSixNQUFBLENBQUE7TUFDVGlCLFlBQVksRUFBRTlELFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRztRQUFBLE9BQU0sSUFBQTFFLGVBQUEsRUFBQytELFlBQUssRUFBQTtVQUFDQyxJQUFJLEVBQUMsV0FBVztVQUFDQyxLQUFLLEVBQUMsU0FBUztVQUFDdkQsSUFBSSxFQUFFO1FBQUUsQ0FBQSxDQUFJO01BQUE7SUFBQSxDQUFBLEVBQ3ZGM0IsS0FBdUIsQ0FBQSxDQUM1QjtFQUFBLEdBQ0YsQ0FBQzJGLFFBQVEsQ0FBQyxDQUNiO0VBRUQsSUFBQWhDLGdCQUFTLEVBQUMsWUFBSztJQUNiLElBQUliLEtBQUssS0FBS29GLFNBQVMsSUFBSSxDQUFDLElBQUF3QixrQkFBTyxFQUFDbkQsUUFBUSxFQUFFekQsS0FBSyxDQUFDLEVBQUU7TUFDcEQwRCxXQUFXLENBQUMxRCxLQUFLLENBQUM7SUFDcEI7RUFDRixDQUFDLEVBQUUsQ0FBQ0EsS0FBSyxDQUFDLENBQUM7RUFFWDtFQUNBLElBQUFRLDBCQUFtQixFQUFDL0IsR0FBRyxLQUFBLElBQUEsSUFBSEEsR0FBRyxLQUFBLEtBQUEsQ0FBQSxHQUFIQSxHQUFHLEdBQUk4RixJQUFJLEVBQUUsWUFBSztJRHBLaEMsSUFBSXZELEVBQUUsRUFBRThELEVBQUU7SUNvS3VCLE9BQUNqQyxRQUFRLEdBQUc7TUFDakQzRixLQUFLLEVBQUUsQ0FBQThELEVBQUEsR0FBQXJCLFNBQVMsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFOUQsS0FBTTtNQUNoQ3VELEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFBLEVBQU87UUFBQSxJQUFBTyxFQUFBLEVBQUE4RCxFQUFBO1FBQUMsT0FBQSxDQUFBQSxFQUFBLEdBQUEsQ0FBQTlELEVBQUEsR0FBQXJCLFNBQVMsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFUCxLQUFLLE1BQUEsSUFBQSxJQUFBcUUsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUF6SSxJQUFBLENBQUEyRSxFQUFBLENBQUk7TUFBQSxDQUFBO01BQ3pDNkYsSUFBSSxFQUFFLFNBQU5BLElBQUlBLENBQUEsRUFBTztRQUFBLElBQUE3RixFQUFBLEVBQUE4RCxFQUFBO1FBQUMsT0FBQSxDQUFBQSxFQUFBLEdBQUEsQ0FBQTlELEVBQUEsR0FBQXJCLFNBQVMsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFNkYsSUFBSSxNQUFBLElBQUEsSUFBQS9CLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUEsQ0FBQTtNQUN2QzhGLElBQUksRUFBRSxTQUFOQSxJQUFJQSxDQUFBLEVBQU87UUFBQSxJQUFBOUYsRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUFyQixTQUFTLENBQUNpQixPQUFPLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRThGLElBQUksTUFBQSxJQUFBLElBQUFoQyxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBQXpJLElBQUEsQ0FBQTJFLEVBQUEsQ0FBSTtNQUFBLENBQUE7TUFDdkMrRixVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQSxFQUFPO1FBQUEsSUFBQS9GLEVBQUEsRUFBQThELEVBQUE7UUFBQyxPQUFBLENBQUFBLEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFBckIsU0FBUyxDQUFDaUIsT0FBTyxNQUFBLElBQUEsSUFBQUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUUrRixVQUFVLE1BQUEsSUFBQSxJQUFBakMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUF6SSxJQUFBLENBQUEyRSxFQUFBLENBQUk7TUFBQSxDQUFBO01BQ25EZ0csUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUEsRUFBTztRQUFBLElBQUFoRyxFQUFBLEVBQUE4RCxFQUFBO1FBQUMsT0FBQSxDQUFBQSxFQUFBLEdBQUEsQ0FBQTlELEVBQUEsR0FBQXJCLFNBQVMsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFZ0csUUFBUSxNQUFBLElBQUEsSUFBQWxDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUEsQ0FBQTtNQUMvQ2dFLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBLEVBQU87UUFBQSxJQUFBaEUsRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUFyQixTQUFTLENBQUNpQixPQUFPLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRWdFLFVBQVUsTUFBQSxJQUFBLElBQUFGLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUE7SURsSy9DLENDbUtMLEdBQUc7TUFDRjlELEtBQUssRUFBRSxDQUFBNEgsRUFBQSxHQUFBbkYsU0FBUyxDQUFDaUIsT0FBTyxNQUFBLElBQUEsSUFBQWtFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFNUgsS0FBTTtNQUNoQytKLEtBQUssRUFBRSxTQUFQQSxLQUFLQSxDQUFBLEVBQU87UUFBQSxJQUFBakcsRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUNyQixTQUFTLENBQUNpQixPQUFvQixNQUFBLElBQUEsSUFBQUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVpRyxLQUFLLE1BQUEsSUFBQSxJQUFBbkMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUF6SSxJQUFBLENBQUEyRSxFQUFBLENBQUk7TUFBQSxDQUFBO01BQ3ZEUCxLQUFLLEVBQUUsU0FBUEEsS0FBS0EsQ0FBQSxFQUFPO1FBQUEsSUFBQU8sRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUFyQixTQUFTLENBQUNpQixPQUFPLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRVAsS0FBSyxNQUFBLElBQUEsSUFBQXFFLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUEsQ0FBQTtNQUN6QzZGLElBQUksRUFBRSxTQUFOQSxJQUFJQSxDQUFBLEVBQU87UUFBQSxJQUFBN0YsRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUFyQixTQUFTLENBQUNpQixPQUFPLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRTZGLElBQUksTUFBQSxJQUFBLElBQUEvQixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBQXpJLElBQUEsQ0FBQTJFLEVBQUEsQ0FBSTtNQUFBLENBQUE7TUFDdkM4RixJQUFJLEVBQUUsU0FBTkEsSUFBSUEsQ0FBQSxFQUFPO1FBQUEsSUFBQTlGLEVBQUEsRUFBQThELEVBQUE7UUFBQyxPQUFBLENBQUFBLEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFBckIsU0FBUyxDQUFDaUIsT0FBTyxNQUFBLElBQUEsSUFBQUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUU4RixJQUFJLE1BQUEsSUFBQSxJQUFBaEMsRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUF6SSxJQUFBLENBQUEyRSxFQUFBLENBQUk7TUFBQSxDQUFBO01BQ3ZDK0YsVUFBVSxFQUFFLFNBQVpBLFVBQVVBLENBQUEsRUFBTztRQUFBLElBQUEvRixFQUFBLEVBQUE4RCxFQUFBO1FBQUMsT0FBQSxDQUFBQSxFQUFBLEdBQUEsQ0FBQTlELEVBQUEsR0FBQXJCLFNBQVMsQ0FBQ2lCLE9BQU8sTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFK0YsVUFBVSxNQUFBLElBQUEsSUFBQWpDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUEsQ0FBQTtNQUNuRGdHLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFBLEVBQU87UUFBQSxJQUFBaEcsRUFBQSxFQUFBOEQsRUFBQTtRQUFDLE9BQUEsQ0FBQUEsRUFBQSxHQUFBLENBQUE5RCxFQUFBLEdBQUFyQixTQUFTLENBQUNpQixPQUFPLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRWdHLFFBQVEsTUFBQSxJQUFBLElBQUFsQyxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBQXpJLElBQUEsQ0FBQTJFLEVBQUEsQ0FBSTtNQUFBLENBQUE7TUFDL0NnRSxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQSxFQUFPO1FBQUEsSUFBQWhFLEVBQUEsRUFBQThELEVBQUE7UUFBQyxPQUFBLENBQUFBLEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFBckIsU0FBUyxDQUFDaUIsT0FBTyxNQUFBLElBQUEsSUFBQUksRUFBQSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFBQSxFQUFBLENBQUVnRSxVQUFVLE1BQUEsSUFBQSxJQUFBRixFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBQXpJLElBQUEsQ0FBQTJFLEVBQUEsQ0FBSTtNQUFBLENBQUE7TUFDbkRrRyxhQUFhLEVBQUUsU0FBZkEsYUFBYUEsQ0FBQSxFQUFPO1FBQUEsSUFBQWxHLEVBQUEsRUFBQThELEVBQUE7UUFBQyxPQUFBLENBQUFBLEVBQUEsR0FBQSxDQUFBOUQsRUFBQSxHQUFDckIsU0FBUyxDQUFDaUIsT0FBb0IsTUFBQSxJQUFBLElBQUFJLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFFa0csYUFBYSxNQUFBLElBQUEsSUFBQXBDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUEsQ0FBQTtNQUN2RW1HLGtCQUFrQixFQUFFLFNBQXBCQSxrQkFBa0JBLENBQUEsRUFBTztRQUFBLElBQUFuRyxFQUFBLEVBQUE4RCxFQUFBO1FBQUMsT0FBQSxDQUFBQSxFQUFBLEdBQUEsQ0FBQTlELEVBQUEsR0FBQ3JCLFNBQVMsQ0FBQ2lCLE9BQW9CLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRW1HLGtCQUFrQixNQUFBLElBQUEsSUFBQXJDLEVBQUEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBQUEsRUFBQSxDQUFBekksSUFBQSxDQUFBMkUsRUFBQSxDQUFJO01BQUE7SURsSzdFLENDbUtMO0VEbEtDLENDa0tBLEVBQUUsQ0FBQzZCLFFBQVEsQ0FBQyxDQUFDO0VBRWYsT0FDRSxJQUFBMUUsZUFBQSxFQUFDbkIsYUFBYSxFQUFBO0lBQ1pHLEtBQUssRUFBRUEsS0FBSztJQUNaQyxPQUFPLEVBQUVBLE9BQU87SUFDaEJDLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkMsU0FBUyxFQUFFQSxTQUFTO0lBQ3BCQyxVQUFVLEVBQUVBLFVBQVU7SUFDdEJDLFFBQVEsRUFBRUEsUUFBUTtJQUNsQkMsVUFBVSxFQUFFQSxVQUFVO0lBQ3RCQyxPQUFPLEVBQUVBLE9BQU87SUFDaEJDLE9BQU8sRUFBRUEsT0FBTztJQUNoQkMsUUFBUSxFQUFFQSxRQUFRO0lBQ2xCQyxPQUFPLEVBQUVBLE9BQU87SUFBQUMsUUFBQSxFQUVoQixJQUFBSyxlQUFBLEVBQUNxSCxlQUFlLEVBQUF4SixNQUFBLENBQUEwSixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQ1QsWUFBSztNQUNGLElBQUExRSxFQUFBLEdBQW9Dc0MsSUFBVztRQUE3QzhELFVBQVUsR0FBUXBHLEVBQTJCLENBQTdDb0csVUFBVTtRQUFFQyxNQUFNLEdBQUFyRyxFQUEyQixDQUFqQ3FHLE1BQU07UUFBS0MsTUFBTSxHQUFBOUssTUFBQSxDQUFBd0UsRUFBQSxFQUEvQixDQUFBLFlBQUEsRUFBQSxRQUFBLENBQWlDLENBQWM7TUFDckQsSUFBTXVHLFVBQVUsR0FBR0YsTUFBTSxHQUFHO1FBQUVELFVBQVUsRUFBRUEsVUFBVSxLQUFBLElBQUEsSUFBVkEsVUFBVSxLQUFBLEtBQUEsQ0FBQSxHQUFWQSxVQUFVLEdBQUksSUFBQWpKLGVBQUEsRUFBQytELFlBQUssRUFBQTtVQUFDQyxJQUFJLEVBQUMsUUFBUTtVQUFDdEQsSUFBSSxFQUFFLEVBQUU7VUFBRXVELEtBQUssRUFBQyxTQUFTO1VBQUM3RSxVQUFVLEVBQUVRLE9BQU8sQ0FBQyxhQUFhO1FBQUMsQ0FBQTtNQUFJLENBQUUsR0FBRyxJQUFJO01BQ3RKLE9BQUEvQixNQUFBLENBQUEwSixNQUFBLENBQUExSixNQUFBLENBQUEwSixNQUFBLENBQUExSixNQUFBLENBQUEwSixNQUFBLENBQUEsQ0FBQSxDQUFBLEVBQVk0QixNQUFNLENBQUEsRUFBQTtRQUFFRCxNQUFNLEVBQU5BO01BQU0sQ0FBQSxDQUFBLEVBQU1FLFVBQVUsSUFBSSxDQUFBLENBQUcsQ0FBQTtJQUNuRCxDQUFDLENBQUMsQ0FBRSxFQUFBO01BQ0poRixFQUFFLEVBQUVBLEVBQUU7TUFDTjlELEdBQUcsRUFBRWtCLFNBQVM7TUFDZHdDLElBQUksRUFBRUEsSUFBSTtNQUNWdEUsT0FBTyxFQUFFQSxPQUFPO01BQ2hCMkosaUJBQWlCLEVBQUMsUUFBUTtNQUMxQm5LLFFBQVEsRUFBRUEsUUFBUTtNQUNsQk8sUUFBUSxFQUFFQSxRQUFRO01BQ2xCRCxPQUFPLEVBQUVBLE9BQU87TUFDaEJtRixPQUFPLEVBQUVBLE9BQU87TUFDaEI5RCxXQUFXLEVBQUVBLFdBQVc7TUFDeEJnQixLQUFLLEVBQUV5RCxRQUFRLElBQUksSUFBSSxHQUFHMkIsU0FBUyxHQUFHM0IsUUFBUTtNQUM5Q3ZGLFNBQVMsRUFBRW9DLFNBQVM7TUFDcEIyQyxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBR3dFLE1BQU0sRUFBSTtRQUN2QixPQUFPLElBQUF4SixnQkFBQSxFQUFBLEtBQUEsRUFBQTtVQUFLQyxTQUFTLEVBQUVILE9BQU8sQ0FBQyxZQUFZLENBQUM7VUFDMUNxQixPQUFPLEVBQUUsU0FBVEEsT0FBT0EsQ0FBQSxFQUFPO1lEL0xGLElBQUk0QixFQUFFO1lDZ01oQixJQUFJLENBQUM2QixRQUFRLElBQUlRLFlBQVksS0FBSyxJQUFJLElBQUlvRSxNQUFNLENBQUN6SCxLQUFLLEtBQUt5RCxRQUFRLEVBQUU7Y0FDbkUsQ0FBQXpDLEVBQUEsR0FBQ3JCLFNBQVMsQ0FBQ2lCLE9BQW9CLE1BQUEsSUFBQSxJQUFBSSxFQUFBLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQUFBLEVBQUEsQ0FBRWlHLEtBQUssQ0FBQSxDQUFFO1lBQzFDO1VBQ0YsQ0FBQztVQUFBbkosUUFBQSxFQUFBLENBRUQsSUFBQUssZUFBQSxFQUFBLEtBQUEsRUFBQTtZQUFLRCxTQUFTLEVBQUVILE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUFBRCxRQUFBLEVBQ3hDbUYsYUFBWSxHQUFHQSxhQUFZLENBQUN3RSxNQUFNLENBQUMsR0FBR0EsTUFBTSxDQUFDdEs7VUFBSyxDQUFBLENBQy9DLEVBQ04sSUFBQWdCLGVBQUEsRUFBQytELFlBQUssRUFBQTtZQUFDQyxJQUFJLEVBQUMsT0FBTztZQUFDdEQsSUFBSSxFQUFFLEVBQUU7WUFBRXVELEtBQUssRUFBQztVQUFTLENBQUEsQ0FBRztRQUFBLENBQUEsQ0FDNUM7TUFDUixDQUFDO01BQ0RzRixXQUFXLEVBQUUsSUFBQXZKLGVBQUEsRUFBQ3dKLGdCQUFPLEVBQUE7UUFBQ3pKLFNBQVMsRUFBRUgsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUFFNkosV0FBVyxFQUFDO01BQUcsQ0FBQSxDQUFHO01BQzVFN0UsY0FBYyxFQUFFaEYsT0FBTyxDQUFDLE9BQU8sRUFBRSxJQUFBUSxtQkFBTyxFQUN0Q3dFLGNBQWMsRUFDZGtCLE9BQU8sSUFBSWxHLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFDakNzRyxXQUFXLElBQUl0RyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFDekN1RixJQUFJLENBQUN1RSxRQUFRLEtBQUssTUFBTSxJQUFJOUosT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQ3pELENBQUM7TUFDRm1GLFFBQVEsRUFBRSxTQUFWQSxRQUFRQSxDQUFHN0gsQ0FBQyxFQUFJO1FBQ2RxSSxXQUFXLENBQUNySSxDQUFDLENBQUMyRSxLQUFLLENBQUM7UUFDcEI7UUFDQWtELFNBQVEsS0FBQSxJQUFBLElBQVJBLFNBQVEsS0FBQSxLQUFBLENBQUEsR0FBQSxLQUFBLENBQUEsR0FBUkEsU0FBUSxDQUFHN0gsQ0FBQyxDQUFDO01BQ2YsQ0FBQztNQUNEOEgsTUFBTSxFQUFFLFNBQVJBLE1BQU1BLENBQUEsRUFBTztRQUNYVyxTQUFTLENBQUMsS0FBSyxDQUFDO1FBQ2hCWCxPQUFNLEtBQUEsSUFBQSxJQUFOQSxPQUFNLEtBQUEsS0FBQSxDQUFBLEdBQUEsS0FBQSxDQUFBLEdBQU5BLE9BQU0sQ0FBQSxDQUFJO01BQ1osQ0FBQztNQUNEQyxNQUFNLEVBQUUsU0FBUkEsTUFBTUEsQ0FBQSxFQUFPO1FBQ1hVLFNBQVMsQ0FBQyxJQUFJLENBQUM7UUFDZlYsT0FBTSxLQUFBLElBQUEsSUFBTkEsT0FBTSxLQUFBLEtBQUEsQ0FBQSxHQUFBLEtBQUEsQ0FBQSxHQUFOQSxPQUFNLENBQUEsQ0FBSTtRQUNWLElBQUksQ0FBQ1QsZ0JBQWdCLEVBQUU7UUFDdkI0QyxVQUFVLENBQUM7VUFBQSxPQUFNWCxVQUFVLENBQUEsQ0FBRTtRQUFBLEdBQUUsQ0FBQyxDQUFDO01BQ25DLENBQUM7TUFDRGtELFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFBO1FBQUEsT0FBUSxJQUFBM0osZUFBQSxFQUFDK0QsWUFBSyxFQUFBO1VBQUNDLElBQUksRUFBQyxhQUFhO1VBQUNDLEtBQUssRUFBQyxTQUFTO1VBQUN2RCxJQUFJLEVBQUU7UUFBRSxDQUFBLENBQUk7TUFBQTtNQUMxRWtKLEVBQUUsRUFBRTtRQUNGQyxPQUFPLEVBQUU7VUFDUEMsUUFBUSxFQUFFLFNBQVZBLFFBQVFBLENBQUEsRUFBTztZQUNidkQscUJBQXFCLENBQUN3RCxNQUFNLENBQUEsQ0FBRTtZQUM5QjVELGNBQWMsQ0FBQyxJQUFJLENBQUM7WUFDcEJJLHFCQUFxQixDQUFBLENBQUU7VUFDekI7UUQvTUksQ0NnTkw7UUFDRHlELEtBQUssRUFBRTtVQUNMQyxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBQTtZQUFBLE9BQVFsRSxVQUFVLENBQUMsSUFBSSxDQUFDO1VBQUE7VUFDcENtRSxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBQTtZQUFBLE9BQVFuRSxVQUFVLENBQUMsS0FBSyxDQUFDO1VBQUE7VUFDckNvRSxZQUFZLEVBQUUsU0FBZEEsWUFBWUEsQ0FBQTtZQUFBLE9BQVFwRSxVQUFVLENBQUMsSUFBSSxDQUFDO1VBQUE7VUFDcENxRSxVQUFVLEVBQUUsU0FBWkEsVUFBVUEsQ0FBQTtZQUFBLE9BQVFyRSxVQUFVLENBQUMsS0FBSyxDQUFDO1VBQUE7UUQvTS9CO01BQ0o7SUNnTkgsQ0FBQSxDQUFBO0VBQ0QsQ0FBQSxDQUNZO0FBRXBCLENBQUM7QUFFRDdCLE1BQU0sQ0FBQzdELGNBQWMsR0FBR0EsY0FBYztBQUFDLElBQUFnSyxRQUFBLEdBQUFsRyxPQUFBLDJCQUV4QixJQUFBckYsV0FBSSxFQUFDb0YsTUFBTSxDQUFDIiwiZmlsZSI6ImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsInNvdXJjZXNDb250ZW50IjpbInZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbmltcG9ydCB7IGpzeCBhcyBfanN4LCBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBtZW1vLCB1c2VSZWYsIHVzZU1lbW8sIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrLCB1c2VJbXBlcmF0aXZlSGFuZGxlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoLmlzZXF1YWwnO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC5kZWJvdW5jZSc7XG5pbXBvcnQgeyBEcm9wZG93biB9IGZyb20gJ3ByaW1lcmVhY3QvZHJvcGRvd24nO1xuaW1wb3J0IHsgTXVsdGlTZWxlY3QgfSBmcm9tICdwcmltZXJlYWN0L211bHRpc2VsZWN0JztcbmltcG9ydCB7IFNrZWxldG9uIH0gZnJvbSAncHJpbWVyZWFjdC9za2VsZXRvbic7XG5pbXBvcnQgeyBkZWZhdWx0IGFzIGNsYXNzbmFtZXMsIGpvaW5DbHMgfSBmcm9tICcuLi8uLi91dGlscy9jbGFzc25hbWVzJztcbmltcG9ydCB7IEljb25zIH0gZnJvbSAnLi4vSWNvbnMnO1xuaW1wb3J0IHsgU3Bpbm5lciB9IGZyb20gJy4uL1NwaW5uZXInO1xuY29uc3QgU2VsZWN0V3JhcHBlciA9IG1lbW8ocHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIG1lc3NhZ2UsIHJlcXVpcmVkLCBwcmVmaXhDbHMsIHdyYXBwZXJDbHMsIGxhYmVsQ2xzLCBtZXNzYWdlQ2xzLCBzdWNjZXNzLCBpbnZhbGlkLCBkaXNhYmxlZCwgbG9hZGluZywgY2hpbGRyZW4sIH0gPSBwcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnd3JhcHBlcicsIHdyYXBwZXJDbHMpLCBjaGlsZHJlbjogW2xhYmVsID9cbiAgICAgICAgICAgICAgICBsb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgID8gX2pzeChTa2VsZXRvbiwgeyB3aWR0aDogJzcycHgnLCBoZWlnaHQ6ICcxOHB4JywgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbC1sb2FkaW5nJykgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbGFiZWwnLCBqb2luQ2xzKHJlcXVpcmVkICYmIGNsYXNzZXMoJ2xhYmVsLXJlcXVpcmVkJyksIGxhYmVsQ2xzKSksIGNoaWxkcmVuOiBsYWJlbCB9KVxuICAgICAgICAgICAgICAgIDogbnVsbCwgY2hpbGRyZW4sIG1lc3NhZ2UgJiYgX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ21lc3NhZ2UnLCBqb2luQ2xzKHN1Y2Nlc3MgJiYgY2xhc3NlcygnbWVzc2FnZS1zdWNjZXNzJyksIGludmFsaWQgJiYgY2xhc3NlcygnbWVzc2FnZS1lcnJvcicpLCBtZXNzYWdlQ2xzKSksIGNoaWxkcmVuOiBtZXNzYWdlIH0pXSB9KTtcbn0pO1xuY29uc3QgQ3VzdG9tRHJvcGRvd24gPSBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyByZWYsIGRhdGFJZCwgbGFiZWwsIG1lc3NhZ2UsIHJlcXVpcmVkLCBwcmVmaXhDbHMgPSAnc2VsZWN0Jywgd3JhcHBlckNscywgbGFiZWxDbHMsIG1lc3NhZ2VDbHMsIHNpemUgPSAnbGFyZ2UnLCBzdWNjZXNzLCBpbnZhbGlkLCBkaXNhYmxlZCwgZWRpdGFibGUsIHBsYWNlaG9sZGVyID0gJycsIGNsYXNzTmFtZSA9ICcnLCBzZWxlY3RlZFRlbXBsYXRlLCB0YWlsVGVtcGxhdGUsIG9uQ2xpY2ssIG9uRm9jdXMsIG9uQmx1ciwgfSA9IHByb3BzO1xuICAgIGNvbnN0IGNsYXNzZXMgPSBjbGFzc25hbWVzKHByZWZpeENscyk7XG4gICAgY29uc3QgaXNDbGlja0luc2lkZSA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3QgZGF0YUlkUmVmID0gdXNlUmVmKGRhdGFJZCk7XG4gICAgY29uc3QgbGFzdEZvY3VzUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZSgnJyk7XG4gICAgY29uc3QgW2lzRm9jdXMsIHNldElzRm9jdXNdID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IHNlbGVjdENscyA9IHVzZU1lbW8oKCkgPT4gY2xhc3Nlcyh2b2lkIDAsIGpvaW5DbHMoY2xhc3NlcyhzaXplKSwgY2xhc3NlcygnY3VzdG9tJyksIGlzRm9jdXMgJiYgY2xhc3NlcygnZm9jdXMnKSwgc3VjY2VzcyAmJiBjbGFzc2VzKCdzdWNjZXNzJyksIGludmFsaWQgJiYgY2xhc3NlcygnaW52YWxpZCcpLCBkaXNhYmxlZCAmJiBjbGFzc2VzKCdkaXNhYmxlZCcpLCBlZGl0YWJsZSAmJiBjbGFzc2VzKCdlZGl0YWJsZScpLCBjbGFzc05hbWUpKSwgW3NpemUsIGlzRm9jdXMsIHN1Y2Nlc3MsIGludmFsaWQsIGRpc2FibGVkLCBlZGl0YWJsZSwgY2xhc3NOYW1lXSk7XG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICAgIGZvY3VzOiAoKSA9PiBzZXRJc0ZvY3VzKHRydWUpLFxuICAgICAgICBibHVyOiAoKSA9PiBzZXRJc0ZvY3VzKGZhbHNlKSxcbiAgICAgICAgZ2V0RE9NTm9kZTogKCkgPT4gc2VsZWN0UmVmLmN1cnJlbnRcbiAgICB9KSwgW3JlZl0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGRhdGFJZFJlZi5jdXJyZW50ID0gZGF0YUlkO1xuICAgIH0sIFtkYXRhSWRdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBpZiAoaXNGb2N1cyAhPT0gbGFzdEZvY3VzUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGxhc3RGb2N1c1JlZi5jdXJyZW50ID0gaXNGb2N1cztcbiAgICAgICAgICAgIGlmIChpc0ZvY3VzKSB7XG4gICAgICAgICAgICAgICAgb25Gb2N1cyA9PT0gbnVsbCB8fCBvbkZvY3VzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBvbkJsdXIgPT09IG51bGwgfHwgb25CbHVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtpc0ZvY3VzLCBvbkZvY3VzLCBvbkJsdXJdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaW5kQ3VzdG9tRHJvcGRvd25EYXRhSWQgPSAodGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoIWRhdGFJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICgoKF9hID0gdGFyZ2V0ID09PSBudWxsIHx8IHRhcmdldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGFyZ2V0LmRhdGFzZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZWxlY3RDdXN0b21Ecm9wZG93bklkKSA9PT0gZGF0YUlkUmVmLmN1cnJlbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBpZiAodGFyZ2V0ID09PSBkb2N1bWVudC5ib2R5IHx8IHRhcmdldCA9PT0gZG9jdW1lbnQpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gdGFyZ2V0LnBhcmVudE5vZGUgfHwgdGFyZ2V0LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoIXBhcmVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gZmluZEN1c3RvbURyb3Bkb3duRGF0YUlkKHBhcmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlbW92ZUZvY3VzID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0NsaWNrSW5zaWRlLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpc0NsaWNrSW5zaWRlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRJc0ZvY3VzKHByZXYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcHJldilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmaW5kQ3VzdG9tRHJvcGRvd25EYXRhSWQoZS50YXJnZXQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVtb3ZlRm9jdXMpO1xuICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVGb2N1cyk7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBfanN4KFNlbGVjdFdyYXBwZXIsIHsgbGFiZWw6IGxhYmVsLCBtZXNzYWdlOiBtZXNzYWdlLCByZXF1aXJlZDogcmVxdWlyZWQsIHByZWZpeENsczogcHJlZml4Q2xzLCB3cmFwcGVyQ2xzOiB3cmFwcGVyQ2xzLCBsYWJlbENsczogbGFiZWxDbHMsIG1lc3NhZ2VDbHM6IG1lc3NhZ2VDbHMsIHN1Y2Nlc3M6IHN1Y2Nlc3MsIGludmFsaWQ6IGludmFsaWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgY2hpbGRyZW46IF9qc3hzKFwiZGl2XCIsIHsgcmVmOiBzZWxlY3RSZWYsIGNsYXNzTmFtZTogc2VsZWN0Q2xzLCBjb250ZW50RWRpdGFibGU6ICFkaXNhYmxlZCA/IGVkaXRhYmxlIDogZmFsc2UsIGF1dG9Gb2N1czogZWRpdGFibGUsIFwiZGF0YS1wbGFjZWhvbGRlclwiOiBwbGFjZWhvbGRlciwgXCJkYXRhLXZhbHVlXCI6IHZhbHVlLCBvbkNsaWNrOiAoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkaXNhYmxlZClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICghZWRpdGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDbGlja0luc2lkZS5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SXNGb2N1cyhwcmV2ID0+ICFwcmV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb25DbGljayA9PT0gbnVsbCB8fCBvbkNsaWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNsaWNrKGUpO1xuICAgICAgICAgICAgfSwgb25JbnB1dDogZSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IGUuY3VycmVudFRhcmdldC5pbm5lclRleHQ7XG4gICAgICAgICAgICAgICAgaWYgKHZhbCA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGUuY3VycmVudFRhcmdldC5pbm5lclRleHQgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0VmFsdWUodmFsKTtcbiAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbIWRpc2FibGVkICYmIGVkaXRhYmxlXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiBzZWxlY3RlZFRlbXBsYXRlID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGVjdGVkVGVtcGxhdGUoaXNGb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2pzeChcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2N1c3RvbS1wbGFjZWhvbGRlcicpLCBjaGlsZHJlbjogcGxhY2Vob2xkZXIgfSksIGVkaXRhYmxlXG4gICAgICAgICAgICAgICAgICAgID8gbnVsbFxuICAgICAgICAgICAgICAgICAgICA6IHR5cGVvZiB0YWlsVGVtcGxhdGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGFpbFRlbXBsYXRlKGlzRm9jdXMpXG4gICAgICAgICAgICAgICAgICAgICAgICA6IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZXZyb25Eb3duJywgY29sb3I6ICcjMTMxMzEzJywgc2l6ZTogMjAsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ2N1c3RvbS10YWlsJywgaXNGb2N1cyA/IGNsYXNzZXMoJ2N1c3RvbS10YWlsLWZvY3VzJykgOiAnJykgfSldIH0pIH0pO1xufTtcbmV4cG9ydCBjb25zdCBTZWxlY3QgPSBwcm9wcyA9PiB7XG4gICAgdmFyIF9hO1xuICAgIGNvbnN0IHsgaWQsIHJlZiwgbmFtZSwgbGFiZWwsIG1lc3NhZ2UsIHJlcXVpcmVkLCBwcmVmaXhDbHMgPSAnc2VsZWN0Jywgd3JhcHBlckNscywgbGFiZWxDbHMsIG1lc3NhZ2VDbHMsIHZhbHVlLCBzaXplID0gJ2xhcmdlJywgc3VjY2VzcywgcmVmcmVzaEFmdGVyU2hvdyA9IHRydWUsIGludmFsaWQsIGRpc2FibGVkLCBwbGFjZWhvbGRlciwgY2xhc3NOYW1lID0gJycsIG11bHRpcGxlLCBvcHRpb25zLCBwYW5lbENsYXNzTmFtZSwgZGVmYXVsdFZhbHVlLCBpdGVtVGVtcGxhdGUsIG9uQ2hhbmdlLCBvbkhpZGUsIG9uU2hvdywgdW5zZWxlY3RhYmxlLCBsb2FkaW5nIH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiaWRcIiwgXCJyZWZcIiwgXCJuYW1lXCIsIFwibGFiZWxcIiwgXCJtZXNzYWdlXCIsIFwicmVxdWlyZWRcIiwgXCJwcmVmaXhDbHNcIiwgXCJ3cmFwcGVyQ2xzXCIsIFwibGFiZWxDbHNcIiwgXCJtZXNzYWdlQ2xzXCIsIFwidmFsdWVcIiwgXCJzaXplXCIsIFwic3VjY2Vzc1wiLCBcInJlZnJlc2hBZnRlclNob3dcIiwgXCJpbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJwbGFjZWhvbGRlclwiLCBcImNsYXNzTmFtZVwiLCBcIm11bHRpcGxlXCIsIFwib3B0aW9uc1wiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiaXRlbVRlbXBsYXRlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkhpZGVcIiwgXCJvblNob3dcIiwgXCJ1bnNlbGVjdGFibGVcIiwgXCJsb2FkaW5nXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gdXNlU3RhdGUoKF9hID0gdmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHZvaWQgMCA/IHZhbHVlIDogZGVmYXVsdFZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsKTtcbiAgICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc0hvdmVyLCBzZXRJc0hvdmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3QgX3JlZiA9IHVzZVJlZihudWxsKTtcbiAgICBjb25zdCBzZWxlY3RDbHMgPSB1c2VNZW1vKCgpID0+IGNsYXNzZXModm9pZCAwLCBqb2luQ2xzKGNsYXNzZXMoc2l6ZSksIGlzT3BlbiAmJiBjbGFzc2VzKCdzaG93JyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ2ludmFsaWQnKSwgZGlzYWJsZWQgJiYgY2xhc3NlcygnZGlzYWJsZWQnKSwgbG9hZGluZyAmJiBjbGFzc2VzKCdsb2FkaW5nJyksIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSA/ICEhc2VsZWN0ZWQubGVuZ3RoIDogISFzZWxlY3RlZCkgJiYgY2xhc3NlcygnZmlsbGVkJyksIGNsYXNzTmFtZSkpLCBbc2l6ZSwgaXNPcGVuLCBzdWNjZXNzLCBzZWxlY3RlZCwgaW52YWxpZCwgZGlzYWJsZWQsIGxvYWRpbmcsIGNsYXNzTmFtZV0pO1xuICAgIGNvbnN0IGRlYm91bmNlZEhhbmRsZVNjcm9sbCA9IGRlYm91bmNlKCgpID0+IHNldElzU2Nyb2xsaW5nKGZhbHNlKSwgNTAwKTtcbiAgICBjb25zdCByZWZyZXNoRE9NID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBlbGUgPSAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldE92ZXJsYXkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgaWYgKCFlbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG9yaWdpblpJbmRleCA9IGVsZS5zdHlsZS56SW5kZXg7XG4gICAgICAgIGlmIChvcmlnaW5aSW5kZXggIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBlbGUuc3R5bGUuekluZGV4ID0gYCR7cGFyc2VJbnQob3JpZ2luWkluZGV4KSArIDF9YDtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZS5zdHlsZS56SW5kZXggPSBvcmlnaW5aSW5kZXg7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICBjb25zdCBTZWxlY3RDb21wb25lbnQgPSB1c2VDYWxsYmFjaygocHJvcHMpID0+IG11bHRpcGxlXG4gICAgICAgID8gX2pzeChNdWx0aVNlbGVjdCwgT2JqZWN0LmFzc2lnbih7IHVuc2VsZWN0YWJsZTogdW5zZWxlY3RhYmxlLCBzaG93U2VsZWN0QWxsOiBmYWxzZSwgY2hlY2tib3hJY29uOiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGVjaycsIHNpemU6IDEyLCBjb2xvcjogJyNGRUZFRkUnIH0pLCByZW1vdmVJY29uOiBwcm9wcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBvbkNsaWNrLCBvbktleURvd24sIHRhYkluZGV4IH0gPSBwcm9wcy5pY29uUHJvcHM7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3goSWNvbnMsIHsgbmFtZTogJ2Nsb3NlJywgc2l6ZTogMTYsIGNvbG9yOiAnIzEzMTMxMycsIHRhYkluZGV4OiB0YWJJbmRleCwgd3JhcHBlckNsczogY2xhc3NlcygndG9rZW4tcmVtb3ZlLWljb24nKSwgb25DbGljazogb25DbGljaywgb25LZXlEb3duOiBvbktleURvd24gfSk7XG4gICAgICAgICAgICB9LCBwYW5lbEhlYWRlclRlbXBsYXRlOiBvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyRWxlbWVudCwgcHJvcHMgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTnVtID0gKF9kID0gKF9jID0gKF9iID0gKF9hID0gcHJvcHMgPT09IG51bGwgfHwgcHJvcHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByb3BzLm1ldGFEYXRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHJvcHMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi52YWx1ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmxlbmd0aCkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2pzeHMoXCJkaXZcIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlcicpLCBjaGlsZHJlbjogW19qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXItaW5mbycpLCBjaGlsZHJlbjogW19qc3hzKFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8tY291bnQnKSwgY2hpbGRyZW46IFtzZWxlY3RlZE51bSwgXCIgc2VsZWN0ZWRcIl0gfSksIF9qc3hzKFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8tY2xlYXInKSwgb25DbGljazogZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLnVwZGF0ZU1vZGVsKGUsIFtdLCBbXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBjaGlsZHJlbjogW19qc3goSWNvbnMsIHsgbmFtZTogJ2Nsb3NlJywgc2l6ZTogMTYsIGNvbG9yOiAnI0FFMDAwMCcsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNsZWFyLWljb24nKSB9KSwgXCJDbGVhciBhbGxcIl0gfSldIH0pLCAoX2UgPSBmaWx0ZXJFbGVtZW50ID09PSBudWxsIHx8IGZpbHRlckVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGZpbHRlckVsZW1lbnQucHJvcHMpID09PSBudWxsIHx8IF9lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZS5jaGlsZHJlbl0gfSk7XG4gICAgICAgICAgICB9IH0sIHByb3BzKSlcbiAgICAgICAgOiBfanN4KERyb3Bkb3duLCBPYmplY3QuYXNzaWduKHsgY29sbGFwc2VJY29uOiBtdWx0aXBsZSA/IHZvaWQgMCA6ICgpID0+IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZXZyb25VcCcsIGNvbG9yOiAnIzEzMTMxMycsIHNpemU6IDIwIH0pIH0sIHByb3BzKSksIFttdWx0aXBsZV0pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmICFpc0VxdWFsKHNlbGVjdGVkLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIHNldFNlbGVjdGVkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sIFt2YWx1ZV0pO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiAhPT0gbnVsbCAmJiByZWYgIT09IHZvaWQgMCA/IHJlZiA6IF9yZWYsICgpID0+IHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgcmV0dXJuIChtdWx0aXBsZSA/IHtcbiAgICAgICAgICAgIHByb3BzOiAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByb3BzLFxuICAgICAgICAgICAgZm9jdXM6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGhpZGU6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGlkZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgc2hvdzogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaG93KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRFbGVtZW50OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldElucHV0OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldElucHV0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRPdmVybGF5OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldE92ZXJsYXkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgfSA6IHtcbiAgICAgICAgICAgIHByb3BzOiAoX2IgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnByb3BzLFxuICAgICAgICAgICAgY2xlYXI6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2xlYXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGZvY3VzOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBoaWRlOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmhpZGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIHNob3c6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2hvdykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0RWxlbWVudDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRFbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRJbnB1dDogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRJbnB1dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0T3ZlcmxheTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRPdmVybGF5KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRGb2N1c0lucHV0OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEZvY3VzSW5wdXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldFZpcnR1YWxTY3JvbGxlcjogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRWaXJ0dWFsU2Nyb2xsZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgfSk7XG4gICAgfSwgW211bHRpcGxlXSk7XG4gICAgcmV0dXJuIChfanN4KFNlbGVjdFdyYXBwZXIsIHsgbGFiZWw6IGxhYmVsLCBtZXNzYWdlOiBtZXNzYWdlLCByZXF1aXJlZDogcmVxdWlyZWQsIHByZWZpeENsczogcHJlZml4Q2xzLCB3cmFwcGVyQ2xzOiB3cmFwcGVyQ2xzLCBsYWJlbENsczogbGFiZWxDbHMsIG1lc3NhZ2VDbHM6IG1lc3NhZ2VDbHMsIHN1Y2Nlc3M6IHN1Y2Nlc3MsIGludmFsaWQ6IGludmFsaWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgbG9hZGluZzogbG9hZGluZywgY2hpbGRyZW46IF9qc3goU2VsZWN0Q29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCAoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgX2EgPSByZXN0LCB7IGZpbHRlckljb24sIGZpbHRlciB9ID0gX2EsIG90aGVycyA9IF9fcmVzdChfYSwgW1wiZmlsdGVySWNvblwiLCBcImZpbHRlclwiXSk7XG4gICAgICAgICAgICBjb25zdCBleHRyYVByb3BzID0gZmlsdGVyID8geyBmaWx0ZXJJY29uOiBmaWx0ZXJJY29uICE9PSBudWxsICYmIGZpbHRlckljb24gIT09IHZvaWQgMCA/IGZpbHRlckljb24gOiBfanN4KEljb25zLCB7IG5hbWU6ICdzZWFyY2gnLCBzaXplOiAyMCwgY29sb3I6ICcjMTMxMzEzJywgd3JhcHBlckNsczogY2xhc3NlcygnZmlsdGVyLWljb24nKSB9KSB9IDogbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3RoZXJzKSwgeyBmaWx0ZXIgfSksIChleHRyYVByb3BzIHx8IHt9KSk7XG4gICAgICAgIH0pKCksIHsgaWQ6IGlkLCByZWY6IHNlbGVjdFJlZiwgbmFtZTogbmFtZSwgbG9hZGluZzogbG9hZGluZywgZmlsdGVyUGxhY2Vob2xkZXI6ICdTZWFyY2gnLCByZXF1aXJlZDogcmVxdWlyZWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgaW52YWxpZDogaW52YWxpZCwgb3B0aW9uczogb3B0aW9ucywgcGxhY2Vob2xkZXI6IHBsYWNlaG9sZGVyLCB2YWx1ZTogc2VsZWN0ZWQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHNlbGVjdGVkLCBjbGFzc05hbWU6IHNlbGVjdENscywgaXRlbVRlbXBsYXRlOiAob3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1pdGVtJyksIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXVsdGlwbGUgJiYgdW5zZWxlY3RhYmxlID09PSAnb24nICYmIG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaXRlbS1sYWJlbCcpLCBjaGlsZHJlbjogaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlKG9wdGlvbikgOiBvcHRpb24ubGFiZWwgfSksIF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZWNrJywgc2l6ZTogMTYsIGNvbG9yOiAnIzA3MzM4NycgfSldIH0pO1xuICAgICAgICAgICAgfSwgbG9hZGluZ0ljb246IF9qc3goU3Bpbm5lciwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ2xvYWRpbmctaWNvbicpLCBzdHJva2VXaWR0aDogJzQnIH0pLCBwYW5lbENsYXNzTmFtZTogY2xhc3NlcygncGFuZWwnLCBqb2luQ2xzKHBhbmVsQ2xhc3NOYW1lLCBpc0hvdmVyICYmIGNsYXNzZXMoJ3BhbmVsLWhvdmVyJyksIGlzU2Nyb2xsaW5nICYmIGNsYXNzZXMoJ3BhbmVsLXNjcm9sbGluZycpLCByZXN0LmFwcGVuZFRvID09PSAnc2VsZicgJiYgY2xhc3NlcygncGFuZWwtYXBwZW5kLXNlbGYnKSkpLCBvbkNoYW5nZTogKGUpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZChlLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgICAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKGUpO1xuICAgICAgICAgICAgfSwgb25IaWRlOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2V0SXNPcGVuKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBvbkhpZGUgPT09IG51bGwgfHwgb25IaWRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkhpZGUoKTtcbiAgICAgICAgICAgIH0sIG9uU2hvdzogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNldElzT3Blbih0cnVlKTtcbiAgICAgICAgICAgICAgICBvblNob3cgPT09IG51bGwgfHwgb25TaG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNob3coKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZnJlc2hBZnRlclNob3cpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlZnJlc2hET00oKSwgMCk7XG4gICAgICAgICAgICB9LCBkcm9wZG93bkljb246ICgpID0+IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZXZyb25Eb3duJywgY29sb3I6ICcjMTMxMzEzJywgc2l6ZTogMjAgfSksIHB0OiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlcjoge1xuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbDogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VkSGFuZGxlU2Nyb2xsLmNhbmNlbCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNTY3JvbGxpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZWRIYW5kbGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgcGFuZWw6IHtcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUVudGVyOiAoKSA9PiBzZXRJc0hvdmVyKHRydWUpLFxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU6ICgpID0+IHNldElzSG92ZXIoZmFsc2UpLFxuICAgICAgICAgICAgICAgICAgICBvblRvdWNoU3RhcnQ6ICgpID0+IHNldElzSG92ZXIodHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIG9uVG91Y2hFbmQ6ICgpID0+IHNldElzSG92ZXIoZmFsc2UpLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gfSkpIH0pKTtcbn07XG5TZWxlY3QuQ3VzdG9tRHJvcGRvd24gPSBDdXN0b21Ecm9wZG93bjtcbmV4cG9ydCBkZWZhdWx0IG1lbW8oU2VsZWN0KTsiLG51bGxdLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjIn0=
533
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5qcyIsImNvbXBvbmVudHMvc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giXSwibmFtZXMiOlsiX2pzeFJ1bnRpbWUiLCJyZXF1aXJlIiwiX3JlYWN0IiwiX2xvZGFzaCIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfZHJvcGRvd24iLCJfbXVsdGlzZWxlY3QiLCJfc2tlbGV0b24iLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX3VzZUNvbnRyb2xsZWRTdGF0ZTMiLCJfdXNlRXZlbnRDYWxsYmFjayIsIl9JY29ucyIsIl9TcGlubmVyIiwiX2NvbnN0YW50cyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9fcmVzdCIsInMiLCJwIiwicHJvdG90eXBlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsImxlbmd0aCIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiU2VsZWN0V3JhcHBlciIsIm1lbW8iLCJwcm9wcyIsImxhYmVsIiwibWVzc2FnZSIsInJlcXVpcmVkIiwicHJlZml4Q2xzIiwid3JhcHBlckNscyIsImxhYmVsQ2xzIiwibWVzc2FnZUNscyIsInN1Y2Nlc3MiLCJpbnZhbGlkIiwiZGlzYWJsZWQiLCJsb2FkaW5nIiwiY2hpbGRyZW4iLCJjbGFzc2VzIiwiY2xhc3NuYW1lcyIsIl9qc3hzIiwiY2xhc3NOYW1lIiwiX2pzeCIsIlNrZWxldG9uIiwid2lkdGgiLCJTS0VMRVRPTl9MQUJFTF9XSURUSCIsImhlaWdodCIsIlNLRUxFVE9OX0xBQkVMX0hFSUdIVCIsImpvaW5DbHMiLCJDdXN0b21Ecm9wZG93biIsInJlZiIsImRhdGFJZCIsIl9wcm9wcyRwcmVmaXhDbHMiLCJERUZBVUxUX1BSRUZJWF9DTFMiLCJfcHJvcHMkc2l6ZSIsInNpemUiLCJERUZBVUxUX1NJWkUiLCJlZGl0YWJsZSIsIl9wcm9wcyRwbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyIiwiREVGQVVMVF9QTEFDRUhPTERFUiIsIl9wcm9wcyRjbGFzc05hbWUiLCJERUZBVUxUX0NMQVNTTkFNRSIsInNlbGVjdGVkVGVtcGxhdGUiLCJ0YWlsVGVtcGxhdGUiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uQmx1ciIsImlzQ2xpY2tJbnNpZGUiLCJ1c2VSZWYiLCJkYXRhSWRSZWYiLCJsYXN0Rm9jdXNSZWYiLCJzZWxlY3RSZWYiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJ2YWx1ZSIsInNldFZhbHVlIiwiX3VzZVN0YXRlMyIsIl91c2VTdGF0ZTQiLCJpc0ZvY3VzIiwic2V0SXNGb2N1cyIsInNlbGVjdENscyIsInVzZU1lbW8iLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiZm9jdXMiLCJibHVyIiwiZ2V0RE9NTm9kZSIsImN1cnJlbnQiLCJ1c2VFZmZlY3QiLCJoYW5kbGVGb2N1cyIsInVzZUV2ZW50Q2FsbGJhY2siLCJoYW5kbGVCbHVyIiwicmVtb3ZlRm9jdXMiLCJwcmV2IiwiX2EiLCJ0YXJnZXQiLCJjbG9zZXN0IiwiY29uY2F0IiwiREFUQV9BVFRSX1NFTEVDVE9SIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbnRlbnRFZGl0YWJsZSIsImF1dG9Gb2N1cyIsIm9uSW5wdXQiLCJ2YWwiLCJjdXJyZW50VGFyZ2V0IiwiaW5uZXJUZXh0IiwiSWNvbnMiLCJuYW1lIiwiY29sb3IiLCJDT0xPUl9QUklNQVJZX0JMQUNLIiwiSUNPTl9TSVpFX01EIiwiU2VsZWN0IiwiZXhwb3J0cyIsImlkIiwiX3Byb3BzJHByZWZpeENsczIiLCJfcHJvcHMkc2l6ZTIiLCJfcHJvcHMkcmVmcmVzaEFmdGVyU2giLCJyZWZyZXNoQWZ0ZXJTaG93IiwiX3Byb3BzJGNsYXNzTmFtZTIiLCJtdWx0aXBsZSIsIm9wdGlvbnMiLCJwYW5lbENsYXNzTmFtZSIsImRlZmF1bHRWYWx1ZSIsIml0ZW1UZW1wbGF0ZSIsIm9uQ2hhbmdlIiwib25IaWRlIiwib25TaG93IiwidW5zZWxlY3RhYmxlIiwicmVzdCIsIl91c2VDb250cm9sbGVkU3RhdGUiLCJ1c2VDb250cm9sbGVkU3RhdGUiLCJfdXNlQ29udHJvbGxlZFN0YXRlMiIsInNlbGVjdGVkIiwic2V0U2VsZWN0ZWQiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImlzT3BlbiIsInNldElzT3BlbiIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwiaXNIb3ZlciIsInNldElzSG92ZXIiLCJfdXNlU3RhdGU5IiwiX3VzZVN0YXRlMTAiLCJpc1Njcm9sbGluZyIsInNldElzU2Nyb2xsaW5nIiwiQXJyYXkiLCJpc0FycmF5IiwiZGVib3VuY2VkSGFuZGxlU2Nyb2xsIiwiZGVib3VuY2UiLCJERUJPVU5DRV9TQ1JPTExfREVMQVkiLCJjYW5jZWwiLCJyZWZyZXNoRE9NIiwidXNlQ2FsbGJhY2siLCJfYiIsImVsZSIsImdldE92ZXJsYXkiLCJvcmlnaW5aSW5kZXgiLCJzdHlsZSIsInpJbmRleCIsInVuZGVmaW5lZCIsInBhcnNlSW50Iiwic2V0VGltZW91dCIsImZpbHRlckljb25Qcm9wcyIsImZpbHRlckljb24iLCJmaWx0ZXIiLCJvdGhlcnMiLCJleHRyYVByb3BzIiwiYXNzaWduIiwiU2VsZWN0Q29tcG9uZW50IiwiTXVsdGlTZWxlY3QiLCJzaG93U2VsZWN0QWxsIiwiY2hlY2tib3hJY29uIiwiSUNPTl9TSVpFX1hTIiwiQ09MT1JfV0hJVEUiLCJyZW1vdmVJY29uIiwiX3Byb3BzJGljb25Qcm9wcyIsImljb25Qcm9wcyIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSUNPTl9TSVpFX1NNIiwicGFuZWxIZWFkZXJUZW1wbGF0ZSIsIl9jIiwiX2QiLCJfZSIsImZpbHRlckVsZW1lbnQiLCJzZWxlY3RlZE51bSIsIm1ldGFEYXRhIiwidXBkYXRlTW9kZWwiLCJDT0xPUl9ORUdBVElWRSIsIkRyb3Bkb3duIiwiY29sbGFwc2VJY29uIiwiaGlkZSIsInNob3ciLCJnZXRFbGVtZW50IiwiZ2V0SW5wdXQiLCJjbGVhciIsImdldEZvY3VzSW5wdXQiLCJnZXRWaXJ0dWFsU2Nyb2xsZXIiLCJoYW5kbGVDaGFuZ2UiLCJlbWl0Q2hhbmdlIiwiaGFuZGxlSGlkZSIsImhhbmRsZVNob3ciLCJoYW5kbGVTY3JvbGwiLCJmaWx0ZXJQbGFjZWhvbGRlciIsIkZJTFRFUl9QTEFDRUhPTERFUiIsIm9wdGlvbiIsIlVOU0VMRUNUQUJMRV9PTiIsIkNPTE9SX1BSSU1BUllfQkxVRSIsImxvYWRpbmdJY29uIiwiU3Bpbm5lciIsInN0cm9rZVdpZHRoIiwiU1BJTk5FUl9TVFJPS0VfV0lEVEgiLCJhcHBlbmRUbyIsImRyb3Bkb3duSWNvbiIsInB0Iiwid3JhcHBlciIsIm9uU2Nyb2xsIiwicGFuZWwiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoRW5kIiwiX2RlZmF1bHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVdBLElBQUFBLFdBQUEsR0FBQUMsT0FBQTtBQ1hBLElBQUFDLE1BQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFNBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQU4sT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUMsdUJBQUEsQ0FBQVIsT0FBQTtBQUNBLElBQUFTLG9CQUFBLEdBQUFOLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBVSxpQkFBQSxHQUFBUCxzQkFBQSxDQUFBSCxPQUFB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LFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFBO1lBQUEsT0FBUS9FLFVBQVUsQ0FBQyxLQUFLLENBQUM7VUFBQTtVQUNyQ2dGLFlBQVksRUFBRSxTQUFkQSxZQUFZQSxDQUFBO1lBQUEsT0FBUWhGLFVBQVUsQ0FBQyxJQUFJLENBQUM7VUFBQTtVQUNwQ2lGLFVBQVUsRUFBRSxTQUFaQSxVQUFVQSxDQUFBO1lBQUEsT0FBUWpGLFVBQVUsQ0FBQyxLQUFLLENBQUM7VUFBQTtRRG5QL0I7TUFDSjtJQ29QSCxDQUFBLENBQUE7RUFDRCxDQUFBLENBQ1k7QUFFcEIsQ0FBQztBQUVEOUIsTUFBTSxDQUFDbEUsY0FBYyxHQUFHQSxjQUFjO0FBQUMsSUFBQWtMLFFBQUEsR0FBQS9HLE9BQUEsMkJBRXhCLElBQUE1RixXQUFJLEVBQUMyRixNQUFNLENBQUMiLCJmaWxlIjoiY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0LmpzIiwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuaW1wb3J0IHsganN4IGFzIF9qc3gsIGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IG1lbW8sIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2ssIHVzZUltcGVyYXRpdmVIYW5kbGUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnbG9kYXNoLmRlYm91bmNlJztcbmltcG9ydCB7IERyb3Bkb3duIH0gZnJvbSAncHJpbWVyZWFjdC9kcm9wZG93bic7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3ByaW1lcmVhY3QvbXVsdGlzZWxlY3QnO1xuaW1wb3J0IHsgU2tlbGV0b24gfSBmcm9tICdwcmltZXJlYWN0L3NrZWxldG9uJztcbmltcG9ydCB7IGRlZmF1bHQgYXMgY2xhc3NuYW1lcywgam9pbkNscyB9IGZyb20gJy4uLy4uL3V0aWxzL2NsYXNzbmFtZXMnO1xuaW1wb3J0IHVzZUNvbnRyb2xsZWRTdGF0ZSBmcm9tICcuLi91c2VDb250cm9sbGVkU3RhdGUnO1xuaW1wb3J0IHVzZUV2ZW50Q2FsbGJhY2sgZnJvbSAnLi4vdXNlRXZlbnRDYWxsYmFjayc7XG5pbXBvcnQgeyBJY29ucyB9IGZyb20gJy4uL0ljb25zJztcbmltcG9ydCB7IFNwaW5uZXIgfSBmcm9tICcuLi9TcGlubmVyJztcbmltcG9ydCB7IERFRkFVTFRfUFJFRklYX0NMUywgREVGQVVMVF9TSVpFLCBERUZBVUxUX1BMQUNFSE9MREVSLCBERUZBVUxUX0NMQVNTTkFNRSwgRklMVEVSX1BMQUNFSE9MREVSLCBERUJPVU5DRV9TQ1JPTExfREVMQVksIFNQSU5ORVJfU1RST0tFX1dJRFRILCBTS0VMRVRPTl9MQUJFTF9XSURUSCwgU0tFTEVUT05fTEFCRUxfSEVJR0hULCBVTlNFTEVDVEFCTEVfT04sIERBVEFfQVRUUl9TRUxFQ1RPUiwgQ09MT1JfUFJJTUFSWV9CTEFDSywgQ09MT1JfUFJJTUFSWV9CTFVFLCBDT0xPUl9ORUdBVElWRSwgQ09MT1JfV0hJVEUsIElDT05fU0laRV9YUywgSUNPTl9TSVpFX1NNLCBJQ09OX1NJWkVfTUQsIH0gZnJvbSAnLi9jb25zdGFudHMnO1xuY29uc3QgU2VsZWN0V3JhcHBlciA9IG1lbW8ocHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbGFiZWwsIG1lc3NhZ2UsIHJlcXVpcmVkLCBwcmVmaXhDbHMsIHdyYXBwZXJDbHMsIGxhYmVsQ2xzLCBtZXNzYWdlQ2xzLCBzdWNjZXNzLCBpbnZhbGlkLCBkaXNhYmxlZCwgbG9hZGluZywgY2hpbGRyZW4sIH0gPSBwcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3Nlcygnd3JhcHBlcicsIHdyYXBwZXJDbHMpLCBjaGlsZHJlbjogW2xhYmVsID9cbiAgICAgICAgICAgICAgICBsb2FkaW5nXG4gICAgICAgICAgICAgICAgICAgID8gX2pzeChTa2VsZXRvbiwgeyB3aWR0aDogU0tFTEVUT05fTEFCRUxfV0lEVEgsIGhlaWdodDogU0tFTEVUT05fTEFCRUxfSEVJR0hULCBjbGFzc05hbWU6IGNsYXNzZXMoJ2xhYmVsLWxvYWRpbmcnKSB9KVxuICAgICAgICAgICAgICAgICAgICA6IF9qc3goXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdsYWJlbCcsIGpvaW5DbHMocmVxdWlyZWQgJiYgY2xhc3NlcygnbGFiZWwtcmVxdWlyZWQnKSwgbGFiZWxDbHMpKSwgY2hpbGRyZW46IGxhYmVsIH0pXG4gICAgICAgICAgICAgICAgOiBudWxsLCBjaGlsZHJlbiwgbWVzc2FnZSAmJiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnbWVzc2FnZScsIGpvaW5DbHMoc3VjY2VzcyAmJiBjbGFzc2VzKCdtZXNzYWdlLXN1Y2Nlc3MnKSwgaW52YWxpZCAmJiBjbGFzc2VzKCdtZXNzYWdlLWVycm9yJyksIG1lc3NhZ2VDbHMpKSwgY2hpbGRyZW46IG1lc3NhZ2UgfSldIH0pO1xufSk7XG5jb25zdCBDdXN0b21Ecm9wZG93biA9IHByb3BzID0+IHtcbiAgICBjb25zdCB7IHJlZiwgZGF0YUlkLCBsYWJlbCwgbWVzc2FnZSwgcmVxdWlyZWQsIHByZWZpeENscyA9IERFRkFVTFRfUFJFRklYX0NMUywgd3JhcHBlckNscywgbGFiZWxDbHMsIG1lc3NhZ2VDbHMsIHNpemUgPSBERUZBVUxUX1NJWkUsIHN1Y2Nlc3MsIGludmFsaWQsIGRpc2FibGVkLCBlZGl0YWJsZSwgcGxhY2Vob2xkZXIgPSBERUZBVUxUX1BMQUNFSE9MREVSLCBjbGFzc05hbWUgPSBERUZBVUxUX0NMQVNTTkFNRSwgc2VsZWN0ZWRUZW1wbGF0ZSwgdGFpbFRlbXBsYXRlLCBvbkNsaWNrLCBvbkZvY3VzLCBvbkJsdXIsIH0gPSBwcm9wcztcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IGlzQ2xpY2tJbnNpZGUgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IGRhdGFJZFJlZiA9IHVzZVJlZihkYXRhSWQpO1xuICAgIGNvbnN0IGxhc3RGb2N1c1JlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc2VsZWN0UmVmID0gdXNlUmVmKG51bGwpO1xuICAgIGNvbnN0IFt2YWx1ZSwgc2V0VmFsdWVdID0gdXNlU3RhdGUoJycpO1xuICAgIGNvbnN0IFtpc0ZvY3VzLCBzZXRJc0ZvY3VzXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RDbHMgPSB1c2VNZW1vKCgpID0+IGNsYXNzZXModm9pZCAwLCBqb2luQ2xzKGNsYXNzZXMoc2l6ZSksIGNsYXNzZXMoJ2N1c3RvbScpLCBpc0ZvY3VzICYmIGNsYXNzZXMoJ2ZvY3VzJyksIHN1Y2Nlc3MgJiYgY2xhc3Nlcygnc3VjY2VzcycpLCBpbnZhbGlkICYmIGNsYXNzZXMoJ2ludmFsaWQnKSwgZGlzYWJsZWQgJiYgY2xhc3NlcygnZGlzYWJsZWQnKSwgZWRpdGFibGUgJiYgY2xhc3NlcygnZWRpdGFibGUnKSwgY2xhc3NOYW1lKSksIFtzaXplLCBpc0ZvY3VzLCBzdWNjZXNzLCBpbnZhbGlkLCBkaXNhYmxlZCwgZWRpdGFibGUsIGNsYXNzTmFtZV0pO1xuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgICBmb2N1czogKCkgPT4gc2V0SXNGb2N1cyh0cnVlKSxcbiAgICAgICAgYmx1cjogKCkgPT4gc2V0SXNGb2N1cyhmYWxzZSksXG4gICAgICAgIGdldERPTU5vZGU6ICgpID0+IHNlbGVjdFJlZi5jdXJyZW50XG4gICAgfSksIFtdKTtcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgICBkYXRhSWRSZWYuY3VycmVudCA9IGRhdGFJZDtcbiAgICB9LCBbZGF0YUlkXSk7XG4gICAgY29uc3QgaGFuZGxlRm9jdXMgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IG9uRm9jdXMgPT09IG51bGwgfHwgb25Gb2N1cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25Gb2N1cygpKTtcbiAgICBjb25zdCBoYW5kbGVCbHVyID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiBvbkJsdXIgPT09IG51bGwgfHwgb25CbHVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJsdXIoKSk7XG4gICAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICAgICAgaWYgKGlzRm9jdXMgIT09IGxhc3RGb2N1c1JlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBsYXN0Rm9jdXNSZWYuY3VycmVudCA9IGlzRm9jdXM7XG4gICAgICAgICAgICBpZiAoaXNGb2N1cykge1xuICAgICAgICAgICAgICAgIGhhbmRsZUZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVCbHVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBbaXNGb2N1c10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlbW92ZUZvY3VzID0gKGUpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0NsaWNrSW5zaWRlLmN1cnJlbnQpIHtcbiAgICAgICAgICAgICAgICBpc0NsaWNrSW5zaWRlLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZXRJc0ZvY3VzKHByZXYgPT4ge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBpZiAoIXByZXYpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFJZFJlZi5jdXJyZW50KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhKChfYSA9IHRhcmdldCA9PT0gbnVsbCB8fCB0YXJnZXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRhcmdldC5jbG9zZXN0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXJnZXQsIGBbJHtEQVRBX0FUVFJfU0VMRUNUT1J9PVwiJHtkYXRhSWRSZWYuY3VycmVudH1cIl1gKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW1vdmVGb2N1cyk7XG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbW92ZUZvY3VzKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIF9qc3goU2VsZWN0V3JhcHBlciwgeyBsYWJlbDogbGFiZWwsIG1lc3NhZ2U6IG1lc3NhZ2UsIHJlcXVpcmVkOiByZXF1aXJlZCwgcHJlZml4Q2xzOiBwcmVmaXhDbHMsIHdyYXBwZXJDbHM6IHdyYXBwZXJDbHMsIGxhYmVsQ2xzOiBsYWJlbENscywgbWVzc2FnZUNsczogbWVzc2FnZUNscywgc3VjY2Vzczogc3VjY2VzcywgaW52YWxpZDogaW52YWxpZCwgZGlzYWJsZWQ6IGRpc2FibGVkLCBjaGlsZHJlbjogX2pzeHMoXCJkaXZcIiwgeyByZWY6IHNlbGVjdFJlZiwgY2xhc3NOYW1lOiBzZWxlY3RDbHMsIGNvbnRlbnRFZGl0YWJsZTogIWRpc2FibGVkID8gZWRpdGFibGUgOiBmYWxzZSwgYXV0b0ZvY3VzOiBlZGl0YWJsZSwgXCJkYXRhLXBsYWNlaG9sZGVyXCI6IHBsYWNlaG9sZGVyLCBcImRhdGEtdmFsdWVcIjogdmFsdWUsIG9uQ2xpY2s6IChlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc2FibGVkKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBpc0NsaWNrSW5zaWRlLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBzZXRJc0ZvY3VzKHByZXYgPT4gIXByZXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrID09PSBudWxsIHx8IG9uQ2xpY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2xpY2soZSk7XG4gICAgICAgICAgICB9LCBvbklucHV0OiBlID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsID0gZS5jdXJyZW50VGFyZ2V0LmlubmVyVGV4dDtcbiAgICAgICAgICAgICAgICBpZiAodmFsID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAgICAgICB2YWwgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgZS5jdXJyZW50VGFyZ2V0LmlubmVyVGV4dCA9ICcnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZXRWYWx1ZSh2YWwpO1xuICAgICAgICAgICAgfSwgY2hpbGRyZW46IFshZGlzYWJsZWQgJiYgZWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIHNlbGVjdGVkVGVtcGxhdGUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZWN0ZWRUZW1wbGF0ZShpc0ZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfanN4KFwic3BhblwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygnY3VzdG9tLXBsYWNlaG9sZGVyJyksIGNoaWxkcmVuOiBwbGFjZWhvbGRlciB9KSwgZWRpdGFibGVcbiAgICAgICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIHRhaWxUZW1wbGF0ZSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyB0YWlsVGVtcGxhdGUoaXNGb2N1cylcbiAgICAgICAgICAgICAgICAgICAgICAgIDogX2pzeChJY29ucywgeyBuYW1lOiAnY2hldnJvbkRvd24nLCBjb2xvcjogQ09MT1JfUFJJTUFSWV9CTEFDSywgc2l6ZTogSUNPTl9TSVpFX01ELCB3cmFwcGVyQ2xzOiBjbGFzc2VzKCdjdXN0b20tdGFpbCcsIGlzRm9jdXMgPyBjbGFzc2VzKCdjdXN0b20tdGFpbC1mb2N1cycpIDogJycpIH0pXSB9KSB9KTtcbn07XG5leHBvcnQgY29uc3QgU2VsZWN0ID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgaWQsIHJlZiwgbmFtZSwgbGFiZWwsIG1lc3NhZ2UsIHJlcXVpcmVkLCBwcmVmaXhDbHMgPSBERUZBVUxUX1BSRUZJWF9DTFMsIHdyYXBwZXJDbHMsIGxhYmVsQ2xzLCBtZXNzYWdlQ2xzLCB2YWx1ZSwgc2l6ZSA9IERFRkFVTFRfU0laRSwgc3VjY2VzcywgcmVmcmVzaEFmdGVyU2hvdyA9IHRydWUsIGludmFsaWQsIGRpc2FibGVkLCBwbGFjZWhvbGRlciwgY2xhc3NOYW1lID0gREVGQVVMVF9DTEFTU05BTUUsIG11bHRpcGxlLCBvcHRpb25zLCBwYW5lbENsYXNzTmFtZSwgZGVmYXVsdFZhbHVlLCBpdGVtVGVtcGxhdGUsIG9uQ2hhbmdlLCBvbkhpZGUsIG9uU2hvdywgdW5zZWxlY3RhYmxlLCBsb2FkaW5nIH0gPSBwcm9wcywgcmVzdCA9IF9fcmVzdChwcm9wcywgW1wiaWRcIiwgXCJyZWZcIiwgXCJuYW1lXCIsIFwibGFiZWxcIiwgXCJtZXNzYWdlXCIsIFwicmVxdWlyZWRcIiwgXCJwcmVmaXhDbHNcIiwgXCJ3cmFwcGVyQ2xzXCIsIFwibGFiZWxDbHNcIiwgXCJtZXNzYWdlQ2xzXCIsIFwidmFsdWVcIiwgXCJzaXplXCIsIFwic3VjY2Vzc1wiLCBcInJlZnJlc2hBZnRlclNob3dcIiwgXCJpbnZhbGlkXCIsIFwiZGlzYWJsZWRcIiwgXCJwbGFjZWhvbGRlclwiLCBcImNsYXNzTmFtZVwiLCBcIm11bHRpcGxlXCIsIFwib3B0aW9uc1wiLCBcInBhbmVsQ2xhc3NOYW1lXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiaXRlbVRlbXBsYXRlXCIsIFwib25DaGFuZ2VcIiwgXCJvbkhpZGVcIiwgXCJvblNob3dcIiwgXCJ1bnNlbGVjdGFibGVcIiwgXCJsb2FkaW5nXCJdKTtcbiAgICBjb25zdCBjbGFzc2VzID0gY2xhc3NuYW1lcyhwcmVmaXhDbHMpO1xuICAgIGNvbnN0IFtzZWxlY3RlZCwgc2V0U2VsZWN0ZWRdID0gdXNlQ29udHJvbGxlZFN0YXRlKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCAmJiBkZWZhdWx0VmFsdWUgIT09IHZvaWQgMCA/IGRlZmF1bHRWYWx1ZSA6IG51bGwsIHZhbHVlKTtcbiAgICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICAgIGNvbnN0IFtpc0hvdmVyLCBzZXRJc0hvdmVyXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBbaXNTY3JvbGxpbmcsIHNldElzU2Nyb2xsaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgICBjb25zdCBzZWxlY3RSZWYgPSB1c2VSZWYobnVsbCk7XG4gICAgY29uc3Qgc2VsZWN0Q2xzID0gdXNlTWVtbygoKSA9PiBjbGFzc2VzKHZvaWQgMCwgam9pbkNscyhjbGFzc2VzKHNpemUpLCBpc09wZW4gJiYgY2xhc3Nlcygnc2hvdycpLCBzdWNjZXNzICYmIGNsYXNzZXMoJ3N1Y2Nlc3MnKSwgaW52YWxpZCAmJiBjbGFzc2VzKCdpbnZhbGlkJyksIGRpc2FibGVkICYmIGNsYXNzZXMoJ2Rpc2FibGVkJyksIGxvYWRpbmcgJiYgY2xhc3NlcygnbG9hZGluZycpLCAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyAhIXNlbGVjdGVkLmxlbmd0aCA6ICEhc2VsZWN0ZWQpICYmIGNsYXNzZXMoJ2ZpbGxlZCcpLCBjbGFzc05hbWUpKSwgW3NpemUsIGlzT3Blbiwgc3VjY2Vzcywgc2VsZWN0ZWQsIGludmFsaWQsIGRpc2FibGVkLCBsb2FkaW5nLCBjbGFzc05hbWVdKTtcbiAgICBjb25zdCBkZWJvdW5jZWRIYW5kbGVTY3JvbGwgPSB1c2VNZW1vKCgpID0+IGRlYm91bmNlKCgpID0+IHNldElzU2Nyb2xsaW5nKGZhbHNlKSwgREVCT1VOQ0VfU0NST0xMX0RFTEFZKSwgW10pO1xuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIHJldHVybiAoKSA9PiBkZWJvdW5jZWRIYW5kbGVTY3JvbGwuY2FuY2VsKCk7XG4gICAgfSwgW2RlYm91bmNlZEhhbmRsZVNjcm9sbF0pO1xuICAgIGNvbnN0IHJlZnJlc2hET00gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IGVsZSA9IChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3ZlcmxheSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICBpZiAoIWVsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgb3JpZ2luWkluZGV4ID0gZWxlLnN0eWxlLnpJbmRleDtcbiAgICAgICAgaWYgKG9yaWdpblpJbmRleCAhPSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGVsZS5zdHlsZS56SW5kZXggPSBgJHtwYXJzZUludChvcmlnaW5aSW5kZXgpICsgMX1gO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlLnN0eWxlLnpJbmRleCA9IG9yaWdpblpJbmRleDtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIGNvbnN0IGZpbHRlckljb25Qcm9wcyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgICBjb25zdCBfYSA9IHJlc3QsIHsgZmlsdGVySWNvbiwgZmlsdGVyIH0gPSBfYSwgb3RoZXJzID0gX19yZXN0KF9hLCBbXCJmaWx0ZXJJY29uXCIsIFwiZmlsdGVyXCJdKTtcbiAgICAgICAgY29uc3QgZXh0cmFQcm9wcyA9IGZpbHRlciA/IHsgZmlsdGVySWNvbjogZmlsdGVySWNvbiAhPT0gbnVsbCAmJiBmaWx0ZXJJY29uICE9PSB2b2lkIDAgPyBmaWx0ZXJJY29uIDogX2pzeChJY29ucywgeyBuYW1lOiAnc2VhcmNoJywgc2l6ZTogSUNPTl9TSVpFX01ELCBjb2xvcjogQ09MT1JfUFJJTUFSWV9CTEFDSywgd3JhcHBlckNsczogY2xhc3NlcygnZmlsdGVyLWljb24nKSB9KSB9IDogbnVsbDtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBvdGhlcnMpLCB7IGZpbHRlciB9KSwgKGV4dHJhUHJvcHMgfHwge30pKTtcbiAgICB9LCBbcmVzdC5maWx0ZXIsIHJlc3QuZmlsdGVySWNvbl0pO1xuICAgIGNvbnN0IFNlbGVjdENvbXBvbmVudCA9IHVzZUNhbGxiYWNrKChwcm9wcykgPT4gbXVsdGlwbGVcbiAgICAgICAgPyBfanN4KE11bHRpU2VsZWN0LCBPYmplY3QuYXNzaWduKHsgdW5zZWxlY3RhYmxlOiB1bnNlbGVjdGFibGUsIHNob3dTZWxlY3RBbGw6IGZhbHNlLCBjaGVja2JveEljb246IF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZWNrJywgc2l6ZTogSUNPTl9TSVpFX1hTLCBjb2xvcjogQ09MT1JfV0hJVEUgfSksIHJlbW92ZUljb246IHByb3BzID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IG9uQ2xpY2ssIG9uS2V5RG93biwgdGFiSW5kZXggfSA9IHByb3BzLmljb25Qcm9wcztcbiAgICAgICAgICAgICAgICByZXR1cm4gX2pzeChJY29ucywgeyBuYW1lOiAnY2xvc2UnLCBzaXplOiBJQ09OX1NJWkVfU00sIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMQUNLLCB0YWJJbmRleDogdGFiSW5kZXgsIHdyYXBwZXJDbHM6IGNsYXNzZXMoJ3Rva2VuLXJlbW92ZS1pY29uJyksIG9uQ2xpY2s6IG9uQ2xpY2ssIG9uS2V5RG93bjogb25LZXlEb3duIH0pO1xuICAgICAgICAgICAgfSwgcGFuZWxIZWFkZXJUZW1wbGF0ZTogb3B0aW9ucyA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kLCBfZTtcbiAgICAgICAgICAgICAgICBjb25zdCB7IGZpbHRlckVsZW1lbnQsIHByb3BzIH0gPSBvcHRpb25zO1xuICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZE51bSA9IChfZCA9IChfYyA9IChfYiA9IChfYSA9IHByb3BzID09PSBudWxsIHx8IHByb3BzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9wcy5tZXRhRGF0YSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnByb3BzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IudmFsdWUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5sZW5ndGgpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9qc3hzKFwiZGl2XCIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXInKSwgY2hpbGRyZW46IFtfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaGVhZGVyLWluZm8nKSwgY2hpbGRyZW46IFtfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNvdW50JyksIGNoaWxkcmVuOiBbc2VsZWN0ZWROdW0sIFwiIHNlbGVjdGVkXCJdIH0pLCBfanN4cyhcInNwYW5cIiwgeyBjbGFzc05hbWU6IGNsYXNzZXMoJ3BhbmVsLWhlYWRlci1pbmZvLWNsZWFyJyksIG9uQ2xpY2s6IGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy51cGRhdGVNb2RlbChlLCBbXSwgW10pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgY2hpbGRyZW46IFtfanN4KEljb25zLCB7IG5hbWU6ICdjbG9zZScsIHNpemU6IElDT05fU0laRV9TTSwgY29sb3I6IENPTE9SX05FR0FUSVZFLCB3cmFwcGVyQ2xzOiBjbGFzc2VzKCdwYW5lbC1oZWFkZXItaW5mby1jbGVhci1pY29uJykgfSksIFwiQ2xlYXIgYWxsXCJdIH0pXSB9KSwgKF9lID0gZmlsdGVyRWxlbWVudCA9PT0gbnVsbCB8fCBmaWx0ZXJFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmaWx0ZXJFbGVtZW50LnByb3BzKSA9PT0gbnVsbCB8fCBfZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2UuY2hpbGRyZW5dIH0pO1xuICAgICAgICAgICAgfSB9LCBwcm9wcykpXG4gICAgICAgIDogX2pzeChEcm9wZG93biwgT2JqZWN0LmFzc2lnbih7IGNvbGxhcHNlSWNvbjogbXVsdGlwbGUgPyB2b2lkIDAgOiAoKSA9PiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uVXAnLCBjb2xvcjogQ09MT1JfUFJJTUFSWV9CTEFDSywgc2l6ZTogSUNPTl9TSVpFX01EIH0pIH0sIHByb3BzKSksIFttdWx0aXBsZV0pO1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICByZXR1cm4gKG11bHRpcGxlID8ge1xuICAgICAgICAgICAgcHJvcHM6IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucHJvcHMsXG4gICAgICAgICAgICBmb2N1czogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgaGlkZTogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5oaWRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBzaG93OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNob3cpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldEVsZW1lbnQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0RWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0SW5wdXQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0SW5wdXQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldE92ZXJsYXk6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0T3ZlcmxheSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICB9IDoge1xuICAgICAgICAgICAgcHJvcHM6IChfYiA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHJvcHMsXG4gICAgICAgICAgICBjbGVhcjogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jbGVhcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZm9jdXM6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGhpZGU6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaGlkZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgc2hvdzogKCkgPT4geyB2YXIgX2EsIF9iOyByZXR1cm4gKF9iID0gKF9hID0gc2VsZWN0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zaG93KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRFbGVtZW50OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldEVsZW1lbnQpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldElucHV0OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldElucHV0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSk7IH0sXG4gICAgICAgICAgICBnZXRPdmVybGF5OiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldE92ZXJsYXkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTsgfSxcbiAgICAgICAgICAgIGdldEZvY3VzSW5wdXQ6ICgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHNlbGVjdFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0Rm9jdXNJbnB1dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICAgICAgZ2V0VmlydHVhbFNjcm9sbGVyOiAoKSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldFZpcnR1YWxTY3JvbGxlcikgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpOyB9LFxuICAgICAgICB9KTtcbiAgICB9LCBbbXVsdGlwbGVdKTtcbiAgICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VFdmVudENhbGxiYWNrKChlKSA9PiB7XG4gICAgICAgIGNvbnN0IGVtaXRDaGFuZ2UgPSBvbkNoYW5nZTtcbiAgICAgICAgc2V0U2VsZWN0ZWQoZS52YWx1ZSk7XG4gICAgICAgIGVtaXRDaGFuZ2UgPT09IG51bGwgfHwgZW1pdENoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZW1pdENoYW5nZShlKTtcbiAgICB9KTtcbiAgICBjb25zdCBoYW5kbGVIaWRlID0gdXNlRXZlbnRDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHNldElzT3BlbihmYWxzZSk7XG4gICAgICAgIG9uSGlkZSA9PT0gbnVsbCB8fCBvbkhpZGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uSGlkZSgpO1xuICAgIH0pO1xuICAgIGNvbnN0IGhhbmRsZVNob3cgPSB1c2VFdmVudENhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgc2V0SXNPcGVuKHRydWUpO1xuICAgICAgICBvblNob3cgPT09IG51bGwgfHwgb25TaG93ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblNob3coKTtcbiAgICAgICAgaWYgKCFyZWZyZXNoQWZ0ZXJTaG93KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHJlZnJlc2hET00oKSwgMCk7XG4gICAgfSk7XG4gICAgY29uc3QgaGFuZGxlU2Nyb2xsID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICBkZWJvdW5jZWRIYW5kbGVTY3JvbGwuY2FuY2VsKCk7XG4gICAgICAgIHNldElzU2Nyb2xsaW5nKHRydWUpO1xuICAgICAgICBkZWJvdW5jZWRIYW5kbGVTY3JvbGwoKTtcbiAgICB9LCBbZGVib3VuY2VkSGFuZGxlU2Nyb2xsXSk7XG4gICAgcmV0dXJuIChfanN4KFNlbGVjdFdyYXBwZXIsIHsgbGFiZWw6IGxhYmVsLCBtZXNzYWdlOiBtZXNzYWdlLCByZXF1aXJlZDogcmVxdWlyZWQsIHByZWZpeENsczogcHJlZml4Q2xzLCB3cmFwcGVyQ2xzOiB3cmFwcGVyQ2xzLCBsYWJlbENsczogbGFiZWxDbHMsIG1lc3NhZ2VDbHM6IG1lc3NhZ2VDbHMsIHN1Y2Nlc3M6IHN1Y2Nlc3MsIGludmFsaWQ6IGludmFsaWQsIGRpc2FibGVkOiBkaXNhYmxlZCwgbG9hZGluZzogbG9hZGluZywgY2hpbGRyZW46IF9qc3goU2VsZWN0Q29tcG9uZW50LCBPYmplY3QuYXNzaWduKHt9LCBmaWx0ZXJJY29uUHJvcHMsIHsgaWQ6IGlkLCByZWY6IHNlbGVjdFJlZiwgbmFtZTogbmFtZSwgbG9hZGluZzogbG9hZGluZywgZmlsdGVyUGxhY2Vob2xkZXI6IEZJTFRFUl9QTEFDRUhPTERFUiwgcmVxdWlyZWQ6IHJlcXVpcmVkLCBkaXNhYmxlZDogZGlzYWJsZWQsIGludmFsaWQ6IGludmFsaWQsIG9wdGlvbnM6IG9wdGlvbnMsIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlciwgdmFsdWU6IHNlbGVjdGVkID09IG51bGwgPyB1bmRlZmluZWQgOiBzZWxlY3RlZCwgY2xhc3NOYW1lOiBzZWxlY3RDbHMsIGl0ZW1UZW1wbGF0ZTogKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBfanN4cyhcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaXRlbScpLCBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW11bHRpcGxlICYmIHVuc2VsZWN0YWJsZSA9PT0gVU5TRUxFQ1RBQkxFX09OICYmIG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2EgPSBzZWxlY3RSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNoaWxkcmVuOiBbX2pzeChcImRpdlwiLCB7IGNsYXNzTmFtZTogY2xhc3NlcygncGFuZWwtaXRlbS1sYWJlbCcpLCBjaGlsZHJlbjogaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlKG9wdGlvbikgOiBvcHRpb24ubGFiZWwgfSksIF9qc3goSWNvbnMsIHsgbmFtZTogJ2NoZWNrJywgc2l6ZTogSUNPTl9TSVpFX1NNLCBjb2xvcjogQ09MT1JfUFJJTUFSWV9CTFVFIH0pXSB9KTtcbiAgICAgICAgICAgIH0sIGxvYWRpbmdJY29uOiBfanN4KFNwaW5uZXIsIHsgY2xhc3NOYW1lOiBjbGFzc2VzKCdsb2FkaW5nLWljb24nKSwgc3Ryb2tlV2lkdGg6IFNQSU5ORVJfU1RST0tFX1dJRFRIIH0pLCBwYW5lbENsYXNzTmFtZTogY2xhc3NlcygncGFuZWwnLCBqb2luQ2xzKHBhbmVsQ2xhc3NOYW1lLCBpc0hvdmVyICYmIGNsYXNzZXMoJ3BhbmVsLWhvdmVyJyksIGlzU2Nyb2xsaW5nICYmIGNsYXNzZXMoJ3BhbmVsLXNjcm9sbGluZycpLCByZXN0LmFwcGVuZFRvID09PSAnc2VsZicgJiYgY2xhc3NlcygncGFuZWwtYXBwZW5kLXNlbGYnKSkpLCBvbkNoYW5nZTogaGFuZGxlQ2hhbmdlLCBvbkhpZGU6IGhhbmRsZUhpZGUsIG9uU2hvdzogaGFuZGxlU2hvdywgZHJvcGRvd25JY29uOiAoKSA9PiBfanN4KEljb25zLCB7IG5hbWU6ICdjaGV2cm9uRG93bicsIGNvbG9yOiBDT0xPUl9QUklNQVJZX0JMQUNLLCBzaXplOiBJQ09OX1NJWkVfTUQgfSksIHB0OiB7XG4gICAgICAgICAgICAgICAgd3JhcHBlcjoge1xuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbDogaGFuZGxlU2Nyb2xsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwYW5lbDoge1xuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI6ICgpID0+IHNldElzSG92ZXIodHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZTogKCkgPT4gc2V0SXNIb3ZlcihmYWxzZSksXG4gICAgICAgICAgICAgICAgICAgIG9uVG91Y2hTdGFydDogKCkgPT4gc2V0SXNIb3Zlcih0cnVlKSxcbiAgICAgICAgICAgICAgICAgICAgb25Ub3VjaEVuZDogKCkgPT4gc2V0SXNIb3ZlcihmYWxzZSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB9KSkgfSkpO1xufTtcblNlbGVjdC5DdXN0b21Ecm9wZG93biA9IEN1c3RvbURyb3Bkb3duO1xuZXhwb3J0IGRlZmF1bHQgbWVtbyhTZWxlY3QpOyIsbnVsbF0sInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMifQ==