nsc-react-component 2.0.14 → 2.0.17

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 (235) hide show
  1. package/lib/{affix → base/affix}/index.d.ts +0 -0
  2. package/lib/{affix → base/affix}/index.js +1 -1
  3. package/lib/{alert → base/alert}/index.d.ts +0 -0
  4. package/lib/{alert → base/alert}/index.js +1 -1
  5. package/lib/{anchor → base/anchor}/index.d.ts +0 -0
  6. package/lib/{anchor → base/anchor}/index.js +1 -1
  7. package/lib/{avatar → base/avatar}/index.d.ts +0 -0
  8. package/lib/{avatar → base/avatar}/index.js +1 -1
  9. package/lib/{backTop → base/backTop}/index.d.ts +0 -0
  10. package/lib/{backTop → base/backTop}/index.js +1 -1
  11. package/lib/{badge → base/badge}/index.d.ts +0 -0
  12. package/lib/{badge → base/badge}/index.js +1 -1
  13. package/lib/{breadcrumb → base/breadcrumb}/index.d.ts +0 -0
  14. package/lib/{breadcrumb → base/breadcrumb}/index.js +1 -1
  15. package/lib/{button → base/button}/index.d.ts +0 -0
  16. package/lib/{button → base/button}/index.js +2 -2
  17. package/lib/{button → base/button}/index.less +0 -0
  18. package/lib/{calendar → base/calendar}/index.d.ts +0 -0
  19. package/lib/{calendar → base/calendar}/index.js +1 -1
  20. package/lib/{card → base/card}/index.d.ts +0 -0
  21. package/lib/{card → base/card}/index.js +1 -1
  22. package/lib/{carousel → base/carousel}/index.d.ts +0 -0
  23. package/lib/{carousel → base/carousel}/index.js +1 -1
  24. package/lib/{cascader → base/cascader}/index.d.ts +0 -0
  25. package/lib/base/cascader/index.js +268 -0
  26. package/lib/{chart → base/chart}/index.d.ts +0 -0
  27. package/lib/base/chart/index.js +353 -0
  28. package/lib/{checkbox → base/checkbox}/CheckboxGroup.d.ts +0 -0
  29. package/lib/base/checkbox/CheckboxGroup.js +340 -0
  30. package/lib/{checkbox → base/checkbox}/index.d.ts +0 -0
  31. package/lib/{checkbox → base/checkbox}/index.js +1 -1
  32. package/lib/{collapse → base/collapse}/index.d.ts +0 -0
  33. package/lib/{collapse → base/collapse}/index.js +1 -1
  34. package/lib/{comment → base/comment}/index.d.ts +0 -0
  35. package/lib/{comment → base/comment}/index.js +1 -1
  36. package/lib/{common → base/common}/BodyRow/index.d.ts +0 -0
  37. package/lib/{common → base/common}/BodyRow/index.js +1 -1
  38. package/lib/{common → base/common}/BodyRow/index.less +0 -0
  39. package/lib/{common → base/common}/Icon.d.ts +0 -0
  40. package/lib/{common → base/common}/Icon.js +1 -1
  41. package/lib/{common → base/common}/IconFont.d.ts +0 -0
  42. package/lib/base/common/IconFont.js +17 -0
  43. package/lib/{common → base/common}/NoAuthority.d.ts +0 -0
  44. package/lib/{common → base/common}/NoAuthority.js +1 -1
  45. package/lib/{common → base/common}/NoData.d.ts +0 -0
  46. package/lib/{common → base/common}/NoData.js +1 -1
  47. package/lib/{common → base/common}/NoData.less +0 -0
  48. package/lib/{common → base/common}/NoMessage.d.ts +0 -0
  49. package/lib/{common → base/common}/NoMessage.js +1 -1
  50. package/lib/{common → base/common}/NoNetWork.d.ts +0 -0
  51. package/lib/{common → base/common}/NoNetWork.js +1 -1
  52. package/lib/{common → base/common}/Page404.d.ts +0 -0
  53. package/lib/{common → base/common}/Page404.js +1 -1
  54. package/lib/{common → base/common}/PageRequest.d.ts +0 -0
  55. package/lib/{common → base/common}/PageRequest.js +1 -1
  56. package/lib/{common → base/common}/TreePanel.d.ts +2 -1
  57. package/lib/base/common/TreePanel.js +290 -0
  58. package/lib/{common → base/common}/img/NoAuthority.png +0 -0
  59. package/lib/{common → base/common}/img/NoData.png +0 -0
  60. package/lib/{common → base/common}/img/NoMessage.png +0 -0
  61. package/lib/{common → base/common}/img/NoNetWork.png +0 -0
  62. package/lib/{common → base/common}/img/Page404.png +0 -0
  63. package/lib/{common → base/common}/withZhLocale.d.ts +0 -0
  64. package/lib/base/common/withZhLocale.js +20 -0
  65. package/lib/{configProvider → base/configProvider}/index.d.ts +0 -0
  66. package/lib/{configProvider → base/configProvider}/index.js +1 -1
  67. package/lib/{datepick → base/datepick}/Rangepicker.d.ts +0 -0
  68. package/lib/base/datepick/Rangepicker.js +553 -0
  69. package/lib/{datepick → base/datepick}/index.d.ts +0 -0
  70. package/lib/{datepick → base/datepick}/index.js +1 -1
  71. package/lib/{datepick → base/datepick}/index.less +0 -0
  72. package/lib/{descriptions → base/descriptions}/index.d.ts +0 -0
  73. package/lib/{descriptions → base/descriptions}/index.js +1 -1
  74. package/lib/{divider → base/divider}/index.d.ts +0 -0
  75. package/lib/{divider → base/divider}/index.js +1 -1
  76. package/lib/{drawer → base/drawer}/index.d.ts +0 -0
  77. package/lib/{drawer → base/drawer}/index.js +1 -1
  78. package/lib/{dropdown → base/dropdown}/index.d.ts +0 -0
  79. package/lib/{dropdown → base/dropdown}/index.js +1 -1
  80. package/lib/{form → base/form}/Form.d.ts +0 -0
  81. package/lib/base/form/Form.js +415 -0
  82. package/lib/{form → base/form}/filed/Cascader.d.ts +0 -0
  83. package/lib/{form → base/form}/filed/Cascader.js +1 -1
  84. package/lib/{form → base/form}/filed/Checkbox.d.ts +0 -0
  85. package/lib/{form → base/form}/filed/Checkbox.js +1 -1
  86. package/lib/{form → base/form}/filed/DatePicker.d.ts +0 -0
  87. package/lib/{form → base/form}/filed/DatePicker.js +1 -1
  88. package/lib/{form → base/form}/filed/FormItem.d.ts +0 -0
  89. package/lib/{form → base/form}/filed/FormItem.js +1 -1
  90. package/lib/{form → base/form}/filed/Input.d.ts +0 -0
  91. package/lib/{form → base/form}/filed/Input.js +1 -1
  92. package/lib/{form → base/form}/filed/InputEamil.d.ts +0 -0
  93. package/lib/{form → base/form}/filed/InputEamil.js +1 -1
  94. package/lib/{form → base/form}/filed/InputNumber.d.ts +0 -0
  95. package/lib/{form → base/form}/filed/InputNumber.js +1 -1
  96. package/lib/{form → base/form}/filed/InputPassword.d.ts +0 -0
  97. package/lib/{form → base/form}/filed/InputPassword.js +1 -1
  98. package/lib/{form → base/form}/filed/Item.d.ts +0 -0
  99. package/lib/base/form/filed/Item.js +161 -0
  100. package/lib/{form → base/form}/filed/Radio.d.ts +0 -0
  101. package/lib/{form → base/form}/filed/Radio.js +1 -1
  102. package/lib/{form → base/form}/filed/RangerPicker.d.ts +0 -0
  103. package/lib/{form → base/form}/filed/RangerPicker.js +1 -1
  104. package/lib/{form → base/form}/filed/Rate.d.ts +0 -0
  105. package/lib/{form → base/form}/filed/Rate.js +1 -1
  106. package/lib/{form → base/form}/filed/Select.d.ts +0 -0
  107. package/lib/{form → base/form}/filed/Select.js +1 -1
  108. package/lib/{form → base/form}/filed/Slider.d.ts +0 -0
  109. package/lib/{form → base/form}/filed/Slider.js +1 -1
  110. package/lib/{form → base/form}/filed/Switch.d.ts +0 -0
  111. package/lib/{form → base/form}/filed/Switch.js +1 -1
  112. package/lib/{form → base/form}/filed/TagSelect.d.ts +0 -0
  113. package/lib/{form → base/form}/filed/TagSelect.js +1 -1
  114. package/lib/{form → base/form}/filed/TextArea.d.ts +0 -0
  115. package/lib/{form → base/form}/filed/TextArea.js +1 -1
  116. package/lib/{form → base/form}/filed/Upload.d.ts +0 -0
  117. package/lib/{form → base/form}/filed/Upload.js +1 -1
  118. package/lib/{form → base/form}/index.d.ts +0 -0
  119. package/lib/{form → base/form}/index.js +1 -1
  120. package/lib/{grid → base/grid}/Col.d.ts +0 -0
  121. package/lib/{grid → base/grid}/Col.js +1 -1
  122. package/lib/{grid → base/grid}/Row.d.ts +0 -0
  123. package/lib/{grid → base/grid}/Row.js +1 -1
  124. package/lib/{grid → base/grid}/index.d.ts +0 -0
  125. package/lib/{grid → base/grid}/index.js +0 -0
  126. package/lib/{image → base/image}/index.d.ts +0 -0
  127. package/lib/{image → base/image}/index.js +1 -1
  128. package/lib/{input → base/input}/Email.d.ts +0 -0
  129. package/lib/{input → base/input}/Email.js +1 -1
  130. package/lib/{input → base/input}/Number.d.ts +0 -0
  131. package/lib/{input → base/input}/Number.js +1 -1
  132. package/lib/{input → base/input}/Password.d.ts +0 -3
  133. package/lib/{input → base/input}/Password.js +1 -1
  134. package/lib/{input → base/input}/Search.d.ts +0 -3
  135. package/lib/{input → base/input}/Search.js +1 -1
  136. package/lib/{input → base/input}/TextArea.d.ts +0 -3
  137. package/lib/{input → base/input}/TextArea.js +1 -1
  138. package/lib/{input → base/input}/index.d.ts +0 -0
  139. package/lib/base/input/index.js +242 -0
  140. package/lib/{input → base/input}/index.less +0 -0
  141. package/lib/{layout → base/layout}/index.d.ts +0 -0
  142. package/lib/{layout → base/layout}/index.js +1 -1
  143. package/lib/{list → base/list}/index.d.ts +0 -0
  144. package/lib/{list → base/list}/index.js +1 -1
  145. package/lib/{menu → base/menu}/index.d.ts +0 -0
  146. package/lib/base/menu/index.js +247 -0
  147. package/lib/{message → base/message}/index.d.ts +0 -0
  148. package/lib/{message → base/message}/index.js +1 -1
  149. package/lib/{modal → base/modal}/index.d.ts +0 -0
  150. package/lib/{modal → base/modal}/index.js +1 -1
  151. package/lib/{notification → base/notification}/index.d.ts +0 -0
  152. package/lib/{notification → base/notification}/index.js +1 -1
  153. package/lib/{pageHeader → base/pageHeader}/index.d.ts +0 -0
  154. package/lib/{pageHeader → base/pageHeader}/index.js +1 -1
  155. package/lib/{pagination → base/pagination}/index.d.ts +0 -0
  156. package/lib/{pagination → base/pagination}/index.js +1 -1
  157. package/lib/{popconfirm → base/popconfirm}/index.d.ts +0 -0
  158. package/lib/{popconfirm → base/popconfirm}/index.js +1 -1
  159. package/lib/{popover → base/popover}/index.d.ts +0 -0
  160. package/lib/{popover → base/popover}/index.js +1 -1
  161. package/lib/{progress → base/progress}/index.d.ts +0 -0
  162. package/lib/{progress → base/progress}/index.js +1 -1
  163. package/lib/{radio → base/radio}/RadioGroup.d.ts +0 -0
  164. package/lib/base/radio/RadioGroup.js +378 -0
  165. package/lib/{radio → base/radio}/index.d.ts +0 -0
  166. package/lib/{radio → base/radio}/index.js +1 -1
  167. package/lib/{result → base/result}/index.d.ts +0 -0
  168. package/lib/{result → base/result}/index.js +1 -1
  169. package/lib/{select → base/select}/index.d.ts +0 -0
  170. package/lib/base/select/index.js +529 -0
  171. package/lib/{select → base/select}/index.less +0 -0
  172. package/lib/{skeleton → base/skeleton}/index.d.ts +0 -0
  173. package/lib/{skeleton → base/skeleton}/index.js +1 -1
  174. package/lib/{space → base/space}/index.d.ts +0 -0
  175. package/lib/{space → base/space}/index.js +1 -1
  176. package/lib/{spin → base/spin}/index.d.ts +0 -0
  177. package/lib/{spin → base/spin}/index.js +1 -1
  178. package/lib/{statistic → base/statistic}/index.d.ts +0 -0
  179. package/lib/{statistic → base/statistic}/index.js +1 -1
  180. package/lib/{steps → base/steps}/index.d.ts +0 -0
  181. package/lib/{steps → base/steps}/index.js +1 -1
  182. package/lib/{table → base/table}/index.d.ts +10 -2
  183. package/lib/base/table/index.js +902 -0
  184. package/lib/{table → base/table}/index.module.less +22 -0
  185. package/lib/{table → base/table}/resize.module.less +0 -0
  186. package/lib/{tabs → base/tabs}/Tabpane.d.ts +0 -0
  187. package/lib/{tabs → base/tabs}/Tabpane.js +1 -1
  188. package/lib/{tabs → base/tabs}/index.d.ts +0 -0
  189. package/lib/{tabs → base/tabs}/index.js +1 -1
  190. package/lib/{tagSelect → base/tagSelect}/TagSelect.d.ts +0 -0
  191. package/lib/base/tagSelect/TagSelect.js +268 -0
  192. package/lib/{tagSelect → base/tagSelect}/index.d.ts +0 -0
  193. package/lib/base/tagSelect/index.js +188 -0
  194. package/lib/{tagSelect → base/tagSelect}/index.less +0 -0
  195. package/lib/{timeline → base/timeline}/index.d.ts +0 -0
  196. package/lib/{timeline → base/timeline}/index.js +1 -1
  197. package/lib/{tooltip → base/tooltip}/index.d.ts +0 -0
  198. package/lib/{tooltip → base/tooltip}/index.js +1 -1
  199. package/lib/{tree → base/tree}/TreeSearch.d.ts +0 -0
  200. package/lib/base/tree/TreeSearch.js +273 -0
  201. package/lib/{tree → base/tree}/index.d.ts +0 -0
  202. package/lib/base/tree/index.js +307 -0
  203. package/lib/{tree → base/tree}/index.less +0 -0
  204. package/lib/{typography → base/typography}/index.d.ts +0 -0
  205. package/lib/{typography → base/typography}/index.js +1 -1
  206. package/lib/index.d.ts +63 -63
  207. package/lib/index.js +63 -63
  208. package/lib/{pageComponents → page}/BasePage/Form.d.ts +0 -0
  209. package/lib/page/BasePage/Form.js +244 -0
  210. package/lib/{pageComponents → page}/BasePage/index.d.ts +2 -3
  211. package/lib/page/BasePage/index.js +636 -0
  212. package/lib/{pageComponents → page}/BasePage/index.module.less +0 -0
  213. package/lib/utils.d.ts +1 -0
  214. package/lib/utils.js +16 -9
  215. package/package.json +1 -1
  216. package/lib/cascader/index.js +0 -268
  217. package/lib/chart/index.js +0 -353
  218. package/lib/checkbox/CheckboxGroup.js +0 -338
  219. package/lib/common/IconFont.js +0 -17
  220. package/lib/common/TreePanel.js +0 -303
  221. package/lib/common/withZhLocale.js +0 -20
  222. package/lib/datepick/Rangepicker.js +0 -553
  223. package/lib/form/Form.js +0 -415
  224. package/lib/form/filed/Item.js +0 -161
  225. package/lib/input/index.js +0 -242
  226. package/lib/menu/index.js +0 -247
  227. package/lib/pageComponents/BasePage/Form.js +0 -244
  228. package/lib/pageComponents/BasePage/index.js +0 -626
  229. package/lib/radio/RadioGroup.js +0 -376
  230. package/lib/select/index.js +0 -524
  231. package/lib/table/index.js +0 -756
  232. package/lib/tagSelect/TagSelect.js +0 -268
  233. package/lib/tagSelect/index.js +0 -190
  234. package/lib/tree/TreeSearch.js +0 -274
  235. package/lib/tree/index.js +0 -293
