nsc-react-component 2.10.31 → 3.0.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.
- package/.babelrc +2 -2
- package/lib/Interface.js +1 -1
- package/lib/Interface.js.map +1 -0
- package/lib/base/affix/index.js +5 -47
- package/lib/base/affix/index.js.map +1 -0
- package/lib/base/alert/index.js +5 -47
- package/lib/base/alert/index.js.map +1 -0
- package/lib/base/anchor/index.d.ts +1 -1
- package/lib/base/anchor/index.js +8 -50
- package/lib/base/anchor/index.js.map +1 -0
- package/lib/base/avatar/index.d.ts +1 -1
- package/lib/base/avatar/index.js +8 -50
- package/lib/base/avatar/index.js.map +1 -0
- package/lib/base/backTop/index.js +5 -47
- package/lib/base/backTop/index.js.map +1 -0
- package/lib/base/badge/index.d.ts +1 -1
- package/lib/base/badge/index.js +8 -50
- package/lib/base/badge/index.js.map +1 -0
- package/lib/base/breadcrumb/index.js +5 -47
- package/lib/base/breadcrumb/index.js.map +1 -0
- package/lib/base/button/index.d.ts +1 -1
- package/lib/base/button/index.js +93 -135
- package/lib/base/button/index.js.map +1 -0
- package/lib/base/calendar/index.js +5 -47
- package/lib/base/calendar/index.js.map +1 -0
- package/lib/base/card/index.d.ts +2 -2
- package/lib/base/card/index.js +8 -51
- package/lib/base/card/index.js.map +1 -0
- package/lib/base/carousel/index.js +5 -47
- package/lib/base/carousel/index.js.map +1 -0
- package/lib/base/cascader/index.d.ts +3 -3
- package/lib/base/cascader/index.js +156 -224
- package/lib/base/cascader/index.js.map +1 -0
- package/lib/base/chart/index.d.ts +2 -2
- package/lib/base/chart/index.js +177 -287
- package/lib/base/chart/index.js.map +1 -0
- package/lib/base/checkbox/CheckboxGroup.d.ts +3 -3
- package/lib/base/checkbox/CheckboxGroup.js +165 -259
- package/lib/base/checkbox/CheckboxGroup.js.map +1 -0
- package/lib/base/checkbox/index.d.ts +2 -2
- package/lib/base/checkbox/index.js +8 -49
- package/lib/base/checkbox/index.js.map +1 -0
- package/lib/base/collapse/index.d.ts +1 -1
- package/lib/base/collapse/index.js +8 -50
- package/lib/base/collapse/index.js.map +1 -0
- package/lib/base/colorpicker/index.d.ts +5 -0
- package/lib/base/colorpicker/index.js +8 -0
- package/lib/base/colorpicker/index.js.map +1 -0
- package/lib/base/common/BodyRow/index.js +48 -102
- package/lib/base/common/BodyRow/index.js.map +1 -0
- package/lib/base/common/EllipseCell/index.d.ts +1 -1
- package/lib/base/common/EllipseCell/index.js +16 -58
- package/lib/base/common/EllipseCell/index.js.map +1 -0
- package/lib/base/common/FileIcon.d.ts +2 -2
- package/lib/base/common/FileIcon.js +86 -132
- package/lib/base/common/FileIcon.js.map +1 -0
- package/lib/base/common/Icon.d.ts +2 -2
- package/lib/base/common/Icon.js +42 -96
- package/lib/base/common/Icon.js.map +1 -0
- package/lib/base/common/IconData.js +2 -2
- package/lib/base/common/IconData.js.map +1 -0
- package/lib/base/common/IconFont.d.ts +2 -2
- package/lib/base/common/IconFont.js +7 -8
- package/lib/base/common/IconFont.js.map +1 -0
- package/lib/base/common/NoAuthority.d.ts +2 -2
- package/lib/base/common/NoAuthority.js +13 -53
- package/lib/base/common/NoAuthority.js.map +1 -0
- package/lib/base/common/NoData.d.ts +2 -2
- package/lib/base/common/NoData.js +29 -74
- package/lib/base/common/NoData.js.map +1 -0
- package/lib/base/common/NoData.less +8 -2
- package/lib/base/common/NoMessage.d.ts +2 -2
- package/lib/base/common/NoMessage.js +30 -70
- package/lib/base/common/NoMessage.js.map +1 -0
- package/lib/base/common/NoNetWork.d.ts +2 -2
- package/lib/base/common/NoNetWork.js +30 -70
- package/lib/base/common/NoNetWork.js.map +1 -0
- package/lib/base/common/Page404.d.ts +2 -2
- package/lib/base/common/Page404.js +30 -70
- package/lib/base/common/Page404.js.map +1 -0
- package/lib/base/common/PageRequest.js +91 -154
- package/lib/base/common/PageRequest.js.map +1 -0
- package/lib/base/common/TreePanel.d.ts +1 -1
- package/lib/base/common/TreePanel.js +133 -212
- package/lib/base/common/TreePanel.js.map +1 -0
- package/lib/base/common/iconfontalibaba.js +15 -22
- package/lib/base/common/iconfontalibaba.js.map +1 -0
- package/lib/base/common/withZhLocale.d.ts +1 -1
- package/lib/base/common/withZhLocale.js +3 -8
- package/lib/base/common/withZhLocale.js.map +1 -0
- package/lib/base/configProvider/index.js +8 -50
- package/lib/base/configProvider/index.js.map +1 -0
- package/lib/base/datepick/Rangepicker.d.ts +4 -4
- package/lib/base/datepick/Rangepicker.js +231 -330
- package/lib/base/datepick/Rangepicker.js.map +1 -0
- package/lib/base/datepick/index.d.ts +2 -2
- package/lib/base/datepick/index.js +56 -115
- package/lib/base/datepick/index.js.map +1 -0
- package/lib/base/datepick/index.less +5 -5
- package/lib/base/descriptions/index.d.ts +1 -1
- package/lib/base/descriptions/index.js +8 -50
- package/lib/base/descriptions/index.js.map +1 -0
- package/lib/base/divider/index.js +5 -47
- package/lib/base/divider/index.js.map +1 -0
- package/lib/base/download/index.js +42 -84
- package/lib/base/download/index.js.map +1 -0
- package/lib/base/drawer/index.d.ts +2 -11
- package/lib/base/drawer/index.js +8 -57
- package/lib/base/drawer/index.js.map +1 -0
- package/lib/base/dropdown/index.js +19 -66
- package/lib/base/dropdown/index.js.map +1 -0
- package/lib/base/editor/index.d.ts +1 -1
- package/lib/base/editor/index.js +83 -128
- package/lib/base/editor/index.js.map +1 -0
- package/lib/base/errorboundary/index.js +19 -63
- package/lib/base/errorboundary/index.js.map +1 -0
- package/lib/base/form/Form.d.ts +2 -2
- package/lib/base/form/Form.js +302 -429
- package/lib/base/form/Form.js.map +1 -0
- package/lib/base/form/filed/Cascader.d.ts +2 -2
- package/lib/base/form/filed/Cascader.js +6 -45
- package/lib/base/form/filed/Cascader.js.map +1 -0
- package/lib/base/form/filed/Checkbox.d.ts +2 -2
- package/lib/base/form/filed/Checkbox.js +6 -45
- package/lib/base/form/filed/Checkbox.js.map +1 -0
- package/lib/base/form/filed/DatePicker.d.ts +2 -2
- package/lib/base/form/filed/DatePicker.js +6 -45
- package/lib/base/form/filed/DatePicker.js.map +1 -0
- package/lib/base/form/filed/FormItem.d.ts +2 -2
- package/lib/base/form/filed/FormItem.js +64 -128
- package/lib/base/form/filed/FormItem.js.map +1 -0
- package/lib/base/form/filed/Input.d.ts +2 -2
- package/lib/base/form/filed/Input.js +14 -51
- package/lib/base/form/filed/Input.js.map +1 -0
- package/lib/base/form/filed/InputEamil.d.ts +2 -2
- package/lib/base/form/filed/InputEamil.js +5 -44
- package/lib/base/form/filed/InputEamil.js.map +1 -0
- package/lib/base/form/filed/InputNumber.d.ts +2 -2
- package/lib/base/form/filed/InputNumber.js +5 -44
- package/lib/base/form/filed/InputNumber.js.map +1 -0
- package/lib/base/form/filed/InputPassword.d.ts +2 -2
- package/lib/base/form/filed/InputPassword.js +5 -44
- package/lib/base/form/filed/InputPassword.js.map +1 -0
- package/lib/base/form/filed/Item.d.ts +3 -3
- package/lib/base/form/filed/Item.js +90 -164
- package/lib/base/form/filed/Item.js.map +1 -0
- package/lib/base/form/filed/Radio.d.ts +2 -2
- package/lib/base/form/filed/Radio.js +7 -45
- package/lib/base/form/filed/Radio.js.map +1 -0
- package/lib/base/form/filed/RangerPicker.d.ts +2 -2
- package/lib/base/form/filed/RangerPicker.js +6 -45
- package/lib/base/form/filed/RangerPicker.js.map +1 -0
- package/lib/base/form/filed/Rate.d.ts +2 -2
- package/lib/base/form/filed/Rate.js +6 -47
- package/lib/base/form/filed/Rate.js.map +1 -0
- package/lib/base/form/filed/Select.d.ts +2 -2
- package/lib/base/form/filed/Select.js +9 -49
- package/lib/base/form/filed/Select.js.map +1 -0
- package/lib/base/form/filed/Slider.d.ts +2 -2
- package/lib/base/form/filed/Slider.js +6 -47
- package/lib/base/form/filed/Slider.js.map +1 -0
- package/lib/base/form/filed/Switch.d.ts +2 -2
- package/lib/base/form/filed/Switch.js +6 -47
- package/lib/base/form/filed/Switch.js.map +1 -0
- package/lib/base/form/filed/TagSelect.d.ts +2 -2
- package/lib/base/form/filed/TagSelect.js +6 -45
- package/lib/base/form/filed/TagSelect.js.map +1 -0
- package/lib/base/form/filed/TextArea.d.ts +2 -2
- package/lib/base/form/filed/TextArea.js +5 -44
- package/lib/base/form/filed/TextArea.js.map +1 -0
- package/lib/base/form/filed/Upload.d.ts +2 -2
- package/lib/base/form/filed/Upload.js +9 -45
- package/lib/base/form/filed/Upload.js.map +1 -0
- package/lib/base/form/index.d.ts +2 -2
- package/lib/base/form/index.js +17 -59
- package/lib/base/form/index.js.map +1 -0
- package/lib/base/grid/Col.js +5 -47
- package/lib/base/grid/Col.js.map +1 -0
- package/lib/base/grid/Row.js +5 -47
- package/lib/base/grid/Row.js.map +1 -0
- package/lib/base/grid/index.js +1 -1
- package/lib/base/grid/index.js.map +1 -0
- package/lib/base/iframe/index.d.ts +1 -1
- package/lib/base/iframe/index.js +44 -94
- package/lib/base/iframe/index.js.map +1 -0
- package/lib/base/image/index.js +159 -260
- package/lib/base/image/index.js.map +1 -0
- package/lib/base/input/Email.d.ts +2 -2
- package/lib/base/input/Email.js +55 -104
- package/lib/base/input/Email.js.map +1 -0
- package/lib/base/input/Number.d.ts +1 -1
- package/lib/base/input/Number.js +46 -105
- package/lib/base/input/Number.js.map +1 -0
- package/lib/base/input/Password.d.ts +1 -1
- package/lib/base/input/Password.js +46 -105
- package/lib/base/input/Password.js.map +1 -0
- package/lib/base/input/Search.d.ts +1 -1
- package/lib/base/input/Search.js +44 -103
- package/lib/base/input/Search.js.map +1 -0
- package/lib/base/input/TextArea.d.ts +1 -1
- package/lib/base/input/TextArea.js +62 -124
- package/lib/base/input/TextArea.js.map +1 -0
- package/lib/base/input/index.d.ts +3 -3
- package/lib/base/input/index.js +119 -196
- package/lib/base/input/index.js.map +1 -0
- package/lib/base/layout/index.d.ts +3 -3
- package/lib/base/layout/index.js +14 -57
- package/lib/base/layout/index.js.map +1 -0
- package/lib/base/list/index.d.ts +1 -1
- package/lib/base/list/index.js +8 -50
- package/lib/base/list/index.js.map +1 -0
- package/lib/base/menu/index.d.ts +7 -7
- package/lib/base/menu/index.js +100 -166
- package/lib/base/menu/index.js.map +1 -0
- package/lib/base/message/index.d.ts +8 -9
- package/lib/base/message/index.js +5 -49
- package/lib/base/message/index.js.map +1 -0
- package/lib/base/modal/Confirm.d.ts +1 -1
- package/lib/base/modal/Confirm.js +15 -23
- package/lib/base/modal/Confirm.js.map +1 -0
- package/lib/base/modal/index.d.ts +8 -8
- package/lib/base/modal/index.js +275 -363
- package/lib/base/modal/index.js.map +1 -0
- package/lib/base/modal/index.less +8 -8
- package/lib/base/notification/index.d.ts +8 -10
- package/lib/base/notification/index.js +12 -57
- package/lib/base/notification/index.js.map +1 -0
- package/lib/base/pagination/index.js +5 -47
- package/lib/base/pagination/index.js.map +1 -0
- package/lib/base/pdfviwer/index.d.ts +1 -1
- package/lib/base/pdfviwer/index.js +68 -93
- package/lib/base/pdfviwer/index.js.map +1 -0
- package/lib/base/popconfirm/index.js +5 -47
- package/lib/base/popconfirm/index.js.map +1 -0
- package/lib/base/popover/index.js +19 -66
- package/lib/base/popover/index.js.map +1 -0
- package/lib/base/progress/index.js +5 -47
- package/lib/base/progress/index.js.map +1 -0
- package/lib/base/qecode/index.d.ts +5 -0
- package/lib/base/qecode/index.js +8 -0
- package/lib/base/qecode/index.js.map +1 -0
- package/lib/base/radio/RadioGroup.d.ts +1 -1
- package/lib/base/radio/RadioGroup.js +198 -296
- package/lib/base/radio/RadioGroup.js.map +1 -0
- package/lib/base/radio/index.d.ts +2 -2
- package/lib/base/radio/index.js +8 -51
- package/lib/base/radio/index.js.map +1 -0
- package/lib/base/result/index.js +5 -47
- package/lib/base/result/index.js.map +1 -0
- package/lib/base/select/index.d.ts +4 -4
- package/lib/base/select/index.js +351 -468
- package/lib/base/select/index.js.map +1 -0
- package/lib/base/skeleton/index.js +5 -47
- package/lib/base/skeleton/index.js.map +1 -0
- package/lib/base/space/index.js +5 -47
- package/lib/base/space/index.js.map +1 -0
- package/lib/base/spin/index.js +5 -47
- package/lib/base/spin/index.js.map +1 -0
- package/lib/base/statistic/index.d.ts +1 -1
- package/lib/base/statistic/index.js +8 -50
- package/lib/base/statistic/index.js.map +1 -0
- package/lib/base/steps/index.d.ts +1 -1
- package/lib/base/steps/index.js +8 -50
- package/lib/base/steps/index.js.map +1 -0
- package/lib/base/switch/index.js +5 -47
- package/lib/base/switch/index.js.map +1 -0
- package/lib/base/table/index.d.ts +9 -8
- package/lib/base/table/index.js +747 -934
- package/lib/base/table/index.js.map +1 -0
- package/lib/base/table/index.module.less +14 -12
- package/lib/base/tabs/Tabpane.d.ts +1 -1
- package/lib/base/tabs/Tabpane.js +22 -59
- package/lib/base/tabs/Tabpane.js.map +1 -0
- package/lib/base/tabs/index.d.ts +1 -1
- package/lib/base/tabs/index.js +110 -158
- package/lib/base/tabs/index.js.map +1 -0
- package/lib/base/tabs/index.less +4 -4
- package/lib/base/tagSelect/TagSelect.d.ts +3 -3
- package/lib/base/tagSelect/TagSelect.js +124 -214
- package/lib/base/tagSelect/TagSelect.js.map +1 -0
- package/lib/base/tagSelect/index.d.ts +3 -3
- package/lib/base/tagSelect/index.js +90 -145
- package/lib/base/tagSelect/index.js.map +1 -0
- package/lib/base/tagSelect/index.less +4 -4
- package/lib/base/timeline/index.js +8 -50
- package/lib/base/timeline/index.js.map +1 -0
- package/lib/base/tooltip/index.js +19 -66
- package/lib/base/tooltip/index.js.map +1 -0
- package/lib/base/tour/index.d.ts +5 -0
- package/lib/base/tour/index.js +8 -0
- package/lib/base/tour/index.js.map +1 -0
- package/lib/base/transfer/index.js +5 -47
- package/lib/base/transfer/index.js.map +1 -0
- package/lib/base/tree/TreeSearch.d.ts +3 -3
- package/lib/base/tree/TreeSearch.js +121 -194
- package/lib/base/tree/TreeSearch.js.map +1 -0
- package/lib/base/tree/index.d.ts +7 -7
- package/lib/base/tree/index.js +169 -243
- package/lib/base/tree/index.js.map +1 -0
- package/lib/base/treeselect/index.js +5 -47
- package/lib/base/treeselect/index.js.map +1 -0
- package/lib/base/typography/index.js +5 -47
- package/lib/base/typography/index.js.map +1 -0
- package/lib/base/upload/Dragger.js +363 -542
- package/lib/base/upload/Dragger.js.map +1 -0
- package/lib/base/upload/Upload.d.ts +3 -1
- package/lib/base/upload/Upload.js +352 -530
- package/lib/base/upload/Upload.js.map +1 -0
- package/lib/base/upload/index copy.d.ts +1 -1
- package/lib/base/upload/index copy.js +315 -432
- package/lib/base/upload/index copy.js.map +1 -0
- package/lib/base/upload/index.js +365 -591
- package/lib/base/upload/index.js.map +1 -0
- package/lib/base/upload/index.less +12 -12
- package/lib/base/watermark/index.d.ts +5 -0
- package/lib/base/watermark/index.js +8 -0
- package/lib/base/watermark/index.js.map +1 -0
- package/lib/config.js +5 -8
- package/lib/config.js.map +1 -0
- package/lib/constants.js +2 -2
- package/lib/constants.js.map +1 -0
- package/lib/index.d.ts +4 -2
- package/lib/index.js +6 -3
- package/lib/index.js.map +1 -0
- package/lib/page/BasePage/Form.d.ts +1 -1
- package/lib/page/BasePage/Form.js +253 -360
- package/lib/page/BasePage/Form.js.map +1 -0
- package/lib/page/BasePage/index copy.d.ts +107 -0
- package/lib/page/BasePage/index copy.js +857 -0
- package/lib/page/BasePage/index copy.js.map +1 -0
- package/lib/page/BasePage/index.d.ts +4 -3
- package/lib/page/BasePage/index.js +767 -935
- package/lib/page/BasePage/index.js.map +1 -0
- package/lib/page/BasePage/index.module copy.less +143 -0
- package/lib/page/BasePage/index.module.less +54 -50
- package/lib/page/HeaderSearch/index.d.ts +2 -1
- package/lib/page/HeaderSearch/index.js +198 -273
- package/lib/page/HeaderSearch/index.js.map +1 -0
- package/lib/page/HeaderSearch/index.less +7 -7
- package/lib/page/PasswordCheck/index.d.ts +1 -1
- package/lib/page/PasswordCheck/index.js +50 -109
- package/lib/page/PasswordCheck/index.js.map +1 -0
- package/lib/page/PasswordCheck/index.less +2 -2
- package/lib/treeUtils.js +45 -58
- package/lib/treeUtils.js.map +1 -0
- package/lib/utils.d.ts +2 -2
- package/lib/utils.js +48 -61
- package/lib/utils.js.map +1 -0
- package/package.json +102 -98
- package/.vscode/settings.json +0 -3
- package/lib/base/comment/index.d.ts +0 -5
- package/lib/base/comment/index.js +0 -50
- package/lib/base/form/index.less +0 -41
- package/lib/base/pageHeader/index.d.ts +0 -5
- package/lib/base/pageHeader/index.js +0 -50
package/lib/base/table/index.js
CHANGED
|
@@ -1,72 +1,19 @@
|
|
|
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
|
-
import "antd/es/table/style/css";
|
|
4
1
|
import _Table from "antd/es/table";
|
|
5
|
-
import "antd/es/popover/style/css";
|
|
6
2
|
import _Popover from "antd/es/popover";
|
|
7
|
-
import "antd/es/checkbox/style/css";
|
|
8
3
|
import _Checkbox from "antd/es/checkbox";
|
|
9
|
-
import "antd/es/space/style/css";
|
|
10
4
|
import _Space from "antd/es/space";
|
|
11
|
-
import "antd/es/button/style/css";
|
|
12
5
|
import _Button from "antd/es/button";
|
|
13
|
-
import "antd/es/message/style/css";
|
|
14
6
|
import _message from "antd/es/message";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
function
|
|
21
|
-
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
|
|
25
|
-
|
|
26
|
-
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
27
|
-
|
|
28
|
-
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; }
|
|
29
|
-
|
|
30
|
-
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; }
|
|
31
|
-
|
|
32
|
-
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
33
|
-
|
|
34
|
-
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."); }
|
|
35
|
-
|
|
36
|
-
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); }
|
|
37
|
-
|
|
38
|
-
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
39
|
-
|
|
40
|
-
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
41
|
-
|
|
42
|
-
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; }
|
|
43
|
-
|
|
44
|
-
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
45
|
-
|
|
46
|
-
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); } }
|
|
47
|
-
|
|
48
|
-
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
49
|
-
|
|
50
|
-
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); }
|
|
51
|
-
|
|
52
|
-
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
53
|
-
|
|
54
|
-
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); }; }
|
|
55
|
-
|
|
56
|
-
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
57
|
-
|
|
58
|
-
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
59
|
-
|
|
60
|
-
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; } }
|
|
61
|
-
|
|
62
|
-
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
63
|
-
|
|
64
|
-
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; }
|
|
65
|
-
|
|
7
|
+
const _excluded = ["onResize", "width"],
|
|
8
|
+
_excluded2 = ["listeners"];
|
|
9
|
+
function _extends() { _extends = Object.assign ? Object.assign.bind() : 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); }
|
|
10
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
11
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
12
|
+
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
13
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : String(i); }
|
|
14
|
+
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
66
15
|
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; }
|
|
67
|
-
|
|
68
16
|
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; }
|
|
69
|
-
|
|
70
17
|
/*
|
|
71
18
|
* @Descripttion:
|
|
72
19
|
* @version:
|
|
@@ -83,9 +30,11 @@ import * as React from "react";
|
|
|
83
30
|
import { DndProvider } from "react-dnd";
|
|
84
31
|
import BodyRow, { DndContextType, IBodyRowProps } from "../common/BodyRow";
|
|
85
32
|
import treeUtils from "../../treeUtils";
|
|
86
|
-
import
|
|
87
|
-
|
|
88
|
-
|
|
33
|
+
import "./index.module.less";
|
|
34
|
+
const {
|
|
35
|
+
BodyRowComponent,
|
|
36
|
+
HTML5Backend
|
|
37
|
+
} = BodyRow;
|
|
89
38
|
import withZhLocale from "../common/withZhLocale";
|
|
90
39
|
import { Resizable } from "react-resizable";
|
|
91
40
|
import "./resize.module.less";
|
|
@@ -93,13 +42,17 @@ import { getLess, getNode } from "../../utils";
|
|
|
93
42
|
import NoData from "../../base/common/NoData";
|
|
94
43
|
import { getStorage } from "@bj-nsc/functions";
|
|
95
44
|
import config from "../../config";
|
|
96
|
-
|
|
45
|
+
const styles = null;
|
|
97
46
|
|
|
98
|
-
|
|
99
|
-
var onResize = props.onResize,
|
|
100
|
-
width = props.width,
|
|
101
|
-
restProps = _objectWithoutProperties(props, _excluded);
|
|
47
|
+
// interface StoreProps {}
|
|
102
48
|
|
|
49
|
+
export { DndContextType, IBodyRowProps };
|
|
50
|
+
const ResizeableTitle = props => {
|
|
51
|
+
const {
|
|
52
|
+
onResize,
|
|
53
|
+
width
|
|
54
|
+
} = props,
|
|
55
|
+
restProps = _objectWithoutProperties(props, _excluded);
|
|
103
56
|
return /*#__PURE__*/React.createElement(Resizable, {
|
|
104
57
|
width: width || 150,
|
|
105
58
|
height: 0,
|
|
@@ -109,63 +62,44 @@ var ResizeableTitle = function ResizeableTitle(props) {
|
|
|
109
62
|
}
|
|
110
63
|
}, /*#__PURE__*/React.createElement("th", restProps));
|
|
111
64
|
};
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
_inherits(NSCTable, _React$Component);
|
|
115
|
-
|
|
116
|
-
var _super = _createSuper(NSCTable);
|
|
117
|
-
|
|
118
|
-
function NSCTable(props) {
|
|
65
|
+
class NSCTable extends React.Component {
|
|
66
|
+
constructor(props) {
|
|
119
67
|
var _autoType;
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
_this2 = _super.call(this, props);
|
|
126
|
-
|
|
127
|
-
_defineProperty(_assertThisInitialized(_this2), "store", {});
|
|
128
|
-
|
|
129
|
-
_defineProperty(_assertThisInitialized(_this2), "thIconRef", /*#__PURE__*/React.createRef());
|
|
130
|
-
|
|
131
|
-
_defineProperty(_assertThisInitialized(_this2), "tableSearchRef", /*#__PURE__*/React.createRef());
|
|
132
|
-
|
|
133
|
-
_defineProperty(_assertThisInitialized(_this2), "listeners", {
|
|
68
|
+
super(props);
|
|
69
|
+
_defineProperty(this, "store", {});
|
|
70
|
+
_defineProperty(this, "thIconRef", /*#__PURE__*/React.createRef());
|
|
71
|
+
_defineProperty(this, "tableSearchRef", /*#__PURE__*/React.createRef());
|
|
72
|
+
_defineProperty(this, "listeners", {
|
|
134
73
|
onBeforeLoad: null,
|
|
135
74
|
load: null
|
|
136
75
|
});
|
|
137
|
-
|
|
138
|
-
_defineProperty(_assertThisInitialized(_this2), "components", {
|
|
76
|
+
_defineProperty(this, "components", {
|
|
139
77
|
header: {
|
|
140
78
|
cell: ResizeableTitle
|
|
141
79
|
}
|
|
142
80
|
});
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
});
|
|
158
|
-
};
|
|
81
|
+
_defineProperty(this, "handleResize", index => (e, _ref) => {
|
|
82
|
+
let {
|
|
83
|
+
size
|
|
84
|
+
} = _ref;
|
|
85
|
+
const {
|
|
86
|
+
cols
|
|
87
|
+
} = this.state;
|
|
88
|
+
const nextColumns = [...cols];
|
|
89
|
+
nextColumns[index] = _objectSpread(_objectSpread({}, nextColumns[index]), {}, {
|
|
90
|
+
width: size.width
|
|
91
|
+
});
|
|
92
|
+
this.setState({
|
|
93
|
+
cols: nextColumns
|
|
94
|
+
});
|
|
159
95
|
});
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
var _this = _assertThisInitialized(_this2);
|
|
165
|
-
|
|
96
|
+
_defineProperty(this, "listenMessage", ev => {
|
|
97
|
+
const data = typeof ev.data === "string" ? JSON.parse(ev.data) : ev.data;
|
|
98
|
+
let _this = this;
|
|
166
99
|
if (data.eventType == "changeTableSize") {
|
|
167
|
-
|
|
168
|
-
|
|
100
|
+
const {
|
|
101
|
+
payload
|
|
102
|
+
} = data;
|
|
169
103
|
if (payload.size == "default" || payload.size == "small" || payload.size == "middle") {
|
|
170
104
|
_this.setState({
|
|
171
105
|
tableSize: payload.size
|
|
@@ -173,32 +107,31 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
173
107
|
}
|
|
174
108
|
}
|
|
175
109
|
});
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
110
|
+
/**
|
|
111
|
+
* 模块列表移动排序
|
|
112
|
+
*/
|
|
113
|
+
_defineProperty(this, "moveRow", (dragIndex, hoverIndex, drag, target) => {
|
|
114
|
+
const _this = this;
|
|
115
|
+
let dragNode = drag.record;
|
|
116
|
+
let targetNode = target.record;
|
|
182
117
|
dragNode.moveArray(dragNode, targetNode);
|
|
183
|
-
|
|
184
|
-
|
|
118
|
+
let ids = dragNode.parentNode.getChildNodeIds();
|
|
119
|
+
let params = {
|
|
185
120
|
id: dragNode.id,
|
|
186
121
|
parentId: dragNode.attribute.parentId,
|
|
187
122
|
ids: ids
|
|
188
123
|
};
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
_this2.props.moveRow(params);
|
|
124
|
+
if (this.props.moveRow) {
|
|
125
|
+
this.props.moveRow(params);
|
|
192
126
|
} else {
|
|
193
|
-
|
|
127
|
+
this.store.reload();
|
|
194
128
|
}
|
|
195
129
|
});
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
var autoType = getStorage(storePrefix ? storePrefix + "tableSize" : "tableSize");
|
|
130
|
+
let modal = props.type || "auto";
|
|
131
|
+
let storePrefix = getStorage("store-pre-key");
|
|
132
|
+
let autoType = getStorage(storePrefix ? storePrefix + "tableSize" : "tableSize");
|
|
200
133
|
autoType = (_autoType = autoType) === null || _autoType === void 0 ? void 0 : _autoType.content;
|
|
201
|
-
|
|
134
|
+
this.state = {
|
|
202
135
|
dataSource: [],
|
|
203
136
|
columns: [],
|
|
204
137
|
loading: false,
|
|
@@ -211,7 +144,7 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
211
144
|
cols: [],
|
|
212
145
|
sorts: [],
|
|
213
146
|
filterParams: {},
|
|
214
|
-
tableSize:
|
|
147
|
+
tableSize: this.props.size || autoType || "default",
|
|
215
148
|
sortType: "single",
|
|
216
149
|
sorter: [],
|
|
217
150
|
//记录当前排序字段
|
|
@@ -222,898 +155,779 @@ var NSCTable = /*#__PURE__*/function (_React$Component) {
|
|
|
222
155
|
selectedRowKeys: [],
|
|
223
156
|
selectedRowDatas: []
|
|
224
157
|
};
|
|
225
|
-
|
|
226
158
|
if (props.store instanceof Store) {
|
|
227
|
-
|
|
159
|
+
this.store = props.store;
|
|
228
160
|
} else {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
listenersProps =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
161
|
+
const _ref2 = props.store || {},
|
|
162
|
+
{
|
|
163
|
+
listeners: listenersProps = {}
|
|
164
|
+
} = _ref2,
|
|
165
|
+
restStore = _objectWithoutProperties(_ref2, _excluded2);
|
|
166
|
+
const storeProps = _objectSpread(_objectSpread({
|
|
235
167
|
model: "model",
|
|
236
|
-
component:
|
|
168
|
+
component: this,
|
|
237
169
|
listeners: {
|
|
238
|
-
onBeforeLoad:
|
|
239
|
-
|
|
170
|
+
onBeforeLoad: (store, options) => {
|
|
171
|
+
this.setState({
|
|
240
172
|
loading: true
|
|
241
173
|
});
|
|
242
|
-
|
|
243
|
-
utils.callback(listenersProps.onBeforeLoad, _assertThisInitialized(_this2), [store, options]);
|
|
174
|
+
utils.callback(listenersProps.onBeforeLoad, this, [store, options]);
|
|
244
175
|
},
|
|
245
|
-
dataChanged:
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
_this2.setState({
|
|
176
|
+
dataChanged: (data, modelData, store) => {
|
|
177
|
+
let paging = !(this.props.pagination === false);
|
|
178
|
+
if (paging && !this.props.dataSource) {
|
|
179
|
+
this.setState({
|
|
250
180
|
dataSource: modelData,
|
|
251
181
|
pagination: store.getPagination(),
|
|
252
182
|
loading: false,
|
|
253
183
|
activeIndex: -1
|
|
254
184
|
});
|
|
255
185
|
} else {
|
|
256
|
-
|
|
186
|
+
this.setState({
|
|
257
187
|
dataSource: modelData,
|
|
258
188
|
loading: false
|
|
259
189
|
});
|
|
260
190
|
}
|
|
261
|
-
|
|
262
|
-
utils.callback(listenersProps.dataChanged, _assertThisInitialized(_this2), [data, modelData, store, paging]);
|
|
191
|
+
utils.callback(listenersProps.dataChanged, this, [data, modelData, store, paging]);
|
|
263
192
|
},
|
|
264
|
-
load:
|
|
265
|
-
utils.callback(listenersProps.load,
|
|
193
|
+
load: (data, modelData, store) => {
|
|
194
|
+
utils.callback(listenersProps.load, this, [data, modelData, store]);
|
|
266
195
|
},
|
|
267
|
-
onErrorLoad:
|
|
268
|
-
|
|
196
|
+
onErrorLoad: (err, response) => {
|
|
197
|
+
this.setState({
|
|
269
198
|
loading: false
|
|
270
199
|
});
|
|
271
|
-
|
|
272
|
-
utils.callback(listenersProps.onErrorLoad, _assertThisInitialized(_this2), [err, response]);
|
|
200
|
+
utils.callback(listenersProps.onErrorLoad, this, [err, response]);
|
|
273
201
|
}
|
|
274
202
|
},
|
|
275
203
|
data: restStore.data ? restStore.data : props.dataSource ? props.dataSource : null
|
|
276
204
|
}, restStore), {}, {
|
|
277
205
|
autoLoad: restStore.autoLoad === false ? false : true
|
|
278
206
|
});
|
|
279
|
-
|
|
280
|
-
_this2.store = new PageStore(Object.assign({}, storeProps, {
|
|
207
|
+
this.store = new PageStore(Object.assign({}, storeProps, {
|
|
281
208
|
pagination: _objectSpread({
|
|
282
209
|
current: 1
|
|
283
|
-
},
|
|
210
|
+
}, this.props.pagination)
|
|
284
211
|
}));
|
|
285
212
|
}
|
|
286
|
-
|
|
287
|
-
return _this2;
|
|
288
213
|
}
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
if (!resizeColumn) {
|
|
296
|
-
this.setState({
|
|
297
|
-
columns: _toConsumableArray(this.props.columns)
|
|
298
|
-
});
|
|
299
|
-
} else {
|
|
300
|
-
this.setState({
|
|
301
|
-
cols: _toConsumableArray(this.props.columns)
|
|
302
|
-
});
|
|
303
|
-
}
|
|
304
|
-
|
|
305
|
-
var store = this.props.store;
|
|
306
|
-
|
|
307
|
-
if (store && store.data) {
|
|
308
|
-
this.store.setData(store.data);
|
|
309
|
-
}
|
|
310
|
-
|
|
311
|
-
window.addEventListener("message", this.listenMessage);
|
|
312
|
-
}
|
|
313
|
-
}, {
|
|
314
|
-
key: "componentWillUnmount",
|
|
315
|
-
value: function componentWillUnmount() {
|
|
316
|
-
window.removeEventListener("message", this.listenMessage);
|
|
317
|
-
}
|
|
318
|
-
}, {
|
|
319
|
-
key: "componentDidUpdate",
|
|
320
|
-
value: function componentDidUpdate(prevProps, preState) {
|
|
321
|
-
var resizeColumn = this.props.resizeColumn;
|
|
322
|
-
|
|
323
|
-
if (!resizeColumn) {
|
|
324
|
-
if (this.props.columns !== prevProps.columns) {
|
|
325
|
-
this.setState({
|
|
326
|
-
columns: this.props.columns
|
|
327
|
-
});
|
|
328
|
-
}
|
|
329
|
-
} else {
|
|
330
|
-
if (preState.cols !== this.state.cols) {
|
|
331
|
-
this.resetColumn();
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
if (this.props.columns !== prevProps.columns) {
|
|
335
|
-
this.setState({
|
|
336
|
-
cols: this.props.columns
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
if (prevProps.size !== this.props.size) {
|
|
341
|
-
this.setState({
|
|
342
|
-
tableSize: this.props.size
|
|
343
|
-
});
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
}, {
|
|
348
|
-
key: "resetColumn",
|
|
349
|
-
value: function resetColumn() {
|
|
350
|
-
var _this3 = this;
|
|
351
|
-
|
|
352
|
-
var cols = this.state.cols;
|
|
353
|
-
var newCols = [];
|
|
354
|
-
var colss = cols || [];
|
|
355
|
-
colss.map(function (col, index) {
|
|
356
|
-
var temp = _objectSpread(_objectSpread({}, col), {}, {
|
|
357
|
-
onHeaderCell: function onHeaderCell(column) {
|
|
358
|
-
return {
|
|
359
|
-
width: column.width,
|
|
360
|
-
onResize: _this3.handleResize(index)
|
|
361
|
-
};
|
|
362
|
-
}
|
|
363
|
-
});
|
|
364
|
-
|
|
365
|
-
newCols.push(temp);
|
|
366
|
-
});
|
|
214
|
+
componentDidMount() {
|
|
215
|
+
const {
|
|
216
|
+
resizeColumn
|
|
217
|
+
} = this.props;
|
|
218
|
+
if (!resizeColumn) {
|
|
367
219
|
this.setState({
|
|
368
|
-
columns:
|
|
220
|
+
columns: [...this.props.columns]
|
|
369
221
|
});
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* 清除选中颜色
|
|
373
|
-
*/
|
|
374
|
-
|
|
375
|
-
}, {
|
|
376
|
-
key: "clearSelectColor",
|
|
377
|
-
value: function clearSelectColor() {
|
|
222
|
+
} else {
|
|
378
223
|
this.setState({
|
|
379
|
-
|
|
224
|
+
cols: [...this.props.columns]
|
|
380
225
|
});
|
|
381
|
-
return this;
|
|
382
226
|
}
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
return this.store.getPagination();
|
|
227
|
+
const store = this.props.store;
|
|
228
|
+
if (store && store.data) {
|
|
229
|
+
this.store.setData(store.data);
|
|
387
230
|
}
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
if (autoOnChange === false || !store) {
|
|
404
|
-
onChange && onChange(pagination, filters, sorter, extra);
|
|
405
|
-
return;
|
|
231
|
+
window.addEventListener("message", this.listenMessage);
|
|
232
|
+
}
|
|
233
|
+
componentWillUnmount() {
|
|
234
|
+
window.removeEventListener("message", this.listenMessage);
|
|
235
|
+
}
|
|
236
|
+
componentDidUpdate(prevProps, preState) {
|
|
237
|
+
const {
|
|
238
|
+
resizeColumn
|
|
239
|
+
} = this.props;
|
|
240
|
+
if (!resizeColumn) {
|
|
241
|
+
if (this.props.columns !== prevProps.columns) {
|
|
242
|
+
this.setState({
|
|
243
|
+
columns: this.props.columns
|
|
244
|
+
});
|
|
406
245
|
}
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
var ascParams = _this4.getSortParam(sorter, true);
|
|
420
|
-
|
|
421
|
-
if (isMultiple) {
|
|
422
|
-
_this4.setState({
|
|
423
|
-
sorter: sorter
|
|
424
|
-
});
|
|
425
|
-
} else if (!isMultiple && !isEmptyObj(sorter)) {
|
|
426
|
-
sorter.column && _this4.setState({
|
|
427
|
-
sorter: [sorter],
|
|
428
|
-
defaultSort: false
|
|
429
|
-
});
|
|
430
|
-
} else {
|
|
431
|
-
_this4.setState({
|
|
432
|
-
sorter: []
|
|
433
|
-
});
|
|
434
|
-
}
|
|
435
|
-
|
|
436
|
-
params = _objectSpread(_objectSpread(_objectSpread({}, filterParams), params), ascParams);
|
|
437
|
-
autoSort && _this4.store.reload({
|
|
438
|
-
params: params
|
|
246
|
+
} else {
|
|
247
|
+
if (preState.cols !== this.state.cols) {
|
|
248
|
+
this.resetColumn();
|
|
249
|
+
}
|
|
250
|
+
if (this.props.columns !== prevProps.columns) {
|
|
251
|
+
this.setState({
|
|
252
|
+
cols: this.props.columns
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
if (prevProps.size !== this.props.size) {
|
|
256
|
+
this.setState({
|
|
257
|
+
tableSize: this.props.size
|
|
439
258
|
});
|
|
440
|
-
};
|
|
441
|
-
|
|
442
|
-
var onChangeFn = this.props.onChange;
|
|
443
|
-
autoPagination && handlePagination(); // 用户传了onChange保留用户自主处理表格变化的权力
|
|
444
|
-
|
|
445
|
-
if (onChangeFn) {
|
|
446
|
-
utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);
|
|
447
259
|
}
|
|
448
260
|
}
|
|
449
|
-
}
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
}
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
}
|
|
463
|
-
/**
|
|
464
|
-
* 菜单搜索过滤显示
|
|
465
|
-
* @param {String} val
|
|
466
|
-
*/
|
|
467
|
-
|
|
468
|
-
}, {
|
|
469
|
-
key: "handleSearch",
|
|
470
|
-
value: function handleSearch(val, fieldOption, searchColor) {
|
|
471
|
-
this.setState({
|
|
472
|
-
searchText: val,
|
|
473
|
-
fieldOption: fieldOption,
|
|
474
|
-
searchColor: searchColor
|
|
261
|
+
}
|
|
262
|
+
resetColumn() {
|
|
263
|
+
const {
|
|
264
|
+
cols
|
|
265
|
+
} = this.state;
|
|
266
|
+
const newCols = [];
|
|
267
|
+
let colss = cols || [];
|
|
268
|
+
colss.map((col, index) => {
|
|
269
|
+
let temp = _objectSpread(_objectSpread({}, col), {}, {
|
|
270
|
+
onHeaderCell: column => ({
|
|
271
|
+
width: column.width,
|
|
272
|
+
onResize: this.handleResize(index)
|
|
273
|
+
})
|
|
475
274
|
});
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
}
|
|
482
|
-
key: "filterColumn",
|
|
483
|
-
value: function filterColumn(checkedValue) {
|
|
484
|
-
if (checkedValue.length == 0) {
|
|
485
|
-
_message.warning("至少显示一列!");
|
|
275
|
+
newCols.push(temp);
|
|
276
|
+
});
|
|
277
|
+
this.setState({
|
|
278
|
+
columns: newCols
|
|
279
|
+
});
|
|
280
|
+
}
|
|
486
281
|
|
|
487
|
-
|
|
282
|
+
/**
|
|
283
|
+
* 清除选中颜色
|
|
284
|
+
*/
|
|
285
|
+
clearSelectColor() {
|
|
286
|
+
this.setState({
|
|
287
|
+
activeIndex: -1
|
|
288
|
+
});
|
|
289
|
+
return this;
|
|
290
|
+
}
|
|
291
|
+
getPaginationByStore() {
|
|
292
|
+
return this.store.getPagination();
|
|
293
|
+
}
|
|
294
|
+
onChange(pagination, filters, sorter, extra) {
|
|
295
|
+
const {
|
|
296
|
+
autoOnChange = true,
|
|
297
|
+
autoSort,
|
|
298
|
+
autoPagination,
|
|
299
|
+
onChange,
|
|
300
|
+
store
|
|
301
|
+
} = this.props;
|
|
302
|
+
const {
|
|
303
|
+
filterParams
|
|
304
|
+
} = this.state;
|
|
305
|
+
const isMultiple = Array.isArray(sorter);
|
|
306
|
+
if (autoOnChange === false || !store) {
|
|
307
|
+
onChange && onChange(pagination, filters, sorter, extra);
|
|
308
|
+
return;
|
|
309
|
+
}
|
|
310
|
+
const handlePagination = () => {
|
|
311
|
+
let params = {};
|
|
312
|
+
const paging = this.getPaginationByStore() || {};
|
|
313
|
+
if (!isEmptyObj(pagination)) {
|
|
314
|
+
const p = {
|
|
315
|
+
[paging.currentKey || "current"]: pagination.current,
|
|
316
|
+
[paging.pageSizeKey || "size"]: pagination.pageSize
|
|
317
|
+
};
|
|
318
|
+
Object.assign(params, p);
|
|
488
319
|
}
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
var newCol = _objectSpread({}, col);
|
|
492
|
-
|
|
493
|
-
if (checkedValue.includes(col.dataIndex)) {
|
|
494
|
-
newCol.initShow = true;
|
|
495
|
-
} else {
|
|
496
|
-
newCol.initShow = false;
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
return newCol;
|
|
500
|
-
});
|
|
501
|
-
var resizeColumn = this.props.resizeColumn;
|
|
502
|
-
|
|
503
|
-
if (!resizeColumn) {
|
|
320
|
+
let ascParams = this.getSortParam(sorter, true);
|
|
321
|
+
if (isMultiple) {
|
|
504
322
|
this.setState({
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
323
|
+
sorter
|
|
324
|
+
});
|
|
325
|
+
} else if (!isMultiple && !isEmptyObj(sorter)) {
|
|
326
|
+
sorter.column && this.setState({
|
|
327
|
+
sorter: [sorter],
|
|
328
|
+
defaultSort: false
|
|
508
329
|
});
|
|
509
330
|
} else {
|
|
510
331
|
this.setState({
|
|
511
|
-
|
|
512
|
-
checkColumn: checkedValue,
|
|
513
|
-
defaultCheck: false
|
|
332
|
+
sorter: []
|
|
514
333
|
});
|
|
515
334
|
}
|
|
335
|
+
params = _objectSpread(_objectSpread(_objectSpread({}, filterParams), params), ascParams);
|
|
336
|
+
autoSort && this.store.reload({
|
|
337
|
+
params
|
|
338
|
+
});
|
|
339
|
+
};
|
|
340
|
+
const onChangeFn = this.props.onChange;
|
|
341
|
+
autoPagination && handlePagination();
|
|
342
|
+
// 用户传了onChange保留用户自主处理表格变化的权力
|
|
343
|
+
if (onChangeFn) {
|
|
344
|
+
utils.callback(onChangeFn, this, [pagination, filters, sorter, extra]);
|
|
516
345
|
}
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
var isMultiple = Array.isArray(sorter);
|
|
522
|
-
var _this$props$sortSearc = this.props.sortSearch,
|
|
523
|
-
sortSearch = _this$props$sortSearc === void 0 ? true : _this$props$sortSearc;
|
|
524
|
-
|
|
525
|
-
if (!sortSearch) {
|
|
526
|
-
return {};
|
|
527
|
-
}
|
|
346
|
+
}
|
|
347
|
+
getStore() {
|
|
348
|
+
return this.store;
|
|
349
|
+
}
|
|
528
350
|
|
|
529
|
-
|
|
530
|
-
|
|
351
|
+
/**
|
|
352
|
+
* 获取数据模型对象
|
|
353
|
+
*/
|
|
354
|
+
getModel() {
|
|
355
|
+
return this.store.getModel();
|
|
356
|
+
}
|
|
531
357
|
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
358
|
+
/**
|
|
359
|
+
* 菜单搜索过滤显示
|
|
360
|
+
* @param {String} val
|
|
361
|
+
*/
|
|
362
|
+
handleSearch(val, fieldOption, searchColor) {
|
|
363
|
+
this.setState({
|
|
364
|
+
searchText: val,
|
|
365
|
+
fieldOption: fieldOption,
|
|
366
|
+
searchColor: searchColor
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
filterColumn(checkedValue) {
|
|
370
|
+
if (checkedValue.length == 0) {
|
|
371
|
+
_message.warning("至少显示一列!");
|
|
372
|
+
return;
|
|
373
|
+
}
|
|
374
|
+
const filterColumns = this.props.columns.map(col => {
|
|
375
|
+
const newCol = _objectSpread({}, col);
|
|
376
|
+
if (checkedValue.includes(col.dataIndex)) {
|
|
377
|
+
newCol.initShow = true;
|
|
378
|
+
} else {
|
|
379
|
+
newCol.initShow = false;
|
|
547
380
|
}
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
381
|
+
return newCol;
|
|
382
|
+
});
|
|
383
|
+
const {
|
|
384
|
+
resizeColumn
|
|
385
|
+
} = this.props;
|
|
386
|
+
if (!resizeColumn) {
|
|
387
|
+
this.setState({
|
|
388
|
+
columns: filterColumns,
|
|
389
|
+
checkColumn: checkedValue,
|
|
390
|
+
defaultCheck: false
|
|
391
|
+
});
|
|
392
|
+
} else {
|
|
393
|
+
this.setState({
|
|
394
|
+
cols: filterColumns,
|
|
395
|
+
checkColumn: checkedValue,
|
|
396
|
+
defaultCheck: false
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
getSortParam(sorter) {
|
|
401
|
+
let sortState = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
|
|
402
|
+
const isMultiple = Array.isArray(sorter);
|
|
403
|
+
const {
|
|
404
|
+
sortSearch = true
|
|
405
|
+
} = this.props;
|
|
406
|
+
if (!sortSearch) {
|
|
407
|
+
return {};
|
|
408
|
+
}
|
|
409
|
+
let sortInfo = {};
|
|
410
|
+
let orderItems = [];
|
|
411
|
+
if (!isEmptyObj(sorter) && !isMultiple && sorter.column) {
|
|
412
|
+
orderItems = [{
|
|
413
|
+
column: sorter.column.field || sorter.column.dataIndex,
|
|
414
|
+
asc: sorter.order == "ascend"
|
|
415
|
+
}];
|
|
416
|
+
if (sorter.column) sortInfo[sorter.column.dataIndex] = sorter.order;
|
|
417
|
+
} else if (isMultiple) {
|
|
418
|
+
sorter.forEach(v => {
|
|
419
|
+
sortInfo[v.column.dataIndex] = v.order;
|
|
420
|
+
let field = v.column.field || v.column.dataIndex;
|
|
421
|
+
orderItems.push({
|
|
422
|
+
column: field,
|
|
423
|
+
asc: v.order == "ascend"
|
|
552
424
|
});
|
|
553
|
-
}
|
|
554
|
-
|
|
555
|
-
return {
|
|
556
|
-
orderItems: JSON.stringify(orderItems)
|
|
557
|
-
};
|
|
425
|
+
});
|
|
558
426
|
}
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
var _this5 = this;
|
|
563
|
-
|
|
564
|
-
var _this$state = this.state,
|
|
565
|
-
columns = _this$state.columns,
|
|
566
|
-
sortType = _this$state.sortType,
|
|
567
|
-
sortInfo = _this$state.sortInfo;
|
|
568
|
-
var _this$props$sortField = this.props.sortFields,
|
|
569
|
-
sortFields = _this$props$sortField === void 0 ? [] : _this$props$sortField;
|
|
570
|
-
var defaultShowCols = columns.filter(function (cols) {
|
|
571
|
-
return cols.initShow !== false;
|
|
427
|
+
if (sortState) {
|
|
428
|
+
this.setState({
|
|
429
|
+
sortInfo: sortInfo
|
|
572
430
|
});
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
431
|
+
}
|
|
432
|
+
return {
|
|
433
|
+
orderItems: JSON.stringify(orderItems)
|
|
434
|
+
};
|
|
435
|
+
}
|
|
436
|
+
getColumns() {
|
|
437
|
+
const {
|
|
438
|
+
columns,
|
|
439
|
+
sortType,
|
|
440
|
+
sortInfo
|
|
441
|
+
} = this.state;
|
|
442
|
+
const {
|
|
443
|
+
sortFields = []
|
|
444
|
+
} = this.props;
|
|
445
|
+
const defaultShowCols = columns.filter(cols => cols.initShow !== false);
|
|
446
|
+
const cols = defaultShowCols.map((col, index) => {
|
|
447
|
+
if (col.ellipsis && !col.render) {
|
|
448
|
+
col.ellipsis = {
|
|
449
|
+
showTitle: false
|
|
450
|
+
};
|
|
451
|
+
col.render = text => {
|
|
452
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
453
|
+
title: text,
|
|
454
|
+
className: getLess(styles, "nsc-table-text")
|
|
455
|
+
}, text);
|
|
456
|
+
};
|
|
457
|
+
}
|
|
458
|
+
if (sortFields.indexOf(col.dataIndex) > -1) {
|
|
459
|
+
if (sortType == "single") {
|
|
460
|
+
col.sorter = true;
|
|
461
|
+
col.sortOrder = sortInfo[col.dataIndex] ? sortInfo[col.dataIndex] : null;
|
|
462
|
+
} else if (sortType == "multiple") {
|
|
463
|
+
col.sorter = {
|
|
464
|
+
multiple: index
|
|
584
465
|
};
|
|
466
|
+
col.sortOrder = sortInfo[col.dataIndex] ? sortInfo[col.dataIndex] : null;
|
|
585
467
|
}
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
468
|
+
}
|
|
469
|
+
return col;
|
|
470
|
+
});
|
|
471
|
+
cols.map((item, index) => {
|
|
472
|
+
if (!isEmptyObj(item.filterProps)) {
|
|
473
|
+
let obj = _objectSpread({}, item);
|
|
474
|
+
const {
|
|
475
|
+
type,
|
|
476
|
+
props,
|
|
477
|
+
searchKey
|
|
478
|
+
} = item.filterProps;
|
|
479
|
+
let Div = null;
|
|
480
|
+
let text = item.title;
|
|
481
|
+
Div = getNode(type, _objectSpread(_objectSpread({
|
|
482
|
+
placeholder: "\u641C\u7D22".concat(text)
|
|
483
|
+
}, props), {}, {
|
|
484
|
+
ref: this.tableSearchRef
|
|
485
|
+
}));
|
|
486
|
+
obj = _objectSpread({
|
|
487
|
+
filterDropdown: _ref3 => {
|
|
488
|
+
let {
|
|
489
|
+
setSelectedKeys,
|
|
490
|
+
selectedKeys,
|
|
491
|
+
confirm,
|
|
492
|
+
clearFilters
|
|
493
|
+
} = _ref3;
|
|
494
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
495
|
+
className: getLess(styles, "nsc-table-search")
|
|
496
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
497
|
+
className: getLess(styles, "nsc-table-search-space")
|
|
498
|
+
}, Div), /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement(_Button, {
|
|
499
|
+
type: "primary",
|
|
500
|
+
onClick: () => {
|
|
501
|
+
var _this$tableSearchRef$;
|
|
502
|
+
confirm();
|
|
503
|
+
const {
|
|
504
|
+
filterParams
|
|
505
|
+
} = this.state;
|
|
506
|
+
let newFilterParams = _objectSpread({}, filterParams);
|
|
507
|
+
let key = item.field || item.dataIndex;
|
|
508
|
+
newFilterParams[key] = (_this$tableSearchRef$ = this.tableSearchRef.current) === null || _this$tableSearchRef$ === void 0 ? void 0 : _this$tableSearchRef$.getValue();
|
|
509
|
+
this.setState({
|
|
510
|
+
filterParams: _objectSpread({}, newFilterParams)
|
|
511
|
+
});
|
|
512
|
+
const sortParam = this.getSortParam(this.state.sorter);
|
|
513
|
+
this.store.load({
|
|
514
|
+
params: _objectSpread(_objectSpread({}, newFilterParams), sortParam)
|
|
515
|
+
});
|
|
516
|
+
},
|
|
517
|
+
size: "small",
|
|
518
|
+
className: getLess(styles, "nsc-table-search-button")
|
|
519
|
+
}, "\u67E5\u8BE2")));
|
|
520
|
+
},
|
|
521
|
+
filterIcon: () => {
|
|
522
|
+
return /*#__PURE__*/React.createElement(SearchOutlined, null);
|
|
596
523
|
}
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
className: getLess(styles, "space")
|
|
626
|
-
}, Div), /*#__PURE__*/React.createElement(_Space, null, /*#__PURE__*/React.createElement(_Button, {
|
|
627
|
-
type: "primary",
|
|
628
|
-
onClick: function onClick() {
|
|
629
|
-
var _this5$tableSearchRef;
|
|
630
|
-
|
|
631
|
-
confirm();
|
|
632
|
-
var filterParams = _this5.state.filterParams;
|
|
633
|
-
|
|
634
|
-
var newFilterParams = _objectSpread({}, filterParams);
|
|
635
|
-
|
|
636
|
-
var key = item.field || item.dataIndex;
|
|
637
|
-
newFilterParams[key] = (_this5$tableSearchRef = _this5.tableSearchRef.current) === null || _this5$tableSearchRef === void 0 ? void 0 : _this5$tableSearchRef.getValue();
|
|
638
|
-
|
|
639
|
-
_this5.setState({
|
|
640
|
-
filterParams: _objectSpread({}, newFilterParams)
|
|
641
|
-
});
|
|
642
|
-
|
|
643
|
-
var sortParam = _this5.getSortParam(_this5.state.sorter);
|
|
644
|
-
|
|
645
|
-
_this5.store.load({
|
|
646
|
-
params: _objectSpread(_objectSpread({}, newFilterParams), sortParam)
|
|
647
|
-
});
|
|
648
|
-
},
|
|
649
|
-
size: "small",
|
|
650
|
-
className: getLess(styles, "button")
|
|
651
|
-
}, "\u67E5\u8BE2")));
|
|
652
|
-
},
|
|
653
|
-
filterIcon: function filterIcon() {
|
|
654
|
-
return /*#__PURE__*/React.createElement(SearchOutlined, null);
|
|
655
|
-
}
|
|
656
|
-
}, obj);
|
|
657
|
-
cols[index] = obj;
|
|
658
|
-
}
|
|
659
|
-
});
|
|
660
|
-
return cols;
|
|
524
|
+
}, obj);
|
|
525
|
+
cols[index] = obj;
|
|
526
|
+
}
|
|
527
|
+
});
|
|
528
|
+
return cols;
|
|
529
|
+
}
|
|
530
|
+
renderToolBar() {
|
|
531
|
+
let {
|
|
532
|
+
tableSize,
|
|
533
|
+
columns,
|
|
534
|
+
sortType
|
|
535
|
+
} = this.state;
|
|
536
|
+
let {
|
|
537
|
+
filterColumn,
|
|
538
|
+
columns: colLists,
|
|
539
|
+
toolbar
|
|
540
|
+
} = this.props;
|
|
541
|
+
const {
|
|
542
|
+
tableTool,
|
|
543
|
+
storeRequestConfig = {}
|
|
544
|
+
} = config();
|
|
545
|
+
let tools = ["refresh", "size", "sort", "column"];
|
|
546
|
+
let toolsClick = {};
|
|
547
|
+
if (toolbar == true) {
|
|
548
|
+
tools = toolbar.onToolClick ? toolbar.onToolClick : ["refresh", "size", "sort", "column"];
|
|
549
|
+
} else {
|
|
550
|
+
tools = toolbar.tools ? toolbar.tools : tableTool.tools ? tableTool.tools : tools;
|
|
551
|
+
toolsClick = toolbar.onToolClick ? toolbar.onToolClick : {};
|
|
661
552
|
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
553
|
+
const sizeItem = [{
|
|
554
|
+
title: "宽松",
|
|
555
|
+
key: "default"
|
|
556
|
+
}, {
|
|
557
|
+
title: "中等",
|
|
558
|
+
key: "middle"
|
|
559
|
+
}, {
|
|
560
|
+
title: "紧凑",
|
|
561
|
+
key: "small"
|
|
562
|
+
}];
|
|
563
|
+
const sortItem = [{
|
|
564
|
+
title: "单字段排序",
|
|
565
|
+
key: "single"
|
|
566
|
+
}, {
|
|
567
|
+
title: "多字段排序",
|
|
568
|
+
key: "multiple"
|
|
569
|
+
}];
|
|
570
|
+
const sortContent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
571
|
+
className: getLess(styles, "nsc-table-cotent-title"),
|
|
572
|
+
style: {
|
|
573
|
+
cursor: this.state.defaultSort ? "not-allowed" : "pointer",
|
|
574
|
+
color: this.state.defaultSort && "rgba(0,0,0,.45)"
|
|
575
|
+
},
|
|
576
|
+
onClick: () => {
|
|
577
|
+
if (this.state.defaultSort) {
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
580
|
+
this.setState({
|
|
581
|
+
sorter: [],
|
|
582
|
+
sortInfo: {},
|
|
583
|
+
defaultSort: true
|
|
584
|
+
});
|
|
585
|
+
const params = _objectSpread({}, this.state.filterParams);
|
|
586
|
+
this.store.reload({
|
|
587
|
+
params
|
|
588
|
+
});
|
|
689
589
|
}
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
title: "中等",
|
|
696
|
-
key: "middle"
|
|
697
|
-
}, {
|
|
698
|
-
title: "紧凑",
|
|
699
|
-
key: "small"
|
|
700
|
-
}];
|
|
701
|
-
var sortItem = [{
|
|
702
|
-
title: "单字段排序",
|
|
703
|
-
key: "single"
|
|
704
|
-
}, {
|
|
705
|
-
title: "多字段排序",
|
|
706
|
-
key: "multiple"
|
|
707
|
-
}];
|
|
708
|
-
var sortContent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
709
|
-
className: getLess(styles, "cotent-title"),
|
|
710
|
-
style: {
|
|
711
|
-
cursor: this.state.defaultSort ? "not-allowed" : "pointer",
|
|
712
|
-
color: this.state.defaultSort && "rgba(0,0,0,.45)"
|
|
713
|
-
},
|
|
714
|
-
onClick: function onClick() {
|
|
715
|
-
if (_this6.state.defaultSort) {
|
|
716
|
-
return;
|
|
717
|
-
}
|
|
718
|
-
|
|
719
|
-
_this6.setState({
|
|
590
|
+
}, "\u6062\u590D\u9ED8\u8BA4\u6392\u5E8F"), sortItem.map((item, index) => {
|
|
591
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
592
|
+
key: item.key,
|
|
593
|
+
onClick: () => {
|
|
594
|
+
this.setState({
|
|
720
595
|
sorter: [],
|
|
721
596
|
sortInfo: {},
|
|
722
|
-
|
|
597
|
+
sortType: item.key,
|
|
598
|
+
defaultSort: false
|
|
723
599
|
});
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
_this6.store.reload({
|
|
728
|
-
params: params
|
|
600
|
+
const params = _objectSpread({}, this.state.filterParams);
|
|
601
|
+
this.store.reload({
|
|
602
|
+
params
|
|
729
603
|
});
|
|
730
604
|
}
|
|
731
|
-
}, "
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
onClick: function onClick() {
|
|
735
|
-
_this6.setState({
|
|
736
|
-
sorter: [],
|
|
737
|
-
sortInfo: {},
|
|
738
|
-
sortType: item.key,
|
|
739
|
-
defaultSort: false
|
|
740
|
-
});
|
|
741
|
-
|
|
742
|
-
var params = _objectSpread({}, _this6.state.filterParams);
|
|
743
|
-
|
|
744
|
-
_this6.store.reload({
|
|
745
|
-
params: params
|
|
746
|
-
});
|
|
747
|
-
}
|
|
748
|
-
}, sortType == item.key ? /*#__PURE__*/React.createElement("a", null, /*#__PURE__*/React.createElement("div", {
|
|
749
|
-
className: getLess(styles, "content-tiem")
|
|
750
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
751
|
-
style: {
|
|
752
|
-
width: 20
|
|
753
|
-
}
|
|
754
|
-
}, sortType == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.title))) : /*#__PURE__*/React.createElement("div", {
|
|
755
|
-
className: getLess(styles, "content-tiem")
|
|
756
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
757
|
-
style: {
|
|
758
|
-
width: 20
|
|
759
|
-
}
|
|
760
|
-
}), /*#__PURE__*/React.createElement("div", null, " ", item.title)));
|
|
761
|
-
}), this.state.sorter.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
762
|
-
className: getLess(styles, "cotent-title"),
|
|
605
|
+
}, sortType == item.key ? /*#__PURE__*/React.createElement("a", null, /*#__PURE__*/React.createElement("div", {
|
|
606
|
+
className: getLess(styles, "nsc-table-content-tiem")
|
|
607
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
763
608
|
style: {
|
|
764
|
-
|
|
609
|
+
width: 20
|
|
765
610
|
}
|
|
766
|
-
},
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
key: index
|
|
770
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
771
|
-
style: {
|
|
772
|
-
width: 20
|
|
773
|
-
}
|
|
774
|
-
}, item.order == "ascend" ? /*#__PURE__*/React.createElement(SortAscendingOutlined, null) : /*#__PURE__*/React.createElement(SortDescendingOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.column.title));
|
|
775
|
-
})));
|
|
776
|
-
var sizeContent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
777
|
-
className: getLess(styles, "cotent-title")
|
|
778
|
-
}, "\u8868\u683C\u5BC6\u5EA6"), sizeItem.map(function (item, index) {
|
|
779
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
780
|
-
key: item.key,
|
|
781
|
-
onClick: function onClick() {
|
|
782
|
-
_this6.setState({
|
|
783
|
-
tableSize: item.key
|
|
784
|
-
});
|
|
785
|
-
}
|
|
786
|
-
}, tableSize == item.key ? /*#__PURE__*/React.createElement("a", null, /*#__PURE__*/React.createElement("div", {
|
|
787
|
-
className: getLess(styles, "content-tiem")
|
|
788
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
789
|
-
style: {
|
|
790
|
-
width: 20
|
|
791
|
-
}
|
|
792
|
-
}, tableSize == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.title))) : /*#__PURE__*/React.createElement("div", {
|
|
793
|
-
className: getLess(styles, "content-tiem")
|
|
794
|
-
}, /*#__PURE__*/React.createElement("div", {
|
|
795
|
-
style: {
|
|
796
|
-
width: 20
|
|
797
|
-
}
|
|
798
|
-
}), /*#__PURE__*/React.createElement("div", null, " ", item.title)));
|
|
799
|
-
}));
|
|
800
|
-
var defaultShowCols = columns.filter(function (cols) {
|
|
801
|
-
return cols.initShow !== false;
|
|
802
|
-
});
|
|
803
|
-
var content = /*#__PURE__*/React.createElement(_Checkbox.Group, {
|
|
804
|
-
onChange: this.filterColumn.bind(this),
|
|
805
|
-
options: colLists.map(function (col) {
|
|
806
|
-
if (!col.dataIndex) {
|
|
807
|
-
col.dataIndex = col.title;
|
|
808
|
-
}
|
|
809
|
-
|
|
810
|
-
return {
|
|
811
|
-
label: col.title,
|
|
812
|
-
value: col.dataIndex,
|
|
813
|
-
disabled: col.filterColumn === false
|
|
814
|
-
};
|
|
815
|
-
}) // defaultValue={defaultShowCols.map((col) => col.dataIndex)}
|
|
816
|
-
,
|
|
817
|
-
value: this.state.defaultCheck ? defaultShowCols.map(function (col) {
|
|
818
|
-
return col.dataIndex;
|
|
819
|
-
}) : this.state.checkColumn
|
|
820
|
-
});
|
|
821
|
-
return /*#__PURE__*/React.createElement("div", {
|
|
822
|
-
className: getLess(styles, "table-tool-bar")
|
|
823
|
-
}, tools.indexOf("column") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
611
|
+
}, sortType == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.title))) : /*#__PURE__*/React.createElement("div", {
|
|
612
|
+
className: getLess(styles, "nsc-table-content-tiem")
|
|
613
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
824
614
|
style: {
|
|
825
|
-
|
|
615
|
+
width: 20
|
|
826
616
|
}
|
|
827
|
-
}, /*#__PURE__*/React.createElement(
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
}, /*#__PURE__*/React.createElement(
|
|
838
|
-
className: getLess(styles, "app-store-icon")
|
|
839
|
-
}))), tools.indexOf("sort") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
617
|
+
}), /*#__PURE__*/React.createElement("div", null, " ", item.title)));
|
|
618
|
+
}), this.state.sorter.length > 0 && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
619
|
+
className: getLess(styles, "nsc-table-cotent-title"),
|
|
620
|
+
style: {
|
|
621
|
+
color: "rgba(0,0,0,.45)"
|
|
622
|
+
}
|
|
623
|
+
}, "\u5F53\u524D\u6392\u5E8F"), this.state.sorter.map((item, index) => {
|
|
624
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
625
|
+
className: getLess(styles, "nsc-table-content-tiem"),
|
|
626
|
+
key: index
|
|
627
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
840
628
|
style: {
|
|
841
|
-
|
|
842
|
-
fontSize: 14
|
|
629
|
+
width: 20
|
|
843
630
|
}
|
|
844
|
-
}, /*#__PURE__*/React.createElement(
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
631
|
+
}, item.order == "ascend" ? /*#__PURE__*/React.createElement(SortAscendingOutlined, null) : /*#__PURE__*/React.createElement(SortDescendingOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.column.title));
|
|
632
|
+
})));
|
|
633
|
+
const sizeContent = /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
|
|
634
|
+
className: getLess(styles, "nsc-table-cotent-title")
|
|
635
|
+
}, "\u8868\u683C\u5BC6\u5EA6"), sizeItem.map((item, index) => {
|
|
636
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
637
|
+
key: item.key,
|
|
638
|
+
onClick: () => {
|
|
639
|
+
this.setState({
|
|
640
|
+
tableSize: item.key
|
|
641
|
+
});
|
|
642
|
+
}
|
|
643
|
+
}, tableSize == item.key ? /*#__PURE__*/React.createElement("a", null, /*#__PURE__*/React.createElement("div", {
|
|
644
|
+
className: getLess(styles, "nsc-table-content-tiem")
|
|
645
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
849
646
|
style: {
|
|
850
|
-
|
|
851
|
-
fontSize: 14
|
|
647
|
+
width: 20
|
|
852
648
|
}
|
|
853
|
-
}, /*#__PURE__*/React.createElement(
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
trigger: "click"
|
|
857
|
-
}, /*#__PURE__*/React.createElement(ColumnHeightOutlined, null))), tools.indexOf("refresh") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
649
|
+
}, tableSize == item.key && /*#__PURE__*/React.createElement(CheckOutlined, null)), /*#__PURE__*/React.createElement("div", null, " ", item.title))) : /*#__PURE__*/React.createElement("div", {
|
|
650
|
+
className: getLess(styles, "nsc-table-content-tiem")
|
|
651
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
858
652
|
style: {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
653
|
+
width: 20
|
|
654
|
+
}
|
|
655
|
+
}), /*#__PURE__*/React.createElement("div", null, " ", item.title)));
|
|
656
|
+
}));
|
|
657
|
+
const defaultShowCols = columns.filter(cols => cols.initShow !== false);
|
|
658
|
+
const content = /*#__PURE__*/React.createElement(_Checkbox.Group, {
|
|
659
|
+
onChange: this.filterColumn.bind(this),
|
|
660
|
+
options: colLists.map(col => {
|
|
661
|
+
if (!col.dataIndex) {
|
|
662
|
+
col.dataIndex = col.title;
|
|
663
|
+
}
|
|
664
|
+
return {
|
|
665
|
+
label: col.title,
|
|
666
|
+
value: col.dataIndex,
|
|
667
|
+
disabled: col.filterColumn === false
|
|
668
|
+
};
|
|
669
|
+
})
|
|
670
|
+
// defaultValue={defaultShowCols.map((col) => col.dataIndex)}
|
|
671
|
+
,
|
|
672
|
+
value: this.state.defaultCheck ? defaultShowCols.map(col => col.dataIndex) : this.state.checkColumn
|
|
673
|
+
});
|
|
674
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
675
|
+
className: getLess(styles, "nsc-table-tool-bar")
|
|
676
|
+
}, tools.indexOf("column") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
677
|
+
style: {
|
|
678
|
+
fontSize: 14
|
|
679
|
+
}
|
|
680
|
+
}, /*#__PURE__*/React.createElement(_Popover, {
|
|
681
|
+
title: "\u9009\u62E9\u663E\u793A\u7684\u5217",
|
|
682
|
+
content: content,
|
|
683
|
+
placement: "bottomRight",
|
|
684
|
+
trigger: "click",
|
|
685
|
+
overlayStyle: {
|
|
686
|
+
minWidth: 410,
|
|
687
|
+
maxWidth: 450
|
|
688
|
+
}
|
|
689
|
+
}, /*#__PURE__*/React.createElement(AppstoreOutlined, {
|
|
690
|
+
className: getLess(styles, "nsc-table-th-app-store-icon")
|
|
691
|
+
}))), tools.indexOf("sort") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
692
|
+
style: {
|
|
693
|
+
marginRight: 8,
|
|
694
|
+
fontSize: 14
|
|
695
|
+
}
|
|
696
|
+
}, /*#__PURE__*/React.createElement(_Popover, {
|
|
697
|
+
placement: "bottom",
|
|
698
|
+
content: sortContent,
|
|
699
|
+
trigger: "click"
|
|
700
|
+
}, /*#__PURE__*/React.createElement(SortAscendingOutlined, null))), tools.indexOf("size") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
701
|
+
style: {
|
|
702
|
+
marginRight: 8,
|
|
703
|
+
fontSize: 14
|
|
704
|
+
}
|
|
705
|
+
}, /*#__PURE__*/React.createElement(_Popover, {
|
|
706
|
+
placement: "bottom",
|
|
707
|
+
content: sizeContent,
|
|
708
|
+
trigger: "click"
|
|
709
|
+
}, /*#__PURE__*/React.createElement(ColumnHeightOutlined, null))), tools.indexOf("refresh") > -1 && /*#__PURE__*/React.createElement("div", {
|
|
710
|
+
style: {
|
|
711
|
+
marginRight: 8,
|
|
712
|
+
fontSize: 14,
|
|
713
|
+
cursor: "pointer"
|
|
714
|
+
},
|
|
715
|
+
onClick: () => {
|
|
716
|
+
const params = _objectSpread({}, this.state.filterParams);
|
|
717
|
+
if (toolsClick.onRefresh) {
|
|
718
|
+
toolsClick.onRefresh();
|
|
719
|
+
} else {
|
|
720
|
+
this.store.load({
|
|
721
|
+
params
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
}, /*#__PURE__*/React.createElement(RedoOutlined, null)));
|
|
726
|
+
}
|
|
727
|
+
getSelectedRowKeys() {
|
|
728
|
+
return this.state.selectedRowKeys;
|
|
729
|
+
}
|
|
730
|
+
getSelectedRowDatas() {
|
|
731
|
+
return this.state.selectedRowDatas;
|
|
732
|
+
}
|
|
733
|
+
resetSelectedRowKeys() {
|
|
734
|
+
this.setState({
|
|
735
|
+
selectedRowKeys: [],
|
|
736
|
+
selectedRowDatas: []
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
rowSelectionOnSelect(record, selected) {
|
|
740
|
+
const {
|
|
741
|
+
selectedRowKeys,
|
|
742
|
+
selectedRowDatas
|
|
743
|
+
} = this.state;
|
|
744
|
+
let {
|
|
745
|
+
rowKey = "id"
|
|
746
|
+
} = this.props;
|
|
747
|
+
let newSelectedRowKeys = [...selectedRowKeys];
|
|
748
|
+
let newSelectedRowDatas = [...selectedRowDatas];
|
|
749
|
+
if (selected) {
|
|
750
|
+
newSelectedRowKeys = [...newSelectedRowKeys, record[rowKey]];
|
|
751
|
+
newSelectedRowDatas = [...newSelectedRowDatas, record];
|
|
752
|
+
} else {
|
|
753
|
+
selectedRowKeys.map((item, index) => {
|
|
754
|
+
if (item === record[rowKey]) {
|
|
755
|
+
newSelectedRowKeys.splice(index, 1);
|
|
756
|
+
}
|
|
757
|
+
});
|
|
758
|
+
selectedRowDatas.map((item, index) => {
|
|
759
|
+
if (item[rowKey] === record[rowKey]) {
|
|
760
|
+
newSelectedRowDatas.splice(index, 1);
|
|
873
761
|
}
|
|
874
|
-
}, /*#__PURE__*/React.createElement(RedoOutlined, null)));
|
|
875
|
-
}
|
|
876
|
-
}, {
|
|
877
|
-
key: "getSelectedRowKeys",
|
|
878
|
-
value: function getSelectedRowKeys() {
|
|
879
|
-
return this.state.selectedRowKeys;
|
|
880
|
-
}
|
|
881
|
-
}, {
|
|
882
|
-
key: "getSelectedRowDatas",
|
|
883
|
-
value: function getSelectedRowDatas() {
|
|
884
|
-
return this.state.selectedRowDatas;
|
|
885
|
-
}
|
|
886
|
-
}, {
|
|
887
|
-
key: "resetSelectedRowKeys",
|
|
888
|
-
value: function resetSelectedRowKeys() {
|
|
889
|
-
this.setState({
|
|
890
|
-
selectedRowKeys: [],
|
|
891
|
-
selectedRowDatas: []
|
|
892
762
|
});
|
|
893
763
|
}
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
764
|
+
this.setState({
|
|
765
|
+
selectedRowKeys: newSelectedRowKeys,
|
|
766
|
+
selectedRowDatas: newSelectedRowDatas
|
|
767
|
+
});
|
|
768
|
+
}
|
|
769
|
+
rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
770
|
+
const {
|
|
771
|
+
selectedRowKeys,
|
|
772
|
+
selectedRowDatas
|
|
773
|
+
} = this.state;
|
|
774
|
+
const {
|
|
775
|
+
rowKey = "id"
|
|
776
|
+
} = this.props;
|
|
777
|
+
let newids = [];
|
|
778
|
+
let newdatas = [];
|
|
779
|
+
if (changeRows.length > 0) {
|
|
780
|
+
let changeIds = changeRows.map(item => item[rowKey]);
|
|
907
781
|
if (selected) {
|
|
908
|
-
|
|
909
|
-
|
|
782
|
+
newids = [...selectedRowKeys, ...changeIds];
|
|
783
|
+
newdatas = [...selectedRowDatas, ...changeRows];
|
|
910
784
|
} else {
|
|
911
|
-
selectedRowKeys.map(
|
|
912
|
-
if (item
|
|
913
|
-
|
|
785
|
+
selectedRowKeys.map((item, index) => {
|
|
786
|
+
if (changeIds.indexOf(item) == -1) {
|
|
787
|
+
newids.push(item);
|
|
914
788
|
}
|
|
915
789
|
});
|
|
916
|
-
selectedRowDatas.map(
|
|
917
|
-
if (item[rowKey]
|
|
918
|
-
|
|
790
|
+
selectedRowDatas.map((item, index) => {
|
|
791
|
+
if (changeIds.indexOf(item[rowKey]) == -1) {
|
|
792
|
+
newdatas.push(item);
|
|
919
793
|
}
|
|
920
794
|
});
|
|
921
795
|
}
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
selectedRowDatas: newSelectedRowDatas
|
|
926
|
-
});
|
|
927
|
-
}
|
|
928
|
-
}, {
|
|
929
|
-
key: "rowSelectionOnSelectAll",
|
|
930
|
-
value: function rowSelectionOnSelectAll(selected, selectedRows, changeRows) {
|
|
931
|
-
var _this$state4 = this.state,
|
|
932
|
-
selectedRowKeys = _this$state4.selectedRowKeys,
|
|
933
|
-
selectedRowDatas = _this$state4.selectedRowDatas;
|
|
934
|
-
var _this$props$rowKey2 = this.props.rowKey,
|
|
935
|
-
rowKey = _this$props$rowKey2 === void 0 ? "id" : _this$props$rowKey2;
|
|
936
|
-
var newids = [];
|
|
937
|
-
var newdatas = [];
|
|
938
|
-
|
|
939
|
-
if (changeRows.length > 0) {
|
|
940
|
-
var changeIds = changeRows.map(function (item) {
|
|
941
|
-
return item[rowKey];
|
|
942
|
-
});
|
|
943
|
-
|
|
944
|
-
if (selected) {
|
|
945
|
-
newids = [].concat(_toConsumableArray(selectedRowKeys), _toConsumableArray(changeIds));
|
|
946
|
-
newdatas = [].concat(_toConsumableArray(selectedRowDatas), _toConsumableArray(changeRows));
|
|
947
|
-
} else {
|
|
948
|
-
selectedRowKeys.map(function (item, index) {
|
|
949
|
-
if (changeIds.indexOf(item) == -1) {
|
|
950
|
-
newids.push(item);
|
|
951
|
-
}
|
|
952
|
-
});
|
|
953
|
-
selectedRowDatas.map(function (item, index) {
|
|
954
|
-
if (changeIds.indexOf(item[rowKey]) == -1) {
|
|
955
|
-
newdatas.push(item);
|
|
956
|
-
}
|
|
957
|
-
});
|
|
958
|
-
}
|
|
959
|
-
} else {
|
|
960
|
-
newids = _toConsumableArray(selectedRowKeys);
|
|
961
|
-
newdatas = _toConsumableArray(selectedRowDatas);
|
|
962
|
-
}
|
|
963
|
-
|
|
964
|
-
this.setState({
|
|
965
|
-
selectedRowKeys: _toConsumableArray(newids),
|
|
966
|
-
selectedRowDatas: _toConsumableArray(newdatas)
|
|
967
|
-
});
|
|
796
|
+
} else {
|
|
797
|
+
newids = [...selectedRowKeys];
|
|
798
|
+
newdatas = [...selectedRowDatas];
|
|
968
799
|
}
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
800
|
+
this.setState({
|
|
801
|
+
selectedRowKeys: [...newids],
|
|
802
|
+
selectedRowDatas: [...newdatas]
|
|
803
|
+
});
|
|
804
|
+
}
|
|
805
|
+
render() {
|
|
806
|
+
var _this$props$toolbar;
|
|
807
|
+
let _this = this,
|
|
808
|
+
{
|
|
809
|
+
loading,
|
|
810
|
+
dataSource,
|
|
811
|
+
pagination = {},
|
|
812
|
+
searchText,
|
|
813
|
+
fieldOption,
|
|
814
|
+
searchColor,
|
|
815
|
+
tableSize
|
|
816
|
+
} = this.state,
|
|
817
|
+
props = utils.omit(this.props, ["store", "onChange", "columns", "resetColumn", "toolbar", "sortFields", "filterColumn", "sortSearch", "showRowSelection"], {
|
|
986
818
|
rowKey: "id",
|
|
987
819
|
clickChangeColor: false
|
|
988
820
|
});
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
from = _ref5[0],
|
|
1001
|
-
to = _ref5[1];
|
|
1002
|
-
|
|
1003
|
-
// return "显示 " + from + " - " + to + "条,共 " + total + " 条";
|
|
1004
|
-
return "共 " + total + " 条";
|
|
1005
|
-
};
|
|
1006
|
-
}
|
|
1007
|
-
}
|
|
1008
|
-
|
|
1009
|
-
props.onChange = function (pagination, filters, sorter, extra) {
|
|
1010
|
-
_this.onChange(pagination, filters, sorter, extra);
|
|
1011
|
-
};
|
|
1012
|
-
|
|
1013
|
-
if (props.clickChangeColor) {
|
|
1014
|
-
var onRowFn = props.onRow;
|
|
1015
|
-
|
|
1016
|
-
props.onRow = function (record, index) {
|
|
1017
|
-
var custom = onRowFn ? onRowFn(record, index) : {};
|
|
1018
|
-
var onClickFn = custom.onClick;
|
|
1019
|
-
|
|
1020
|
-
custom.onClick = function (event) {
|
|
1021
|
-
_this.setState({
|
|
1022
|
-
activeIndex: index //获取点击行的索引
|
|
1023
|
-
|
|
1024
|
-
});
|
|
1025
|
-
|
|
1026
|
-
utils.callback(onClickFn, _this, [event]);
|
|
1027
|
-
};
|
|
1028
|
-
|
|
1029
|
-
return custom;
|
|
1030
|
-
};
|
|
1031
|
-
|
|
1032
|
-
props.rowClassName = function (record, index) {
|
|
1033
|
-
return index === _this.state.activeIndex ? "".concat(styles.clickRowStyle) : "";
|
|
821
|
+
if (props.pagination !== false) {
|
|
822
|
+
props.pagination = _objectSpread(_objectSpread({
|
|
823
|
+
position: ["bottomRight"],
|
|
824
|
+
showSizeChanger: true,
|
|
825
|
+
showQuickJumper: true
|
|
826
|
+
}, props.pagination), pagination);
|
|
827
|
+
if (props.showTotal == true) {
|
|
828
|
+
props.pagination.showTotal = function (total, _ref4) {
|
|
829
|
+
let [from, to] = _ref4;
|
|
830
|
+
// return "显示 " + from + " - " + to + "条,共 " + total + " 条";
|
|
831
|
+
return "共 " + total + " 条";
|
|
1034
832
|
};
|
|
1035
833
|
}
|
|
1036
|
-
|
|
1037
|
-
var newDataSource = [];
|
|
1038
|
-
|
|
1039
|
-
if (searchText) {
|
|
1040
|
-
var data = treeUtils.getSearchMenuDatas(this, searchText, fieldOption, searchColor);
|
|
1041
|
-
newDataSource = data.treeDatas;
|
|
1042
|
-
props.expandedRowKeys = data.openKeys;
|
|
1043
|
-
} else {
|
|
1044
|
-
newDataSource = dataSource;
|
|
1045
|
-
}
|
|
1046
|
-
|
|
1047
|
-
props.store = props.store || {};
|
|
1048
|
-
props.store.autoLoad = props.store.autoLoad === false ? false : true;
|
|
1049
|
-
var dragable = _this.props.dragable;
|
|
1050
|
-
var dragableProps = dragable === true ? {
|
|
1051
|
-
components: BodyRowComponent,
|
|
1052
|
-
onRow: function onRow(record, index) {
|
|
1053
|
-
return {
|
|
1054
|
-
index: index,
|
|
1055
|
-
record: record,
|
|
1056
|
-
moveRow: _this7.moveRow
|
|
1057
|
-
};
|
|
1058
|
-
}
|
|
1059
|
-
} : {};
|
|
1060
|
-
var resizeColumn = this.props.resizeColumn;
|
|
1061
|
-
var resizeProps = resizeColumn === true ? {
|
|
1062
|
-
components: this.components
|
|
1063
|
-
} : null;
|
|
1064
|
-
|
|
1065
|
-
var _config2 = config(),
|
|
1066
|
-
tableTool = _config2.tableTool;
|
|
1067
|
-
|
|
1068
|
-
var toolFlag = true;
|
|
1069
|
-
var toolprops = this.props.toolbar === false || ((_this$props$toolbar = this.props.toolbar) === null || _this$props$toolbar === void 0 ? void 0 : _this$props$toolbar.show) === false ? false : true;
|
|
1070
|
-
|
|
1071
|
-
if (!toolprops) {
|
|
1072
|
-
toolFlag = toolprops;
|
|
1073
|
-
} else {
|
|
1074
|
-
toolFlag = tableTool.show === false ? false : true;
|
|
1075
|
-
}
|
|
1076
|
-
|
|
1077
|
-
if (this.props.showRowSelection) {
|
|
1078
|
-
var _this$props$rowSelect = this.props.rowSelection,
|
|
1079
|
-
rowSelection = _this$props$rowSelect === void 0 ? {} : _this$props$rowSelect;
|
|
1080
|
-
props = _objectSpread(_objectSpread({}, props), {}, {
|
|
1081
|
-
rowSelection: _objectSpread({
|
|
1082
|
-
selectedRowKeys: this.state.selectedRowKeys,
|
|
1083
|
-
onSelect: this.rowSelectionOnSelect.bind(this),
|
|
1084
|
-
onSelectAll: this.rowSelectionOnSelectAll.bind(this),
|
|
1085
|
-
columnWidth: 40
|
|
1086
|
-
}, rowSelection)
|
|
1087
|
-
});
|
|
1088
|
-
}
|
|
1089
|
-
|
|
1090
|
-
var DefaultTable = /*#__PURE__*/React.createElement(React.Fragment, null, toolFlag && this.renderToolBar(), /*#__PURE__*/React.createElement(_Table, _extends({
|
|
1091
|
-
childrenColumnName: "childNodes",
|
|
1092
|
-
sheitem: true,
|
|
1093
|
-
dataSource: newDataSource,
|
|
1094
|
-
columns: this.getColumns(),
|
|
1095
|
-
loading: loading,
|
|
1096
|
-
className: styles["nsc-table"],
|
|
1097
|
-
locale: {
|
|
1098
|
-
emptyText: /*#__PURE__*/React.createElement(NoData, {
|
|
1099
|
-
className: getLess(styles, "table-nodata")
|
|
1100
|
-
})
|
|
1101
|
-
},
|
|
1102
|
-
scroll: {
|
|
1103
|
-
x: "max-content"
|
|
1104
|
-
}
|
|
1105
|
-
}, resizeProps, props, dragableProps, {
|
|
1106
|
-
size: tableSize
|
|
1107
|
-
})));
|
|
1108
|
-
return dragable === true ? /*#__PURE__*/React.createElement(DndProvider, {
|
|
1109
|
-
backend: HTML5Backend
|
|
1110
|
-
}, DefaultTable) : DefaultTable;
|
|
1111
834
|
}
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
835
|
+
props.onChange = function (pagination, filters, sorter, extra) {
|
|
836
|
+
_this.onChange(pagination, filters, sorter, extra);
|
|
837
|
+
};
|
|
838
|
+
if (props.clickChangeColor) {
|
|
839
|
+
const onRowFn = props.onRow;
|
|
840
|
+
props.onRow = function (record, index) {
|
|
841
|
+
var custom = onRowFn ? onRowFn(record, index) : {};
|
|
842
|
+
const onClickFn = custom.onClick;
|
|
843
|
+
custom.onClick = event => {
|
|
844
|
+
_this.setState({
|
|
845
|
+
activeIndex: index //获取点击行的索引
|
|
846
|
+
});
|
|
847
|
+
utils.callback(onClickFn, _this, [event]);
|
|
848
|
+
};
|
|
849
|
+
return custom;
|
|
850
|
+
};
|
|
851
|
+
props.rowClassName = function (record, index) {
|
|
852
|
+
return index === _this.state.activeIndex ? "".concat(styles["nsc-table-clickRowStyle"]) : "";
|
|
853
|
+
};
|
|
854
|
+
}
|
|
855
|
+
let newDataSource = [];
|
|
856
|
+
if (searchText) {
|
|
857
|
+
const data = treeUtils.getSearchMenuDatas(this, searchText, fieldOption, searchColor);
|
|
858
|
+
newDataSource = data.treeDatas;
|
|
859
|
+
props.expandedRowKeys = data.openKeys;
|
|
860
|
+
} else {
|
|
861
|
+
newDataSource = dataSource;
|
|
862
|
+
}
|
|
863
|
+
props.store = props.store || {};
|
|
864
|
+
props.store.autoLoad = props.store.autoLoad === false ? false : true;
|
|
865
|
+
const {
|
|
866
|
+
dragable
|
|
867
|
+
} = _this.props;
|
|
868
|
+
const dragableProps = dragable === true ? {
|
|
869
|
+
components: BodyRowComponent,
|
|
870
|
+
onRow: (record, index) => ({
|
|
871
|
+
index,
|
|
872
|
+
record,
|
|
873
|
+
moveRow: this.moveRow
|
|
874
|
+
})
|
|
875
|
+
} : {};
|
|
876
|
+
let {
|
|
877
|
+
resizeColumn
|
|
878
|
+
} = this.props;
|
|
879
|
+
const resizeProps = resizeColumn === true ? {
|
|
880
|
+
components: this.components
|
|
881
|
+
} : null;
|
|
882
|
+
const {
|
|
883
|
+
tableTool
|
|
884
|
+
} = config();
|
|
885
|
+
let toolFlag = true;
|
|
886
|
+
let toolprops = this.props.toolbar === false || ((_this$props$toolbar = this.props.toolbar) === null || _this$props$toolbar === void 0 ? void 0 : _this$props$toolbar.show) === false ? false : true;
|
|
887
|
+
if (!toolprops) {
|
|
888
|
+
toolFlag = toolprops;
|
|
889
|
+
} else {
|
|
890
|
+
toolFlag = tableTool.show === false ? false : true;
|
|
891
|
+
}
|
|
892
|
+
if (this.props.showRowSelection) {
|
|
893
|
+
const {
|
|
894
|
+
rowSelection = {}
|
|
895
|
+
} = this.props;
|
|
896
|
+
props = _objectSpread(_objectSpread({}, props), {}, {
|
|
897
|
+
rowSelection: _objectSpread({
|
|
898
|
+
selectedRowKeys: this.state.selectedRowKeys,
|
|
899
|
+
onSelect: this.rowSelectionOnSelect.bind(this),
|
|
900
|
+
onSelectAll: this.rowSelectionOnSelectAll.bind(this),
|
|
901
|
+
columnWidth: 40
|
|
902
|
+
}, rowSelection)
|
|
903
|
+
});
|
|
904
|
+
}
|
|
905
|
+
const DefaultTable = /*#__PURE__*/React.createElement("div", {
|
|
906
|
+
className: getLess(styles, "nsc-table")
|
|
907
|
+
}, toolFlag && this.renderToolBar(), /*#__PURE__*/React.createElement(_Table, _extends({
|
|
908
|
+
childrenColumnName: "childNodes",
|
|
909
|
+
sheitem: true,
|
|
910
|
+
dataSource: newDataSource,
|
|
911
|
+
columns: this.getColumns(),
|
|
912
|
+
loading: loading,
|
|
913
|
+
className: getLess(styles, "nsc-table-content"),
|
|
914
|
+
locale: {
|
|
915
|
+
emptyText: /*#__PURE__*/React.createElement(NoData, {
|
|
916
|
+
className: getLess(styles, "nsc-table-nodata")
|
|
917
|
+
})
|
|
918
|
+
},
|
|
919
|
+
scroll: {
|
|
920
|
+
x: "max-content"
|
|
921
|
+
}
|
|
922
|
+
}, resizeProps, props, dragableProps, {
|
|
923
|
+
size: tableSize
|
|
924
|
+
// pagination={false}
|
|
925
|
+
})));
|
|
926
|
+
return dragable === true ? /*#__PURE__*/React.createElement(DndProvider, {
|
|
927
|
+
backend: HTML5Backend
|
|
928
|
+
}, DefaultTable) : DefaultTable;
|
|
929
|
+
}
|
|
930
|
+
}
|
|
1117
931
|
_defineProperty(NSCTable, "defaultProps", {
|
|
1118
932
|
dragable: false,
|
|
1119
933
|
showTotal: true,
|
|
@@ -1128,6 +942,5 @@ _defineProperty(NSCTable, "defaultProps", {
|
|
|
1128
942
|
onToolClick: {}
|
|
1129
943
|
}
|
|
1130
944
|
});
|
|
1131
|
-
|
|
1132
945
|
export default withZhLocale(NSCTable);
|
|
1133
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdGFibGUvaW5kZXgudHN4Il0sIm5hbWVzIjpbIkFwcHN0b3JlT3V0bGluZWQiLCJDaGVja091dGxpbmVkIiwiQ29sdW1uSGVpZ2h0T3V0bGluZWQiLCJTZWFyY2hPdXRsaW5lZCIsIlNvcnRBc2NlbmRpbmdPdXRsaW5lZCIsIlNvcnREZXNjZW5kaW5nT3V0bGluZWQiLCJSZWRvT3V0bGluZWQiLCJpc0VtcHR5T2JqIiwiU3RvcmUiLCJQYWdlU3RvcmUiLCJ1dGlscyIsIlJlYWN0IiwiRG5kUHJvdmlkZXIiLCJCb2R5Um93IiwiRG5kQ29udGV4dFR5cGUiLCJJQm9keVJvd1Byb3BzIiwidHJlZVV0aWxzIiwic3R5bGVzIiwiQm9keVJvd0NvbXBvbmVudCIsIkhUTUw1QmFja2VuZCIsIndpdGhaaExvY2FsZSIsIlJlc2l6YWJsZSIsImdldExlc3MiLCJnZXROb2RlIiwiTm9EYXRhIiwiZ2V0U3RvcmFnZSIsImNvbmZpZyIsIlJlc2l6ZWFibGVUaXRsZSIsInByb3BzIiwib25SZXNpemUiLCJ3aWR0aCIsInJlc3RQcm9wcyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJjcmVhdGVSZWYiLCJvbkJlZm9yZUxvYWQiLCJsb2FkIiwiaGVhZGVyIiwiY2VsbCIsImluZGV4IiwiZSIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsInNldFN0YXRlIiwiZXYiLCJkYXRhIiwiSlNPTiIsInBhcnNlIiwiX3RoaXMiLCJldmVudFR5cGUiLCJwYXlsb2FkIiwidGFibGVTaXplIiwiZHJhZ0luZGV4IiwiaG92ZXJJbmRleCIsImRyYWciLCJ0YXJnZXQiLCJkcmFnTm9kZSIsInJlY29yZCIsInRhcmdldE5vZGUiLCJtb3ZlQXJyYXkiLCJpZHMiLCJwYXJlbnROb2RlIiwiZ2V0Q2hpbGROb2RlSWRzIiwicGFyYW1zIiwiaWQiLCJwYXJlbnRJZCIsImF0dHJpYnV0ZSIsIm1vdmVSb3ciLCJzdG9yZSIsInJlbG9hZCIsIm1vZGFsIiwidHlwZSIsInN0b3JlUHJlZml4IiwiYXV0b1R5cGUiLCJjb250ZW50IiwiZGF0YVNvdXJjZSIsImNvbHVtbnMiLCJsb2FkaW5nIiwicGFnaW5hdGlvbiIsImFjdGl2ZUluZGV4Iiwic2VhcmNoVGV4dCIsImZpZWxkT3B0aW9uIiwic2VhcmNoQ29sb3IiLCJzb3J0cyIsImZpbHRlclBhcmFtcyIsInNvcnRUeXBlIiwic29ydGVyIiwic29ydEluZm8iLCJkZWZhdWx0U29ydCIsImNoZWNrQ29sdW1uIiwiZGVmYXVsdENoZWNrIiwic2VsZWN0ZWRSb3dLZXlzIiwic2VsZWN0ZWRSb3dEYXRhcyIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwic3RvcmVQcm9wcyIsIm1vZGVsIiwiY29tcG9uZW50Iiwib3B0aW9ucyIsImNhbGxiYWNrIiwiZGF0YUNoYW5nZWQiLCJtb2RlbERhdGEiLCJwYWdpbmciLCJnZXRQYWdpbmF0aW9uIiwib25FcnJvckxvYWQiLCJlcnIiLCJyZXNwb25zZSIsImF1dG9Mb2FkIiwiT2JqZWN0IiwiYXNzaWduIiwiY3VycmVudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJwcmV2UHJvcHMiLCJwcmVTdGF0ZSIsInJlc2V0Q29sdW1uIiwibmV3Q29scyIsImNvbHNzIiwibWFwIiwiY29sIiwidGVtcCIsIm9uSGVhZGVyQ2VsbCIsImNvbHVtbiIsImhhbmRsZVJlc2l6ZSIsInB1c2giLCJmaWx0ZXJzIiwiZXh0cmEiLCJhdXRvT25DaGFuZ2UiLCJhdXRvU29ydCIsImF1dG9QYWdpbmF0aW9uIiwib25DaGFuZ2UiLCJpc011bHRpcGxlIiwiQXJyYXkiLCJpc0FycmF5IiwiaGFuZGxlUGFnaW5hdGlvbiIsImdldFBhZ2luYXRpb25CeVN0b3JlIiwicCIsImN1cnJlbnRLZXkiLCJwYWdlU2l6ZUtleSIsInBhZ2VTaXplIiwiYXNjUGFyYW1zIiwiZ2V0U29ydFBhcmFtIiwib25DaGFuZ2VGbiIsImdldE1vZGVsIiwidmFsIiwiY2hlY2tlZFZhbHVlIiwibGVuZ3RoIiwid2FybmluZyIsImZpbHRlckNvbHVtbnMiLCJuZXdDb2wiLCJpbmNsdWRlcyIsImRhdGFJbmRleCIsImluaXRTaG93Iiwic29ydFN0YXRlIiwic29ydFNlYXJjaCIsIm9yZGVySXRlbXMiLCJmaWVsZCIsImFzYyIsIm9yZGVyIiwiZm9yRWFjaCIsInYiLCJzdHJpbmdpZnkiLCJzb3J0RmllbGRzIiwiZGVmYXVsdFNob3dDb2xzIiwiZmlsdGVyIiwiZWxsaXBzaXMiLCJyZW5kZXIiLCJzaG93VGl0bGUiLCJ0ZXh0IiwiaW5kZXhPZiIsInNvcnRPcmRlciIsIm11bHRpcGxlIiwiaXRlbSIsImZpbHRlclByb3BzIiwib2JqIiwic2VhcmNoS2V5IiwiRGl2IiwidGl0bGUiLCJwbGFjZWhvbGRlciIsInJlZiIsInRhYmxlU2VhcmNoUmVmIiwiZmlsdGVyRHJvcGRvd24iLCJzZXRTZWxlY3RlZEtleXMiLCJzZWxlY3RlZEtleXMiLCJjb25maXJtIiwiY2xlYXJGaWx0ZXJzIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwiZmlsdGVyQ29sdW1uIiwiY29sTGlzdHMiLCJ0b29sYmFyIiwidGFibGVUb29sIiwic3RvcmVSZXF1ZXN0Q29uZmlnIiwidG9vbHMiLCJ0b29sc0NsaWNrIiwib25Ub29sQ2xpY2siLCJzaXplSXRlbSIsInNvcnRJdGVtIiwic29ydENvbnRlbnQiLCJjdXJzb3IiLCJjb2xvciIsInNpemVDb250ZW50IiwiYmluZCIsImxhYmVsIiwidmFsdWUiLCJkaXNhYmxlZCIsImZvbnRTaXplIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsIm1hcmdpblJpZ2h0Iiwib25SZWZyZXNoIiwic2VsZWN0ZWQiLCJyb3dLZXkiLCJuZXdTZWxlY3RlZFJvd0tleXMiLCJuZXdTZWxlY3RlZFJvd0RhdGFzIiwic3BsaWNlIiwic2VsZWN0ZWRSb3dzIiwiY2hhbmdlUm93cyIsIm5ld2lkcyIsIm5ld2RhdGFzIiwiY2hhbmdlSWRzIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiZnJvbSIsInRvIiwib25Sb3dGbiIsIm9uUm93IiwiY3VzdG9tIiwib25DbGlja0ZuIiwib25DbGljayIsImV2ZW50Iiwicm93Q2xhc3NOYW1lIiwiY2xpY2tSb3dTdHlsZSIsIm5ld0RhdGFTb3VyY2UiLCJnZXRTZWFyY2hNZW51RGF0YXMiLCJ0cmVlRGF0YXMiLCJleHBhbmRlZFJvd0tleXMiLCJvcGVuS2V5cyIsImRyYWdhYmxlIiwiZHJhZ2FibGVQcm9wcyIsImNvbXBvbmVudHMiLCJyZXNpemVQcm9wcyIsInRvb2xGbGFnIiwidG9vbHByb3BzIiwic2hvdyIsInNob3dSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb24iLCJvblNlbGVjdCIsInJvd1NlbGVjdGlvbk9uU2VsZWN0Iiwib25TZWxlY3RBbGwiLCJyb3dTZWxlY3Rpb25PblNlbGVjdEFsbCIsImNvbHVtbldpZHRoIiwiRGVmYXVsdFRhYmxlIiwicmVuZGVyVG9vbEJhciIsImdldENvbHVtbnMiLCJlbXB0eVRleHQiLCJ4IiwiQ29tcG9uZW50IiwiZHJhZ1VybCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQ0VBLGdCQURGLEVBRUVDLGFBRkYsRUFHRUMsb0JBSEYsRUFJRUMsY0FKRixFQUtFQyxxQkFMRixFQU1FQyxzQkFORixFQU9FQyxZQVBGLFFBUU8sbUJBUlA7QUFTQSxTQUFTQyxVQUFULFFBQTJCLG1CQUEzQjtBQUNBLE9BQU9D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RUFBRTFPO0FBQXRCLFNBQXFDd1AsWUFBckMsQ0FESyxHQUdMQSxZQUhGO0FBS0Q7Ozs7RUEzM0JvQmhRLEtBQUssQ0FBQ3FRLFM7O2dCQUF2Qi9PLFEsa0JBQ2tCO0FBQ3BCNE4sRUFBQUEsUUFBUSxFQUFFLEtBRFU7QUFFcEJqQixFQUFBQSxTQUFTLEVBQUUsSUFGUztBQUdwQnRDLEVBQUFBLFlBQVksRUFBRSxJQUhNO0FBSXBCMkUsRUFBQUEsT0FBTyxFQUFFLEVBSlc7QUFLcEJ6SSxFQUFBQSxjQUFjLEVBQUUsSUFMSTtBQU1wQkQsRUFBQUEsUUFBUSxFQUFFLElBTlU7QUFPcEJELEVBQUFBLFlBQVksRUFBRSxJQVBNO0FBUXBCcEIsRUFBQUEsWUFBWSxFQUFFLElBUk07QUFTcEJzRixFQUFBQSxPQUFPLEVBQUU7QUFDUDJELElBQUFBLElBQUksRUFBRSxJQURDO0FBRVB0RCxJQUFBQSxXQUFXLEVBQUU7QUFGTjtBQVRXLEM7O0FBNjNCeEIsZUFBZXpMLFlBQVksQ0FBQ2EsUUFBRCxDQUEzQiIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIEBEZXNjcmlwdHRpb246XHJcbiAqIEB2ZXJzaW9uOlxyXG4gKiBAQXV0aG9yOiByeHpodVxyXG4gKiBARGF0ZTogMjAyMS0wMy0yMyAwODo0NjoyMFxyXG4gKiBATGFzdEVkaXRvcnM6IHJ4emh1XHJcbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjEtMDMtMjMgMTA6MzA6NDJcclxuICovXHJcbmltcG9ydCB7XHJcbiAgQXBwc3RvcmVPdXRsaW5lZCxcclxuICBDaGVja091dGxpbmVkLFxyXG4gIENvbHVtbkhlaWdodE91dGxpbmVkLFxyXG4gIFNlYXJjaE91dGxpbmVkLFxyXG4gIFNvcnRBc2NlbmRpbmdPdXRsaW5lZCxcclxuICBTb3J0RGVzY2VuZGluZ091dGxpbmVkLFxyXG4gIFJlZG9PdXRsaW5lZCxcclxufSBmcm9tIFwiQGFudC1kZXNpZ24vaWNvbnNcIjtcclxuaW1wb3J0IHsgaXNFbXB0eU9iaiB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgU3RvcmUsIHsgUGFnZVN0b3JlLCBTdG9yZVByb3BzIH0gZnJvbSBcIkBiai1uc2MvbXNuXCI7XHJcbmltcG9ydCB7IHV0aWxzIH0gZnJvbSBcIkBiai1uc2MvbXNuL2xpYi91dGlsc1wiO1xyXG5pbXBvcnQge1xyXG4gIEJ1dHRvbixcclxuICBDaGVja2JveCxcclxuICBDaGVja2JveE9wdGlvblR5cGUsXHJcbiAgTWVudSxcclxuICBtZXNzYWdlLFxyXG4gIFBvcG92ZXIsXHJcbiAgU3BhY2UsXHJcbiAgVGFibGUsXHJcbiAgVGFibGVQcm9wcyxcclxuICBUb29sdGlwLFxyXG59IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IENvbHVtblR5cGUsIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCJhbnRkL2xpYi90YWJsZVwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtZG5kXCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCB0cmVlVXRpbHMgZnJvbSBcIi4uLy4uL3RyZWVVdGlsc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmNvbnN0IHsgQm9keVJvd0NvbXBvbmVudCwgSFRNTDVCYWNrZW5kIH0gPSBCb2R5Um93O1xyXG5pbXBvcnQgd2l0aFpoTG9jYWxlIGZyb20gXCIuLi9jb21tb24vd2l0aFpoTG9jYWxlXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgTm9EYXRhIGZyb20gXCIuLi8uLi9iYXNlL2NvbW1vbi9Ob0RhdGFcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IEVsbGlwc2VDZWxsIGZyb20gXCIuLi9jb21tb24vRWxsaXBzZUNlbGxcIjtcclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9vbEJhclByb3BzIHtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHRvb2xzPzogQXJyYXk8c3RyaW5nPjtcclxuICBvblRvb2xDbGljaz86IHsgb25SZWZyZXNoPzogYW55OyBvblNvcnQ/OiBhbnkgfTtcclxufVxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG4gIHNvcnRGaWVsZHM/OiBBcnJheTxzdHJpbmc+OyAvL+mcgOimgeaOkuW6j+eahOWtl+autUluZGV4XHJcbiAgdG9vbGJhcj86IFRvb2xCYXJQcm9wcyB8IGJvb2xlYW47XHJcbiAgYXV0b1NpemU/OiBib29sZWFuO1xyXG4gIHNvcnRTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpua3u+WKoOaOkuW6j+afpeivoizpu5jorqR0cnVlXHJcbiAgLy8gdGFibGVTaXplPzogXCJzbWFsbFwiIHwgXCJtaWRkbGVcIiB8IFwiZGVmYXVsdFwiIHwgXCJhdXRvXCI7XHJcbiAgLy8gc2l6ZT86IFwic21hbGxcIiB8IFwibWlkZGxlXCIgfCBcImRlZmF1bHRcIiB8IFwiYXV0b1wiO1xyXG4gIHNob3dSb3dTZWxlY3Rpb24/OiBib29sZWFuO1xyXG4gIHJvd0tleT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgSU5TQ1RhYmxlUHJvcHMgPSB0eXBlb2YgTlNDVGFibGUuZGVmYXVsdFByb3BzICYgTlNDVGFibGVQcm9wcztcclxuZXhwb3J0IHsgRG5kQ29udGV4dFR5cGUsIElCb2R5Um93UHJvcHMgfTtcclxuXHJcbmNvbnN0IFJlc2l6ZWFibGVUaXRsZSA9IChwcm9wczogYW55KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc2l6ZSwgd2lkdGgsIC4uLnJlc3RQcm9wcyB9ID0gcHJvcHM7XHJcbiAgcmV0dXJuIChcclxuICAgIDxSZXNpemFibGVcclxuICAgICAgd2lkdGg9e3dpZHRoIHx8IDE1MH1cclxuICAgICAgaGVpZ2h0PXswfVxyXG4gICAgICBvblJlc2l6ZT17b25SZXNpemV9XHJcbiAgICAgIGRyYWdnYWJsZU9wdHM9e3sgZW5hYmxlVXNlclNlbGVjdEhhY2s6IGZhbHNlIH19XHJcbiAgICA+XHJcbiAgICAgIDx0aCB7Li4ucmVzdFByb3BzfSAvPlxyXG4gICAgPC9SZXNpemFibGU+XHJcbiAgKTtcclxufTtcclxuY2xhc3MgTlNDVGFibGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8SU5TQ1RhYmxlUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICBkcmFnYWJsZTogZmFsc2UsXHJcbiAgICBzaG93VG90YWw6IHRydWUsXHJcbiAgICBmaWx0ZXJDb2x1bW46IHRydWUsXHJcbiAgICBkcmFnVXJsOiBcIlwiLFxyXG4gICAgYXV0b1BhZ2luYXRpb246IHRydWUsXHJcbiAgICBhdXRvU29ydDogdHJ1ZSxcclxuICAgIGF1dG9PbkNoYW5nZTogdHJ1ZSxcclxuICAgIHJlc2l6ZUNvbHVtbjogdHJ1ZSxcclxuICAgIHRvb2xiYXI6IHtcclxuICAgICAgc2hvdzogdHJ1ZSxcclxuICAgICAgb25Ub29sQ2xpY2s6IHt9IGFzIGFueSxcclxuICAgIH0gYXMgYW55LFxyXG4gIH07XHJcblxyXG4gIHN0b3JlID0ge30gYXMgU3RvcmVQcm9wcztcclxuICB0aEljb25SZWYgPSBSZWFjdC5jcmVhdGVSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XHJcbiAgdGFibGVTZWFyY2hSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG5cclxuICBsaXN0ZW5lcnMgPSB7XHJcbiAgICBvbkJlZm9yZUxvYWQ6IG51bGwsXHJcbiAgICBsb2FkOiBudWxsLFxyXG4gIH07XHJcblxyXG4gIGNvbXBvbmVudHMgPSB7XHJcbiAgICBoZWFkZXI6IHtcclxuICAgICAgY2VsbDogUmVzaXplYWJsZVRpdGxlLFxyXG4gICAgfSxcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgbGV0IG1vZGFsID0gcHJvcHMudHlwZSB8fCBcImF1dG9cIjtcclxuICAgIGxldCBzdG9yZVByZWZpeCA9IGdldFN0b3JhZ2UoXCJzdG9yZS1wcmUta2V5XCIpO1xyXG4gICAgbGV0IGF1dG9UeXBlID0gZ2V0U3RvcmFnZShcclxuICAgICAgc3RvcmVQcmVmaXggPyBzdG9yZVByZWZpeCArIFwidGFibGVTaXplXCIgOiBcInRhYmxlU2l6ZVwiXHJcbiAgICApO1xyXG4gICAgYXV0b1R5cGUgPSBhdXRvVHlwZT8uY29udGVudDtcclxuICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgIGRhdGFTb3VyY2U6IFtdLFxyXG4gICAgICBjb2x1bW5zOiBbXSxcclxuICAgICAgbG9hZGluZzogZmFsc2UsXHJcbiAgICAgIHBhZ2luYXRpb246IHt9LFxyXG4gICAgICBhY3RpdmVJbmRleDogLTEsXHJcbiAgICAgIC8v5pCc57Si5paH5pysXHJcbiAgICAgIHNlYXJjaFRleHQ6IG51bGwsXHJcbiAgICAgIGZpZWxkT3B0aW9uOiBudWxsLFxyXG4gICAgICBzZWFyY2hDb2xvcjogbnVsbCxcclxuICAgICAgY29sczogW10sXHJcbiAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgZmlsdGVyUGFyYW1zOiB7fSxcclxuICAgICAgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfHwgYXV0b1R5cGUgfHwgXCJkZWZhdWx0XCIsXHJcbiAgICAgIHNvcnRUeXBlOiBcInNpbmdsZVwiLFxyXG4gICAgICBzb3J0ZXI6IFtdLCAvL+iusOW9leW9k+WJjeaOkuW6j+Wtl+autVxyXG4gICAgICBzb3J0SW5mbzoge30sXHJcbiAgICAgIGRlZmF1bHRTb3J0OiB0cnVlLFxyXG4gICAgICBjaGVja0NvbHVtbjogW10sXHJcbiAgICAgIGRlZmF1bHRDaGVjazogdHJ1ZSxcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICB9O1xyXG4gICAgaWYgKHByb3BzLnN0b3JlIGluc3RhbmNlb2YgU3RvcmUpIHtcclxuICAgICAgdGhpcy5zdG9yZSA9IHByb3BzLnN0b3JlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgeyBsaXN0ZW5lcnM6IGxpc3RlbmVyc1Byb3BzID0ge30sIC4uLnJlc3RTdG9yZSB9ID1cclxuICAgICAgICBwcm9wcy5zdG9yZSB8fCB7fTtcclxuICAgICAgY29uc3Qgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICBtb2RlbDogXCJtb2RlbFwiLFxyXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcclxuICAgICAgICBsaXN0ZW5lcnM6IHtcclxuICAgICAgICAgIG9uQmVmb3JlTG9hZDogKHN0b3JlLCBvcHRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkJlZm9yZUxvYWQsIHRoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFnaW5nID0gISh0aGlzLnByb3BzLnBhZ2luYXRpb24gPT09IGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2luZyAmJiAhdGhpcy5wcm9wcy5kYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBtb2RlbERhdGEsXHJcbiAgICAgICAgICAgICAgICBwYWdpbmF0aW9uOiBzdG9yZS5nZXRQYWdpbmF0aW9uKCksXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhLCBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMuZGF0YUNoYW5nZWQsIHRoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgICBwYWdpbmcsXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLmxvYWQsIHRoaXMsIFtkYXRhLCBtb2RlbERhdGEsIHN0b3JlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgb25FcnJvckxvYWQ6IChlcnIsIHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBsb2FkaW5nOiBmYWxzZSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMub25FcnJvckxvYWQsIHRoaXMsIFtlcnIsIHJlc3BvbnNlXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGF0YTogcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgID8gcmVzdFN0b3JlLmRhdGFcclxuICAgICAgICAgIDogcHJvcHMuZGF0YVNvdXJjZVxyXG4gICAgICAgICAgPyBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA6IG51bGwsXHJcbiAgICAgICAgLi4ucmVzdFN0b3JlLFxyXG4gICAgICAgIGF1dG9Mb2FkOiByZXN0U3RvcmUuYXV0b0xvYWQgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlLFxyXG4gICAgICB9O1xyXG4gICAgICB0aGlzLnN0b3JlID0gbmV3IFBhZ2VTdG9yZShcclxuICAgICAgICBPYmplY3QuYXNzaWduKHt9LCBzdG9yZVByb3BzLCB7XHJcbiAgICAgICAgICBwYWdpbmF0aW9uOiB7IGN1cnJlbnQ6IDEsIC4uLnRoaXMucHJvcHMucGFnaW5hdGlvbiB9LFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVSZXNpemUgPVxyXG4gICAgKGluZGV4OiBhbnkpID0+XHJcbiAgICAoZTogYW55LCB7IHNpemUgfTogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHsgY29scyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgY29uc3QgbmV4dENvbHVtbnMgPSBbLi4uY29sc107XHJcbiAgICAgIG5leHRDb2x1bW5zW2luZGV4XSA9IHtcclxuICAgICAgICAuLi5uZXh0Q29sdW1uc1tpbmRleF0sXHJcbiAgICAgICAgd2lkdGg6IHNpemUud2lkdGgsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGNvbHM6IG5leHRDb2x1bW5zLFxyXG4gICAgICB9KTtcclxuICAgIH07XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHsgY29sczogWy4uLnRoaXMucHJvcHMuY29sdW1uc10gfSk7XHJcbiAgICB9XHJcbiAgICBjb25zdCBzdG9yZSA9IHRoaXMucHJvcHMuc3RvcmU7XHJcbiAgICBpZiAoc3RvcmUgJiYgc3RvcmUuZGF0YSkge1xyXG4gICAgICB0aGlzLnN0b3JlLnNldERhdGEoc3RvcmUuZGF0YSk7XHJcbiAgICB9XHJcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5saXN0ZW5NZXNzYWdlKTtcclxuICB9XHJcbiAgbGlzdGVuTWVzc2FnZSA9IChldikgPT4ge1xyXG4gICAgY29uc3QgZGF0YSA9IHR5cGVvZiBldi5kYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShldi5kYXRhKSA6IGV2LmRhdGE7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzO1xyXG4gICAgaWYgKGRhdGEuZXZlbnRUeXBlID09IFwiY2hhbmdlVGFibGVTaXplXCIpIHtcclxuICAgICAgY29uc3QgeyBwYXlsb2FkIH0gPSBkYXRhO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwiZGVmYXVsdFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwic21hbGxcIiB8fFxyXG4gICAgICAgIHBheWxvYWQuc2l6ZSA9PSBcIm1pZGRsZVwiXHJcbiAgICAgICkge1xyXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiBwYXlsb2FkLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9O1xyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMsIHByZVN0YXRlKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHVtbnM6IHRoaXMucHJvcHMuY29sdW1ucyB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHByZVN0YXRlLmNvbHMgIT09IHRoaXMuc3RhdGUuY29scykge1xyXG4gICAgICAgIHRoaXMucmVzZXRDb2x1bW4oKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5wcm9wcy5jb2x1bW5zICE9PSBwcmV2UHJvcHMuY29sdW1ucykge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiB0aGlzLnByb3BzLmNvbHVtbnMgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByZXZQcm9wcy5zaXplICE9PSB0aGlzLnByb3BzLnNpemUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgdGFibGVTaXplOiB0aGlzLnByb3BzLnNpemUgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlc2V0Q29sdW1uKCkge1xyXG4gICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgbmV3Q29sczogYW55ID0gW107XHJcbiAgICBsZXQgY29sc3MgPSBjb2xzIHx8IFtdO1xyXG4gICAgY29sc3MubWFwKChjb2w6IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHtcclxuICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgb25IZWFkZXJDZWxsOiAoY29sdW1uOiB7IHdpZHRoOiBhbnkgfSkgPT4gKHtcclxuICAgICAgICAgIHdpZHRoOiBjb2x1bW4ud2lkdGgsXHJcbiAgICAgICAgICBvblJlc2l6ZTogdGhpcy5oYW5kbGVSZXNpemUoaW5kZXgpLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICB9O1xyXG4gICAgICBuZXdDb2xzLnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBjb2x1bW5zOiBuZXdDb2xzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmuIXpmaTpgInkuK3popzoibJcclxuICAgKi9cclxuICBjbGVhclNlbGVjdENvbG9yKCkge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7IGFjdGl2ZUluZGV4OiAtMSB9KTtcclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRQYWdpbmF0aW9uKCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGF1dG9PbkNoYW5nZSA9IHRydWUsXHJcbiAgICAgIGF1dG9Tb3J0LFxyXG4gICAgICBhdXRvUGFnaW5hdGlvbixcclxuICAgICAgb25DaGFuZ2UsXHJcbiAgICAgIHN0b3JlLFxyXG4gICAgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGZpbHRlclBhcmFtcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IGlzTXVsdGlwbGUgPSBBcnJheS5pc0FycmF5KHNvcnRlcik7XHJcbiAgICBpZiAoYXV0b09uQ2hhbmdlID09PSBmYWxzZSB8fCAhc3RvcmUpIHtcclxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGhhbmRsZVBhZ2luYXRpb24gPSAoKSA9PiB7XHJcbiAgICAgIGxldCBwYXJhbXMgPSB7fSBhcyB7XHJcbiAgICAgICAgc2l6ZT86IHN0cmluZztcclxuICAgICAgICBwYWdlU2l6ZT86IHN0cmluZztcclxuICAgICAgICBhc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIGRlc2NzPzogc3RyaW5nO1xyXG4gICAgICAgIFtwcm9wTmFtZTogc3RyaW5nXTogc3RyaW5nO1xyXG4gICAgICB9O1xyXG4gICAgICBjb25zdCBwYWdpbmcgPSB0aGlzLmdldFBhZ2luYXRpb25CeVN0b3JlKCkgfHwge307XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihwYWdpbmF0aW9uKSkge1xyXG4gICAgICAgIGNvbnN0IHAgPSB7XHJcbiAgICAgICAgICBbcGFnaW5nLmN1cnJlbnRLZXkgfHwgXCJjdXJyZW50XCJdOiBwYWdpbmF0aW9uLmN1cnJlbnQsXHJcbiAgICAgICAgICBbcGFnaW5nLnBhZ2VTaXplS2V5IHx8IFwic2l6ZVwiXTogcGFnaW5hdGlvbi5wYWdlU2l6ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGFyYW1zLCBwKTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgYXNjUGFyYW1zID0gdGhpcy5nZXRTb3J0UGFyYW0oc29ydGVyLCB0cnVlKTtcclxuICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyIH0pO1xyXG4gICAgICB9IGVsc2UgaWYgKCFpc011bHRpcGxlICYmICFpc0VtcHR5T2JqKHNvcnRlcikpIHtcclxuICAgICAgICBzb3J0ZXIuY29sdW1uICYmXHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgc29ydGVyOiBbc29ydGVyXSwgZGVmYXVsdFNvcnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtdIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zLCAuLi5wYXJhbXMsIC4uLmFzY1BhcmFtcyB9O1xyXG4gICAgICBhdXRvU29ydCAmJiB0aGlzLnN0b3JlLnJlbG9hZCh7IHBhcmFtcyB9KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25DaGFuZ2VGbiA9IHRoaXMucHJvcHMub25DaGFuZ2U7XHJcblxyXG4gICAgYXV0b1BhZ2luYXRpb24gJiYgaGFuZGxlUGFnaW5hdGlvbigpO1xyXG4gICAgLy8g55So5oi35Lyg5LqGb25DaGFuZ2Xkv53nlZnnlKjmiLfoh6rkuLvlpITnkIbooajmoLzlj5jljJbnmoTmnYPliptcclxuICAgIGlmIChvbkNoYW5nZUZuKSB7XHJcbiAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2hhbmdlRm4sIHRoaXMsIFtwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5pWw5o2u5qih5Z6L5a+56LGhXHJcbiAgICovXHJcbiAgZ2V0TW9kZWwoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRNb2RlbCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I+c5Y2V5pCc57Si6L+H5ruk5pi+56S6XHJcbiAgICogQHBhcmFtIHtTdHJpbmd9IHZhbFxyXG4gICAqL1xyXG4gIGhhbmRsZVNlYXJjaCh2YWwsIGZpZWxkT3B0aW9uLCBzZWFyY2hDb2xvcikge1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlYXJjaFRleHQ6IHZhbCxcclxuICAgICAgZmllbGRPcHRpb246IGZpZWxkT3B0aW9uLFxyXG4gICAgICBzZWFyY2hDb2xvcjogc2VhcmNoQ29sb3IsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaooeWdl+WIl+ihqOenu+WKqOaOkuW6j1xyXG4gICAqL1xyXG4gIG1vdmVSb3cgPSAoZHJhZ0luZGV4LCBob3ZlckluZGV4LCBkcmFnLCB0YXJnZXQpID0+IHtcclxuICAgIGNvbnN0IF90aGlzID0gdGhpcztcclxuICAgIGxldCBkcmFnTm9kZSA9IGRyYWcucmVjb3JkO1xyXG4gICAgbGV0IHRhcmdldE5vZGUgPSB0YXJnZXQucmVjb3JkO1xyXG4gICAgZHJhZ05vZGUubW92ZUFycmF5KGRyYWdOb2RlLCB0YXJnZXROb2RlKTtcclxuICAgIGxldCBpZHMgPSBkcmFnTm9kZS5wYXJlbnROb2RlLmdldENoaWxkTm9kZUlkcygpO1xyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgaWQ6IGRyYWdOb2RlLmlkLFxyXG4gICAgICBwYXJlbnRJZDogZHJhZ05vZGUuYXR0cmlidXRlLnBhcmVudElkLFxyXG4gICAgICBpZHM6IGlkcyxcclxuICAgIH07XHJcblxyXG4gICAgaWYgKHRoaXMucHJvcHMubW92ZVJvdykge1xyXG4gICAgICB0aGlzLnByb3BzLm1vdmVSb3cocGFyYW1zKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc3RvcmUucmVsb2FkKCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZmlsdGVyQ29sdW1uKGNoZWNrZWRWYWx1ZSkge1xyXG4gICAgaWYgKGNoZWNrZWRWYWx1ZS5sZW5ndGggPT0gMCkge1xyXG4gICAgICBtZXNzYWdlLndhcm5pbmcoXCLoh7PlsJHmmL7npLrkuIDliJfvvIFcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IGZpbHRlckNvbHVtbnMgPSB0aGlzLnByb3BzLmNvbHVtbnMubWFwKChjb2w6IENvbHVtblR5cGU8e30+KSA9PiB7XHJcbiAgICAgIGNvbnN0IG5ld0NvbCA9IHsgLi4uY29sIH0gYXMgQ29sdW1uVHlwZTx7fT4gJiB7IGluaXRTaG93OiBib29sZWFuIH07XHJcbiAgICAgIGlmIChjaGVja2VkVmFsdWUuaW5jbHVkZXMoY29sLmRhdGFJbmRleCkpIHtcclxuICAgICAgICBuZXdDb2wuaW5pdFNob3cgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdDb2w7XHJcbiAgICB9KTtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sdW1uczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogZmlsdGVyQ29sdW1ucyxcclxuICAgICAgICBjaGVja0NvbHVtbjogY2hlY2tlZFZhbHVlLFxyXG4gICAgICAgIGRlZmF1bHRDaGVjazogZmFsc2UsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBnZXRTb3J0UGFyYW0oc29ydGVyLCBzb3J0U3RhdGUgPSBmYWxzZSkge1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGNvbnN0IHsgc29ydFNlYXJjaCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXNvcnRTZWFyY2gpIHtcclxuICAgICAgcmV0dXJuIHt9O1xyXG4gICAgfVxyXG4gICAgbGV0IHNvcnRJbmZvID0ge307XHJcbiAgICBsZXQgb3JkZXJJdGVtcyA9IFtdO1xyXG4gICAgaWYgKCFpc0VtcHR5T2JqKHNvcnRlcikgJiYgIWlzTXVsdGlwbGUgJiYgc29ydGVyLmNvbHVtbikge1xyXG4gICAgICBvcmRlckl0ZW1zID0gW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNvbHVtbjogc29ydGVyLmNvbHVtbi5maWVsZCB8fCBzb3J0ZXIuY29sdW1uLmRhdGFJbmRleCxcclxuICAgICAgICAgIGFzYzogc29ydGVyLm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSxcclxuICAgICAgXTtcclxuICAgICAgaWYgKHNvcnRlci5jb2x1bW4pIHNvcnRJbmZvW3NvcnRlci5jb2x1bW4uZGF0YUluZGV4XSA9IHNvcnRlci5vcmRlcjtcclxuICAgIH0gZWxzZSBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICBzb3J0ZXIuZm9yRWFjaCgodikgPT4ge1xyXG4gICAgICAgIHNvcnRJbmZvW3YuY29sdW1uLmRhdGFJbmRleF0gPSB2Lm9yZGVyO1xyXG4gICAgICAgIGxldCBmaWVsZCA9IHYuY29sdW1uLmZpZWxkIHx8IHYuY29sdW1uLmRhdGFJbmRleDtcclxuICAgICAgICBvcmRlckl0ZW1zLnB1c2goe1xyXG4gICAgICAgICAgY29sdW1uOiBmaWVsZCxcclxuICAgICAgICAgIGFzYzogdi5vcmRlciA9PSBcImFzY2VuZFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmIChzb3J0U3RhdGUpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgc29ydEluZm86IHNvcnRJbmZvLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiB7IG9yZGVySXRlbXM6IEpTT04uc3RyaW5naWZ5KG9yZGVySXRlbXMpIH07XHJcbiAgfVxyXG4gIGdldENvbHVtbnMoKSB7XHJcbiAgICBjb25zdCB7IGNvbHVtbnMsIHNvcnRUeXBlLCBzb3J0SW5mbyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgc29ydEZpZWxkcyA9IFtdIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZGVmYXVsdFNob3dDb2xzID0gY29sdW1ucy5maWx0ZXIoKGNvbHMpID0+IGNvbHMuaW5pdFNob3cgIT09IGZhbHNlKTtcclxuICAgIGNvbnN0IGNvbHMgPSBkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wsIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmIChjb2wuZWxsaXBzaXMgJiYgIWNvbC5yZW5kZXIpIHtcclxuICAgICAgICBjb2wuZWxsaXBzaXMgPSB7XHJcbiAgICAgICAgICBzaG93VGl0bGU6IGZhbHNlLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sLnJlbmRlciA9ICh0ZXh0KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2IHRpdGxlPXt0ZXh0fSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNvcnRGaWVsZHMuaW5kZXhPZihjb2wuZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHNvcnRUeXBlID09IFwic2luZ2xlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc29ydFR5cGUgPT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0geyBtdWx0aXBsZTogaW5kZXggfTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gICAgY29scy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihpdGVtLmZpbHRlclByb3BzKSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzZWFyY2hLZXkgfSA9IGl0ZW0uZmlsdGVyUHJvcHM7XHJcbiAgICAgICAgbGV0IERpdiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRleHQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgIERpdiA9IGdldE5vZGUodHlwZSwge1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGDmkJzntKIke3RleHR9YCxcclxuICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgcmVmOiB0aGlzLnRhYmxlU2VhcmNoUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIGZpbHRlckRyb3Bkb3duOiAoe1xyXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgY29uZmlybSxcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXJzLFxyXG4gICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJzZWFyY2hcIil9PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInNwYWNlXCIpfT57RGl2fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFNwYWNlPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0ZpbHRlclBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaXRlbS5maWVsZCB8fCBpdGVtLmRhdGFJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbHRlclBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlYXJjaFJlZi5jdXJyZW50Py5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydFBhcmFtID0gdGhpcy5nZXRTb3J0UGFyYW0odGhpcy5zdGF0ZS5zb3J0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcywgLi4uc29ydFBhcmFtIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJidXR0b25cIil9XHJcbiAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICDmn6Xor6JcclxuICAgICAgICAgICAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L1NwYWNlPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZpbHRlckljb246ICgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIDxTZWFyY2hPdXRsaW5lZCAvPjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5vYmosXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2xzW2luZGV4XSA9IG9iajtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gY29scztcclxuICB9XHJcbiAgcmVuZGVyVG9vbEJhcigpIHtcclxuICAgIGxldCB7IHRhYmxlU2l6ZSwgY29sdW1ucywgc29ydFR5cGUgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyBmaWx0ZXJDb2x1bW4sIGNvbHVtbnM6IGNvbExpc3RzLCB0b29sYmFyIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyB0YWJsZVRvb2wsIHN0b3JlUmVxdWVzdENvbmZpZyA9IHt9IH0gPSBjb25maWcoKTtcclxuICAgIGxldCB0b29scyA9IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIGxldCB0b29sc0NsaWNrID0ge30gYXMgYW55O1xyXG4gICAgaWYgKHRvb2xiYXIgPT0gdHJ1ZSkge1xyXG4gICAgICB0b29scyA9IHRvb2xiYXIub25Ub29sQ2xpY2tcclxuICAgICAgICA/IHRvb2xiYXIub25Ub29sQ2xpY2tcclxuICAgICAgICA6IFtcInJlZnJlc2hcIiwgXCJzaXplXCIsIFwic29ydFwiLCBcImNvbHVtblwiXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRvb2xzID0gdG9vbGJhci50b29sc1xyXG4gICAgICAgID8gdG9vbGJhci50b29sc1xyXG4gICAgICAgIDogdGFibGVUb29sLnRvb2xzXHJcbiAgICAgICAgPyB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA6IHRvb2xzO1xyXG4gICAgICB0b29sc0NsaWNrID0gdG9vbGJhci5vblRvb2xDbGljayA/IHRvb2xiYXIub25Ub29sQ2xpY2sgOiB7fTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNpemVJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWuveadvlwiLCBrZXk6IFwiZGVmYXVsdFwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi5Lit562JXCIsIGtleTogXCJtaWRkbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIue0p+WHkVwiLCBrZXk6IFwic21hbGxcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRJdGVtID0gW1xyXG4gICAgICB7IHRpdGxlOiBcIuWNleWtl+auteaOkuW6j1wiLCBrZXk6IFwic2luZ2xlXCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLlpJrlrZfmrrXmjpLluo9cIiwga2V5OiBcIm11bHRpcGxlXCIgfSxcclxuICAgIF07XHJcbiAgICBjb25zdCBzb3J0Q29udGVudCA9IChcclxuICAgICAgPD5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgICAge3RoaXMuc3RhdGUuc29ydGVyLmxlbmd0aCA+IDAgJiYgKFxyXG4gICAgICAgICAgPD5cclxuICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9IGtleT17aW5kZXh9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb3RlbnQtdGl0bGVcIil9PuihqOagvOWvhuW6pjwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PlxyXG4gICAgICAgICAgICAgICAgICAgICAge3RhYmxlU2l6ZSA9PSBpdGVtLmtleSAmJiA8Q2hlY2tPdXRsaW5lZCAvPn1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJjb250ZW50LXRpZW1cIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBkZWZhdWx0U2hvd0NvbHMgPSBjb2x1bW5zLmZpbHRlcigoY29scykgPT4gY29scy5pbml0U2hvdyAhPT0gZmFsc2UpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSAoXHJcbiAgICAgIDxDaGVja2JveC5Hcm91cFxyXG4gICAgICAgIG9uQ2hhbmdlPXt0aGlzLmZpbHRlckNvbHVtbi5iaW5kKHRoaXMpfVxyXG4gICAgICAgIG9wdGlvbnM9e2NvbExpc3RzLm1hcChcclxuICAgICAgICAgIChjb2w6IENvbHVtblR5cGU8e30+ICYgeyBmaWx0ZXJDb2x1bW46IGJvb2xlYW47IGRhdGFJbmRleDogYW55IH0pID0+IHtcclxuICAgICAgICAgICAgaWYgKCFjb2wuZGF0YUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgY29sLmRhdGFJbmRleCA9IGNvbC50aXRsZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBjb2wudGl0bGUsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGNvbC5kYXRhSW5kZXgsXHJcbiAgICAgICAgICAgICAgZGlzYWJsZWQ6IGNvbC5maWx0ZXJDb2x1bW4gPT09IGZhbHNlLFxyXG4gICAgICAgICAgICB9IGFzIENoZWNrYm94T3B0aW9uVHlwZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICApfVxyXG4gICAgICAgIC8vIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sKSA9PiBjb2wuZGF0YUluZGV4KX1cclxuICAgICAgICB2YWx1ZT17XHJcbiAgICAgICAgICB0aGlzLnN0YXRlLmRlZmF1bHRDaGVja1xyXG4gICAgICAgICAgICA/IGRlZmF1bHRTaG93Q29scy5tYXAoKGNvbCkgPT4gY29sLmRhdGFJbmRleClcclxuICAgICAgICAgICAgOiB0aGlzLnN0YXRlLmNoZWNrQ29sdW1uXHJcbiAgICAgICAgfVxyXG4gICAgICA+PC9DaGVja2JveC5Hcm91cD5cclxuICAgICk7XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwidGFibGUtdG9vbC1iYXJcIil9PlxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwiY29sdW1uXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCLpgInmi6nmmL7npLrnmoTliJdcIlxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXHJcbiAgICAgICAgICAgICAgb3ZlcmxheVN0eWxlPXt7IG1pbldpZHRoOiA0MTAsIG1heFdpZHRoOiA0NTAgfX1cclxuICAgICAgICAgICAgICAvLyBnZXRQb3B1cENvbnRhaW5lcj17KCkgPT4gdGhpcy50aEljb25SZWYuY3VycmVudH1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxBcHBzdG9yZU91dGxpbmVkIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiYXBwLXN0b3JlLWljb25cIil9IC8+XHJcbiAgICAgICAgICAgIDwvUG9wb3Zlcj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgICAge3Rvb2xzLmluZGV4T2YoXCJzb3J0XCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBtYXJnaW5SaWdodDogOCwgZm9udFNpemU6IDE0IH19PlxyXG4gICAgICAgICAgICA8UG9wb3ZlciBwbGFjZW1lbnQ9XCJib3R0b21cIiBjb250ZW50PXtzb3J0Q29udGVudH0gdHJpZ2dlcj1cImNsaWNrXCI+XHJcbiAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic2l6ZVwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c2l6ZUNvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxDb2x1bW5IZWlnaHRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwicmVmcmVzaFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCwgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgIGlmICh0b29sc0NsaWNrLm9uUmVmcmVzaCkge1xyXG4gICAgICAgICAgICAgICAgdG9vbHNDbGljay5vblJlZnJlc2goKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAgPFJlZG9PdXRsaW5lZCAvPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXM7XHJcbiAgfVxyXG4gIGdldFNlbGVjdGVkUm93RGF0YXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0RhdGFzO1xyXG4gIH1cclxuICByZXNldFNlbGVjdGVkUm93S2V5cygpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdChyZWNvcmQ6IGFueSwgc2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBsZXQgeyByb3dLZXkgPSBcImlkXCIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICBsZXQgbmV3U2VsZWN0ZWRSb3dEYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzXTtcclxuICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0tleXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dLZXlzLCByZWNvcmRbcm93S2V5XV07XHJcbiAgICAgIG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4ubmV3U2VsZWN0ZWRSb3dEYXRhcywgcmVjb3JkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5cy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChpdGVtW3Jvd0tleV0gPT09IHJlY29yZFtyb3dLZXldKSB7XHJcbiAgICAgICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IG5ld1NlbGVjdGVkUm93S2V5cyxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogbmV3U2VsZWN0ZWRSb3dEYXRhcyxcclxuICAgIH0pO1xyXG4gIH1cclxuICByb3dTZWxlY3Rpb25PblNlbGVjdEFsbChzZWxlY3RlZDogYW55LCBzZWxlY3RlZFJvd3M6IGFueSwgY2hhbmdlUm93czogYW55KSB7XHJcbiAgICBjb25zdCB7IHNlbGVjdGVkUm93S2V5cywgc2VsZWN0ZWRSb3dEYXRhcyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld2lkczogYW55ID0gW107XHJcbiAgICBsZXQgbmV3ZGF0YXM6IGFueSA9IFtdO1xyXG4gICAgaWYgKGNoYW5nZVJvd3MubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgY2hhbmdlSWRzID0gY2hhbmdlUm93cy5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbVtyb3dLZXldKTtcclxuICAgICAgaWYgKHNlbGVjdGVkKSB7XHJcbiAgICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5cywgLi4uY2hhbmdlSWRzXTtcclxuICAgICAgICBuZXdkYXRhcyA9IFsuLi5zZWxlY3RlZFJvd0RhdGFzLCAuLi5jaGFuZ2VSb3dzXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChjaGFuZ2VJZHMuaW5kZXhPZihpdGVtKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdpZHMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBzZWxlY3RlZFJvd0RhdGFzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbVtyb3dLZXldKSA9PSAtMSkge1xyXG4gICAgICAgICAgICBuZXdkYXRhcy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdpZHMgPSBbLi4uc2VsZWN0ZWRSb3dLZXlzXTtcclxuICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbLi4ubmV3aWRzXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogWy4uLm5ld2RhdGFzXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXIoKSB7XHJcbiAgICBsZXQgX3RoaXMgPSB0aGlzLFxyXG4gICAgICB7XHJcbiAgICAgICAgbG9hZGluZyxcclxuICAgICAgICBkYXRhU291cmNlLFxyXG4gICAgICAgIHBhZ2luYXRpb24gPSB7fSxcclxuICAgICAgICBzZWFyY2hUZXh0LFxyXG4gICAgICAgIGZpZWxkT3B0aW9uLFxyXG4gICAgICAgIHNlYXJjaENvbG9yLFxyXG4gICAgICAgIHRhYmxlU2l6ZSxcclxuICAgICAgfSA9IHRoaXMuc3RhdGUsXHJcbiAgICAgIHByb3BzID0gdXRpbHMub21pdChcclxuICAgICAgICB0aGlzLnByb3BzLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFwic3RvcmVcIixcclxuICAgICAgICAgIFwib25DaGFuZ2VcIixcclxuICAgICAgICAgIFwiY29sdW1uc1wiLFxyXG4gICAgICAgICAgXCJyZXNldENvbHVtblwiLFxyXG4gICAgICAgICAgXCJ0b29sYmFyXCIsXHJcbiAgICAgICAgICBcInNvcnRGaWVsZHNcIixcclxuICAgICAgICAgIFwiZmlsdGVyQ29sdW1uXCIsXHJcbiAgICAgICAgICBcInNvcnRTZWFyY2hcIixcclxuICAgICAgICAgIFwic2hvd1Jvd1NlbGVjdGlvblwiLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgcm93S2V5OiBcImlkXCIsXHJcbiAgICAgICAgICBjbGlja0NoYW5nZUNvbG9yOiBmYWxzZSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICBpZiAocHJvcHMucGFnaW5hdGlvbiAhPT0gZmFsc2UpIHtcclxuICAgICAgcHJvcHMucGFnaW5hdGlvbiA9IHtcclxuICAgICAgICBwb3NpdGlvbjogW1wiYm90dG9tUmlnaHRcIl0sXHJcbiAgICAgICAgc2hvd1NpemVDaGFuZ2VyOiB0cnVlLFxyXG4gICAgICAgIHNob3dRdWlja0p1bXBlcjogdHJ1ZSxcclxuICAgICAgICAuLi5wcm9wcy5wYWdpbmF0aW9uLFxyXG4gICAgICAgIC4uLnBhZ2luYXRpb24sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmIChwcm9wcy5zaG93VG90YWwgPT0gdHJ1ZSkge1xyXG4gICAgICAgIHByb3BzLnBhZ2luYXRpb24uc2hvd1RvdGFsID0gZnVuY3Rpb24gKHRvdGFsLCBbZnJvbSwgdG9dKSB7XHJcbiAgICAgICAgICAvLyByZXR1cm4gXCLmmL7npLogXCIgKyBmcm9tICsgXCIgLSBcIiArIHRvICsgXCLmnaHvvIzlhbEgXCIgKyB0b3RhbCArIFwiIOadoVwiO1xyXG4gICAgICAgICAgcmV0dXJuIFwi5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBwcm9wcy5vbkNoYW5nZSA9IGZ1bmN0aW9uIChwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKSB7XHJcbiAgICAgIF90aGlzLm9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpO1xyXG4gICAgfTtcclxuICAgIGlmIChwcm9wcy5jbGlja0NoYW5nZUNvbG9yKSB7XHJcbiAgICAgIGNvbnN0IG9uUm93Rm4gPSBwcm9wcy5vblJvdztcclxuICAgICAgcHJvcHMub25Sb3cgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBjdXN0b20gPSBvblJvd0ZuID8gb25Sb3dGbihyZWNvcmQsIGluZGV4KSA6IHt9O1xyXG4gICAgICAgIGNvbnN0IG9uQ2xpY2tGbiA9IGN1c3RvbS5vbkNsaWNrO1xyXG4gICAgICAgIGN1c3RvbS5vbkNsaWNrID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGFjdGl2ZUluZGV4OiBpbmRleCwgLy/ojrflj5bngrnlh7vooYznmoTntKLlvJVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdXRpbHMuY2FsbGJhY2sob25DbGlja0ZuLCBfdGhpcywgW2V2ZW50XSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICByZXR1cm4gY3VzdG9tO1xyXG4gICAgICB9O1xyXG4gICAgICBwcm9wcy5yb3dDbGFzc05hbWUgPSBmdW5jdGlvbiAocmVjb3JkLCBpbmRleCkge1xyXG4gICAgICAgIHJldHVybiBpbmRleCA9PT0gX3RoaXMuc3RhdGUuYWN0aXZlSW5kZXhcclxuICAgICAgICAgID8gYCR7c3R5bGVzLmNsaWNrUm93U3R5bGV9YFxyXG4gICAgICAgICAgOiBcIlwiO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgbGV0IG5ld0RhdGFTb3VyY2UgPSBbXTtcclxuICAgIGlmIChzZWFyY2hUZXh0KSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0cmVlVXRpbHMuZ2V0U2VhcmNoTWVudURhdGFzKFxyXG4gICAgICAgIHRoaXMsXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvclxyXG4gICAgICApO1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YS50cmVlRGF0YXM7XHJcbiAgICAgIHByb3BzLmV4cGFuZGVkUm93S2V5cyA9IGRhdGEub3BlbktleXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBuZXdEYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgIH1cclxuICAgIHByb3BzLnN0b3JlID0gcHJvcHMuc3RvcmUgfHwge307XHJcbiAgICBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9IHByb3BzLnN0b3JlLmF1dG9Mb2FkID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIGNvbnN0IHsgZHJhZ2FibGUgfSA9IF90aGlzLnByb3BzO1xyXG4gICAgY29uc3QgZHJhZ2FibGVQcm9wcyA9XHJcbiAgICAgIGRyYWdhYmxlID09PSB0cnVlXHJcbiAgICAgICAgPyB7XHJcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IEJvZHlSb3dDb21wb25lbnQsXHJcbiAgICAgICAgICAgIG9uUm93OiAocmVjb3JkLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgICBpbmRleCxcclxuICAgICAgICAgICAgICByZWNvcmQsXHJcbiAgICAgICAgICAgICAgbW92ZVJvdzogdGhpcy5tb3ZlUm93LFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgIH1cclxuICAgICAgICA6IHt9O1xyXG4gICAgbGV0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG5cclxuICAgIGNvbnN0IHJlc2l6ZVByb3BzID1cclxuICAgICAgcmVzaXplQ29sdW1uID09PSB0cnVlID8geyBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHMgfSA6IG51bGw7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCB9ID0gY29uZmlnKCk7XHJcbiAgICBsZXQgdG9vbEZsYWcgPSB0cnVlO1xyXG4gICAgbGV0IHRvb2xwcm9wcyA9XHJcbiAgICAgIHRoaXMucHJvcHMudG9vbGJhciA9PT0gZmFsc2UgfHwgdGhpcy5wcm9wcy50b29sYmFyPy5zaG93ID09PSBmYWxzZVxyXG4gICAgICAgID8gZmFsc2VcclxuICAgICAgICA6IHRydWU7XHJcbiAgICBpZiAoIXRvb2xwcm9wcykge1xyXG4gICAgICB0b29sRmxhZyA9IHRvb2xwcm9wcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRvb2xGbGFnID0gdGFibGVUb29sLnNob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMucHJvcHMuc2hvd1Jvd1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCB7IHJvd1NlbGVjdGlvbiA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgICBwcm9wcyA9IHtcclxuICAgICAgICAuLi5wcm9wcyxcclxuICAgICAgICByb3dTZWxlY3Rpb246IHtcclxuICAgICAgICAgIHNlbGVjdGVkUm93S2V5czogdGhpcy5zdGF0ZS5zZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgICAgICBvblNlbGVjdDogdGhpcy5yb3dTZWxlY3Rpb25PblNlbGVjdC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgb25TZWxlY3RBbGw6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3RBbGwuYmluZCh0aGlzKSxcclxuICAgICAgICAgIGNvbHVtbldpZHRoOiA0MCxcclxuICAgICAgICAgIC4uLnJvd1NlbGVjdGlvbixcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgY29uc3QgRGVmYXVsdFRhYmxlID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIHt0b29sRmxhZyAmJiB0aGlzLnJlbmRlclRvb2xCYXIoKX1cclxuICAgICAgICA8VGFibGVcclxuICAgICAgICAgIGNoaWxkcmVuQ29sdW1uTmFtZT1cImNoaWxkTm9kZXNcIlxyXG4gICAgICAgICAgc2hlaXRlbVxyXG4gICAgICAgICAgZGF0YVNvdXJjZT17bmV3RGF0YVNvdXJjZX1cclxuICAgICAgICAgIGNvbHVtbnM9e3RoaXMuZ2V0Q29sdW1ucygpfVxyXG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cclxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzW1wibnNjLXRhYmxlXCJdfVxyXG4gICAgICAgICAgbG9jYWxlPXt7XHJcbiAgICAgICAgICAgIGVtcHR5VGV4dDogPE5vRGF0YSBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInRhYmxlLW5vZGF0YVwiKX0gLz4sXHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgc2Nyb2xsPXt7IHg6IFwibWF4LWNvbnRlbnRcIiB9fVxyXG4gICAgICAgICAgey4uLnJlc2l6ZVByb3BzfVxyXG4gICAgICAgICAgey4uLnByb3BzfVxyXG4gICAgICAgICAgey4uLmRyYWdhYmxlUHJvcHN9XHJcbiAgICAgICAgICBzaXplPXt0YWJsZVNpemV9XHJcbiAgICAgICAgLz5cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG5cclxuICAgIHJldHVybiBkcmFnYWJsZSA9PT0gdHJ1ZSA/IChcclxuICAgICAgPERuZFByb3ZpZGVyIGJhY2tlbmQ9e0hUTUw1QmFja2VuZH0+e0RlZmF1bHRUYWJsZX08L0RuZFByb3ZpZGVyPlxyXG4gICAgKSA6IChcclxuICAgICAgRGVmYXVsdFRhYmxlXHJcbiAgICApO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgd2l0aFpoTG9jYWxlKE5TQ1RhYmxlKTtcclxuIl19
|
|
946
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBcHBzdG9yZU91dGxpbmVkIiwiQ2hlY2tPdXRsaW5lZCIsIkNvbHVtbkhlaWdodE91dGxpbmVkIiwiU2VhcmNoT3V0bGluZWQiLCJTb3J0QXNjZW5kaW5nT3V0bGluZWQiLCJTb3J0RGVzY2VuZGluZ091dGxpbmVkIiwiUmVkb091dGxpbmVkIiwiaXNFbXB0eU9iaiIsIlN0b3JlIiwiUGFnZVN0b3JlIiwidXRpbHMiLCJSZWFjdCIsIkRuZFByb3ZpZGVyIiwiQm9keVJvdyIsIkRuZENvbnRleHRUeXBlIiwiSUJvZHlSb3dQcm9wcyIsInRyZWVVdGlscyIsIkJvZHlSb3dDb21wb25lbnQiLCJIVE1MNUJhY2tlbmQiLCJ3aXRoWmhMb2NhbGUiLCJSZXNpemFibGUiLCJnZXRMZXNzIiwiZ2V0Tm9kZSIsIk5vRGF0YSIsImdldFN0b3JhZ2UiLCJjb25maWciLCJzdHlsZXMiLCJSZXNpemVhYmxlVGl0bGUiLCJwcm9wcyIsIm9uUmVzaXplIiwid2lkdGgiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJjcmVhdGVFbGVtZW50IiwiaGVpZ2h0IiwiZHJhZ2dhYmxlT3B0cyIsImVuYWJsZVVzZXJTZWxlY3RIYWNrIiwiTlNDVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsIl9hdXRvVHlwZSIsIl9kZWZpbmVQcm9wZXJ0eSIsImNyZWF0ZVJlZiIsIm9uQmVmb3JlTG9hZCIsImxvYWQiLCJoZWFkZXIiLCJjZWxsIiwiaW5kZXgiLCJlIiwiX3JlZiIsInNpemUiLCJjb2xzIiwic3RhdGUiLCJuZXh0Q29sdW1ucyIsIl9vYmplY3RTcHJlYWQiLCJzZXRTdGF0ZSIsImV2IiwiZGF0YSIsIkpTT04iLCJwYXJzZSIsIl90aGlzIiwiZXZlbnRUeXBlIiwicGF5bG9hZCIsInRhYmxlU2l6ZSIsImRyYWdJbmRleCIsImhvdmVySW5kZXgiLCJkcmFnIiwidGFyZ2V0IiwiZHJhZ05vZGUiLCJyZWNvcmQiLCJ0YXJnZXROb2RlIiwibW92ZUFycmF5IiwiaWRzIiwicGFyZW50Tm9kZSIsImdldENoaWxkTm9kZUlkcyIsInBhcmFtcyIsImlkIiwicGFyZW50SWQiLCJhdHRyaWJ1dGUiLCJtb3ZlUm93Iiwic3RvcmUiLCJyZWxvYWQiLCJtb2RhbCIsInR5cGUiLCJzdG9yZVByZWZpeCIsImF1dG9UeXBlIiwiY29udGVudCIsImRhdGFTb3VyY2UiLCJjb2x1bW5zIiwibG9hZGluZyIsInBhZ2luYXRpb24iLCJhY3RpdmVJbmRleCIsInNlYXJjaFRleHQiLCJmaWVsZE9wdGlvbiIsInNlYXJjaENvbG9yIiwic29ydHMiLCJmaWx0ZXJQYXJhbXMiLCJzb3J0VHlwZSIsInNvcnRlciIsInNvcnRJbmZvIiwiZGVmYXVsdFNvcnQiLCJjaGVja0NvbHVtbiIsImRlZmF1bHRDaGVjayIsInNlbGVjdGVkUm93S2V5cyIsInNlbGVjdGVkUm93RGF0YXMiLCJfcmVmMiIsImxpc3RlbmVycyIsImxpc3RlbmVyc1Byb3BzIiwicmVzdFN0b3JlIiwiX2V4Y2x1ZGVkMiIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9wdGlvbnMiLCJjYWxsYmFjayIsImRhdGFDaGFuZ2VkIiwibW9kZWxEYXRhIiwicGFnaW5nIiwiZ2V0UGFnaW5hdGlvbiIsIm9uRXJyb3JMb2FkIiwiZXJyIiwicmVzcG9uc2UiLCJhdXRvTG9hZCIsIk9iamVjdCIsImFzc2lnbiIsImN1cnJlbnQiLCJjb21wb25lbnREaWRNb3VudCIsInJlc2l6ZUNvbHVtbiIsInNldERhdGEiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwibGlzdGVuTWVzc2FnZSIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsInByZVN0YXRlIiwicmVzZXRDb2x1bW4iLCJuZXdDb2xzIiwiY29sc3MiLCJtYXAiLCJjb2wiLCJ0ZW1wIiwib25IZWFkZXJDZWxsIiwiY29sdW1uIiwiaGFuZGxlUmVzaXplIiwicHVzaCIsImNsZWFyU2VsZWN0Q29sb3IiLCJnZXRQYWdpbmF0aW9uQnlTdG9yZSIsIm9uQ2hhbmdlIiwiZmlsdGVycyIsImV4dHJhIiwiYXV0b09uQ2hhbmdlIiwiYXV0b1NvcnQiLCJhdXRvUGFnaW5hdGlvbiIsImlzTXVsdGlwbGUiLCJBcnJheSIsImlzQXJyYXkiLCJoYW5kbGVQYWdpbmF0aW9uIiwicCIsImN1cnJlbnRLZXkiLCJwYWdlU2l6ZUtleSIsInBhZ2VTaXplIiwiYXNjUGFyYW1zIiwiZ2V0U29ydFBhcmFtIiwib25DaGFuZ2VGbiIsImdldFN0b3JlIiwiZ2V0TW9kZWwiLCJoYW5kbGVTZWFyY2giLCJ2YWwiLCJmaWx0ZXJDb2x1bW4iLCJjaGVja2VkVmFsdWUiLCJsZW5ndGgiLCJfbWVzc2FnZSIsIndhcm5pbmciLCJmaWx0ZXJDb2x1bW5zIiwibmV3Q29sIiwiaW5jbHVkZXMiLCJkYXRhSW5kZXgiLCJpbml0U2hvdyIsInNvcnRTdGF0ZSIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInNvcnRTZWFyY2giLCJvcmRlckl0ZW1zIiwiZmllbGQiLCJhc2MiLCJvcmRlciIsImZvckVhY2giLCJ2Iiwic3RyaW5naWZ5IiwiZ2V0Q29sdW1ucyIsInNvcnRGaWVsZHMiLCJkZWZhdWx0U2hvd0NvbHMiLCJmaWx0ZXIiLCJlbGxpcHNpcyIsInJlbmRlciIsInNob3dUaXRsZSIsInRleHQiLCJ0aXRsZSIsImNsYXNzTmFtZSIsImluZGV4T2YiLCJzb3J0T3JkZXIiLCJtdWx0aXBsZSIsIml0ZW0iLCJmaWx0ZXJQcm9wcyIsIm9iaiIsInNlYXJjaEtleSIsIkRpdiIsInBsYWNlaG9sZGVyIiwiY29uY2F0IiwicmVmIiwidGFibGVTZWFyY2hSZWYiLCJmaWx0ZXJEcm9wZG93biIsIl9yZWYzIiwic2V0U2VsZWN0ZWRLZXlzIiwic2VsZWN0ZWRLZXlzIiwiY29uZmlybSIsImNsZWFyRmlsdGVycyIsIl9TcGFjZSIsIl9CdXR0b24iLCJvbkNsaWNrIiwiX3RoaXMkdGFibGVTZWFyY2hSZWYkIiwibmV3RmlsdGVyUGFyYW1zIiwia2V5IiwiZ2V0VmFsdWUiLCJzb3J0UGFyYW0iLCJmaWx0ZXJJY29uIiwicmVuZGVyVG9vbEJhciIsImNvbExpc3RzIiwidG9vbGJhciIsInRhYmxlVG9vbCIsInN0b3JlUmVxdWVzdENvbmZpZyIsInRvb2xzIiwidG9vbHNDbGljayIsIm9uVG9vbENsaWNrIiwic2l6ZUl0ZW0iLCJzb3J0SXRlbSIsInNvcnRDb250ZW50IiwiRnJhZ21lbnQiLCJzdHlsZSIsImN1cnNvciIsImNvbG9yIiwic2l6ZUNvbnRlbnQiLCJfQ2hlY2tib3giLCJHcm91cCIsImJpbmQiLCJsYWJlbCIsInZhbHVlIiwiZGlzYWJsZWQiLCJmb250U2l6ZSIsIl9Qb3BvdmVyIiwicGxhY2VtZW50IiwidHJpZ2dlciIsIm92ZXJsYXlTdHlsZSIsIm1pbldpZHRoIiwibWF4V2lkdGgiLCJtYXJnaW5SaWdodCIsIm9uUmVmcmVzaCIsImdldFNlbGVjdGVkUm93S2V5cyIsImdldFNlbGVjdGVkUm93RGF0YXMiLCJyZXNldFNlbGVjdGVkUm93S2V5cyIsInJvd1NlbGVjdGlvbk9uU2VsZWN0Iiwic2VsZWN0ZWQiLCJyb3dLZXkiLCJuZXdTZWxlY3RlZFJvd0tleXMiLCJuZXdTZWxlY3RlZFJvd0RhdGFzIiwic3BsaWNlIiwicm93U2VsZWN0aW9uT25TZWxlY3RBbGwiLCJzZWxlY3RlZFJvd3MiLCJjaGFuZ2VSb3dzIiwibmV3aWRzIiwibmV3ZGF0YXMiLCJjaGFuZ2VJZHMiLCJfdGhpcyRwcm9wcyR0b29sYmFyIiwib21pdCIsImNsaWNrQ2hhbmdlQ29sb3IiLCJwb3NpdGlvbiIsInNob3dTaXplQ2hhbmdlciIsInNob3dRdWlja0p1bXBlciIsInNob3dUb3RhbCIsInRvdGFsIiwiX3JlZjQiLCJmcm9tIiwidG8iLCJvblJvd0ZuIiwib25Sb3ciLCJjdXN0b20iLCJvbkNsaWNrRm4iLCJldmVudCIsInJvd0NsYXNzTmFtZSIsIm5ld0RhdGFTb3VyY2UiLCJnZXRTZWFyY2hNZW51RGF0YXMiLCJ0cmVlRGF0YXMiLCJleHBhbmRlZFJvd0tleXMiLCJvcGVuS2V5cyIsImRyYWdhYmxlIiwiZHJhZ2FibGVQcm9wcyIsImNvbXBvbmVudHMiLCJyZXNpemVQcm9wcyIsInRvb2xGbGFnIiwidG9vbHByb3BzIiwic2hvdyIsInNob3dSb3dTZWxlY3Rpb24iLCJyb3dTZWxlY3Rpb24iLCJvblNlbGVjdCIsIm9uU2VsZWN0QWxsIiwiY29sdW1uV2lkdGgiLCJEZWZhdWx0VGFibGUiLCJfVGFibGUiLCJfZXh0ZW5kcyIsImNoaWxkcmVuQ29sdW1uTmFtZSIsInNoZWl0ZW0iLCJsb2NhbGUiLCJlbXB0eVRleHQiLCJzY3JvbGwiLCJ4IiwiYmFja2VuZCIsImRyYWdVcmwiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9iYXNlL3RhYmxlL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBARGVzY3JpcHR0aW9uOlxyXG4gKiBAdmVyc2lvbjpcclxuICogQEF1dGhvcjogcnh6aHVcclxuICogQERhdGU6IDIwMjEtMDMtMjMgMDg6NDY6MjBcclxuICogQExhc3RFZGl0b3JzOiByeHpodVxyXG4gKiBATGFzdEVkaXRUaW1lOiAyMDIxLTAzLTIzIDEwOjMwOjQyXHJcbiAqL1xyXG5pbXBvcnQge1xyXG4gIEFwcHN0b3JlT3V0bGluZWQsXHJcbiAgQ2hlY2tPdXRsaW5lZCxcclxuICBDb2x1bW5IZWlnaHRPdXRsaW5lZCxcclxuICBTZWFyY2hPdXRsaW5lZCxcclxuICBTb3J0QXNjZW5kaW5nT3V0bGluZWQsXHJcbiAgU29ydERlc2NlbmRpbmdPdXRsaW5lZCxcclxuICBSZWRvT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCB7IGlzRW1wdHlPYmogfSBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFBhZ2VTdG9yZSwgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IHtcclxuICBCdXR0b24sXHJcbiAgQ2hlY2tib3gsXHJcbiAgQ2hlY2tib3hPcHRpb25UeXBlLFxyXG4gIE1lbnUsXHJcbiAgbWVzc2FnZSxcclxuICBQYWdpbmF0aW9uLFxyXG4gIFBvcG92ZXIsXHJcbiAgU3BhY2UsXHJcbiAgVGFibGUsXHJcbiAgVGFibGVQcm9wcyxcclxuICBUb29sdGlwLFxyXG59IGZyb20gXCJhbnRkXCI7XHJcbmltcG9ydCB7IENvbHVtblR5cGUsIFRhYmxlUGFnaW5hdGlvbkNvbmZpZyB9IGZyb20gXCJhbnRkL2xpYi90YWJsZVwiO1xyXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IHsgRG5kUHJvdmlkZXIgfSBmcm9tIFwicmVhY3QtZG5kXCI7XHJcbmltcG9ydCBCb2R5Um93LCB7IERuZENvbnRleHRUeXBlLCBJQm9keVJvd1Byb3BzIH0gZnJvbSBcIi4uL2NvbW1vbi9Cb2R5Um93XCI7XHJcbmltcG9ydCB0cmVlVXRpbHMgZnJvbSBcIi4uLy4uL3RyZWVVdGlsc1wiO1xyXG5pbXBvcnQgXCIuL2luZGV4Lm1vZHVsZS5sZXNzXCI7XHJcbmNvbnN0IHsgQm9keVJvd0NvbXBvbmVudCwgSFRNTDVCYWNrZW5kIH0gPSBCb2R5Um93O1xyXG5pbXBvcnQgd2l0aFpoTG9jYWxlIGZyb20gXCIuLi9jb21tb24vd2l0aFpoTG9jYWxlXCI7XHJcbmltcG9ydCB7IFJlc2l6YWJsZSB9IGZyb20gXCJyZWFjdC1yZXNpemFibGVcIjtcclxuaW1wb3J0IFwiLi9yZXNpemUubW9kdWxlLmxlc3NcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcywgZ2V0Tm9kZSB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgTm9EYXRhIGZyb20gXCIuLi8uLi9iYXNlL2NvbW1vbi9Ob0RhdGFcIjtcclxuaW1wb3J0IHsgZ2V0U3RvcmFnZSB9IGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY29uZmlnIGZyb20gXCIuLi8uLi9jb25maWdcIjtcclxuaW1wb3J0IEVsbGlwc2VDZWxsIGZyb20gXCIuLi9jb21tb24vRWxsaXBzZUNlbGxcIjtcclxuY29uc3Qgc3R5bGVzID0gbnVsbDtcclxuaW50ZXJmYWNlIElEcmFnUGFyYW1zIHtcclxuICBpZDogc3RyaW5nIHwgbnVtYmVyO1xyXG4gIGlkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjtcclxuICBwYXJlbnRJZDogc3RyaW5nIHwgbnVtYmVyO1xyXG59XHJcbi8vIGludGVyZmFjZSBTdG9yZVByb3BzIHt9XHJcblxyXG5leHBvcnQgdHlwZSBTdG9yZVR5cGUgPSBcIlBhZ2VTdG9yZVwiIHwgXCJUcmVlU3RvcmVcIiB8IFwiQmFzZVN0b3JlXCI7XHJcblxyXG5pbnRlcmZhY2UgTlNDVGFibGVQYWdpbmF0aW9uIGV4dGVuZHMgVGFibGVQYWdpbmF0aW9uQ29uZmlnIHtcclxuICB0b3RhbEtleT86IHN0cmluZztcclxuICBwYWdlU2l6ZUtleT86IHN0cmluZztcclxuICBjdXJyZW50S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVG9vbEJhclByb3BzIHtcclxuICBzaG93OiBib29sZWFuO1xyXG4gIHRvb2xzPzogQXJyYXk8c3RyaW5nPjtcclxuICBvblRvb2xDbGljaz86IHsgb25SZWZyZXNoPzogYW55OyBvblNvcnQ/OiBhbnkgfTtcclxufVxyXG5pbnRlcmZhY2UgTlNDVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlUHJvcHM8YW55PiB7XHJcbiAgc3RvcmU/OiBTdG9yZVByb3BzO1xyXG4gIHNob3dUb3RhbD86IGJvb2xlYW47IC8vIOaYr+WQpuaYvuekuuaAu+adoeaVsOS/oeaBr++8jOm7mOiupHRydWVcclxuICBkcmFnYWJsZT86IGJvb2xlYW47IC8vIOaYr+WQpuWPr+aLluWKqCwg6buY6K6kZmFsc2VcclxuICBmaWx0ZXJDb2x1bW4/OiBib29sZWFuOyAvLyDmmK/lkKbmlK/mjIHov4fmu6TmmL7npLrooajmoLzliJcsIOm7mOiupHRydWVcclxuICBtb3ZlUm93PzogKHBhcmFtczogSURyYWdQYXJhbXMpID0+IHZvaWQ7IC8vIOaLluaLveWujOaIkOWQjueahOWbnuiwg1xyXG4gIGRyYWdVcmw/OiBzdHJpbmc7IC8vIOS/neWtmOaLluaLveaOkuW6j+eahOaOpeWPo1xyXG4gIHBhZ2luYXRpb24/OiBmYWxzZSB8IE5TQ1RhYmxlUGFnaW5hdGlvbjtcclxuICBhdXRvUGFnaW5hdGlvbj86IGJvb2xlYW47IC8vIOe7hOS7tuaYr+WQpuiHquWKqOWkhOeQhuWIhumhtVxyXG4gIGF1dG9Tb3J0PzogYm9vbGVhbjsgLy/nu4Tku7bmmK/lkKboh6rliqjlpITnkIbmjpLluo9cclxuICBhdXRvT25DaGFuZ2U/OiBib29sZWFuOyAvLyDnu4Tku7bmmK/lkKboh6rliqhvbkNoYW5nZSwgZmFsc2XliJnkuI3lgZrku7vkvZXlpITnkIblhajpg6jkuqTnu5nosIPnlKjmlrlcclxuICByZXNpemVDb2x1bW4/OiBib29sZWFuO1xyXG4gIHNvcnRGaWVsZHM/OiBBcnJheTxzdHJpbmc+OyAvL+mcgOimgeaOkuW6j+eahOWtl+autUluZGV4XHJcbiAgdG9vbGJhcj86IFRvb2xCYXJQcm9wcyB8IGJvb2xlYW47XHJcbiAgYXV0b1NpemU/OiBib29sZWFuO1xyXG4gIHNvcnRTZWFyY2g/OiBib29sZWFuOyAvL+aYr+WQpua3u+WKoOaOkuW6j+afpeivoizpu5jorqR0cnVlXHJcbiAgc2hvd1Jvd1NlbGVjdGlvbj86IGJvb2xlYW47XHJcbiAgcm93S2V5Pzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBJTlNDVGFibGVQcm9wcyA9IHR5cGVvZiBOU0NUYWJsZS5kZWZhdWx0UHJvcHMgJiBOU0NUYWJsZVByb3BzO1xyXG5leHBvcnQgeyBEbmRDb250ZXh0VHlwZSwgSUJvZHlSb3dQcm9wcyB9O1xyXG5cclxuY29uc3QgUmVzaXplYWJsZVRpdGxlID0gKHByb3BzOiBhbnkpID0+IHtcclxuICBjb25zdCB7IG9uUmVzaXplLCB3aWR0aCwgLi4ucmVzdFByb3BzIH0gPSBwcm9wcztcclxuICByZXR1cm4gKFxyXG4gICAgPFJlc2l6YWJsZVxyXG4gICAgICB3aWR0aD17d2lkdGggfHwgMTUwfVxyXG4gICAgICBoZWlnaHQ9ezB9XHJcbiAgICAgIG9uUmVzaXplPXtvblJlc2l6ZX1cclxuICAgICAgZHJhZ2dhYmxlT3B0cz17eyBlbmFibGVVc2VyU2VsZWN0SGFjazogZmFsc2UgfX1cclxuICAgID5cclxuICAgICAgPHRoIHsuLi5yZXN0UHJvcHN9IC8+XHJcbiAgICA8L1Jlc2l6YWJsZT5cclxuICApO1xyXG59O1xyXG5jbGFzcyBOU0NUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJTlNDVGFibGVQcm9wcywgYW55PiB7XHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGRyYWdhYmxlOiBmYWxzZSxcclxuICAgIHNob3dUb3RhbDogdHJ1ZSxcclxuICAgIGZpbHRlckNvbHVtbjogdHJ1ZSxcclxuICAgIGRyYWdVcmw6IFwiXCIsXHJcbiAgICBhdXRvUGFnaW5hdGlvbjogdHJ1ZSxcclxuICAgIGF1dG9Tb3J0OiB0cnVlLFxyXG4gICAgYXV0b09uQ2hhbmdlOiB0cnVlLFxyXG4gICAgcmVzaXplQ29sdW1uOiB0cnVlLFxyXG4gICAgdG9vbGJhcjoge1xyXG4gICAgICBzaG93OiB0cnVlLFxyXG4gICAgICBvblRvb2xDbGljazoge30gYXMgYW55LFxyXG4gICAgfSBhcyBhbnksXHJcbiAgfTtcclxuXHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIHRoSWNvblJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxIVE1MRGl2RWxlbWVudD4oKTtcclxuICB0YWJsZVNlYXJjaFJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcblxyXG4gIGxpc3RlbmVycyA9IHtcclxuICAgIG9uQmVmb3JlTG9hZDogbnVsbCxcclxuICAgIGxvYWQ6IG51bGwsXHJcbiAgfTtcclxuXHJcbiAgY29tcG9uZW50cyA9IHtcclxuICAgIGhlYWRlcjoge1xyXG4gICAgICBjZWxsOiBSZXNpemVhYmxlVGl0bGUsXHJcbiAgICB9LFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBsZXQgbW9kYWwgPSBwcm9wcy50eXBlIHx8IFwiYXV0b1wiO1xyXG4gICAgbGV0IHN0b3JlUHJlZml4ID0gZ2V0U3RvcmFnZShcInN0b3JlLXByZS1rZXlcIik7XHJcbiAgICBsZXQgYXV0b1R5cGUgPSBnZXRTdG9yYWdlKFxyXG4gICAgICBzdG9yZVByZWZpeCA/IHN0b3JlUHJlZml4ICsgXCJ0YWJsZVNpemVcIiA6IFwidGFibGVTaXplXCJcclxuICAgICk7XHJcbiAgICBhdXRvVHlwZSA9IGF1dG9UeXBlPy5jb250ZW50O1xyXG4gICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgZGF0YVNvdXJjZTogW10sXHJcbiAgICAgIGNvbHVtbnM6IFtdLFxyXG4gICAgICBsb2FkaW5nOiBmYWxzZSxcclxuICAgICAgcGFnaW5hdGlvbjoge30sXHJcbiAgICAgIGFjdGl2ZUluZGV4OiAtMSxcclxuICAgICAgLy/mkJzntKLmlofmnKxcclxuICAgICAgc2VhcmNoVGV4dDogbnVsbCxcclxuICAgICAgZmllbGRPcHRpb246IG51bGwsXHJcbiAgICAgIHNlYXJjaENvbG9yOiBudWxsLFxyXG4gICAgICBjb2xzOiBbXSxcclxuICAgICAgc29ydHM6IFtdLFxyXG4gICAgICBmaWx0ZXJQYXJhbXM6IHt9LFxyXG4gICAgICB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB8fCBhdXRvVHlwZSB8fCBcImRlZmF1bHRcIixcclxuICAgICAgc29ydFR5cGU6IFwic2luZ2xlXCIsXHJcbiAgICAgIHNvcnRlcjogW10sIC8v6K6w5b2V5b2T5YmN5o6S5bqP5a2X5q61XHJcbiAgICAgIHNvcnRJbmZvOiB7fSxcclxuICAgICAgZGVmYXVsdFNvcnQ6IHRydWUsXHJcbiAgICAgIGNoZWNrQ29sdW1uOiBbXSxcclxuICAgICAgZGVmYXVsdENoZWNrOiB0cnVlLFxyXG4gICAgICBzZWxlY3RlZFJvd0tleXM6IFtdLFxyXG4gICAgICBzZWxlY3RlZFJvd0RhdGFzOiBbXSxcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuc3RvcmUgaW5zdGFuY2VvZiBTdG9yZSkge1xyXG4gICAgICB0aGlzLnN0b3JlID0gcHJvcHMuc3RvcmU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCB7IGxpc3RlbmVyczogbGlzdGVuZXJzUHJvcHMgPSB7fSwgLi4ucmVzdFN0b3JlIH0gPVxyXG4gICAgICAgIHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgICBjb25zdCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiAoc3RvcmUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKGxpc3RlbmVyc1Byb3BzLm9uQmVmb3JlTG9hZCwgdGhpcywgW3N0b3JlLCBvcHRpb25zXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZGF0YUNoYW5nZWQ6IChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBwYWdpbmcgPSAhKHRoaXMucHJvcHMucGFnaW5hdGlvbiA9PT0gZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocGFnaW5nICYmICF0aGlzLnByb3BzLmRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICAgIHBhZ2luYXRpb246IHN0b3JlLmdldFBhZ2luYXRpb24oKSxcclxuICAgICAgICAgICAgICAgIGxvYWRpbmc6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgYWN0aXZlSW5kZXg6IC0xLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBtb2RlbERhdGEsIGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5kYXRhQ2hhbmdlZCwgdGhpcywgW1xyXG4gICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgbW9kZWxEYXRhLFxyXG4gICAgICAgICAgICAgIHN0b3JlLFxyXG4gICAgICAgICAgICAgIHBhZ2luZyxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgbG9hZDogKGRhdGEsIG1vZGVsRGF0YSwgc3RvcmUpID0+IHtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUHJvcHMubG9hZCwgdGhpcywgW2RhdGEsIG1vZGVsRGF0YSwgc3RvcmVdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBvbkVycm9yTG9hZDogKGVyciwgcmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGxvYWRpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQcm9wcy5vbkVycm9yTG9hZCwgdGhpcywgW2VyciwgcmVzcG9uc2VdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBkYXRhOiByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgPyByZXN0U3RvcmUuZGF0YVxyXG4gICAgICAgICAgOiBwcm9wcy5kYXRhU291cmNlXHJcbiAgICAgICAgICA/IHByb3BzLmRhdGFTb3VyY2VcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICAuLi5yZXN0U3RvcmUsXHJcbiAgICAgICAgYXV0b0xvYWQ6IHJlc3RTdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWUsXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgUGFnZVN0b3JlKFxyXG4gICAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0b3JlUHJvcHMsIHtcclxuICAgICAgICAgIHBhZ2luYXRpb246IHsgY3VycmVudDogMSwgLi4udGhpcy5wcm9wcy5wYWdpbmF0aW9uIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZVJlc2l6ZSA9XHJcbiAgICAoaW5kZXg6IGFueSkgPT5cclxuICAgIChlOiBhbnksIHsgc2l6ZSB9OiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgeyBjb2xzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICBjb25zdCBuZXh0Q29sdW1ucyA9IFsuLi5jb2xzXTtcclxuICAgICAgbmV4dENvbHVtbnNbaW5kZXhdID0ge1xyXG4gICAgICAgIC4uLm5leHRDb2x1bW5zW2luZGV4XSxcclxuICAgICAgICB3aWR0aDogc2l6ZS53aWR0aCxcclxuICAgICAgfTtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgY29sczogbmV4dENvbHVtbnMsXHJcbiAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBjb25zdCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghcmVzaXplQ29sdW1uKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2x1bW5zOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBjb2xzOiBbLi4udGhpcy5wcm9wcy5jb2x1bW5zXSB9KTtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0b3JlID0gdGhpcy5wcm9wcy5zdG9yZTtcclxuICAgIGlmIChzdG9yZSAmJiBzdG9yZS5kYXRhKSB7XHJcbiAgICAgIHRoaXMuc3RvcmUuc2V0RGF0YShzdG9yZS5kYXRhKTtcclxuICAgIH1cclxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmxpc3Rlbk1lc3NhZ2UpO1xyXG4gIH1cclxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmxpc3Rlbk1lc3NhZ2UpO1xyXG4gIH1cclxuICBsaXN0ZW5NZXNzYWdlID0gKGV2KSA9PiB7XHJcbiAgICBjb25zdCBkYXRhID0gdHlwZW9mIGV2LmRhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKGV2LmRhdGEpIDogZXYuZGF0YTtcclxuICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICBpZiAoZGF0YS5ldmVudFR5cGUgPT0gXCJjaGFuZ2VUYWJsZVNpemVcIikge1xyXG4gICAgICBjb25zdCB7IHBheWxvYWQgfSA9IGRhdGE7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJkZWZhdWx0XCIgfHxcclxuICAgICAgICBwYXlsb2FkLnNpemUgPT0gXCJzbWFsbFwiIHx8XHJcbiAgICAgICAgcGF5bG9hZC5zaXplID09IFwibWlkZGxlXCJcclxuICAgICAgKSB7XHJcbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHBheWxvYWQuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH07XHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGNvbnN0IHsgcmVzaXplQ29sdW1uIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgaWYgKCFyZXNpemVDb2x1bW4pIHtcclxuICAgICAgaWYgKHRoaXMucHJvcHMuY29sdW1ucyAhPT0gcHJldlByb3BzLmNvbHVtbnMpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHsgY29sdW1uczogdGhpcy5wcm9wcy5jb2x1bW5zIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocHJlU3RhdGUuY29scyAhPT0gdGhpcy5zdGF0ZS5jb2xzKSB7XHJcbiAgICAgICAgdGhpcy5yZXNldENvbHVtbigpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnByb3BzLmNvbHVtbnMgIT09IHByZXZQcm9wcy5jb2x1bW5zKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IGNvbHM6IHRoaXMucHJvcHMuY29sdW1ucyB9KTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocHJldlByb3BzLnNpemUgIT09IHRoaXMucHJvcHMuc2l6ZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0YWJsZVNpemU6IHRoaXMucHJvcHMuc2l6ZSB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRDb2x1bW4oKSB7XHJcbiAgICBjb25zdCB7IGNvbHMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCBuZXdDb2xzOiBhbnkgPSBbXTtcclxuICAgIGxldCBjb2xzcyA9IGNvbHMgfHwgW107XHJcbiAgICBjb2xzcy5tYXAoKGNvbDogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgIGxldCB0ZW1wID0ge1xyXG4gICAgICAgIC4uLmNvbCxcclxuICAgICAgICBvbkhlYWRlckNlbGw6IChjb2x1bW46IHsgd2lkdGg6IGFueSB9KSA9PiAoe1xyXG4gICAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcclxuICAgICAgICAgIG9uUmVzaXplOiB0aGlzLmhhbmRsZVJlc2l6ZShpbmRleCksXHJcbiAgICAgICAgfSksXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0NvbHMucHVzaCh0ZW1wKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGNvbHVtbnM6IG5ld0NvbHMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOa4hemZpOmAieS4reminOiJslxyXG4gICAqL1xyXG4gIGNsZWFyU2VsZWN0Q29sb3IoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHsgYWN0aXZlSW5kZXg6IC0xIH0pO1xyXG4gICAgcmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBnZXRQYWdpbmF0aW9uQnlTdG9yZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldFBhZ2luYXRpb24oKTtcclxuICB9XHJcblxyXG4gIG9uQ2hhbmdlKHBhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmEpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgYXV0b09uQ2hhbmdlID0gdHJ1ZSxcclxuICAgICAgYXV0b1NvcnQsXHJcbiAgICAgIGF1dG9QYWdpbmF0aW9uLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgc3RvcmUsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgaXNNdWx0aXBsZSA9IEFycmF5LmlzQXJyYXkoc29ydGVyKTtcclxuICAgIGlmIChhdXRvT25DaGFuZ2UgPT09IGZhbHNlIHx8ICFzdG9yZSkge1xyXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaGFuZGxlUGFnaW5hdGlvbiA9ICgpID0+IHtcclxuICAgICAgbGV0IHBhcmFtcyA9IHt9IGFzIHtcclxuICAgICAgICBzaXplPzogc3RyaW5nO1xyXG4gICAgICAgIHBhZ2VTaXplPzogc3RyaW5nO1xyXG4gICAgICAgIGFzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgZGVzY3M/OiBzdHJpbmc7XHJcbiAgICAgICAgW3Byb3BOYW1lOiBzdHJpbmddOiBzdHJpbmc7XHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IHBhZ2luZyA9IHRoaXMuZ2V0UGFnaW5hdGlvbkJ5U3RvcmUoKSB8fCB7fTtcclxuICAgICAgaWYgKCFpc0VtcHR5T2JqKHBhZ2luYXRpb24pKSB7XHJcbiAgICAgICAgY29uc3QgcCA9IHtcclxuICAgICAgICAgIFtwYWdpbmcuY3VycmVudEtleSB8fCBcImN1cnJlbnRcIl06IHBhZ2luYXRpb24uY3VycmVudCxcclxuICAgICAgICAgIFtwYWdpbmcucGFnZVNpemVLZXkgfHwgXCJzaXplXCJdOiBwYWdpbmF0aW9uLnBhZ2VTaXplLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwYXJhbXMsIHApO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBhc2NQYXJhbXMgPSB0aGlzLmdldFNvcnRQYXJhbShzb3J0ZXIsIHRydWUpO1xyXG4gICAgICBpZiAoaXNNdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXIgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoIWlzTXVsdGlwbGUgJiYgIWlzRW1wdHlPYmooc29ydGVyKSkge1xyXG4gICAgICAgIHNvcnRlci5jb2x1bW4gJiZcclxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyBzb3J0ZXI6IFtzb3J0ZXJdLCBkZWZhdWx0U29ydDogZmFsc2UgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10gfSk7XHJcbiAgICAgIH1cclxuICAgICAgcGFyYW1zID0geyAuLi5maWx0ZXJQYXJhbXMsIC4uLnBhcmFtcywgLi4uYXNjUGFyYW1zIH07XHJcbiAgICAgIGF1dG9Tb3J0ICYmIHRoaXMuc3RvcmUucmVsb2FkKHsgcGFyYW1zIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbkNoYW5nZUZuID0gdGhpcy5wcm9wcy5vbkNoYW5nZTtcclxuXHJcbiAgICBhdXRvUGFnaW5hdGlvbiAmJiBoYW5kbGVQYWdpbmF0aW9uKCk7XHJcbiAgICAvLyDnlKjmiLfkvKDkuoZvbkNoYW5nZeS/neeVmeeUqOaIt+iHquS4u+WkhOeQhuihqOagvOWPmOWMlueahOadg+WKm1xyXG4gICAgaWYgKG9uQ2hhbmdlRm4pIHtcclxuICAgICAgdXRpbHMuY2FsbGJhY2sob25DaGFuZ2VGbiwgdGhpcywgW3BhZ2luYXRpb24sIGZpbHRlcnMsIHNvcnRlciwgZXh0cmFdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN0b3JlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5bmlbDmja7mqKHlnovlr7nosaFcclxuICAgKi9cclxuICBnZXRNb2RlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlLmdldE1vZGVsKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDoj5zljZXmkJzntKLov4fmu6TmmL7npLpcclxuICAgKiBAcGFyYW0ge1N0cmluZ30gdmFsXHJcbiAgICovXHJcbiAgaGFuZGxlU2VhcmNoKHZhbCwgZmllbGRPcHRpb24sIHNlYXJjaENvbG9yKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VhcmNoVGV4dDogdmFsLFxyXG4gICAgICBmaWVsZE9wdGlvbjogZmllbGRPcHRpb24sXHJcbiAgICAgIHNlYXJjaENvbG9yOiBzZWFyY2hDb2xvcixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5qih5Z2X5YiX6KGo56e75Yqo5o6S5bqPXHJcbiAgICovXHJcbiAgbW92ZVJvdyA9IChkcmFnSW5kZXgsIGhvdmVySW5kZXgsIGRyYWcsIHRhcmdldCkgPT4ge1xyXG4gICAgY29uc3QgX3RoaXMgPSB0aGlzO1xyXG4gICAgbGV0IGRyYWdOb2RlID0gZHJhZy5yZWNvcmQ7XHJcbiAgICBsZXQgdGFyZ2V0Tm9kZSA9IHRhcmdldC5yZWNvcmQ7XHJcbiAgICBkcmFnTm9kZS5tb3ZlQXJyYXkoZHJhZ05vZGUsIHRhcmdldE5vZGUpO1xyXG4gICAgbGV0IGlkcyA9IGRyYWdOb2RlLnBhcmVudE5vZGUuZ2V0Q2hpbGROb2RlSWRzKCk7XHJcbiAgICBsZXQgcGFyYW1zID0ge1xyXG4gICAgICBpZDogZHJhZ05vZGUuaWQsXHJcbiAgICAgIHBhcmVudElkOiBkcmFnTm9kZS5hdHRyaWJ1dGUucGFyZW50SWQsXHJcbiAgICAgIGlkczogaWRzLFxyXG4gICAgfTtcclxuXHJcbiAgICBpZiAodGhpcy5wcm9wcy5tb3ZlUm93KSB7XHJcbiAgICAgIHRoaXMucHJvcHMubW92ZVJvdyhwYXJhbXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoKTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBmaWx0ZXJDb2x1bW4oY2hlY2tlZFZhbHVlKSB7XHJcbiAgICBpZiAoY2hlY2tlZFZhbHVlLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgIG1lc3NhZ2Uud2FybmluZyhcIuiHs+WwkeaYvuekuuS4gOWIl++8gVwiKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZmlsdGVyQ29sdW1ucyA9IHRoaXMucHJvcHMuY29sdW1ucy5tYXAoKGNvbDogQ29sdW1uVHlwZTx7fT4pID0+IHtcclxuICAgICAgY29uc3QgbmV3Q29sID0geyAuLi5jb2wgfSBhcyBDb2x1bW5UeXBlPHt9PiAmIHsgaW5pdFNob3c6IGJvb2xlYW4gfTtcclxuICAgICAgaWYgKGNoZWNrZWRWYWx1ZS5pbmNsdWRlcyhjb2wuZGF0YUluZGV4KSkge1xyXG4gICAgICAgIG5ld0NvbC5pbml0U2hvdyA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbmV3Q29sLmluaXRTaG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG5ld0NvbDtcclxuICAgIH0pO1xyXG4gICAgY29uc3QgeyByZXNpemVDb2x1bW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIXJlc2l6ZUNvbHVtbikge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2x1bW5zOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBjb2xzOiBmaWx0ZXJDb2x1bW5zLFxyXG4gICAgICAgIGNoZWNrQ29sdW1uOiBjaGVja2VkVmFsdWUsXHJcbiAgICAgICAgZGVmYXVsdENoZWNrOiBmYWxzZSxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldFNvcnRQYXJhbShzb3J0ZXIsIHNvcnRTdGF0ZSA9IGZhbHNlKSB7XHJcbiAgICBjb25zdCBpc011bHRpcGxlID0gQXJyYXkuaXNBcnJheShzb3J0ZXIpO1xyXG4gICAgY29uc3QgeyBzb3J0U2VhcmNoID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghc29ydFNlYXJjaCkge1xyXG4gICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcbiAgICBsZXQgc29ydEluZm8gPSB7fTtcclxuICAgIGxldCBvcmRlckl0ZW1zID0gW107XHJcbiAgICBpZiAoIWlzRW1wdHlPYmooc29ydGVyKSAmJiAhaXNNdWx0aXBsZSAmJiBzb3J0ZXIuY29sdW1uKSB7XHJcbiAgICAgIG9yZGVySXRlbXMgPSBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY29sdW1uOiBzb3J0ZXIuY29sdW1uLmZpZWxkIHx8IHNvcnRlci5jb2x1bW4uZGF0YUluZGV4LFxyXG4gICAgICAgICAgYXNjOiBzb3J0ZXIub3JkZXIgPT0gXCJhc2NlbmRcIixcclxuICAgICAgICB9LFxyXG4gICAgICBdO1xyXG4gICAgICBpZiAoc29ydGVyLmNvbHVtbikgc29ydEluZm9bc29ydGVyLmNvbHVtbi5kYXRhSW5kZXhdID0gc29ydGVyLm9yZGVyO1xyXG4gICAgfSBlbHNlIGlmIChpc011bHRpcGxlKSB7XHJcbiAgICAgIHNvcnRlci5mb3JFYWNoKCh2KSA9PiB7XHJcbiAgICAgICAgc29ydEluZm9bdi5jb2x1bW4uZGF0YUluZGV4XSA9IHYub3JkZXI7XHJcbiAgICAgICAgbGV0IGZpZWxkID0gdi5jb2x1bW4uZmllbGQgfHwgdi5jb2x1bW4uZGF0YUluZGV4O1xyXG4gICAgICAgIG9yZGVySXRlbXMucHVzaCh7XHJcbiAgICAgICAgICBjb2x1bW46IGZpZWxkLFxyXG4gICAgICAgICAgYXNjOiB2Lm9yZGVyID09IFwiYXNjZW5kXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKHNvcnRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBzb3J0SW5mbzogc29ydEluZm8sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgb3JkZXJJdGVtczogSlNPTi5zdHJpbmdpZnkob3JkZXJJdGVtcykgfTtcclxuICB9XHJcbiAgZ2V0Q29sdW1ucygpIHtcclxuICAgIGNvbnN0IHsgY29sdW1ucywgc29ydFR5cGUsIHNvcnRJbmZvIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgeyBzb3J0RmllbGRzID0gW10gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBkZWZhdWx0U2hvd0NvbHMgPSBjb2x1bW5zLmZpbHRlcigoY29scykgPT4gY29scy5pbml0U2hvdyAhPT0gZmFsc2UpO1xyXG4gICAgY29uc3QgY29scyA9IGRlZmF1bHRTaG93Q29scy5tYXAoKGNvbCwgaW5kZXgpID0+IHtcclxuICAgICAgaWYgKGNvbC5lbGxpcHNpcyAmJiAhY29sLnJlbmRlcikge1xyXG4gICAgICAgIGNvbC5lbGxpcHNpcyA9IHtcclxuICAgICAgICAgIHNob3dUaXRsZTogZmFsc2UsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb2wucmVuZGVyID0gKHRleHQpID0+IHtcclxuICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIDxkaXYgdGl0bGU9e3RleHR9IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLXRleHRcIil9PlxyXG4gICAgICAgICAgICAgIHt0ZXh0fVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHNvcnRGaWVsZHMuaW5kZXhPZihjb2wuZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgICAgaWYgKHNvcnRUeXBlID09IFwic2luZ2xlXCIpIHtcclxuICAgICAgICAgIGNvbC5zb3J0ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgY29sLnNvcnRPcmRlciA9IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgID8gc29ydEluZm9bY29sLmRhdGFJbmRleF1cclxuICAgICAgICAgICAgOiBudWxsO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoc29ydFR5cGUgPT0gXCJtdWx0aXBsZVwiKSB7XHJcbiAgICAgICAgICBjb2wuc29ydGVyID0geyBtdWx0aXBsZTogaW5kZXggfTtcclxuICAgICAgICAgIGNvbC5zb3J0T3JkZXIgPSBzb3J0SW5mb1tjb2wuZGF0YUluZGV4XVxyXG4gICAgICAgICAgICA/IHNvcnRJbmZvW2NvbC5kYXRhSW5kZXhdXHJcbiAgICAgICAgICAgIDogbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIGNvbDtcclxuICAgIH0pO1xyXG4gICAgY29scy5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgIGlmICghaXNFbXB0eU9iaihpdGVtLmZpbHRlclByb3BzKSkge1xyXG4gICAgICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgICAgICBjb25zdCB7IHR5cGUsIHByb3BzLCBzZWFyY2hLZXkgfSA9IGl0ZW0uZmlsdGVyUHJvcHM7XHJcbiAgICAgICAgbGV0IERpdiA9IG51bGw7XHJcbiAgICAgICAgbGV0IHRleHQgPSBpdGVtLnRpdGxlO1xyXG4gICAgICAgIERpdiA9IGdldE5vZGUodHlwZSwge1xyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6IGDmkJzntKIke3RleHR9YCxcclxuICAgICAgICAgIC4uLnByb3BzLFxyXG4gICAgICAgICAgcmVmOiB0aGlzLnRhYmxlU2VhcmNoUmVmLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIG9iaiA9IHtcclxuICAgICAgICAgIGZpbHRlckRyb3Bkb3duOiAoe1xyXG4gICAgICAgICAgICBzZXRTZWxlY3RlZEtleXMsXHJcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5cyxcclxuICAgICAgICAgICAgY29uZmlybSxcclxuICAgICAgICAgICAgY2xlYXJGaWx0ZXJzLFxyXG4gICAgICAgICAgfSkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoXCIpfT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLXNwYWNlXCIpfT5cclxuICAgICAgICAgICAgICAgICAge0Rpdn1cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPFNwYWNlPlxyXG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgZmlsdGVyUGFyYW1zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld0ZpbHRlclBhcmFtcyA9IHsgLi4uZmlsdGVyUGFyYW1zIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaXRlbS5maWVsZCB8fCBpdGVtLmRhdGFJbmRleDtcclxuICAgICAgICAgICAgICAgICAgICAgIG5ld0ZpbHRlclBhcmFtc1trZXldID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVNlYXJjaFJlZi5jdXJyZW50Py5nZXRWYWx1ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclBhcmFtczogeyAuLi5uZXdGaWx0ZXJQYXJhbXMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc29ydFBhcmFtID0gdGhpcy5nZXRTb3J0UGFyYW0odGhpcy5zdGF0ZS5zb3J0ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5sb2FkKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiB7IC4uLm5ld0ZpbHRlclBhcmFtcywgLi4uc29ydFBhcmFtIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtc2VhcmNoLWJ1dHRvblwiKX1cclxuICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIOafpeivolxyXG4gICAgICAgICAgICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvU3BhY2U+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmlsdGVySWNvbjogKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gPFNlYXJjaE91dGxpbmVkIC8+O1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIC4uLm9iaixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbHNbaW5kZXhdID0gb2JqO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb2xzO1xyXG4gIH1cclxuICByZW5kZXJUb29sQmFyKCkge1xyXG4gICAgbGV0IHsgdGFibGVTaXplLCBjb2x1bW5zLCBzb3J0VHlwZSB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGxldCB7IGZpbHRlckNvbHVtbiwgY29sdW1uczogY29sTGlzdHMsIHRvb2xiYXIgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHRhYmxlVG9vbCwgc3RvcmVSZXF1ZXN0Q29uZmlnID0ge30gfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xzID0gW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgbGV0IHRvb2xzQ2xpY2sgPSB7fSBhcyBhbnk7XHJcbiAgICBpZiAodG9vbGJhciA9PSB0cnVlKSB7XHJcbiAgICAgIHRvb2xzID0gdG9vbGJhci5vblRvb2xDbGlja1xyXG4gICAgICAgID8gdG9vbGJhci5vblRvb2xDbGlja1xyXG4gICAgICAgIDogW1wicmVmcmVzaFwiLCBcInNpemVcIiwgXCJzb3J0XCIsIFwiY29sdW1uXCJdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdG9vbHMgPSB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgPyB0b29sYmFyLnRvb2xzXHJcbiAgICAgICAgOiB0YWJsZVRvb2wudG9vbHNcclxuICAgICAgICA/IHRhYmxlVG9vbC50b29sc1xyXG4gICAgICAgIDogdG9vbHM7XHJcbiAgICAgIHRvb2xzQ2xpY2sgPSB0b29sYmFyLm9uVG9vbENsaWNrID8gdG9vbGJhci5vblRvb2xDbGljayA6IHt9O1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc2l6ZUl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5a695p2+XCIsIGtleTogXCJkZWZhdWx0XCIgfSxcclxuICAgICAgeyB0aXRsZTogXCLkuK3nrYlcIiwga2V5OiBcIm1pZGRsZVwiIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwi57Sn5YeRXCIsIGtleTogXCJzbWFsbFwiIH0sXHJcbiAgICBdO1xyXG4gICAgY29uc3Qgc29ydEl0ZW0gPSBbXHJcbiAgICAgIHsgdGl0bGU6IFwi5Y2V5a2X5q615o6S5bqPXCIsIGtleTogXCJzaW5nbGVcIiB9LFxyXG4gICAgICB7IHRpdGxlOiBcIuWkmuWtl+auteaOkuW6j1wiLCBrZXk6IFwibXVsdGlwbGVcIiB9LFxyXG4gICAgXTtcclxuICAgIGNvbnN0IHNvcnRDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvdGVudC10aXRsZVwiKX1cclxuICAgICAgICAgIHN0eWxlPXt7XHJcbiAgICAgICAgICAgIGN1cnNvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCA/IFwibm90LWFsbG93ZWRcIiA6IFwicG9pbnRlclwiLFxyXG4gICAgICAgICAgICBjb2xvcjogdGhpcy5zdGF0ZS5kZWZhdWx0U29ydCAmJiBcInJnYmEoMCwwLDAsLjQ1KVwiLFxyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuZGVmYXVsdFNvcnQpIHtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHNvcnRlcjogW10sIHNvcnRJbmZvOiB7fSwgZGVmYXVsdFNvcnQ6IHRydWUgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIOaBouWkjem7mOiupOaOkuW6j1xyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzb3J0SXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgc29ydGVyOiBbXSxcclxuICAgICAgICAgICAgICAgICAgc29ydEluZm86IHt9LFxyXG4gICAgICAgICAgICAgICAgICBzb3J0VHlwZTogaXRlbS5rZXksXHJcbiAgICAgICAgICAgICAgICAgIGRlZmF1bHRTb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGFyYW1zID0geyAuLi50aGlzLnN0YXRlLmZpbHRlclBhcmFtcyB9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5yZWxvYWQoeyBwYXJhbXMgfSk7XHJcbiAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIHtzb3J0VHlwZSA9PSBpdGVtLmtleSA/IChcclxuICAgICAgICAgICAgICAgIDxhPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogMjAgfX0+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c29ydFR5cGUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgICB7dGhpcy5zdGF0ZS5zb3J0ZXIubGVuZ3RoID4gMCAmJiAoXHJcbiAgICAgICAgICA8PlxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfVxyXG4gICAgICAgICAgICAgIHN0eWxlPXt7IGNvbG9yOiBcInJnYmEoMCwwLDAsLjQ1KVwiIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICDlvZPliY3mjpLluo9cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIHt0aGlzLnN0YXRlLnNvcnRlci5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfVxyXG4gICAgICAgICAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICB7aXRlbS5vcmRlciA9PSBcImFzY2VuZFwiID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgPFNvcnRBc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICA8U29ydERlc2NlbmRpbmdPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS5jb2x1bW4udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KX1cclxuICAgICAgICAgIDwvPlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvPlxyXG4gICAgKTtcclxuICAgIGNvbnN0IHNpemVDb250ZW50ID0gKFxyXG4gICAgICA8PlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY290ZW50LXRpdGxlXCIpfT5cclxuICAgICAgICAgIOihqOagvOWvhuW6plxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIHtzaXplSXRlbS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAga2V5PXtpdGVtLmtleX1cclxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgICAgdGFibGVTaXplOiBpdGVtLmtleSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICB7dGFibGVTaXplID09IGl0ZW0ua2V5ID8gKFxyXG4gICAgICAgICAgICAgICAgPGE+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudC10aWVtXCIpfT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPXt7IHdpZHRoOiAyMCB9fT5cclxuICAgICAgICAgICAgICAgICAgICAgIHt0YWJsZVNpemUgPT0gaXRlbS5rZXkgJiYgPENoZWNrT3V0bGluZWQgLz59XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdj4ge2l0ZW0udGl0bGV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLWNvbnRlbnQtdGllbVwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IDIwIH19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2PiB7aXRlbS50aXRsZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICl9XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9KX1cclxuICAgICAgPC8+XHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGRlZmF1bHRTaG93Q29scyA9IGNvbHVtbnMuZmlsdGVyKChjb2xzKSA9PiBjb2xzLmluaXRTaG93ICE9PSBmYWxzZSk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IChcclxuICAgICAgPENoZWNrYm94Lkdyb3VwXHJcbiAgICAgICAgb25DaGFuZ2U9e3RoaXMuZmlsdGVyQ29sdW1uLmJpbmQodGhpcyl9XHJcbiAgICAgICAgb3B0aW9ucz17Y29sTGlzdHMubWFwKFxyXG4gICAgICAgICAgKGNvbDogQ29sdW1uVHlwZTx7fT4gJiB7IGZpbHRlckNvbHVtbjogYm9vbGVhbjsgZGF0YUluZGV4OiBhbnkgfSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNvbC5kYXRhSW5kZXgpIHtcclxuICAgICAgICAgICAgICBjb2wuZGF0YUluZGV4ID0gY29sLnRpdGxlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgbGFiZWw6IGNvbC50aXRsZSxcclxuICAgICAgICAgICAgICB2YWx1ZTogY29sLmRhdGFJbmRleCxcclxuICAgICAgICAgICAgICBkaXNhYmxlZDogY29sLmZpbHRlckNvbHVtbiA9PT0gZmFsc2UsXHJcbiAgICAgICAgICAgIH0gYXMgQ2hlY2tib3hPcHRpb25UeXBlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICl9XHJcbiAgICAgICAgLy8gZGVmYXVsdFZhbHVlPXtkZWZhdWx0U2hvd0NvbHMubWFwKChjb2wpID0+IGNvbC5kYXRhSW5kZXgpfVxyXG4gICAgICAgIHZhbHVlPXtcclxuICAgICAgICAgIHRoaXMuc3RhdGUuZGVmYXVsdENoZWNrXHJcbiAgICAgICAgICAgID8gZGVmYXVsdFNob3dDb2xzLm1hcCgoY29sKSA9PiBjb2wuZGF0YUluZGV4KVxyXG4gICAgICAgICAgICA6IHRoaXMuc3RhdGUuY2hlY2tDb2x1bW5cclxuICAgICAgICB9XHJcbiAgICAgID48L0NoZWNrYm94Lkdyb3VwPlxyXG4gICAgKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtdG9vbC1iYXJcIil9PlxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwiY29sdW1uXCIpID4gLTEgJiYgKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyXHJcbiAgICAgICAgICAgICAgdGl0bGU9XCLpgInmi6nmmL7npLrnmoTliJdcIlxyXG4gICAgICAgICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XHJcbiAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tUmlnaHRcIlxyXG4gICAgICAgICAgICAgIHRyaWdnZXI9XCJjbGlja1wiXHJcbiAgICAgICAgICAgICAgb3ZlcmxheVN0eWxlPXt7IG1pbldpZHRoOiA0MTAsIG1heFdpZHRoOiA0NTAgfX1cclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDxBcHBzdG9yZU91dGxpbmVkXHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZS10aC1hcHAtc3RvcmUtaWNvblwiKX1cclxuICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L1BvcG92ZXI+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICApfVxyXG4gICAgICAgIHt0b29scy5pbmRleE9mKFwic29ydFwiKSA+IC0xICYmIChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgbWFyZ2luUmlnaHQ6IDgsIGZvbnRTaXplOiAxNCB9fT5cclxuICAgICAgICAgICAgPFBvcG92ZXIgcGxhY2VtZW50PVwiYm90dG9tXCIgY29udGVudD17c29ydENvbnRlbnR9IHRyaWdnZXI9XCJjbGlja1wiPlxyXG4gICAgICAgICAgICAgIDxTb3J0QXNjZW5kaW5nT3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInNpemVcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2IHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQgfX0+XHJcbiAgICAgICAgICAgIDxQb3BvdmVyIHBsYWNlbWVudD1cImJvdHRvbVwiIGNvbnRlbnQ9e3NpemVDb250ZW50fSB0cmlnZ2VyPVwiY2xpY2tcIj5cclxuICAgICAgICAgICAgICA8Q29sdW1uSGVpZ2h0T3V0bGluZWQgLz5cclxuICAgICAgICAgICAgPC9Qb3BvdmVyPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKX1cclxuICAgICAgICB7dG9vbHMuaW5kZXhPZihcInJlZnJlc2hcIikgPiAtMSAmJiAoXHJcbiAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgIHN0eWxlPXt7IG1hcmdpblJpZ2h0OiA4LCBmb250U2l6ZTogMTQsIGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgLi4udGhpcy5zdGF0ZS5maWx0ZXJQYXJhbXMgfTtcclxuICAgICAgICAgICAgICBpZiAodG9vbHNDbGljay5vblJlZnJlc2gpIHtcclxuICAgICAgICAgICAgICAgIHRvb2xzQ2xpY2sub25SZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUubG9hZCh7IHBhcmFtcyB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxSZWRvT3V0bGluZWQgLz5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICl9XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgKTtcclxuICB9XHJcbiAgZ2V0U2VsZWN0ZWRSb3dLZXlzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzO1xyXG4gIH1cclxuICBnZXRTZWxlY3RlZFJvd0RhdGFzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dEYXRhcztcclxuICB9XHJcbiAgcmVzZXRTZWxlY3RlZFJvd0tleXMoKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBbXSxcclxuICAgICAgc2VsZWN0ZWRSb3dEYXRhczogW10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3QocmVjb3JkOiBhbnksIHNlbGVjdGVkOiBhbnkpIHtcclxuICAgIGNvbnN0IHsgc2VsZWN0ZWRSb3dLZXlzLCBzZWxlY3RlZFJvd0RhdGFzIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHsgcm93S2V5ID0gXCJpZFwiIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93S2V5cyA9IFsuLi5zZWxlY3RlZFJvd0tleXNdO1xyXG4gICAgbGV0IG5ld1NlbGVjdGVkUm93RGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhc107XHJcbiAgICBpZiAoc2VsZWN0ZWQpIHtcclxuICAgICAgbmV3U2VsZWN0ZWRSb3dLZXlzID0gWy4uLm5ld1NlbGVjdGVkUm93S2V5cywgcmVjb3JkW3Jvd0tleV1dO1xyXG4gICAgICBuZXdTZWxlY3RlZFJvd0RhdGFzID0gWy4uLm5ld1NlbGVjdGVkUm93RGF0YXMsIHJlY29yZF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZFJvd0tleXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbSA9PT0gcmVjb3JkW3Jvd0tleV0pIHtcclxuICAgICAgICAgIG5ld1NlbGVjdGVkUm93S2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXMubWFwKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IHtcclxuICAgICAgICBpZiAoaXRlbVtyb3dLZXldID09PSByZWNvcmRbcm93S2V5XSkge1xyXG4gICAgICAgICAgbmV3U2VsZWN0ZWRSb3dEYXRhcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0ZWRSb3dLZXlzOiBuZXdTZWxlY3RlZFJvd0tleXMsXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IG5ld1NlbGVjdGVkUm93RGF0YXMsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcm93U2VsZWN0aW9uT25TZWxlY3RBbGwoc2VsZWN0ZWQ6IGFueSwgc2VsZWN0ZWRSb3dzOiBhbnksIGNoYW5nZVJvd3M6IGFueSkge1xyXG4gICAgY29uc3QgeyBzZWxlY3RlZFJvd0tleXMsIHNlbGVjdGVkUm93RGF0YXMgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IHJvd0tleSA9IFwiaWRcIiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCBuZXdpZHM6IGFueSA9IFtdO1xyXG4gICAgbGV0IG5ld2RhdGFzOiBhbnkgPSBbXTtcclxuICAgIGlmIChjaGFuZ2VSb3dzLmxlbmd0aCA+IDApIHtcclxuICAgICAgbGV0IGNoYW5nZUlkcyA9IGNoYW5nZVJvd3MubWFwKChpdGVtOiBhbnkpID0+IGl0ZW1bcm93S2V5XSk7XHJcbiAgICAgIGlmIChzZWxlY3RlZCkge1xyXG4gICAgICAgIG5ld2lkcyA9IFsuLi5zZWxlY3RlZFJvd0tleXMsIC4uLmNoYW5nZUlkc107XHJcbiAgICAgICAgbmV3ZGF0YXMgPSBbLi4uc2VsZWN0ZWRSb3dEYXRhcywgLi4uY2hhbmdlUm93c107XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dLZXlzLm1hcCgoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoY2hhbmdlSWRzLmluZGV4T2YoaXRlbSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3aWRzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc2VsZWN0ZWRSb3dEYXRhcy5tYXAoKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGNoYW5nZUlkcy5pbmRleE9mKGl0ZW1bcm93S2V5XSkgPT0gLTEpIHtcclxuICAgICAgICAgICAgbmV3ZGF0YXMucHVzaChpdGVtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3aWRzID0gWy4uLnNlbGVjdGVkUm93S2V5c107XHJcbiAgICAgIG5ld2RhdGFzID0gWy4uLnNlbGVjdGVkUm93RGF0YXNdO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIHNlbGVjdGVkUm93S2V5czogWy4uLm5ld2lkc10sXHJcbiAgICAgIHNlbGVjdGVkUm93RGF0YXM6IFsuLi5uZXdkYXRhc10sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgbGV0IF90aGlzID0gdGhpcyxcclxuICAgICAge1xyXG4gICAgICAgIGxvYWRpbmcsXHJcbiAgICAgICAgZGF0YVNvdXJjZSxcclxuICAgICAgICBwYWdpbmF0aW9uID0ge30sXHJcbiAgICAgICAgc2VhcmNoVGV4dCxcclxuICAgICAgICBmaWVsZE9wdGlvbixcclxuICAgICAgICBzZWFyY2hDb2xvcixcclxuICAgICAgICB0YWJsZVNpemUsXHJcbiAgICAgIH0gPSB0aGlzLnN0YXRlLFxyXG4gICAgICBwcm9wcyA9IHV0aWxzLm9taXQoXHJcbiAgICAgICAgdGhpcy5wcm9wcyxcclxuICAgICAgICBbXHJcbiAgICAgICAgICBcInN0b3JlXCIsXHJcbiAgICAgICAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICAgICAgICBcImNvbHVtbnNcIixcclxuICAgICAgICAgIFwicmVzZXRDb2x1bW5cIixcclxuICAgICAgICAgIFwidG9vbGJhclwiLFxyXG4gICAgICAgICAgXCJzb3J0RmllbGRzXCIsXHJcbiAgICAgICAgICBcImZpbHRlckNvbHVtblwiLFxyXG4gICAgICAgICAgXCJzb3J0U2VhcmNoXCIsXHJcbiAgICAgICAgICBcInNob3dSb3dTZWxlY3Rpb25cIixcclxuICAgICAgICBdLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHJvd0tleTogXCJpZFwiLFxyXG4gICAgICAgICAgY2xpY2tDaGFuZ2VDb2xvcjogZmFsc2UsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgaWYgKHByb3BzLnBhZ2luYXRpb24gIT09IGZhbHNlKSB7XHJcbiAgICAgIHByb3BzLnBhZ2luYXRpb24gPSB7XHJcbiAgICAgICAgcG9zaXRpb246IFtcImJvdHRvbVJpZ2h0XCJdLFxyXG4gICAgICAgIHNob3dTaXplQ2hhbmdlcjogdHJ1ZSxcclxuICAgICAgICBzaG93UXVpY2tKdW1wZXI6IHRydWUsXHJcbiAgICAgICAgLi4ucHJvcHMucGFnaW5hdGlvbixcclxuICAgICAgICAuLi5wYWdpbmF0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAocHJvcHMuc2hvd1RvdGFsID09IHRydWUpIHtcclxuICAgICAgICBwcm9wcy5wYWdpbmF0aW9uLnNob3dUb3RhbCA9IGZ1bmN0aW9uICh0b3RhbCwgW2Zyb20sIHRvXSkge1xyXG4gICAgICAgICAgLy8gcmV0dXJuIFwi5pi+56S6IFwiICsgZnJvbSArIFwiIC0gXCIgKyB0byArIFwi5p2h77yM5YWxIFwiICsgdG90YWwgKyBcIiDmnaFcIjtcclxuICAgICAgICAgIHJldHVybiBcIuWFsSBcIiArIHRvdGFsICsgXCIg5p2hXCI7XHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcHJvcHMub25DaGFuZ2UgPSBmdW5jdGlvbiAocGFnaW5hdGlvbiwgZmlsdGVycywgc29ydGVyLCBleHRyYSkge1xyXG4gICAgICBfdGhpcy5vbkNoYW5nZShwYWdpbmF0aW9uLCBmaWx0ZXJzLCBzb3J0ZXIsIGV4dHJhKTtcclxuICAgIH07XHJcbiAgICBpZiAocHJvcHMuY2xpY2tDaGFuZ2VDb2xvcikge1xyXG4gICAgICBjb25zdCBvblJvd0ZuID0gcHJvcHMub25Sb3c7XHJcbiAgICAgIHByb3BzLm9uUm93ID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICB2YXIgY3VzdG9tID0gb25Sb3dGbiA/IG9uUm93Rm4ocmVjb3JkLCBpbmRleCkgOiB7fTtcclxuICAgICAgICBjb25zdCBvbkNsaWNrRm4gPSBjdXN0b20ub25DbGljaztcclxuICAgICAgICBjdXN0b20ub25DbGljayA9IChldmVudCkgPT4ge1xyXG4gICAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgICBhY3RpdmVJbmRleDogaW5kZXgsIC8v6I635Y+W54K55Ye76KGM55qE57Si5byVXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHV0aWxzLmNhbGxiYWNrKG9uQ2xpY2tGbiwgX3RoaXMsIFtldmVudF0pO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgcmV0dXJuIGN1c3RvbTtcclxuICAgICAgfTtcclxuICAgICAgcHJvcHMucm93Q2xhc3NOYW1lID0gZnVuY3Rpb24gKHJlY29yZCwgaW5kZXgpIHtcclxuICAgICAgICByZXR1cm4gaW5kZXggPT09IF90aGlzLnN0YXRlLmFjdGl2ZUluZGV4XHJcbiAgICAgICAgICA/IGAke3N0eWxlc1tcIm5zYy10YWJsZS1jbGlja1Jvd1N0eWxlXCJdfWBcclxuICAgICAgICAgIDogXCJcIjtcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGxldCBuZXdEYXRhU291cmNlID0gW107XHJcbiAgICBpZiAoc2VhcmNoVGV4dCkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdHJlZVV0aWxzLmdldFNlYXJjaE1lbnVEYXRhcyhcclxuICAgICAgICB0aGlzLFxyXG4gICAgICAgIHNlYXJjaFRleHQsXHJcbiAgICAgICAgZmllbGRPcHRpb24sXHJcbiAgICAgICAgc2VhcmNoQ29sb3JcclxuICAgICAgKTtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGEudHJlZURhdGFzO1xyXG4gICAgICBwcm9wcy5leHBhbmRlZFJvd0tleXMgPSBkYXRhLm9wZW5LZXlzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbmV3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcbiAgICBwcm9wcy5zdG9yZSA9IHByb3BzLnN0b3JlIHx8IHt9O1xyXG4gICAgcHJvcHMuc3RvcmUuYXV0b0xvYWQgPSBwcm9wcy5zdG9yZS5hdXRvTG9hZCA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBjb25zdCB7IGRyYWdhYmxlIH0gPSBfdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IGRyYWdhYmxlUHJvcHMgPVxyXG4gICAgICBkcmFnYWJsZSA9PT0gdHJ1ZVxyXG4gICAgICAgID8ge1xyXG4gICAgICAgICAgICBjb21wb25lbnRzOiBCb2R5Um93Q29tcG9uZW50LFxyXG4gICAgICAgICAgICBvblJvdzogKHJlY29yZCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgICAgaW5kZXgsXHJcbiAgICAgICAgICAgICAgcmVjb3JkLFxyXG4gICAgICAgICAgICAgIG1vdmVSb3c6IHRoaXMubW92ZVJvdyxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgOiB7fTtcclxuICAgIGxldCB7IHJlc2l6ZUNvbHVtbiB9ID0gdGhpcy5wcm9wcztcclxuXHJcbiAgICBjb25zdCByZXNpemVQcm9wcyA9XHJcbiAgICAgIHJlc2l6ZUNvbHVtbiA9PT0gdHJ1ZSA/IHsgY29tcG9uZW50czogdGhpcy5jb21wb25lbnRzIH0gOiBudWxsO1xyXG4gICAgY29uc3QgeyB0YWJsZVRvb2wgfSA9IGNvbmZpZygpO1xyXG4gICAgbGV0IHRvb2xGbGFnID0gdHJ1ZTtcclxuICAgIGxldCB0b29scHJvcHMgPVxyXG4gICAgICB0aGlzLnByb3BzLnRvb2xiYXIgPT09IGZhbHNlIHx8IHRoaXMucHJvcHMudG9vbGJhcj8uc2hvdyA9PT0gZmFsc2VcclxuICAgICAgICA/IGZhbHNlXHJcbiAgICAgICAgOiB0cnVlO1xyXG4gICAgaWYgKCF0b29scHJvcHMpIHtcclxuICAgICAgdG9vbEZsYWcgPSB0b29scHJvcHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0b29sRmxhZyA9IHRhYmxlVG9vbC5zaG93ID09PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnByb3BzLnNob3dSb3dTZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgeyByb3dTZWxlY3Rpb24gPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgcHJvcHMgPSB7XHJcbiAgICAgICAgLi4ucHJvcHMsXHJcbiAgICAgICAgcm93U2VsZWN0aW9uOiB7XHJcbiAgICAgICAgICBzZWxlY3RlZFJvd0tleXM6IHRoaXMuc3RhdGUuc2VsZWN0ZWRSb3dLZXlzLFxyXG4gICAgICAgICAgb25TZWxlY3Q6IHRoaXMucm93U2VsZWN0aW9uT25TZWxlY3QuYmluZCh0aGlzKSxcclxuICAgICAgICAgIG9uU2VsZWN0QWxsOiB0aGlzLnJvd1NlbGVjdGlvbk9uU2VsZWN0QWxsLmJpbmQodGhpcyksXHJcbiAgICAgICAgICBjb2x1bW5XaWR0aDogNDAsXHJcbiAgICAgICAgICAuLi5yb3dTZWxlY3Rpb24sXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIGNvbnN0IERlZmF1bHRUYWJsZSA9IChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcIm5zYy10YWJsZVwiKX0+XHJcbiAgICAgICAge3Rvb2xGbGFnICYmIHRoaXMucmVuZGVyVG9vbEJhcigpfVxyXG4gICAgICAgIDxUYWJsZVxyXG4gICAgICAgICAgY2hpbGRyZW5Db2x1bW5OYW1lPVwiY2hpbGROb2Rlc1wiXHJcbiAgICAgICAgICBzaGVpdGVtXHJcbiAgICAgICAgICBkYXRhU291cmNlPXtuZXdEYXRhU291cmNlfVxyXG4gICAgICAgICAgY29sdW1ucz17dGhpcy5nZXRDb2x1bW5zKCl9XHJcbiAgICAgICAgICBsb2FkaW5nPXtsb2FkaW5nfVxyXG4gICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuc2MtdGFibGUtY29udGVudFwiKX1cclxuICAgICAgICAgIGxvY2FsZT17e1xyXG4gICAgICAgICAgICBlbXB0eVRleHQ6IChcclxuICAgICAgICAgICAgICA8Tm9EYXRhIGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwibnNjLXRhYmxlLW5vZGF0YVwiKX0gLz5cclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBzY3JvbGw9e3sgeDogXCJtYXgtY29udGVudFwiIH19XHJcbiAgICAgICAgICB7Li4ucmVzaXplUHJvcHN9XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICB7Li4uZHJhZ2FibGVQcm9wc31cclxuICAgICAgICAgIHNpemU9e3RhYmxlU2l6ZX1cclxuICAgICAgICAgIC8vIHBhZ2luYXRpb249e2ZhbHNlfVxyXG4gICAgICAgIC8+XHJcbiAgICAgICAgey8qIHtwcm9wcy5wYWdpbmF0aW9uICE9PSBmYWxzZSAmJiA8UGFnaW5hdGlvbiB7Li4ucGFnaW5hdGlvbn0gLz59ICovfVxyXG4gICAgICA8L2Rpdj5cclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIGRyYWdhYmxlID09PSB0cnVlID8gKFxyXG4gICAgICA8RG5kUHJvdmlkZXIgYmFja2VuZD17SFRNTDVCYWNrZW5kfT57RGVmYXVsdFRhYmxlfTwvRG5kUHJvdmlkZXI+XHJcbiAgICApIDogKFxyXG4gICAgICBEZWZhdWx0VGFibGVcclxuICAgICk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB3aXRoWmhMb2NhbGUoTlNDVGFi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
|