@adlfe/campaign-management-library 2.13.2 → 2.14.1
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/bundles/adlfe-campaign-management-library.umd.js +58 -60
- package/bundles/adlfe-campaign-management-library.umd.js.map +1 -1
- package/bundles/adlfe-campaign-management-library.umd.min.js +1 -1
- package/bundles/adlfe-campaign-management-library.umd.min.js.map +1 -1
- package/esm2015/lib/campaign-management/models/general-information-wa-req.model.js +15 -27
- package/esm2015/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +41 -32
- package/esm2015/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +1 -2
- package/esm2015/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +5 -3
- package/esm5/lib/campaign-management/models/general-information-wa-req.model.js +15 -27
- package/esm5/lib/campaign-management/modules/new-campaign/components/general-information-wa/general-information-wa.component.js +41 -32
- package/esm5/lib/campaign-management/modules/new-campaign/general-information/general-information.component.js +1 -2
- package/esm5/lib/campaign-management/modules/new-campaign/new-number-bases/new-number-bases.component.js +5 -3
- package/fesm2015/adlfe-campaign-management-library.js +58 -60
- package/fesm2015/adlfe-campaign-management-library.js.map +1 -1
- package/fesm5/adlfe-campaign-management-library.js +58 -60
- package/fesm5/adlfe-campaign-management-library.js.map +1 -1
- package/lib/campaign-management/models/general-information-wa-req.model.d.ts +0 -5
- package/package.json +1 -1
|
@@ -123,6 +123,7 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
123
123
|
((_c = formValues) === null || _c === void 0 ? void 0 : _c.medium) !== 'WA') {
|
|
124
124
|
return;
|
|
125
125
|
}
|
|
126
|
+
console.log(formValues, 'formValues');
|
|
126
127
|
(_d = this.getControl('channel')) === null || _d === void 0 ? void 0 : _d.setValue((_e = formValues) === null || _e === void 0 ? void 0 : _e.channel);
|
|
127
128
|
(_f = this.getControl('media')) === null || _f === void 0 ? void 0 : _f.setValue((_g = formValues) === null || _g === void 0 ? void 0 : _g.media);
|
|
128
129
|
(_h = this.getControl('from')) === null || _h === void 0 ? void 0 : _h.setValue((_j = formValues) === null || _j === void 0 ? void 0 : _j.from);
|
|
@@ -295,6 +296,7 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
295
296
|
this.initParam('pageNo', this.pageNoTemplateOption, 'number'),
|
|
296
297
|
this.initParam('rowPerPage', 20, 'number'),
|
|
297
298
|
this.initParam('platform', 'WA', 'string'),
|
|
299
|
+
this.initParam('templateType', 'all', 'string'),
|
|
298
300
|
this.initParam('filter', filter, 'string'),
|
|
299
301
|
this.initParam('status', 'APPROVED', 'string'),
|
|
300
302
|
this.initParam('clientId', (_c = (_b = (_a = this.getControl('from')) === null || _a === void 0 ? void 0 : _a.value) === null || _b === void 0 ? void 0 : _b.clientId, (_c !== null && _c !== void 0 ? _c : '')), 'string'),
|
|
@@ -459,73 +461,80 @@ let GeneralInformationWAComponent = class GeneralInformationWAComponent {
|
|
|
459
461
|
this.subscribers.push(subs);
|
|
460
462
|
}
|
|
461
463
|
get buttonParamsControls() {
|
|
462
|
-
|
|
464
|
+
const control = this.form.get('buttonParams');
|
|
465
|
+
return control ? control.controls : [];
|
|
463
466
|
}
|
|
464
467
|
get isUsingExcelBulk() {
|
|
465
468
|
var _a;
|
|
466
469
|
return ((_a = this.getControl('isUpload')) === null || _a === void 0 ? void 0 : _a.value) || false;
|
|
467
470
|
}
|
|
468
471
|
updateTemplate(template) {
|
|
469
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34;
|
|
472
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35;
|
|
470
473
|
this.isShowParameter = false;
|
|
471
474
|
if (!template)
|
|
472
475
|
return;
|
|
476
|
+
const formStorage = (_b = (_a = this.getCampaignStorage) === null || _a === void 0 ? void 0 : _a.generalInformation) === null || _b === void 0 ? void 0 : _b.form;
|
|
477
|
+
const savedButtonParams = ((_c = formStorage) === null || _c === void 0 ? void 0 : _c.buttonParams) || [];
|
|
473
478
|
const buttonParamsArray = this.form.get('buttonParams');
|
|
474
479
|
buttonParamsArray.clear();
|
|
475
480
|
if (template && template.buttons && template.buttons.length > 0) {
|
|
476
481
|
const quickReplyButtons = template.buttons.filter((btn) => btn.type === 'QUICK_REPLY');
|
|
477
|
-
quickReplyButtons.forEach((btn) => {
|
|
482
|
+
quickReplyButtons.forEach((btn, index) => {
|
|
483
|
+
var _a;
|
|
484
|
+
const existingPayload = ((_a = savedButtonParams[index]) === null || _a === void 0 ? void 0 : _a.payload) || '';
|
|
478
485
|
buttonParamsArray.push(new FormGroup({
|
|
479
486
|
label: new FormControl(btn.text),
|
|
480
|
-
payload: new FormControl(
|
|
487
|
+
payload: new FormControl({
|
|
488
|
+
value: existingPayload,
|
|
489
|
+
disabled: this.isReadOnlyMode,
|
|
490
|
+
}, [Validators.maxLength(256)]),
|
|
481
491
|
}));
|
|
482
492
|
});
|
|
483
493
|
}
|
|
484
494
|
this.isHaveTemplateParam =
|
|
485
|
-
(
|
|
486
|
-
(
|
|
487
|
-
(
|
|
488
|
-
if (['image', 'video', 'document'].includes((
|
|
489
|
-
(
|
|
490
|
-
(
|
|
491
|
-
this.fileTypeChange((
|
|
492
|
-
}
|
|
493
|
-
(
|
|
494
|
-
? (
|
|
495
|
-
(
|
|
496
|
-
? (
|
|
497
|
-
(
|
|
498
|
-
? (
|
|
495
|
+
(_f = (_e = (_d = template.header) === null || _d === void 0 ? void 0 : _d.examples) === null || _e === void 0 ? void 0 : _e.length, (_f !== null && _f !== void 0 ? _f : 0)) > 0 ||
|
|
496
|
+
(_j = (_h = (_g = template.body) === null || _g === void 0 ? void 0 : _g.examples) === null || _h === void 0 ? void 0 : _h.length, (_j !== null && _j !== void 0 ? _j : 0)) > 0 ||
|
|
497
|
+
(_l = (_k = template.buttons) === null || _k === void 0 ? void 0 : _k.length, (_l !== null && _l !== void 0 ? _l : 0)) > 0;
|
|
498
|
+
if (['image', 'video', 'document'].includes((_p = (_o = (_m = template) === null || _m === void 0 ? void 0 : _m.header) === null || _o === void 0 ? void 0 : _o.type) === null || _p === void 0 ? void 0 : _p.toLowerCase())) {
|
|
499
|
+
(_q = this.getControl('fileName')) === null || _q === void 0 ? void 0 : _q.setValue((_w = (_t = (_s = (_r = this.getCampaignStorage) === null || _r === void 0 ? void 0 : _r.generalInformation) === null || _s === void 0 ? void 0 : _s.form.fileName, (_t !== null && _t !== void 0 ? _t : (_v = (_u = this.getCampaignStorage) === null || _u === void 0 ? void 0 : _u.generalInformation) === null || _v === void 0 ? void 0 : _v.form.targetURL)), (_w !== null && _w !== void 0 ? _w : template.header.url)));
|
|
500
|
+
(_x = this.getControl('targetURL')) === null || _x === void 0 ? void 0 : _x.setValue((_0 = (_z = (_y = this.getCampaignStorage) === null || _y === void 0 ? void 0 : _y.generalInformation) === null || _z === void 0 ? void 0 : _z.form.targetURL, (_0 !== null && _0 !== void 0 ? _0 : template.header.url)));
|
|
501
|
+
this.fileTypeChange((_3 = (_2 = (_1 = template) === null || _1 === void 0 ? void 0 : _1.header) === null || _2 === void 0 ? void 0 : _2.type) === null || _3 === void 0 ? void 0 : _3.toLowerCase());
|
|
502
|
+
}
|
|
503
|
+
(_5 = (_4 = template.header.examples) === null || _4 === void 0 ? void 0 : _4.length, (_5 !== null && _5 !== void 0 ? _5 : 0)) > 0
|
|
504
|
+
? (_6 = this.getControl('paramHeader')) === null || _6 === void 0 ? void 0 : _6.setValidators(Validators.required) : (_7 = this.getControl('paramHeader')) === null || _7 === void 0 ? void 0 : _7.clearValidators();
|
|
505
|
+
(_9 = (_8 = template.body.examples) === null || _8 === void 0 ? void 0 : _8.length, (_9 !== null && _9 !== void 0 ? _9 : 0)) > 0
|
|
506
|
+
? (_10 = this.getControl('paramBody')) === null || _10 === void 0 ? void 0 : _10.setValidators(Validators.required) : (_11 = this.getControl('paramBody')) === null || _11 === void 0 ? void 0 : _11.clearValidators();
|
|
507
|
+
(_13 = (_12 = template.buttons) === null || _12 === void 0 ? void 0 : _12.length, (_13 !== null && _13 !== void 0 ? _13 : 0)) > 0
|
|
508
|
+
? (_14 = this.getControl('paramButton')) === null || _14 === void 0 ? void 0 : _14.setValidators(Validators.required) : (_15 = this.getControl('paramButton')) === null || _15 === void 0 ? void 0 : _15.clearValidators();
|
|
499
509
|
this.form.get('paramHeader').controls = [];
|
|
500
510
|
this.form.get('paramHeader').reset();
|
|
501
|
-
(
|
|
511
|
+
(_16 = this.getControl('paramHeader')) === null || _16 === void 0 ? void 0 : _16.updateValueAndValidity();
|
|
502
512
|
this.form.get('paramBody').controls = [];
|
|
503
513
|
this.form.get('paramBody').reset();
|
|
504
|
-
(
|
|
514
|
+
(_17 = this.getControl('paramBody')) === null || _17 === void 0 ? void 0 : _17.updateValueAndValidity();
|
|
505
515
|
this.form.get('paramButton').controls = [];
|
|
506
516
|
this.form.get('paramButton').reset();
|
|
507
|
-
(
|
|
508
|
-
(
|
|
509
|
-
(
|
|
510
|
-
(
|
|
511
|
-
const formStorage = (_20 = (_19 = this.getCampaignStorage) === null || _19 === void 0 ? void 0 : _19.generalInformation) === null || _20 === void 0 ? void 0 : _20.form;
|
|
517
|
+
(_18 = this.getControl('paramButton')) === null || _18 === void 0 ? void 0 : _18.updateValueAndValidity();
|
|
518
|
+
(_19 = this.getControl('otpValue')) === null || _19 === void 0 ? void 0 : _19.setValue('');
|
|
519
|
+
(_20 = this.getControl('otpValue')) === null || _20 === void 0 ? void 0 : _20.clearValidators();
|
|
520
|
+
(_21 = this.getControl('otpValue')) === null || _21 === void 0 ? void 0 : _21.updateValueAndValidity();
|
|
512
521
|
if (template.category === 'AUTHENTICATION') {
|
|
513
|
-
(
|
|
514
|
-
(
|
|
515
|
-
(
|
|
522
|
+
(_22 = this.getControl('otpValue')) === null || _22 === void 0 ? void 0 : _22.setValue((_30 = (_24 = (_23 = formStorage) === null || _23 === void 0 ? void 0 : _23.otpValue, (_24 !== null && _24 !== void 0 ? _24 : (_29 = [...(_28 = (_27 = (_26 = (_25 = formStorage) === null || _25 === void 0 ? void 0 : _25.template) === null || _26 === void 0 ? void 0 : _26.body) === null || _27 === void 0 ? void 0 : _27.examples, (_28 !== null && _28 !== void 0 ? _28 : []))]) === null || _29 === void 0 ? void 0 : _29.pop())), (_30 !== null && _30 !== void 0 ? _30 : '')));
|
|
523
|
+
(_31 = this.getControl('otpValue')) === null || _31 === void 0 ? void 0 : _31.setValidators(Validators.required);
|
|
524
|
+
(_32 = this.getControl('otpValue')) === null || _32 === void 0 ? void 0 : _32.updateValueAndValidity();
|
|
516
525
|
}
|
|
517
|
-
(
|
|
526
|
+
(_33 = template.header.examples) === null || _33 === void 0 ? void 0 : _33.forEach((each, index) => {
|
|
518
527
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
519
528
|
this.addParamHeader((_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramHeader) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramHeader) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : '')));
|
|
520
529
|
});
|
|
521
|
-
(
|
|
530
|
+
(_34 = template.body.examples) === null || _34 === void 0 ? void 0 : _34.forEach((each, index) => {
|
|
522
531
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
523
532
|
let paramValue = (_g = (_d = (_c = (_b = (_a = formStorage) === null || _a === void 0 ? void 0 : _a.paramBody) === null || _b === void 0 ? void 0 : _b[index]) === null || _c === void 0 ? void 0 : _c.name, (_d !== null && _d !== void 0 ? _d : (_f = (_e = formStorage) === null || _e === void 0 ? void 0 : _e.paramBody) === null || _f === void 0 ? void 0 : _f[index])), (_g !== null && _g !== void 0 ? _g : ''));
|
|
524
533
|
if (['$UnsubscribeAccount'].includes(each))
|
|
525
534
|
paramValue = each;
|
|
526
535
|
this.addParamBody(paramValue);
|
|
527
536
|
});
|
|
528
|
-
(
|
|
537
|
+
(_35 = template.buttons) === null || _35 === void 0 ? void 0 : _35.forEach((each, index) => {
|
|
529
538
|
var _a, _b, _c, _d;
|
|
530
539
|
this.addParamButton();
|
|
531
540
|
const button = this.getButton;
|
|
@@ -756,4 +765,4 @@ GeneralInformationWAComponent = __decorate([
|
|
|
756
765
|
})
|
|
757
766
|
], GeneralInformationWAComponent);
|
|
758
767
|
export { GeneralInformationWAComponent };
|
|
759
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vY29tcG9uZW50cy9nZW5lcmFsLWluZm9ybWF0aW9uLXdhL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0MsT0FBTyxFQUNILDBDQUEwQyxFQUMxQyxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWV4RSxJQUFh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QUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7WUFDbEMsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7U0FDcEM7UUFFRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNwQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUks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QTJCO0FBM0N6Qyw2QkFBNkI7SUFMekMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxrczJDQUFzRDs7S0FFekQsQ0FBQztHQUNXLDZCQUE2QixDQXMzQnpDO1NBdDNCWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXBzQVBJTG9hZGVyIH0gZnJvbSAnQGFnbS9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIEZvcm1BcnJheSxcclxuICAgIEZvcm1CdWlsZGVyLFxyXG4gICAgRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtR3JvdXAsXHJcbiAgICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIEdlbmVyYWxJbmZvcm1hdGlvbldBTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIE1lZGlhVHlwZU9wdGlvbkNvbnN0LFxyXG4gICAgTXNnVHlwZVdBT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcbmltcG9ydCB7IFByb2R1Y3RDYXRlZ29yeUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW1zJztcclxuaW1wb3J0IHsgQmFzZU9wdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1hZGFwdGVyLXNlcnZpY2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1kdG8vcmVzcG9uc2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlRW51bU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV0FNb2RlbCwgV2hhdHNBcHBBY2NvdW50RHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW51bURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL2VudW1zJztcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyBhcyBDdXN0b21WYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmFsaWRhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBsb25naXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBpc0RyYWdnYWJsZTogYm9vbGVhbjtcclxuICAgIGlzRG91YmxlQ2xpY2tab29tOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdlbmVyYWwtaW5mb3JtYXRpb24td2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEluZm9ybWF0aW9uV0FDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB1cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybSE6IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBtc2dUeXBlV0FPcHRpb246IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgbWVkaWFUeXBlT3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIGNhdGVnb3J5T3B0aW9uITogQmFzZU9wdGlvbk1vZGVsW107XHJcbiAgICBwdWJsaWMgYWNjb3VudE9wdGlvbjogV2hhdHNBcHBBY2NvdW50RHRvW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0hhdmVOZXh0QWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nQWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRlbXBsYXRlT3B0aW9uOiBUZW1wbGF0ZVdBTW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzSGF2ZU5leHRUZW1wbGF0ZU9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nVGVtcGxhdGVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0hhdmVUZW1wbGF0ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93UGFyYW1ldGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnk7XHJcbiAgICBwdWJsaWMgZXh0RmlsZUFjY2VwdGVkOiBzdHJpbmcgPSAnaW1hZ2UvKic7XHJcbiAgICBwdWJsaWMgbWFwcyE6IElNYXBzO1xyXG5cclxuICAgIHByaXZhdGUgcGFnZU5vQWNjb3VudE9wdGlvbjogbnVtYmVyID0gMTtcclxuICAgIHByaXZhdGUgcGFnZU5vVGVtcGxhdGVPcHRpb246IG51bWJlciA9IDE7XHJcbiAgICBwcml2YXRlIHN1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogJ0NyZWF0ZSBOZXcnLCB2YWx1ZTogZmFsc2UgfSxcclxuICAgICAgICB7IGxhYmVsOiAnVXNlIGV4aXN0aW5nIHRlbXBsYXRlJywgdmFsdWU6IHRydWUgfSxcclxuICAgIF07XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZE9ubHlNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzVG91Y2hlZEZvcm0oc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybS5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWFwU2VhcmNoJykgbWFwU2VhcmNoUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1V0aWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgbWFwc0FQSUxvYWRlcjogTWFwc0FQSUxvYWRlcixcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tc2dUeXBlV0FPcHRpb24gPSBNc2dUeXBlV0FPcHRpb25Db25zdDtcclxuICAgICAgICB0aGlzLm1lZGlhVHlwZU9wdGlvbiA9IE1lZGlhVHlwZU9wdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlPcHRpb24gPSBnZW5lcmF0ZUVudW1PcHRpb24oUHJvZHVjdENhdGVnb3J5RW51bSk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25XQU1lc3NhZ2VWYWxpZGF0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy5tYXBzID0ge1xyXG4gICAgICAgICAgICB6b29tOiAxNSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbnVsbCxcclxuICAgICAgICAgICAgaXNEcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzRG91YmxlQ2xpY2tab29tOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB0aGlzLmluaXREaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFZhbGlkYXRpb24oKTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0gPT09ICdXQSdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZnJvbT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLyogdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTsgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Q2FtcGFpZ25TdG9yYWdlKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25EYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJyk7XHJcbiAgICAgICAgcmV0dXJuIGNhbXBhaWduRGF0YSA/IEpTT04ucGFyc2UoY2FtcGFpZ25EYXRhKSA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIGNoYW5uZWw6IG5ldyBGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgbWVkaWE6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHRhcmdldFVSTDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlVHlwZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBwYXJhbUhlYWRlcjogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQm9keTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uOiBuZXcgRm9ybUFycmF5KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgb3RwVmFsdWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGlzVXBsb2FkOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBmaWxlSWQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHByb2R1Y3Q6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgY2F0YWxvZ3VlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGJvZHk6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNVc2VFeGlzdGluZ1RlbXBsYXRlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBpc05lZWRTYXZlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB0dGw6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNEb3dubG9hZFZhcmlhYmxlWExTOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgICAgICB1c2VYbHN4OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBidXR0b25QYXJhbXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtLmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHN0b3JhZ2VEYXRhPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhc3RvcmFnZURhdGEgfHxcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RvcmFnZURhdGEpLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5tZWRpdW0gIT09ICdXQSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LmNoYW5uZWwpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbWVkaWEnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8ubWVkaWEpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5mcm9tKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udGV4dCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udGFyZ2V0VVJMKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5maWxlTmFtZSA/PyB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy52YWx1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy50ZW1wbGF0ZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5pc1VwbG9hZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlSWQnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8uZmlsZUlkKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/Lm90cFZhbHVlKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXNlRXhpc3RpbmdUZW1wbGF0ZScpPy5zZXRWYWx1ZSghIWZvcm1WYWx1ZXM/LnRlbXBsYXRlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc05lZWRTYXZlJyk/LnNldFZhbHVlKCEhZm9ybVZhbHVlcz8uaXNOZWVkU2F2ZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0dGwnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udHRsKTtcclxuICAgICAgICBjb25zdCBzYXZlZFZhcmlhYmxlcyA9IGZvcm1WYWx1ZXM/LnZhcmlhYmxlcztcclxuICAgICAgICBpZiAoc2F2ZWRWYXJpYWJsZXMgJiYgQXJyYXkuaXNBcnJheShzYXZlZFZhcmlhYmxlcykgJiYgc2F2ZWRWYXJpYWJsZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5jbGVhcigpO1xyXG5cclxuICAgICAgICAgICAgc2F2ZWRWYXJpYWJsZXMuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGl0ZW0ucGFyYW1OYW1lIHx8ICcnLCBkaXNhYmxlZDogdGhpcy5pc1JlYWRPbmx5TW9kZSB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNIYXZlVGVtcGxhdGVQYXJhbSA9IHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWU7XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UobnVsbCwgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZT8ubmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VmFsaWRhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZm9ybSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLmZvcm0uY29udHJvbHMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybS5jb250cm9sc1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZm9ybS5jb250cm9sc1trZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdldElzVGV4dCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzTWVkaWEpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ21lZGlhJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzVGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNDYXRhbG9ndWUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0ZWdvcnknKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRhbG9ndWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwcm9kdWN0Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnYm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwMCkpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGVnb3J5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRhbG9ndWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3Byb2R1Y3QnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2JvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1V0aWxpdHkpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDI0KSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndHRsJyk/LnNldFZhbGlkYXRvcnMoW1xyXG4gICAgICAgICAgICAgICAgQ3VzdG9tVmFsaWRhdG9ycy5taW4oMzAsICdNaW5pbXVtIFRUTCAzMCcpLFxyXG4gICAgICAgICAgICAgICAgQ3VzdG9tVmFsaWRhdG9ycy5tYXgoNDMyMDAsICdNYXhpbXVtIFRUTCA0MzIwMCcpLFxyXG4gICAgICAgICAgICBdKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0dGwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybVJlc2V0KF9pc01lZGlhVHlwZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCFfaXNNZWRpYVR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8ucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZVR5cGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRlZ29yeScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncHJvZHVjdCcpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0YWxvZ3VlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdib2R5Jyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndmFyaWFibGVzJyk/LnJlc2V0KCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtSGVhZGVyID0gdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcmFtSGVhZGVyKSB7XHJcbiAgICAgICAgICAgIHBhcmFtSGVhZGVyLmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHBhcmFtSGVhZGVyLnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbUJvZHkgPSB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSB8IG51bGw7XHJcbiAgICAgICAgaWYgKHBhcmFtQm9keSkge1xyXG4gICAgICAgICAgICBwYXJhbUJvZHkuY2xlYXIoKTtcclxuICAgICAgICAgICAgcGFyYW1Cb2R5LnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBwYXJhbUJ1dHRvbiA9IHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkgfCBudWxsO1xyXG4gICAgICAgIGlmIChwYXJhbUJ1dHRvbikge1xyXG4gICAgICAgICAgICBwYXJhbUJ1dHRvbi5jbGVhcigpO1xyXG4gICAgICAgICAgICBwYXJhbUJ1dHRvbi5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pbml0VmFsaWRhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29udHJvbChjb250cm9sTmFtZTogc3RyaW5nKTogQWJzdHJhY3RDb250cm9sIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybSA/IHRoaXMuZm9ybS5nZXQoY29udHJvbE5hbWUpIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbShfbmFtZTogc3RyaW5nLCBfdmFsdWU6IGFueSwgX3R5cGU6IHN0cmluZyk6IFBhcmFtZXRlciB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbmFtZTogX25hbWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBfdmFsdWUsXHJcbiAgICAgICAgICAgIGluOiAncXVlcnknLFxyXG4gICAgICAgICAgICB0eXBlOiBfdHlwZSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0QWNjb3VudE9wdGlvblNlcnZpY2UoZmlsdGVyOiBzdHJpbmcgPSAnJywgaXNJbmZpbml0ZTogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmdBY2NvdW50T3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BhZ2VObycsIHRoaXMucGFnZU5vQWNjb3VudE9wdGlvbiwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncm93UGVyUGFnZScsIDIwLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwbGF0Zm9ybScsICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3N0YXR1cycsICdBUFBST1ZFRCcsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChwYXJhbWV0ZXJMaXN0LCAnL2FkbWluL2FjY291bnQnLCAnR0VUJylcclxuICAgICAgICAgICAgLnN1YnNjcmliZSgocmVzcDogQXBwUmVzcG9uc2U8V2hhdHNBcHBBY2NvdW50RHRvW10+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlc3AuZGF0YSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuYWNjb3VudE9wdGlvbiA9IGlzSW5maW5pdGUgPyBbLi4udGhpcy5hY2NvdW50T3B0aW9uLCAuLi5yZXNwLmRhdGFdIDogcmVzcC5kYXRhO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hhdmVOZXh0QWNjb3VudE9wdGlvbiA9IHJlc3AuaGF2ZU5leHQgPz8gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nQWNjb3VudE9wdGlvbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UoXHJcbiAgICAgICAgZXZlbnQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgZmlsdGVyOiBzdHJpbmcgPSAnJyxcclxuICAgICAgICBpc0luZmluaXRlOiBib29sZWFuID0gZmFsc2VcclxuICAgICk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nVGVtcGxhdGVPcHRpb24gPSB0cnVlO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGFnZU5vJywgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncm93UGVyUGFnZScsIDIwLCAnbnVtYmVyJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwbGF0Zm9ybScsICdXQScsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ2ZpbHRlcicsIGZpbHRlciwgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnc3RhdHVzJywgJ0FQUFJPVkVEJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnY2xpZW50SWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LmNsaWVudElkID8/ICcnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCd3YWJhSWQnLCB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udmFsdWU/LndhYmFJZCA/PyAnJywgJ3N0cmluZycpLFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZE9ubHlNb2RlKSBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ3N1bW1hcnknLCB0cnVlLCAnc3RyaW5nJykpO1xyXG5cclxuICAgICAgICBjb25zdCBtZXNzYWdlVHlwZSA9IHRoaXMuZm9ybS52YWx1ZT8uY2hhbm5lbDtcclxuXHJcbiAgICAgICAgaWYgKG1lc3NhZ2VUeXBlID09PSAndXRpbGl0eScpIHtcclxuICAgICAgICAgICAgcGFyYW1ldGVyTGlzdC5wdXNoKHRoaXMuaW5pdFBhcmFtKCdpc0RpcmVjdFNlbmQnLCB0cnVlLCAnc3RyaW5nJykpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3Qgc3VicyA9IHRoaXMuYXBpQWRhcHRlclNlcnZpY2VcclxuICAgICAgICAgICAgLmV4ZWN1dGVBcGlSZXF1ZXN0KHBhcmFtZXRlckxpc3QsICcvbWVzc2FnZS90ZW1wbGF0ZScsICdHRVQnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxUZW1wbGF0ZVdBTW9kZWxbXT4pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRPcHRpb25zID0gdGhpcy50ZW1wbGF0ZU9wdGlvbiB8fCBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0RhdGEgPSByZXNwLmRhdGEgfHwgW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlT3B0aW9uID0gaXNJbmZpbml0ZSA/IFsuLi5jdXJyZW50T3B0aW9ucywgLi4ubmV3RGF0YV0gOiBuZXdEYXRhO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uID0gcmVzcC5oYXZlTmV4dCA/PyB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmdUZW1wbGF0ZU9wdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy50ZW1wbGF0ZU9wdGlvbj8uZmluZChcclxuICAgICAgICAgICAgICAgICAgICAodCkgPT4gdC5JRCA9PT0gdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy52YWx1ZT8uSURcclxuICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5wYXRjaFZhbHVlKHRlbXBsYXRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZURvd25sb2FkQ1NWKHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8udmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRQYXJhbWV0ZXIoaXNCdXR0b246IGJvb2xlYW4gPSBmYWxzZSwgdmFsdWU6IHN0cmluZyA9ICcnKTogRm9ybUdyb3VwIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gaXNCdXR0b25cclxuICAgICAgICAgICAgPyBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgOiBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogdGhpcy5pc1JlYWRPbmx5TW9kZSB8fCBbJyRVbnN1YnNjcmliZUFjY291bnQnXS5pbmNsdWRlcyh2YWx1ZSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0UGFyYW1IZWFkZXIoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQYXJhbUhlYWRlcih2YWx1ZTogc3RyaW5nID0gJycpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5pbml0UGFyYW1ldGVyKGZhbHNlLCB2YWx1ZSk7XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRQYXJhbUJvZHkoKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1Cb2R5KHZhbHVlOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5wdXNoKGZvcm0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRCdXR0b24oKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIHJldHVybiAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJhbUJ1dHRvbihpbmRleDogbnVtYmVyKTogRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgICAgIHJldHVybiAoZm9ybVtpbmRleF0uZ2V0KCduYW1lJykgYXMgRm9ybUFycmF5KS5jb250cm9scyBhcyBGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWRkUGFyYW1CdXR0b24oKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcih0cnVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVGV4dCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndGV4dCdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc01lZGlhKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICdtZWRpYSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc1RlbXBsYXRlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZW1wbGF0ZSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRJc0NhdGFsb2d1ZSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAnY2F0YWxvZ3VlJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVXRpbGl0eSgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWUgJiZcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSAndXRpbGl0eSdcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0QWNjb3VudEJhdGNoKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0hhdmVOZXh0QWNjb3VudE9wdGlvbikgcmV0dXJuO1xyXG5cclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKCcnLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYWNjb3VudFNlbGVjdGVkRGlzcGxheShcclxuICAgICAgICBhdHRyaWJ1dGUxOiBXaGF0c0FwcEFjY291bnREdG8sXHJcbiAgICAgICAgYXR0cmlidXRlMjogV2hhdHNBcHBBY2NvdW50RHRvXHJcbiAgICApOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGUxICYmIGF0dHJpYnV0ZTIgJiYgYXR0cmlidXRlMS5pZCA9PSBhdHRyaWJ1dGUyLmlkXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfSAoJHthdHRyaWJ1dGUxLmFjY291bnROb30pYFxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROZXh0VGVtcGxhdGVCYXRjaCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNIYXZlTmV4dFRlbXBsYXRlT3B0aW9uKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMucGFnZU5vVGVtcGxhdGVPcHRpb24gKz0gMTtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZShudWxsLCAnJywgdHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHRlbXBsYXRlU2VsZWN0ZWREaXNwbGF5KFxyXG4gICAgICAgIGF0dHJpYnV0ZTE6IFRlbXBsYXRlV0FNb2RlbCxcclxuICAgICAgICBhdHRyaWJ1dGUyOiBUZW1wbGF0ZVdBTW9kZWxcclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTEgJiYgYXR0cmlidXRlMiAmJiBhdHRyaWJ1dGUxLm5hbWUgPT0gYXR0cmlidXRlMi5uYW1lXHJcbiAgICAgICAgICAgID8gYCR7YXR0cmlidXRlMS5uYW1lfWBcclxuICAgICAgICAgICAgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25GaWxlU2VsZWN0ZWQoZXZlbnQ6IEV2ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlsZTogRmlsZUxpc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmZpbGVzO1xyXG4gICAgICAgIGNvbnN0IGFjY2VwdCA9IHRoaXMuZXh0RmlsZUFjY2VwdGVkLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgbGV0IG1hdGNoVHlwZSA9IGFjY2VwdFswXTtcclxuXHJcbiAgICAgICAgaWYgKGZpbGUubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmV4dEZpbGVBY2NlcHRlZCA9PT0gJ2FwcGxpY2F0aW9uL3BkZicpIG1hdGNoVHlwZSA9IGFjY2VwdFsxXTtcclxuXHJcbiAgICAgICAgaWYgKCFmaWxlWzBdLnR5cGUuaW5jbHVkZXMobWF0Y2hUeXBlKSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignU29ycnksIHRoZSBmaWxlIHlvdSBhcmUgdXBsb2FkaW5nIGlzIG5vdMKgYWxsb3dlZCcpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS5zaXplID4gMTAwMDAwMDApIHtcclxuICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ1VwbG9hZCBtZWRpYSBmYWlsZWQsIG1heCBzaXplIDEwbWInKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnNldFZhbHVlKGZpbGVbMF0pO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZVR5cGUnKT8uc2V0VmFsdWUoJ2ltYWdlJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWx1ZShmaWxlWzBdLm5hbWUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICBpZiAoZmlsZVswXS50eXBlLmluZGV4T2YoJ3ZpZGVvJykgPiAtMSkgdGhpcy5nZXRDb250cm9sKCdmaWxlVHlwZScpPy5zZXRWYWx1ZSgndmlkZW8nKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGxvYWRNZWRpYVNlcnZpY2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVwbG9hZE1lZGlhU2VydmljZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBwYXJhbWV0ZXJMaXN0OiBBcnJheTxQYXJhbWV0ZXI+ID0gW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmlsZScsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaW46ICdmb3JtRGF0YScsXHJcbiAgICAgICAgICAgICAgICB0eXBlOiAnb2JqZWN0JyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9tZXNzYWdlL21lZGlhJywgJ1BPU1QnKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwOiBBcHBSZXNwb25zZTxhbnk+KSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbHVlKHJlc3AuZGF0YS50YXJnZXRVUkwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnJlc2V0KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcygnVXBsb2FkIG1lZGlhIHN1Y2Nlc3MnKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uUGFyYW1zQ29udHJvbHMoKSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm0uZ2V0KCdidXR0b25QYXJhbXMnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1VzaW5nRXhjZWxCdWxrKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnZhbHVlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVXQU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dQYXJhbWV0ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBidXR0b25QYXJhbXNBcnJheSA9IHRoaXMuZm9ybS5nZXQoJ2J1dHRvblBhcmFtcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICBidXR0b25QYXJhbXNBcnJheS5jbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuYnV0dG9ucyAmJiB0ZW1wbGF0ZS5idXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcXVpY2tSZXBseUJ1dHRvbnMgPSB0ZW1wbGF0ZS5idXR0b25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChidG46IGFueSkgPT4gYnRuLnR5cGUgPT09ICdRVUlDS19SRVBMWSdcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHF1aWNrUmVwbHlCdXR0b25zLmZvckVhY2goKGJ0bjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBidXR0b25QYXJhbXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbmV3IEZvcm1Db250cm9sKGJ0bi50ZXh0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5tYXhMZW5ndGgoMjU2KV0pLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaXNIYXZlVGVtcGxhdGVQYXJhbSA9XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5oZWFkZXI/LmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwIHx8XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5ib2R5Py5leGFtcGxlcz8ubGVuZ3RoID8/IDApID4gMCB8fFxyXG4gICAgICAgICAgICAodGVtcGxhdGUuYnV0dG9ucz8ubGVuZ3RoID8/IDApID4gMDtcclxuXHJcbiAgICAgICAgaWYgKFsnaW1hZ2UnLCAndmlkZW8nLCAnZG9jdW1lbnQnXS5pbmNsdWRlcyh0ZW1wbGF0ZT8uaGVhZGVyPy50eXBlPy50b0xvd2VyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybS5maWxlTmFtZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaGVhZGVyLnVybFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm0udGFyZ2V0VVJMID8/IHRlbXBsYXRlLmhlYWRlci51cmxcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZmlsZVR5cGVDaGFuZ2UodGVtcGxhdGU/LmhlYWRlcj8udHlwZT8udG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAodGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRlbXBsYXRlLmJvZHkuZXhhbXBsZXM/Lmxlbmd0aCA/PyAwKSA+IDBcclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgICAgICh0ZW1wbGF0ZS5idXR0b25zPy5sZW5ndGggPz8gMCkgPiAwXHJcbiAgICAgICAgICAgID8gdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpXHJcbiAgICAgICAgICAgIDogdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1Cb2R5JykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgPSBbXTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZSgnJyk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuXHJcbiAgICAgICAgY29uc3QgZm9ybVN0b3JhZ2UgPSB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUuY2F0ZWdvcnkgPT09ICdBVVRIRU5USUNBVElPTicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5vdHBWYWx1ZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIFsuLi4oZm9ybVN0b3JhZ2U/LnRlbXBsYXRlPy5ib2R5Py5leGFtcGxlcyA/PyBbXSldPy5wb3AoKSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFBhcmFtSGVhZGVyKFxyXG4gICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtSGVhZGVyPy5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUhlYWRlcj8uW2luZGV4XSA/PyAnJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wbGF0ZS5ib2R5LmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1Cb2R5Py5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUJvZHk/LltpbmRleF0gPz8gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoWyckVW5zdWJzY3JpYmVBY2NvdW50J10uaW5jbHVkZXMoZWFjaCkpIHBhcmFtVmFsdWUgPSBlYWNoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRQYXJhbUJvZHkocGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBsYXRlLmJ1dHRvbnM/LmZvckVhY2goKGVhY2gsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUGFyYW1CdXR0b24oKTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b247XHJcblxyXG4gICAgICAgICAgICBpZiAoZWFjaC5leGFtcGxlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZWFjaC5leGFtcGxlcy5mb3JFYWNoKChfLCBwYXJhbUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWFjaC50eXBlID09PSAnRkxPVycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcihmYWxzZSwgZWFjaC5mbG93X2lkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1BhcmFtZXRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5wYXJhbUJ1dHRvbj8uW2luZGV4XT8ubmFtZT8uW3BhcmFtSW5kZXhdPy5uYW1lID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtQnV0dG9uPy5baW5kZXhdPy5uYW1lPy5bcGFyYW1JbmRleF0gPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1CdXR0b24/LltpbmRleF0/LltwYXJhbUluZGV4XSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXS5nZXQoJ25hbWUnKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb250cm9sID0gYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXT8uZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZU1lZGlhVHlwZShfbWVkaWFUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoX21lZGlhVHlwZSA9PT0gRW51bURhdGEuTUVESUFfVFlQRV9MT0NBVElPTikgdGhpcy5pbml0TWFwcztcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtUmVzZXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZUNoYW5nZShfbWVkaWFUeXBlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsZVR5cGVDaGFuZ2UodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnaW1hZ2UvKic7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX1ZJREVPLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAndmlkZW8vKic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX0RPQ1VNRU5ULnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlYXJjaChzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UobnVsbCwgc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWFyY2hBY2NvdW50KHNlYXJjaFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudE9wdGlvblNlcnZpY2Uoc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdE1hcHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNlYXJjaFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCA9IGF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYWNlLmdlb21ldHJ5KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sYXRpdHVkZSA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sYXRpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50TG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnZhbHVlICYmICF0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xvbmdpdHVkZScpPy5zZXRWYWx1ZSh0aGlzLm1hcHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXJrZXJEcmFnRW5kKGV2ZW50OiBnb29nbGUubWFwcy5Nb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmxhdExuZykge1xyXG4gICAgICAgICAgICB0aGlzLm1hcHMubGF0aXR1ZGUgPSBldmVudC5sYXRMbmcubGF0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBldmVudC5sYXRMbmcubG5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEb3dubG9hZENTVihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnNldFZhbHVlKGlzQ2hlY2tlZCk7XHJcblxyXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2hhbmdlVGVtcGxhdGUodXNlRXhpc3Rpbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzRG93bmxvYWRWYXJpYWJsZVhMUycpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlRG93bmxvYWRYTFMoZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAodXNlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAvL3RoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWx1ZSgnSGFsbyB7ezF9fSwgaW5pIGFkYWxhaCBrb2RlIHZlcmlmaWthc2kga2FtdToge3syfX0nKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KDEwMjQpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNoYW5nZUZyb20odmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgaXNVc2VFeGlzdGluZ1RlbXBsYXRlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKCFpc1VzZUV4aXN0aW5nVGVtcGxhdGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhcmlhYmxlcygpOiBGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRWYXJpYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIHBhcmFtTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZUdyb3VwKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woJ3RleHQnKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHRDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlcXVlbmNlID0gYHt7JHt0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGh9fX1gO1xyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShgJHtjdXJyZW50Qm9keX0gJHtuZXdTZXF1ZW5jZX1gLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVZhcmlhYmxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhcmlhYmxlcy5yZW1vdmVBdChpbmRleCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd1c2VYbHN4Jyk/LnNldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRDb250cm9sID0gdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRTZXF1ZW5jZSA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKlxcXFx7XFxcXHske3RhcmdldFNlcXVlbmNlfVxcXFx9XFxcXH1gLCAnZycpO1xyXG4gICAgICAgICAgICBjdXJyZW50Qm9keSA9IGN1cnJlbnRCb2R5LnJlcGxhY2UocmVtb3ZlUmVnZXgsICcnKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRCb2R5ID0gY3VycmVudEJvZHkucmVwbGFjZSgvXFx7XFx7KFxcZCspXFx9XFx9L2csIChtYXRjaDogbnVtYmVyLCBudW1TdHI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQobnVtU3RyLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gdGFyZ2V0U2VxdWVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHt7JHtudW0gLSAxfX19YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShjdXJyZW50Qm9keS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVWYXJpYWJsZURvd25sb2FkWExTKGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0FycmF5ID0gdGhpcy52YXJpYWJsZXM7XHJcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmdldCgncGFyYW1OYW1lJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5nZXQoJ3BhcmFtTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChlYWNoKSA9PiBlYWNoLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
768
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AYWRsZmUvY2FtcGFpZ24tbWFuYWdlbWVudC1saWJyYXJ5LyIsInNvdXJjZXMiOlsibGliL2NhbXBhaWduLW1hbmFnZW1lbnQvbW9kdWxlcy9uZXctY2FtcGFpZ24vY29tcG9uZW50cy9nZW5lcmFsLWluZm9ybWF0aW9uLXdhL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQ0gsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUVILFNBQVMsRUFFVCxXQUFXLEVBQ1gsU0FBUyxFQUNULFVBQVUsR0FDYixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFM0MsT0FBTyxFQUNILDBDQUEwQyxFQUMxQyxvQkFBb0IsRUFDcEIsb0JBQW9CLEdBQ3ZCLE1BQU0sMkJBQTJCLENBQUM7QUFDbkMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJaEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDeEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFOUQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xELE9BQU8sRUFBRSxVQUFVLElBQUksZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQWV4RSxJQUFhLDZCQUE2QixHQUExQyxNQUFhLDZCQUE2QjtJQStDdEMsWUFDWSxNQUFjLEVBQ2QsYUFBNEIsRUFDNUIsaUJBQTJDLEVBQzNDLE1BQXFCLEVBQ3JCLFVBQXNCO1FBSnRCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQTBCO1FBQzNDLFdBQU0sR0FBTixNQUFNLENBQWU7UUFDckIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQS9DM0Isb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFDNUIsb0JBQWUsR0FBVSxFQUFFLENBQUM7UUFFNUIsa0JBQWEsR0FBeUIsRUFBRSxDQUFDO1FBQ3pDLDRCQUF1QixHQUFZLElBQUksQ0FBQztRQUN4QywyQkFBc0IsR0FBWSxLQUFLLENBQUM7UUFDeEMsbUJBQWMsR0FBc0IsRUFBRSxDQUFDO1FBQ3ZDLDZCQUF3QixHQUFZLElBQUksQ0FBQztRQUN6Qyw0QkFBdUIsR0FBWSxLQUFLLENBQUM7UUFDekMsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBQ3JDLG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBRWpDLG9CQUFlLEdBQVcsU0FBUyxDQUFDO1FBR25DLHdCQUFtQixHQUFXLENBQUMsQ0FBQztRQUNoQyx5QkFBb0IsR0FBVyxDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBbUIsRUFBRSxDQUFDO1FBR2xDLGNBQVMsR0FBRztZQUNmLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3JDLEVBQUUsS0FBSyxFQUFFLHVCQUF1QixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7U0FDbEQsQ0FBQztRQWlCSyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQVNuQyxJQUFJLENBQUMsNEJBQTRCLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUMzRCxDQUFDO0lBdEJELElBQUksYUFBYSxDQUFDLE1BQWU7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtZQUNwQyxPQUFPO1NBQ1Y7UUFFRCxVQUFVLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLDRCQUE0QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEQsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBZ0JELFFBQVE7O1FBQ0osSUFBSSxDQUFDLGVBQWUsR0FBRyxvQkFBb0IsQ0FBQztRQUM1QyxJQUFJLENBQUMsZUFBZSxHQUFHLG9CQUFvQixDQUFDO1FBQzVDLElBQUksQ0FBQyxjQUFjLEdBQUcsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsMENBQTBDLENBQUM7UUFDckUsSUFBSSxDQUFDLElBQUksR0FBRztZQUNSLElBQUksRUFBRSxFQUFFO1lBQ1IsUUFBUSxFQUFFLElBQUk7WUFDZCxTQUFTLEVBQUUsSUFBSTtZQUNmLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLGlCQUFpQixFQUFFLElBQUk7U0FDMUIsQ0FBQztRQUVGLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsdUJBQXVCLENBQ3hCLG1CQUFBLElBQUksQ0FBQyxrQkFBa0IsMENBQUUsa0JBQWtCLDBDQUFFLElBQUksMENBQUUsTUFBTSxNQUFLLElBQUk7WUFDOUQsQ0FBQyx5QkFBQyxJQUFJLENBQUMsa0JBQWtCLDBDQUFFLGtCQUFrQiwwQ0FBRSxJQUFJLDBDQUFFLElBQUksMENBQUUsSUFBSSxDQUMvRCxDQUFDLENBQUMsRUFBRSxDQUNYLENBQUM7UUFDRixnQ0FBZ0M7SUFDcEMsQ0FBQztJQUVELElBQUksa0JBQWtCO1FBQ2xCLE1BQU0sWUFBWSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM1RCxPQUFPLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3hELENBQUM7SUFFTyxRQUFRO1FBQ1osSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN0QixPQUFPLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkQsS0FBSyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUM1QixJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzNCLElBQUksRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDM0IsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQixTQUFTLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2hDLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDL0IsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUMzQixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQy9CLFNBQVMsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDaEMsUUFBUSxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUMvQixXQUFXLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbkQsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDO1lBQ2pELFdBQVcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUNuRCxRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDaEMsTUFBTSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMzQixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQy9CLE9BQU8sRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDOUIsU0FBUyxFQUFFLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQztZQUNoQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQzNCLHFCQUFxQixFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztZQUM3QyxVQUFVLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQ2xDLEdBQUcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDMUIscUJBQXFCLEVBQUUsSUFBSSxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzdDLFNBQVMsRUFBRSxJQUFJLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxFQUFFLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMvQixZQUFZLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxDQUFDO1NBQ2xDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDbEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVc7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN0QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFTyxRQUFROztRQUNaLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUM1QyxNQUFNLFVBQVUsZUFBRyxXQUFXLDBDQUFFLGtCQUFrQiwwQ0FBRSxJQUFJLENBQUM7UUFDekQsSUFDSSxDQUFDLFdBQVc7WUFDWixNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3hDLE9BQUEsVUFBVSwwQ0FBRSxNQUFNLE1BQUssSUFBSSxFQUM3QjtZQUNFLE9BQU87U0FDVjtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxDQUFDO1FBQ3RDLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsT0FBTyxFQUFFO1FBQzFELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsS0FBSyxFQUFFO1FBQ3RELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsSUFBSSxFQUFFO1FBQ3BELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsSUFBSSxFQUFFO1FBQ3BELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsU0FBUyxFQUFFO1FBQzlELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsUUFBUSxhQUNqQyxVQUFVLDBDQUFFLFFBQVEsNkNBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsMENBQUUsS0FBSyxJQUM3RDtRQUNGLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFO1FBQzVELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFO1FBQzVELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsTUFBTSxFQUFFO1FBQ3hELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsUUFBUSxPQUFDLFVBQVUsMENBQUUsUUFBUSxFQUFFO1FBQzVELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyx1QkFBdUIsQ0FBQywwQ0FBRSxRQUFRLENBQUMsQ0FBQyxRQUFDLFVBQVUsMENBQUUsWUFBWSxDQUFBLEVBQUU7UUFDL0UsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQywwQ0FBRSxRQUFRLENBQUMsQ0FBQyxRQUFDLFVBQVUsMENBQUUsVUFBVSxDQUFBLEVBQUU7UUFDbEUsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQywwQ0FBRSxRQUFRLE9BQUMsVUFBVSwwQ0FBRSxHQUFHLEVBQUU7UUFDbEQsTUFBTSxjQUFjLFNBQUcsVUFBVSwwQ0FBRSxTQUFTLENBQUM7UUFDN0MsSUFBSSxjQUFjLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUM5RSxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBRXZCLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ2YsSUFBSSxTQUFTLENBQUM7b0JBQ1YsU0FBUyxFQUFFLElBQUksV0FBVyxDQUN0QixFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxFQUM5RCxVQUFVLENBQUMsUUFBUSxDQUN0QjtpQkFDSixDQUFDLENBQ0wsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsbUJBQW1CLFNBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsS0FBSyxDQUFDO1FBQzlELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLGVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsS0FBSyw0Q0FBRSxJQUFJLENBQUMsQ0FBQztJQUNsRixDQUFDO0lBRU8sY0FBYzs7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUV2QixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ3BEO1NBQ0o7UUFFRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1FBRS9ELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzVELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDNUQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxzQkFBc0IsR0FBRztZQUNsRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLHNCQUFzQixHQUFHO1NBQ3JEO2FBQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ3hCLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsMENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDN0QsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUM1RCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ2hFLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsMENBQUUsc0JBQXNCLEdBQUc7WUFDbkQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxzQkFBc0IsR0FBRztZQUNsRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLHNCQUFzQixHQUFHO1NBQ3pEO2FBQU0sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQzNCLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDNUQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNoRSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ25FLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsMENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDakUsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQywwQ0FBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNuRSxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLHNCQUFzQixHQUFHO1lBQ2xELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsMENBQUUsc0JBQXNCLEdBQUc7WUFDdEQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQywwQ0FBRSxzQkFBc0IsR0FBRztZQUN6RCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLHNCQUFzQixHQUFHO1lBQ3ZELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsMENBQUUsc0JBQXNCLEdBQUc7U0FDNUQ7YUFBTSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDNUIsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUM1RCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQ2hFLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsMENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDakUsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQywwQ0FBRSxhQUFhLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUMvRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQ2xFLE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsc0JBQXNCLEdBQUc7WUFDbEQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxzQkFBc0IsR0FBRztZQUN0RCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLHNCQUFzQixHQUFHO1lBQ3ZELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsMENBQUUsc0JBQXNCLEdBQUc7WUFDckQsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxzQkFBc0IsR0FBRztTQUNyRDthQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUMxQixNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzVELE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsMENBQUUsYUFBYSxDQUFDO2dCQUNuQyxVQUFVLENBQUMsUUFBUTtnQkFDbkIsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7YUFDN0IsRUFBRTtZQUNILE1BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsMENBQUUsYUFBYSxDQUFDO2dCQUNsQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLGdCQUFnQixDQUFDO2dCQUMxQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLG1CQUFtQixDQUFDO2FBQ25ELEVBQUU7WUFDSCxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDRDQUFFLHNCQUFzQixHQUFHO1lBQ2xELE9BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsNENBQUUsc0JBQXNCLEdBQUc7WUFDbEQsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyw0Q0FBRSxzQkFBc0IsR0FBRztZQUNqRCxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDRDQUFFLHNCQUFzQixHQUFHO1NBQzFEO2FBQU07WUFDSCxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDRDQUFFLGFBQWEsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFO1lBQzVELE9BQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsNENBQUUsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUU7WUFDNUQsT0FBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyw0Q0FBRSxzQkFBc0IsR0FBRztZQUNsRCxPQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDRDQUFFLHNCQUFzQixHQUFHO1NBQ3JEO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxlQUF3QixLQUFLOztRQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ2YsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7WUFDbEMsTUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQywwQ0FBRSxLQUFLLEdBQUc7U0FDcEM7UUFFRCxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNyQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNwQyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUN0QyxNQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLDBDQUFFLEtBQUssR0FBRztRQUNqQyxNQUFBLElBQUksQ0FBQyxV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WUFDdkQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDO0NBQ0osQ0FBQTs7WUFoMUJ1QixNQUFNO1lBQ0MsYUFBYTtZQUNULHdCQUF3QjtZQUNuQyxhQUFhO1lBQ1QsVUFBVTs7QUFsRGxDO0lBREMsTUFBTSxFQUFFO21GQUNvRDtBQTRCcEQ7SUFBUixLQUFLLEVBQUU7cUVBQWlDO0FBR3pDO0lBREMsS0FBSyxFQUFFO2tFQVNQO0FBRXVCO0lBQXZCLFNBQVMsQ0FBQyxXQUFXLENBQUM7bUVBQTJCO0FBM0N6Qyw2QkFBNkI7SUFMekMsU0FBUyxDQUFDO1FBQ1AsUUFBUSxFQUFFLDRCQUE0QjtRQUN0QyxrczJDQUFzRDs7S0FFekQsQ0FBQztHQUNXLDZCQUE2QixDQWc0QnpDO1NBaDRCWSw2QkFBNkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXBzQVBJTG9hZGVyIH0gZnJvbSAnQGFnbS9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE5nWm9uZSxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEFic3RyYWN0Q29udHJvbCxcclxuICAgIEZvcm1BcnJheSxcclxuICAgIEZvcm1CdWlsZGVyLFxyXG4gICAgRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtR3JvdXAsXHJcbiAgICBWYWxpZGF0b3JzLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtcclxuICAgIEdlbmVyYWxJbmZvcm1hdGlvbldBTWVzc2FnZVZhbGlkYXRpb25Db25zdCxcclxuICAgIE1lZGlhVHlwZU9wdGlvbkNvbnN0LFxyXG4gICAgTXNnVHlwZVdBT3B0aW9uQ29uc3QsXHJcbn0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9jb25zdCc7XHJcbmltcG9ydCB7IFByb2R1Y3RDYXRlZ29yeUVudW0gfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL2VudW1zJztcclxuaW1wb3J0IHsgQmFzZU9wdGlvbk1vZGVsIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9tb2RlbHMnO1xyXG5pbXBvcnQgeyBQYXJhbWV0ZXIgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1hZGFwdGVyLXNlcnZpY2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBwUmVzcG9uc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL21vZGVscy91dGlsL2FwaS1kdG8vcmVzcG9uc2UtbW9kZWxzJztcclxuaW1wb3J0IHsgQXBpQWRhcHRlclNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IGdlbmVyYXRlRW51bU9wdGlvbiB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvdXRpbCc7XHJcbmltcG9ydCB7IFRlbXBsYXRlV0FNb2RlbCwgV2hhdHNBcHBBY2NvdW50RHRvIH0gZnJvbSAnLi4vLi4vLi4vLi4vbW9kZWxzJztcclxuaW1wb3J0IHsgRW51bURhdGEgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlsL2VudW1zJztcclxuaW1wb3J0IHsgVmFsaWRhdG9ycyBhcyBDdXN0b21WYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vdmFsaWRhdG9ycyc7XHJcblxyXG5pbnRlcmZhY2UgSU1hcHMge1xyXG4gICAgem9vbTogbnVtYmVyO1xyXG4gICAgbGF0aXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBsb25naXR1ZGU6IG51bWJlciB8IG51bGw7XHJcbiAgICBpc0RyYWdnYWJsZTogYm9vbGVhbjtcclxuICAgIGlzRG91YmxlQ2xpY2tab29tOiBib29sZWFuO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbGliLWdlbmVyYWwtaW5mb3JtYXRpb24td2EnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYWwtaW5mb3JtYXRpb24td2EuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZ2VuZXJhbC1pbmZvcm1hdGlvbi13YS5jb21wb25lbnQuc2NzcyddLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgR2VuZXJhbEluZm9ybWF0aW9uV0FDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB1cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtOiBFdmVudEVtaXR0ZXI8Rm9ybUdyb3VwPjtcclxuXHJcbiAgICBwdWJsaWMgZm9ybSE6IEZvcm1Hcm91cDtcclxuICAgIHB1YmxpYyBtc2dUeXBlV0FPcHRpb246IGFueVtdID0gW107XHJcbiAgICBwdWJsaWMgbWVkaWFUeXBlT3B0aW9uOiBhbnlbXSA9IFtdO1xyXG4gICAgcHVibGljIGNhdGVnb3J5T3B0aW9uITogQmFzZU9wdGlvbk1vZGVsW107XHJcbiAgICBwdWJsaWMgYWNjb3VudE9wdGlvbjogV2hhdHNBcHBBY2NvdW50RHRvW10gPSBbXTtcclxuICAgIHB1YmxpYyBpc0hhdmVOZXh0QWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nQWNjb3VudE9wdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgcHVibGljIHRlbXBsYXRlT3B0aW9uOiBUZW1wbGF0ZVdBTW9kZWxbXSA9IFtdO1xyXG4gICAgcHVibGljIGlzSGF2ZU5leHRUZW1wbGF0ZU9wdGlvbjogYm9vbGVhbiA9IHRydWU7XHJcbiAgICBwdWJsaWMgaXNMb2FkaW5nVGVtcGxhdGVPcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpc0hhdmVUZW1wbGF0ZVBhcmFtOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgaXNTaG93UGFyYW1ldGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBwdWJsaWMgdmFsaWRhdGlvbk1lc3NhZ2VzOiBhbnk7XHJcbiAgICBwdWJsaWMgZXh0RmlsZUFjY2VwdGVkOiBzdHJpbmcgPSAnaW1hZ2UvKic7XHJcbiAgICBwdWJsaWMgbWFwcyE6IElNYXBzO1xyXG5cclxuICAgIHByaXZhdGUgcGFnZU5vQWNjb3VudE9wdGlvbjogbnVtYmVyID0gMTtcclxuICAgIHByaXZhdGUgcGFnZU5vVGVtcGxhdGVPcHRpb246IG51bWJlciA9IDE7XHJcbiAgICBwcml2YXRlIHN1YnNjcmliZXJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xyXG5cclxuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBbXHJcbiAgICAgICAgeyBsYWJlbDogJ0NyZWF0ZSBOZXcnLCB2YWx1ZTogZmFsc2UgfSxcclxuICAgICAgICB7IGxhYmVsOiAnVXNlIGV4aXN0aW5nIHRlbXBsYXRlJywgdmFsdWU6IHRydWUgfSxcclxuICAgIF07XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIGlzUmVhZE9ubHlNb2RlITogYm9vbGVhbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgc2V0IGlzVG91Y2hlZEZvcm0oc3RhdHVzOiBib29sZWFuKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlR2VuZXJhbEluZm9ybWF0aW9uRm9ybS5lbWl0KHRoaXMuZm9ybSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnbWFwU2VhcmNoJykgbWFwU2VhcmNoUmVmITogRWxlbWVudFJlZjtcclxuXHJcbiAgICBwdWJsaWMgaXNDaGVja1V0aWxpdHk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgbWFwc0FQSUxvYWRlcjogTWFwc0FQSUxvYWRlcixcclxuICAgICAgICBwcml2YXRlIGFwaUFkYXB0ZXJTZXJ2aWNlOiBBcGlBZGFwdGVyU2VydmljZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBodHRwQ2xpZW50OiBIdHRwQ2xpZW50XHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZUdlbmVyYWxJbmZvcm1hdGlvbkZvcm0gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tc2dUeXBlV0FPcHRpb24gPSBNc2dUeXBlV0FPcHRpb25Db25zdDtcclxuICAgICAgICB0aGlzLm1lZGlhVHlwZU9wdGlvbiA9IE1lZGlhVHlwZU9wdGlvbkNvbnN0O1xyXG4gICAgICAgIHRoaXMuY2F0ZWdvcnlPcHRpb24gPSBnZW5lcmF0ZUVudW1PcHRpb24oUHJvZHVjdENhdGVnb3J5RW51bSk7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZXMgPSBHZW5lcmFsSW5mb3JtYXRpb25XQU1lc3NhZ2VWYWxpZGF0aW9uQ29uc3Q7XHJcbiAgICAgICAgdGhpcy5tYXBzID0ge1xyXG4gICAgICAgICAgICB6b29tOiAxNSxcclxuICAgICAgICAgICAgbGF0aXR1ZGU6IG51bGwsXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbnVsbCxcclxuICAgICAgICAgICAgaXNEcmFnZ2FibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGlzRG91YmxlQ2xpY2tab29tOiB0cnVlLFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgICAgICB0aGlzLmluaXREaXNhYmxlKCk7XHJcbiAgICAgICAgdGhpcy5pbml0RWRpdCgpO1xyXG4gICAgICAgIHRoaXMuaW5pdFZhbGlkYXRpb24oKTtcclxuICAgICAgICB0aGlzLmdldEFjY291bnRPcHRpb25TZXJ2aWNlKFxyXG4gICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtPy5tZWRpdW0gPT09ICdXQSdcclxuICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybT8uZnJvbT8ubmFtZVxyXG4gICAgICAgICAgICAgICAgOiAnJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLyogdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTsgKi9cclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0Q2FtcGFpZ25TdG9yYWdlKCk6IGFueSB7XHJcbiAgICAgICAgY29uc3QgY2FtcGFpZ25EYXRhID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3RlbGluLmNhbXBhaWduJyk7XHJcbiAgICAgICAgcmV0dXJuIGNhbXBhaWduRGF0YSA/IEpTT04ucGFyc2UoY2FtcGFpZ25EYXRhKSA6IHt9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdEZvcm0oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5mb3JtID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIGNoYW5uZWw6IG5ldyBGb3JtQ29udHJvbChudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgbWVkaWE6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgZnJvbTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZXh0OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGZpbGVOYW1lOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHRhcmdldFVSTDogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlVHlwZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBmaWxlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxhdGl0dWRlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGxvbmdpdHVkZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZTogbmV3IEZvcm1Db250cm9sKG51bGwpLFxyXG4gICAgICAgICAgICBwYXJhbUhlYWRlcjogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQm9keTogbmV3IEZvcm1BcnJheShbXSwgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgIHBhcmFtQnV0dG9uOiBuZXcgRm9ybUFycmF5KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgb3RwVmFsdWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGlzVXBsb2FkOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBmaWxlSWQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIHByb2R1Y3Q6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgY2F0YWxvZ3VlOiBuZXcgRm9ybUNvbnRyb2wobnVsbCksXHJcbiAgICAgICAgICAgIGJvZHk6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNVc2VFeGlzdGluZ1RlbXBsYXRlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBpc05lZWRTYXZlOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB0dGw6IG5ldyBGb3JtQ29udHJvbChudWxsKSxcclxuICAgICAgICAgICAgaXNEb3dubG9hZFZhcmlhYmxlWExTOiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICB2YXJpYWJsZXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgICAgICB1c2VYbHN4OiBuZXcgRm9ybUNvbnRyb2woZmFsc2UpLFxyXG4gICAgICAgICAgICBidXR0b25QYXJhbXM6IG5ldyBGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVHZW5lcmFsSW5mb3JtYXRpb25Gb3JtLmVtaXQodGhpcy5mb3JtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGlzYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuaXNSZWFkT25seU1vZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRFZGl0KCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHN0b3JhZ2VEYXRhID0gdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U7XHJcbiAgICAgICAgY29uc3QgZm9ybVZhbHVlcyA9IHN0b3JhZ2VEYXRhPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAhc3RvcmFnZURhdGEgfHxcclxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3RvcmFnZURhdGEpLmxlbmd0aCA9PT0gMCB8fFxyXG4gICAgICAgICAgICBmb3JtVmFsdWVzPy5tZWRpdW0gIT09ICdXQSdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhmb3JtVmFsdWVzLCAnZm9ybVZhbHVlcycpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5jaGFubmVsKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ21lZGlhJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/Lm1lZGlhKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8uZnJvbSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LnRleHQpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LnRhcmdldFVSTCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlTmFtZScpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgZm9ybVZhbHVlcz8uZmlsZU5hbWUgPz8gdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8udmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8udGVtcGxhdGUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnaXNVcGxvYWQnKT8uc2V0VmFsdWUoZm9ybVZhbHVlcz8uaXNVcGxvYWQpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZUlkJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LmZpbGVJZCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZShmb3JtVmFsdWVzPy5vdHBWYWx1ZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdpc1VzZUV4aXN0aW5nVGVtcGxhdGUnKT8uc2V0VmFsdWUoISFmb3JtVmFsdWVzPy50ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnaXNOZWVkU2F2ZScpPy5zZXRWYWx1ZSghIWZvcm1WYWx1ZXM/LmlzTmVlZFNhdmUpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndHRsJyk/LnNldFZhbHVlKGZvcm1WYWx1ZXM/LnR0bCk7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWRWYXJpYWJsZXMgPSBmb3JtVmFsdWVzPy52YXJpYWJsZXM7XHJcbiAgICAgICAgaWYgKHNhdmVkVmFyaWFibGVzICYmIEFycmF5LmlzQXJyYXkoc2F2ZWRWYXJpYWJsZXMpICYmIHNhdmVkVmFyaWFibGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMuY2xlYXIoKTtcclxuXHJcbiAgICAgICAgICAgIHNhdmVkVmFyaWFibGVzLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBpdGVtLnBhcmFtTmFtZSB8fCAnJywgZGlzYWJsZWQ6IHRoaXMuaXNSZWFkT25seU1vZGUgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmlzSGF2ZVRlbXBsYXRlUGFyYW0gPSB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnZhbHVlO1xyXG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVPcHRpb25TZXJ2aWNlKG51bGwsIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8udmFsdWU/Lm5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFZhbGlkYXRpb24oKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZvcm0pIHJldHVybjtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5mb3JtLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm0uY29udHJvbHNba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtLmNvbnRyb2xzW2tleV0uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZvcm0uY29udHJvbHNba2V5XS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5nZXRJc1RleHQpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc01lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbWVkaWEnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdtZWRpYScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRJc1RlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2Zyb20nKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmdldElzQ2F0YWxvZ3VlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGVnb3J5Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0YWxvZ3VlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncHJvZHVjdCcpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2JvZHknKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjYXRlZ29yeScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0YWxvZ3VlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwcm9kdWN0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdib2R5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0SXNVdGlsaXR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsaWRhdG9ycyhbXHJcbiAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAyNCksXHJcbiAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3R0bCcpPy5zZXRWYWxpZGF0b3JzKFtcclxuICAgICAgICAgICAgICAgIEN1c3RvbVZhbGlkYXRvcnMubWluKDMwLCAnTWluaW11bSBUVEwgMzAnKSxcclxuICAgICAgICAgICAgICAgIEN1c3RvbVZhbGlkYXRvcnMubWF4KDQzMjAwLCAnTWF4aW11bSBUVEwgNDMyMDAnKSxcclxuICAgICAgICAgICAgXSk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndHRsJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd2YXJpYWJsZXMnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZvcm1SZXNldChfaXNNZWRpYVR5cGU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIGlmICghX2lzTWVkaWFUeXBlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbWVkaWEnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmcm9tJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVUeXBlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsYXRpdHVkZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnJlc2V0KCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2F0ZWdvcnknKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3Byb2R1Y3QnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NhdGFsb2d1ZScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnYm9keScpPy5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8ucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpPy5yZXNldCgpO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJhbUhlYWRlciA9IHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkgfCBudWxsO1xyXG4gICAgICAgIGlmIChwYXJhbUhlYWRlcikge1xyXG4gICAgICAgICAgICBwYXJhbUhlYWRlci5jbGVhcigpO1xyXG4gICAgICAgICAgICBwYXJhbUhlYWRlci5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1Cb2R5ID0gdGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkgfCBudWxsO1xyXG4gICAgICAgIGlmIChwYXJhbUJvZHkpIHtcclxuICAgICAgICAgICAgcGFyYW1Cb2R5LmNsZWFyKCk7XHJcbiAgICAgICAgICAgIHBhcmFtQm9keS5yZXNldCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1CdXR0b24gPSB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5IHwgbnVsbDtcclxuICAgICAgICBpZiAocGFyYW1CdXR0b24pIHtcclxuICAgICAgICAgICAgcGFyYW1CdXR0b24uY2xlYXIoKTtcclxuICAgICAgICAgICAgcGFyYW1CdXR0b24ucmVzZXQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFZhbGlkYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZyk6IEFic3RyYWN0Q29udHJvbCB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm0gPyB0aGlzLmZvcm0uZ2V0KGNvbnRyb2xOYW1lKSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0UGFyYW0oX25hbWU6IHN0cmluZywgX3ZhbHVlOiBhbnksIF90eXBlOiBzdHJpbmcpOiBQYXJhbWV0ZXIge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5hbWU6IF9uYW1lLFxyXG4gICAgICAgICAgICB2YWx1ZTogX3ZhbHVlLFxyXG4gICAgICAgICAgICBpbjogJ3F1ZXJ5JyxcclxuICAgICAgICAgICAgdHlwZTogX3R5cGUsXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEFjY291bnRPcHRpb25TZXJ2aWNlKGZpbHRlcjogc3RyaW5nID0gJycsIGlzSW5maW5pdGU6IGJvb2xlYW4gPSBmYWxzZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nQWNjb3VudE9wdGlvbiA9IHRydWU7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdwYWdlTm8nLCB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24sICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3Jvd1BlclBhZ2UnLCAyMCwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGxhdGZvcm0nLCAnV0EnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdzdGF0dXMnLCAnQVBQUk9WRUQnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdmaWx0ZXInLCBmaWx0ZXIsICdzdHJpbmcnKSxcclxuICAgICAgICBdO1xyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9hZG1pbi9hY2NvdW50JywgJ0dFVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IEFwcFJlc3BvbnNlPFdoYXRzQXBwQWNjb3VudER0b1tdPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwLmRhdGEpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjY291bnRPcHRpb24gPSBpc0luZmluaXRlID8gWy4uLnRoaXMuYWNjb3VudE9wdGlvbiwgLi4ucmVzcC5kYXRhXSA6IHJlc3AuZGF0YTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNIYXZlTmV4dEFjY291bnRPcHRpb24gPSByZXNwLmhhdmVOZXh0ID8/IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ0FjY291bnRPcHRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlcnMucHVzaChzdWJzKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGVtcGxhdGVPcHRpb25TZXJ2aWNlKFxyXG4gICAgICAgIGV2ZW50OiBzdHJpbmcgPSBudWxsLFxyXG4gICAgICAgIGZpbHRlcjogc3RyaW5nID0gJycsXHJcbiAgICAgICAgaXNJbmZpbml0ZTogYm9vbGVhbiA9IGZhbHNlXHJcbiAgICApOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZ1RlbXBsYXRlT3B0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVyTGlzdDogQXJyYXk8UGFyYW1ldGVyPiA9IFtcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3BhZ2VObycsIHRoaXMucGFnZU5vVGVtcGxhdGVPcHRpb24sICdudW1iZXInKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3Jvd1BlclBhZ2UnLCAyMCwgJ251bWJlcicpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgncGxhdGZvcm0nLCAnV0EnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCd0ZW1wbGF0ZVR5cGUnLCAnYWxsJywgJ3N0cmluZycpLFxyXG4gICAgICAgICAgICB0aGlzLmluaXRQYXJhbSgnZmlsdGVyJywgZmlsdGVyLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdzdGF0dXMnLCAnQVBQUk9WRUQnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgICAgIHRoaXMuaW5pdFBhcmFtKCdjbGllbnRJZCcsIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy52YWx1ZT8uY2xpZW50SWQgPz8gJycsICdzdHJpbmcnKSxcclxuICAgICAgICAgICAgdGhpcy5pbml0UGFyYW0oJ3dhYmFJZCcsIHRoaXMuZ2V0Q29udHJvbCgnZnJvbScpPy52YWx1ZT8ud2FiYUlkID8/ICcnLCAnc3RyaW5nJyksXHJcbiAgICAgICAgXTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuaXNSZWFkT25seU1vZGUpIHBhcmFtZXRlckxpc3QucHVzaCh0aGlzLmluaXRQYXJhbSgnc3VtbWFyeScsIHRydWUsICdzdHJpbmcnKSk7XHJcblxyXG4gICAgICAgIGNvbnN0IG1lc3NhZ2VUeXBlID0gdGhpcy5mb3JtLnZhbHVlPy5jaGFubmVsO1xyXG5cclxuICAgICAgICBpZiAobWVzc2FnZVR5cGUgPT09ICd1dGlsaXR5Jykge1xyXG4gICAgICAgICAgICBwYXJhbWV0ZXJMaXN0LnB1c2godGhpcy5pbml0UGFyYW0oJ2lzRGlyZWN0U2VuZCcsIHRydWUsICdzdHJpbmcnKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBzdWJzID0gdGhpcy5hcGlBZGFwdGVyU2VydmljZVxyXG4gICAgICAgICAgICAuZXhlY3V0ZUFwaVJlcXVlc3QocGFyYW1ldGVyTGlzdCwgJy9tZXNzYWdlL3RlbXBsYXRlJywgJ0dFVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IEFwcFJlc3BvbnNlPFRlbXBsYXRlV0FNb2RlbFtdPikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudE9wdGlvbnMgPSB0aGlzLnRlbXBsYXRlT3B0aW9uIHx8IFtdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3RGF0YSA9IHJlc3AuZGF0YSB8fCBbXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudGVtcGxhdGVPcHRpb24gPSBpc0luZmluaXRlID8gWy4uLmN1cnJlbnRPcHRpb25zLCAuLi5uZXdEYXRhXSA6IG5ld0RhdGE7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5pc0hhdmVOZXh0VGVtcGxhdGVPcHRpb24gPSByZXNwLmhhdmVOZXh0ID8/IHRydWU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGluZ1RlbXBsYXRlT3B0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlT3B0aW9uPy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICh0KSA9PiB0LklEID09PSB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlPy5JRFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnBhdGNoVmFsdWUodGVtcGxhdGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy52YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlRG93bmxvYWRDU1YodGhpcy5nZXRDb250cm9sKCdpc1VwbG9hZCcpPy52YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVRlbXBsYXRlKHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8udmFsdWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdFBhcmFtZXRlcihpc0J1dHRvbjogYm9vbGVhbiA9IGZhbHNlLCB2YWx1ZTogc3RyaW5nID0gJycpOiBGb3JtR3JvdXAge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSBpc0J1dHRvblxyXG4gICAgICAgICAgICA/IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUFycmF5KFtdLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICA6IG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woXHJcbiAgICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiB0aGlzLmlzUmVhZE9ubHlNb2RlIHx8IFsnJFVuc3Vic2NyaWJlQWNjb3VudCddLmluY2x1ZGVzKHZhbHVlKSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JtO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBnZXRQYXJhbUhlYWRlcigpOiBGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUhlYWRlcicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgYXMgRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFBhcmFtSGVhZGVyKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoZmFsc2UsIHZhbHVlKTtcclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldFBhcmFtQm9keSgpOiBGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQYXJhbUJvZHkodmFsdWU6IHN0cmluZyA9ICcnKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcihmYWxzZSwgdmFsdWUpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldEJ1dHRvbigpOiBGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgcmV0dXJuICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgYXMgRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFBhcmFtQnV0dG9uKGluZGV4OiBudW1iZXIpOiBGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3QgZm9ybSA9ICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkuY29udHJvbHMgYXMgRm9ybUdyb3VwW107XHJcbiAgICAgICAgcmV0dXJuIChmb3JtW2luZGV4XS5nZXQoJ25hbWUnKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGRQYXJhbUJ1dHRvbigpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtID0gdGhpcy5pbml0UGFyYW1ldGVyKHRydWUpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkucHVzaChmb3JtKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0SXNUZXh0KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd0ZXh0J1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzTWVkaWEoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ21lZGlhJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzVGVtcGxhdGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdjaGFubmVsJyk/LnZhbHVlICYmXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gJ3RlbXBsYXRlJ1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGdldElzQ2F0YWxvZ3VlKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICdjYXRhbG9ndWUnXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgZ2V0SXNVdGlsaXR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnY2hhbm5lbCcpPy52YWx1ZSAmJlxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2NoYW5uZWwnKT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09ICd1dGlsaXR5J1xyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5leHRBY2NvdW50QmF0Y2goKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzSGF2ZU5leHRBY2NvdW50T3B0aW9uKSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMucGFnZU5vQWNjb3VudE9wdGlvbiArPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudE9wdGlvblNlcnZpY2UoJycsIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhY2NvdW50U2VsZWN0ZWREaXNwbGF5KFxyXG4gICAgICAgIGF0dHJpYnV0ZTE6IFdoYXRzQXBwQWNjb3VudER0byxcclxuICAgICAgICBhdHRyaWJ1dGUyOiBXaGF0c0FwcEFjY291bnREdG9cclxuICAgICk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZTEgJiYgYXR0cmlidXRlMiAmJiBhdHRyaWJ1dGUxLmlkID09IGF0dHJpYnV0ZTIuaWRcclxuICAgICAgICAgICAgPyBgJHthdHRyaWJ1dGUxLm5hbWV9ICgke2F0dHJpYnV0ZTEuYWNjb3VudE5vfSlgXHJcbiAgICAgICAgICAgIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE5leHRUZW1wbGF0ZUJhdGNoKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0hhdmVOZXh0VGVtcGxhdGVPcHRpb24pIHJldHVybjtcclxuXHJcbiAgICAgICAgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiArPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0VGVtcGxhdGVPcHRpb25TZXJ2aWNlKG51bGwsICcnLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgdGVtcGxhdGVTZWxlY3RlZERpc3BsYXkoXHJcbiAgICAgICAgYXR0cmlidXRlMTogVGVtcGxhdGVXQU1vZGVsLFxyXG4gICAgICAgIGF0dHJpYnV0ZTI6IFRlbXBsYXRlV0FNb2RlbFxyXG4gICAgKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gYXR0cmlidXRlMSAmJiBhdHRyaWJ1dGUyICYmIGF0dHJpYnV0ZTEubmFtZSA9PSBhdHRyaWJ1dGUyLm5hbWVcclxuICAgICAgICAgICAgPyBgJHthdHRyaWJ1dGUxLm5hbWV9YFxyXG4gICAgICAgICAgICA6ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkZpbGVTZWxlY3RlZChldmVudDogRXZlbnQpIHtcclxuICAgICAgICBjb25zdCBmaWxlOiBGaWxlTGlzdCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuZmlsZXM7XHJcbiAgICAgICAgY29uc3QgYWNjZXB0ID0gdGhpcy5leHRGaWxlQWNjZXB0ZWQuc3BsaXQoJy8nKTtcclxuICAgICAgICBsZXQgbWF0Y2hUeXBlID0gYWNjZXB0WzBdO1xyXG5cclxuICAgICAgICBpZiAoZmlsZS5sZW5ndGggPT09IDApIHJldHVybjtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZXh0RmlsZUFjY2VwdGVkID09PSAnYXBwbGljYXRpb24vcGRmJykgbWF0Y2hUeXBlID0gYWNjZXB0WzFdO1xyXG5cclxuICAgICAgICBpZiAoIWZpbGVbMF0udHlwZS5pbmNsdWRlcyhtYXRjaFR5cGUpKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKCdTb3JyeSwgdGhlIGZpbGUgeW91IGFyZSB1cGxvYWRpbmcgaXMgbm90wqBhbGxvd2VkJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmaWxlWzBdLnNpemUgPiAxMDAwMDAwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignVXBsb2FkIG1lZGlhIGZhaWxlZCwgbWF4IHNpemUgMTBtYicpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGUnKT8uc2V0VmFsdWUoZmlsZVswXSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCdmaWxlVHlwZScpPy5zZXRWYWx1ZSgnaW1hZ2UnKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGVOYW1lJyk/LnNldFZhbHVlKGZpbGVbMF0ubmFtZSk7XHJcbiAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RhcmdldFVSTCcpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgIGlmIChmaWxlWzBdLnR5cGUuaW5kZXhPZigndmlkZW8nKSA+IC0xKSB0aGlzLmdldENvbnRyb2woJ2ZpbGVUeXBlJyk/LnNldFZhbHVlKCd2aWRlbycpO1xyXG5cclxuICAgICAgICB0aGlzLnVwbG9hZE1lZGlhU2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBsb2FkTWVkaWFTZXJ2aWNlKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHBhcmFtZXRlckxpc3Q6IEFycmF5PFBhcmFtZXRlcj4gPSBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICdmaWxlJyxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmdldENvbnRyb2woJ2ZpbGUnKT8udmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpbjogJ2Zvcm1EYXRhJyxcclxuICAgICAgICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIF07XHJcblxyXG4gICAgICAgIGNvbnN0IHN1YnMgPSB0aGlzLmFwaUFkYXB0ZXJTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5leGVjdXRlQXBpUmVxdWVzdChwYXJhbWV0ZXJMaXN0LCAnL21lc3NhZ2UvbWVkaWEnLCAnUE9TVCcpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3A6IEFwcFJlc3BvbnNlPGFueT4pID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0YXJnZXRVUkwnKT8uc2V0VmFsdWUocmVzcC5kYXRhLnRhcmdldFVSTCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2ZpbGUnKT8ucmVzZXQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKCdVcGxvYWQgbWVkaWEgc3VjY2VzcycpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5wdXNoKHN1YnMpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBidXR0b25QYXJhbXNDb250cm9scygpIHtcclxuICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5mb3JtLmdldCgnYnV0dG9uUGFyYW1zJykgYXMgRm9ybUFycmF5O1xyXG4gICAgICAgIHJldHVybiBjb250cm9sID8gY29udHJvbC5jb250cm9scyA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBpc1VzaW5nRXhjZWxCdWxrKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnZhbHVlIHx8IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVUZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGVXQU1vZGVsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5pc1Nob3dQYXJhbWV0ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgaWYgKCF0ZW1wbGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBmb3JtU3RvcmFnZSA9IHRoaXMuZ2V0Q2FtcGFpZ25TdG9yYWdlPy5nZW5lcmFsSW5mb3JtYXRpb24/LmZvcm07XHJcbiAgICAgICAgY29uc3Qgc2F2ZWRCdXR0b25QYXJhbXMgPSBmb3JtU3RvcmFnZT8uYnV0dG9uUGFyYW1zIHx8IFtdO1xyXG5cclxuICAgICAgICBjb25zdCBidXR0b25QYXJhbXNBcnJheSA9IHRoaXMuZm9ybS5nZXQoJ2J1dHRvblBhcmFtcycpIGFzIEZvcm1BcnJheTtcclxuICAgICAgICBidXR0b25QYXJhbXNBcnJheS5jbGVhcigpO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuYnV0dG9ucyAmJiB0ZW1wbGF0ZS5idXR0b25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgcXVpY2tSZXBseUJ1dHRvbnMgPSB0ZW1wbGF0ZS5idXR0b25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChidG46IGFueSkgPT4gYnRuLnR5cGUgPT09ICdRVUlDS19SRVBMWSdcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHF1aWNrUmVwbHlCdXR0b25zLmZvckVhY2goKGJ0bjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ1BheWxvYWQgPSBzYXZlZEJ1dHRvblBhcmFtc1tpbmRleF0/LnBheWxvYWQgfHwgJyc7XHJcbiAgICAgICAgICAgICAgICBidXR0b25QYXJhbXNBcnJheS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIG5ldyBGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogbmV3IEZvcm1Db250cm9sKGJ0bi50ZXh0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDogbmV3IEZvcm1Db250cm9sKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBleGlzdGluZ1BheWxvYWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IHRoaXMuaXNSZWFkT25seU1vZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW1ZhbGlkYXRvcnMubWF4TGVuZ3RoKDI1NildXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5pc0hhdmVUZW1wbGF0ZVBhcmFtID1cclxuICAgICAgICAgICAgKHRlbXBsYXRlLmhlYWRlcj8uZXhhbXBsZXM/Lmxlbmd0aCA/PyAwKSA+IDAgfHxcclxuICAgICAgICAgICAgKHRlbXBsYXRlLmJvZHk/LmV4YW1wbGVzPy5sZW5ndGggPz8gMCkgPiAwIHx8XHJcbiAgICAgICAgICAgICh0ZW1wbGF0ZS5idXR0b25zPy5sZW5ndGggPz8gMCkgPiAwO1xyXG5cclxuICAgICAgICBpZiAoWydpbWFnZScsICd2aWRlbycsICdkb2N1bWVudCddLmluY2x1ZGVzKHRlbXBsYXRlPy5oZWFkZXI/LnR5cGU/LnRvTG93ZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnZmlsZU5hbWUnKT8uc2V0VmFsdWUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldENhbXBhaWduU3RvcmFnZT8uZ2VuZXJhbEluZm9ybWF0aW9uPy5mb3JtLmZpbGVOYW1lID8/XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybS50YXJnZXRVUkwgPz9cclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZS5oZWFkZXIudXJsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGFyZ2V0VVJMJyk/LnNldFZhbHVlKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDYW1wYWlnblN0b3JhZ2U/LmdlbmVyYWxJbmZvcm1hdGlvbj8uZm9ybS50YXJnZXRVUkwgPz8gdGVtcGxhdGUuaGVhZGVyLnVybFxyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5maWxlVHlwZUNoYW5nZSh0ZW1wbGF0ZT8uaGVhZGVyPy50eXBlPy50b0xvd2VyQ2FzZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgICh0ZW1wbGF0ZS5oZWFkZXIuZXhhbXBsZXM/Lmxlbmd0aCA/PyAwKSA+IDBcclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgICAgOiB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgICAgICAodGVtcGxhdGUuYm9keS5leGFtcGxlcz8ubGVuZ3RoID8/IDApID4gMFxyXG4gICAgICAgICAgICA/IHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgICAgOiB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuXHJcbiAgICAgICAgKHRlbXBsYXRlLmJ1dHRvbnM/Lmxlbmd0aCA/PyAwKSA+IDBcclxuICAgICAgICAgICAgPyB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZClcclxuICAgICAgICAgICAgOiB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgICAgICAodGhpcy5mb3JtLmdldCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgKHRoaXMuZm9ybS5nZXQoJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5KS5jb250cm9scyA9IFtdO1xyXG4gICAgICAgICh0aGlzLmZvcm0uZ2V0KCdwYXJhbUJ1dHRvbicpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbHVlKCcnKTtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG5cclxuICAgICAgICBpZiAodGVtcGxhdGUuY2F0ZWdvcnkgPT09ICdBVVRIRU5USUNBVElPTicpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5zZXRWYWx1ZShcclxuICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5vdHBWYWx1ZSA/P1xyXG4gICAgICAgICAgICAgICAgICAgIFsuLi4oZm9ybVN0b3JhZ2U/LnRlbXBsYXRlPy5ib2R5Py5leGFtcGxlcyA/PyBbXSldPy5wb3AoKSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ290cFZhbHVlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGVtcGxhdGUuaGVhZGVyLmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFkZFBhcmFtSGVhZGVyKFxyXG4gICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtSGVhZGVyPy5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUhlYWRlcj8uW2luZGV4XSA/PyAnJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0ZW1wbGF0ZS5ib2R5LmV4YW1wbGVzPy5mb3JFYWNoKChlYWNoLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgcGFyYW1WYWx1ZSA9XHJcbiAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1Cb2R5Py5baW5kZXhdPy5uYW1lID8/IGZvcm1TdG9yYWdlPy5wYXJhbUJvZHk/LltpbmRleF0gPz8gJyc7XHJcblxyXG4gICAgICAgICAgICBpZiAoWyckVW5zdWJzY3JpYmVBY2NvdW50J10uaW5jbHVkZXMoZWFjaCkpIHBhcmFtVmFsdWUgPSBlYWNoO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRQYXJhbUJvZHkocGFyYW1WYWx1ZSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRlbXBsYXRlLmJ1dHRvbnM/LmZvckVhY2goKGVhY2gsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkUGFyYW1CdXR0b24oKTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gdGhpcy5nZXRCdXR0b247XHJcblxyXG4gICAgICAgICAgICBpZiAoZWFjaC5leGFtcGxlcz8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZWFjaC5leGFtcGxlcy5mb3JFYWNoKChfLCBwYXJhbUluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm0gPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWFjaC50eXBlID09PSAnRkxPVycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybSA9IHRoaXMuaW5pdFBhcmFtZXRlcihmYWxzZSwgZWFjaC5mbG93X2lkKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzU2hvd1BhcmFtZXRlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm0gPSB0aGlzLmluaXRQYXJhbWV0ZXIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1TdG9yYWdlPy5wYXJhbUJ1dHRvbj8uW2luZGV4XT8ubmFtZT8uW3BhcmFtSW5kZXhdPy5uYW1lID8/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVN0b3JhZ2U/LnBhcmFtQnV0dG9uPy5baW5kZXhdPy5uYW1lPy5bcGFyYW1JbmRleF0gPz9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtU3RvcmFnZT8ucGFyYW1CdXR0b24/LltpbmRleF0/LltwYXJhbUluZGV4XSA/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAoYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXS5nZXQoJ25hbWUnKSBhcyBGb3JtQXJyYXkpLnB1c2goZm9ybSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RDb250cm9sID0gYnV0dG9uW2J1dHRvbi5sZW5ndGggLSAxXT8uZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgICAgICBsYXN0Q29udHJvbD8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZU1lZGlhVHlwZShfbWVkaWFUeXBlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoX21lZGlhVHlwZSA9PT0gRW51bURhdGEuTUVESUFfVFlQRV9MT0NBVElPTikgdGhpcy5pbml0TWFwcztcclxuXHJcbiAgICAgICAgdGhpcy5mb3JtUmVzZXQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5maWxlVHlwZUNoYW5nZShfbWVkaWFUeXBlLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlsZVR5cGVDaGFuZ2UodHlwZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnaW1hZ2UvKic7XHJcblxyXG4gICAgICAgIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX1ZJREVPLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAndmlkZW8vKic7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBFbnVtRGF0YS5NRURJQV9UWVBFX0RPQ1VNRU5ULnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgdGhpcy5leHRGaWxlQWNjZXB0ZWQgPSAnYXBwbGljYXRpb24vcGRmJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVNlYXJjaChzZWFyY2hWYWx1ZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wYWdlTm9UZW1wbGF0ZU9wdGlvbiA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXRUZW1wbGF0ZU9wdGlvblNlcnZpY2UobnVsbCwgc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVTZWFyY2hBY2NvdW50KHNlYXJjaFZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnBhZ2VOb0FjY291bnRPcHRpb24gPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0QWNjb3VudE9wdGlvblNlcnZpY2Uoc2VhcmNoVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgaW5pdE1hcHMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyLmxvYWQoKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcclxuICAgICAgICAgICAgY29uc3QgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hcFNlYXJjaFJlZi5uYXRpdmVFbGVtZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGF1dG9jb21wbGV0ZS5hZGRMaXN0ZW5lcigncGxhY2VfY2hhbmdlZCcsICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCA9IGF1dG9jb21wbGV0ZS5nZXRQbGFjZSgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXBsYWNlLmdlb21ldHJ5KSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sYXRpdHVkZSA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwbGFjZS5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnNldFZhbHVlKHRoaXMubWFwcy5sYXRpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDdXJyZW50TG9jYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZ2V0Q29udHJvbCgnbG9uZ2l0dWRlJyk/LnZhbHVlICYmICF0aGlzLmdldENvbnRyb2woJ2xhdGl0dWRlJyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXBzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ2xvbmdpdHVkZScpPy5zZXRWYWx1ZSh0aGlzLm1hcHMubG9uZ2l0dWRlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtYXJrZXJEcmFnRW5kKGV2ZW50OiBnb29nbGUubWFwcy5Nb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgaWYgKGV2ZW50LmxhdExuZykge1xyXG4gICAgICAgICAgICB0aGlzLm1hcHMubGF0aXR1ZGUgPSBldmVudC5sYXRMbmcubGF0KCk7XHJcbiAgICAgICAgICAgIHRoaXMubWFwcy5sb25naXR1ZGUgPSBldmVudC5sYXRMbmcubG5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnbGF0aXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxhdGl0dWRlKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdsb25naXR1ZGUnKT8uc2V0VmFsdWUodGhpcy5tYXBzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVEb3dubG9hZENTVihpc0NoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzVXBsb2FkJyk/LnNldFZhbHVlKGlzQ2hlY2tlZCk7XHJcblxyXG4gICAgICAgIGlmIChpc0NoZWNrZWQpIHtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1IZWFkZXInKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICAodGhpcy5nZXRDb250cm9sKCdwYXJhbUJvZHknKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpIGFzIEZvcm1BcnJheSkucmVzZXQoKTtcclxuICAgICAgICAgICAgKHRoaXMuZ2V0Q29udHJvbCgncGFyYW1CdXR0b24nKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzID0gW107XHJcbiAgICAgICAgICAgICh0aGlzLmdldENvbnRyb2woJ3BhcmFtQnV0dG9uJykgYXMgRm9ybUFycmF5KS5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtSGVhZGVyJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3BhcmFtQm9keScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUhlYWRlcicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgncGFyYW1Cb2R5Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdwYXJhbUJ1dHRvbicpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgnb3RwVmFsdWUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCdvdHBWYWx1ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVUZW1wbGF0ZSh0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlQ2hhbmdlVGVtcGxhdGUodXNlRXhpc3Rpbmc6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdldENvbnRyb2woJ2lzRG93bmxvYWRWYXJpYWJsZVhMUycpPy5zZXRWYWx1ZShmYWxzZSk7XHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMuY2xlYXIoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlRG93bmxvYWRYTFMoZmFsc2UpO1xyXG5cclxuICAgICAgICBpZiAodXNlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICAgICAgICAvL3RoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5yZXNldCgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGV4dCcpPy5zZXRWYWx1ZSgnSGFsbyB7ezF9fSwgaW5pIGFkYWxhaCBrb2RlIHZlcmlmaWthc2kga2FtdToge3syfX0nKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1OYW1lOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMudmFyaWFibGVzLnB1c2goXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJhbU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZCksXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0Q29udHJvbCgndGVtcGxhdGUnKT8ucmVzZXQoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZW1wbGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk/LnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFZhbGlkYXRvcnMubWF4KDEwMjQpXSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RleHQnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB0aGlzLmdldENvbnRyb2woJ3RlbXBsYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUNoYW5nZUZyb20odmFsdWU6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHsgaXNVc2VFeGlzdGluZ1RlbXBsYXRlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKCFpc1VzZUV4aXN0aW5nVGVtcGxhdGUpIHJldHVybjtcclxuICAgICAgICB0aGlzLmdldFRlbXBsYXRlT3B0aW9uU2VydmljZSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHZhcmlhYmxlcygpOiBGb3JtQXJyYXkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldENvbnRyb2woJ3ZhcmlhYmxlcycpIGFzIEZvcm1BcnJheTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRWYXJpYWJsZSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCB2YXJpYWJsZUdyb3VwID0gbmV3IEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIHBhcmFtTmFtZTogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy52YXJpYWJsZXMucHVzaCh2YXJpYWJsZUdyb3VwKTtcclxuXHJcbiAgICAgICAgY29uc3QgdGV4dENvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woJ3RleHQnKTtcclxuXHJcbiAgICAgICAgaWYgKHRleHRDb250cm9sKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWUgfHwgJyc7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1NlcXVlbmNlID0gYHt7JHt0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGh9fX1gO1xyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShgJHtjdXJyZW50Qm9keX0gJHtuZXdTZXF1ZW5jZX1gLnRyaW0oKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVZhcmlhYmxlKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZhcmlhYmxlcy5yZW1vdmVBdChpbmRleCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnZhcmlhYmxlcy5jb250cm9scy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRDb250cm9sKCd1c2VYbHN4Jyk/LnNldFZhbHVlKGZhbHNlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRleHRDb250cm9sID0gdGhpcy5nZXRDb250cm9sKCd0ZXh0Jyk7XHJcblxyXG4gICAgICAgIGlmICh0ZXh0Q29udHJvbCAmJiB0ZXh0Q29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCB0YXJnZXRTZXF1ZW5jZSA9IGluZGV4ICsgMTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRCb2R5ID0gdGV4dENvbnRyb2wudmFsdWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByZW1vdmVSZWdleCA9IG5ldyBSZWdFeHAoYFxcXFxzKlxcXFx7XFxcXHske3RhcmdldFNlcXVlbmNlfVxcXFx9XFxcXH1gLCAnZycpO1xyXG4gICAgICAgICAgICBjdXJyZW50Qm9keSA9IGN1cnJlbnRCb2R5LnJlcGxhY2UocmVtb3ZlUmVnZXgsICcnKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJlbnRCb2R5ID0gY3VycmVudEJvZHkucmVwbGFjZSgvXFx7XFx7KFxcZCspXFx9XFx9L2csIChtYXRjaDogbnVtYmVyLCBudW1TdHI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbnVtID0gcGFyc2VJbnQobnVtU3RyLCAxMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtID4gdGFyZ2V0U2VxdWVuY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYHt7JHtudW0gLSAxfX19YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaDtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0ZXh0Q29udHJvbC5zZXRWYWx1ZShjdXJyZW50Qm9keS50cmltKCkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVWYXJpYWJsZURvd25sb2FkWExTKGlzQ2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlc0FycmF5ID0gdGhpcy52YXJpYWJsZXM7XHJcbiAgICAgICAgaWYgKGlzQ2hlY2tlZCkge1xyXG4gICAgICAgICAgICB2YXJpYWJsZXNBcnJheS5jb250cm9scy5mb3JFYWNoKChjb250cm9sKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb250cm9sLmdldCgncGFyYW1OYW1lJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICAgICAgICAgICAgY29udHJvbC5nZXQoJ3BhcmFtTmFtZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHZhcmlhYmxlc0FycmF5LmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuICAgICAgICAgICAgICAgIGNvbnRyb2wuZ2V0KCdwYXJhbU5hbWUnKT8udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZm9ybS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVycy5mb3JFYWNoKChlYWNoKSA9PiBlYWNoLnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|