nsc-react-component 4.0.5 → 4.0.7
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/lib/page/BasePage/index.d.ts +2 -2
- package/lib/page/BasePage/index.js +68 -59
- package/lib/page/BasePage/index.js.map +1 -1
- package/lib/page/FormPage/index.d.ts +2 -2
- package/lib/page/FormPage/index.js +14 -4
- package/lib/page/FormPage/index.js.map +1 -1
- package/lib/page/HeaderSearch/index.js +20 -7
- package/lib/page/HeaderSearch/index.js.map +1 -1
- package/lib/page/SettingTab/index.js +4 -2
- package/lib/page/SettingTab/index.js.map +1 -1
- package/lib/page/SettingTable/index.d.ts +3 -0
- package/lib/page/SettingTable/index.js +93 -144
- package/lib/page/SettingTable/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import _message from "antd/es/message";
|
|
2
|
+
const _excluded = ["data"];
|
|
2
3
|
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); }
|
|
4
|
+
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; }
|
|
5
|
+
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; }
|
|
3
6
|
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; }
|
|
4
7
|
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; }
|
|
5
8
|
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; }
|
|
@@ -17,8 +20,18 @@ import * as NscUtils from "@bj-nsc/functions";
|
|
|
17
20
|
import cls from "classnames";
|
|
18
21
|
import queryString from 'query-string';
|
|
19
22
|
import { getLocalStore } from '@bj-nsc/functions';
|
|
23
|
+
import dayjs from 'dayjs';
|
|
20
24
|
// import { history } from 'umi'
|
|
21
25
|
// import { getConfigData } from '../services';
|
|
26
|
+
|
|
27
|
+
const defaulUtil = {
|
|
28
|
+
NscCom,
|
|
29
|
+
NscFile,
|
|
30
|
+
NscRequest,
|
|
31
|
+
NscUtils,
|
|
32
|
+
dayjs,
|
|
33
|
+
createElement: React.createElement
|
|
34
|
+
};
|
|
22
35
|
const renderSelfToolButton = _ref => {
|
|
23
36
|
let {
|
|
24
37
|
selfToolButton,
|
|
@@ -34,18 +47,12 @@ const renderSelfToolButton = _ref => {
|
|
|
34
47
|
key: index,
|
|
35
48
|
type: item.type,
|
|
36
49
|
onClick: () => {
|
|
37
|
-
let Utils = {
|
|
38
|
-
NscCom,
|
|
39
|
-
NscFile,
|
|
40
|
-
NscRequest,
|
|
41
|
-
NscUtils
|
|
42
|
-
};
|
|
43
50
|
let eventOption = {
|
|
44
51
|
pageRef: pageRef,
|
|
45
52
|
funcs: funcs
|
|
46
53
|
};
|
|
47
54
|
const func = new Function("Utils,eventOption", item.onClick);
|
|
48
|
-
func(
|
|
55
|
+
func(defaulUtil, eventOption);
|
|
49
56
|
},
|
|
50
57
|
code: item.code
|
|
51
58
|
}, item.name);
|
|
@@ -67,19 +74,13 @@ const renderSelfColumnButton = _ref2 => {
|
|
|
67
74
|
key: index,
|
|
68
75
|
type: item.type,
|
|
69
76
|
onClick: record => {
|
|
70
|
-
let Utils = {
|
|
71
|
-
NscCom,
|
|
72
|
-
NscFile,
|
|
73
|
-
NscRequest,
|
|
74
|
-
NscUtils
|
|
75
|
-
};
|
|
76
77
|
let eventOption = {
|
|
77
78
|
pageRef: pageRef,
|
|
78
79
|
record: record,
|
|
79
80
|
funcs: funcs
|
|
80
81
|
};
|
|
81
82
|
const func = new Function("Utils,eventOption", item.onClick);
|
|
82
|
-
func(
|
|
83
|
+
func(defaulUtil, eventOption);
|
|
83
84
|
},
|
|
84
85
|
code: item.code,
|
|
85
86
|
recordShow: item.recordShow
|
|
@@ -195,9 +196,27 @@ export default class SettingTable extends React.Component {
|
|
|
195
196
|
selfToolButton: [],
|
|
196
197
|
selfColumnButton: [],
|
|
197
198
|
pageLoading: true,
|
|
198
|
-
defaultColumns: []
|
|
199
|
+
defaultColumns: [],
|
|
200
|
+
otherProps: {}
|
|
199
201
|
});
|
|
200
202
|
_defineProperty(this, "pageRef", /*#__PURE__*/React.createRef());
|
|
203
|
+
_defineProperty(this, "initData", res => {
|
|
204
|
+
const {
|
|
205
|
+
otherProps,
|
|
206
|
+
pageProps
|
|
207
|
+
} = this.state;
|
|
208
|
+
if (pageProps.showSearch !== false && otherProps.defaultSearch && otherProps.tableDataResource == 'url') {
|
|
209
|
+
let func = new Function('Utils,eventOption', otherProps.defaultSearch);
|
|
210
|
+
const params = func(defaulUtil, {
|
|
211
|
+
pageRef: this.pageRef
|
|
212
|
+
});
|
|
213
|
+
setTimeout(() => {
|
|
214
|
+
var _this$pageRef$current, _this$pageRef$current2;
|
|
215
|
+
(_this$pageRef$current = this.pageRef.current) === null || _this$pageRef$current === void 0 || _this$pageRef$current.tableLoad(_objectSpread({}, params));
|
|
216
|
+
(_this$pageRef$current2 = this.pageRef.current) === null || _this$pageRef$current2 === void 0 || _this$pageRef$current2.setSearchParams(_objectSpread({}, params));
|
|
217
|
+
}, 300); //直接设置,pageRef没绑定,暂时通过延迟函数进行解决
|
|
218
|
+
}
|
|
219
|
+
});
|
|
201
220
|
}
|
|
202
221
|
componentDidMount() {
|
|
203
222
|
this.getData();
|
|
@@ -207,14 +226,14 @@ export default class SettingTable extends React.Component {
|
|
|
207
226
|
this.getData();
|
|
208
227
|
}
|
|
209
228
|
}
|
|
210
|
-
|
|
211
229
|
// 获取数据
|
|
212
230
|
getData() {
|
|
213
231
|
// 从props中获取tableCode、published、menuCode
|
|
214
232
|
const {
|
|
215
233
|
tableCode,
|
|
216
234
|
published = true,
|
|
217
|
-
menuCode
|
|
235
|
+
menuCode,
|
|
236
|
+
tabParams
|
|
218
237
|
} = this.props;
|
|
219
238
|
// 如果tableCode存在
|
|
220
239
|
if (tableCode) {
|
|
@@ -234,18 +253,67 @@ export default class SettingTable extends React.Component {
|
|
|
234
253
|
let table_props = JSON.parse(res.data.tableProps || "{}") || {};
|
|
235
254
|
let tree_props = JSON.parse(res.data.treeProps || "{}") || {};
|
|
236
255
|
let page_props = JSON.parse(res.data.pageProps || "{}") || {};
|
|
256
|
+
let other_props = JSON.parse(res.data.otherParams || "{}") || {};
|
|
237
257
|
if (((_page_props$permissio = page_props.permission) === null || _page_props$permissio === void 0 ? void 0 : _page_props$permissio.has) == true) {
|
|
238
258
|
page_props.permission.menuCode = menuCode;
|
|
239
259
|
}
|
|
240
260
|
if (published == false) {
|
|
241
261
|
page_props.permission = false;
|
|
242
262
|
}
|
|
243
|
-
|
|
244
|
-
|
|
263
|
+
if (page_props.showSearch !== false && other_props !== null && other_props !== void 0 && other_props.defaultSearch && (other_props === null || other_props === void 0 ? void 0 : other_props.tableDataResource) == 'url') {
|
|
264
|
+
table_props.store.autoLoad = false;
|
|
265
|
+
}
|
|
266
|
+
if (tabParams) {
|
|
267
|
+
const Utils = defaulUtil || {};
|
|
268
|
+
let paramFunc = new Function("Utils", tabParams);
|
|
269
|
+
let converTabParams = paramFunc(Utils);
|
|
270
|
+
if (page_props.requestParams) {
|
|
271
|
+
let {
|
|
272
|
+
requestParams = {}
|
|
273
|
+
} = page_props;
|
|
274
|
+
let newRequestParams = {
|
|
275
|
+
queryParams: null,
|
|
276
|
+
addParams: null,
|
|
277
|
+
editorParams: null
|
|
278
|
+
};
|
|
279
|
+
for (let key in newRequestParams) {
|
|
280
|
+
if (requestParams[key]) {
|
|
281
|
+
let func = new Function("Utils", requestParams[key]);
|
|
282
|
+
let converParams = func(Utils);
|
|
283
|
+
const {
|
|
284
|
+
data
|
|
285
|
+
} = converParams,
|
|
286
|
+
other = _objectWithoutProperties(converParams, _excluded);
|
|
287
|
+
let newParams = _objectSpread({
|
|
288
|
+
data: _objectSpread(_objectSpread({}, converTabParams), data)
|
|
289
|
+
}, other);
|
|
290
|
+
newRequestParams[key] = newParams;
|
|
291
|
+
} else {
|
|
292
|
+
newRequestParams[key] = {
|
|
293
|
+
data: _objectSpread({}, converTabParams)
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
page_props.requestParams = _objectSpread({}, newRequestParams);
|
|
298
|
+
} else {
|
|
299
|
+
page_props.requestParams = {
|
|
300
|
+
queryParams: {
|
|
301
|
+
data: _objectSpread({}, converTabParams)
|
|
302
|
+
},
|
|
303
|
+
addParams: {
|
|
304
|
+
data: _objectSpread({}, converTabParams)
|
|
305
|
+
},
|
|
306
|
+
editorParams: {
|
|
307
|
+
data: _objectSpread({}, converTabParams)
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
}
|
|
311
|
+
}
|
|
245
312
|
this.setState({
|
|
246
313
|
pageProps: _objectSpread({}, page_props),
|
|
247
314
|
treeProps: _objectSpread({}, tree_props),
|
|
248
315
|
tableProps: _objectSpread({}, table_props),
|
|
316
|
+
otherProps: _objectSpread({}, other_props),
|
|
249
317
|
selfColumnButton: JSON.parse(res.data.columnButtons) || [],
|
|
250
318
|
selfToolButton: JSON.parse(res.data.toolButtons) || [],
|
|
251
319
|
defaultColumns: page_props.columns
|
|
@@ -330,25 +398,20 @@ export default class SettingTable extends React.Component {
|
|
|
330
398
|
treeProps: _objectSpread({}, treeProps),
|
|
331
399
|
tableProps: _objectSpread({}, tableProps),
|
|
332
400
|
formProps: {},
|
|
333
|
-
Utils: {
|
|
334
|
-
NscCom,
|
|
335
|
-
NscFile,
|
|
336
|
-
NscRequest,
|
|
337
|
-
NscUtils
|
|
338
|
-
},
|
|
401
|
+
Utils: _objectSpread({}, defaulUtil),
|
|
339
402
|
ref: this.pageRef,
|
|
340
403
|
pageRef: this.pageRef,
|
|
341
404
|
onHideForm: () => {
|
|
342
|
-
var _this$pageRef$
|
|
405
|
+
var _this$pageRef$current3;
|
|
343
406
|
this.setState({
|
|
344
407
|
pageProps: _objectSpread(_objectSpread({}, pageProps), {}, {
|
|
345
408
|
columns: defaultColumns
|
|
346
409
|
})
|
|
347
410
|
});
|
|
348
|
-
|
|
349
|
-
(_this$pageRef$current = this.pageRef.current) === null || _this$pageRef$current === void 0 || _this$pageRef$current.hideForm();
|
|
411
|
+
(_this$pageRef$current3 = this.pageRef.current) === null || _this$pageRef$current3 === void 0 || _this$pageRef$current3.hideForm();
|
|
350
412
|
},
|
|
351
|
-
funcs: _objectSpread(_objectSpread({}, deaultFuncs), funcs)
|
|
413
|
+
funcs: _objectSpread(_objectSpread({}, deaultFuncs), funcs),
|
|
414
|
+
initData: this.initData
|
|
352
415
|
}), renderSelfToolButton({
|
|
353
416
|
selfToolButton,
|
|
354
417
|
pageRef: this.pageRef,
|
|
@@ -360,118 +423,4 @@ export default class SettingTable extends React.Component {
|
|
|
360
423
|
})));
|
|
361
424
|
}
|
|
362
425
|
}
|
|
363
|
-
|
|
364
|
-
// const Index = ({ tableCode, className, menuCode, funcs = {}, published = true, instanceRef }: IProps) => {
|
|
365
|
-
// const [pageProps, setPageProps] = useState({} as any);
|
|
366
|
-
// const [treeProps, setTreeProps] = useState({
|
|
367
|
-
// store: { url: "", autoLoad: false },
|
|
368
|
-
// } as any);
|
|
369
|
-
// const [tableProps, setTableProps] = useState({} as any);
|
|
370
|
-
// const [selfToolButton, setSelfToolButton] = useState([] as any);
|
|
371
|
-
// const [selfColumnButton, setSelfColumnButton] = useState([] as any);
|
|
372
|
-
// const [pageLoading, setPageLoading] = useState(true);
|
|
373
|
-
// const pageRef: any = React.useRef(null);
|
|
374
|
-
// const [defaultColumns, setDefaultColumns] = useState([] as any);
|
|
375
|
-
|
|
376
|
-
// useEffect(() => {
|
|
377
|
-
// console.log("instanceRef", instanceRef)
|
|
378
|
-
// setPageLoading(true);
|
|
379
|
-
// if (tableCode) {
|
|
380
|
-
// let params = { code: tableCode } as any
|
|
381
|
-
// if (published) {
|
|
382
|
-
// params.isPublished = 1
|
|
383
|
-
// }
|
|
384
|
-
// getPageData({ ...params }).then((res: any) => {
|
|
385
|
-
// if (res.code == 200 && res.data) {
|
|
386
|
-
// let table_props = JSON.parse(res.data.tableProps || "{}") || {};
|
|
387
|
-
// let tree_props = JSON.parse(res.data.treeProps || "{}") || {};
|
|
388
|
-
// let page_props = JSON.parse(res.data.pageProps || "{}") || {};
|
|
389
|
-
// if (page_props.permission?.has == true) {
|
|
390
|
-
// page_props.permission.menuCode = menuCode;
|
|
391
|
-
// }
|
|
392
|
-
// setTableProps({
|
|
393
|
-
// ...table_props,
|
|
394
|
-
// });
|
|
395
|
-
// setPageProps(page_props);
|
|
396
|
-
// setTreeProps({
|
|
397
|
-
// ...tree_props,
|
|
398
|
-
// });
|
|
399
|
-
// setSelfColumnButton(JSON.parse(res.data.columnButtons) || []);
|
|
400
|
-
// setSelfToolButton(JSON.parse(res.data.toolButtons) || []);
|
|
401
|
-
// setDefaultColumns(page_props.columns);
|
|
402
|
-
// setTimeout(() => {
|
|
403
|
-
// setPageLoading(false);
|
|
404
|
-
// }, 300);
|
|
405
|
-
// } else if (res.code == 200 && res.data == null) {
|
|
406
|
-
// message.error("未找到配置信息!");
|
|
407
|
-
// setPageLoading(false);
|
|
408
|
-
// } else {
|
|
409
|
-
// setPageLoading(false);
|
|
410
|
-
// }
|
|
411
|
-
// });
|
|
412
|
-
// } else {
|
|
413
|
-
// setPageLoading(false);
|
|
414
|
-
// }
|
|
415
|
-
// }, [tableCode]);
|
|
416
|
-
// useImperativeHandle(instanceRef, () => ({
|
|
417
|
-
|
|
418
|
-
// }));
|
|
419
|
-
// const deaultFuncs = {
|
|
420
|
-
// setFieldDisabled: (key, disabled) => {
|
|
421
|
-
// const newData = setFieldDisabled(
|
|
422
|
-
// pageProps.columns,
|
|
423
|
-
// key,
|
|
424
|
-
// disabled
|
|
425
|
-
// );
|
|
426
|
-
// setPageProps({ ...pageProps, columns: newData });
|
|
427
|
-
// },
|
|
428
|
-
// setFieldVisible: (key, disabled) => {
|
|
429
|
-
// const newData = setFieldVisible(pageProps.columns, key, disabled);
|
|
430
|
-
// setPageProps({ ...pageProps, columns: newData });
|
|
431
|
-
// },
|
|
432
|
-
// setFieldPropsData: (key, data) => {
|
|
433
|
-
// const newData = setFieldPropsData(pageProps.columns, key, data);
|
|
434
|
-
// setPageProps({ ...pageProps, columns: newData });
|
|
435
|
-
// },
|
|
436
|
-
// history: (params, type) => {
|
|
437
|
-
// jumpPage(params, type)
|
|
438
|
-
// },
|
|
439
|
-
// getCurrentProject: () => {
|
|
440
|
-
// return getProject()
|
|
441
|
-
// },
|
|
442
|
-
// ...funcs
|
|
443
|
-
// }
|
|
444
|
-
// return (
|
|
445
|
-
// <div className={cls("nsc-framework-tablepage", className)}>
|
|
446
|
-
// {pageLoading ? (
|
|
447
|
-
// <div style={{ width: "100%", height: "100%" }}>
|
|
448
|
-
// <Spin spinning={pageLoading}></Spin>
|
|
449
|
-
// </div>
|
|
450
|
-
// ) : (
|
|
451
|
-
// <BasePage
|
|
452
|
-
// {...pageProps}
|
|
453
|
-
// treeProps={{ ...treeProps }}
|
|
454
|
-
// tableProps={{ ...tableProps }}
|
|
455
|
-
// formProps={{}}
|
|
456
|
-
// Utils={{ NscCom, NscFile, NscRequest, NscUtils }}
|
|
457
|
-
// ref={pageRef}
|
|
458
|
-
// pageRef={pageRef}
|
|
459
|
-
// onHideForm={() => {
|
|
460
|
-
// setPageProps({ ...pageProps, columns: defaultColumns });
|
|
461
|
-
// pageRef.current?.hideForm();
|
|
462
|
-
// }}
|
|
463
|
-
// funcs={{ ...deaultFuncs, ...funcs }}
|
|
464
|
-
// >
|
|
465
|
-
// {renderSelfToolButton({ selfToolButton, pageRef, funcs: { ...deaultFuncs, ...funcs } })}
|
|
466
|
-
// {renderSelfColumnButton({ selfColumnButton, pageRef, funcs: { ...deaultFuncs, ...funcs } })}
|
|
467
|
-
// </BasePage>
|
|
468
|
-
// )}
|
|
469
|
-
// </div>
|
|
470
|
-
// );
|
|
471
|
-
// };
|
|
472
|
-
// export default forwardRef<any, IProps>(
|
|
473
|
-
// (props, ref) => {
|
|
474
|
-
// return <Index {...props} instanceRef={ref} />;
|
|
475
|
-
// },
|
|
476
|
-
// );
|
|
477
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlUGFnZSIsIlNwaW4iLCJCdXR0b24iLCJSZWFjdCIsIk5zY0NvbSIsIk5zY0ZpbGUiLCJOc2NSZXF1ZXN0IiwiTnNjVXRpbHMiLCJjbHMiLCJxdWVyeVN0cmluZyIsImdldExvY2FsU3RvcmUiLCJyZW5kZXJTZWxmVG9vbEJ1dHRvbiIsIl9yZWYiLCJzZWxmVG9vbEJ1dHRvbiIsInBhZ2VSZWYiLCJmdW5jcyIsImxlbmd0aCIsIm1hcCIsIml0ZW0iLCJpbmRleCIsImNyZWF0ZUVsZW1lbnQiLCJwYWdlVHlwZSIsImtleSIsInR5cGUiLCJvbkNsaWNrIiwiVXRpbHMiLCJldmVudE9wdGlvbiIsImZ1bmMiLCJGdW5jdGlvbiIsImNvZGUiLCJuYW1lIiwicmVuZGVyU2VsZkNvbHVtbkJ1dHRvbiIsIl9yZWYyIiwic2VsZkNvbHVtbkJ1dHRvbiIsInJlY29yZCIsInJlY29yZFNob3ciLCJnZXRQYWdlRGF0YSIsInBhcmFtcyIsImdldCIsInhzc0ZpbHRlciIsImF1dG9QcmVmaXgiLCJzZXRGaWVsZERpc2FibGVkIiwiZGF0YSIsImRpc2FibGVkIiwiY29sdW1ucyIsIm5ld0NvbHVtbnMiLCJvYmoiLCJfb2JqZWN0U3ByZWFkIiwiZGF0YUluZGV4IiwiaW5kZXhPZiIsInByb3BzIiwicHVzaCIsInNldEZpZWxkVmlzaWJsZSIsInZpc2libGUiLCJlZGl0b3IiLCJzZXRGaWVsZFByb3BzRGF0YSIsInByb3BzRGF0YSIsImp1bXBQYWdlIiwicGF0aG5hbWUiLCJxdWVyeSIsImlkIiwidGl0bGUiLCJzZXJ2aWNlTmFtZSIsInNlcnZpY2VQYXRoIiwib3BlblR5cGUiLCJuZXdRdWVyeSIsInVybFBhcmFtcyIsInN0cmluZ2lmeSIsInBhdGgiLCJjb25jYXQiLCJ3aW5kb3ciLCJfX1BPV0VSRURfQllfUUlBTktVTl9fIiwicGFyZW50IiwicG9zdE1lc3NhZ2UiLCJldmVudFR5cGUiLCJwYXlsb2FkIiwibG9jYXRpb24iLCJvcmlnaW4iLCJoaXN0b3J5IiwicHVzaFN0YXRlIiwiZ28iLCJnZXRQcm9qZWN0IiwicHJvamVjdCIsIlNldHRpbmdUYWJsZSIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwiYXJndW1lbnRzIiwiX2RlZmluZVByb3BlcnR5IiwicGFnZVByb3BzIiwidHJlZVByb3BzIiwic3RvcmUiLCJ1cmwiLCJhdXRvTG9hZCIsInRhYmxlUHJvcHMiLCJwYWdlTG9hZGluZyIsImRlZmF1bHRDb2x1bW5zIiwiY3JlYXRlUmVmIiwiY29tcG9uZW50RGlkTW91bnQiLCJnZXREYXRhIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwic25hcHNob3QiLCJ0YWJsZUNvZGUiLCJwdWJsaXNoZWQiLCJtZW51Q29kZSIsImlzUHVibGlzaGVkIiwidGhlbiIsInJlcyIsIl9wYWdlX3Byb3BzJHBlcm1pc3NpbyIsInRhYmxlX3Byb3BzIiwiSlNPTiIsInBhcnNlIiwidHJlZV9wcm9wcyIsInBhZ2VfcHJvcHMiLCJwZXJtaXNzaW9uIiwiaGFzIiwiY29uc29sZSIsImxvZyIsInNldFN0YXRlIiwiY29sdW1uQnV0dG9ucyIsInRvb2xCdXR0b25zIiwiX21lc3NhZ2UiLCJlcnJvciIsInJlbmRlciIsImNsYXNzTmFtZSIsInN0YXRlIiwiZGVhdWx0RnVuY3MiLCJuZXdEYXRhIiwiZ2V0Q3VycmVudFByb2plY3QiLCJzdHlsZSIsIndpZHRoIiwiaGVpZ2h0Iiwic3Bpbm5pbmciLCJfZXh0ZW5kcyIsImZvcm1Qcm9wcyIsInJlZiIsIm9uSGlkZUZvcm0iLCJfdGhpcyRwYWdlUmVmJGN1cnJlbnQiLCJjdXJyZW50IiwiaGlkZUZvcm0iXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wYWdlL1NldHRpbmdUYWJsZS9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgdXNlRWZmZWN0LCB1c2VJbXBlcmF0aXZlSGFuZGxlLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgQmFzZVBhZ2UgZnJvbSBcIi4uL0Jhc2VQYWdlXCI7XHJcbmltcG9ydCBTcGluIGZyb20gXCIuLi8uLi9iYXNlL3NwaW5cIjtcclxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vLi4vYmFzZS9idXR0b25cIjtcclxuaW1wb3J0IFwiLi9pbmRleC5sZXNzXCI7XHJcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0ICogYXMgTnNjQ29tIGZyb20gXCIuL2NvbVwiO1xyXG5pbXBvcnQgTnNjRmlsZSBmcm9tIFwibnNjLWZpbGVcIjtcclxuaW1wb3J0IE5zY1JlcXVlc3QgZnJvbSBcIm5zYy1yZXF1ZXN0XCI7XHJcbmltcG9ydCAqIGFzIE5zY1V0aWxzIGZyb20gXCJAYmotbnNjL2Z1bmN0aW9uc1wiO1xyXG5pbXBvcnQgY2xzIGZyb20gXCJjbGFzc25hbWVzXCI7XHJcbmltcG9ydCB7IG1lc3NhZ2UgfSBmcm9tIFwiYW50ZFwiO1xyXG5pbXBvcnQgcXVlcnlTdHJpbmcgZnJvbSAncXVlcnktc3RyaW5nJ1xyXG5pbXBvcnQgeyBnZXRMb2NhbFN0b3JlIH0gZnJvbSAnQGJqLW5zYy9mdW5jdGlvbnMnXHJcbi8vIGltcG9ydCB7IGhpc3RvcnkgfSBmcm9tICd1bWknXHJcbi8vIGltcG9ydCB7IGdldENvbmZpZ0RhdGEgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcbmNvbnN0IHJlbmRlclNlbGZUb29sQnV0dG9uID0gKHsgc2VsZlRvb2xCdXR0b24sIHBhZ2VSZWYsIGZ1bmNzIH0pID0+IHtcclxuICBpZiAoc2VsZlRvb2xCdXR0b24ubGVuZ3RoID09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gc2VsZlRvb2xCdXR0b24ubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBwYWdlVHlwZT1cInRvb2xCdXR0b25cIlxyXG4gICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgIHR5cGU9e2l0ZW0udHlwZX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgbGV0IFV0aWxzID0geyBOc2NDb20sIE5zY0ZpbGUsIE5zY1JlcXVlc3QsIE5zY1V0aWxzIH07XHJcbiAgICAgICAgICAgIGxldCBldmVudE9wdGlvbiA9IHsgcGFnZVJlZjogcGFnZVJlZiwgZnVuY3M6IGZ1bmNzIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlscyxldmVudE9wdGlvblwiLCBpdGVtLm9uQ2xpY2spO1xyXG4gICAgICAgICAgICBmdW5jKFV0aWxzLCBldmVudE9wdGlvbik7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgY29kZT17aXRlbS5jb2RlfVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtLm5hbWV9XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCByZW5kZXJTZWxmQ29sdW1uQnV0dG9uID0gKHsgc2VsZkNvbHVtbkJ1dHRvbiwgcGFnZVJlZiwgZnVuY3MgfSkgPT4ge1xyXG4gIGlmIChzZWxmQ29sdW1uQnV0dG9uLmxlbmd0aCA9PSAwKSB7XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIHNlbGZDb2x1bW5CdXR0b24ubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBwYWdlVHlwZT1cImNvbHVtbkJ1dHRvblwiXHJcbiAgICAgICAgICBrZXk9e2luZGV4fVxyXG4gICAgICAgICAgdHlwZT17aXRlbS50eXBlfVxyXG4gICAgICAgICAgb25DbGljaz17KHJlY29yZCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgVXRpbHMgPSB7IE5zY0NvbSwgTnNjRmlsZSwgTnNjUmVxdWVzdCwgTnNjVXRpbHMgfTtcclxuICAgICAgICAgICAgbGV0IGV2ZW50T3B0aW9uID0geyBwYWdlUmVmOiBwYWdlUmVmLCByZWNvcmQ6IHJlY29yZCwgZnVuY3M6IGZ1bmNzIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlscyxldmVudE9wdGlvblwiLCBpdGVtLm9uQ2xpY2spO1xyXG4gICAgICAgICAgICBmdW5jKFV0aWxzLCBldmVudE9wdGlvbik7XHJcbiAgICAgICAgICB9fVxyXG4gICAgICAgICAgY29kZT17aXRlbS5jb2RlfVxyXG4gICAgICAgICAgcmVjb3JkU2hvdz17aXRlbS5yZWNvcmRTaG93fVxyXG4gICAgICAgID5cclxuICAgICAgICAgIHtpdGVtLm5hbWV9XHJcbiAgICAgICAgPC9CdXR0b24+XHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcbn07XHJcblxyXG5jb25zdCBnZXRQYWdlRGF0YSA9IChwYXJhbXM6IGFueSkgPT4ge1xyXG4gIHJldHVybiBOc2NSZXF1ZXN0LmdldChgL2pxdWljay1zZXR0aW5nL3NldHRpbmcvdGFibGUvaW5mby9gLCB7XHJcbiAgICBwYXJhbXMsXHJcbiAgICB4c3NGaWx0ZXI6IGZhbHNlLFxyXG4gICAgYXV0b1ByZWZpeDogdHJ1ZSxcclxuICB9KTtcclxufTtcclxuXHJcbi8v6K6+572u6KGo5Y2V5a2X5q615Y+q6K+7XHJcbmNvbnN0IHNldEZpZWxkRGlzYWJsZWQgPSAoZGF0YTogQXJyYXk8YW55Piwga2V5LCBkaXNhYmxlZCkgPT4ge1xyXG4gIGNvbnN0IGNvbHVtbnMgPSBbLi4uZGF0YV07XHJcbiAgbGV0IG5ld0NvbHVtbnMgPSBbXSBhcyBhbnk7XHJcbiAgY29sdW1ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgIGlmIChpdGVtLmRhdGFJbmRleCA9PSBrZXkgfHwga2V5LmluZGV4T2YoaXRlbS5kYXRhSW5kZXgpID4gLTEpIHtcclxuICAgICAgbGV0IHByb3BzID0gb2JqLnByb3BzID8geyAuLi5vYmoucHJvcHMgfSA6IHt9O1xyXG4gICAgICBwcm9wcy5kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICBvYmoucHJvcHMgPSBwcm9wcztcclxuICAgIH1cclxuICAgIG5ld0NvbHVtbnMucHVzaChvYmopO1xyXG4gIH0pO1xyXG4gIHJldHVybiBuZXdDb2x1bW5zO1xyXG59O1xyXG4vL+iuvue9ruihqOWNleWtl+autemakOiXj1xyXG5jb25zdCBzZXRGaWVsZFZpc2libGUgPSAoZGF0YTogQXJyYXk8YW55Piwga2V5LCB2aXNpYmxlKSA9PiB7XHJcbiAgY29uc3QgY29sdW1ucyA9IFsuLi5kYXRhXTtcclxuICBsZXQgbmV3Q29sdW1ucyA9IFtdIGFzIGFueTtcclxuICBjb2x1bW5zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgbGV0IG9iaiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgaWYgKGl0ZW0uZGF0YUluZGV4ID09IGtleSB8fCBrZXkuaW5kZXhPZihpdGVtLmRhdGFJbmRleCkgPiAtMSkge1xyXG4gICAgICBvYmouZWRpdG9yID0gdmlzaWJsZTtcclxuICAgIH1cclxuICAgIG5ld0NvbHVtbnMucHVzaChvYmopO1xyXG4gIH0pO1xyXG4gIHJldHVybiBuZXdDb2x1bW5zO1xyXG59O1xyXG5cclxuY29uc3Qgc2V0RmllbGRQcm9wc0RhdGEgPSAoZGF0YTogQXJyYXk8YW55Piwga2V5LCBwcm9wc0RhdGEpID0+IHtcclxuICBjb25zdCBjb2x1bW5zID0gWy4uLmRhdGFdO1xyXG4gIGxldCBuZXdDb2x1bW5zID0gW10gYXMgYW55O1xyXG4gIGNvbHVtbnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICBsZXQgb2JqID0geyAuLi5pdGVtIH07XHJcbiAgICBpZiAoaXRlbS5kYXRhSW5kZXggPT0ga2V5KSB7XHJcbiAgICAgIGxldCBwcm9wcyA9IG9iai5wcm9wcyA/IHsgLi4ub2JqLnByb3BzIH0gOiB7fTtcclxuICAgICAgcHJvcHMuZGF0YSA9IHByb3BzRGF0YTtcclxuICAgICAgb2JqLnByb3BzID0gcHJvcHM7XHJcbiAgICB9XHJcbiAgICBuZXdDb2x1bW5zLnB1c2gob2JqKTtcclxuICB9KTtcclxuICByZXR1cm4gbmV3Q29sdW1ucztcclxufTtcclxuaW50ZXJmYWNlIElQYXJhbXMge1xyXG4gIHBhdGhuYW1lPzogc3RyaW5nO1xyXG4gIHF1ZXJ5PzogYW55O1xyXG4gIGlkPzogc3RyaW5nO1xyXG4gIHNlcnZpY2VOYW1lPzogc3RyaW5nO1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIHNlcnZpY2VQYXRoPzogc3RyaW5nO1xyXG4gIG1lbnVDb2RlPzogc3RyaW5nO1xyXG4gIG9wZW5UeXBlPzogbnVtYmVyO1xyXG59XHJcbmNvbnN0IGp1bXBQYWdlID0gKHBhcmFtczogSVBhcmFtcywgdHlwZT86ICdhZGRUYWInIHwgJ2p1bXBNZW51JykgPT4ge1xyXG4gIGNvbnN0IHtcclxuICAgIHBhdGhuYW1lLFxyXG4gICAgcXVlcnkgPSB7fSxcclxuICAgIGlkLFxyXG4gICAgdGl0bGUsXHJcbiAgICBzZXJ2aWNlTmFtZSxcclxuICAgIHNlcnZpY2VQYXRoLFxyXG4gICAgb3BlblR5cGUsXHJcbiAgfSA9IHBhcmFtcztcclxuICBjb25zdCBuZXdRdWVyeSA9IHsgLi4ucXVlcnkgfSBhcyBhbnk7XHJcbiAgY29uc3QgdXJsUGFyYW1zID0gcXVlcnlTdHJpbmcuc3RyaW5naWZ5KG5ld1F1ZXJ5KTtcclxuICBjb25zdCBwYXRoID0gdXJsUGFyYW1zID8gYCR7cGF0aG5hbWV9PyR7dXJsUGFyYW1zfWAgOiBwYXRobmFtZTtcclxuICAvL0B0cy1pZ25vcmVcclxuICBpZiAod2luZG93Ll9fUE9XRVJFRF9CWV9RSUFOS1VOX18pIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIHRpdGxlOiB0aXRsZSB8fCAn5paw5qCH562+JyxcclxuICAgICAgc2VydmljZU5hbWU6IHNlcnZpY2VOYW1lLCAvL+mFjee9rueahOW+ruW6lOeUqOWQjeensFxyXG4gICAgICBzZXJ2aWNlUGF0aDogc2VydmljZVBhdGgsIC8v6YWN572u55qE5b6u5bqU55So5YWl5Y+j5Zyw5Z2AXHJcbiAgICAgIHBhdGg6IHBhdGgsIC8v5paw5qCH562+55qEdXJsLOayoemFjee9rnNlcnZpY2VOYW1lIHBhdGjkuLrlrozmlbTot6/lvoRcclxuICAgICAgaWQ6IGlkLCAvL+iHquWumuS5ieWUr+S4gOWAvFxyXG4gICAgICBvcGVuVHlwZTogb3BlblR5cGUgPyBvcGVuVHlwZSA6IDQsIC8v5omT5byA5pa55byPIDTkvY3lvq7liY3nq68sIDPkuLppZnJhbWUgLOm7mOiupCAzXHJcbiAgICB9O1xyXG4gICAgd2luZG93LnBhcmVudC5wb3N0TWVzc2FnZShcclxuICAgICAge1xyXG4gICAgICAgIGV2ZW50VHlwZTogdHlwZSA/IHR5cGUgOiAnYWRkVGFiJyxcclxuICAgICAgICBzZXJ2aWNlTmFtZTogc2VydmljZU5hbWUgPyBzZXJ2aWNlTmFtZSA6ICdzZXR0aW5nLXdlYicsXHJcbiAgICAgICAgcGF5bG9hZDogdHlwZSA/IHBhcmFtcyA6IGRhdGEsXHJcbiAgICAgIH0sXHJcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sXHJcbiAgICApO1xyXG4gIH0gZWxzZSB7XHJcbiAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoe30sICcnLCBwYXRoKTtcclxuICAgIHdpbmRvdy5oaXN0b3J5LmdvKClcclxuICB9XHJcbn07XHJcbmNvbnN0IGdldFByb2plY3QgPSAoKSA9PiB7XHJcbiAgY29uc3QgcHJvamVjdCA9IGdldExvY2FsU3RvcmUoeyBuYW1lOiAnbnNjLWhvbWUtcHJvamVjdCcgfSkgfHwge31cclxuICByZXR1cm4gcHJvamVjdFxyXG59XHJcbmludGVyZmFjZSBJUHJvcHMge1xyXG4gIHRhYmxlQ29kZTogc3RyaW5nO1xyXG4gIGNsYXNzTmFtZT86IGFueTtcclxuICBtZW51Q29kZT86IHN0cmluZztcclxuICBmdW5jcz86IGFueVxyXG4gIHB1Ymxpc2hlZD86IGJvb2xlYW5cclxuICBpbnN0YW5jZVJlZj86IGFueVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdUYWJsZSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxJUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRlID0ge1xyXG4gICAgcGFnZVByb3BzOiB7fSBhcyBhbnksXHJcbiAgICB0cmVlUHJvcHM6IHsgc3RvcmU6IHsgdXJsOiBcIlwiLCBhdXRvTG9hZDogZmFsc2UgfSwgfSBhcyBhbnksXHJcbiAgICB0YWJsZVByb3BzOiB7fSBhcyBhbnksXHJcbiAgICBzZWxmVG9vbEJ1dHRvbjogW10gYXMgYW55LFxyXG4gICAgc2VsZkNvbHVtbkJ1dHRvbjogW10gYXMgYW55LFxyXG4gICAgcGFnZUxvYWRpbmc6IHRydWUsXHJcbiAgICBkZWZhdWx0Q29sdW1uczogW10gYXMgYW55XHJcbiAgfVxyXG4gIHBhZ2VSZWYgPSBSZWFjdC5jcmVhdGVSZWY8YW55PigpO1xyXG5cclxuICBjb21wb25lbnREaWRNb3VudCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZ2V0RGF0YSgpXHJcbiAgfVxyXG5cclxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBSZWFkb25seTxJUHJvcHM+LCBwcmV2U3RhdGU6IFJlYWRvbmx5PGFueT4sIHNuYXBzaG90PzogYW55KTogdm9pZCB7XHJcbiAgICBpZiAocHJldlByb3BzLnRhYmxlQ29kZSAhPSB0aGlzLnByb3BzLnRhYmxlQ29kZSkge1xyXG4gICAgICB0aGlzLmdldERhdGEoKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g6I635Y+W5pWw5o2uXHJcbiAgZ2V0RGF0YSgpIHtcclxuICAgIC8vIOS7jnByb3Bz5Lit6I635Y+WdGFibGVDb2Rl44CBcHVibGlzaGVk44CBbWVudUNvZGVcclxuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBwdWJsaXNoZWQgPSB0cnVlLCBtZW51Q29kZSB9ID0gdGhpcy5wcm9wc1xyXG4gICAgLy8g5aaC5p6cdGFibGVDb2Rl5a2Y5ZyoXHJcbiAgICBpZiAodGFibGVDb2RlKSB7XHJcbiAgICAgIC8vIOWumuS5ieWPguaVsFxyXG4gICAgICBsZXQgcGFyYW1zID0geyBjb2RlOiB0YWJsZUNvZGUgfSBhcyBhbnlcclxuICAgICAgLy8g5aaC5p6ccHVibGlzaGVk5Li6dHJ1ZVxyXG4gICAgICBpZiAocHVibGlzaGVkKSB7XHJcbiAgICAgICAgLy8g6K6+572u5Y+C5pWwaXNQdWJsaXNoZWTkuLoxXHJcbiAgICAgICAgcGFyYW1zLmlzUHVibGlzaGVkID0gMVxyXG4gICAgICB9XHJcbiAgICAgIC8vIOiwg+eUqGdldFBhZ2VEYXRh5pa55rOV6I635Y+W5pWw5o2uXHJcbiAgICAgIGdldFBhZ2VEYXRhKHsgLi4ucGFyYW1zIH0pLnRoZW4oKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCAmJiByZXMuZGF0YSkge1xyXG4gICAgICAgICAgbGV0IHRhYmxlX3Byb3BzID0gSlNPTi5wYXJzZShyZXMuZGF0YS50YWJsZVByb3BzIHx8IFwie31cIikgfHwge307XHJcbiAgICAgICAgICBsZXQgdHJlZV9wcm9wcyA9IEpTT04ucGFyc2UocmVzLmRhdGEudHJlZVByb3BzIHx8IFwie31cIikgfHwge307XHJcbiAgICAgICAgICBsZXQgcGFnZV9wcm9wcyA9IEpTT04ucGFyc2UocmVzLmRhdGEucGFnZVByb3BzIHx8IFwie31cIikgfHwge307XHJcbiAgICAgICAgICBpZiAocGFnZV9wcm9wcy5wZXJtaXNzaW9uPy5oYXMgPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICBwYWdlX3Byb3BzLnBlcm1pc3Npb24ubWVudUNvZGUgPSBtZW51Q29kZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmIChwdWJsaXNoZWQgPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgcGFnZV9wcm9wcy5wZXJtaXNzaW9uID0gZmFsc2VcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdwYWdlX3Byb3BzJywgcGFnZV9wcm9wcylcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCd0YWJsZV9wcm9wcycsIHRhYmxlX3Byb3BzKVxyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHBhZ2VQcm9wczoge1xyXG4gICAgICAgICAgICAgIC4uLnBhZ2VfcHJvcHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRyZWVQcm9wczoge1xyXG4gICAgICAgICAgICAgIC4uLnRyZWVfcHJvcHMsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHRhYmxlUHJvcHM6IHtcclxuICAgICAgICAgICAgICAuLi50YWJsZV9wcm9wcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZkNvbHVtbkJ1dHRvbjogSlNPTi5wYXJzZShyZXMuZGF0YS5jb2x1bW5CdXR0b25zKSB8fCBbXSxcclxuICAgICAgICAgICAgc2VsZlRvb2xCdXR0b246IEpTT04ucGFyc2UocmVzLmRhdGEudG9vbEJ1dHRvbnMpIHx8IFtdLFxyXG4gICAgICAgICAgICBkZWZhdWx0Q29sdW1uczogcGFnZV9wcm9wcy5jb2x1bW5zLFxyXG4gICAgICAgICAgfSwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICBwYWdlTG9hZGluZzogZmFsc2VcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgIH0gZWxzZSBpZiAocmVzLmNvZGUgPT0gMjAwICYmIHJlcy5kYXRhID09IG51bGwpIHtcclxuICAgICAgICAgIG1lc3NhZ2UuZXJyb3IoXCLmnKrmib7liLDphY3nva7kv6Hmga/vvIFcIik7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgcGFnZUxvYWRpbmc6IGZhbHNlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgcGFnZUxvYWRpbmc6IGZhbHNlXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICBwYWdlTG9hZGluZzogZmFsc2VcclxuICAgICAgfSlcclxuICAgIH1cclxuICB9XHJcbiAgcmVuZGVyKCkge1xyXG4gICAgY29uc3QgeyBjbGFzc05hbWUsIGZ1bmNzID0ge30gfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCB7IHBhZ2VQcm9wcywgdHJlZVByb3BzLCB0YWJsZVByb3BzLCBzZWxmVG9vbEJ1dHRvbiwgc2VsZkNvbHVtbkJ1dHRvbiwgcGFnZUxvYWRpbmcsIGRlZmF1bHRDb2x1bW5zIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgZGVhdWx0RnVuY3MgPSB7XHJcbiAgICAgIHNldEZpZWxkRGlzYWJsZWQ6IChrZXksIGRpc2FibGVkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IHNldEZpZWxkRGlzYWJsZWQoXHJcbiAgICAgICAgICBwYWdlUHJvcHMuY29sdW1ucyxcclxuICAgICAgICAgIGtleSxcclxuICAgICAgICAgIGRpc2FibGVkXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHBhZ2VQcm9wczogeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IG5ld0RhdGEgfSxcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSxcclxuICAgICAgc2V0RmllbGRWaXNpYmxlOiAoa2V5LCBkaXNhYmxlZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzZXRGaWVsZFZpc2libGUocGFnZVByb3BzLmNvbHVtbnMsIGtleSwgZGlzYWJsZWQpO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICAgICAgcGFnZVByb3BzOiB7IC4uLnBhZ2VQcm9wcywgY29sdW1uczogbmV3RGF0YSB9LFxyXG4gICAgICAgIH0pXHJcblxyXG4gICAgICB9LFxyXG4gICAgICBzZXRGaWVsZFByb3BzRGF0YTogKGtleSwgZGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzZXRGaWVsZFByb3BzRGF0YShwYWdlUHJvcHMuY29sdW1ucywga2V5LCBkYXRhKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHBhZ2VQcm9wczogeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IG5ld0RhdGEgfSxcclxuICAgICAgICB9KVxyXG4gICAgICB9LFxyXG4gICAgICBoaXN0b3J5OiAocGFyYW1zLCB0eXBlKSA9PiB7XHJcbiAgICAgICAganVtcFBhZ2UocGFyYW1zLCB0eXBlKVxyXG4gICAgICB9LFxyXG4gICAgICBnZXRDdXJyZW50UHJvamVjdDogKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBnZXRQcm9qZWN0KClcclxuICAgICAgfSxcclxuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKFxyXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xzKFwibnNjLWZyYW1ld29yay10YWJsZXBhZ2VcIiwgY2xhc3NOYW1lKX0+XHJcbiAgICAgICAge3BhZ2VMb2FkaW5nID8gKFxyXG4gICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIsIGhlaWdodDogXCIxMDAlXCIgfX0+XHJcbiAgICAgICAgICAgIDxTcGluIHNwaW5uaW5nPXtwYWdlTG9hZGluZ30+PC9TcGluPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgKSA6IChcclxuICAgICAgICAgIDxCYXNlUGFnZVxyXG4gICAgICAgICAgICB7Li4ucGFnZVByb3BzfVxyXG4gICAgICAgICAgICB0cmVlUHJvcHM9e3sgLi4udHJlZVByb3BzIH19XHJcbiAgICAgICAgICAgIHRhYmxlUHJvcHM9e3sgLi4udGFibGVQcm9wcyB9fVxyXG4gICAgICAgICAgICBmb3JtUHJvcHM9e3t9fVxyXG4gICAgICAgICAgICBVdGlscz17eyBOc2NDb20sIE5zY0ZpbGUsIE5zY1JlcXVlc3QsIE5zY1V0aWxzIH19XHJcbiAgICAgICAgICAgIHJlZj17dGhpcy5wYWdlUmVmfVxyXG4gICAgICAgICAgICBwYWdlUmVmPXt0aGlzLnBhZ2VSZWZ9XHJcbiAgICAgICAgICAgIG9uSGlkZUZvcm09eygpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgICAgIHBhZ2VQcm9wczogeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IGRlZmF1bHRDb2x1bW5zIH0sXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAvLyBzZXRQYWdlUHJvcHMoeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IGRlZmF1bHRDb2x1bW5zIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMucGFnZVJlZi5jdXJyZW50Py5oaWRlRm9ybSgpO1xyXG4gICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICBmdW5jcz17eyAuLi5kZWF1bHRGdW5jcywgLi4uZnVuY3MgfX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3JlbmRlclNlbGZUb29sQnV0dG9uKHsgc2VsZlRvb2xCdXR0b24sIHBhZ2VSZWY6IHRoaXMucGFnZVJlZiwgZnVuY3M6IHsgLi4uZGVhdWx0RnVuY3MsIC4uLmZ1bmNzIH0gfSl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJTZWxmQ29sdW1uQnV0dG9uKHsgc2VsZkNvbHVtbkJ1dHRvbiwgcGFnZVJlZjogdGhpcy5wYWdlUmVmLCBmdW5jczogeyAuLi5kZWF1bHRGdW5jcywgLi4uZnVuY3MgfSB9KX1cclxuICAgICAgICAgIDwvQmFzZVBhZ2U+XHJcbiAgICAgICAgKX1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG4vLyBjb25zdCBJbmRleCA9ICh7IHRhYmxlQ29kZSwgY2xhc3NOYW1lLCBtZW51Q29kZSwgZnVuY3MgPSB7fSwgcHVibGlzaGVkID0gdHJ1ZSwgaW5zdGFuY2VSZWYgfTogSVByb3BzKSA9PiB7XHJcbi8vICAgY29uc3QgW3BhZ2VQcm9wcywgc2V0UGFnZVByb3BzXSA9IHVzZVN0YXRlKHt9IGFzIGFueSk7XHJcbi8vICAgY29uc3QgW3RyZWVQcm9wcywgc2V0VHJlZVByb3BzXSA9IHVzZVN0YXRlKHtcclxuLy8gICAgIHN0b3JlOiB7IHVybDogXCJcIiwgYXV0b0xvYWQ6IGZhbHNlIH0sXHJcbi8vICAgfSBhcyBhbnkpO1xyXG4vLyAgIGNvbnN0IFt0YWJsZVByb3BzLCBzZXRUYWJsZVByb3BzXSA9IHVzZVN0YXRlKHt9IGFzIGFueSk7XHJcbi8vICAgY29uc3QgW3NlbGZUb29sQnV0dG9uLCBzZXRTZWxmVG9vbEJ1dHRvbl0gPSB1c2VTdGF0ZShbXSBhcyBhbnkpO1xyXG4vLyAgIGNvbnN0IFtzZWxmQ29sdW1uQnV0dG9uLCBzZXRTZWxmQ29sdW1uQnV0dG9uXSA9IHVzZVN0YXRlKFtdIGFzIGFueSk7XHJcbi8vICAgY29uc3QgW3BhZ2VMb2FkaW5nLCBzZXRQYWdlTG9hZGluZ10gPSB1c2VTdGF0ZSh0cnVlKTtcclxuLy8gICBjb25zdCBwYWdlUmVmOiBhbnkgPSBSZWFjdC51c2VSZWYobnVsbCk7XHJcbi8vICAgY29uc3QgW2RlZmF1bHRDb2x1bW5zLCBzZXREZWZhdWx0Q29sdW1uc10gPSB1c2VTdGF0ZShbXSBhcyBhbnkpO1xyXG5cclxuLy8gICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4vLyAgICAgY29uc29sZS5sb2coXCJpbnN0YW5jZVJlZlwiLCBpbnN0YW5jZVJlZilcclxuLy8gICAgIHNldFBhZ2VMb2FkaW5nKHRydWUpO1xyXG4vLyAgICAgaWYgKHRhYmxlQ29kZSkge1xyXG4vLyAgICAgICBsZXQgcGFyYW1zID0geyBjb2RlOiB0YWJsZUNvZGUgfSBhcyBhbnlcclxuLy8gICAgICAgaWYgKHB1Ymxpc2hlZCkge1xyXG4vLyAgICAgICAgIHBhcmFtcy5pc1B1Ymxpc2hlZCA9IDFcclxuLy8gICAgICAgfVxyXG4vLyAgICAgICBnZXRQYWdlRGF0YSh7IC4uLnBhcmFtcyB9KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4vLyAgICAgICAgIGlmIChyZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGEpIHtcclxuLy8gICAgICAgICAgIGxldCB0YWJsZV9wcm9wcyA9IEpTT04ucGFyc2UocmVzLmRhdGEudGFibGVQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4vLyAgICAgICAgICAgbGV0IHRyZWVfcHJvcHMgPSBKU09OLnBhcnNlKHJlcy5kYXRhLnRyZWVQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4vLyAgICAgICAgICAgbGV0IHBhZ2VfcHJvcHMgPSBKU09OLnBhcnNlKHJlcy5kYXRhLnBhZ2VQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4vLyAgICAgICAgICAgaWYgKHBhZ2VfcHJvcHMucGVybWlzc2lvbj8uaGFzID09IHRydWUpIHtcclxuLy8gICAgICAgICAgICAgcGFnZV9wcm9wcy5wZXJtaXNzaW9uLm1lbnVDb2RlID0gbWVudUNvZGU7XHJcbi8vICAgICAgICAgICB9XHJcbi8vICAgICAgICAgICBzZXRUYWJsZVByb3BzKHtcclxuLy8gICAgICAgICAgICAgLi4udGFibGVfcHJvcHMsXHJcbi8vICAgICAgICAgICB9KTtcclxuLy8gICAgICAgICAgIHNldFBhZ2VQcm9wcyhwYWdlX3Byb3BzKTtcclxuLy8gICAgICAgICAgIHNldFRyZWVQcm9wcyh7XHJcbi8vICAgICAgICAgICAgIC4uLnRyZWVfcHJvcHMsXHJcbi8vICAgICAgICAgICB9KTtcclxuLy8gICAgICAgICAgIHNldFNlbGZDb2x1bW5CdXR0b24oSlNPTi5wYXJzZShyZXMuZGF0YS5jb2x1bW5CdXR0b25zKSB8fCBbXSk7XHJcbi8vICAgICAgICAgICBzZXRTZWxmVG9vbEJ1dHRvbihKU09OLnBhcnNlKHJlcy5kYXRhLnRvb2xCdXR0b25zKSB8fCBbXSk7XHJcbi8vICAgICAgICAgICBzZXREZWZhdWx0Q29sdW1ucyhwYWdlX3Byb3BzLmNvbHVtbnMpO1xyXG4vLyAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbi8vICAgICAgICAgICAgIHNldFBhZ2VMb2FkaW5nKGZhbHNlKTtcclxuLy8gICAgICAgICAgIH0sIDMwMCk7XHJcbi8vICAgICAgICAgfSBlbHNlIGlmIChyZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGEgPT0gbnVsbCkge1xyXG4vLyAgICAgICAgICAgbWVzc2FnZS5lcnJvcihcIuacquaJvuWIsOmFjee9ruS/oeaBr++8gVwiKTtcclxuLy8gICAgICAgICAgIHNldFBhZ2VMb2FkaW5nKGZhbHNlKTtcclxuLy8gICAgICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICAgICAgc2V0UGFnZUxvYWRpbmcoZmFsc2UpO1xyXG4vLyAgICAgICAgIH1cclxuLy8gICAgICAgfSk7XHJcbi8vICAgICB9IGVsc2Uge1xyXG4vLyAgICAgICBzZXRQYWdlTG9hZGluZyhmYWxzZSk7XHJcbi8vICAgICB9XHJcbi8vICAgfSwgW3RhYmxlQ29kZV0pO1xyXG4vLyAgIHVzZUltcGVyYXRpdmVIYW5kbGUoaW5zdGFuY2VSZWYsICgpID0+ICh7XHJcblxyXG4vLyAgIH0pKTtcclxuLy8gICBjb25zdCBkZWF1bHRGdW5jcyA9IHtcclxuLy8gICAgIHNldEZpZWxkRGlzYWJsZWQ6IChrZXksIGRpc2FibGVkKSA9PiB7XHJcbi8vICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzZXRGaWVsZERpc2FibGVkKFxyXG4vLyAgICAgICAgIHBhZ2VQcm9wcy5jb2x1bW5zLFxyXG4vLyAgICAgICAgIGtleSxcclxuLy8gICAgICAgICBkaXNhYmxlZFxyXG4vLyAgICAgICApO1xyXG4vLyAgICAgICBzZXRQYWdlUHJvcHMoeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IG5ld0RhdGEgfSk7XHJcbi8vICAgICB9LFxyXG4vLyAgICAgc2V0RmllbGRWaXNpYmxlOiAoa2V5LCBkaXNhYmxlZCkgPT4ge1xyXG4vLyAgICAgICBjb25zdCBuZXdEYXRhID0gc2V0RmllbGRWaXNpYmxlKHBhZ2VQcm9wcy5jb2x1bW5zLCBrZXksIGRpc2FibGVkKTtcclxuLy8gICAgICAgc2V0UGFnZVByb3BzKHsgLi4ucGFnZVByb3BzLCBjb2x1bW5zOiBuZXdEYXRhIH0pO1xyXG4vLyAgICAgfSxcclxuLy8gICAgIHNldEZpZWxkUHJvcHNEYXRhOiAoa2V5LCBkYXRhKSA9PiB7XHJcbi8vICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzZXRGaWVsZFByb3BzRGF0YShwYWdlUHJvcHMuY29sdW1ucywga2V5LCBkYXRhKTtcclxuLy8gICAgICAgc2V0UGFnZVByb3BzKHsgLi4ucGFnZVByb3BzLCBjb2x1bW5zOiBuZXdEYXRhIH0pO1xyXG4vLyAgICAgfSxcclxuLy8gICAgIGhpc3Rvcnk6IChwYXJhbXMsIHR5cGUpID0+IHtcclxuLy8gICAgICAganVtcFBhZ2UocGFyYW1zLCB0eXBlKVxyXG4vLyAgICAgfSxcclxuLy8gICAgIGdldEN1cnJlbnRQcm9qZWN0OiAoKSA9PiB7XHJcbi8vICAgICAgIHJldHVybiBnZXRQcm9qZWN0KClcclxuLy8gICAgIH0sXHJcbi8vICAgICAuLi5mdW5jc1xyXG4vLyAgIH1cclxuLy8gICByZXR1cm4gKFxyXG4vLyAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhcIm5zYy1mcmFtZXdvcmstdGFibGVwYWdlXCIsIGNsYXNzTmFtZSl9PlxyXG4vLyAgICAgICB7cGFnZUxvYWRpbmcgPyAoXHJcbi8vICAgICAgICAgPGRpdiBzdHlsZT17eyB3aWR0aDogXCIxMDAlXCIsIGhlaWdodDogXCIxMDAlXCIgfX0+XHJcbi8vICAgICAgICAgICA8U3BpbiBzcGlubmluZz17cGFnZUxvYWRpbmd9PjwvU3Bpbj5cclxuLy8gICAgICAgICA8L2Rpdj5cclxuLy8gICAgICAgKSA6IChcclxuLy8gICAgICAgICA8QmFzZVBhZ2VcclxuLy8gICAgICAgICAgIHsuLi5wYWdlUHJvcHN9XHJcbi8vICAgICAgICAgICB0cmVlUHJvcHM9e3sgLi4udHJlZVByb3BzIH19XHJcbi8vICAgICAgICAgICB0YWJsZVByb3BzPXt7IC4uLnRhYmxlUHJvcHMgfX1cclxuLy8gICAgICAgICAgIGZvcm1Qcm9wcz17e319XHJcbi8vICAgICAgICAgICBVdGlscz17eyBOc2NDb20sIE5zY0ZpbGUsIE5zY1JlcXVlc3QsIE5zY1V0aWxzIH19XHJcbi8vICAgICAgICAgICByZWY9e3BhZ2VSZWZ9XHJcbi8vICAgICAgICAgICBwYWdlUmVmPXtwYWdlUmVmfVxyXG4vLyAgICAgICAgICAgb25IaWRlRm9ybT17KCkgPT4ge1xyXG4vLyAgICAgICAgICAgICBzZXRQYWdlUHJvcHMoeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IGRlZmF1bHRDb2x1bW5zIH0pO1xyXG4vLyAgICAgICAgICAgICBwYWdlUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbi8vICAgICAgICAgICB9fVxyXG4vLyAgICAgICAgICAgZnVuY3M9e3sgLi4uZGVhdWx0RnVuY3MsIC4uLmZ1bmNzIH19XHJcbi8vICAgICAgICAgPlxyXG4vLyAgICAgICAgICAge3JlbmRlclNlbGZUb29sQnV0dG9uKHsgc2VsZlRvb2xCdXR0b24sIHBhZ2VSZWYsIGZ1bmNzOiB7IC4uLmRlYXVsdEZ1bmNzLCAuLi5mdW5jcyB9IH0pfVxyXG4vLyAgICAgICAgICAge3JlbmRlclNlbGZDb2x1bW5CdXR0b24oeyBzZWxmQ29sdW1uQnV0dG9uLCBwYWdlUmVmLCBmdW5jczogeyAuLi5kZWF1bHRGdW5jcywgLi4uZnVuY3MgfSB9KX1cclxuLy8gICAgICAgICA8L0Jhc2VQYWdlPlxyXG4vLyAgICAgICApfVxyXG4vLyAgICAgPC9kaXY+XHJcbi8vICAgKTtcclxuLy8gfTtcclxuLy8gZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZjxhbnksIElQcm9wcz4oXHJcbi8vICAgKHByb3BzLCByZWYpID0+IHtcclxuLy8gICAgIHJldHVybiA8SW5kZXggey4uLnByb3BzfSBpbnN0YW5jZVJlZj17cmVmfSAvPjtcclxuLy8gICB9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Q0FBQSxLQUFNO1FBQUEsSUFBQUMscUJBQUE7UUFDaEIsSUFBSSxDQUFDbkIsUUFBUSxDQUFDO1VBQ1ovQixTQUFTLEVBQUF6QyxhQUFBLENBQUFBLGFBQUEsS0FBT3lDLFNBQVM7WUFBRTVDLE9BQU8sRUFBRW1EO1VBQWM7UUFDcEQsQ0FBQyxDQUFDO1FBQ0Y7UUFDQSxDQUFBMkMscUJBQUEsT0FBSSxDQUFDNUgsT0FBTyxDQUFDNkgsT0FBTyxjQUFBRCxxQkFBQSxlQUFwQkEscUJBQUEsQ0FBc0JFLFFBQVEsQ0FBQyxDQUFDO01BQ2xDLENBQUU7TUFDRjdILEtBQUssRUFBQWdDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPZ0YsV0FBVyxHQUFLaEgsS0FBSztJQUFHLElBRW5DSixvQkFBb0IsQ0FBQztNQUFFRSxjQUFjO01BQUVDLE9BQU8sRUFBRSxJQUFJLENBQUNBLE9BQU87TUFBRUMsS0FBSyxFQUFBZ0MsYUFBQSxDQUFBQSxhQUFBLEtBQU9nRixXQUFXLEdBQUtoSCxLQUFLO0lBQUcsQ0FBQyxDQUFDLEVBQ3BHZ0Isc0JBQXNCLENBQUM7TUFBRUUsZ0JBQWdCO01BQUVuQixPQUFPLEVBQUUsSUFBSSxDQUFDQSxPQUFPO01BQUVDLEtBQUssRUFBQWdDLGFBQUEsQ0FBQUEsYUFBQSxLQUFPZ0YsV0FBVyxHQUFLaEgsS0FBSztJQUFHLENBQUMsQ0FDaEcsQ0FFVCxDQUFDO0VBRVY7QUFFRjs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSJ9
|
|
426
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJCYXNlUGFnZSIsIlNwaW4iLCJCdXR0b24iLCJSZWFjdCIsIk5zY0NvbSIsIk5zY0ZpbGUiLCJOc2NSZXF1ZXN0IiwiTnNjVXRpbHMiLCJjbHMiLCJxdWVyeVN0cmluZyIsImdldExvY2FsU3RvcmUiLCJkYXlqcyIsImRlZmF1bFV0aWwiLCJjcmVhdGVFbGVtZW50IiwicmVuZGVyU2VsZlRvb2xCdXR0b24iLCJfcmVmIiwic2VsZlRvb2xCdXR0b24iLCJwYWdlUmVmIiwiZnVuY3MiLCJsZW5ndGgiLCJtYXAiLCJpdGVtIiwiaW5kZXgiLCJwYWdlVHlwZSIsImtleSIsInR5cGUiLCJvbkNsaWNrIiwiZXZlbnRPcHRpb24iLCJmdW5jIiwiRnVuY3Rpb24iLCJjb2RlIiwibmFtZSIsInJlbmRlclNlbGZDb2x1bW5CdXR0b24iLCJfcmVmMiIsInNlbGZDb2x1bW5CdXR0b24iLCJyZWNvcmQiLCJyZWNvcmRTaG93IiwiZ2V0UGFnZURhdGEiLCJwYXJhbXMiLCJnZXQiLCJ4c3NGaWx0ZXIiLCJhdXRvUHJlZml4Iiwic2V0RmllbGREaXNhYmxlZCIsImRhdGEiLCJkaXNhYmxlZCIsImNvbHVtbnMiLCJuZXdDb2x1bW5zIiwib2JqIiwiX29iamVjdFNwcmVhZCIsImRhdGFJbmRleCIsImluZGV4T2YiLCJwcm9wcyIsInB1c2giLCJzZXRGaWVsZFZpc2libGUiLCJ2aXNpYmxlIiwiZWRpdG9yIiwic2V0RmllbGRQcm9wc0RhdGEiLCJwcm9wc0RhdGEiLCJqdW1wUGFnZSIsInBhdGhuYW1lIiwicXVlcnkiLCJpZCIsInRpdGxlIiwic2VydmljZU5hbWUiLCJzZXJ2aWNlUGF0aCIsIm9wZW5UeXBlIiwibmV3UXVlcnkiLCJ1cmxQYXJhbXMiLCJzdHJpbmdpZnkiLCJwYXRoIiwiY29uY2F0Iiwid2luZG93IiwiX19QT1dFUkVEX0JZX1FJQU5LVU5fXyIsInBhcmVudCIsInBvc3RNZXNzYWdlIiwiZXZlbnRUeXBlIiwicGF5bG9hZCIsImxvY2F0aW9uIiwib3JpZ2luIiwiaGlzdG9yeSIsInB1c2hTdGF0ZSIsImdvIiwiZ2V0UHJvamVjdCIsInByb2plY3QiLCJTZXR0aW5nVGFibGUiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsImFyZ3VtZW50cyIsIl9kZWZpbmVQcm9wZXJ0eSIsInBhZ2VQcm9wcyIsInRyZWVQcm9wcyIsInN0b3JlIiwidXJsIiwiYXV0b0xvYWQiLCJ0YWJsZVByb3BzIiwicGFnZUxvYWRpbmciLCJkZWZhdWx0Q29sdW1ucyIsIm90aGVyUHJvcHMiLCJjcmVhdGVSZWYiLCJyZXMiLCJzdGF0ZSIsInNob3dTZWFyY2giLCJkZWZhdWx0U2VhcmNoIiwidGFibGVEYXRhUmVzb3VyY2UiLCJzZXRUaW1lb3V0IiwiX3RoaXMkcGFnZVJlZiRjdXJyZW50IiwiX3RoaXMkcGFnZVJlZiRjdXJyZW50MiIsImN1cnJlbnQiLCJ0YWJsZUxvYWQiLCJzZXRTZWFyY2hQYXJhbXMiLCJjb21wb25lbnREaWRNb3VudCIsImdldERhdGEiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJwcmV2U3RhdGUiLCJzbmFwc2hvdCIsInRhYmxlQ29kZSIsInB1Ymxpc2hlZCIsIm1lbnVDb2RlIiwidGFiUGFyYW1zIiwiaXNQdWJsaXNoZWQiLCJ0aGVuIiwiX3BhZ2VfcHJvcHMkcGVybWlzc2lvIiwidGFibGVfcHJvcHMiLCJKU09OIiwicGFyc2UiLCJ0cmVlX3Byb3BzIiwicGFnZV9wcm9wcyIsIm90aGVyX3Byb3BzIiwib3RoZXJQYXJhbXMiLCJwZXJtaXNzaW9uIiwiaGFzIiwiVXRpbHMiLCJwYXJhbUZ1bmMiLCJjb252ZXJUYWJQYXJhbXMiLCJyZXF1ZXN0UGFyYW1zIiwibmV3UmVxdWVzdFBhcmFtcyIsInF1ZXJ5UGFyYW1zIiwiYWRkUGFyYW1zIiwiZWRpdG9yUGFyYW1zIiwiY29udmVyUGFyYW1zIiwib3RoZXIiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfZXhjbHVkZWQiLCJuZXdQYXJhbXMiLCJzZXRTdGF0ZSIsImNvbHVtbkJ1dHRvbnMiLCJ0b29sQnV0dG9ucyIsIl9tZXNzYWdlIiwiZXJyb3IiLCJyZW5kZXIiLCJjbGFzc05hbWUiLCJkZWF1bHRGdW5jcyIsIm5ld0RhdGEiLCJnZXRDdXJyZW50UHJvamVjdCIsInN0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJzcGlubmluZyIsIl9leHRlbmRzIiwiZm9ybVByb3BzIiwicmVmIiwib25IaWRlRm9ybSIsIl90aGlzJHBhZ2VSZWYkY3VycmVudDMiLCJoaWRlRm9ybSIsImluaXREYXRhIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGFnZS9TZXR0aW5nVGFibGUvaW5kZXgudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUVmZmVjdCwgdXNlSW1wZXJhdGl2ZUhhbmRsZSwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcclxuaW1wb3J0IEJhc2VQYWdlIGZyb20gXCIuLi9CYXNlUGFnZVwiO1xyXG5pbXBvcnQgU3BpbiBmcm9tIFwiLi4vLi4vYmFzZS9zcGluXCI7XHJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uLy4uL2Jhc2UvYnV0dG9uXCI7XHJcbmltcG9ydCBcIi4vaW5kZXgubGVzc1wiO1xyXG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XHJcbmltcG9ydCAqIGFzIE5zY0NvbSBmcm9tIFwiLi9jb21cIjtcclxuaW1wb3J0IE5zY0ZpbGUgZnJvbSBcIm5zYy1maWxlXCI7XHJcbmltcG9ydCBOc2NSZXF1ZXN0IGZyb20gXCJuc2MtcmVxdWVzdFwiO1xyXG5pbXBvcnQgKiBhcyBOc2NVdGlscyBmcm9tIFwiQGJqLW5zYy9mdW5jdGlvbnNcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgeyBtZXNzYWdlIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IHF1ZXJ5U3RyaW5nIGZyb20gJ3F1ZXJ5LXN0cmluZydcclxuaW1wb3J0IHsgZ2V0TG9jYWxTdG9yZSB9IGZyb20gJ0Biai1uc2MvZnVuY3Rpb25zJ1xyXG5pbXBvcnQgZGF5anMgZnJvbSAnZGF5anMnXHJcbmltcG9ydCB7IGNvbnZlckZ1bmN0aW9uIH0gZnJvbSBcIi4uLy4uL3V0aWxzXCI7XHJcbi8vIGltcG9ydCB7IGhpc3RvcnkgfSBmcm9tICd1bWknXHJcbi8vIGltcG9ydCB7IGdldENvbmZpZ0RhdGEgfSBmcm9tICcuLi9zZXJ2aWNlcyc7XHJcblxyXG5jb25zdCBkZWZhdWxVdGlsID1cclxuICB7IE5zY0NvbSwgTnNjRmlsZSwgTnNjUmVxdWVzdCwgTnNjVXRpbHMsIGRheWpzLCBjcmVhdGVFbGVtZW50OiBSZWFjdC5jcmVhdGVFbGVtZW50IH0gYXMgYW55XHJcbmNvbnN0IHJlbmRlclNlbGZUb29sQnV0dG9uID0gKHsgc2VsZlRvb2xCdXR0b24sIHBhZ2VSZWYsIGZ1bmNzIH0pID0+IHtcclxuICBpZiAoc2VsZlRvb2xCdXR0b24ubGVuZ3RoID09IDApIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH0gZWxzZSB7XHJcbiAgICByZXR1cm4gc2VsZlRvb2xCdXR0b24ubWFwKChpdGVtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICA8QnV0dG9uXHJcbiAgICAgICAgICBwYWdlVHlwZT1cInRvb2xCdXR0b25cIlxyXG4gICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgIHR5cGU9e2l0ZW0udHlwZX1cclxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgbGV0IGV2ZW50T3B0aW9uID0geyBwYWdlUmVmOiBwYWdlUmVmLCBmdW5jczogZnVuY3MgfTtcclxuICAgICAgICAgICAgY29uc3QgZnVuYyA9IG5ldyBGdW5jdGlvbihcIlV0aWxzLGV2ZW50T3B0aW9uXCIsIGl0ZW0ub25DbGljayk7XHJcbiAgICAgICAgICAgIGZ1bmMoZGVmYXVsVXRpbCwgZXZlbnRPcHRpb24pO1xyXG4gICAgICAgICAgfX1cclxuICAgICAgICAgIGNvZGU9e2l0ZW0uY29kZX1cclxuICAgICAgICA+XHJcbiAgICAgICAgICB7aXRlbS5uYW1lfVxyXG4gICAgICAgIDwvQnV0dG9uPlxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgcmVuZGVyU2VsZkNvbHVtbkJ1dHRvbiA9ICh7IHNlbGZDb2x1bW5CdXR0b24sIHBhZ2VSZWYsIGZ1bmNzIH0pID0+IHtcclxuICBpZiAoc2VsZkNvbHVtbkJ1dHRvbi5sZW5ndGggPT0gMCkge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBzZWxmQ29sdW1uQnV0dG9uLm1hcCgoaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgPEJ1dHRvblxyXG4gICAgICAgICAgcGFnZVR5cGU9XCJjb2x1bW5CdXR0b25cIlxyXG4gICAgICAgICAga2V5PXtpbmRleH1cclxuICAgICAgICAgIHR5cGU9e2l0ZW0udHlwZX1cclxuICAgICAgICAgIG9uQ2xpY2s9eyhyZWNvcmQpID0+IHtcclxuICAgICAgICAgICAgbGV0IGV2ZW50T3B0aW9uID0geyBwYWdlUmVmOiBwYWdlUmVmLCByZWNvcmQ6IHJlY29yZCwgZnVuY3M6IGZ1bmNzIH07XHJcbiAgICAgICAgICAgIGNvbnN0IGZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlscyxldmVudE9wdGlvblwiLCBpdGVtLm9uQ2xpY2spO1xyXG4gICAgICAgICAgICBmdW5jKGRlZmF1bFV0aWwsIGV2ZW50T3B0aW9uKTtcclxuICAgICAgICAgIH19XHJcbiAgICAgICAgICBjb2RlPXtpdGVtLmNvZGV9XHJcbiAgICAgICAgICByZWNvcmRTaG93PXtpdGVtLnJlY29yZFNob3d9XHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge2l0ZW0ubmFtZX1cclxuICAgICAgICA8L0J1dHRvbj5cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxufTtcclxuXHJcbmNvbnN0IGdldFBhZ2VEYXRhID0gKHBhcmFtczogYW55KSA9PiB7XHJcbiAgcmV0dXJuIE5zY1JlcXVlc3QuZ2V0KGAvanF1aWNrLXNldHRpbmcvc2V0dGluZy90YWJsZS9pbmZvL2AsIHtcclxuICAgIHBhcmFtcyxcclxuICAgIHhzc0ZpbHRlcjogZmFsc2UsXHJcbiAgICBhdXRvUHJlZml4OiB0cnVlLFxyXG4gIH0pO1xyXG59O1xyXG5cclxuLy/orr7nva7ooajljZXlrZfmrrXlj6ror7tcclxuY29uc3Qgc2V0RmllbGREaXNhYmxlZCA9IChkYXRhOiBBcnJheTxhbnk+LCBrZXksIGRpc2FibGVkKSA9PiB7XHJcbiAgY29uc3QgY29sdW1ucyA9IFsuLi5kYXRhXTtcclxuICBsZXQgbmV3Q29sdW1ucyA9IFtdIGFzIGFueTtcclxuICBjb2x1bW5zLm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgbGV0IG9iaiA9IHsgLi4uaXRlbSB9O1xyXG4gICAgaWYgKGl0ZW0uZGF0YUluZGV4ID09IGtleSB8fCBrZXkuaW5kZXhPZihpdGVtLmRhdGFJbmRleCkgPiAtMSkge1xyXG4gICAgICBsZXQgcHJvcHMgPSBvYmoucHJvcHMgPyB7IC4uLm9iai5wcm9wcyB9IDoge307XHJcbiAgICAgIHByb3BzLmRpc2FibGVkID0gZGlzYWJsZWQ7XHJcbiAgICAgIG9iai5wcm9wcyA9IHByb3BzO1xyXG4gICAgfVxyXG4gICAgbmV3Q29sdW1ucy5wdXNoKG9iaik7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG5ld0NvbHVtbnM7XHJcbn07XHJcbi8v6K6+572u6KGo5Y2V5a2X5q616ZqQ6JePXHJcbmNvbnN0IHNldEZpZWxkVmlzaWJsZSA9IChkYXRhOiBBcnJheTxhbnk+LCBrZXksIHZpc2libGUpID0+IHtcclxuICBjb25zdCBjb2x1bW5zID0gWy4uLmRhdGFdO1xyXG4gIGxldCBuZXdDb2x1bW5zID0gW10gYXMgYW55O1xyXG4gIGNvbHVtbnMubWFwKChpdGVtKSA9PiB7XHJcbiAgICBsZXQgb2JqID0geyAuLi5pdGVtIH07XHJcbiAgICBpZiAoaXRlbS5kYXRhSW5kZXggPT0ga2V5IHx8IGtleS5pbmRleE9mKGl0ZW0uZGF0YUluZGV4KSA+IC0xKSB7XHJcbiAgICAgIG9iai5lZGl0b3IgPSB2aXNpYmxlO1xyXG4gICAgfVxyXG4gICAgbmV3Q29sdW1ucy5wdXNoKG9iaik7XHJcbiAgfSk7XHJcbiAgcmV0dXJuIG5ld0NvbHVtbnM7XHJcbn07XHJcblxyXG5jb25zdCBzZXRGaWVsZFByb3BzRGF0YSA9IChkYXRhOiBBcnJheTxhbnk+LCBrZXksIHByb3BzRGF0YSkgPT4ge1xyXG4gIGNvbnN0IGNvbHVtbnMgPSBbLi4uZGF0YV07XHJcbiAgbGV0IG5ld0NvbHVtbnMgPSBbXSBhcyBhbnk7XHJcbiAgY29sdW1ucy5tYXAoKGl0ZW0pID0+IHtcclxuICAgIGxldCBvYmogPSB7IC4uLml0ZW0gfTtcclxuICAgIGlmIChpdGVtLmRhdGFJbmRleCA9PSBrZXkpIHtcclxuICAgICAgbGV0IHByb3BzID0gb2JqLnByb3BzID8geyAuLi5vYmoucHJvcHMgfSA6IHt9O1xyXG4gICAgICBwcm9wcy5kYXRhID0gcHJvcHNEYXRhO1xyXG4gICAgICBvYmoucHJvcHMgPSBwcm9wcztcclxuICAgIH1cclxuICAgIG5ld0NvbHVtbnMucHVzaChvYmopO1xyXG4gIH0pO1xyXG4gIHJldHVybiBuZXdDb2x1bW5zO1xyXG59O1xyXG5pbnRlcmZhY2UgSVBhcmFtcyB7XHJcbiAgcGF0aG5hbWU/OiBzdHJpbmc7XHJcbiAgcXVlcnk/OiBhbnk7XHJcbiAgaWQ/OiBzdHJpbmc7XHJcbiAgc2VydmljZU5hbWU/OiBzdHJpbmc7XHJcbiAgdGl0bGU/OiBzdHJpbmc7XHJcbiAgc2VydmljZVBhdGg/OiBzdHJpbmc7XHJcbiAgbWVudUNvZGU/OiBzdHJpbmc7XHJcbiAgb3BlblR5cGU/OiBudW1iZXI7XHJcbn1cclxuY29uc3QganVtcFBhZ2UgPSAocGFyYW1zOiBJUGFyYW1zLCB0eXBlPzogJ2FkZFRhYicgfCAnanVtcE1lbnUnKSA9PiB7XHJcbiAgY29uc3Qge1xyXG4gICAgcGF0aG5hbWUsXHJcbiAgICBxdWVyeSA9IHt9LFxyXG4gICAgaWQsXHJcbiAgICB0aXRsZSxcclxuICAgIHNlcnZpY2VOYW1lLFxyXG4gICAgc2VydmljZVBhdGgsXHJcbiAgICBvcGVuVHlwZSxcclxuICB9ID0gcGFyYW1zO1xyXG4gIGNvbnN0IG5ld1F1ZXJ5ID0geyAuLi5xdWVyeSB9IGFzIGFueTtcclxuICBjb25zdCB1cmxQYXJhbXMgPSBxdWVyeVN0cmluZy5zdHJpbmdpZnkobmV3UXVlcnkpO1xyXG4gIGNvbnN0IHBhdGggPSB1cmxQYXJhbXMgPyBgJHtwYXRobmFtZX0/JHt1cmxQYXJhbXN9YCA6IHBhdGhuYW1lO1xyXG4gIC8vQHRzLWlnbm9yZVxyXG4gIGlmICh3aW5kb3cuX19QT1dFUkVEX0JZX1FJQU5LVU5fXykge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgdGl0bGU6IHRpdGxlIHx8ICfmlrDmoIfnrb4nLFxyXG4gICAgICBzZXJ2aWNlTmFtZTogc2VydmljZU5hbWUsIC8v6YWN572u55qE5b6u5bqU55So5ZCN56ewXHJcbiAgICAgIHNlcnZpY2VQYXRoOiBzZXJ2aWNlUGF0aCwgLy/phY3nva7nmoTlvq7lupTnlKjlhaXlj6PlnLDlnYBcclxuICAgICAgcGF0aDogcGF0aCwgLy/mlrDmoIfnrb7nmoR1cmws5rKh6YWN572uc2VydmljZU5hbWUgcGF0aOS4uuWujOaVtOi3r+W+hFxyXG4gICAgICBpZDogaWQsIC8v6Ieq5a6a5LmJ5ZSv5LiA5YC8XHJcbiAgICAgIG9wZW5UeXBlOiBvcGVuVHlwZSA/IG9wZW5UeXBlIDogNCwgLy/miZPlvIDmlrnlvI8gNOS9jeW+ruWJjeerrywgM+S4umlmcmFtZSAs6buY6K6kIDNcclxuICAgIH07XHJcbiAgICB3aW5kb3cucGFyZW50LnBvc3RNZXNzYWdlKFxyXG4gICAgICB7XHJcbiAgICAgICAgZXZlbnRUeXBlOiB0eXBlID8gdHlwZSA6ICdhZGRUYWInLFxyXG4gICAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZSA/IHNlcnZpY2VOYW1lIDogJ3NldHRpbmctd2ViJyxcclxuICAgICAgICBwYXlsb2FkOiB0eXBlID8gcGFyYW1zIDogZGF0YSxcclxuICAgICAgfSxcclxuICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcclxuICAgICk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZSh7fSwgJycsIHBhdGgpO1xyXG4gICAgd2luZG93Lmhpc3RvcnkuZ28oKVxyXG4gIH1cclxufTtcclxuY29uc3QgZ2V0UHJvamVjdCA9ICgpID0+IHtcclxuICBjb25zdCBwcm9qZWN0ID0gZ2V0TG9jYWxTdG9yZSh7IG5hbWU6ICduc2MtaG9tZS1wcm9qZWN0JyB9KSB8fCB7fVxyXG4gIHJldHVybiBwcm9qZWN0XHJcbn1cclxuaW50ZXJmYWNlIElQcm9wcyB7XHJcbiAgdGFibGVDb2RlOiBzdHJpbmc7XHJcbiAgY2xhc3NOYW1lPzogYW55O1xyXG4gIG1lbnVDb2RlPzogc3RyaW5nO1xyXG4gIGZ1bmNzPzogYW55XHJcbiAgcHVibGlzaGVkPzogYm9vbGVhblxyXG4gIGluc3RhbmNlUmVmPzogYW55XHJcbiAgdGFiUGFyYW1zPzogYW55XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2V0dGluZ1RhYmxlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PElQcm9wcywgYW55PiB7XHJcbiAgc3RhdGUgPSB7XHJcbiAgICBwYWdlUHJvcHM6IHt9IGFzIGFueSxcclxuICAgIHRyZWVQcm9wczogeyBzdG9yZTogeyB1cmw6IFwiXCIsIGF1dG9Mb2FkOiBmYWxzZSB9LCB9IGFzIGFueSxcclxuICAgIHRhYmxlUHJvcHM6IHt9IGFzIGFueSxcclxuICAgIHNlbGZUb29sQnV0dG9uOiBbXSBhcyBhbnksXHJcbiAgICBzZWxmQ29sdW1uQnV0dG9uOiBbXSBhcyBhbnksXHJcbiAgICBwYWdlTG9hZGluZzogdHJ1ZSxcclxuICAgIGRlZmF1bHRDb2x1bW5zOiBbXSBhcyBhbnksXHJcbiAgICBvdGhlclByb3BzOiB7fSBhcyBhbnlcclxuICB9XHJcbiAgcGFnZVJlZiA9IFJlYWN0LmNyZWF0ZVJlZjxhbnk+KCk7XHJcblxyXG5cclxuXHJcbiAgY29tcG9uZW50RGlkTW91bnQoKTogdm9pZCB7XHJcbiAgICB0aGlzLmdldERhdGEoKVxyXG4gIH1cclxuXHJcbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUmVhZG9ubHk8SVByb3BzPiwgcHJldlN0YXRlOiBSZWFkb25seTxhbnk+LCBzbmFwc2hvdD86IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHByZXZQcm9wcy50YWJsZUNvZGUgIT0gdGhpcy5wcm9wcy50YWJsZUNvZGUpIHtcclxuICAgICAgdGhpcy5nZXREYXRhKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXREYXRhID0gKHJlczogYW55KSA9PiB7XHJcbiAgICBjb25zdCB7IG90aGVyUHJvcHMsIHBhZ2VQcm9wcyB9ID0gdGhpcy5zdGF0ZVxyXG4gICAgaWYgKHBhZ2VQcm9wcy5zaG93U2VhcmNoICE9PSBmYWxzZSAmJiBvdGhlclByb3BzLmRlZmF1bHRTZWFyY2ggJiYgb3RoZXJQcm9wcy50YWJsZURhdGFSZXNvdXJjZSA9PSAndXJsJykge1xyXG4gICAgICBsZXQgZnVuYyA9IG5ldyBGdW5jdGlvbignVXRpbHMsZXZlbnRPcHRpb24nLCBvdGhlclByb3BzLmRlZmF1bHRTZWFyY2gpXHJcbiAgICAgIGNvbnN0IHBhcmFtcyA9IGZ1bmMoZGVmYXVsVXRpbCwgeyBwYWdlUmVmOiB0aGlzLnBhZ2VSZWYgfSlcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYWdlUmVmLmN1cnJlbnQ/LnRhYmxlTG9hZCh7IC4uLnBhcmFtcyB9KVxyXG4gICAgICAgIHRoaXMucGFnZVJlZi5jdXJyZW50Py5zZXRTZWFyY2hQYXJhbXMoeyAuLi5wYXJhbXMgfSlcclxuICAgICAgfSwgMzAwKS8v55u05o6l6K6+572u77yMcGFnZVJlZuayoee7keWumu+8jOaaguaXtumAmui/h+W7tui/n+WHveaVsOi/m+ihjOino+WGs1xyXG4gICAgfVxyXG4gIH1cclxuICAvLyDojrflj5bmlbDmja5cclxuICBnZXREYXRhKCkge1xyXG4gICAgLy8g5LuOcHJvcHPkuK3ojrflj5Z0YWJsZUNvZGXjgIFwdWJsaXNoZWTjgIFtZW51Q29kZVxyXG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIHB1Ymxpc2hlZCA9IHRydWUsIG1lbnVDb2RlLCB0YWJQYXJhbXMgfSA9IHRoaXMucHJvcHNcclxuICAgIC8vIOWmguaenHRhYmxlQ29kZeWtmOWcqFxyXG4gICAgaWYgKHRhYmxlQ29kZSkge1xyXG4gICAgICAvLyDlrprkuYnlj4LmlbBcclxuICAgICAgbGV0IHBhcmFtcyA9IHsgY29kZTogdGFibGVDb2RlIH0gYXMgYW55XHJcbiAgICAgIC8vIOWmguaenHB1Ymxpc2hlZOS4unRydWVcclxuICAgICAgaWYgKHB1Ymxpc2hlZCkge1xyXG4gICAgICAgIC8vIOiuvue9ruWPguaVsGlzUHVibGlzaGVk5Li6MVxyXG4gICAgICAgIHBhcmFtcy5pc1B1Ymxpc2hlZCA9IDFcclxuICAgICAgfVxyXG4gICAgICAvLyDosIPnlKhnZXRQYWdlRGF0YeaWueazleiOt+WPluaVsOaNrlxyXG4gICAgICBnZXRQYWdlRGF0YSh7IC4uLnBhcmFtcyB9KS50aGVuKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMuY29kZSA9PSAyMDAgJiYgcmVzLmRhdGEpIHtcclxuICAgICAgICAgIGxldCB0YWJsZV9wcm9wcyA9IEpTT04ucGFyc2UocmVzLmRhdGEudGFibGVQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4gICAgICAgICAgbGV0IHRyZWVfcHJvcHMgPSBKU09OLnBhcnNlKHJlcy5kYXRhLnRyZWVQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4gICAgICAgICAgbGV0IHBhZ2VfcHJvcHMgPSBKU09OLnBhcnNlKHJlcy5kYXRhLnBhZ2VQcm9wcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4gICAgICAgICAgbGV0IG90aGVyX3Byb3BzID0gSlNPTi5wYXJzZShyZXMuZGF0YS5vdGhlclBhcmFtcyB8fCBcInt9XCIpIHx8IHt9O1xyXG4gICAgICAgICAgaWYgKHBhZ2VfcHJvcHMucGVybWlzc2lvbj8uaGFzID09IHRydWUpIHtcclxuICAgICAgICAgICAgcGFnZV9wcm9wcy5wZXJtaXNzaW9uLm1lbnVDb2RlID0gbWVudUNvZGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocHVibGlzaGVkID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHBhZ2VfcHJvcHMucGVybWlzc2lvbiA9IGZhbHNlXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAocGFnZV9wcm9wcy5zaG93U2VhcmNoICE9PSBmYWxzZSAmJiBvdGhlcl9wcm9wcz8uZGVmYXVsdFNlYXJjaCAmJiBvdGhlcl9wcm9wcz8udGFibGVEYXRhUmVzb3VyY2UgPT0gJ3VybCcpIHtcclxuICAgICAgICAgICAgdGFibGVfcHJvcHMuc3RvcmUuYXV0b0xvYWQgPSBmYWxzZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRhYlBhcmFtcykge1xyXG4gICAgICAgICAgICBjb25zdCBVdGlscyA9IGRlZmF1bFV0aWwgfHwge307XHJcbiAgICAgICAgICAgIGxldCBwYXJhbUZ1bmMgPSBuZXcgRnVuY3Rpb24oXCJVdGlsc1wiLCB0YWJQYXJhbXMpO1xyXG4gICAgICAgICAgICBsZXQgY29udmVyVGFiUGFyYW1zID0gcGFyYW1GdW5jKFV0aWxzKTtcclxuICAgICAgICAgICAgaWYgKHBhZ2VfcHJvcHMucmVxdWVzdFBhcmFtcykge1xyXG4gICAgICAgICAgICAgIGxldCB7IHJlcXVlc3RQYXJhbXMgPSB7fSB9ID0gcGFnZV9wcm9wc1xyXG4gICAgICAgICAgICAgIGxldCBuZXdSZXF1ZXN0UGFyYW1zID0geyBxdWVyeVBhcmFtczogbnVsbCwgYWRkUGFyYW1zOiBudWxsLCBlZGl0b3JQYXJhbXM6IG51bGwgfVxyXG4gICAgICAgICAgICAgIGZvciAobGV0IGtleSBpbiBuZXdSZXF1ZXN0UGFyYW1zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVxdWVzdFBhcmFtc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgIGxldCBmdW5jID0gbmV3IEZ1bmN0aW9uKFwiVXRpbHNcIiwgcmVxdWVzdFBhcmFtc1trZXldKTtcclxuICAgICAgICAgICAgICAgICAgbGV0IGNvbnZlclBhcmFtcyA9IGZ1bmMoVXRpbHMpO1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCB7IGRhdGEsIC4uLm90aGVyIH0gPSBjb252ZXJQYXJhbXNcclxuICAgICAgICAgICAgICAgICAgbGV0IG5ld1BhcmFtcyA9IHsgZGF0YTogeyAuLi5jb252ZXJUYWJQYXJhbXMsIC4uLmRhdGEgfSwgLi4ub3RoZXIsIH1cclxuICAgICAgICAgICAgICAgICAgbmV3UmVxdWVzdFBhcmFtc1trZXldID0gbmV3UGFyYW1zXHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICBuZXdSZXF1ZXN0UGFyYW1zW2tleV0gPSB7IGRhdGE6IHsgLi4uY29udmVyVGFiUGFyYW1zIH0gfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBwYWdlX3Byb3BzLnJlcXVlc3RQYXJhbXMgPSB7IC4uLm5ld1JlcXVlc3RQYXJhbXMgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHBhZ2VfcHJvcHMucmVxdWVzdFBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGRhdGE6IHsgLi4uY29udmVyVGFiUGFyYW1zIH0gfSxcclxuICAgICAgICAgICAgICAgIGFkZFBhcmFtczogeyBkYXRhOiB7IC4uLmNvbnZlclRhYlBhcmFtcyB9IH0sXHJcbiAgICAgICAgICAgICAgICBlZGl0b3JQYXJhbXM6IHsgZGF0YTogeyAuLi5jb252ZXJUYWJQYXJhbXMgfSB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgICAgcGFnZVByb3BzOiB7XHJcbiAgICAgICAgICAgICAgLi4ucGFnZV9wcm9wcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdHJlZVByb3BzOiB7XHJcbiAgICAgICAgICAgICAgLi4udHJlZV9wcm9wcyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGFibGVQcm9wczoge1xyXG4gICAgICAgICAgICAgIC4uLnRhYmxlX3Byb3BzLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvdGhlclByb3BzOiB7IC4uLm90aGVyX3Byb3BzIH0sXHJcbiAgICAgICAgICAgIHNlbGZDb2x1bW5CdXR0b246IEpTT04ucGFyc2UocmVzLmRhdGEuY29sdW1uQnV0dG9ucykgfHwgW10sXHJcbiAgICAgICAgICAgIHNlbGZUb29sQnV0dG9uOiBKU09OLnBhcnNlKHJlcy5kYXRhLnRvb2xCdXR0b25zKSB8fCBbXSxcclxuICAgICAgICAgICAgZGVmYXVsdENvbHVtbnM6IHBhZ2VfcHJvcHMuY29sdW1ucyxcclxuICAgICAgICAgIH0sICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgcGFnZUxvYWRpbmc6IGZhbHNlXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICB9IGVsc2UgaWYgKHJlcy5jb2RlID09IDIwMCAmJiByZXMuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICBtZXNzYWdlLmVycm9yKFwi5pyq5om+5Yiw6YWN572u5L+h5oGv77yBXCIpO1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHBhZ2VMb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgIHBhZ2VMb2FkaW5nOiBmYWxzZVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgcGFnZUxvYWRpbmc6IGZhbHNlXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgfVxyXG4gIHJlbmRlcigpIHtcclxuICAgIGNvbnN0IHsgY2xhc3NOYW1lLCBmdW5jcyA9IHt9IH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgeyBwYWdlUHJvcHMsIHRyZWVQcm9wcywgdGFibGVQcm9wcywgc2VsZlRvb2xCdXR0b24sIHNlbGZDb2x1bW5CdXR0b24sIHBhZ2VMb2FkaW5nLCBkZWZhdWx0Q29sdW1ucyB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IGRlYXVsdEZ1bmNzID0ge1xyXG4gICAgICBzZXRGaWVsZERpc2FibGVkOiAoa2V5LCBkaXNhYmxlZCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG5ld0RhdGEgPSBzZXRGaWVsZERpc2FibGVkKFxyXG4gICAgICAgICAgcGFnZVByb3BzLmNvbHVtbnMsXHJcbiAgICAgICAgICBrZXksXHJcbiAgICAgICAgICBkaXNhYmxlZFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBwYWdlUHJvcHM6IHsgLi4ucGFnZVByb3BzLCBjb2x1bW5zOiBuZXdEYXRhIH0sXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIHNldEZpZWxkVmlzaWJsZTogKGtleSwgZGlzYWJsZWQpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdEYXRhID0gc2V0RmllbGRWaXNpYmxlKHBhZ2VQcm9wcy5jb2x1bW5zLCBrZXksIGRpc2FibGVkKTtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgICAgIHBhZ2VQcm9wczogeyAuLi5wYWdlUHJvcHMsIGNvbHVtbnM6IG5ld0RhdGEgfSxcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgfSxcclxuICAgICAgc2V0RmllbGRQcm9wc0RhdGE6IChrZXksIGRhdGEpID0+IHtcclxuICAgICAgICBjb25zdCBuZXdEYXRhID0gc2V0RmllbGRQcm9wc0RhdGEocGFnZVByb3BzLmNvbHVtbnMsIGtleSwgZGF0YSk7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICBwYWdlUHJvcHM6IHsgLi4ucGFnZVByb3BzLCBjb2x1bW5zOiBuZXdEYXRhIH0sXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgaGlzdG9yeTogKHBhcmFtcywgdHlwZSkgPT4ge1xyXG4gICAgICAgIGp1bXBQYWdlKHBhcmFtcywgdHlwZSlcclxuICAgICAgfSxcclxuICAgICAgZ2V0Q3VycmVudFByb2plY3Q6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gZ2V0UHJvamVjdCgpXHJcbiAgICAgIH0sXHJcblxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NscyhcIm5zYy1mcmFtZXdvcmstdGFibGVwYWdlXCIsIGNsYXNzTmFtZSl9PlxyXG4gICAgICAgIHtwYWdlTG9hZGluZyA/IChcclxuICAgICAgICAgIDxkaXYgc3R5bGU9e3sgd2lkdGg6IFwiMTAwJVwiLCBoZWlnaHQ6IFwiMTAwJVwiIH19PlxyXG4gICAgICAgICAgICA8U3BpbiBzcGlubmluZz17cGFnZUxvYWRpbmd9PjwvU3Bpbj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICkgOiAoXHJcbiAgICAgICAgICA8QmFzZVBhZ2VcclxuICAgICAgICAgICAgey4uLnBhZ2VQcm9wc31cclxuICAgICAgICAgICAgdHJlZVByb3BzPXt7IC4uLnRyZWVQcm9wcyB9fVxyXG4gICAgICAgICAgICB0YWJsZVByb3BzPXt7IC4uLnRhYmxlUHJvcHMgfX1cclxuICAgICAgICAgICAgZm9ybVByb3BzPXt7fX1cclxuICAgICAgICAgICAgVXRpbHM9e3sgLi4uZGVmYXVsVXRpbCB9fVxyXG4gICAgICAgICAgICByZWY9e3RoaXMucGFnZVJlZn1cclxuICAgICAgICAgICAgcGFnZVJlZj17dGhpcy5wYWdlUmVmfVxyXG4gICAgICAgICAgICBvbkhpZGVGb3JtPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAgICAgICBwYWdlUHJvcHM6IHsgLi4ucGFnZVByb3BzLCBjb2x1bW5zOiBkZWZhdWx0Q29sdW1ucyB9LFxyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdlUmVmLmN1cnJlbnQ/LmhpZGVGb3JtKCk7XHJcbiAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgIGZ1bmNzPXt7IC4uLmRlYXVsdEZ1bmNzLCAuLi5mdW5jcyB9fVxyXG4gICAgICAgICAgICBpbml0RGF0YT17dGhpcy5pbml0RGF0YX1cclxuICAgICAgICAgID5cclxuICAgICAgICAgICAge3JlbmRlclNlbGZUb29sQnV0dG9uKHsgc2VsZlRvb2xCdXR0b24sIHBhZ2VSZWY6IHRoaXMucGFnZVJlZiwgZnVuY3M6IHsgLi4uZGVhdWx0RnVuY3MsIC4uLmZ1bmNzIH0gfSl9XHJcbiAgICAgICAgICAgIHtyZW5kZXJTZWxmQ29sdW1uQnV0dG9uKHsgc2VsZkNvbHVtbkJ1dHRvbiwgcGFnZVJlZjogdGhpcy5wYWdlUmVmLCBmdW5jczogeyAuLi5kZWF1bHRGdW5jcywgLi4uZnVuY3MgfSB9KX1cclxuICAgICAgICAgIDwvQmFzZVBhZ2U+XHJcbiAgICAgICAgKVxyXG4gICAgICAgIH1cclxuICAgICAgPC9kaXY+XHJcbiAgICApO1xyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFDQSxPQUFPQSxRQUFRLE1BQU0sYUFBYTtBQUNsQyxPQUFPQyxJQUFJLE1BQU0saUJBQWlCO0FBQ2xDLE9B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
|