@@ -1,626 +0,0 @@
1
- function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
2
-
3
- var _excluded = ["children", "pageType", "onClick"],
4
- _excluded2 = ["children", "pageType", "onClick", "Icon"];
5
-
6
- function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
7
-
8
- function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
9
-
10
- function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
11
-
12
- function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
13
-
14
- function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
15
-
16
- function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
17
-
18
- function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
19
-
20
- function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
21
-
22
- function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
23
-
24
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
25
-
26
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
27
-
28
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
29
-
30
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
31
-
32
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
33
-
34
- function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
35
-
36
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
37
-
38
- function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
39
-
40
- function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
41
-
42
- function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
43
-
44
- function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
45
-
46
- function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
47
-
48
- function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
49
-
50
- import React, { PureComponent } from "react";
51
- import Table from "../../table";
52
- import Tree from "../../tree";
53
- import Form from "../../form";
54
- import Button from "../../button";
55
- import Modal from "../../modal";
56
- import Popover from "../../popover";
57
- import message from "../../message";
58
- import Icon from "../../common/IconFont";
59
- import { iconType } from "../../constants";
60
- import EditorForm from "./Form";
61
- import cls from "classnames";
62
- import styles from "./index.module.less";
63
- import { DownOutlined, UpOutlined } from "@ant-design/icons";
64
- import { getNode } from "../../utils";
65
- import request from "nsc-request";
66
-
67
- var BasePage = /*#__PURE__*/function (_PureComponent) {
68
- _inherits(BasePage, _PureComponent);
69
-
70
- var _super = _createSuper(BasePage);
71
-
72
- function BasePage(props) {
73
- var _this;
74
-
75
- _classCallCheck(this, BasePage);
76
-
77
- _this = _super.call(this, props);
78
-
79
- _defineProperty(_assertThisInitialized(_this), "tableRef", /*#__PURE__*/React.createRef());
80
-
81
- _defineProperty(_assertThisInitialized(_this), "treeRef", /*#__PURE__*/React.createRef());
82
-
83
- _defineProperty(_assertThisInitialized(_this), "searchRef", /*#__PURE__*/React.createRef());
84
-
85
- _defineProperty(_assertThisInitialized(_this), "editorRef", /*#__PURE__*/React.createRef());
86
-
87
- _defineProperty(_assertThisInitialized(_this), "onSelect", function (checkedTreeKeys) {
88
- var _this$state = _this.state,
89
- name = _this$state.name,
90
- userType = _this$state.userType,
91
- account = _this$state.account;
92
- var value = {
93
- name: name,
94
- userType: userType,
95
- account: account,
96
- deptId: checkedTreeKeys[0]
97
- };
98
-
99
- _this.tableLoad(value);
100
- });
101
-
102
- _this.state = {
103
- type: "add",
104
- selectedRowKeys: [],
105
- treeSelectedKey: "",
106
- expand: false
107
- };
108
- return _this;
109
- }
110
-
111
- _createClass(BasePage, [{
112
- key: "componentDidMount",
113
- value: function componentDidMount() {
114
- var initData = this.props.initData;
115
- initData && initData();
116
- }
117
- }, {
118
- key: "showForm",
119
- value: //显示表单
120
- function showForm(value) {
121
- var _this$editorRef$curre;
122
-
123
- var flag = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
124
- (_this$editorRef$curre = this.editorRef.current) === null || _this$editorRef$curre === void 0 ? void 0 : _this$editorRef$curre.show(value, flag);
125
- } //批量删除
126
-
127
- }, {
128
- key: "onDelete",
129
- value: function onDelete() {
130
- var _this$props = this.props,
131
- deleteUrl = _this$props.deleteUrl,
132
- onDelete = _this$props.onDelete,
133
- deleteParams = _this$props.deleteParams;
134
- var selectedRowKeys = this.state.selectedRowKeys;
135
-
136
- if (selectedRowKeys.length == 0) {
137
- message.warning("请选择要删除的数据!");
138
- return;
139
- }
140
-
141
- if (onDelete) {
142
- onDelete && onDelete(selectedRowKeys);
143
- return;
144
- }
145
-
146
- if (!deleteUrl) {
147
- throw new Error("url不能为空!");
148
- }
149
-
150
- Modal.confirm({
151
- title: "是否确认删除所选项?",
152
- // icon: <Icon type={'icontishi-3'} />,
153
- okText: "确认",
154
- cancelText: "取消",
155
- onOk: function onOk() {
156
- var defaultParams = {
157
- method: "post",
158
- params: {
159
- ids: selectedRowKeys.join()
160
- }
161
- };
162
- var requestParams = {};
163
-
164
- if (defaultParams) {
165
- requestParams = _objectSpread({}, deleteParams);
166
- }
167
-
168
- requestParams = _objectSpread({}, defaultParams);
169
- request(deleteUrl, _objectSpread({}, requestParams)).then(function (res) {
170
- var code = res.code;
171
-
172
- if (code === 200) {
173
- message.success("删除成功!");
174
- } else {
175
- message.error("删除失败!");
176
- }
177
- }).catch(function (error) {
178
- console.log("error", error);
179
- });
180
- }
181
- });
182
- }
183
- }, {
184
- key: "tableLoad",
185
- value: function tableLoad(params) {
186
- var _this$tableRef$curren;
187
-
188
- (_this$tableRef$curren = this.tableRef.current) === null || _this$tableRef$curren === void 0 ? void 0 : _this$tableRef$curren.store.load({
189
- params: params
190
- });
191
- } //查询
192
-
193
- }, {
194
- key: "onSearch",
195
- value: function onSearch() {
196
- var _this$searchRef$curre;
197
-
198
- var onSearch = this.props.onSearch;
199
- var fromValue = (_this$searchRef$curre = this.searchRef.current) === null || _this$searchRef$curre === void 0 ? void 0 : _this$searchRef$curre.getFieldsValue();
200
-
201
- if (onSearch) {
202
- onSearch(fromValue);
203
- return;
204
- }
205
-
206
- this.load(fromValue);
207
- } //表格重新加载
208
-
209
- }, {
210
- key: "tableReload",
211
- value: function tableReload() {
212
- var _this$tableRef$curren2;
213
-
214
- (_this$tableRef$curren2 = this.tableRef.current) === null || _this$tableRef$curren2 === void 0 ? void 0 : _this$tableRef$curren2.store.reload();
215
- }
216
- }, {
217
- key: "getSelectedRowKeys",
218
- value: function getSelectedRowKeys() {
219
- return this.state.selectedRowKeys;
220
- }
221
- }, {
222
- key: "getSearchValues",
223
- value: function getSearchValues() {
224
- var _this$searchRef$curre2;
225
-
226
- var fromValue = (_this$searchRef$curre2 = this.searchRef.current) === null || _this$searchRef$curre2 === void 0 ? void 0 : _this$searchRef$curre2.getFieldsValue();
227
- return fromValue;
228
- }
229
- }, {
230
- key: "rowSelectionOnSelect",
231
- value: function rowSelectionOnSelect(record, selected) {
232
- var selectedRowKeys = this.state.selectedRowKeys;
233
-
234
- var newSelectedRowKeys = _toConsumableArray(selectedRowKeys);
235
-
236
- if (selected) {
237
- newSelectedRowKeys = [].concat(_toConsumableArray(newSelectedRowKeys), [record.id]);
238
- } else {
239
- selectedRowKeys.map(function (item, index) {
240
- if (item === record.id) {
241
- newSelectedRowKeys.splice(index, 1);
242
- }
243
- });
244
- }
245
-
246
- this.setState({
247
- selectedRowKeys: newSelectedRowKeys
248
- });
249
- }
250
- }, {
251
- key: "rowSelectionOnSelectAll",
252
- value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
253
- var selectedRowKeys = this.state.selectedRowKeys;
254
- var newids = [];
255
-
256
- if (changeRows.length > 0) {
257
- var changeIds = changeRows.map(function (item) {
258
- return item.id;
259
- });
260
-
261
- if (selected) {
262
- newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
263
- } else {
264
- selectedRowKeys.map(function (item, index) {
265
- if (changeIds.indexOf(item) == -1) {
266
- newids.push(item);
267
- }
268
- });
269
- }
270
- } else {
271
- newids = _toConsumableArray(selectedRowKeys);
272
- }
273
-
274
- this.setState({
275
- selectedRowKeys: _toConsumableArray(newids)
276
- });
277
- }
278
- }, {
279
- key: "load",
280
- value: function load(params) {
281
- var _this$tableRef$curren3;
282
-
283
- (_this$tableRef$curren3 = this.tableRef.current) === null || _this$tableRef$curren3 === void 0 ? void 0 : _this$tableRef$curren3.store.load({
284
- params: params
285
- });
286
- }
287
- }, {
288
- key: "renderCloumnButton",
289
- value: function renderCloumnButton(columnButtons, record, actionButton) {
290
- var _this$props$editorFor = this.props.editorForm,
291
- editorForm = _this$props$editorFor === void 0 ? true : _this$props$editorFor;
292
- var content = columnButtons.map(function (item, index) {
293
- var _item$props = item.props,
294
- children = _item$props.children,
295
- pageType = _item$props.pageType,
296
- _onClick = _item$props.onClick,
297
- params = _objectWithoutProperties(_item$props, _excluded);
298
-
299
- return /*#__PURE__*/React.createElement("div", _extends({
300
- className: cls(styles["editor"], styles["content-item"]),
301
- key: index,
302
- onClick: function onClick() {
303
- _onClick && _onClick(record);
304
- }
305
- }, params), children);
306
- });
307
- var num = 1;
308
- if (!actionButton || !editorForm) num = 3;
309
-
310
- if (columnButtons.length > num) {
311
- return /*#__PURE__*/React.createElement(Popover, {
312
- placement: "bottom",
313
- title: null,
314
- content: content,
315
- trigger: "click" // overlayClassName={styles['pop']}
316
-
317
- }, /*#__PURE__*/React.createElement("div", {
318
- className: styles["editor"]
319
- }, "\u66F4\u591A", /*#__PURE__*/React.createElement("span", {
320
- className: styles["icon"]
321
- }, /*#__PURE__*/React.createElement(DownOutlined, null))));
322
- } else {
323
- return columnButtons.map(function (item, index) {
324
- var _item$props2 = item.props,
325
- children = _item$props2.children,
326
- pageType = _item$props2.pageType,
327
- _onClick2 = _item$props2.onClick,
328
- Icon = _item$props2.Icon,
329
- params = _objectWithoutProperties(_item$props2, _excluded2);
330
-
331
- return /*#__PURE__*/React.createElement("div", _extends({
332
- className: styles["editor"],
333
- key: index,
334
- onClick: function onClick() {
335
- _onClick2 && _onClick2(record);
336
- }
337
- }, params), Icon, " ", children);
338
- });
339
- }
340
- } //树点击事件
341
-
342
- }, {
343
- key: "treeSelect",
344
- value: function treeSelect(selectedKeys, _ref) {
345
- var _this$searchRef$curre3;
346
-
347
- var selected = _ref.selected,
348
- selectedNodes = _ref.selectedNodes;
349
- var keyword = "";
350
- var _this$props$treeProps = this.props.treeProps,
351
- _this$props$treeProps2 = _this$props$treeProps.searchKey,
352
- searchKey = _this$props$treeProps2 === void 0 ? "key" : _this$props$treeProps2,
353
- _this$props$treeProps3 = _this$props$treeProps.searchField,
354
- searchField = _this$props$treeProps3 === void 0 ? "" : _this$props$treeProps3;
355
- var treeSelectedKey = this.state.treeSelectedKey;
356
-
357
- if (selected) {
358
- if (selectedNodes[0].isLeaf || !selectedNodes[0].children) {
359
- if (selectedKeys[0] !== treeSelectedKey) {
360
- // let mapData = this.treeRef.current?.store.getFlattenData();
361
- keyword = selectedNodes[0].dataref.attribute[searchKey];
362
- this.setState({
363
- treeSelectedKey: selectedKeys[0]
364
- });
365
- }
366
- }
367
- } else {
368
- this.setState({
369
- treeSelectedKey: keyword
370
- });
371
- }
372
-
373
- var fromValue = (_this$searchRef$curre3 = this.searchRef.current) === null || _this$searchRef$curre3 === void 0 ? void 0 : _this$searchRef$curre3.getFieldsValue();
374
- searchField && this.load(_objectSpread(_objectSpread({}, fromValue), {}, _defineProperty({}, searchField, keyword)));
375
- }
376
- }, {
377
- key: "render",
378
- value: function render() {
379
- var _this2 = this;
380
-
381
- console.log("styles", styles);
382
- var selectedRowKeys = this.state.selectedRowKeys;
383
- var _this$props2 = this.props,
384
- _this$props2$columns = _this$props2.columns,
385
- columns = _this$props2$columns === void 0 ? [] : _this$props2$columns,
386
- _this$props2$showSear = _this$props2.showSearch,
387
- showSearch = _this$props2$showSear === void 0 ? true : _this$props2$showSear,
388
- children = _this$props2.children,
389
- _this$props2$submitUr = _this$props2.submitUrl,
390
- submitUrl = _this$props2$submitUr === void 0 ? "" : _this$props2$submitUr,
391
- _this$props2$tablePro = _this$props2.tableProps,
392
- tableProps = _this$props2$tablePro === void 0 ? {} : _this$props2$tablePro,
393
- _this$props2$treeProp = _this$props2.treeProps,
394
- treeProps = _this$props2$treeProp === void 0 ? {} : _this$props2$treeProp,
395
- _this$props2$showLeft = _this$props2.showLeft,
396
- showLeft = _this$props2$showLeft === void 0 ? false : _this$props2$showLeft,
397
- _this$props2$submitPa = _this$props2.submitParams,
398
- submitParams = _this$props2$submitPa === void 0 ? {} : _this$props2$submitPa,
399
- _this$props2$showTool = _this$props2.showToolButton,
400
- showToolButton = _this$props2$showTool === void 0 ? true : _this$props2$showTool,
401
- _this$props2$showAddB = _this$props2.showAddButton,
402
- showAddButton = _this$props2$showAddB === void 0 ? true : _this$props2$showAddB,
403
- _this$props2$showDele = _this$props2.showDeleteButton,
404
- showDeleteButton = _this$props2$showDele === void 0 ? true : _this$props2$showDele,
405
- _this$props2$editorFo = _this$props2.editorForm,
406
- editorForm = _this$props2$editorFo === void 0 ? true : _this$props2$editorFo;
407
- var _tableProps$store = tableProps.store,
408
- store = _tableProps$store === void 0 ? {} : _tableProps$store,
409
- _tableProps$filterCol = tableProps.filterColumn,
410
- filterColumn = _tableProps$filterCol === void 0 ? true : _tableProps$filterCol,
411
- _tableProps$actionBut = tableProps.actionButton,
412
- actionButton = _tableProps$actionBut === void 0 ? true : _tableProps$actionBut,
413
- _tableProps$actionCol = tableProps.actionColumn,
414
- actionColumn = _tableProps$actionCol === void 0 ? true : _tableProps$actionCol,
415
- _tableProps$showRowSe = tableProps.showRowSelection,
416
- showRowSelection = _tableProps$showRowSe === void 0 ? true : _tableProps$showRowSe;
417
- var _treeProps$store = treeProps.store,
418
- treeStore = _treeProps$store === void 0 ? {} : _treeProps$store,
419
- _treeProps$showSearch = treeProps.showSearch,
420
- treeSearch = _treeProps$showSearch === void 0 ? true : _treeProps$showSearch,
421
- _treeProps$titleAlias = treeProps.titleAlias,
422
- titleAlias = _treeProps$titleAlias === void 0 ? "title" : _treeProps$titleAlias;
423
- var tableParams = {
424
- filterColumn: filterColumn,
425
- store: store
426
- };
427
-
428
- if (showRowSelection) {
429
- tableParams = _objectSpread(_objectSpread({}, tableParams), {}, {
430
- rowSelection: {
431
- selectedRowKeys: selectedRowKeys,
432
- onSelect: this.rowSelectionOnSelect.bind(this),
433
- onSelectAll: this.rowSelectionOnSelectAll.bind(this),
434
- columnWidth: 40
435
- }
436
- });
437
- }
438
-
439
- var tableColumn = [];
440
- var searchForms = [];
441
- var editorForms = [];
442
- columns.map(function (item) {
443
- var temp = _objectSpread({}, item);
444
-
445
- if (temp.search) {
446
- searchForms.push({
447
- name: temp.field || temp.dataIndex,
448
- label: temp.title,
449
- type: temp.type,
450
- props: temp.props
451
- });
452
- }
453
-
454
- delete temp.search;
455
- temp.editor !== false && editorForms.push({
456
- name: temp.field || temp.dataIndex,
457
- label: temp.title,
458
- rules: temp.rules,
459
- type: temp.type,
460
- props: temp.props,
461
- span: temp.span,
462
- dictName: temp.dictName
463
- });
464
- delete temp.rules;
465
- delete temp.span;
466
-
467
- if (temp.columnSearch) {
468
- temp.filterProps = {
469
- type: temp.type,
470
- props: temp.props
471
- };
472
- }
473
-
474
- delete temp.type;
475
- delete temp.props;
476
- tableColumn.push(temp);
477
- });
478
- var Buttons = [];
479
- var columnButtons = [];
480
-
481
- if (Array.isArray(children)) {
482
- children.map(function (item) {
483
- if (item.props.pageType == "toolButton") {
484
- Buttons.push(item);
485
- } else if (item.props.pageType == "cloumnButton") {
486
- columnButtons.push(item);
487
- }
488
- });
489
- } else if (children) {
490
- var props = children.props;
491
-
492
- if (props.pageType == "toolButton") {
493
- Buttons.push(children);
494
- } else if (props.pageType == "cloumnButton") {
495
- columnButtons.push(children);
496
- }
497
- }
498
-
499
- actionColumn && tableColumn.push({
500
- title: "操作",
501
- dataIndex: "action",
502
- align: "center",
503
- width: 150,
504
- render: function render(text, record) {
505
- return /*#__PURE__*/React.createElement("div", {
506
- className: styles["action"]
507
- }, actionButton && editorForm == true && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
508
- className: styles["editor"],
509
- onClick: _this2.showForm.bind(_this2, record, false)
510
- }, "\u67E5\u770B"), /*#__PURE__*/React.createElement("div", {
511
- className: styles["editor"],
512
- onClick: _this2.showForm.bind(_this2, record, true)
513
- }, "\u7F16\u8F91")), _this2.renderCloumnButton(columnButtons, record, actionButton));
514
- }
515
- });
516
- return /*#__PURE__*/React.createElement("div", {
517
- className: styles["page"],
518
- style: {
519
- display: "flex"
520
- }
521
- }, showLeft && /*#__PURE__*/React.createElement("div", {
522
- className: styles["left"]
523
- }, /*#__PURE__*/React.createElement(Tree, {
524
- store: _objectSpread({}, treeStore),
525
- showIcon: false,
526
- checkable: false,
527
- searchable: treeSearch,
528
- onSelect: this.treeSelect.bind(this),
529
- selectedKeys: [this.state.treeSelectedKey],
530
- titleAlias: titleAlias
531
- })), /*#__PURE__*/React.createElement("div", {
532
- className: styles["right"]
533
- }, showSearch && /*#__PURE__*/React.createElement("div", {
534
- className: styles["header"]
535
- }, /*#__PURE__*/React.createElement(Form, {
536
- ref: this.searchRef,
537
- labelCol: {},
538
- wrapperCol: {},
539
- layout: "inline"
540
- }, searchForms.map(function (item, index) {
541
- if (index > 2 && !_this2.state.expand) {
542
- return;
543
- }
544
-
545
- return /*#__PURE__*/React.createElement(Form.Item, {
546
- label: item.label,
547
- name: item.name // rules={item.rules}
548
- ,
549
- key: index
550
- }, getNode(item.type, _objectSpread(_objectSpread({}, item.props), {}, {
551
- placeholder: "\u8BF7\u8F93\u5165".concat(item.label)
552
- })));
553
- })), /*#__PURE__*/React.createElement("div", {
554
- className: styles["buttons"],
555
- style: {
556
- marginTop: 0
557
- }
558
- }, /*#__PURE__*/React.createElement(Button, {
559
- type: "primary",
560
- onClick: this.onSearch.bind(this),
561
- icon: /*#__PURE__*/React.createElement(Icon, {
562
- type: iconType.search
563
- })
564
- }, "\u67E5\u8BE2"), /*#__PURE__*/React.createElement(Button, {
565
- type: "primary",
566
- onClick: function onClick() {
567
- var _this2$searchRef$curr;
568
-
569
- (_this2$searchRef$curr = _this2.searchRef.current) === null || _this2$searchRef$curr === void 0 ? void 0 : _this2$searchRef$curr.resetFields();
570
- },
571
- icon: /*#__PURE__*/React.createElement(Icon, {
572
- type: iconType.refresh
573
- })
574
- }, "\u91CD\u7F6E"), searchForms.length > 3 && /*#__PURE__*/React.createElement("a", {
575
- className: styles.a_style,
576
- onClick: function onClick() {
577
- var expand = _this2.state.expand;
578
-
579
- _this2.setState({
580
- expand: !expand
581
- });
582
- }
583
- }, this.state.expand ? "收起" : "展开", this.state.expand ? /*#__PURE__*/React.createElement(UpOutlined, null) : /*#__PURE__*/React.createElement(DownOutlined, null)))), showToolButton && /*#__PURE__*/React.createElement("div", {
584
- className: styles["buttons"],
585
- style: {
586
- marginLeft: 0
587
- }
588
- }, showAddButton && editorForm == true && /*#__PURE__*/React.createElement(Button, {
589
- type: "primary",
590
- onClick: this.showForm.bind(this),
591
- icon: /*#__PURE__*/React.createElement(Icon, {
592
- type: iconType.add
593
- })
594
- }, "\u6DFB\u52A0"), showDeleteButton && editorForm == true && /*#__PURE__*/React.createElement(Button // type={"primary"}
595
- , {
596
- onClick: this.onDelete.bind(this),
597
- icon: /*#__PURE__*/React.createElement(Icon, {
598
- type: iconType.delete3
599
- }),
600
- danger: true
601
- }, "\u5220\u9664"), Buttons.map(function (item, index) {
602
- return /*#__PURE__*/React.createElement("div", {
603
- key: index
604
- }, item);
605
- })), /*#__PURE__*/React.createElement("div", {
606
- className: styles["table"]
607
- }, /*#__PURE__*/React.createElement(Table, _extends({
608
- ref: this.tableRef,
609
- columns: tableColumn
610
- }, tableParams)))), editorForm && /*#__PURE__*/React.createElement(EditorForm, {
611
- ref: this.editorRef,
612
- onCancel: this.showForm.bind(this),
613
- callBack: this.tableReload.bind(this),
614
- formProps: editorForms,
615
- submitUrl: submitUrl,
616
- submitParams: submitParams,
617
- onSubmit: this.props.onSubmit
618
- }));
619
- }
620
- }]);
621
-
622
- return BasePage;
623
- }(PureComponent);
624
-
625
- export default BasePage;
626
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BhZ2VDb21wb25lbnRzL0Jhc2VQYWdlL2luZGV4LnRzeCJdLCJuYW1lcyI6WyJSZWFjdCIsIlB1cmVDb21wb25lbnQiLCJUYWJsZSIsIlRyZWUiLCJGb3JtIiwiQnV0dG9uIiwiTW9kYWwiLCJQb3BvdmVyIiwibWVzc2FnZSIsIkljb24iLCJpY29uVHlwZSIsIkVkaXRvckZvcm0iLCJjbHMiLCJzdHlsZXMiLCJEb3duT3V0bGluZWQiLCJVcE91dGxpbmVkIiwiZ2V0Tm9kZSIsInJlcXVlc3QiLCJCYXNlUGFnZSIsInByb3BzIiwiY3JlYXRlUmVmIiwiY2hlY2tlZFRyZWVLZXlzIiwic3RhdGUiLCJuYW1lIiwidXNlclR5cGUiLCJhY2NvdW50IiwidmFsdWUiLCJkZXB0SWQiLCJ0YWJsZUxvYWQiLCJ0eXBlIiwic2VsZWN0ZWRSb3dLZXlzIiwidHJlZVNlbGVjdGVkS2V5IiwiZXhwYW5kIiwiaW5pdERhdGEiLCJmbGFnIiwiZWRpdG9yUmVmIiwiY3VycmVudCIsInNob3ciLCJkZWxldGVVcmwiLCJvbkRlbGV0ZSIsImRlbGV0ZVBhcmFtcyIsImxlbmd0aCIsIndhcm5pbmciLCJFcnJvciIsImNvbmZpcm0iLCJ0aXRsZSIsIm9rVGV4dCIsImNhbmNlbFRleHQiLCJvbk9rIiwiZGVmYXVsdFBhcmFtcyIsIm1ldGhvZCIsInBhcmFtcyIsImlkcyIsImpvaW4iLCJyZXF1ZXN0UGFyYW1zIiwidGhlbiIsInJlcyIsImNvZGUiLCJzdWNjZXNzIiwiZXJyb3IiLCJjYXRjaCIsImNvbnNvbGUiLCJsb2ciLCJ0YWJsZVJlZiIsInN0b3JlIiwibG9hZCIsIm9uU2VhcmNoIiwiZnJvbVZhbHVlIiwic2VhcmNoUmVmIiwiZ2V0RmllbGRzVmFsdWUiLCJyZWxvYWQiLCJyZWNvcmQiLCJzZWxlY3RlZCIsIm5ld1NlbGVjdGVkUm93S2V5cyIsImlkIiwibWFwIiwiaXRlbSIsImluZGV4Iiwic3BsaWNlIiwic2V0U3RhdGUiLCJzZWxlY3RlZFJvd3MiLCJjaGFuZ2VSb3dzIiwibmV3aWRzIiwiY2hhbmdlSWRzIiwiaW5kZXhPZiIsInB1c2giLCJjb2x1bW5CdXR0b25zIiwiYWN0aW9uQnV0dG9uIiwiZWRpdG9yRm9ybSIsImNvbnRlbnQiLCJjaGlsZHJlbiIsInBhZ2VUeXBlIiwib25DbGljayIsIm51bSIsInNlbGVjdGVkS2V5cyIsInNlbGVjdGVkTm9kZXMiLCJrZXl3b3JkIiwidHJlZVByb3BzIiwic2VhcmNoS2V5Iiwic2VhcmNoRmllbGQiLCJpc0xlYWYiLCJkYXRhcmVmIiwiYXR0cmlidXRlIiwiY29sdW1ucyIsInNob3dTZWFyY2giLCJzdWJtaXRVcmwiLCJ0YWJsZVByb3BzIiwic2hvd0xlZnQiLCJzdWJtaXRQYXJhbXMiLCJzaG93VG9vbEJ1dHRvbiIsInNob3dBZGRCdXR0b24iLCJzaG93RGVsZXRlQnV0dG9uIiwiZmlsdGVyQ29sdW1uIiwiYWN0aW9uQ29sdW1uIiwic2hvd1Jvd1NlbGVjdGlvbiIsInRyZWVTdG9yZSIsInRyZWVTZWFyY2giLCJ0aXRsZUFsaWFzIiwidGFibGVQYXJhbXMiLCJyb3dTZWxlY3Rpb24iLCJvblNlbGVjdCIsInJvd1NlbGVjdGlvbk9uU2VsZWN0IiwiYmluZCIsIm9uU2VsZWN0QWxsIiwicm93U2VsZWN0aW9uT25TZWxlY3RBbGwiLCJjb2x1bW5XaWR0aCIsInRhYmxlQ29sdW1uIiwic2VhcmNoRm9ybXMiLCJlZGl0b3JGb3JtcyIsInRlbXAiLCJzZWFyY2giLCJmaWVsZCIsImRhdGFJbmRleCIsImxhYmVsIiwiZWRpdG9yIiwicnVsZXMiLCJzcGFuIiwiZGljdE5hbWUiLCJjb2x1bW5TZWFyY2giLCJmaWx0ZXJQcm9wcyIsIkJ1dHRvbnMiLCJBcnJheSIsImlzQXJyYXkiLCJhbGlnbiIsIndpZHRoIiwicmVuZGVyIiwidGV4dCIsInNob3dGb3JtIiwicmVuZGVyQ2xvdW1uQnV0dG9uIiwiZGlzcGxheSIsInRyZWVTZWxlY3QiLCJwbGFjZWhvbGRlciIsIm1hcmdpblRvcCIsInJlc2V0RmllbGRzIiwicmVmcmVzaCIsImFfc3R5bGUiLCJtYXJnaW5MZWZ0IiwiYWRkIiwiZGVsZXRlMyIsInRhYmxlUmVsb2FkIiwib25TdWJtaXQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPQSxLQUFQLElBQWdCQyxhQUFoQixRQUFxQyxPQUFyQztBQUNBLE9BQU9DLEtBQVAsTUFBa0IsYUFBbEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLFlBQWpCO0FBQ0EsT0FBT0MsSUFBUCxNQUFpQixZQUFqQjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsY0FBbkI7QUFDQSxPQUFPQyxLQUFQLE1BQWtCLGFBQWxCO0FBQ0EsT0FBT0MsT0FBUCxNQUFvQixlQUFwQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0IsZUFBcEI7QUFDQSxPQUFPQyxJQUFQLE1BQWlCLHVCQUFqQjtBQUNBLFNBQVNDLFFBQVQsUUFBeUIsaUJBQXpCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1QixRQUF2QjtBQUNBLE9BQU9DLEdBQVAsTUFBZ0IsWUFBaEI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLHFCQUFuQjtBQUVBLFNBQVNDLFlBQVQsRUFBdUJDLFVBQXZCLFFBQXlDLG1CQUF6QztBQUNBLFNBQVNDLE9BQVQsUUFBd0IsYUFBeEI7QUFDQSxPQUFPQyxPQUFQLE1BQW9CLGFBQXBCOztJQXNDTUMsUTs7Ozs7QUFNSixvQkFBWUMsS0FBWixFQUF3QjtBQUFBOztBQUFBOztBQUN0Qiw4QkFBTUEsS0FBTjs7QUFEc0IsNEVBTGJuQixLQUFLLENBQUNvQixTQUFOLEVBS2E7O0FBQUEsMkVBSmRwQixLQUFLLENBQUNvQixTQUFOLEVBSWM7O0FBQUEsNkVBSFpwQixLQUFLLENBQUNvQixTQUFOLEVBR1k7O0FBQUEsNkVBRlpwQixLQUFLLENBQUNvQixTQUFOLEVBRVk7O0FBQUEsK0RBYWIsVUFBQ0MsZUFBRCxFQUEwQjtBQUNuQyx3QkFBb0MsTUFBS0MsS0FBekM7QUFBQSxVQUFRQyxJQUFS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XCI7XHJcbmltcG9ydCBUYWJsZSBmcm9tIFwiLi4vLi4vdGFibGVcIjtcclxuaW1wb3J0IFRyZWUgZnJvbSBcIi4uLy4uL3RyZWVcIjtcclxuaW1wb3J0IEZvcm0gZnJvbSBcIi4uLy4uL2Zvcm1cIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYnV0dG9uXCI7XHJcbmltcG9ydCBNb2RhbCBmcm9tIFwiLi4vLi4vbW9kYWxcIjtcclxuaW1wb3J0IFBvcG92ZXIgZnJvbSBcIi4uLy4uL3BvcG92ZXJcIjtcclxuaW1wb3J0IG1lc3NhZ2UgZnJvbSBcIi4uLy4uL21lc3NhZ2VcIjtcclxuaW1wb3J0IEljb24gZnJvbSBcIi4uLy4uL2NvbW1vbi9JY29uRm9udFwiO1xyXG5pbXBvcnQgeyBpY29uVHlwZSB9IGZyb20gXCIuLi8uLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IEVkaXRvckZvcm0gZnJvbSBcIi4vRm9ybVwiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyBEb3duT3V0bGluZWQsIFVwT3V0bGluZWQgfSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgcmVxdWVzdCBmcm9tIFwibnNjLXJlcXVlc3RcIjtcclxuaW1wb3J0IHsgQnV0dG9uUHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbnRlcmZhY2UgVGFibGVQcm9wcyB7XHJcbiAgYWN0aW9uQ29sdW1uPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmk43kvZzliJdcclxuICBhY3Rpb25CdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpum7mOiupOaYvuekuuaWsOWinu+8jOe8lui+kem7mOiupOaMiemSrlxyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuui/h+a7pOaMiemSrlxyXG4gIHNob3dSb3dTZWxlY3Rpb24/OiBib29sZWFuOyAvL+aYr+WQpuihqOagvOWLvumAieWIl1xyXG59XHJcbmludGVyZmFjZSBUcmVlUHJvcHMge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrmkJzntKLmoYZcclxuICBzZWFyY2hLZXk/OiBzdHJpbmc7IC8v5pCc57SidmFsdWXlr7nlupTnmoRrZXlcclxuICBzZWFyY2hGaWVsZD86IHN0cmluZzsgLy/mn6Xor6Llr7nlupTnmoRrZXlcclxuICB0aXRsZUFsaWFzPzogc3RyaW5nOyAvL+agkXRpdGxl5a+55bqU55qEa2V5LOm7mOiupHRpdGxlXHJcbiAgbm9kZVBvcnBzPzogb2JqZWN0O1xyXG59XHJcbmludGVyZmFjZSBOU0NCYXNlQmFnZVByb3BzIHtcclxuICBzaG93U2VhcmNoPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrlpLTpg6jmkJzntKLmoI9cclxuICB0YWJsZVByb3BzPzogVGFibGVQcm9wczsgLy/ooajmoLzlj4LmlbBcclxuICB0cmVlUHJvcHM/OiBUcmVlUHJvcHM7IC8v5bem5L6n5qCR5Y+C5pWwXHJcbiAgc3VibWl0UGFyYW1zPzogT2JqZWN0OyAvL+a3u+WKoOWPguaVsO+8jOm7mOiupG1vdGhvZDpwb3N077yMIOWPguaVsOmAmui/h2RhdGHkvKDpgJJcclxuICBzdWJtaXRVcmw/OiBzdHJpbmc7XHJcbiAgb25TdWJtaXQ/OiBhbnk7XHJcbiAgY29sdW1uczogQXJyYXk8T2JqZWN0PjtcclxuICBzaG93TGVmdD86IGJvb2xlYW47IC8v5piv5ZCm5pi+56S65bem5L6n55uu5b2V5qCRXHJcbiAgc2hvd1Rvb2xCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuaMiemSruagj1xyXG4gIHNob3dBZGRCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuua3u+WKoOaMiemSrlxyXG4gIGVkaXRvckZvcm0/OiBib29sZWFuOyAvL+aYr+WQpumcgOimgeihqOWNleWKn+iDvSAsIOS4umZhbHNlIOe8lui+ke+8jOafpeeci++8jOaWsOWinuWKn+iDveWdh+S4jeWPr+eUqFxyXG4gIHNob3dEZWxldGVCdXR0b24/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWIoOmZpOaMiemSrlxyXG4gIGRlbGV0ZVVybD86IHN0cmluZzsgLy/liKDpmaR1cmxcclxuICBvbkRlbGV0ZT86IGFueTsgLy/liKDpmaTlj4LmlbDvvIzpu5jorqRtb3Rob2Q6cG9zdO+8jCDlj4LmlbDpgJrov4dpZHPmi7zmjqXkvKDpgJLnu5nlkI7lj7BcclxuICBkZWxldGVQYXJhbXM/OiBPYmplY3Q7XHJcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XHJcbiAgb25TZWFyY2g/OiBhbnk7XHJcbiAgaW5pdERhdGE/OmFueTsvL+WIneWni+WMluWbnuiwg+WHveaVsO+8jOWcqGNvbXBvbmVudERpZE1vdW505Lit6LCD55SoXHJcbn1cclxuXHJcbmNsYXNzIEJhc2VQYWdlIGV4dGVuZHMgUHVyZUNvbXBvbmVudDxOU0NCYXNlQmFnZVByb3BzLCBhbnk+IHtcclxuICB0YWJsZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgdHJlZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcbiAgc2VhcmNoUmVmID0gUmVhY3QuY3JlYXRlUmVmPGFueT4oKTtcclxuICBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wczogYW55KSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICB0eXBlOiBcImFkZFwiLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICB0cmVlU2VsZWN0ZWRLZXk6IFwiXCIsXHJcbiAgICAgIGV4cGFuZDogZmFsc2UsXHJcbiAgICB9O1xyXG4gIH1cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgaW5pdERhdGEgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpbml0RGF0YSAmJiBpbml0RGF0YSgpO1xyXG4gIH1cclxuICBvblNlbGVjdCA9IChjaGVja2VkVHJlZUtleXM6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgeyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHZhbHVlID0geyBuYW1lLCB1c2VyVHlwZSwgYWNjb3VudCwgZGVwdElkOiBjaGVja2VkVHJlZUtleXNbMF0gfTtcclxuICAgIHRoaXMudGFibGVMb2FkKHZhbHVlKTtcclxuICB9O1xyXG5cclxuICAvL+aYvuekuuihqOWNlVxyXG4gIHNob3dGb3JtKHZhbHVlPzogYW55LCBmbGFnID0gdHJ1ZSkge1xyXG4gICAgdGhpcy5lZGl0b3JSZWYuY3VycmVudD8uc2hvdyh2YWx1ZSwgZmxhZyk7XHJcbiAgfVxyXG4gIC8v5om56YeP5Yig6ZmkXHJcbiAgb25EZWxldGUoKSB7XHJcbiAgICBjb25zdCB7IGRlbGV0ZVVybCwgb25EZWxldGUsIGRlbGV0ZVBhcmFtcyB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgaWYgKHNlbGVjdGVkUm93S2V5cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLor7fpgInmi6nopoHliKDpmaTnmoTmlbDmja7vvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChvbkRlbGV0ZSkge1xyXG4gICAgICBvbkRlbGV0ZSAmJiBvbkRlbGV0ZShzZWxlY3RlZFJvd0tleXMpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWRlbGV0ZVVybCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzkuI3og73kuLrnqbrvvIFcIik7XHJcbiAgICB9XHJcbiAgICBNb2RhbC5jb25maXJtKHtcclxuICAgICAgdGl0bGU6IFwi5piv5ZCm56Gu6K6k5Yig6Zmk5omA6YCJ6aG577yfXCIsXHJcbiAgICAgIC8vIGljb246IDxJY29uIHR5cGU9eydpY29udGlzaGktMyd9IC8+LFxyXG4gICAgICBva1RleHQ6IFwi56Gu6K6kXCIsXHJcbiAgICAgIGNhbmNlbFRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgIG9uT2s6ICgpID0+IHtcclxuICAgICAgICBjb25zdCBkZWZhdWx0UGFyYW1zID0ge1xyXG4gICAgICAgICAgbWV0aG9kOiBcInBvc3RcIixcclxuICAgICAgICAgIHBhcmFtczogeyBpZHM6IHNlbGVjdGVkUm93S2V5cy5qb2luKCkgfSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCByZXF1ZXN0UGFyYW1zID0ge30gYXMgYW55O1xyXG4gICAgICAgIGlmIChkZWZhdWx0UGFyYW1zKSB7XHJcbiAgICAgICAgICByZXF1ZXN0UGFyYW1zID0geyAuLi5kZWxldGVQYXJhbXMgfTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVxdWVzdFBhcmFtcyA9IHsgLi4uZGVmYXVsdFBhcmFtcyB9O1xyXG4gICAgICAgIHJlcXVlc3QoZGVsZXRlVXJsLCB7XHJcbiAgICAgICAgICAuLi5yZXF1ZXN0UGFyYW1zLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgICAudGhlbihmdW5jdGlvbiAocmVzOiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2RlIH0gPSByZXM7XHJcbiAgICAgICAgICAgIGlmIChjb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBtZXNzYWdlLnN1Y2Nlc3MoXCLliKDpmaTmiJDlip/vvIFcIik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuWIoOmZpOWksei0pe+8gVwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3I6IGFueSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImVycm9yXCIsIGVycm9yKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHRhYmxlTG9hZChwYXJhbXM6IGFueSkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5sb2FkKHtcclxuICAgICAgcGFyYW1zOiBwYXJhbXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy/mn6Xor6JcclxuICBvblNlYXJjaCgpIHtcclxuICAgIGNvbnN0IHsgb25TZWFyY2ggfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5nZXRGaWVsZHNWYWx1ZSgpO1xyXG4gICAgaWYgKG9uU2VhcmNoKSB7XHJcbiAgICAgIG9uU2VhcmNoKGZyb21WYWx1ZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMubG9hZChmcm9tVmFsdWUpO1xyXG4gIH1cclxuICAvL+ihqOagvOmHjeaWsOWKoOi9vVxyXG4gIHRhYmxlUmVsb2FkKCkge1xyXG4gICAgdGhpcy50YWJsZVJlZi5jdXJyZW50Py5zdG9yZS5yZWxvYWQoKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzO1xyXG4gIH1cclxuICBnZXRTZWFyY2hWYWx1ZXMoKSB7XHJcbiAgICBjb25zdCBmcm9tVmFsdWUgPSB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5nZXRGaWVsZHNWYWx1ZSgpO1xyXG4gICAgcmV0dXJuIGZyb21WYWx1ZTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3QocmVjb3JkOiBhbnksIHNlbGVjdGVkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5uZXdTZWxlY3RlZFJvd0tleXMsIHJlY29yZC5pZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gcmVjb3JkLmlkKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0tleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogbmV3U2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsKHNlbGVjdGVkOiBhbnksIHNlbGVjdGVkUm93czogYW55LCBjaGFuZ2VSb3dzOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBpZiAoY2hhbmdlUm93cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBjaGFuZ2VJZHMgPSBjaGFuZ2VSb3dzLm1hcCgoaXRlbTogYW55KSA9PiBpdGVtLmlkKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBsb2FkKHBhcmFtczogYW55KSB7XHJcbiAgICB0aGlzLnRhYmxlUmVmLmN1cnJlbnQ/LnN0b3JlLmxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgfVxyXG4gIHJlbmRlckNsb3VtbkJ1dHRvbihjb2x1bW5CdXR0b25zOiBhbnksIHJlY29yZDogYW55LCBhY3Rpb25CdXR0b24/OiBib29sZWFuKSB7XHJcbiAgICBjb25zdCB7IGVkaXRvckZvcm0gPSB0cnVlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgY29udGVudCA9IGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjaGlsZHJlbiwgcGFnZVR5cGUsIG9uQ2xpY2ssIC4uLnBhcmFtcyB9ID0gaXRlbS5wcm9wcztcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2NscyhzdHlsZXNbXCJlZGl0b3JcIl0sIHN0eWxlc1tcImNvbnRlbnQtaXRlbVwiXSl9XHJcbiAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICBvbkNsaWNrICYmIG9uQ2xpY2socmVjb3JkKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtjaGlsZHJlbn1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IG51bSA9IDE7XHJcbiAgICBpZiAoIWFjdGlvbkJ1dHRvbiB8fCAhZWRpdG9yRm9ybSkgbnVtID0gMztcclxuICAgIGlmIChjb2x1bW5CdXR0b25zLmxlbmd0aCA+IG51bSkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b21cIlxyXG4gICAgICAgICAgdGl0bGU9e251bGx9XHJcbiAgICAgICAgICBjb250ZW50PXtjb250ZW50fVxyXG4gICAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcclxuICAgICAgICAgIC8vIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1sncG9wJ119XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcImVkaXRvclwiXX0+XHJcbiAgICAgICAgICAgIOabtOWkmlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1tcImljb25cIl19PlxyXG4gICAgICAgICAgICAgIDxEb3duT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNvbHVtbkJ1dHRvbnMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB7IGNoaWxkcmVuLCBwYWdlVHlwZSwgb25DbGljaywgSWNvbiwgLi4ucGFyYW1zIH0gPSBpdGVtLnByb3BzO1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzW1wiZWRpdG9yXCJdfVxyXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgb25DbGljayAmJiBvbkNsaWNrKHJlY29yZCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHtJY29ufSB7Y2hpbGRyZW59XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy/moJHngrnlh7vkuovku7ZcclxuICB0cmVlU2VsZWN0KHNlbGVjdGVkS2V5czogYW55LCB7IHNlbGVjdGVkLCBzZWxlY3RlZE5vZGVzIH06IGFueSkge1xyXG4gICAgbGV0IGtleXdvcmQgPSBcIlwiO1xyXG4gICAgY29uc3QgeyBzZWFyY2hLZXkgPSBcImtleVwiLCBzZWFyY2hGaWVsZCA9IFwiXCIgfSA9IHRoaXMucHJvcHMudHJlZVByb3BzO1xyXG4gICAgY29uc3QgeyB0cmVlU2VsZWN0ZWRLZXkgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgaWYgKHNlbGVjdGVkTm9kZXNbMF0uaXNMZWFmIHx8ICFzZWxlY3RlZE5vZGVzWzBdLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgaWYgKHNlbGVjdGVkS2V5c1swXSAhPT0gdHJlZVNlbGVjdGVkS2V5KSB7XHJcbiAgICAgICAgICAvLyBsZXQgbWFwRGF0YSA9IHRoaXMudHJlZVJlZi5jdXJyZW50Py5zdG9yZS5nZXRGbGF0dGVuRGF0YSgpO1xyXG4gICAgICAgICAga2V5d29yZCA9IHNlbGVjdGVkTm9kZXNbMF0uZGF0YXJlZi5hdHRyaWJ1dGVbc2VhcmNoS2V5XTtcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICB0cmVlU2VsZWN0ZWRLZXk6IHNlbGVjdGVkS2V5c1swXSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgdHJlZVNlbGVjdGVkS2V5OiBrZXl3b3JkLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IGZyb21WYWx1ZSA9IHRoaXMuc2VhcmNoUmVmLmN1cnJlbnQ/LmdldEZpZWxkc1ZhbHVlKCk7XHJcbiAgICBzZWFyY2hGaWVsZCAmJiB0aGlzLmxvYWQoeyAuLi5mcm9tVmFsdWUsIFtzZWFyY2hGaWVsZF06IGtleXdvcmQgfSk7XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnNvbGUubG9nKFwic3R5bGVzXCIsIHN0eWxlcyk7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY29sdW1ucyA9IFtdLFxyXG4gICAgICBzaG93U2VhcmNoID0gdHJ1ZSxcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN1Ym1pdFVybCA9IFwiXCIsXHJcbiAgICAgIHRhYmxlUHJvcHMgPSB7fSxcclxuICAgICAgdHJlZVByb3BzID0ge30sXHJcbiAgICAgIHNob3dMZWZ0ID0gZmFsc2UsXHJcbiAgICAgIHN1Ym1pdFBhcmFtcyA9IHt9LFxyXG4gICAgICBzaG93VG9vbEJ1dHRvbiA9IHRydWUsXHJcbiAgICAgIHNob3dBZGRCdXR0b24gPSB0cnVlLFxyXG4gICAgICBzaG93RGVsZXRlQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgZWRpdG9yRm9ybSA9IHRydWUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgc3RvcmUgPSB7fSxcclxuICAgICAgZmlsdGVyQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQnV0dG9uID0gdHJ1ZSxcclxuICAgICAgYWN0aW9uQ29sdW1uID0gdHJ1ZSxcclxuICAgICAgc2hvd1Jvd1NlbGVjdGlvbiA9IHRydWUsXHJcbiAgICB9ID0gdGFibGVQcm9wcztcclxuXHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHN0b3JlOiB0cmVlU3RvcmUgPSB7fSxcclxuICAgICAgc2hvd1NlYXJjaDogdHJlZVNlYXJjaCA9IHRydWUsXHJcbiAgICAgIHRpdGxlQWxpYXMgPSBcInRpdGxlXCIsXHJcbiAgICB9ID0gdHJlZVByb3BzO1xyXG5cclxuICAgIGxldCB0YWJsZVBhcmFtcyA9IHsgZmlsdGVyQ29sdW1uLCBzdG9yZSB9IGFzIGFueTtcclxuXHJcbiAgICBpZiAoc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICB0YWJsZVBhcmFtcyA9IHtcclxuICAgICAgICAuLi50YWJsZVBhcmFtcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IHRhYmxlQ29sdW1uOiBhbnlbXSA9IFtdO1xyXG4gICAgY29uc3Qgc2VhcmNoRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29uc3QgZWRpdG9yRm9ybXM6IGFueSA9IFtdO1xyXG4gICAgY29sdW1ucy5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICBpZiAodGVtcC5zZWFyY2gpIHtcclxuICAgICAgICBzZWFyY2hGb3Jtcy5wdXNoKHtcclxuICAgICAgICAgIG5hbWU6IHRlbXAuZmllbGQgfHwgdGVtcC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICBsYWJlbDogdGVtcC50aXRsZSxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnNlYXJjaDtcclxuICAgICAgdGVtcC5lZGl0b3IgIT09IGZhbHNlICYmXHJcbiAgICAgICAgZWRpdG9yRm9ybXMucHVzaCh7XHJcbiAgICAgICAgICBuYW1lOiB0ZW1wLmZpZWxkIHx8IHRlbXAuZGF0YUluZGV4LFxyXG4gICAgICAgICAgbGFiZWw6IHRlbXAudGl0bGUsXHJcbiAgICAgICAgICBydWxlczogdGVtcC5ydWxlcyxcclxuICAgICAgICAgIHR5cGU6IHRlbXAudHlwZSxcclxuICAgICAgICAgIHByb3BzOiB0ZW1wLnByb3BzLFxyXG4gICAgICAgICAgc3BhbjogdGVtcC5zcGFuLFxyXG4gICAgICAgICAgZGljdE5hbWU6IHRlbXAuZGljdE5hbWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIGRlbGV0ZSB0ZW1wLnJ1bGVzO1xyXG4gICAgICBkZWxldGUgdGVtcC5zcGFuO1xyXG4gICAgICBpZiAodGVtcC5jb2x1bW5TZWFyY2gpIHtcclxuICAgICAgICB0ZW1wLmZpbHRlclByb3BzID0ge1xyXG4gICAgICAgICAgdHlwZTogdGVtcC50eXBlLFxyXG4gICAgICAgICAgcHJvcHM6IHRlbXAucHJvcHMsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICBkZWxldGUgdGVtcC50eXBlO1xyXG4gICAgICBkZWxldGUgdGVtcC5wcm9wcztcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgQnV0dG9uczogYW55ID0gW107XHJcbiAgICBjb25zdCBjb2x1bW5CdXR0b25zOiBhbnkgPSBbXTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICBjaGlsZHJlbi5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtLnByb3BzLnBhZ2VUeXBlID09IFwidG9vbEJ1dHRvblwiKSB7XHJcbiAgICAgICAgICBCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChpdGVtLnByb3BzLnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICAgIGNvbHVtbkJ1dHRvbnMucHVzaChpdGVtKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbikge1xyXG4gICAgICBjb25zdCB7IHByb3BzIH06IGFueSA9IGNoaWxkcmVuO1xyXG4gICAgICBpZiAocHJvcHMucGFnZVR5cGUgPT0gXCJ0b29sQnV0dG9uXCIpIHtcclxuICAgICAgICBCdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9IGVsc2UgaWYgKHByb3BzLnBhZ2VUeXBlID09IFwiY2xvdW1uQnV0dG9uXCIpIHtcclxuICAgICAgICBjb2x1bW5CdXR0b25zLnB1c2goY2hpbGRyZW4pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBhY3Rpb25Db2x1bW4gJiZcclxuICAgICAgdGFibGVDb2x1bW4ucHVzaCh7XHJcbiAgICAgICAgdGl0bGU6IFwi5pON5L2cXCIsXHJcbiAgICAgICAgZGF0YUluZGV4OiBcImFjdGlvblwiLFxyXG4gICAgICAgIGFsaWduOiBcImNlbnRlclwiLFxyXG4gICAgICAgIHdpZHRoOiAxNTAsXHJcbiAgICAgICAgcmVuZGVyOiAodGV4dDogYW55LCByZWNvcmQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcImFjdGlvblwiXX0+XHJcbiAgICAgICAgICAgICAge2FjdGlvbkJ1dHRvbiAmJiBlZGl0b3JGb3JtID09IHRydWUgJiYgKFxyXG4gICAgICAgICAgICAgICAgPD5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzW1wiZWRpdG9yXCJdfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd0Zvcm0uYmluZCh0aGlzLCByZWNvcmQsIGZhbHNlKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeeci1xyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzW1wiZWRpdG9yXCJdfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuc2hvd0Zvcm0uYmluZCh0aGlzLCByZWNvcmQsIHRydWUpfVxyXG4gICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAg57yW6L6RXHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC8+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICB7dGhpcy5yZW5kZXJDbG91bW5CdXR0b24oY29sdW1uQnV0dG9ucywgcmVjb3JkLCBhY3Rpb25CdXR0b24pfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcInBhZ2VcIl19IHN0eWxlPXt7IGRpc3BsYXk6IFwiZmxleFwiIH19PlxyXG4gICAgICAgIHtzaG93TGVmdCAmJiAoXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1wibGVmdFwiXX0+XHJcbiAgICAgICAgICAgIDxUcmVlXHJcbiAgICAgICAgICAgICAgc3RvcmU9e3sgLi4udHJlZVN0b3JlIH19XHJcbiAgICAgICAgICAgICAgc2hvd0ljb249e2ZhbHNlfVxyXG4gICAgICAgICAgICAgIGNoZWNrYWJsZT17ZmFsc2V9XHJcbiAgICAgICAgICAgICAgc2VhcmNoYWJsZT17dHJlZVNlYXJjaH1cclxuICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy50cmVlU2VsZWN0LmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgc2VsZWN0ZWRLZXlzPXtbdGhpcy5zdGF0ZS50cmVlU2VsZWN0ZWRLZXldfVxyXG4gICAgICAgICAgICAgIHRpdGxlQWxpYXM9e3RpdGxlQWxpYXN9XHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJyaWdodFwiXX0+XHJcbiAgICAgICAgICB7c2hvd1NlYXJjaCAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJoZWFkZXJcIl19PlxyXG4gICAgICAgICAgICAgIDxGb3JtXHJcbiAgICAgICAgICAgICAgICByZWY9e3RoaXMuc2VhcmNoUmVmfVxyXG4gICAgICAgICAgICAgICAgbGFiZWxDb2w9e3t9fVxyXG4gICAgICAgICAgICAgICAgd3JhcHBlckNvbD17e319XHJcbiAgICAgICAgICAgICAgICBsYXlvdXQ9XCJpbmxpbmVcIlxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHtzZWFyY2hGb3Jtcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAyICYmICF0aGlzLnN0YXRlLmV4cGFuZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgICAgIDxGb3JtLkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXtpdGVtLmxhYmVsfVxyXG4gICAgICAgICAgICAgICAgICAgICAgbmFtZT17aXRlbS5uYW1lfVxyXG4gICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZXM9e2l0ZW0ucnVsZXN9XHJcbiAgICAgICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHtnZXROb2RlKGl0ZW0udHlwZSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLnByb3BzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogYOivt+i+k+WFpSR7aXRlbS5sYWJlbH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XHJcbiAgICAgICAgICAgICAgICAgICAgPC9Gb3JtLkl0ZW0+XHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9KX1cclxuICAgICAgICAgICAgICA8L0Zvcm0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1tcImJ1dHRvbnNcIl19IHN0eWxlPXt7IG1hcmdpblRvcDogMCB9fT5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMub25TZWFyY2guYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgICAgICAgaWNvbj17PEljb24gdHlwZT17aWNvblR5cGUuc2VhcmNofSAvPn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAg5p+l6K+iXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxCdXR0b25cclxuICAgICAgICAgICAgICAgICAgdHlwZT17XCJwcmltYXJ5XCJ9XHJcbiAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaFJlZi5jdXJyZW50Py5yZXNldEZpZWxkcygpO1xyXG4gICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICBpY29uPXs8SWNvbiB0eXBlPXtpY29uVHlwZS5yZWZyZXNofSAvPn1cclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAg6YeN572uXHJcbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIHtzZWFyY2hGb3Jtcy5sZW5ndGggPiAzICYmIChcclxuICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5hX3N0eWxlfVxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZXhwYW5kIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGFuZDogIWV4cGFuZCxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5leHBhbmQgPyBcIuaUtui1t1wiIDogXCLlsZXlvIBcIn1cclxuICAgICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS5leHBhbmQgPyA8VXBPdXRsaW5lZCAvPiA6IDxEb3duT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKX1cclxuICAgICAgICAgIHtzaG93VG9vbEJ1dHRvbiAmJiAoXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbXCJidXR0b25zXCJdfSBzdHlsZT17eyBtYXJnaW5MZWZ0OiAwIH19PlxyXG4gICAgICAgICAgICAgIHtzaG93QWRkQnV0dG9uICYmIGVkaXRvckZvcm0gPT0gdHJ1ZSAmJiAoXHJcbiAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIHR5cGU9e1wicHJpbWFyeVwifVxyXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLnNob3dGb3JtLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICAgICAgICAgIGljb249ezxJY29uIHR5cGU9e2ljb25UeXBlLmFkZH0gLz59XHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIOa3u+WKoFxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICB7c2hvd0RlbGV0ZUJ1dHRvbiAmJiBlZGl0b3JGb3JtID09IHRydWUgJiYgKFxyXG4gICAgICAgICAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAvLyB0eXBlPXtcInByaW1hcnlcIn1cclxuICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5vbkRlbGV0ZS5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICAgICAgICBpY29uPXs8SWNvbiB0eXBlPXtpY29uVHlwZS5kZWxldGUzfSAvPn1cclxuICAgICAgICAgICAgICAgICAgZGFuZ2VyXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgIOWIoOmZpFxyXG4gICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICB7QnV0dG9ucy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDxkaXYga2V5PXtpbmRleH0+e2l0ZW19PC9kaXY+O1xyXG4gICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICl9XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzW1widGFibGVcIl19PlxyXG4gICAgICAgICAgICA8VGFibGUgcmVmPXt0aGlzLnRhYmxlUmVmfSBjb2x1bW5zPXt0YWJsZUNvbHVtbn0gey4uLnRhYmxlUGFyYW1zfSAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAge2VkaXRvckZvcm0gJiYgKFxyXG4gICAgICAgICAgPEVkaXRvckZvcm1cclxuICAgICAgICAgICAgcmVmPXt0aGlzLmVkaXRvclJlZn1cclxuICAgICAgICAgICAgb25DYW5jZWw9e3RoaXMuc2hvd0Zvcm0uYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgY2FsbEJhY2s9e3RoaXMudGFibGVSZWxvYWQuYmluZCh0aGlzKX1cclxuICAgICAgICAgICAgZm9ybVByb3BzPXtlZGl0b3JGb3Jtc31cclxuICAgICAgICAgICAgc3VibWl0VXJsPXtzdWJtaXRVcmx9XHJcbiAgICAgICAgICAgIHN1Ym1pdFBhcmFtcz17c3VibWl0UGFyYW1zfVxyXG4gICAgICAgICAgICBvblN1Ym1pdD17dGhpcy5wcm9wcy5vblN1Ym1pdH1cclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBCYXNlUGFnZTtcclxuIl19