nsc-react-component 1.3.5 → 1.3.8

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.
@@ -3,7 +3,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi
3
3
  import "antd/es/select/style/css";
4
4
  import _Select from "antd/es/select";
5
5
  var _excluded = ["url", "listeners", "viewname", "cached", "cacheKey"],
6
- _excluded2 = ["children", "store", "data", "onChange", "options", "labelField", "valueField", "defaultStyle", "showGroup"];
6
+ _excluded2 = ["children", "store", "data", "onChange", "options", "labelField", "valueField", "defaultStyle", "showGroup", "addData", "deleteData"];
7
7
 
8
8
  function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
9
9
 
@@ -11,6 +11,18 @@ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (O
11
11
 
12
12
  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; }
13
13
 
14
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
15
+
16
+ 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."); }
17
+
18
+ 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); }
19
+
20
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
21
+
22
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
23
+
24
+ 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; }
25
+
14
26
  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; }
15
27
 
16
28
  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; }
@@ -43,6 +55,7 @@ import { utils } from "@bj-nsc/msn/lib/utils";
43
55
  import config from "../config";
44
56
  import styles from "./index.less";
45
57
  import cls from "classnames";
58
+ import PinyinMatch from "pinyin-match";
46
59
  var Option = _Select.Option,
47
60
  OptGroup = _Select.OptGroup;
48
61
 
@@ -60,7 +73,10 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
60
73
 
61
74
  _defineProperty(_assertThisInitialized(_this2), "state", {
62
75
  dataSource: [],
63
- selectValue: null
76
+ selectValue: null,
77
+ allDataSource: [],
78
+ children: null,
79
+ allChildren: null
64
80
  });
65
81
 
66
82
  _defineProperty(_assertThisInitialized(_this2), "store", {});
@@ -69,7 +85,13 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
69
85
  _props$store = props.store,
70
86
  store = _props$store === void 0 ? {} : _props$store,
71
87
  children = props.children,
72
- options = props.options;
88
+ options = props.options,
89
+ _props$addData = props.addData,
90
+ addData = _props$addData === void 0 ? [] : _props$addData,
91
+ _props$deleteData = props.deleteData,
92
+ deleteData = _props$deleteData === void 0 ? [] : _props$deleteData,
93
+ _props$valueField = props.valueField,
94
+ valueField = _props$valueField === void 0 ? "value" : _props$valueField;
73
95
 
74
96
  var url = store.url,
75
97
  _store$listeners = store.listeners,
@@ -82,6 +104,30 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
82
104
  var _config = config(),
83
105
  viewUrl = _config.viewUrl;
84
106
 
107
+ var getAllData = function getAllData(data) {
108
+ var newData = _toConsumableArray(data);
109
+
110
+ if (addData.length > 0) {
111
+ newData = [].concat(_toConsumableArray(addData), _toConsumableArray(newData));
112
+ }
113
+
114
+ if (deleteData.length > 0) {
115
+ var valueFields = valueField.split(",");
116
+ newData.map(function (item, i) {
117
+ var value = "";
118
+ valueFields.map(function (v, index) {
119
+ value = index == 0 ? value + item[v] : value + "," + item[v];
120
+ });
121
+
122
+ if (deleteData.indexOf(value) > -1) {
123
+ newData.splice(i, 1);
124
+ }
125
+ });
126
+ }
127
+
128
+ return newData;
129
+ };
130
+
85
131
  if (!children) {
86
132
  if (!(data || viewname || url || options)) {
87
133
  throw new Error("url、viewname、data、options不能都为空!");
@@ -97,15 +143,21 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
97
143
  utils.callback(listenersPops.onBeforeLoad, _this, [store, options]);
98
144
  },
99
145
  load: function load(data, modelData, store) {
146
+ var newData = getAllData(data);
147
+
100
148
  _this.setState({
101
- dataSource: modelData
149
+ dataSource: newData,
150
+ allDataSource: newData
102
151
  });
103
152
 
104
153
  utils.callback(listenersPops.load, _this, [data, modelData, store]);
105
154
  },
106
155
  dataChanged: function dataChanged(data, modelData, store) {
156
+ var newData = getAllData(data);
157
+
107
158
  _this.setState({
108
- dataSource: modelData
159
+ dataSource: newData,
160
+ allDataSource: newData
109
161
  });
110
162
 
111
163
  utils.callback(listenersPops.dataChanged, _this, [data, modelData, store]);
@@ -142,7 +194,7 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
142
194
  _createClass(NSCSelect, [{
143
195
  key: "getData",
144
196
  value: function getData() {
145
- return this.state.dataSource;
197
+ return this.state.allDataSource;
146
198
  }
147
199
  }, {
148
200
  key: "getValue",
@@ -166,20 +218,137 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
166
218
 
167
219
  if (!children && (data || options)) {
168
220
  this.setState({
169
- dataSource: data ? data : options
221
+ dataSource: data ? data : options,
222
+ allDataSource: data ? data : options
223
+ });
224
+ } else if (children) {
225
+ this.setState({
226
+ children: children,
227
+ allChildren: children
170
228
  });
171
229
  }
172
230
  }
231
+ }, {
232
+ key: "componentDidUpdate",
233
+ value: function componentDidUpdate(newProps, newState, Snapshot) {
234
+ var _this$props2 = this.props,
235
+ data = _this$props2.data,
236
+ options = _this$props2.options,
237
+ children = _this$props2.children;
238
+ var _this$state = this.state,
239
+ allDataSource = _this$state.allDataSource,
240
+ allChildren = _this$state.allChildren;
241
+
242
+ if (!children && (data || options)) {
243
+ var newData = data ? data : options;
244
+
245
+ if (JSON.stringify(allDataSource) !== JSON.stringify(newData)) {
246
+ return {
247
+ dataSource: newData,
248
+ allDataSource: newData
249
+ };
250
+ }
251
+ } else if (children && Array.isArray(children)) {
252
+ var stateChildrenProps = [];
253
+ allChildren.map(function (s) {
254
+ stateChildrenProps.push(s.props);
255
+ });
256
+ var childrenProps = [];
257
+ children.map(function (c) {
258
+ childrenProps.push(c.props);
259
+ });
260
+
261
+ if (JSON.stringify(stateChildrenProps) !== JSON.stringify(childrenProps)) {
262
+ this.setState({
263
+ children: children,
264
+ allChildren: children
265
+ });
266
+ }
267
+ }
268
+ }
269
+ }, {
270
+ key: "onSearch",
271
+ value: function onSearch(value) {
272
+ var _this$state2 = this.state,
273
+ allDataSource = _this$state2.allDataSource,
274
+ allChildren = _this$state2.allChildren;
275
+ var _this$props3 = this.props,
276
+ _this$props3$labelFie = _this$props3.labelField,
277
+ labelField = _this$props3$labelFie === void 0 ? "label" : _this$props3$labelFie,
278
+ _this$props3$filterOp = _this$props3.filterOption,
279
+ filterOption = _this$props3$filterOp === void 0 ? true : _this$props3$filterOp,
280
+ onSearch = _this$props3.onSearch,
281
+ children = _this$props3.children;
282
+
283
+ if (filterOption) {
284
+ var result = [];
285
+
286
+ if (!children) {
287
+ if (value) {
288
+ allDataSource.forEach(function (item) {
289
+ var label = "";
290
+
291
+ if (labelField.split(",").length == 1) {
292
+ label = item[labelField];
293
+ } else {
294
+ var labelFields = labelField.split(",");
295
+ labelFields.map(function (l, index) {
296
+ label = index == 0 ? label + item[l] : label + "-" + item[l];
297
+ });
298
+ }
299
+
300
+ var flag = PinyinMatch.match(label, value);
301
+
302
+ if (flag) {
303
+ result.push(item);
304
+ }
305
+ });
306
+ this.setState({
307
+ dataSource: result
308
+ });
309
+ } else {
310
+ this.setState({
311
+ dataSource: allDataSource
312
+ });
313
+ }
314
+ } else {
315
+ if (value) {
316
+ if (Array.isArray(allChildren)) {
317
+ allChildren.map(function (child, index) {
318
+ var _child$props;
319
+
320
+ var label = child === null || child === void 0 ? void 0 : (_child$props = child.props) === null || _child$props === void 0 ? void 0 : _child$props.children;
321
+ var flag = PinyinMatch.match(label, value);
322
+
323
+ if (flag) {
324
+ result.push(child);
325
+ }
326
+ });
327
+ }
328
+
329
+ this.setState({
330
+ children: result
331
+ });
332
+ } else {
333
+ this.setState({
334
+ children: children
335
+ });
336
+ }
337
+ }
338
+ }
339
+
340
+ onSearch && onSearch(value);
341
+ }
173
342
  }, {
174
343
  key: "renderOption",
175
344
  value: function renderOption(optionData) {
176
- var _this$props2 = this.props,
177
- _this$props2$labelFie = _this$props2.labelField,
178
- labelField = _this$props2$labelFie === void 0 ? "label" : _this$props2$labelFie,
179
- _this$props2$valueFie = _this$props2.valueField,
180
- valueField = _this$props2$valueFie === void 0 ? "value" : _this$props2$valueFie,
181
- _this$props2$store = _this$props2.store,
182
- store = _this$props2$store === void 0 ? {} : _this$props2$store;
345
+ var _this$props4 = this.props,
346
+ _this$props4$labelFie = _this$props4.labelField,
347
+ labelField = _this$props4$labelFie === void 0 ? "label" : _this$props4$labelFie,
348
+ _this$props4$valueFie = _this$props4.valueField,
349
+ valueField = _this$props4$valueFie === void 0 ? "value" : _this$props4$valueFie,
350
+ _this$props4$store = _this$props4.store,
351
+ store = _this$props4$store === void 0 ? {} : _this$props4$store;
183
352
  return optionData.map(function (item) {
184
353
  var value = "";
185
354
 
@@ -217,11 +386,11 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
217
386
  value: function renderChildren() {
218
387
  var _this3 = this;
219
388
 
220
- var _this$props3 = this.props,
221
- children = _this$props3.children,
222
- _this$props3$showGrou = _this$props3.showGroup,
223
- showGroup = _this$props3$showGrou === void 0 ? true : _this$props3$showGrou;
224
- var dataSource = this.state.dataSource;
389
+ var _this$props$showGroup = this.props.showGroup,
390
+ showGroup = _this$props$showGroup === void 0 ? true : _this$props$showGroup;
391
+ var _this$state3 = this.state,
392
+ dataSource = _this$state3.dataSource,
393
+ children = _this$state3.children;
225
394
 
226
395
  if (children) {
227
396
  return /*#__PURE__*/React.createElement(React.Fragment, null, children);
@@ -263,21 +432,24 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
263
432
  }, {
264
433
  key: "render",
265
434
  value: function render() {
266
- var _this$props4 = this.props,
267
- children = _this$props4.children,
268
- store = _this$props4.store,
269
- data = _this$props4.data,
270
- onChange = _this$props4.onChange,
271
- options = _this$props4.options,
272
- labelField = _this$props4.labelField,
273
- valueField = _this$props4.valueField,
274
- _this$props4$defaultS = _this$props4.defaultStyle,
275
- defaultStyle = _this$props4$defaultS === void 0 ? true : _this$props4$defaultS,
276
- _this$props4$showGrou = _this$props4.showGroup,
277
- showGroup = _this$props4$showGrou === void 0 ? true : _this$props4$showGrou,
278
- params = _objectWithoutProperties(_this$props4, _excluded2);
435
+ var _this$props5 = this.props,
436
+ children = _this$props5.children,
437
+ store = _this$props5.store,
438
+ data = _this$props5.data,
439
+ onChange = _this$props5.onChange,
440
+ options = _this$props5.options,
441
+ labelField = _this$props5.labelField,
442
+ valueField = _this$props5.valueField,
443
+ _this$props5$defaultS = _this$props5.defaultStyle,
444
+ defaultStyle = _this$props5$defaultS === void 0 ? true : _this$props5$defaultS,
445
+ _this$props5$showGrou = _this$props5.showGroup,
446
+ showGroup = _this$props5$showGrou === void 0 ? true : _this$props5$showGrou,
447
+ addData = _this$props5.addData,
448
+ deleteData = _this$props5.deleteData,
449
+ params = _objectWithoutProperties(_this$props5, _excluded2);
279
450
 
280
451
  var props = {
452
+ filterOption: false,
281
453
  showSearch: true,
282
454
  optionFilterProp: "label",
283
455
  placeholder: "请选择",
@@ -288,38 +460,18 @@ var NSCSelect = /*#__PURE__*/function (_PureComponent) {
288
460
  return /*#__PURE__*/React.createElement("div", {
289
461
  className: cls(styles["nsc_select"], this.props.className)
290
462
  }, /*#__PURE__*/React.createElement(_Select, _extends({
291
- value: this.state.selectValue
292
- }, props, params, {
293
- onChange: this.onChange.bind(this)
294
- }), this.renderChildren()));
463
+ value: this.state.selectValue,
464
+ onChange: this.onChange.bind(this),
465
+ onSearch: this.onSearch.bind(this)
466
+ }, props, params), this.renderChildren()));
295
467
  } else {
296
468
  return /*#__PURE__*/React.createElement(_Select, _extends({
297
- value: this.state.selectValue
298
- }, props, params, {
469
+ value: this.state.selectValue,
470
+ onSearch: this.onSearch.bind(this),
299
471
  onChange: this.onChange.bind(this)
300
- }), this.renderChildren());
472
+ }, props, params), this.renderChildren());
301
473
  }
302
474
  }
303
- }], [{
304
- key: "getDerivedStateFromProps",
305
- value: function getDerivedStateFromProps(nextProps, prevState) {
306
- var dataSource = prevState.dataSource;
307
- var data = nextProps.data,
308
- options = nextProps.options,
309
- store = nextProps.store;
310
-
311
- if (data || options) {
312
- var newData = data ? data : options;
313
-
314
- if (JSON.stringify(dataSource) !== JSON.stringify(newData)) {
315
- return {
316
- dataSource: newData
317
- };
318
- }
319
- }
320
-
321
- return null;
322
- }
323
475
  }]);
324
476
 
325
477
  return NSCSelect;
@@ -330,4 +482,4 @@ _defineProperty(NSCSelect, "Option", Option);
330
482
  _defineProperty(NSCSelect, "OptGroup", OptGroup);
331
483
 
332
484
  export { NSCSelect as default };
333
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NlbGVjdC9pbmRleC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiU3RvcmUiLCJ1dGlscyIsImNvbmZpZyIsInN0eWxlcyIsImNscyIsIk9wdGlvbiIsIk9wdEdyb3VwIiwiTlNDU2VsZWN0IiwicHJvcHMiLCJkYXRhU291cmNlIiwic2VsZWN0VmFsdWUiLCJkYXRhIiwic3RvcmUiLCJjaGlsZHJlbiIsIm9wdGlvbnMiLCJ1cmwiLCJsaXN0ZW5lcnMiLCJsaXN0ZW5lcnNQb3BzIiwidmlld25hbWUiLCJjYWNoZWQiLCJjYWNoZUtleSIsInN0b3JlcyIsInZpZXdVcmwiLCJFcnJvciIsIl90aGlzIiwic3RvcmVQcm9wcyIsIm1vZGVsIiwiY29tcG9uZW50Iiwib25CZWZvcmVMb2FkIiwiY2FsbGJhY2siLCJsb2FkIiwibW9kZWxEYXRhIiwic2V0U3RhdGUiLCJkYXRhQ2hhbmdlZCIsImlzQ2FjaGVkIiwiaXNDYWNoZUtleSIsImF1dG9Mb2FkIiwic3RhdGUiLCJ2YWx1ZSIsIm9wdGlvbkRhdGEiLCJsYWJlbEZpZWxkIiwidmFsdWVGaWVsZCIsIm1hcCIsIml0ZW0iLCJzcGxpdCIsImxlbmd0aCIsInZhbHVlRmllbGRzIiwidiIsImluZGV4Iiwia2V5IiwiaWQiLCJsYWJlbCIsImxhYmVsRmllbGRzIiwibCIsImRpc2FibGVkIiwic2hvd0dyb3VwIiwib3B0R3JvdXBEYXRhIiwiZm9yRWFjaCIsImdyb3VwTmFtZSIsInB1c2giLCJvcHRpb24iLCJyZW5kZXJPcHRpb24iLCJvcHRHcm91cCIsIk9iamVjdCIsImtleXMiLCJvbkNoYW5nZSIsImRlZmF1bHRTdHlsZSIsInBhcmFtcyIsInNob3dTZWFyY2giLCJvcHRpb25GaWx0ZXJQcm9wIiwicGxhY2Vob2xkZXIiLCJhbGxvd0NsZWFyIiwiY2xhc3NOYW1lIiwiYmluZCIsInJlbmRlckNoaWxkcmVuIiwibmV4dFByb3BzIiwicHJldlN0YXRlIiwi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S0MsY0FBTCxFQU5ILENBREYsQ0FERjtBQVlELE9BYkQsTUFhTztBQUNMLDRCQUNFO0FBQ0UsVUFBQSxLQUFLLEVBQUUsS0FBS3JDLEtBQUwsQ0FBVzNCO0FBRHBCLFdBRU1GLEtBRk4sRUFHTTJELE1BSE47QUFJRSxVQUFBLFFBQVEsRUFBRSxLQUFLRixRQUFMLENBQWNRLElBQWQsQ0FBbUIsSUFBbkI7QUFKWixZQU1HLEtBQUtDLGNBQUwsRUFOSCxDQURGO0FBVUQ7QUFDRjs7O1dBek5ELGtDQUFnQ0MsU0FBaEMsRUFBMkNDLFNBQTNDLEVBQTJEO0FBQ3pELFVBQVFuRSxVQUFSLEdBQXVCbUUsU0FBdkIsQ0FBUW5FLFVBQVI7QUFDQSxVQUFRRSxJQUFSLEdBQWlDZ0UsU0FBakMsQ0FBUWhFLElBQVI7QUFBQSxVQUFjRyxPQUFkLEdBQWlDNkQsU0FBakMsQ0FBYzdELE9BQWQ7QUFBQSxVQUF1QkYsS0FBdkIsR0FBaUMrRCxTQUFqQyxDQUF1Qi9ELEtBQXZCOztBQUNBLFVBQUlELElBQUksSUFBSUcsT0FBWixFQUFxQjtBQUNuQixZQUFNK0QsT0FBTyxHQUFHbEUsSUFBSSxHQUFHQSxJQUFILEdBQVVHLE9BQTlCOztBQUNBLFlBQUlnRSxJQUFJLENBQUNDLFNBQUwsQ0FBZXRFLFVBQWYsTUFBK0JxRSxJQUFJLENBQUNDLFNBQUwsQ0FBZUYsT0FBZixDQUFuQyxFQUE0RDtBQUMxRCxpQkFBTztBQUNMcEUsWUFBQUEsVUFBVSxFQUFFb0U7QUFEUCxXQUFQO0FBR0Q7QUFDRjs7QUFDRCxhQUFPLElBQVA7QUFDRDs7OztFQXBCb0M5RSxhOztnQkFBbEJRLFMsWUFDSEYsTTs7Z0JBREdFLFMsY0FFREQsUTs7U0FGQ0MsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBQdXJlQ29tcG9uZW50IH0gZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCB7IFNlbGVjdCwgU2VsZWN0UHJvcHMgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgU3RvcmUsIHsgU3RvcmVQcm9wcyB9IGZyb20gXCJAYmotbnNjL21zblwiO1xyXG5pbXBvcnQgeyB1dGlscyB9IGZyb20gXCJAYmotbnNjL21zbi9saWIvdXRpbHNcIjtcclxuaW1wb3J0IGNvbmZpZyBmcm9tIFwiLi4vY29uZmlnXCI7XHJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vaW5kZXgubGVzc1wiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCBvbWl0IGZyb20gXCJvbWl0LmpzXCI7XHJcbmNvbnN0IHsgT3B0aW9uLCBPcHRHcm91cCB9ID0gU2VsZWN0O1xyXG5cclxuaW50ZXJmYWNlIElTZWxlY3RQcm9wcyBleHRlbmRzIFNlbGVjdFByb3BzPGFueT4ge1xyXG4gIHN0b3JlPzogU3RvcmVQcm9wcztcclxuICBkYXRhPzogQXJyYXk8T2JqZWN0PjsgLy/pu5jorqTmlbDmja5cclxuICBsYWJlbEZpZWxkPzogc3RyaW5nO1xyXG4gIHZhbHVlRmllbGQ/OiBzdHJpbmc7XHJcbiAgZGVmYXVsdFN0eWxlPzogYm9vbGVhbjtcclxuICBzaG93R3JvdXA/OiBib29sZWFuOyAvL+aYr+WQpuaYvuekuuWIhue7hFxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5TQ1NlbGVjdCBleHRlbmRzIFB1cmVDb21wb25lbnQ8SVNlbGVjdFByb3BzPiB7XHJcbiAgc3RhdGljIE9wdGlvbiA9IE9wdGlvbjtcclxuICBzdGF0aWMgT3B0R3JvdXAgPSBPcHRHcm91cDtcclxuICBzdGF0ZSA9IHtcclxuICAgIGRhdGFTb3VyY2U6IFtdLFxyXG4gICAgc2VsZWN0VmFsdWU6IG51bGwsXHJcbiAgfTtcclxuICBzdG9yZSA9IHt9IGFzIFN0b3JlUHJvcHM7XHJcbiAgc3RhdGljIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZTogYW55KSB7XHJcbiAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IHByZXZTdGF0ZTtcclxuICAgIGNvbnN0IHsgZGF0YSwgb3B0aW9ucywgc3RvcmUgfSA9IG5leHRQcm9wcztcclxuICAgIGlmIChkYXRhIHx8IG9wdGlvbnMpIHtcclxuICAgICAgY29uc3QgbmV3RGF0YSA9IGRhdGEgPyBkYXRhIDogb3B0aW9ucztcclxuICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGRhdGFTb3VyY2UpICE9PSBKU09OLnN0cmluZ2lmeShuZXdEYXRhKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBkYXRhU291cmNlOiBuZXdEYXRhLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgc3VwZXIocHJvcHMpO1xyXG4gICAgY29uc3QgeyBkYXRhLCBzdG9yZSA9IHt9LCBjaGlsZHJlbiwgb3B0aW9ucyB9ID0gcHJvcHM7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIHVybCxcclxuICAgICAgbGlzdGVuZXJzOiBsaXN0ZW5lcnNQb3BzID0ge30sXHJcbiAgICAgIHZpZXduYW1lLFxyXG4gICAgICBjYWNoZWQsXHJcbiAgICAgIGNhY2hlS2V5LFxyXG4gICAgICAuLi5zdG9yZXNcclxuICAgIH0gPSBzdG9yZTtcclxuICAgIGxldCB7IHZpZXdVcmwgfSA9IGNvbmZpZygpO1xyXG4gICAgaWYgKCFjaGlsZHJlbikge1xyXG4gICAgICBpZiAoIShkYXRhIHx8IHZpZXduYW1lIHx8IHVybCB8fCBvcHRpb25zKSkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVybOOAgXZpZXduYW1l44CBZGF0YeOAgW9wdGlvbnPkuI3og73pg73kuLrnqbrvvIFcIik7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IF90aGlzID0gdGhpcztcclxuICAgICAgbGV0IHN0b3JlUHJvcHMgPSB7XHJcbiAgICAgICAgbW9kZWw6IFwibW9kZWxcIixcclxuICAgICAgICBjb21wb25lbnQ6IHRoaXMsXHJcbiAgICAgICAgbGlzdGVuZXJzOiB7XHJcbiAgICAgICAgICBvbkJlZm9yZUxvYWQ6IGZ1bmN0aW9uIChzdG9yZSwgb3B0aW9ucykge1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQb3BzLm9uQmVmb3JlTG9hZCwgX3RoaXMsIFtzdG9yZSwgb3B0aW9uc10pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGxvYWQ6IGZ1bmN0aW9uIChkYXRhLCBtb2RlbERhdGEsIHN0b3JlKSB7XHJcbiAgICAgICAgICAgIF90aGlzLnNldFN0YXRlKHsgZGF0YVNvdXJjZTogbW9kZWxEYXRhIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQb3BzLmxvYWQsIF90aGlzLCBbZGF0YSwgbW9kZWxEYXRhLCBzdG9yZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiBmdW5jdGlvbiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkge1xyXG4gICAgICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7IGRhdGFTb3VyY2U6IG1vZGVsRGF0YSB9KTtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUG9wcy5kYXRhQ2hhbmdlZCwgX3RoaXMsIFtcclxuICAgICAgICAgICAgICBkYXRhLFxyXG4gICAgICAgICAgICAgIG1vZGVsRGF0YSxcclxuICAgICAgICAgICAgICBzdG9yZSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLi4uc3RvcmVzLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAoKHZpZXduYW1lIHx8IHVybCkgJiYgZGF0YSA9PSBudWxsICYmIG9wdGlvbnMgPT0gbnVsbCkge1xyXG4gICAgICAgIGxldCBpc0NhY2hlZCA9IGNhY2hlZDtcclxuICAgICAgICBsZXQgaXNDYWNoZUtleSA9IGNhY2hlS2V5O1xyXG4gICAgICAgIGlmICh2aWV3bmFtZSkge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjYWNoZWQgIT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIGlzQ2FjaGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaXNDYWNoZUtleSA9IGlzQ2FjaGVLZXkgPyBpc0NhY2hlS2V5IDogdmlld25hbWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0b3JlUHJvcHMgPSB7XHJcbiAgICAgICAgICAuLi57XHJcbiAgICAgICAgICAgIGF1dG9Mb2FkOiB0cnVlLFxyXG4gICAgICAgICAgICB1cmw6IHVybCB8fCB2aWV3VXJsICsgdmlld25hbWUsIC8v6K+75a2X5YW477yMdXJs5Zu65a6a77yMdmlld25hbWVcclxuICAgICAgICAgICAgY2FjaGVkOiBpc0NhY2hlZCxcclxuICAgICAgICAgICAgY2FjaGVLZXk6IGlzQ2FjaGVLZXksXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgLi4uc3RvcmVQcm9wcyxcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc3RvcmUgPSBuZXcgU3RvcmUoc3RvcmVQcm9wcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXREYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuZGF0YVNvdXJjZTtcclxuICB9XHJcblxyXG4gIGdldFZhbHVlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RhdGUuc2VsZWN0VmFsdWU7XHJcbiAgfVxyXG4gIHNldFZhbHVlKHZhbHVlKSB7XHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgc2VsZWN0VmFsdWU6IHZhbHVlLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpIHtcclxuICAgIGNvbnN0IHsgZGF0YSwgb3B0aW9ucywgY2hpbGRyZW4gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBpZiAoIWNoaWxkcmVuICYmIChkYXRhIHx8IG9wdGlvbnMpKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGRhdGFTb3VyY2U6IGRhdGEgPyBkYXRhIDogb3B0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW5kZXJPcHRpb24ob3B0aW9uRGF0YSkge1xyXG4gICAgbGV0IHsgbGFiZWxGaWVsZCA9IFwibGFiZWxcIiwgdmFsdWVGaWVsZCA9IFwidmFsdWVcIiwgc3RvcmUgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHJldHVybiBvcHRpb25EYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgICBpZiAodmFsdWVGaWVsZC5zcGxpdChcIixcIikubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB2YWx1ZSA9IGl0ZW1bdmFsdWVGaWVsZF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVGaWVsZHM6IGFueSA9IHZhbHVlRmllbGQuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHZhbHVlRmllbGRzLm1hcCgodiwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHZhbHVlID0gaW5kZXggPT0gMCA/IHZhbHVlICsgaXRlbVt2XSA6IHZhbHVlICsgXCIsXCIgKyBpdGVtW3ZdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBrZXkgPSBpdGVtLmlkID8gKGl0ZW0uaWQgIT09IFwidW5kZWZpbmVkXCIgPyBpdGVtLmlkIDogdmFsdWUpIDogdmFsdWU7XHJcbiAgICAgIGxldCBsYWJlbCA9IFwiXCI7XHJcbiAgICAgIGlmIChsYWJlbEZpZWxkLnNwbGl0KFwiLFwiKS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIGxhYmVsID0gaXRlbVtsYWJlbEZpZWxkXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBsYWJlbEZpZWxkczogYW55ID0gbGFiZWxGaWVsZC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbGFiZWxGaWVsZHMubWFwKChsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgbGFiZWwgPSBpbmRleCA9PSAwID8gbGFiZWwgKyBpdGVtW2xdIDogbGFiZWwgKyBcIi1cIiArIGl0ZW1bbF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8T3B0aW9uXHJcbiAgICAgICAgICBrZXk9e2tleX1cclxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cclxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cclxuICAgICAgICAgIGRpc2FibGVkPXtpdGVtLmRpc2FibGVkID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtsYWJlbH1cclxuICAgICAgICA8L09wdGlvbj5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXJDaGlsZHJlbigpIHtcclxuICAgIGNvbnN0IHsgY2hpbGRyZW4sIHNob3dHcm91cCA9IHRydWUgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IGRhdGFTb3VyY2UgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvcHRHcm91cERhdGEgPSB7fSxcclxuICAgICAgICBvcHRpb25EYXRhID0gW107XHJcbiAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbCA9IGl0ZW0uZ3JvdXBOYW1lO1xyXG4gICAgICAgIGlmIChsYWJlbCAmJiBzaG93R3JvdXApIHtcclxuICAgICAgICAgIGlmICghb3B0R3JvdXBEYXRhW2xhYmVsXSkgb3B0R3JvdXBEYXRhW2xhYmVsXSA9IFtdO1xyXG4gICAgICAgICAgb3B0R3JvdXBEYXRhW2xhYmVsXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvcHRpb25EYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IG9wdGlvbiA9IHRoaXMucmVuZGVyT3B0aW9uKG9wdGlvbkRhdGEpO1xyXG4gICAgICBsZXQgb3B0R3JvdXAgPSBPYmplY3Qua2V5cyhvcHRHcm91cERhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxPcHRHcm91cCBrZXk9e2tleX0gbGFiZWw9e2tleX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnJlbmRlck9wdGlvbihvcHRHcm91cERhdGFba2V5XSl9XHJcbiAgICAgICAgICA8L09wdEdyb3VwPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICB7b3B0aW9ufVxyXG4gICAgICAgICAge29wdEdyb3VwfVxyXG4gICAgICAgIDwvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkNoYW5nZSh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RWYWx1ZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICAgIGlmIChvbkNoYW5nZSkge1xyXG4gICAgICBvbkNoYW5nZSh2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN0b3JlLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgb3B0aW9ucyxcclxuICAgICAgbGFiZWxGaWVsZCxcclxuICAgICAgdmFsdWVGaWVsZCxcclxuICAgICAgZGVmYXVsdFN0eWxlID0gdHJ1ZSxcclxuICAgICAgc2hvd0dyb3VwID0gdHJ1ZSxcclxuICAgICAgLi4ucGFyYW1zXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICBzaG93U2VhcmNoOiB0cnVlLFxyXG4gICAgICBvcHRpb25GaWx0ZXJQcm9wOiBcImxhYmVsXCIsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxyXG4gICAgICBhbGxvd0NsZWFyOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIGlmIChkZWZhdWx0U3R5bGUpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKHN0eWxlc1tcIm5zY19zZWxlY3RcIl0sIHRoaXMucHJvcHMuY2xhc3NOYW1lKX0+XHJcbiAgICAgICAgICA8U2VsZWN0XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnNlbGVjdFZhbHVlfVxyXG4gICAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICAgIG9uQ2hhbmdlPXt0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyl9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckNoaWxkcmVuKCl9XHJcbiAgICAgICAgICA8L1NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPFNlbGVjdFxyXG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc2VsZWN0VmFsdWV9XHJcbiAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICB7Li4ucGFyYW1zfVxyXG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7dGhpcy5yZW5kZXJDaGlsZHJlbigpfVxyXG4gICAgICAgIDwvU2VsZWN0PlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=
485
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnRzL3NlbGVjdC9pbmRleC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiU3RvcmUiLCJ1dGlscyIsImNvbmZpZyIsInN0eWxlcyIsImNscyIsIlBpbnlpbk1hdGNoIiwiT3B0aW9uIiwiT3B0R3JvdXAiLCJOU0NTZWxlY3QiLCJwcm9wcyIsImRhdGFTb3VyY2UiLCJzZWxlY3RWYWx1ZSIsImFsbERhdGFTb3VyY2UiLCJjaGlsZHJlbiIsImFsbENoaWxkcmVuIiwiZGF0YSIsInN0b3JlIiwib3B0aW9ucyIsImFkZERhdGEiLCJkZWxldGVEYXRhIiwidmFsdWVGaWVsZCIsInVybCIsImxpc3RlbmVycyIsImxpc3RlbmVyc1BvcHMiLCJ2aWV3bmFtZSIsImNhY2hlZCIsImNhY2hlS2V5Iiwic3RvcmVzIiwidmlld1VybCIsImdldEFsbERhdGEiLCJuZXdEYXRhIiwibGVuZ3RoIiwidmFsdWVGaWVsZHMiLCJzcGxpdCIsIm1hcCIsIml0ZW0iLCJpIiwidmFsdWUiLCJ2IiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwiRXJyb3IiLCJfdGhpcyIsInN0b3JlUHJvcHMiLCJtb2RlbCIsImNvbXBvbmVudCIsIm9uQmVmb3JlTG9hZCIsImNhbGxiYWNrIiwibG9hZCIsIm1vZGVsRGF0YSIsInNldFN0YXRlIiwiZGF0YUNoYW5nZWQiLCJpc0NhY2hlZCIsImlzQ2FjaGVLZXkiLCJhdXRvTG9hZCIsInN0YXRlIiwibmV3UHJvcHMiLCJuZXdTdGF0ZSIsIlNuYXBzaG90IiwiSlNPTiIsInN0cmluZ2lmeSIsIkFycmF5IiwiaXNBcnJheSIsInN0YXRlQ2hpbGRyZW5Qcm9wcyIsInMiLCJwdXNoIiwiY2hpbGRyZW5Qcm9wcyIsImMiLCJsYWJlbEZpZWxkIiwiZmlsdGVyT3B0aW9uIiwib25TZWFyY2giLCJyZXN1bHQiLCJmb3JFYWNoIiwibGFiZWwiLCJsYWJlbEZpZWxkcyIsImwiLCJmbGFnIiwibWF0Y2giLCJjaGlsZCIsIm9wdGlvbkRhdGEiLCJrZXkiLCJpZCIsImRpc2FibGVkIiwic2hvd0dyb3VwIiwib3B0R3JvdXBEYXRhIiwiZ3JvdXBOYW1lIiwib3B0aW9uIiwicmVuZGVyT3B0aW9uIiwib3B0R3JvdXAiLCJPYmplY3QiLCJrZXlzIiwib25DaGFuZ2UiLCJkZWZhdWx0U3R5bGUiLCJwYXJhbXMiLCJzaG93U2VhcmNoIiwib3B0aW9uRmlsdGVyUHJvcCIsInBsYWNlaG9sZGVyIiwiYWxsb3dDbGVhciIsImNsYXNzTmFtZSIsImJpbmQiLCJyZW5kZXJDaGlsZHJlbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUFnQkMsYUFBaEIsUUFBcUMsT0FBckM7QUFFQSxPQUFPQyxLQUFQLE1BQWtDLGFBQWxDO0FBQ0EsU0FBU0MsS0FBVCxRQUFzQix1QkFBdEI7QUFDQSxPQUFPQyxNQUFQLE1BQW1CLFdBQW5CO0FBQ0EsT0FBT0MsTUFBUCxNQUFtQixjQUFuQjtBQUNBLE9BQU9DLEdBQVAsTUFBZ0IsWUFBaEI7QUFFQSxPQUFPQyxXQUFQLE1BQXdCLGNBQXhCO0FBQ0EsSUFBUUMsTUFBUixXQUFRQSxNQUFSO0FBQUEsSUFBZ0JDLFFBQWhCLFdBQWdCQSxRQUFoQjs7SUFhcUJDLFM7Ozs7O0FBV25CLHFCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUE7O0FBQ2pCLCtCQUFNQSxLQUFOOztBQURpQiw2REFSWDtBQUNOQyxNQUFBQSxVQUFVLEVBQUUsRUFETjtBQUVOQyxNQUFBQSxXQUFXLEVBQUUsSUFGUDtBQUdOQyxNQUFBQSxhQUFhLEVBQUUsRUFIVDtBQUlOQyxNQUFBQSxRQUFRLEVBQUUsSUFKSjtBQUtOQyxNQUFBQSxXQUFXLEVBQUU7QUFMUCxLQVFXOztBQUFBLDZEQURYLEVBQ1c7O0FBRWpCLFFBQ0VDLElBREYsR0FRSU4sS0FSSixDQUNFTSxJQURGO0FBQUEsdUJBUUlOLEtBUkosQ0FFRU8sS0FGRjtBQUFBLFFBRUVBLEtBRkYsNkJBRVUsRUFGVjtBQUFBLFFBR0VILFFBSEYsR0FRSUosS0FSSixDQUdFSSxRQUhGO0FBQUEsUUFJRUksT0FKRixHQVFJUixLQVJKLENBSUVRLE9BSkY7QUFBQSx5QkFRSVIsS0FSSixDQUtFUyxPQUxGO0FBQUEsUUFLRUEsT0FMRiwrQkFLWSxFQUxaO0FBQUEsNEJBUUlULEtBUkosQ0FNRVUsVUFORjtBQUFBLFFBTUVBLFVBTkYsa0NBTWUsRUFOZjtBQUFBLDRCQVFJVixLQVJKLENBT0VXLFVBUEY7QUFBQSxRQU9FQSxVQVBGLGtDQU9lLE9BUGY7O0FBU0EsUUFDRUMsR0FERixHQU9JTCxLQVBKLENBQ0VLLEdBREY7QUFBQSwyQkFPSUwsS0FQSixDQUVFTSxTQUZGO0FBQUEsUUFFYUMsYUFGYixpQ0FFNkIsRUFGN0I7QUFBQSxRQUdFQyxRQUhGLEdBT0lSLEtBUEosQ0FHRVEsUUFIRjtBQUFBLFFBSUVDLE1BSkYsR0FPSVQsS0FQSixDQUlFUyxNQUpGO0FBQUEsUUFLRUMsUUFMRixHQU9JVixLQVBKLENBS0VVLFFBTEY7QUFBQSxRQU1LQyxNQU5MLDRCQU9JWCxLQVBKOztBQVFBLGtCQUFrQmQsTUFBTSxFQUF4QjtBQUFBLFFBQU0wQixPQUFOLFdBQU1BLE9BQU47O0FBQ0EsUUFBTUMsVUFBVSxHQUFHLFNBQWJBLFVBQWEsQ0FBQ2QsSUFBRCxFQUFVO0FBQzNCLFVBQUllLE9BQU8sc0JBQU9mLElBQVAsQ0FBWDs7QUFDQSxVQUFJRyxPQUFPLENBQUNhLE1BQVIsR0FBaUIsQ0FBckIsRUFBd0I7QUFDdEJELFFBQUFBLE9BQU8sZ0NBQU9aLE9BQVAsc0JBQW1CWSxPQUFuQixFQUFQO0FBQ0Q7O0FBQ0QsVUFBSVgsVUFBVSxDQUFDWSxNQUFYLEdBQW9CLENBQXhCLEVBQTJCO0FBQ3pCLFlBQU1DLFdBQWdCLEdBQUdaLFVBQVUsQ0FBQ2EsS0FBWCxDQUFpQixHQUFqQixDQUF6QjtBQUNBSCxRQUFBQSxPQUFPLENBQUNJLEdBQVIsQ0FBWSxVQUFDQyxJQUFELEVBQU9DLENBQVAsRUFBYTtBQUN2QixjQUFJQyxLQUFLLEdBQUcsRUFBWjtBQUNBTCxVQUFBQSxXQUFXLENBQUNFLEdBQVosQ0FBZ0IsVUFBQ0ksQ0FBRCxFQUFJQyxLQUFKLEVBQWM7QUFDNUJGLFlBQUFBLEtBQUssR0FBR0UsS0FBSyxJQUFJLENBQVQsR0FBYUYsS0FBSyxHQUFHRixJQUFJLENBQUNHLENBQUQsQ0FBekIsR0FBK0JELEtBQUssR0FBRyxHQUFSLEdBQWNGLElBQUksQ0FBQ0csQ0FBRCxDQUF6RDtBQUNELFdBRkQ7O0FBR0EsY0FBSW5CLFVBQVUsQ0FBQ3FCLE9BQVgsQ0FBbUJILEtBQW5CLElBQTRCLENBQUMsQ0FBakMsRUFBb0M7QUFDbENQLFlBQUFBLE9BQU8sQ0FBQ1csTUFBUixDQUFlTCxDQUFmLEVBQWtCLENBQWxCO0FBQ0Q7QUFDRixTQVJEO0FBU0Q7O0FBQ0QsYUFBT04sT0FBUDtBQUNELEtBbEJEOztBQW1CQSxRQUFJLENBQUNqQixRQUFMLEVBQWU7QUFDYixVQUFJLEVBQUVFLElBQUksSUFBSVMsUUFBUixJQUFvQkgsR0FBcEIsSUFBMkJKLE9BQTdCLENBQUosRUFBMkM7QUFDekMsY0FBTSxJQUFJeUIsS0FBSixDQUFVLGlDQUFWLENBQU47QUFDRDs7QUFDRCxVQUFJQyxLQUFLLGlDQUFUOztBQUNBLFVBQUlDLFVBQVU7QUFDWkMsUUFBQUEsS0FBSyxFQUFFLE9BREs7QUFFWkMsUUFBQUEsU0FBUyxnQ0FGRztBQUdaeEIsUUFBQUEsU0FBUyxFQUFFO0FBQ1R5QixVQUFBQSxZQUFZLEVBQUUsc0JBQVUvQixLQUFWLEVBQWlCQyxPQUFqQixFQUEwQjtBQUN0Q2hCLFlBQUFBLEtBQUssQ0FBQytDLFFBQU4sQ0FBZXpCLGFBQWEsQ0FBQ3dCLFlBQTdCLEVBQTJDSixLQUEzQyxFQUFrRCxDQUFDM0IsS0FBRCxFQUFRQyxPQUFSLENBQWxEO0FBQ0QsV0FIUTtBQUlUZ0MsVUFBQUEsSUFBSSxFQUFFLGNBQVVsQyxJQUFWLEVBQWdCbUMsU0FBaEIsRUFBMkJsQyxLQUEzQixFQUFrQztBQUN0QyxnQkFBTWMsT0FBTyxHQUFHRCxVQUFVLENBQUNkLElBQUQsQ0FBMUI7O0FBQ0E0QixZQUFBQSxLQUFLLENBQUNRLFFBQU4sQ0FBZTtBQUFFekMsY0FBQUEsVUFBVSxFQUFFb0IsT0FBZDtBQUF1QmxCLGNBQUFBLGFBQWEsRUFBRWtCO0FBQXRDLGFBQWY7O0FBQ0E3QixZQUFBQSxLQUFLLENBQUMrQyxRQUFOLENBQWV6QixhQUFhLENBQUMwQixJQUE3QixFQUFtQ04sS0FBbkMsRUFBMEMsQ0FBQzVCLElBQUQsRUFBT21DLFNBQVAsRUFBa0JsQyxLQUFsQixDQUExQztBQUNELFdBUlE7QUFTVG9DLFVBQUFBLFdBQVcsRUFBRSxxQkFBVXJDLElBQVYsRUFBZ0JtQyxTQUFoQixFQUEyQmxDLEtBQTNCLEVBQWtDO0FBQzdDLGdCQUFNYyxPQUFPLEdBQUdELFVBQVUsQ0FBQ2QsSUFBRCxDQUExQjs7QUFDQTRCLFlBQUFBLEtBQUssQ0FBQ1EsUUFBTixDQUFlO0FBQUV6QyxjQUFBQSxVQUFVLEVBQUVvQixPQUFkO0FBQXVCbEIsY0FBQUEsYUFBYSxFQUFFa0I7QUFBdEMsYUFBZjs7QUFDQTdCLFlBQUFBLEtBQUssQ0FBQytDLFFBQU4sQ0FBZXpCLGFBQWEsQ0FBQzZCLFdBQTdCLEVBQTBDVCxLQUExQyxFQUFpRCxDQUMvQzVCLElBRCtDLEVBRS9DbUMsU0FGK0MsRUFHL0NsQyxLQUgrQyxDQUFqRDtBQUtEO0FBakJRO0FBSEMsU0FzQlRXLE1BdEJTLENBQWQ7O0FBd0JBLFVBQUksQ0FBQ0gsUUFBUSxJQUFJSCxHQUFiLEtBQXFCTixJQUFJLElBQUksSUFBN0IsSUFBcUNFLE9BQU8sSUFBSSxJQUFwRCxFQUEwRDtBQUN4RCxZQUFJb0MsUUFBUSxHQUFHNUIsTUFBZjtBQUNBLFlBQUk2QixVQUFVLEdBQUc1QixRQUFqQjs7QUFDQSxZQUFJRixRQUFKLEVBQWM7QUFDWixjQUFJLE9BQU9DLE1BQVAsS0FBa0IsU0FBdEIsRUFBaUM7QUFDL0I0QixZQUFBQSxRQUFRLEdBQUcsSUFBWDtBQUNBQyxZQUFBQSxVQUFVLEdBQUdBLFVBQVUsR0FBR0EsVUFBSCxHQUFnQjlCLFFBQXZDO0FBQ0Q7QUFDRjs7QUFDRG9CLFFBQUFBLFVBQVUsbUNBQ0w7QUFDRFcsVUFBQUEsUUFBUSxFQUFFLElBRFQ7QUFFRGxDLFVBQUFBLEdBQUcsRUFBRUEsR0FBRyxJQUFJTyxPQUFPLEdBQUdKLFFBRnJCO0FBRStCO0FBQ2hDQyxVQUFBQSxNQUFNLEVBQUU0QixRQUhQO0FBSUQzQixVQUFBQSxRQUFRLEVBQUU0QjtBQUpULFNBREssR0FPTFYsVUFQSyxDQUFWO0FBU0Q7O0FBQ0QsYUFBSzVCLEtBQUwsR0FBYSxJQUFJaEIsS0FBSixDQUFVNEMsVUFBVixDQUFiO0FBQ0Q7O0FBeEZnQjtBQXlGbEI7Ozs7V0FFRCxtQkFBVTtBQUNSLGFBQU8sS0FBS1ksS0FBTCxDQUFXNUMsYUFBbEI7QUFDRDs7O1dBRUQsb0JBQVc7QUFDVCxhQUFPLEtBQUs0QyxLQUFMLENBQVc3QyxXQUFsQjtBQUNEOzs7V0FDRCxrQkFBUzBCLEtBQVQsRUFBZ0I7QUFDZCxXQUFLYyxRQUFMLENBQWM7QUFDWnhDLFFBQUFBLFdBQVcsRUFBRTBCO0FBREQsT0FBZDtBQUdEOzs7V0FFRCw2QkFBb0I7QUFDbEIsd0JBQW9DLEtBQUs1QixLQUF6QztBQUFBLFVBQVFNLElBQVIsZUFBUUEsSUFBUjtBQUFBLFVBQWNFLE9BQWQsZUFBY0EsT0FBZDtBQUFBLFVBQXVCSixRQUF2QixlQUF1QkEsUUFBdkI7O0FBQ0EsVUFBSSxDQUFDQSxRQUFELEtBQWNFLElBQUksSUFBSUUsT0FBdEIsQ0FBSixFQUFvQztBQUNsQyxhQUFLa0MsUUFBTCxDQUFjO0FBQ1p6QyxVQUFBQSxVQUFVLEVBQUVLLElBQUksR0FBR0EsSUFBSCxHQUFVRSxPQURkO0FBRVpMLFVBQUFBLGFBQWEsRUFBRUcsSUFBSSxHQUFHQSxJQUFILEdBQVVFO0FBRmpCLFNBQWQ7QUFJRCxPQUxELE1BS08sSUFBSUosUUFBSixFQUFjO0FBQ25CLGFBQUtzQyxRQUFMLENBQWM7QUFDWnRDLFVBQUFBLFFBQVEsRUFBRUEsUUFERTtBQUVaQyxVQUFBQSxXQUFXLEVBQUVEO0FBRkQsU0FBZDtBQUlEO0FBQ0Y7OztXQUNELDRCQUFtQjRDLFFBQW5CLEVBQTZCQyxRQUE3QixFQUF1Q0MsUUFBdkMsRUFBaUQ7QUFDL0MseUJBQW9DLEtBQUtsRCxLQUF6QztBQUFBLFVBQVFNLElBQVIsZ0JBQVFBLElBQVI7QUFBQSxVQUFjRSxPQUFkLGdCQUFjQSxPQUFkO0FBQUEsVUFBdUJKLFFBQXZCLGdCQUF1QkEsUUFBdkI7QUFDQSx3QkFBdUMsS0FBSzJDLEtBQTVDO0FBQUEsVUFBUTVDLGFBQVIsZUFBUUEsYUFBUjtBQUFBLFVBQXVCRSxXQUF2QixlQUF1QkEsV0FBdkI7O0FBQ0EsVUFBSSxDQUFDRCxRQUFELEtBQWNFLElBQUksSUFBSUUsT0FBdEIsQ0FBSixFQUFvQztBQUNsQyxZQUFNYSxPQUFPLEdBQUdmLElBQUksR0FBR0EsSUFBSCxHQUFVRSxPQUE5Qjs7QUFDQSxZQUFJMkMsSUFBSSxDQUFDQyxTQUFMLENBQWVqRCxhQUFmLE1BQWtDZ0QsSUFBSSxDQUFDQyxTQUFMLENBQWUvQixPQUFmLENBQXRDLEVBQStEO0FBQzdELGlCQUFPO0FBQ0xwQixZQUFBQSxVQUFVLEVBQUVvQixPQURQO0FBRUxsQixZQUFBQSxhQUFhLEVBQUVrQjtBQUZWLFdBQVA7QUFJRDtBQUNGLE9BUkQsTUFRTyxJQUFJakIsUUFBUSxJQUFJaUQsS0FBSyxDQUFDQyxPQUFOLENBQWNsRCxRQUFkLENBQWhCLEVBQXlDO0FBQzlDLFlBQU1tRCxrQkFBdUIsR0FBRyxFQUFoQztBQUNBbEQsUUFBQUEsV0FBVyxDQUFDb0IsR0FBWixDQUFnQixVQUFDK0IsQ0FBRCxFQUFZO0FBQzFCRCxVQUFBQSxrQkFBa0IsQ0FBQ0UsSUFBbkIsQ0FBd0JELENBQUMsQ0FBQ3hELEtBQTFCO0FBQ0QsU0FGRDtBQUdBLFlBQU0wRCxhQUFrQixHQUFHLEVBQTNCO0FBQ0F0RCxRQUFBQSxRQUFRLENBQUNxQixHQUFULENBQWEsVUFBQ2tDLENBQUQsRUFBWTtBQUN2QkQsVUFBQUEsYUFBYSxDQUFDRCxJQUFkLENBQW1CRSxDQUFDLENBQUMzRCxLQUFyQjtBQUNELFNBRkQ7O0FBR0EsWUFDRW1ELElBQUksQ0FBQ0MsU0FBTCxDQUFlRyxrQkFBZixNQUF1Q0osSUFBSSxDQUFDQyxTQUFMLENBQWVNLGFBQWYsQ0FEekMsRUFFRTtBQUNBLGVBQUtoQixRQUFMLENBQWM7QUFDWnRDLFlBQUFBLFFBQVEsRUFBRUEsUUFERTtBQUVaQyxZQUFBQSxXQUFXLEVBQUVEO0FBRkQsV0FBZDtBQUlEO0FBQ0Y7QUFDRjs7O1dBQ0Qsa0JBQVN3QixLQUFULEVBQWdCO0FBQ2QseUJBQXVDLEtBQUttQixLQUE1QztBQUFBLFVBQVE1QyxhQUFSLGdCQUFRQSxhQUFSO0FBQUEsVUFBdUJFLFdBQXZCLGdCQUF1QkEsV0FBdkI7QUFDQSx5QkFLSSxLQUFLTCxLQUxUO0FBQUEsK0NBQ0U0RCxVQURGO0FBQUEsVUFDRUEsVUFERixzQ0FDZSxPQURmO0FBQUEsK0NBRUVDLFlBRkY7QUFBQSxVQUVFQSxZQUZGLHNDQUVpQixJQUZqQjtBQUFBLFVBR0VDLFFBSEYsZ0JBR0VBLFFBSEY7QUFBQSxVQUlFMUQsUUFKRixnQkFJRUEsUUFKRjs7QUFNQSxVQUFJeUQsWUFBSixFQUFrQjtBQUNoQixZQUFJRSxNQUFNLEdBQUcsRUFBYjs7QUFDQSxZQUFJLENBQUMzRCxRQUFMLEVBQWU7QUFDYixjQUFJd0IsS0FBSixFQUFXO0FBQ1R6QixZQUFBQSxhQUFhLENBQUM2RCxPQUFkLENBQXNCLFVBQUN0QyxJQUFELEVBQVU7QUFDOUIsa0JBQUl1QyxLQUFLLEdBQUcsRUFBWjs7QUFDQSxrQkFBSUwsVUFBVSxDQUFDcEMsS0FBWCxDQUFpQixHQUFqQixFQUFzQkYsTUFBdEIsSUFBZ0MsQ0FBcEMsRUFBdUM7QUFDckMyQyxnQkFBQUEsS0FBSyxHQUFHdkMsSUFBSSxDQUFDa0MsVUFBRCxDQUFaO0FBQ0QsZUFGRCxNQUVPO0FBQ0wsb0JBQU1NLFdBQWdCLEdBQUdOLFVBQVUsQ0FBQ3BDLEtBQVgsQ0FBaUIsR0FBakIsQ0FBekI7QUFDQTBDLGdCQUFBQSxXQUFXLENBQUN6QyxHQUFaLENBQWdCLFVBQUMwQyxDQUFELEVBQUlyQyxLQUFKLEVBQWM7QUFDNUJtQyxrQkFBQUEsS0FBSyxHQUFHbkMsS0FBSyxJQUFJLENBQVQsR0FBYW1DLEtBQUssR0FBR3ZDLElBQUksQ0FBQ3lDLENBQUQsQ0FBekIsR0FBK0JGLEtBQUssR0FBRyxHQUFSLEdBQWN2QyxJQUFJLENBQUN5QyxDQUFELENBQXpEO0FBQ0QsaUJBRkQ7QUFHRDs7QUFDRCxrQkFBSUMsSUFBSSxHQUFHeEUsV0FBVyxDQUFDeUUsS0FBWixDQUFrQkosS0FBbEIsRUFBeUJyQyxLQUF6QixDQUFYOztBQUNBLGtCQUFJd0MsSUFBSixFQUFVO0FBQ1JMLGdCQUFBQSxNQUFNLENBQUNOLElBQVAsQ0FBWS9CLElBQVo7QUFDRDtBQUNGLGFBZEQ7QUFlQSxpQkFBS2dCLFFBQUwsQ0FBYztBQUNaekMsY0FBQUEsVUFBVSxFQUFFOEQ7QUFEQSxhQUFkO0FBR0QsV0FuQkQsTUFtQk87QUFDTCxpQkFBS3JCLFFBQUwsQ0FBYztBQUNaekMsY0FBQUEsVUFBVSxFQUFFRTtBQURBLGFBQWQ7QUFHRDtBQUNGLFNBekJELE1BeUJPO0FBQ0wsY0FBSXlCLEtBQUosRUFBVztBQUNULGdCQUFJeUIsS0FBSyxDQUFDQyxPQUFOLENBQWNqRCxXQUFkLENBQUosRUFBZ0M7QUFDOUJBLGNBQUFBLFdBQVcsQ0FBQ29CLEdBQVosQ0FBZ0IsVUFBQzZDLEtBQUQsRUFBYXhDLEtBQWIsRUFBdUI7QUFBQTs7QUFDckMsb0JBQUltQyxLQUFLLEdBQUdLLEtBQUgsYUFBR0EsS0FBSCx1Q0FBR0EsS0FBSyxDQUFFdEUsS0FBVixpREFBRyxhQUFjSSxRQUExQjtBQUNBLG9CQUFJZ0UsSUFBSSxHQUFHeEUsV0FBVyxDQUFDeUUsS0FBWixDQUFrQkosS0FBbEIsRUFBeUJyQyxLQUF6QixDQUFYOztBQUNBLG9CQUFJd0MsSUFBSixFQUFVO0FBQ1JMLGtCQUFBQSxNQUFNLENBQUNOLElBQVAsQ0FBWWEsS0FBWjtBQUNEO0FBQ0YsZUFORDtBQU9EOztBQUNELGlCQUFLNUIsUUFBTCxDQUFjO0FBQ1p0QyxjQUFBQSxRQUFRLEVBQUUyRDtBQURFLGFBQWQ7QUFHRCxXQWJELE1BYU87QUFDTCxpQkFBS3JCLFFBQUwsQ0FBYztBQUNadEMsY0FBQUEsUUFBUSxFQUFFQTtBQURFLGFBQWQ7QUFHRDtBQUNGO0FBQ0Y7O0FBQ0QwRCxNQUFBQSxRQUFRLElBQUlBLFFBQVEsQ0FBQ2xDLEtBQUQsQ0FBcEI7QUFDRDs7O1dBQ0Qsc0JBQWEyQyxVQUFiLEVBQXlCO0FBQ3ZCLHlCQUFpRSxLQUFLdkUsS0FBdEU7QUFBQSwrQ0FBTTRELFVBQU47QUFBQSxVQUFNQSxVQUFOLHNDQUFtQixPQUFuQjtBQUFBLCtDQUE0QmpELFVBQTVCO0FBQUEsVUFBNEJBLFVBQTVCLHNDQUF5QyxPQUF6QztBQUFBLDRDQUFrREosS0FBbEQ7QUFBQSxVQUFrREEsS0FBbEQsbUNBQTBELEVBQTFEO0FBQ0EsYUFBT2dFLFVBQVUsQ0FBQzlDLEdBQVgsQ0FBZSxVQUFDQyxJQUFELEVBQVU7QUFDOUIsWUFBSUUsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsWUFBSWpCLFVBQVUsQ0FBQ2EsS0FBWCxDQUFpQixHQUFqQixFQUFzQkYsTUFBdEIsSUFBZ0MsQ0FBcEMsRUFBdUM7QUFDckNNLFVBQUFBLEtBQUssR0FBR0YsSUFBSSxDQUFDZixVQUFELENBQVo7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFNWSxXQUFnQixHQUFHWixVQUFVLENBQUNhLEtBQVgsQ0FBaUIsR0FBakIsQ0FBekI7QUFDQUQsVUFBQUEsV0FBVyxDQUFDRSxHQUFaLENBQWdCLFVBQUNJLENBQUQsRUFBSUMsS0FBSixFQUFjO0FBQzVCRixZQUFBQSxLQUFLLEdBQUdFLEtBQUssSUFBSSxDQUFULEdBQWFGLEtBQUssR0FBR0YsSUFBSSxDQUFDRyxDQUFELENBQXpCLEdBQStCRCxLQUFLLEdBQUcsR0FBUixHQUFjRixJQUFJLENBQUNHLENBQUQsQ0FBekQ7QUFDRCxXQUZEO0FBR0Q7O0FBQ0QsWUFBSTJDLEdBQUcsR0FBRzlDLElBQUksQ0FBQytDLEVBQUwsR0FBVy9DLElBQUksQ0FBQytDLEVBQUwsS0FBWSxXQUFaLEdBQTBCL0MsSUFBSSxDQUFDK0MsRUFBL0IsR0FBb0M3QyxLQUEvQyxHQUF3REEsS0FBbEU7QUFDQSxZQUFJcUMsS0FBSyxHQUFHLEVBQVo7O0FBQ0EsWUFBSUwsVUFBVSxDQUFDcEMsS0FBWCxDQUFpQixHQUFqQixFQUFzQkYsTUFBdEIsSUFBZ0MsQ0FBcEMsRUFBdUM7QUFDckMyQyxVQUFBQSxLQUFLLEdBQUd2QyxJQUFJLENBQUNrQyxVQUFELENBQVo7QUFDRCxTQUZELE1BRU87QUFDTCxjQUFNTSxXQUFnQixHQUFHTixVQUFVLENBQUNwQyxLQUFYLENBQWlCLEdBQWpCLENBQXpCO0FBQ0EwQyxVQUFBQSxXQUFXLENBQUN6QyxHQUFaLENBQWdCLFVBQUMwQyxDQUFELEVBQUlyQyxLQUFKLEVBQWM7QUFDNUJtQyxZQUFBQSxLQUFLLEdBQUduQyxLQUFLLElBQUksQ0FBVCxHQUFhbUMsS0FBSyxHQUFHdkMsSUFBSSxDQUFDeUMsQ0FBRCxDQUF6QixHQUErQkYsS0FBSyxHQUFHLEdBQVIsR0FBY3ZDLElBQUksQ0FBQ3lDLENBQUQsQ0FBekQ7QUFDRCxXQUZEO0FBR0Q7O0FBQ0QsNEJBQ0Usb0JBQUMsTUFBRDtBQUNFLFVBQUEsR0FBRyxFQUFFSyxHQURQO0FBRUUsVUFBQSxLQUFLLEVBQUU1QyxLQUZUO0FBR0UsVUFBQSxLQUFLLEVBQUVxQyxLQUhUO0FBSUUsVUFBQSxRQUFRLEVBQUV2QyxJQUFJLENBQUNnRCxRQUFMLEdBQWdCLElBQWhCLEdBQXVCO0FBSm5DLFdBTUdULEtBTkgsQ0FERjtBQVVELE9BOUJNLENBQVA7QUErQkQ7OztXQUNELDBCQUFpQjtBQUFBOztBQUNmLGtDQUE2QixLQUFLakUsS0FBbEMsQ0FBUTJFLFNBQVI7QUFBQSxVQUFRQSxTQUFSLHNDQUFvQixJQUFwQjtBQUNBLHlCQUFpQyxLQUFLNUIsS0FBdEM7QUFBQSxVQUFROUMsVUFBUixnQkFBUUEsVUFBUjtBQUFBLFVBQW9CRyxRQUFwQixnQkFBb0JBLFFBQXBCOztBQUNBLFVBQUlBLFFBQUosRUFBYztBQUNaLDRCQUFPLDBDQUFHQSxRQUFILENBQVA7QUFDRCxPQUZELE1BRU87QUFDTCxZQUFJd0UsWUFBWSxHQUFHLEVBQW5CO0FBQUEsWUFDRUwsVUFBVSxHQUFHLEVBRGY7QUFFQXRFLFFBQUFBLFVBQVUsQ0FBQytELE9BQVgsQ0FBbUIsVUFBQ3RDLElBQUQsRUFBVTtBQUMzQixjQUFJdUMsS0FBSyxHQUFHdkMsSUFBSSxDQUFDbUQsU0FBakI7O0FBQ0EsY0FBSVosS0FBSyxJQUFJVSxTQUFiLEVBQXdCO0FBQ3RCLGdCQUFJLENBQUNDLFlBQVksQ0FBQ1gsS0FBRCxDQUFqQixFQUEwQlcsWUFBWSxDQUFDWCxLQUFELENBQVosR0FBc0IsRUFBdEI7QUFDMUJXLFlBQUFBLFlBQVksQ0FBQ1gsS0FBRCxDQUFaLENBQW9CUixJQUFwQixDQUF5Qi9CLElBQXpCO0FBQ0QsV0FIRCxNQUdPO0FBQ0w2QyxZQUFBQSxVQUFVLENBQUNkLElBQVgsQ0FBZ0IvQixJQUFoQjtBQUNEO0FBQ0YsU0FSRDtBQVNBLFlBQUlvRCxNQUFNLEdBQUcsS0FBS0MsWUFBTCxDQUFrQlIsVUFBbEIsQ0FBYjtBQUNBLFlBQUlTLFFBQVEsR0FBR0MsTUFBTSxDQUFDQyxJQUFQLENBQVlOLFlBQVosRUFBMEJuRCxHQUExQixDQUE4QixVQUFDK0MsR0FBRCxFQUFTO0FBQ3BELDhCQUNFLG9CQUFDLFFBQUQ7QUFBVSxZQUFBLEdBQUcsRUFBRUEsR0FBZjtBQUFvQixZQUFBLEtBQUssRUFBRUE7QUFBM0IsYUFDRyxNQUFJLENBQUNPLFlBQUwsQ0FBa0JILFlBQVksQ0FBQ0osR0FBRCxDQUE5QixDQURILENBREY7QUFLRCxTQU5jLENBQWY7QUFPQSw0QkFDRSwwQ0FDR00sTUFESCxFQUVHRSxRQUZILENBREY7QUFNRDtBQUNGOzs7V0FDRCxrQkFBU3BELEtBQVQsRUFBZ0JwQixPQUFoQixFQUF5QjtBQUN2QixVQUFRMkUsUUFBUixHQUFxQixLQUFLbkYsS0FBMUIsQ0FBUW1GLFFBQVI7QUFDQSxXQUFLekMsUUFBTCxDQUFjO0FBQ1p4QyxRQUFBQSxXQUFXLEVBQUUwQjtBQURELE9BQWQ7O0FBR0EsVUFBSXVELFFBQUosRUFBYztBQUNaQSxRQUFBQSxRQUFRLENBQUN2RCxLQUFELEVBQVFwQixPQUFSLENBQVI7QUFDRDtBQUNGOzs7V0FDRCxrQkFBUztBQUNQLHlCQWFJLEtBQUtSLEtBYlQ7QUFBQSxVQUNFSSxRQURGLGdCQUNFQSxRQURGO0FBQUEsVUFFRUcsS0FGRixnQkFFRUEsS0FGRjtBQUFBLFVBR0VELElBSEYsZ0JBR0VBLElBSEY7QUFBQSxVQUlFNkUsUUFKRixnQkFJRUEsUUFKRjtBQUFBLFVBS0UzRSxPQUxGLGdCQUtFQSxPQUxGO0FBQUEsVUFNRW9ELFVBTkYsZ0JBTUVBLFVBTkY7QUFBQSxVQU9FakQsVUFQRixnQkFPRUEsVUFQRjtBQUFBLCtDQVFFeUUsWUFSRjtBQUFBLFVBUUVBLFlBUkYsc0NBUWlCLElBUmpCO0FBQUEsK0NBU0VULFNBVEY7QUFBQSxVQVNFQSxTQVRGLHNDQVNjLElBVGQ7QUFBQSxVQVVFbEUsT0FWRixnQkFVRUEsT0FWRjtBQUFBLFVBV0VDLFVBWEYsZ0JBV0VBLFVBWEY7QUFBQSxVQVlLMkUsTUFaTDs7QUFjQSxVQUFNckYsS0FBSyxHQUFHO0FBQ1o2RCxRQUFBQSxZQUFZLEVBQUUsS0FERjtBQUVaeUIsUUFBQUEsVUFBVSxFQUFFLElBRkE7QUFHWkMsUUFBQUEsZ0JBQWdCLEVBQUUsT0FITjtBQUlaQyxRQUFBQSxXQUFXLEVBQUUsS0FKRDtBQUtaQyxRQUFBQSxVQUFVLEVBQUU7QUFMQSxPQUFkOztBQU9BLFVBQUlMLFlBQUosRUFBa0I7QUFDaEIsNEJBQ0U7QUFBSyxVQUFBLFNBQVMsRUFBRXpGLEdBQUcsQ0FBQ0QsTUFBTSxDQUFDLFlBQUQsQ0FBUCxFQUF1QixLQUFLTSxLQUFMLENBQVcwRixTQUFsQztBQUFuQix3QkFDRTtBQUNFLFVBQUEsS0FBSyxFQUFFLEtBQUszQyxLQUFMLENBQVc3QyxXQURwQjtBQUVFLFVBQUEsUUFBUSxFQUFFLEtBQUtpRixRQUFMLENBQWNRLElBQWQsQ0FBbUIsSUFBbkIsQ0FGWjtBQUdFLFVBQUEsUUFBUSxFQUFFLEtBQUs3QixRQUFMLENBQWM2QixJQUFkLENBQW1CLElBQW5CO0FBSFosV0FJTTNGLEtBSk4sRUFLTXFGLE1BTE4sR0FPRyxLQUFLTyxjQUFMLEVBUEgsQ0FERixDQURGO0FBYUQsT0FkRCxNQWNPO0FBQ0wsNEJBQ0U7QUFDRSxVQUFBLEtBQUssRUFBRSxLQUFLN0MsS0FBTCxDQUFXN0MsV0FEcEI7QUFFRSxVQUFBLFFBQVEsRUFBRSxLQUFLNEQsUUFBTCxDQUFjNkIsSUFBZCxDQUFtQixJQUFuQixDQUZaO0FBR0UsVUFBQSxRQUFRLEVBQUUsS0FBS1IsUUFBTCxDQUFjUSxJQUFkLENBQW1CLElBQW5CO0FBSFosV0FJTTNGLEtBSk4sRUFLTXFGLE1BTE4sR0FPRyxLQUFLTyxjQUFMLEVBUEgsQ0FERjtBQVdEO0FBQ0Y7Ozs7RUF0Vm9DdEcsYTs7Z0JBQWxCUyxTLFlBQ0hGLE07O2dCQURHRSxTLGNBRURELFE7O1NBRkNDLFMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgUHVyZUNvbXBvbmVudCB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBTZWxlY3QsIFNlbGVjdFByb3BzIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IFN0b3JlLCB7IFN0b3JlUHJvcHMgfSBmcm9tIFwiQGJqLW5zYy9tc25cIjtcclxuaW1wb3J0IHsgdXRpbHMgfSBmcm9tIFwiQGJqLW5zYy9tc24vbGliL3V0aWxzXCI7XHJcbmltcG9ydCBjb25maWcgZnJvbSBcIi4uL2NvbmZpZ1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgb21pdCBmcm9tIFwib21pdC5qc1wiO1xyXG5pbXBvcnQgUGlueWluTWF0Y2ggZnJvbSBcInBpbnlpbi1tYXRjaFwiO1xyXG5jb25zdCB7IE9wdGlvbiwgT3B0R3JvdXAgfSA9IFNlbGVjdDtcclxuXHJcbmludGVyZmFjZSBJU2VsZWN0UHJvcHMgZXh0ZW5kcyBTZWxlY3RQcm9wczxhbnk+IHtcclxuICBzdG9yZT86IFN0b3JlUHJvcHM7XHJcbiAgZGF0YT86IEFycmF5PE9iamVjdD47IC8v6buY6K6k5pWw5o2uXHJcbiAgbGFiZWxGaWVsZD86IHN0cmluZztcclxuICB2YWx1ZUZpZWxkPzogc3RyaW5nO1xyXG4gIGRlZmF1bHRTdHlsZT86IGJvb2xlYW47XHJcbiAgc2hvd0dyb3VwPzogYm9vbGVhbjsgLy/mmK/lkKbmmL7npLrliIbnu4RcclxuICBhZGREYXRhPzogQXJyYXk8T2JqZWN0PjsgLy/phY3lkIhzdG9yZeS9v+eUqO+8jOS7juWinuWKoOmineWklueahOaVsOaNrlxyXG4gIGRlbGV0ZURhdGE/OiBBcnJheTxTdHJpbmc+OyAvL+mFjeWQiHN0b3Jl5L2/55So77yM5Yig6Zmk5LuO5pWw5o2u5bqT5Lit6I635Y+W5Yiw55qE5oyH5a6a5pWw5o2uXHJcbiAgW3Byb05hbWU6IHN0cmluZ106IGFueTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOU0NTZWxlY3QgZXh0ZW5kcyBQdXJlQ29tcG9uZW50PElTZWxlY3RQcm9wcz4ge1xyXG4gIHN0YXRpYyBPcHRpb24gPSBPcHRpb247XHJcbiAgc3RhdGljIE9wdEdyb3VwID0gT3B0R3JvdXA7XHJcbiAgc3RhdGUgPSB7XHJcbiAgICBkYXRhU291cmNlOiBbXSxcclxuICAgIHNlbGVjdFZhbHVlOiBudWxsLFxyXG4gICAgYWxsRGF0YVNvdXJjZTogW10sXHJcbiAgICBjaGlsZHJlbjogbnVsbCxcclxuICAgIGFsbENoaWxkcmVuOiBudWxsLFxyXG4gIH07XHJcbiAgc3RvcmUgPSB7fSBhcyBTdG9yZVByb3BzO1xyXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICBzdXBlcihwcm9wcyk7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIHN0b3JlID0ge30sXHJcbiAgICAgIGNoaWxkcmVuLFxyXG4gICAgICBvcHRpb25zLFxyXG4gICAgICBhZGREYXRhID0gW10sXHJcbiAgICAgIGRlbGV0ZURhdGEgPSBbXSxcclxuICAgICAgdmFsdWVGaWVsZCA9IFwidmFsdWVcIixcclxuICAgIH0gPSBwcm9wcztcclxuICAgIGNvbnN0IHtcclxuICAgICAgdXJsLFxyXG4gICAgICBsaXN0ZW5lcnM6IGxpc3RlbmVyc1BvcHMgPSB7fSxcclxuICAgICAgdmlld25hbWUsXHJcbiAgICAgIGNhY2hlZCxcclxuICAgICAgY2FjaGVLZXksXHJcbiAgICAgIC4uLnN0b3Jlc1xyXG4gICAgfSA9IHN0b3JlO1xyXG4gICAgbGV0IHsgdmlld1VybCB9ID0gY29uZmlnKCk7XHJcbiAgICBjb25zdCBnZXRBbGxEYXRhID0gKGRhdGEpID0+IHtcclxuICAgICAgbGV0IG5ld0RhdGEgPSBbLi4uZGF0YV07XHJcbiAgICAgIGlmIChhZGREYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBuZXdEYXRhID0gWy4uLmFkZERhdGEsIC4uLm5ld0RhdGFdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChkZWxldGVEYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBjb25zdCB2YWx1ZUZpZWxkczogYW55ID0gdmFsdWVGaWVsZC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbmV3RGF0YS5tYXAoKGl0ZW0sIGkpID0+IHtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICB2YWx1ZUZpZWxkcy5tYXAoKHYsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gaW5kZXggPT0gMCA/IHZhbHVlICsgaXRlbVt2XSA6IHZhbHVlICsgXCIsXCIgKyBpdGVtW3ZdO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBpZiAoZGVsZXRlRGF0YS5pbmRleE9mKHZhbHVlKSA+IC0xKSB7XHJcbiAgICAgICAgICAgIG5ld0RhdGEuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBuZXdEYXRhO1xyXG4gICAgfTtcclxuICAgIGlmICghY2hpbGRyZW4pIHtcclxuICAgICAgaWYgKCEoZGF0YSB8fCB2aWV3bmFtZSB8fCB1cmwgfHwgb3B0aW9ucykpIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1cmzjgIF2aWV3bmFtZeOAgWRhdGHjgIFvcHRpb25z5LiN6IO96YO95Li656m677yBXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBfdGhpcyA9IHRoaXM7XHJcbiAgICAgIGxldCBzdG9yZVByb3BzID0ge1xyXG4gICAgICAgIG1vZGVsOiBcIm1vZGVsXCIsXHJcbiAgICAgICAgY29tcG9uZW50OiB0aGlzLFxyXG4gICAgICAgIGxpc3RlbmVyczoge1xyXG4gICAgICAgICAgb25CZWZvcmVMb2FkOiBmdW5jdGlvbiAoc3RvcmUsIG9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdXRpbHMuY2FsbGJhY2sobGlzdGVuZXJzUG9wcy5vbkJlZm9yZUxvYWQsIF90aGlzLCBbc3RvcmUsIG9wdGlvbnNdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBsb2FkOiBmdW5jdGlvbiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gZ2V0QWxsRGF0YShkYXRhKTtcclxuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBuZXdEYXRhLCBhbGxEYXRhU291cmNlOiBuZXdEYXRhIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQb3BzLmxvYWQsIF90aGlzLCBbZGF0YSwgbW9kZWxEYXRhLCBzdG9yZV0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGRhdGFDaGFuZ2VkOiBmdW5jdGlvbiAoZGF0YSwgbW9kZWxEYXRhLCBzdG9yZSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gZ2V0QWxsRGF0YShkYXRhKTtcclxuICAgICAgICAgICAgX3RoaXMuc2V0U3RhdGUoeyBkYXRhU291cmNlOiBuZXdEYXRhLCBhbGxEYXRhU291cmNlOiBuZXdEYXRhIH0pO1xyXG4gICAgICAgICAgICB1dGlscy5jYWxsYmFjayhsaXN0ZW5lcnNQb3BzLmRhdGFDaGFuZ2VkLCBfdGhpcywgW1xyXG4gICAgICAgICAgICAgIGRhdGEsXHJcbiAgICAgICAgICAgICAgbW9kZWxEYXRhLFxyXG4gICAgICAgICAgICAgIHN0b3JlLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAuLi5zdG9yZXMsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICgodmlld25hbWUgfHwgdXJsKSAmJiBkYXRhID09IG51bGwgJiYgb3B0aW9ucyA9PSBudWxsKSB7XHJcbiAgICAgICAgbGV0IGlzQ2FjaGVkID0gY2FjaGVkO1xyXG4gICAgICAgIGxldCBpc0NhY2hlS2V5ID0gY2FjaGVLZXk7XHJcbiAgICAgICAgaWYgKHZpZXduYW1lKSB7XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGNhY2hlZCAhPT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgaXNDYWNoZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpc0NhY2hlS2V5ID0gaXNDYWNoZUtleSA/IGlzQ2FjaGVLZXkgOiB2aWV3bmFtZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgc3RvcmVQcm9wcyA9IHtcclxuICAgICAgICAgIC4uLntcclxuICAgICAgICAgICAgYXV0b0xvYWQ6IHRydWUsXHJcbiAgICAgICAgICAgIHVybDogdXJsIHx8IHZpZXdVcmwgKyB2aWV3bmFtZSwgLy/or7vlrZflhbjvvIx1cmzlm7rlrprvvIx2aWV3bmFtZVxyXG4gICAgICAgICAgICBjYWNoZWQ6IGlzQ2FjaGVkLFxyXG4gICAgICAgICAgICBjYWNoZUtleTogaXNDYWNoZUtleSxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICAuLi5zdG9yZVByb3BzLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zdG9yZSA9IG5ldyBTdG9yZShzdG9yZVByb3BzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldERhdGEoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5hbGxEYXRhU291cmNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VmFsdWUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5zZWxlY3RWYWx1ZTtcclxuICB9XHJcbiAgc2V0VmFsdWUodmFsdWUpIHtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RWYWx1ZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBkYXRhLCBvcHRpb25zLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmICghY2hpbGRyZW4gJiYgKGRhdGEgfHwgb3B0aW9ucykpIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgZGF0YVNvdXJjZTogZGF0YSA/IGRhdGEgOiBvcHRpb25zLFxyXG4gICAgICAgIGFsbERhdGFTb3VyY2U6IGRhdGEgPyBkYXRhIDogb3B0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgICAgICBhbGxDaGlsZHJlbjogY2hpbGRyZW4sXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb21wb25lbnREaWRVcGRhdGUobmV3UHJvcHMsIG5ld1N0YXRlLCBTbmFwc2hvdCkge1xyXG4gICAgY29uc3QgeyBkYXRhLCBvcHRpb25zLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgYWxsRGF0YVNvdXJjZSwgYWxsQ2hpbGRyZW4gfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoIWNoaWxkcmVuICYmIChkYXRhIHx8IG9wdGlvbnMpKSB7XHJcbiAgICAgIGNvbnN0IG5ld0RhdGEgPSBkYXRhID8gZGF0YSA6IG9wdGlvbnM7XHJcbiAgICAgIGlmIChKU09OLnN0cmluZ2lmeShhbGxEYXRhU291cmNlKSAhPT0gSlNPTi5zdHJpbmdpZnkobmV3RGF0YSkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgZGF0YVNvdXJjZTogbmV3RGF0YSxcclxuICAgICAgICAgIGFsbERhdGFTb3VyY2U6IG5ld0RhdGEsXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChjaGlsZHJlbiAmJiBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xyXG4gICAgICBjb25zdCBzdGF0ZUNoaWxkcmVuUHJvcHM6IGFueSA9IFtdO1xyXG4gICAgICBhbGxDaGlsZHJlbi5tYXAoKHM6IGFueSkgPT4ge1xyXG4gICAgICAgIHN0YXRlQ2hpbGRyZW5Qcm9wcy5wdXNoKHMucHJvcHMpO1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgY2hpbGRyZW5Qcm9wczogYW55ID0gW107XHJcbiAgICAgIGNoaWxkcmVuLm1hcCgoYzogYW55KSA9PiB7XHJcbiAgICAgICAgY2hpbGRyZW5Qcm9wcy5wdXNoKGMucHJvcHMpO1xyXG4gICAgICB9KTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHN0YXRlQ2hpbGRyZW5Qcm9wcykgIT09IEpTT04uc3RyaW5naWZ5KGNoaWxkcmVuUHJvcHMpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgICAgYWxsQ2hpbGRyZW46IGNoaWxkcmVuLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIG9uU2VhcmNoKHZhbHVlKSB7XHJcbiAgICBjb25zdCB7IGFsbERhdGFTb3VyY2UsIGFsbENoaWxkcmVuIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3Qge1xyXG4gICAgICBsYWJlbEZpZWxkID0gXCJsYWJlbFwiLFxyXG4gICAgICBmaWx0ZXJPcHRpb24gPSB0cnVlLFxyXG4gICAgICBvblNlYXJjaCxcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGlmIChmaWx0ZXJPcHRpb24pIHtcclxuICAgICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4gICAgICBpZiAoIWNoaWxkcmVuKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICBhbGxEYXRhU291cmNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgbGV0IGxhYmVsID0gXCJcIjtcclxuICAgICAgICAgICAgaWYgKGxhYmVsRmllbGQuc3BsaXQoXCIsXCIpLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgbGFiZWwgPSBpdGVtW2xhYmVsRmllbGRdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGxhYmVsRmllbGRzOiBhbnkgPSBsYWJlbEZpZWxkLnNwbGl0KFwiLFwiKTtcclxuICAgICAgICAgICAgICBsYWJlbEZpZWxkcy5tYXAoKGwsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsYWJlbCA9IGluZGV4ID09IDAgPyBsYWJlbCArIGl0ZW1bbF0gOiBsYWJlbCArIFwiLVwiICsgaXRlbVtsXTtcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZmxhZyA9IFBpbnlpbk1hdGNoLm1hdGNoKGxhYmVsLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2U6IHJlc3VsdCxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZTogYWxsRGF0YVNvdXJjZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFsbENoaWxkcmVuKSkge1xyXG4gICAgICAgICAgICBhbGxDaGlsZHJlbi5tYXAoKGNoaWxkOiBhbnksIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgbGV0IGxhYmVsID0gY2hpbGQ/LnByb3BzPy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgICBsZXQgZmxhZyA9IFBpbnlpbk1hdGNoLm1hdGNoKGxhYmVsLCB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiByZXN1bHQsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25TZWFyY2ggJiYgb25TZWFyY2godmFsdWUpO1xyXG4gIH1cclxuICByZW5kZXJPcHRpb24ob3B0aW9uRGF0YSkge1xyXG4gICAgbGV0IHsgbGFiZWxGaWVsZCA9IFwibGFiZWxcIiwgdmFsdWVGaWVsZCA9IFwidmFsdWVcIiwgc3RvcmUgPSB7fSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHJldHVybiBvcHRpb25EYXRhLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICBsZXQgdmFsdWUgPSBcIlwiO1xyXG4gICAgICBpZiAodmFsdWVGaWVsZC5zcGxpdChcIixcIikubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB2YWx1ZSA9IGl0ZW1bdmFsdWVGaWVsZF07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVGaWVsZHM6IGFueSA9IHZhbHVlRmllbGQuc3BsaXQoXCIsXCIpO1xyXG4gICAgICAgIHZhbHVlRmllbGRzLm1hcCgodiwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIHZhbHVlID0gaW5kZXggPT0gMCA/IHZhbHVlICsgaXRlbVt2XSA6IHZhbHVlICsgXCIsXCIgKyBpdGVtW3ZdO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGxldCBrZXkgPSBpdGVtLmlkID8gKGl0ZW0uaWQgIT09IFwidW5kZWZpbmVkXCIgPyBpdGVtLmlkIDogdmFsdWUpIDogdmFsdWU7XHJcbiAgICAgIGxldCBsYWJlbCA9IFwiXCI7XHJcbiAgICAgIGlmIChsYWJlbEZpZWxkLnNwbGl0KFwiLFwiKS5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIGxhYmVsID0gaXRlbVtsYWJlbEZpZWxkXTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBsYWJlbEZpZWxkczogYW55ID0gbGFiZWxGaWVsZC5zcGxpdChcIixcIik7XHJcbiAgICAgICAgbGFiZWxGaWVsZHMubWFwKChsLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgbGFiZWwgPSBpbmRleCA9PSAwID8gbGFiZWwgKyBpdGVtW2xdIDogbGFiZWwgKyBcIi1cIiArIGl0ZW1bbF07XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8T3B0aW9uXHJcbiAgICAgICAgICBrZXk9e2tleX1cclxuICAgICAgICAgIHZhbHVlPXt2YWx1ZX1cclxuICAgICAgICAgIGxhYmVsPXtsYWJlbH1cclxuICAgICAgICAgIGRpc2FibGVkPXtpdGVtLmRpc2FibGVkID8gdHJ1ZSA6IGZhbHNlfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtsYWJlbH1cclxuICAgICAgICA8L09wdGlvbj5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuICByZW5kZXJDaGlsZHJlbigpIHtcclxuICAgIGNvbnN0IHsgc2hvd0dyb3VwID0gdHJ1ZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHsgZGF0YVNvdXJjZSwgY2hpbGRyZW4gfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBpZiAoY2hpbGRyZW4pIHtcclxuICAgICAgcmV0dXJuIDw+e2NoaWxkcmVufTwvPjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBvcHRHcm91cERhdGEgPSB7fSxcclxuICAgICAgICBvcHRpb25EYXRhID0gW107XHJcbiAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGxldCBsYWJlbCA9IGl0ZW0uZ3JvdXBOYW1lO1xyXG4gICAgICAgIGlmIChsYWJlbCAmJiBzaG93R3JvdXApIHtcclxuICAgICAgICAgIGlmICghb3B0R3JvdXBEYXRhW2xhYmVsXSkgb3B0R3JvdXBEYXRhW2xhYmVsXSA9IFtdO1xyXG4gICAgICAgICAgb3B0R3JvdXBEYXRhW2xhYmVsXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBvcHRpb25EYXRhLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgbGV0IG9wdGlvbiA9IHRoaXMucmVuZGVyT3B0aW9uKG9wdGlvbkRhdGEpO1xyXG4gICAgICBsZXQgb3B0R3JvdXAgPSBPYmplY3Qua2V5cyhvcHRHcm91cERhdGEpLm1hcCgoa2V5KSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgIDxPcHRHcm91cCBrZXk9e2tleX0gbGFiZWw9e2tleX0+XHJcbiAgICAgICAgICAgIHt0aGlzLnJlbmRlck9wdGlvbihvcHRHcm91cERhdGFba2V5XSl9XHJcbiAgICAgICAgICA8L09wdEdyb3VwPlxyXG4gICAgICAgICk7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIDw+XHJcbiAgICAgICAgICB7b3B0aW9ufVxyXG4gICAgICAgICAge29wdEdyb3VwfVxyXG4gICAgICAgIDwvPlxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuICBvbkNoYW5nZSh2YWx1ZSwgb3B0aW9ucykge1xyXG4gICAgY29uc3QgeyBvbkNoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBzZWxlY3RWYWx1ZTogdmFsdWUsXHJcbiAgICB9KTtcclxuICAgIGlmIChvbkNoYW5nZSkge1xyXG4gICAgICBvbkNoYW5nZSh2YWx1ZSwgb3B0aW9ucyk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHtcclxuICAgICAgY2hpbGRyZW4sXHJcbiAgICAgIHN0b3JlLFxyXG4gICAgICBkYXRhLFxyXG4gICAgICBvbkNoYW5nZSxcclxuICAgICAgb3B0aW9ucyxcclxuICAgICAgbGFiZWxGaWVsZCxcclxuICAgICAgdmFsdWVGaWVsZCxcclxuICAgICAgZGVmYXVsdFN0eWxlID0gdHJ1ZSxcclxuICAgICAgc2hvd0dyb3VwID0gdHJ1ZSxcclxuICAgICAgYWRkRGF0YSxcclxuICAgICAgZGVsZXRlRGF0YSxcclxuICAgICAgLi4ucGFyYW1zXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IHByb3BzID0ge1xyXG4gICAgICBmaWx0ZXJPcHRpb246IGZhbHNlLFxyXG4gICAgICBzaG93U2VhcmNoOiB0cnVlLFxyXG4gICAgICBvcHRpb25GaWx0ZXJQcm9wOiBcImxhYmVsXCIsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBcIuivt+mAieaLqVwiLFxyXG4gICAgICBhbGxvd0NsZWFyOiB0cnVlLFxyXG4gICAgfTtcclxuICAgIGlmIChkZWZhdWx0U3R5bGUpIHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKHN0eWxlc1tcIm5zY19zZWxlY3RcIl0sIHRoaXMucHJvcHMuY2xhc3NOYW1lKX0+XHJcbiAgICAgICAgICA8U2VsZWN0XHJcbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnNlbGVjdFZhbHVlfVxyXG4gICAgICAgICAgICBvbkNoYW5nZT17dGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgICB7Li4ucHJvcHN9XHJcbiAgICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt0aGlzLnJlbmRlckNoaWxkcmVuKCl9XHJcbiAgICAgICAgICA8L1NlbGVjdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPFNlbGVjdFxyXG4gICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUuc2VsZWN0VmFsdWV9XHJcbiAgICAgICAgICBvblNlYXJjaD17dGhpcy5vblNlYXJjaC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgb25DaGFuZ2U9e3RoaXMub25DaGFuZ2UuYmluZCh0aGlzKX1cclxuICAgICAgICAgIHsuLi5wcm9wc31cclxuICAgICAgICAgIHsuLi5wYXJhbXN9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3RoaXMucmVuZGVyQ2hpbGRyZW4oKX1cclxuICAgICAgICA8L1NlbGVjdD5cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19