ca-components 1.2.17 → 1.2.19
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/esm2022/lib/components/ca-input/config/ca-input.config.mjs +1 -1
- package/esm2022/lib/components/ca-input-dropdown/ca-input-dropdown.component.mjs +13 -52
- package/fesm2022/ca-components.mjs +12 -51
- package/fesm2022/ca-components.mjs.map +1 -1
- package/lib/components/ca-input/config/ca-input.config.d.ts +1 -1
- package/lib/components/ca-input-dropdown/ca-input-dropdown.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -205,7 +205,10 @@ export class CaInputDropdownComponent {
|
|
|
205
205
|
return this.superControl.control;
|
|
206
206
|
}
|
|
207
207
|
writeValue(value) {
|
|
208
|
-
const
|
|
208
|
+
const findInOptions = this.inputConfig.searchinGroupIndex
|
|
209
|
+
? this.getMainGroup()
|
|
210
|
+
: this._options;
|
|
211
|
+
const findOption = findInOptions.find((option) => option[this.optionValue] == value);
|
|
209
212
|
if (findOption) {
|
|
210
213
|
this.setDropdownValue(findOption);
|
|
211
214
|
}
|
|
@@ -574,6 +577,13 @@ export class CaInputDropdownComponent {
|
|
|
574
577
|
this.selectedItem.emit(this._activeItem);
|
|
575
578
|
}
|
|
576
579
|
}
|
|
580
|
+
getMainGroup() {
|
|
581
|
+
let mainGroup = [];
|
|
582
|
+
this._options.map((groups) => {
|
|
583
|
+
mainGroup.push(...groups[this.inputConfig.searchinGroupIndex]);
|
|
584
|
+
});
|
|
585
|
+
return mainGroup;
|
|
586
|
+
}
|
|
577
587
|
dropDownKeyNavigation({ keyCode, data, }) {
|
|
578
588
|
// Navigate down
|
|
579
589
|
if (keyCode === 40) {
|
|
@@ -583,38 +593,11 @@ export class CaInputDropdownComponent {
|
|
|
583
593
|
if (keyCode === 38) {
|
|
584
594
|
this.dropdownNavigation(-1);
|
|
585
595
|
}
|
|
586
|
-
// Press Escape
|
|
587
|
-
if (keyCode === 27) {
|
|
588
|
-
// if (this.inputConfig?.commands?.active) {
|
|
589
|
-
// this.inputConfig.commands = undefined;
|
|
590
|
-
// this.inputRef.isVisibleCommands = false;
|
|
591
|
-
// this.inputRef.isFocusInput = false;
|
|
592
|
-
// }
|
|
593
|
-
// if (this.inputConfig.dropdownLabel) {
|
|
594
|
-
// this.getSuperControl?.setErrors(null);
|
|
595
|
-
// // this.inputConfig.dropdownLabelNew = false;
|
|
596
|
-
// // this.inputConfig.commands!.active = false;
|
|
597
|
-
// // if (!this.inputConfig.hideColorValidations) {
|
|
598
|
-
// // this.inputConfig.blackInput = false;
|
|
599
|
-
// // }
|
|
600
|
-
// this.inputRef.isFocusInput = false;
|
|
601
|
-
// this.inputRef.isEditInput = false;
|
|
602
|
-
// this.inputRef.inputElement.nativeElement.blur();
|
|
603
|
-
// if (this.labelMode === 'Color') {
|
|
604
|
-
// this.getSuperControl!.patchValue(null);
|
|
605
|
-
// this.selectedLabelMode.emit('Label');
|
|
606
|
-
// }
|
|
607
|
-
// }
|
|
608
|
-
}
|
|
609
596
|
// Press 'enter'
|
|
610
597
|
if (keyCode === 13) {
|
|
611
598
|
let selectedItem;
|
|
612
599
|
if (this.inputConfig.searchinGroupIndex) {
|
|
613
|
-
let mainGroup =
|
|
614
|
-
this._options.map((groups) => {
|
|
615
|
-
mainGroup.push(...groups[this.inputConfig
|
|
616
|
-
.searchinGroupIndex]);
|
|
617
|
-
});
|
|
600
|
+
let mainGroup = this.getMainGroup();
|
|
618
601
|
selectedItem = mainGroup[this.inputHoveredItem];
|
|
619
602
|
}
|
|
620
603
|
else {
|
|
@@ -638,31 +621,9 @@ export class CaInputDropdownComponent {
|
|
|
638
621
|
if (keyCode === 9) {
|
|
639
622
|
if (!this.popoverRef.isOpen())
|
|
640
623
|
this.popoverRef?.open();
|
|
641
|
-
return;
|
|
642
|
-
//this.popoverRef.open();
|
|
643
|
-
//return;
|
|
644
|
-
if (this._options.length === 1 &&
|
|
645
|
-
this._options[0].id !== 7655 &&
|
|
646
|
-
this._options[0].id !== 7654) {
|
|
647
|
-
// let selectedItem = null;
|
|
648
|
-
// if (this._template === 'fuel-franchise') {
|
|
649
|
-
// selectedItem = this._options[0]?.businessName
|
|
650
|
-
// ? this._options[0]?.businessName
|
|
651
|
-
// : this._options[0]?.name;
|
|
652
|
-
// } else {
|
|
653
|
-
// selectedItem = this._options[0]?.number
|
|
654
|
-
// ? this._options[0]?.number.toString().trim()
|
|
655
|
-
// : this._options[0].name!.toString().trim();
|
|
656
|
-
// }
|
|
657
|
-
// this.pickupElementWithKeyboard(selectedItem, data);
|
|
658
|
-
}
|
|
659
|
-
else {
|
|
660
|
-
this.popoverRef.open();
|
|
661
|
-
}
|
|
662
624
|
}
|
|
663
625
|
}
|
|
664
626
|
setDropdownValue(option, optionValue, label) {
|
|
665
|
-
console.log('WHAT IS OPTION', option);
|
|
666
627
|
const optValue = optionValue ? optionValue : this.optionValue;
|
|
667
628
|
const lbel = label ? label : this.label;
|
|
668
629
|
const controlValue = optValue
|
|
@@ -935,4 +896,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
935
896
|
type: Output,
|
|
936
897
|
args: ['searchInputEvent']
|
|
937
898
|
}] } });
|
|
938
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLElBQUksRUFDSixPQUFPLEVBQ1AsU0FBUyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsWUFBWTtBQUNaLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsU0FBUyxHQUNaLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsWUFBWTtBQUNaLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDeEksT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sb0dBQW9HLENBQUM7QUFDL0osT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNEZBQTRGLENBQUM7QUFDcEosT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFDM0ksT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFDdkosT0FBTyxFQUFFLCtDQUErQyxFQUFFLE1BQU0sZ0hBQWdILENBQUM7QUFDakwsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDMUgsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDekksT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDMUgsT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sb0dBQW9HLENBQUM7QUFDL0osT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sb0dBQW9HLENBQUM7QUFDL0osT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFDM0ksT0FBTyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sc0dBQXNHLENBQUM7QUFDbEssT0FBTyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sc0dBQXNHLENBQUM7QUFDbEssT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFDdkosT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMEZBQTBGLENBQUM7QUFDakosT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sOEVBQThFLENBQUM7QUFDaEksT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sOEZBQThGLENBQUM7QUFDdkosT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sMEZBQTBGLENBQUM7QUFDakosT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sMElBQTBJLENBQUM7QUFDek0sT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNEhBQTRILENBQUM7QUFDcEwsT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sb0pBQW9KLENBQUM7QUFDbk4sT0FBTyxFQUFFLDBDQUEwQyxFQUFFLE1BQU0sd0lBQXdJLENBQUM7QUFFcE0sUUFBUTtBQUNSLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQ0gsaUJBQWlCLEVBQ2pCLHlCQUF5QixFQUN6QixpQ0FBaUMsR0FDcEMsTUFBTSxTQUFTLENBQUM7QUFFakIsVUFBVTtBQUNWLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXhELGFBQWE7QUFDYixPQUFPLEVBRUgsV0FBVyxFQUNYLFdBQVcsRUFFWCxtQkFBbUIsR0FDdEIsTUFBTSxnQkFBZ0IsQ0FBQztBQVN4QixhQUFhO0FBQ2IsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sOENBQThDLENBQUM7QUFFdEYsUUFBUTtBQUNSLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUV2RSxVQUFVO0FBQ1YsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTdDLGFBQWE7QUFDYixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN2RyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUN6RixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUVwRixPQUFPLEVBQUUsNkNBQTZDLEVBQUUsTUFBTSxvSkFBb0osQ0FBQzs7Ozs7OztBQXNEbk4sTUFBTSxPQUFPLHdCQUF3QjtJQTBCakMsSUFBYSxRQUFRLENBQUMsS0FBYTtRQUMvQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUN2Qiw2REFBNkQ7UUFDN0QscURBQXFEO1FBQ3JELGdEQUFnRDtRQUNoRCx1REFBdUQ7UUFDdkQsYUFBYTtRQUNiLG9FQUFvRTtRQUNwRSw2Q0FBNkM7UUFDN0Msd0RBQXdEO1FBRXhELDhDQUE4QztRQUM5QyxzQ0FBc0M7UUFDdEMsc0NBQXNDO1FBQ3RDLG1CQUFtQjtRQUNuQixVQUFVO1FBQ1YsSUFBSTtJQUNSLENBQUM7SUFJRCxJQUFhLFNBQVMsQ0FBQyxLQUFjO1FBQ2pDLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUMsQ0FBQywwQkFBMEI7SUFFNUIsSUFBVyxTQUFTO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBTUQsSUFBYSxJQUFJLENBQUMsS0FBYTtRQUMzQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztJQUN2QixDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ1gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxJQUFhLFVBQVUsQ0FBQyxLQUF5QjtRQUM3Qyx1QkFBdUI7UUFDdkIsMkJBQTJCO1FBQzNCLHdCQUF3QjtRQUN4QixLQUFLO1FBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFFekIsZUFBZTtRQUNmLE9BQU87UUFDUCwrQkFBK0I7UUFDL0IsaUVBQWlFO1FBQ2pFLHVCQUF1QjtRQUN2QixNQUFNO1FBQ04sc0RBQXNEO1FBQ3RELDRDQUE0QztRQUM1QyxxREFBcUQ7UUFDckQsYUFBYTtRQUNiLFFBQVE7UUFFUixvREFBb0Q7UUFDcEQseURBQXlEO1FBQ3pELHNDQUFzQztRQUN0QywwQ0FBMEM7UUFDMUMsd0NBQXdDO1FBQ3hDLG9CQUFvQjtRQUNwQiwwQ0FBMEM7UUFDMUMsbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixJQUFJO1FBQ0oscUJBQXFCO1FBQ3JCLFNBQVM7UUFDVCw4QkFBOEI7UUFDOUIseURBQXlEO1FBQ3pELGdEQUFnRDtRQUNoRCxnQ0FBZ0M7UUFDaEMsc0NBQXNDO1FBQ3RDLG9DQUFvQztRQUNwQyxzQ0FBc0M7UUFDdEMsdURBQXVEO1FBQ3ZELGlCQUFpQjtRQUVqQiw0REFBNEQ7UUFDNUQsMENBQTBDO1FBQzFDLDhDQUE4QztRQUM5Qyw0Q0FBNEM7UUFDNUMsd0JBQXdCO1FBQ3hCLGdCQUFnQjtRQUNoQiwwQ0FBMEM7UUFDMUMsbUJBQW1CO1FBQ25CLFFBQVE7UUFDUixJQUFJO0lBQ1IsQ0FBQztJQUVELElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDNUIsQ0FBQztJQU9ELElBQWEsT0FBTyxDQUFDLE1BQXFCO1FBQ3RDLElBQUksTUFBTTtZQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsSUFBYSx1QkFBdUIsQ0FBQyxNQUFxQjtRQUN0RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZELE9BQU87WUFDWCxDQUFDO1lBRUQsSUFBSSxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNuQyxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztJQW1FRCxZQUNtQixZQUF1QixFQUMvQixrQkFBc0MsRUFDckMsS0FBd0IsRUFDeEIsUUFBbUI7UUFIWixpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUMvQix1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQVc7UUF6TS9CLHFCQUFnQixHQUFXLENBQUMsQ0FBQyxDQUFDO1FBQzlCLG1CQUFjLEdBQVksS0FBSyxDQUFDO1FBSWhDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUF5RzVCLHFFQUFxRTtRQUM5RCxhQUFRLEdBQWtCLEVBQUUsQ0FBQztRQXlCMUIsaUJBQVksR0FDbEIsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDakMsa0JBQWEsR0FDbkIsSUFBSSxZQUFZLEVBQXdCLENBQUM7UUFDbkMsc0JBQWlCLEdBQ3ZCLElBQUksWUFBWSxFQUFzQixDQUFDO1FBQ2pDLHNCQUFpQixHQUN2QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ3JCLGtCQUFhLEdBQ25CLElBQUksWUFBWSxFQUFXLENBQUM7UUFDdEIsYUFBUSxHQUdiLElBQUksWUFBWSxFQUFnRCxDQUFDO1FBQzVELG1CQUFjLEdBQ3BCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDdEIseUJBQW9CLEdBQzFCLElBQUksWUFBWSxFQUFXLENBQUM7UUFDVixvQkFBZSxHQUNqQyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ1IscUJBQWdCLEdBQ25DLElBQUksWUFBWSxFQUFlLENBQUM7UUFDVCxvQkFBZSxHQUN0QyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBRUoscUJBQWdCLEdBQ3hDLElBQUksWUFBWSxFQUFVLENBQUM7UUFDL0IsU0FBUztRQUNGLG9CQUFlLEdBQUcsSUFBSSxpQkFBaUIsQ0FDMUMsSUFBSSxFQUNKLElBQUksQ0FBQyxnQkFBZ0IsQ0FDeEIsQ0FBQztRQUVGLGtCQUFrQjtRQUNYLG9CQUFlLEdBQWtCLEVBQUUsQ0FBQztRQUUzQyxhQUFhO1FBQ04scUJBQWdCLEdBQVcsQ0FBQyxDQUFDO1FBRXBDLCtCQUErQjtRQUN4QixxQkFBZ0IsR0FBa0IsRUFBRSxDQUFDO1FBQ3JDLDRCQUF1QixHQUFZLEtBQUssQ0FBQztRQUloRCxXQUFXO1FBQ0osZ0JBQVcsR0FBWSxLQUFLLENBQUM7UUFFcEMsb0NBQW9DO1FBQzVCLHFCQUFnQixHQUFXLENBQUMsQ0FBQyxDQUFDO1FBTS9CLDJCQUFzQixHQUFHLHNCQUFzQixDQUFDO1FBQ2hELDZCQUF3QixHQUFHLHdCQUF3QixDQUFDO1FBRTNELFVBQVU7UUFDRixhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQWVoQyxxQkFBZ0IsR0FBZ0IsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFZdEQsY0FBUyxHQUFHLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQztRQXNyQjVCLDZFQUE2RTtRQUV0RSxrQkFBYSxHQUF1QixFQUFFLENBQUM7UUEzc0IxQyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFDM0MsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUM7SUFDckMsQ0FBQztJQUlELFVBQVUsQ0FBQyxLQUFVO1FBQ2pCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUNqQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFnQyxDQUFDLElBQUksS0FBSyxDQUNyRSxDQUFDO1FBRUYsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUdNLFFBQVEsQ0FBQyxDQUFNLElBQVMsQ0FBQztJQUV6QixnQkFBZ0IsQ0FBQyxFQUFPO1FBQzNCLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxFQUFjO1FBQzVCLElBQUksQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxRQUFRO1FBQ0osY0FBYztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztRQUNuRCxDQUFDO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVk7YUFDN0IsSUFBSSxDQUNELG9CQUFvQixFQUFFLEVBQ3RCLFlBQVksQ0FBQyxFQUFFLENBQUMsRUFDaEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUNQLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQzNCO2FBQ0EsU0FBUyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUM3QixPQUFPO1lBQ1gsQ0FBQztZQUVELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBRTlCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNqRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDL0IsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1osQ0FBQztJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxLQUF5QjtRQUM3QyxNQUFNLE1BQU0sR0FBRyxLQUFvQixDQUFDO1FBRXBDLElBQUksTUFBTSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsWUFBWSxLQUFLLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1lBRTNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELENBQUM7SUFDTCxDQUFDO0lBRU0sWUFBWSxDQUFDLE1BQW1CLEVBQUUsS0FBVztRQUNoRCxJQUNJLElBQUksQ0FBQyxZQUFZO1lBQ2pCLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxXQUFXLEVBQUUsS0FBSyxTQUFTLEVBQ25ELENBQUM7WUFDQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDbkIsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE9BQU87Z0JBQ2hDLFlBQVksRUFBRSxJQUFJO2FBQ3JCLENBQUMsQ0FBQztRQUNQLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxPQUFPO1FBQ1AsZ0RBQWdEO1FBQ2hELE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFDSSxJQUFJLENBQUMsU0FBUyxLQUFLLGdCQUFnQjtZQUNuQyxNQUFNLEVBQUUsV0FBVztZQUNuQixDQUFDLEtBQUssRUFDUixDQUFDO1lBQ0MsT0FBTztRQUNYLENBQUM7UUFDRCx3Q0FBd0M7UUFDeEMsSUFBSSxNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1gsQ0FBQztRQUNELFlBQVk7UUFDWixJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDM0MsT0FBTztRQUNYLENBQUM7UUFDRCxVQUFVO2FBQ0wsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzFCLGlCQUFpQjtZQUNqQixJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLE1BQU0sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQ0QsMEJBQTBCO2lCQUNyQixDQUFDO2dCQUNGLGlCQUFpQjtnQkFDakIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO29CQUNqQyw0Q0FBNEM7b0JBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztvQkFDakMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDckMsNENBQTRDO29CQUM1Qyx3Q0FBd0M7b0JBQ3hDLCtDQUErQztvQkFDL0MsS0FBSztvQkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFDRCxrQkFBa0I7cUJBQ2IsQ0FBQztvQkFDRixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ3hCLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUNELGdCQUFnQjthQUNYLENBQUM7WUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2YsNENBQTRDO1lBQzVDLGtDQUFrQztZQUNsQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDN0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7b0JBQzFCLElBQUksQ0FBQyxlQUFlLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO29CQUNyQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkMsQ0FBQztnQkFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7b0JBQzdCLElBQUksQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDO29CQUU5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDdEQsQ0FBQztZQUNMLENBQUM7WUFDRCxrQ0FBa0M7aUJBQzdCLENBQUM7Z0JBQ0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBRTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQztnQkFFckMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO29CQUM3QyxPQUFPLENBQUMsR0FBRyxDQUNQLFFBQVEsRUFDUixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMvQyxDQUFDO29CQUNGLElBQUksQ0FBQyxlQUFlLEVBQUUsVUFBVSxDQUM1QixNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMvQyxDQUFDO29CQUVGLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUN0QyxJQUFJLENBQUMsZUFBZ0IsQ0FBQyxVQUFVLENBQzVCLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FDNUMsQ0FBQzt3QkFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxDQUFDO3dCQUN0QixLQUFLOzRCQUNELENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztnQ0FDbkIsR0FBRyxNQUFNO2dDQUNULEdBQUcsS0FBSztnQ0FDUixPQUFPLEVBQUUsRUFBRTs2QkFDZCxDQUFDOzRCQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztvQkFDekMsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLEtBQUs7NEJBQ0QsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDO2dDQUNuQixHQUFHLE1BQU07Z0NBQ1QsR0FBRyxLQUFLOzZCQUNYLENBQUM7NEJBQ0osQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO29CQUN6QyxDQUFDO2dCQUNMLENBQUM7WUFDTCxDQUFDO1lBQ0QsSUFBSSxDQUFDLGVBQWUsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUVwQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssZ0JBQWdCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDeEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3QixDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDWixDQUFDO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQixDQUFDLEtBQTBDO1FBQy9ELElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVNLGFBQWE7UUFDaEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzNCLDRDQUE0QztRQUM1QywwQ0FBMEM7UUFFMUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV6QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRU0sa0JBQWtCO1FBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1FBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBRU0sWUFBWSxDQUFDLEtBQW9CO1FBQ3BDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxZQUFZLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLDRDQUE0QztRQUNoRCxDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLGlCQUFpQixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBQ0QsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ3JELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ3RELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUN0QixDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLHdCQUF3QixFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO2dCQUNmLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdEIsTUFBTSxFQUFFLFFBQVE7YUFDbkIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN6QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsRUFBRSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWdCLENBQUMsS0FBSztTQUNwQyxDQUFDO1FBQ0YsNENBQTRDO1FBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUVuQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTlELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNqQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUN4QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVU7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDZixHQUFHLElBQUksQ0FBQyxXQUFXO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLO2dCQUNqQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWU7b0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUU7b0JBQ3pCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLE9BQU87Z0JBQy9CLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZTtvQkFDdkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSTtvQkFDM0IsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsS0FBSztnQkFDN0IsSUFBSSxFQUFFLElBQUksQ0FBQyxlQUFlO29CQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJO29CQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJO2FBQy9CLENBQUM7WUFFRixJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFdBQVcsR0FBRztnQkFDZixHQUFHLElBQUksQ0FBQyxXQUFXO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLO2FBQ3BDLENBQUM7UUFDTixDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7WUFDZixJQUFJLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDdEIsTUFBTSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLFlBQVk7UUFDZixJQUFJLENBQUMsV0FBVyxHQUFHO1lBQ2YsR0FBRyxJQUFJLENBQUMsV0FBVztZQUNuQixRQUFRLEVBQUU7Z0JBQ04sTUFBTSxFQUFFLElBQUk7Z0JBQ1osSUFBSSxFQUFFLGdCQUFnQjtnQkFDdEIsWUFBWSxFQUFFO29CQUNWLEtBQUssRUFBRTt3QkFDSCxJQUFJLEVBQUUsU0FBUzt3QkFDZixlQUFlLEVBQUUsU0FBUztxQkFDN0I7b0JBQ0QsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsR0FBRyxFQUFFLHNCQUFzQixDQUFDLGNBQWM7aUJBQzdDO2dCQUNELGFBQWEsRUFBRTtvQkFDWCxLQUFLLEVBQUU7d0JBQ0gsSUFBSSxFQUFFLFFBQVE7d0JBQ2QsZUFBZSxFQUFFLFNBQVM7cUJBQzdCO29CQUNELElBQUksRUFBRSxRQUFRO29CQUNkLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQyxTQUFTO2lCQUN4QzthQUNKO1lBQ0QsV0FBVyxFQUFFLEVBQUU7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7UUFFekIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDeEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDN0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ1osQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQWM7UUFDbEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVNLFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBaUI7UUFDNUMsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFtQjtRQUN2QyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNkLE1BQU0sQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1lBQ3BCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXBELE1BQU0sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBRTNCLElBQUksTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFdBQVcsQ0FBQyxLQUFjO1FBQzdCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ25DLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxLQUFjO1FBQ25DLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpDLElBQUksS0FBSyxFQUFFLENBQUM7WUFDUixJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3pCLGlCQUFpQjtZQUVqQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzlCLENBQUM7WUFDRCxrQkFBa0I7aUJBQ2IsQ0FBQztnQkFDRixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDekIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sb0JBQW9CO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRU0sZ0JBQWdCLENBQUMsTUFBZTtRQUNuQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUN2QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsTUFBTSxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7WUFDN0IsWUFBWTtZQUNaLGlCQUFpQjtZQUNqQixpREFBaUQ7WUFDakQsa0NBQWtDO1lBQ2xDLFFBQVE7WUFFUix5RUFBeUU7WUFDekUsOEJBQThCO1lBQzlCLGlFQUFpRTtZQUNqRSxlQUFlO1lBQ2Ysd0RBQXdEO1lBQ3hELGtFQUFrRTtZQUNsRSxhQUFhO1lBRWIsOEJBQThCO1lBQzlCLG9DQUFvQztZQUNwQyxZQUFZO1lBQ1osUUFBUTtZQUNSLGlEQUFpRDtZQUNqRCxvQ0FBb0M7WUFDcEMsUUFBUTtZQUNSLElBQUk7WUFDSixXQUFXO1lBQ1gsU0FBUztZQUNULHVCQUF1QjtZQUN2QiwyQkFBMkI7WUFDM0IsK0NBQStDO1lBQy9DLHdDQUF3QztZQUN4QyxvQ0FBb0M7WUFDcEMsS0FBSztZQUVMLElBQUksQ0FBQyxlQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVyQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztnQkFDbEIsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztZQUM3QixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLHVCQUF1QjtnQkFDdkIsMkJBQTJCO2dCQUMzQix1QkFBdUI7Z0JBQ3ZCLEtBQUs7WUFDVCxDQUFDO1lBQ0QsSUFBSTtRQUNSLENBQUM7UUFFRCxnQkFBZ0I7UUFDaEIsSUFDSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsZUFBZSxDQUFDO1lBQ3ZELENBQUMsTUFBTSxFQUNULENBQUM7WUFDQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsQ0FBQztJQUNMLENBQUM7SUFFTSxxQkFBcUIsQ0FBQyxFQUN6QixPQUFPLEVBQ1AsSUFBSSxHQUlQO1FBQ0csZ0JBQWdCO1FBQ2hCLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixDQUFDO1FBQ0QsY0FBYztRQUNkLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFFRCxlQUFlO1FBQ2YsSUFBSSxPQUFPLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDakIsNENBQTRDO1lBQzVDLDZDQUE2QztZQUM3QywrQ0FBK0M7WUFDL0MsMENBQTBDO1lBQzFDLElBQUk7WUFDSix3Q0FBd0M7WUFDeEMsNkNBQTZDO1lBQzdDLG9EQUFvRDtZQUNwRCxvREFBb0Q7WUFDcEQsdURBQXVEO1lBQ3ZELGtEQUFrRDtZQUNsRCxXQUFXO1lBQ1gsMENBQTBDO1lBQzFDLHlDQUF5QztZQUN6Qyx1REFBdUQ7WUFDdkQsd0NBQXdDO1lBQ3hDLGtEQUFrRDtZQUNsRCxnREFBZ0Q7WUFDaEQsUUFBUTtZQUNSLElBQUk7UUFDUixDQUFDO1FBQ0QsZ0JBQWdCO1FBQ2hCLElBQUksT0FBTyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ2pCLElBQUksWUFBWSxDQUFDO1lBQ2pCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLFNBQVMsR0FBa0IsRUFBRSxDQUFDO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO29CQUN6QixTQUFTLENBQUMsSUFBSSxDQUNWLEdBQUcsTUFBTSxDQUNMLElBQUksQ0FBQyxXQUFXO3lCQUNYLGtCQUF1QyxDQUMvQyxDQUNKLENBQUM7Z0JBQ04sQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsWUFBWSxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUNwRCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osWUFBWTtvQkFDUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO3dCQUN0QixDQUFDLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDN0IsSUFBSSxDQUFDLGdCQUFnQixDQUN4Qjt3QkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUNuQyxDQUFDO1lBRUQsSUFDSSxJQUFJLENBQUMsWUFBWTtnQkFDakIsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLFdBQVcsRUFBRSxLQUFLLFNBQVMsRUFDekQsQ0FBQztnQkFDQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQztvQkFDbkIsRUFBRSxFQUFFLElBQUk7b0JBQ1IsSUFBSSxFQUFFLGtCQUFrQixDQUFDLE9BQU87b0JBQ2hDLFlBQVksRUFBRSxJQUFJO2lCQUNyQixDQUFDLENBQUM7WUFDUCxDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDTCxDQUFDO1FBRUQsSUFBSSxPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO2dCQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDdkQsT0FBTztZQUNQLHlCQUF5QjtZQUN6QixTQUFTO1lBQ1QsSUFDSSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJO2dCQUM1QixJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQzlCLENBQUM7Z0JBQ0MsMkJBQTJCO2dCQUMzQiw2Q0FBNkM7Z0JBQzdDLG9EQUFvRDtnQkFDcEQsMkNBQTJDO2dCQUMzQyxvQ0FBb0M7Z0JBQ3BDLFdBQVc7Z0JBQ1gsOENBQThDO2dCQUM5Qyx1REFBdUQ7Z0JBQ3ZELHNEQUFzRDtnQkFDdEQsSUFBSTtnQkFDSixzREFBc0Q7WUFDMUQsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRU0sZ0JBQWdCLENBQ25CLE1BQW1CLEVBQ25CLFdBQW9CLEVBQ3BCLEtBQWM7UUFFZCxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzlELE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3hDLE1BQU0sWUFBWSxHQUFHLFFBQVE7WUFDekIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUE2QixDQUFDO1lBQ3ZDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFFYixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBeUIsQ0FBQyxJQUFJLFlBQVksQ0FBQztRQUVyRSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztRQUMxQixJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBRXpCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCw4RkFBOEY7SUFDdkYsbUJBQW1CLENBQUMsTUFBbUI7UUFDMUMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxxQ0FBcUM7UUFFckMsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzlELE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3ZDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ3hCLE9BQU87b0JBQ0gsR0FBRyxJQUFJO29CQUNQLE1BQU0sRUFBRSxJQUFJO2lCQUNmLENBQUM7WUFDTixDQUFDO2lCQUFNLENBQUM7Z0JBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztvQkFDZixPQUFPO3dCQUNILEdBQUcsSUFBSTt3QkFDUCxNQUFNLEVBQUUsS0FBSztxQkFDaEIsQ0FBQztnQkFDTixDQUFDO3FCQUFNLENBQUM7b0JBQ0osT0FBTzt3QkFDSCxHQUFHLElBQUk7d0JBQ1AsTUFBTSxFQUFFLElBQUk7cUJBQ2YsQ0FBQztnQkFDTixDQUFDO1lBQ0wsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFcEUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFL0MsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FDOUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQ2hELENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFMUMsSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRO2FBQ3pDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzthQUM3QixLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3BELENBQUM7UUFFRCx1QkFBdUI7UUFDdkIsMkJBQTJCO1FBQzNCLHVDQUF1QztRQUN2QyxLQUFLO0lBQ1QsQ0FBQztJQUVNLHFCQUFxQixDQUFDLEtBQWE7UUFDdEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzlDLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQzlDLE9BQU87b0JBQ0gsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO29CQUMvQixNQUFNLEVBQUUsS0FBSztpQkFDaEIsQ0FBQztZQUNOLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQzlCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUNoRCxDQUFDO1FBRUYsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXZDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDaEMsdUJBQXVCO1lBQ3ZCLDJCQUEyQjtZQUMzQiw0Q0FBNEM7WUFDNUMsS0FBSztZQUVMLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxJQUFJLENBQUM7WUFDdEMsa0RBQWtEO1FBQ3RELENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLHlCQUF5QixHQUFHLElBQUksQ0FBQyxRQUFRO2lCQUN6QyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7aUJBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDbkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9CLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQyxDQUNMLENBQUM7SUFDTixDQUFDO0lBRU0seUJBQXlCLENBQUMsWUFBcUI7UUFDbEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQix1QkFBdUI7UUFDdkIsMkJBQTJCO1FBQzNCLDRDQUE0QztRQUM1QyxLQUFLO1FBRUwsd0NBQXdDO1FBQ3hDLHFCQUFxQjtRQUNyQiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3ZDLE9BQU87Z0JBQ0gsR0FBRyxJQUFJO2dCQUNQLE1BQU0sRUFBRSxLQUFLO2FBQ2hCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU5QixJQUFJLENBQUMseUJBQXlCLEdBQUcsSUFBSSxDQUFDO0lBQzFDLENBQUM7SUFFTSx5QkFBeUI7UUFDNUIsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDO1FBRTdELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0Isd0NBQXdDO1lBQ3hDLCtDQUErQztZQUMvQyxLQUFLO1lBRUwsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ1osQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUM3QixDQUFDO0lBQ0wsQ0FBQztJQUlNLGVBQWUsQ0FBQyxLQUFjLEVBQUUsa0JBQTJCO1FBQzlELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7UUFDN0QsSUFBSSxLQUFLO1lBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsa0JBQWtCO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsa0JBQWtCLElBQUksS0FBSyxDQUFDO1FBQ2pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLElBQUksS0FBSyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCLENBQUMsSUFBWTtRQUNuQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBRTlDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUM7WUFDOUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsQ0FBQzthQUN6QixJQUFJLFFBQVEsR0FBRyxDQUFDO1lBQ2pCLElBQUksQ0FBQyxnQkFBZ0I7Z0JBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzs7WUFDdkQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQztJQUMxQyxDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUN6QixZQUFZLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDNUMsQ0FBQzsrR0FuOEJRLHdCQUF3QjttR0FBeEIsd0JBQXdCLHU5QkE5Q3RCLENBQUMsZUFBZSxDQUFDLCtUQ3BIaEMsMHhwQ0FtekJBO2dCRDVyQlEsU0FBUztnQkFDVCxZQUFZLDRIQUNaLFdBQVcsc0lBQ1gsZ0JBQWdCLHNYQUNoQixtQkFBbUIsaU5BQ25CLFNBQVMsc1dBQ1Qsb0JBQW9CLGlPQUlwQix1Q0FBdUMsMk1BQ3ZDLCtDQUErQyxvTkFDL0MsOEJBQThCLGtMQUM5QixtQ0FBbUMsNk1BQ25DLDhCQUE4QiwyTkFDOUIsa0NBQWtDLHVMQUNsQyx5Q0FBeUMsK0xBQ3pDLHNDQUFzQywwTUFDdEMseUNBQXlDLCtMQUN6Qyx5Q0FBeUMsd0xBQ3pDLG1DQUFtQyx3TEFDbkMsMENBQTBDLGdNQUMxQywwQ0FBMEMsZ01BQzFDLHVDQUF1QywyTUFDdkMscUNBQXFDLG1PQUNyQyxnQ0FBZ0Msb0xBQ2hDLHVDQUF1QyxvTUFDdkMscUNBQXFDLDBMQUNyQyxtQ0FBbUMsNk1BQ25DLGtCQUFrQixxVkFDbEIsNkNBQTZDLDhLQUM3QyxzQ0FBc0MsMElBQ3RDLDZDQUE2Qyx5SkFDN0MsMENBQTBDLDZMQUMxQyw2Q0FBNkM7Z0JBQzdDLFFBQVE7Z0JBQ1IsZUFBZSwrQ0FDZixpQkFBaUIsbURBQ2pCLGlDQUFpQyxpRUFDakMsbUJBQW1CLHlEQUNuQix5QkFBeUIsZ0RBMUNqQixDQUFDLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLENBQUM7OzRGQTZDdEQsd0JBQXdCO2tCQXBEcEMsU0FBUzsrQkFDSSx1QkFBdUIsY0FHckIsSUFBSSxpQkFDRCxpQkFBaUIsQ0FBQyxJQUFJLGFBQzFCLENBQUMsZUFBZSxDQUFDLGNBQ2hCLENBQUMsc0JBQXNCLENBQUMseUJBQXlCLENBQUMsQ0FBQyxXQUN0RDt3QkFDTCxTQUFTO3dCQUNULFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxnQkFBZ0I7d0JBQ2hCLG1CQUFtQjt3QkFDbkIsU0FBUzt3QkFDVCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osdUJBQXVCO3dCQUN2QiwyQkFBMkI7d0JBQzNCLHVDQUF1Qzt3QkFDdkMsK0NBQStDO3dCQUMvQyw4QkFBOEI7d0JBQzlCLG1DQUFtQzt3QkFDbkMsOEJBQThCO3dCQUM5QixrQ0FBa0M7d0JBQ2xDLHlDQUF5Qzt3QkFDekMsc0NBQXNDO3dCQUN0Qyx5Q0FBeUM7d0JBQ3pDLHlDQUF5Qzt3QkFDekMsbUNBQW1DO3dCQUNuQywwQ0FBMEM7d0JBQzFDLDBDQUEwQzt3QkFDMUMsdUNBQXVDO3dCQUN2QyxxQ0FBcUM7d0JBQ3JDLGdDQUFnQzt3QkFDaEMsdUNBQXVDO3dCQUN2QyxxQ0FBcUM7d0JBQ3JDLG1DQUFtQzt3QkFDbkMsa0JBQWtCO3dCQUNsQiw2Q0FBNkM7d0JBQzdDLHNDQUFzQzt3QkFDdEMsNkNBQTZDO3dCQUM3QywwQ0FBMEM7d0JBQzFDLDZDQUE2Qzt3QkFDN0MsUUFBUTt3QkFDUixlQUFlO3dCQUNmLGlCQUFpQjt3QkFDakIsaUNBQWlDO3dCQUNqQyxtQkFBbUI7d0JBQ25CLHlCQUF5QjtxQkFDNUI7OzBCQTJOSSxJQUFJO2tJQWpOVyxRQUFRO3NCQUEzQixTQUFTO3VCQUFDLE9BQU87Z0JBQ00sVUFBVTtzQkFBakMsU0FBUzt1QkFBQyxJQUFJO2dCQUVmLG9CQUFvQjtzQkFEbkIsU0FBUzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBSTNDLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxXQUFXO3NCQUFuQixLQUFLO2dCQVNPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBbUJHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBUUcsWUFBWTtzQkFBcEIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQVVPLFVBQVU7c0JBQXRCLEtBQUs7Z0JBeURHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFJTyxPQUFPO3NCQUFuQixLQUFLO2dCQUtPLHVCQUF1QjtzQkFBbkMsS0FBSztnQkFlRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVlLGVBQWU7c0JBQXBDLE1BQU07dUJBQUMsWUFBWTtnQkFFRyxnQkFBZ0I7c0JBQXRDLE1BQU07dUJBQUMsYUFBYTtnQkFFTSxlQUFlO3NCQUF6QyxNQUFNO3VCQUFDLGlCQUFpQjtnQkFHRyxnQkFBZ0I7c0JBQTNDLE1BQU07dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgc2tpcCxcbiAgICBTdWJqZWN0LFxuICAgIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHtcbiAgICBOZ2JQb3BvdmVyLFxuICAgIE5nYlBvcG92ZXJNb2R1bGUsXG4gICAgTmdiTW9kdWxlLFxufSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8vIGFuaW1hdGlvblxuaW1wb3J0IHsgaW5wdXREcm9wZG93bkFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9ucyc7XG5cbi8vIGNvbmZpZ1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXN2Zy10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1zdmctdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z3RleHREaXNwYXRjaFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duR3JvdXBzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWdyb3Vwcy9jYS1pbnB1dC1kcm9wZG93bi1ncm91cHMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLW11bHRpc2VsZWN0L2NhLWlucHV0LWRyb3Bkb3duLW11bHRpc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25MYWJlbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzL2NhLWlucHV0LWRyb3Bkb3duLWxhYmVscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbnRhY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItY29udGFjdC9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLXNoaXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlci9jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkRvdWJsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duVHJpcGxlVGV4dFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXRyaXBsZS10ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXRyaXBsZS10ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25EZWZhdWx0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZGVmYXVsdC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlL2NhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaC9jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duUGF5cm9sbFRydWNrc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1wYXlyb2xsLXRydWNrcy9jYS1pbnB1dC1kcm9wZG93bi1wYXlyb2xsLXRydWNrcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnRJdGVtIH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQtaXRlbSc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29tcG9uZW50SXRlbSB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJTaGlwcGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLXNoaXBwZXItaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLWl0ZW0vY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLWl0ZW0uY29tcG9uZW50JztcblxuLy8gcGlwZXNcbmltcG9ydCB7IEZvcm1Db250cm9sUGlwZSB9IGZyb20gJy4uL2NhLWlucHV0L3BpcGVzJztcbmltcG9ydCB7XG4gICAgRHJvcGRvd25Db3VudFBpcGUsXG4gICAgSW5wdXREcm9wZG93bkdldEljb25zUGlwZSxcbiAgICBJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDbGFzc1BpcGUsXG59IGZyb20gJy4vcGlwZXMnO1xuXG4vLyBtb2R1bGVzXG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuXG4vLyBkaXJlY3RpdmVzXG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nQ29udHJvbCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL2NhLWlucHV0L21vZGVscyc7XG5pbXBvcnQgeyBPcHRpb25Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL2lucHV0LWRyb3Bkb3duLW9wdGlvbi5tb2RlbCc7XG5cbi8vIHNlcnZpY2VzXG5pbXBvcnQgeyBJbWFnZUJhc2U2NFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWFnZS1iYXNlNjQuc2VydmljZSc7XG5cbi8vIHN2ZyByb3V0ZXNcbmltcG9ydCB7IElucHV0RHJvcGRvd25TdmdSb3V0ZXMgfSBmcm9tICcuL3V0aWxzL3N2Zy1yb3V0ZXMvaW5wdXQtZHJvcGRvd24tc3ZnLXJvdXRlcyc7XG5cbi8vIGVudW1zXG5pbXBvcnQgeyBEcm9wZG93blN0cmluZ0VudW0sIERyb3Bkb3duVGVtcGxhdGVUeXBlRW51bSB9IGZyb20gJy4vZW51bXMnO1xuXG4vLyBoZWxwZXJzXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi8uLi91dGlscy9oZWxwZXJzJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgSW5wdXRUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2EtaW5wdXQvaW5wdXQtdGVzdC9pbnB1dC10ZXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQgfSBmcm9tICcuLi9jYS1sb2FkLXN0YXR1cy1zdHJpbmcvY2EtbG9hZC1zdGF0dXMtc3RyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25PcHRpb25zUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJvcGRvd24tb3B0aW9ucy5waXBlJztcbmltcG9ydCB7IEV2ZW50SW5wdXRNYW5hZ2VyIH0gZnJvbSAnLi4vY2EtaW5wdXQvYmFzZS1jbGFzc2VzL2NhLWlucHV0LWV2ZW50LW1hbmFnZXInO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dFRlbXBsYXRlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGUtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb250YWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0L2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtaW5wdXQtZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbRm9ybUNvbnRyb2xQaXBlXSxcbiAgICBhbmltYXRpb25zOiBbaW5wdXREcm9wZG93bkFuaW1hdGlvbignc2hvd0hpZGVEcm9wZG93bk9wdGlvbnMnKV0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBNb2R1bGVcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gQ29tcG9uZW50XG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dERpc3BhdGNoVGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxhYmVsc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25QYXlyb2xsVHJ1Y2tzQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudEl0ZW0sXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb21wb25lbnRJdGVtLFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbnRhY3RJdGVtQ29tcG9uZW50LFxuICAgICAgICAvLyBQaXBlc1xuICAgICAgICBGb3JtQ29udHJvbFBpcGUsXG4gICAgICAgIERyb3Bkb3duQ291bnRQaXBlLFxuICAgICAgICBJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDbGFzc1BpcGUsXG4gICAgICAgIERyb3Bkb3duT3B0aW9uc1BpcGUsXG4gICAgICAgIElucHV0RHJvcGRvd25HZXRJY29uc1BpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERyb3Bkb3duQ29tcG9uZW50XG4gICAgaW1wbGVtZW50c1xuICAgICAgICBPbkluaXQsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICAgIEFmdGVyVmlld0luaXRcbntcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0UmVmITogSW5wdXRUZXN0Q29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3QyJykgcHVibGljIHBvcG92ZXJSZWYhOiBOZ2JQb3BvdmVyO1xuICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duQ29tcG9uZW50UmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgZHJvcGRvd25Db21wb25lbnRSZWY6IGFueTtcblxuICAgIC8vIExhYmVsIGlucHV0IC0gdmFsdWUgdGhhdCB3aWxsIGJlIHNob3dlZCBpbnNpZGUgaW5wdXRcbiAgICBASW5wdXQoKSBsYWJlbCE6IGtleW9mIE9wdGlvbk1vZGVsO1xuXG4gICAgLy8gb3B0aW9uVmFsdWUgaW5wdXQgLSBrZXkgdmFsdWUgZnJvbSBvYmplY3QgLSBFbWl0IHRoaXMgaWYgeW91IHdhbnQgdG8gc2V0IHdob2xlIG9iamVjdFxuICAgIEBJbnB1dCgpIG9wdGlvblZhbHVlITogc3RyaW5nO1xuXG4gICAgaW5wdXRIb3ZlcmVkSXRlbTogbnVtYmVyID0gLTE7XG4gICAgZHJvcERvd25Jc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGRpZmZlcmVudCB0ZW1wbGF0ZXMgZm9yIGJvZHkgcmVuZGVyaW5nXG4gICAgcHVibGljIF90ZW1wbGF0ZSE6IHN0cmluZztcbiAgICBfY2FuQWRkTmV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgdGVtcGxhdGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICdkZXRhaWxzLXRlbXBsYXRlJyAmJiB0aGlzLmlzRGV0YWlsc1BhZ2VzKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5pbnB1dFJlZi5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKFxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgIC8vICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9vcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uYWN0aXZlKTtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uIHx8IG51bGw7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnNldFZhbHVlKG9wdGlvbj8ubmFtZSk7XG5cbiAgICAgICAgLy8gICAgICAgICBjb25zdCB0aW1lb3V0MiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAvLyAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dDIpO1xuICAgICAgICAvLyAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIG11bHRpc2VsZWN0VGVtcGxhdGUhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgICBASW5wdXQoKSBzZXQgY2FuQWRkTmV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NhbkFkZE5ldyA9IHZhbHVlO1xuICAgIH0gLy8gQUREIE5FVyBpdGVtIGluIG9wdGlvbnNcblxuICAgIHB1YmxpYyBnZXQgY2FuQWRkTmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuQWRkTmV3O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGNhbk9wZW5Nb2RhbCE6IGJvb2xlYW47IC8vIG9wZW4gbW9kYWwgd2l0aCBBREQgTkVXIGJ1dHRvblxuXG4gICAgLy8gc29ydC10ZW1wbGF0ZSBmb3IgZGlmZmVyZW50IG9wdGlvbnNcbiAgICBwdWJsaWMgX3NvcnQhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2V0IHNvcnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zb3J0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgICB9XG5cbiAgICAvLyBjdXJyZW50bHkgYWN0aXZlIGl0ZW1cbiAgICBwdWJsaWMgX2FjdGl2ZUl0ZW0hOiBPcHRpb25Nb2RlbCB8IG51bGw7XG4gICAgQElucHV0KCkgc2V0IGFjdGl2ZUl0ZW0odmFsdWU6IE9wdGlvbk1vZGVsIHwgbnVsbCkge1xuICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IHRydWUsXG4gICAgICAgIC8vIH07XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB2YWx1ZTtcblxuICAgICAgICAvLyBXaXRoIGFkZHJlc3NcbiAgICAgICAgLy8gaWYgKFxuICAgICAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICYmXG4gICAgICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYWRkcmVzcycpICYmXG4gICAgICAgIC8vICAgICB0aGlzLl9hY3RpdmVJdGVtXG4gICAgICAgIC8vICkge1xuICAgICAgICAvLyAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX2FjdGl2ZUl0ZW0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgLy8gICAgICAgICAgICAgdmFsdWU/LmFkZHJlc3MgPyB2YWx1ZT8uYWRkcmVzcyA6IG51bGxcbiAgICAgICAgLy8gICAgICAgICApO1xuICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaGlkZUNvbG9yVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgYmxhY2tJbnB1dDogZmFsc2UsXG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIH07XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gLy8gV2l0aG91dCBhZGRyZXNzXG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5wYXRjaFZhbHVlKFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgdmFsdWU/Lm51bWJlclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgID8gdmFsdWU/Lm51bWJlclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU/Lm5hbWVcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWU/Lm5hbWVcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIDogKHZhbHVlPy5jb21wYW55TmFtZSA/PyBudWxsKVxuICAgICAgICAvLyAgICAgICAgICAgICApO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5oaWRlQ29sb3JWYWxpZGF0aW9ucykge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlSXRlbTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhY3RpdmVJdGVtQ29sb3IhOiBPcHRpb25Nb2RlbCB8IG51bGw7IC8vIGN1cnJlbnRseSBhY3RpdmUgY29sb3IgaW4gZHJvcGRvd25cbiAgICBASW5wdXQoKSBsYWJlbE1vZGUhOiAnTGFiZWwnIHwgJ0NvbG9yJztcblxuICAgIC8vIHdoZW4gc2VuZCBTVkcsIHBsZWFzZSBwcmVtbWFwZWQgb2JqZWN0OiBhZGQgJ2ZvbGRlcicgfCAnc3ViZm9sZGVyJ1xuICAgIHB1YmxpYyBfb3B0aW9uczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBvcHRpb25zKHZhbHVlczogT3B0aW9uTW9kZWxbXSkge1xuICAgICAgICBpZiAodmFsdWVzKSB0aGlzLl9vcHRpb25zID0gWy4uLnZhbHVlc107XG4gICAgfVxuXG4gICAgLy8gTXVsdGlTZWxlY3QgU2VsZWN0ZWQgSXRlbXMgRnJvbSBCYWNrZW5kXG4gICAgQElucHV0KCkgc2V0IHByZWxvYWRNdWx0aXNlbGVjdEl0ZW1zKHZhbHVlczogT3B0aW9uTW9kZWxbXSkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcyh0aGlzLmlucHV0Q29uZmlnLmxhYmVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25NdWx0aXNlbGVjdFNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzRGV0YWlsc1BhZ2VzITogYm9vbGVhbjsgLy8gb25seSBmb3IgZGV0YWlscyBwYWdlc1xuICAgIEBJbnB1dCgpIGlzSW5jb3JyZWN0VmFsdWUhOiBib29sZWFuOyAvLyBhcHBsaWNhbnQgcmV2aWV3IG9wdGlvblxuICAgIEBJbnB1dCgpIGlzQWRkcmVzc0Ryb3Bkb3duITogYm9vbGVhbjsgLy8gb25seSBmb3IgYWRkcmVzcyBkcm9wZG93blxuXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbTogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsW10gfCBudWxsPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWxbXSB8IG51bGw+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbUNvbG9yOiBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWwgfCBudWxsPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWwgfCBudWxsPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZExhYmVsTW9kZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgY2xvc2VEcm9wZG93bjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBzYXZlSXRlbTogRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgZGF0YTogT3B0aW9uTW9kZWwgfCBudWxsO1xuICAgICAgICBhY3Rpb246IHN0cmluZztcbiAgICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBPcHRpb25Nb2RlbCB8IG51bGw7IGFjdGlvbjogc3RyaW5nIH0+KCk7XG4gICAgQE91dHB1dCgpIGluY29ycmVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHBsYWNlaG9sZGVySWNvbkV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgncGFnaW5hdGlvbicpIHBhZ2luYXRpb25FdmVudDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCdhY3RpdmVHcm91cCcpIGFjdGl2ZUdyb3VwRXZlbnQ6IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsPigpO1xuICAgIEBPdXRwdXQoJ2NsZWFySW5wdXRFdmVudCcpIGNsZWFySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgnc2VhcmNoSW5wdXRFdmVudCcpIHNlYXJjaElucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgLy8gZXZlbnRzXG4gICAgcHVibGljIHNlYXJjaElucHV0VGV4dCA9IG5ldyBFdmVudElucHV0TWFuYWdlcjxzdHJpbmc+KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnNlYXJjaElucHV0RXZlbnRcbiAgICApO1xuXG4gICAgLy8gQ29weSBvZiBPcHRpb25zXG4gICAgcHVibGljIG9yaWdpbmFsT3B0aW9uczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIHB1YmxpYyBwYWdpbmF0aW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuXG4gICAgLy8gTXVsdGlzZWxlY3QgZHJvcGRvd24gb3B0aW9uc1xuICAgIHB1YmxpYyBtdWx0aXNlbGVjdEl0ZW1zOiBPcHRpb25Nb2RlbFtdID0gW107XG4gICAgcHVibGljIGlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIG11bHRpU2VsZWN0TGFiZWwhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIGxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0hOiBPcHRpb25Nb2RlbCB8IG51bGw7XG5cbiAgICAvLyBBZGQgbW9kZVxuICAgIHB1YmxpYyBpc0luQWRkTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gRHJvcGRvd24gbmF2aWdhdGlvbiB3aXRoIGtleWJvYXJkXG4gICAgcHJpdmF0ZSBkcm9wZG93blBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICAgIC8vIERyb3Bkb3duIENsZWFydGltZW91dFxuICAgIHB1YmxpYyBjbGVhclRpbWVvdXREcm9wZG93bjogc3RyaW5nIHwgbnVtYmVyIHwgTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgaG92ZXJpbmdJbmRleCE6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5wdXREcm9wZG93blN2Z1JvdXRlcyA9IElucHV0RHJvcGRvd25TdmdSb3V0ZXM7XG4gICAgcHVibGljIGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bSA9IERyb3Bkb3duVGVtcGxhdGVUeXBlRW51bTtcblxuICAgIC8vIERlc3Ryb3lcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpIHB1YmxpYyBzdXBlckNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgcHVibGljIGltYWdlQmFzZTY0U2VydmljZTogSW1hZ2VCYXNlNjRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cblxuICAgIGdldCBnZXRTdXBlckNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnB1dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9uID0gdGhpcy5fb3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uW3RoaXMub3B0aW9uVmFsdWUgYXMga2V5b2YgT3B0aW9uTW9kZWxdID09IHZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGZpbmRPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShmaW5kT3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgICBwdWJsaWMgb25DaGFuZ2UoXzogYW55KTogdm9pZCB7fVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gTXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdExhYmVsID0gdGhpcy5pbnB1dENvbmZpZy5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoVGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSA9PT0gJ0NvbG9yJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KHNlYXJjaFRleHQgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmF1dG9Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5vcGVuKCk7XG4gICAgICAgICAgICB9LCA0NTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2Nyb2xsRHJvcGRvd24oZXZlbnQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgPT09IHRhcmdldC5zY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbk51bWJlciArPSAxO1xuXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25FdmVudC5lbWl0KHRoaXMucGFnaW5hdGlvbk51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3RpdmVJdGVtKG9wdGlvbjogT3B0aW9uTW9kZWwsIGdyb3VwPzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2FuT3Blbk1vZGFsICYmXG4gICAgICAgICAgICBvcHRpb24/Llt0aGlzLmxhYmVsXT8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkZCBuZXcnXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IDc2NTUsXG4gICAgICAgICAgICAgICAgbmFtZTogRHJvcGRvd25TdHJpbmdFbnVtLkFERF9ORVcsXG4gICAgICAgICAgICAgICAgY2FuT3Blbk1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gUHJldmVudCB1c2VyIHRvIHBpY2sgZnJhbmNoaXNlLCB3aXRob3V0IGdyb3VwXG4gICAgICAgIGNvbnNvbGUubG9nKG9wdGlvbiwgZ3JvdXAsIHRoaXMuX3RlbXBsYXRlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGUgPT09ICdmdWVsLWZyYW5jaGlzZScgJiZcbiAgICAgICAgICAgIG9wdGlvbj8uaXNGcmFuY2hpc2UgJiZcbiAgICAgICAgICAgICFncm91cFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXNhYmxlIHRvIHBpY2tpbmcgYmFubmVkIG9yIGRudSB1c2VyXG4gICAgICAgIGlmIChvcHRpb24/LmRudSB8fCBvcHRpb24/LmJhbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIFJlc3VsdFxuICAgICAgICBpZiAob3B0aW9uLmlkID09PSA3NjU0IHx8IG9wdGlvbi5pZCA9PT0gNzY1Nikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFERCBORVdcbiAgICAgICAgZWxzZSBpZiAob3B0aW9uLmlkID09PSA3NjU1KSB7XG4gICAgICAgICAgICAvLyBPcGVuIE5ldyBNb2RhbFxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuT3Blbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7IC4uLm9wdGlvbiwgY2FuT3Blbk1vZGFsOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV29yayB3aXRoIGN1cnJlbnQgbW9kYWxcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERyb3BEb3duIGxhYmVsXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzRWRpdElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdDb2xvcicpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0UmVmLnNldElucHV0Q3Vyc29yQXRUaGVFbmQoXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsIERyb3Bkb3duXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV3Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFBpY2sgdGhlIGl0ZW1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygxKTtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuc2VsZWN0ZWREcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgICAvLyBEcm9wZG93biBsYWJlbHMgb3B0aW9uIHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coMTIyKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdMYWJlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnNldFZhbHVlKG9wdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbUNvbG9yID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ29sb3IuZW1pdCh0aGlzLmFjdGl2ZUl0ZW1Db2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm9ybWFsIERyb3Bkb3duIG9wdGlvbiBzZWxlY3RlZFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coNDQ1KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gJ1JvdXRpbmdBZGRyZXNzJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPy5udW1iZXIgPyBvcHRpb24ubnVtYmVyIDogb3B0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24/Lm51bWJlciA/IG9wdGlvbi5udW1iZXIgOiBvcHRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPyBvcHRpb24ubmFtZSA6IG9wdGlvbi5idXNpbmVzc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlSWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG5cbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3RpdmVJdGVtR3JvdXAoZXZlbnQ6IHsgb3B0aW9uOiBPcHRpb25Nb2RlbDsgZ3JvdXA6IGFueSB9KSB7XG4gICAgICAgIHRoaXMub25BY3RpdmVJdGVtKGV2ZW50Lm9wdGlvbiwgZXZlbnQuZ3JvdXApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID0gLTE7XG4gICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5zZWxlY3RlZERyb3Bkb3duID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5wYXRjaFZhbHVlKG51bGwpO1xuXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKCcnKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckRyb3Bkb3duTGFiZWwoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1Db2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQobnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ29sb3IuZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21tYW5kRXZlbnQoZXZlbnQ6IENvbW1hbmRzRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ0VkaXQgSW5wdXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0NvbG9yJyk7XG4gICAgICAgICAgICAvL3RoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdUb2dnbGUgRHJvcGRvd24nKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYudG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2NvbmZpcm0nICYmIGV2ZW50Lm1vZGUgPT09ICduZXcnKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5ld0l0ZW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdjb25maXJtJyAmJiBldmVudC5tb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ1BsYWNlaG9sZGVyIEljb24gRXZlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVySWNvbkV2ZW50LmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NhbmNlbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGROZXdJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlSW50KHV1aWR2NCgpKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy90aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pc1Zpc2libGVDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2F2ZUl0ZW0uZW1pdCh7IGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sIGFjdGlvbjogJ25ldycgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc1RvdWNoZWRJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlSXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sPy52YWx1ZSxcbiAgICAgICAgICAgICAgICBjb2xvcklkOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLmlkXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29sb3JJZCxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5hY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmFjdGl2ZUl0ZW1Db2xvci5uYW1lXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgY29kZTogdGhpcy5hY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmFjdGl2ZUl0ZW1Db2xvci5jb2RlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29kZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fYWN0aXZlSXRlbSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldFN1cGVyQ29udHJvbD8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICBhY3Rpb246ICdlZGl0JyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE5ld0NvbmZpZygpIHtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybS1jYW5jZWwnLFxuICAgICAgICAgICAgICAgIGZpcnN0Q29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgICBwb3B1cDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzMwNzRkMycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiBJbnB1dERyb3Bkb3duU3ZnUm91dGVzLnNwZWNDb25maXJtU3ZnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2Vjb25kQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgICBwb3B1cDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMmYyZjJmJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgIHN2ZzogSW5wdXREcm9wZG93blN2Z1JvdXRlcy54Q2xlYXJTdmcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuaXNJbkFkZE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzSW5BZGRNb2RlID0gZmFsc2U7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5jb3JyZWN0SW5wdXQoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pbmNvcnJlY3RFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaWRlbnRpdHkoaW5kZXg6IG51bWJlciwgaXRlbTogT3B0aW9uTW9kZWwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlTmVzdGVkTGlzdChvcHRpb246IE9wdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb24ub3Blbikge1xuICAgICAgICAgICAgb3B0aW9uLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gKGl0ZW0ub3BlbiA9IGZhbHNlKSk7XG5cbiAgICAgICAgb3B0aW9uLm9wZW4gPSAhb3B0aW9uLm9wZW47XG5cbiAgICAgICAgaWYgKG9wdGlvbi5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwRXZlbnQuZW1pdChvcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1cklucHV0KGV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJSZWYuaXNPcGVuKCkpIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFySW5wdXRFdmVudChldmVudDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIC8vIGxhYmVsIGRyb3Bkb3duXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25MYWJlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbm9ybWFsIGRyb3Bkb3duXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVIaWRkZW5Ecm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5kcm9wRG93bklzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmRyb3Bkb3duVmFsdWUgfHwgJycpO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3BlbkRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmRyb3BEb3duSXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0hpZGVEcm9wZG93bihhY3Rpb246IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5pc011bHRpU2VsZWN0SW5wdXRGb2N1cyA9IGFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSAhPT0gJ0NvbG9yJykge1xuICAgICAgICAgICAgLy8gRm9jdXMgT3V0XG4gICAgICAgICAgICAvLyBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl90ZW1wbGF0ZSAhPT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gICAgIC8vIFByZXZlbnQgdXNlciB0byB0eXBpbmcgZHVtbW15IGRhdGEgaWYgX2FjdGl2ZUl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5zZXRWYWx1ZSh0aGlzLl9hY3RpdmVJdGVtLm5hbWUpO1xuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5vbkNsZWFyU2VhcmNoKCk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX3RlbXBsYXRlICE9PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBGb2N1cyBJblxuICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgICAgICAvLyAgICAgcGxhY2Vob2xkZXI6IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZVxuICAgICAgICAgICAgLy8gICAgICAgICA/IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZVxuICAgICAgICAgICAgLy8gICAgICAgICA6IHRoaXMuX2FjdGl2ZUl0ZW0/Lm5hbWUsXG4gICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEuc2V0VmFsdWUobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXJSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWY/LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5BZGRNb2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgICAgICAvLyAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRhaWxzIHBhZ2VzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuY3VzdG9tQ2xhc3M/LmluY2x1ZGVzKCdkZXRhaWxzLXBhZ2VzJykgJiZcbiAgICAgICAgICAgICFhY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHRoaXMuX2FjdGl2ZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGRyb3BEb3duS2V5TmF2aWdhdGlvbih7XG4gICAgICAgIGtleUNvZGUsXG4gICAgICAgIGRhdGEsXG4gICAgfToge1xuICAgICAgICBrZXlDb2RlOiBudW1iZXI7XG4gICAgICAgIGRhdGE6IGFueTtcbiAgICB9KSB7XG4gICAgICAgIC8vIE5hdmlnYXRlIGRvd25cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDQwKSB7XG4gICAgICAgICAgICB0aGlzLmRyb3Bkb3duTmF2aWdhdGlvbigxKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBOYXZpZ2F0ZSB1cFxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMzgpIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25OYXZpZ2F0aW9uKC0xKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFByZXNzIEVzY2FwZVxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlucHV0Q29uZmlnPy5jb21tYW5kcz8uYWN0aXZlKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5jb21tYW5kcyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzVmlzaWJsZUNvbW1hbmRzID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIC8vIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8uc2V0RXJyb3JzKG51bGwpO1xuICAgICAgICAgICAgLy8gICAgIC8vIHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIC8vIHRoaXMuaW5wdXRDb25maWcuY29tbWFuZHMhLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gICAgIC8vIGlmICghdGhpcy5pbnB1dENvbmZpZy5oaWRlQ29sb3JWYWxpZGF0aW9ucykge1xuICAgICAgICAgICAgLy8gICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLmJsYWNrSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICAvLyB9XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlzRWRpdElucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5ibHVyKCk7XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5wYXRjaFZhbHVlKG51bGwpO1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0xhYmVsJyk7XG4gICAgICAgICAgICAvLyAgICAgfVxuICAgICAgICAgICAgLy8gfVxuICAgICAgICB9XG4gICAgICAgIC8vIFByZXNzICdlbnRlcidcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDEzKSB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0ZWRJdGVtO1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuc2VhcmNoaW5Hcm91cEluZGV4KSB7XG4gICAgICAgICAgICAgICAgbGV0IG1haW5Hcm91cDogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubWFwKChncm91cHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbWFpbkdyb3VwLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5ncm91cHNbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2VhcmNoaW5Hcm91cEluZGV4IGFzIGtleW9mIE9wdGlvbk1vZGVsXG4gICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID0gbWFpbkdyb3VwW3RoaXMuaW5wdXRIb3ZlcmVkSXRlbV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA+IC0xXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZHJvcGRvd25Db21wb25lbnRSZWYub3B0aW9uc1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHsgW3RoaXMubGFiZWxdOiAnJyB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jYW5PcGVuTW9kYWwgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0/Llt0aGlzLmxhYmVsXT8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkZCBuZXcnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6IDc2NTUsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IERyb3Bkb3duU3RyaW5nRW51bS5BRERfTkVXLFxuICAgICAgICAgICAgICAgICAgICBjYW5PcGVuTW9kYWw6IHRydWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShzZWxlY3RlZEl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BvdmVyUmVmLmlzT3BlbigpKSB0aGlzLnBvcG92ZXJSZWY/Lm9wZW4oKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIC8vcmV0dXJuO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnMubGVuZ3RoID09PSAxICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9uc1swXS5pZCAhPT0gNzY1NSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX29wdGlvbnNbMF0uaWQgIT09IDc2NTRcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIGxldCBzZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgICAgIC8vICAgICBzZWxlY3RlZEl0ZW0gPSB0aGlzLl9vcHRpb25zWzBdPy5idXNpbmVzc05hbWVcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgID8gdGhpcy5fb3B0aW9uc1swXT8uYnVzaW5lc3NOYW1lXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICA6IHRoaXMuX29wdGlvbnNbMF0/Lm5hbWU7XG4gICAgICAgICAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyAgICAgc2VsZWN0ZWRJdGVtID0gdGhpcy5fb3B0aW9uc1swXT8ubnVtYmVyXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICA/IHRoaXMuX29wdGlvbnNbMF0/Lm51bWJlci50b1N0cmluZygpLnRyaW0oKVxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgOiB0aGlzLl9vcHRpb25zWzBdLm5hbWUhLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICAvLyB0aGlzLnBpY2t1cEVsZW1lbnRXaXRoS2V5Ym9hcmQoc2VsZWN0ZWRJdGVtLCBkYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBzZXREcm9wZG93blZhbHVlKFxuICAgICAgICBvcHRpb246IE9wdGlvbk1vZGVsLFxuICAgICAgICBvcHRpb25WYWx1ZT86IHN0cmluZyxcbiAgICAgICAgbGFiZWw/OiBzdHJpbmdcbiAgICApIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1dIQVQgSVMgT1BUSU9OJywgb3B0aW9uKTtcbiAgICAgICAgY29uc3Qgb3B0VmFsdWUgPSBvcHRpb25WYWx1ZSA/IG9wdGlvblZhbHVlIDogdGhpcy5vcHRpb25WYWx1ZTtcbiAgICAgICAgY29uc3QgbGJlbCA9IGxhYmVsID8gbGFiZWwgOiB0aGlzLmxhYmVsO1xuICAgICAgICBjb25zdCBjb250cm9sVmFsdWUgPSBvcHRWYWx1ZVxuICAgICAgICAgICAgPyBvcHRpb25bb3B0VmFsdWUgYXMga2V5b2YgT3B0aW9uTW9kZWxdXG4gICAgICAgICAgICA6IG9wdGlvbjtcblxuICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gb3B0aW9uW2xiZWwgYXMga2V5b2YgT3B0aW9uTW9kZWxdIHx8IGNvbnRyb2xWYWx1ZTtcblxuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uO1xuICAgICAgICB0aGlzLnNldENvbnRyb2xWYWx1ZShjb250cm9sVmFsdWUsIGlucHV0VmFsdWUpO1xuICAgICAgICB0aGlzLnBvcG92ZXJSZWY/LmNsb3NlKCk7XG5cbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG4gICAgfVxuXG4gICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgTXVsdGlzZWxlY3QgRHJvcGRvd24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIHB1YmxpYyBvbk11bHRpc2VsZWN0U2VsZWN0KG9wdGlvbjogT3B0aW9uTW9kZWwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc011bHRpU2VsZWN0SW5wdXRGb2N1cyA9IGZhbHNlO1xuICAgICAgICAvL3RoaXMuaW5wdXRDb25maWcubGFiZWwgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKHRoaXMubXVsdGlzZWxlY3RJdGVtcy5zb21lKChpdGVtKSA9PiBpdGVtLmlkID09PSBvcHRpb24uaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSBvcHRpb24uaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpdGVtLmFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMgPSB0aGlzLl9vcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5hY3RpdmUpO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KHRoaXMubXVsdGlzZWxlY3RJdGVtcyk7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuc29ydChcbiAgICAgICAgICAgICh4LCB5KSA9PiBOdW1iZXIoeS5hY3RpdmUpIC0gTnVtYmVyKHguYWN0aXZlKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IFsuLi50aGlzLl9vcHRpb25zXTtcblxuICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSB0aGlzLl9vcHRpb25zXG4gICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSlcbiAgICAgICAgICAgIC5zbGljZSgtMSlbMF07XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaXNGb2N1c0lucHV0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgbXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgLy8gfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVtb3ZlTXVsdGlTZWxlY3RJdGVtKGluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IHRoaXMubXVsdGlzZWxlY3RJdGVtc1tpbmRleF0uaWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAuLi50aGlzLm11bHRpc2VsZWN0SXRlbXNbaW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuc29ydChcbiAgICAgICAgICAgICh4LCB5KSA9PiBOdW1iZXIoeS5hY3RpdmUpIC0gTnVtYmVyKHguYWN0aXZlKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gdGhpcy5fb3B0aW9ucztcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XG5cbiAgICAgICAgaWYgKCF0aGlzLm11bHRpc2VsZWN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgICAgICAvLyAgICAgbXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgLy8gfTtcblxuICAgICAgICAgICAgdGhpcy5sYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcubGFiZWwgPSB0aGlzLm11bHRpU2VsZWN0TGFiZWw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSB0aGlzLl9vcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoaXRlbSkgPT4gaXRlbS5hY3RpdmUpXG4gICAgICAgICAgICAgICAgLnNsaWNlKC0xKVswXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KFxuICAgICAgICAgICAgdGhpcy5tdWx0aXNlbGVjdEl0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXMoY3VycmVudExhYmVsPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RJdGVtcyA9IFtdO1xuICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgIG11bHRpU2VsZWN0RHJvcGRvd25BY3RpdmU6IHVuZGVmaW5lZCxcbiAgICAgICAgLy8gfTtcblxuICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnLmxhYmVsID0gY3VycmVudExhYmVsXG4gICAgICAgIC8vICAgICA/IGN1cnJlbnRMYWJlbFxuICAgICAgICAvLyAgICAgOiB0aGlzLm11bHRpU2VsZWN0TGFiZWw7XG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXMuZW1pdChudWxsKTtcblxuICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVNdWx0aXNlbGVjdERyb3Bkb3duKCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc011bHRpU2VsZWN0SW5wdXRGb2N1cyA9ICF0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzO1xuXG4gICAgICAgIGlmICh0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzKSB7XG4gICAgICAgICAgICAvLyB0aGlzLmlucHV0UmVmLnNldElucHV0Q3Vyc29yQXRUaGVFbmQoXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgLy8gKTtcblxuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5vcGVuKCk7XG4gICAgICAgICAgICB9LCAxNTApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgcHVibGljIGRyb3Bkb3duVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCA9ICcnO1xuICAgIHB1YmxpYyBzZXRDb250cm9sVmFsdWUodmFsdWU/OiBzdHJpbmcsIGRyb3Bkb3duSW5wdXRWYWx1ZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHZhbHVlKTsgLy8gTm90aWZ5IEFuZ3VsYXIgZm9ybSBhYm91dCB0aGUgY2hhbmdlXG4gICAgICAgIGlmICh2YWx1ZSkgdGhpcy5vblRvdWNoZWQoKTsgLy8gTWFyayBhcyB0b3VjaGVkXG4gICAgICAgIHRoaXMuZHJvcGRvd25WYWx1ZSA9IGRyb3Bkb3duSW5wdXRWYWx1ZSB8fCB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnBhdGNoVmFsdWUoZHJvcGRvd25JbnB1dFZhbHVlIHx8IHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBOYXZpZ2F0ZSB0aHJvdWdoIGRyb3Bkb3duIHdpdGgga2V5Ym9hcmQgYXJyb3dzXG4gICAgICovXG4gICAgcHJpdmF0ZSBkcm9wZG93bk5hdmlnYXRpb24oc3RlcDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG5leHRTdGVwID0gdGhpcy5pbnB1dEhvdmVyZWRJdGVtICsgc3RlcDtcblxuICAgICAgICBpZiAobmV4dFN0ZXAgPiB0aGlzLmRyb3Bkb3duQ29tcG9uZW50UmVmLmRyb3Bkb3duT3B0aW9uLmxlbmd0aCAtIDEpXG4gICAgICAgICAgICB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSAwO1xuICAgICAgICBlbHNlIGlmIChuZXh0U3RlcCA8IDApXG4gICAgICAgICAgICB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPVxuICAgICAgICAgICAgICAgIHRoaXMuZHJvcGRvd25Db21wb25lbnRSZWYuZHJvcGRvd25PcHRpb24ubGVuZ3RoIC0gMTtcbiAgICAgICAgZWxzZSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gPSBuZXh0U3RlcDtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xlYXJUaW1lb3V0RHJvcGRvd24pO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICBjbGFzcz1cImFwcGxpY2F0aW9uLWRyb3Bkb3duXCJcbiAgICBbbmdDbGFzc109XCJcbiAgICAgICAgaW5wdXRDb25maWdcbiAgICAgICAgICAgIHwgaW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q2xhc3NcbiAgICAgICAgICAgICAgICA6IG11bHRpc2VsZWN0SXRlbXNcbiAgICAgICAgICAgICAgICA6IGlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzXG4gICAgXCJcbj5cbiAgICBAaWYgKG11bHRpc2VsZWN0SXRlbXMubGVuZ3RoKSB7XG4gICAgICAgIDxwIGNsYXNzPVwibXVsdGlzZWxlY3QtbGFiZWxcIj5cbiAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0TGFiZWwgfX1cbiAgICAgICAgPC9wPlxuICAgIH1cblxuICAgIEBpZiAoaW5wdXRDb25maWcubXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZSkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGFycm93IC0tPlxuICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgIGNsYXNzPVwibXVsdGlzZWxlY3QtYXJyb3dcIlxuICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLmlucHV0RHJvcGRvd25BcnJvd1N2Z1wiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTXVsdGlzZWxlY3REcm9wZG93bigpXCJcbiAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgfVxuXG4gICAgQGlmIChtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJiAhaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGNsZWFyIGFsbCAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jbGVhciBtdWx0aXNlbGVjdC1jbGVhclwiXG4gICAgICAgICAgICBtYWluVG9vbHRpcD1cIkNsZWFyIEFsbFwiXG4gICAgICAgICAgICBuZ2JUb29sdGlwXG4gICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICB0b29sdGlwQmFja2dyb3VuZD1cIiMyZjJmMmZcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUFsbE11bHRpU2VsZWN0SXRlbXMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtY2xlYXIteFwiXG4gICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICA+PC9zdmctaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChcbiAgICAgICAgaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93biAmJlxuICAgICAgICBtdWx0aXNlbGVjdEl0ZW1zLmxlbmd0aCAmJlxuICAgICAgICBfdGVtcGxhdGUgPT09ICdtdWx0aXNlbGVjdCdcbiAgICApIHtcbiAgICAgICAgPCEtLSBNdWx0aXNlbGVjdCBpdGVtcyAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW1zIHt7IG11bHRpc2VsZWN0VGVtcGxhdGUgfX1cIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgICAgbXVsdGlTZWxlY3Qgb2YgbXVsdGlzZWxlY3RJdGVtcztcbiAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XG4gICAgICAgICAgICAgICAgbGV0IGluZCA9ICRpbmRleFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdWx0aXNlbGVjdC1pdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0Py5uYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIC0gVG90YWwgQ291bnRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLm11bHRpU2VsZWN0SXRlbVJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX0gb2ZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubXVsdGlTZWxlY3RJdGVtUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFtdWx0aVNlbGVjdD8udG90YWxDb3VudGVyXG4gICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/LmFjdGl2ZUNvdW50ZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoIWlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIENvdW50ZXIgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlbW92ZU11bHRpU2VsZWN0SXRlbShpbmQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW0tY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1haW5Ub29sdGlwPVwiQ2xlYXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5nYlRvb2x0aXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbj1cInRvcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcEJhY2tncm91bmQ9XCIjMmYyZjJmXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnhDbGVhclN2Z1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSBEcm9wZG93biBzZWFyY2ggLS0+XG5cbiAgICBAaWYgKCFpbnB1dENvbmZpZy5pc0ljb25JbnB1dCkge1xuICAgICAgICBAaWYgKCFzZWFyY2hJbnB1dFRleHQudmFsdWUpIHtcbiAgICAgICAgICAgIDwhLS0gPGRpdlxuICAgICAgICAgICAgKHNjcm9sbCk9XCJvblNjcm9sbERyb3Bkb3duKCRldmVudC50YXJnZXQpXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICBzY3JvbGw6IF9vcHRpb25zIHwgY2FEcm9wZG93bkNvdW50OiBfdGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgJ2Ryb3Bkb3duLW9wdGlvbnMtZ3JvdXBzJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZ3JvdXBzJyB8fFxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdsb2FkLWJyb2tlci1jb250YWN0JyxcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1mdWVsLWZyYW5jaGlzZSc6XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJyxcbiAgICAgICAgICAgICAgICAnbWVyZ2UtZHJvcGRvd24tYm9keS13aXRoLWlucHV0JzpcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubWVyZ2VEcm9wZG93bkJvZHlXaXRoSW5wdXQsXG4gICAgICAgICAgICAgICAgJ25vLXJlc3VsdC1jb250YWluZXInOiBfb3B0aW9uc1swXT8ubmFtZSA9PT0gJ05vIFJlc3VsdHMnLFxuICAgICAgICAgICAgICAgICdzdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09ICdzdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25zICB7eyBpbnB1dENvbmZpZy5kcm9wZG93bldpZHRoQ2xhc3MgfX1cIlxuICAgICAgICA+IC0tPlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIFtjbGFzcy5vcGVuXT1cImRyb3BEb3duSXNPcGVuXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MubGVmdEljb25dPVwiaW5wdXRDb25maWcucGxhY2Vob2xkZXJJY29uXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbDogX29wdGlvbnMgfCBjYURyb3Bkb3duQ291bnQ6IF90ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgJ2Ryb3Bkb3duLW9wdGlvbnMtZ3JvdXBzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2dyb3VwcycgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2xvYWQtYnJva2VyLWNvbnRhY3QnLFxuICAgICAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1mdWVsLWZyYW5jaGlzZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdmdWVsLWZyYW5jaGlzZScsXG4gICAgICAgICAgICAgICAgICAgICdtZXJnZS1kcm9wZG93bi1ib2R5LXdpdGgtaW5wdXQnOlxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubWVyZ2VEcm9wZG93bkJvZHlXaXRoSW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICdzdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZScsXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bl92YWx1ZSBkcm9wZG93bi1vcHRpb25zICB7e1xuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bldpZHRoQ2xhc3NcbiAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoX3RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVTX1RURCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbiBkcm9wZG93bi1kb3VibGUtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd05vUmVzdWxzdF09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5kZXhdPVwiMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW0hXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5PcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbl09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVJfQ09OVEFDVCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxvYWQtYnJva2VyLWNvbnRhY3QtZ3JvdXBzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfRElTUEFUQ0hFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXItaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duV2l0aEltYWdlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbk9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBcbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5TVkdURVhUX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZS1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VsZWN0ZWRPcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZS1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IC0tPlxuXG4gICAgICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU3BlY2lhbCBEcm9wZG93biBTZWxlY3RlZCBTVkcgd2l0aCBvciBXaXRob3V0IFRleHQgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCAmJiBhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBpbnB1dERyb3Bkb3duR2V0SWNvbnM6IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1zZWxlY3RlZC1pbWFnZSB7e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1bnNldC1jb2xvcic6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py5jbGFzcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdmdTdHlsZV09XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsOiBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW0/LmNvZGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcjZmZmZmZmJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnLWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0Py53aXRoVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGRyb3Bkb3duVmFsdWUgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgPGNhLWlucHV0LXRlc3RcbiAgICAgICAgICAgICN0Mj1cIm5nYlBvcG92ZXJcIlxuICAgICAgICAgICAgW25nYlBvcG92ZXJdPVwiY2FJbnB1dERyb3Bkb3duUG9wb3ZlclwiXG4gICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICBbY29udGFpbmVyXT1cIidib2R5J1wiXG4gICAgICAgICAgICBbcGxhY2VtZW50XT1cIlxuICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZSdcbiAgICAgICAgICAgICAgICAgICAgPyBbJ2JvdHRvbS1sZWZ0JywgJ3RvcC1sZWZ0J11cbiAgICAgICAgICAgICAgICAgICAgOiBbJ2JvdHRvbS1sZWZ0J11cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAjaW5wdXRcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sIHwgZm9ybUNvbnRyb2xcIlxuICAgICAgICAgICAgW3BhcmVudENvbnRyb2xdPVwiZ2V0U3VwZXJDb250cm9sXCJcbiAgICAgICAgICAgIFtpbmNvcnJlY3RWYWx1ZV09XCJpc0luY29ycmVjdFZhbHVlXCJcbiAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICBbc2VsZWN0ZWREcm9wZG93bkxhYmVsQ29sb3JdPVwiXG4gICAgICAgICAgICAgICAgaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbFxuICAgICAgICAgICAgICAgICAgICA/IGFjdGl2ZUl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aXZlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICBcIlxuICAgICAgICAgICAgW3RlbXBsYXRlXT1cIl90ZW1wbGF0ZVwiXG4gICAgICAgICAgICAoYmx1cklucHV0KT1cIm9uQmx1cklucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGNsZWFyKT1cIm9uQ2xlYXJJbnB1dEV2ZW50KCRldmVudClcIlxuICAgICAgICAgICAgKGNvbW1hbmRFdmVudCk9XCJjb21tYW5kRXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2hvd0hpZGVEcm9wZG93bik9XCJzaG93SGlkZURyb3Bkb3duKCRldmVudClcIlxuICAgICAgICAgICAgKGRyb3BEb3duS2V5TmF2aWdhdGlvbik9XCJkcm9wRG93bktleU5hdmlnYXRpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoaW5jb3JyZWN0RXZlbnQpPVwib25JbmNvcnJlY3RJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChoaWRkZW4pPVwiaGFuZGxlSGlkZGVuRHJvcGRvd24oKVwiXG4gICAgICAgICAgICAoc2hvd24pPVwiaGFuZGxlT3BlbkRyb3Bkb3duKClcIlxuICAgICAgICA+PC9jYS1pbnB1dC10ZXN0PlxuICAgIH1cblxuICAgIDwhLS0gRHJvcGRvd24gaWNvbiBpbnN0ZWFkIG9mIGlucHV0IC0tPlxuICAgIEBpZiAoaW5wdXRDb25maWcuaXNJY29uSW5wdXQpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXIgaW5wdXQtaWNvbi1jb250YWluZXJcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHZhbGlkOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pc1ZhbGlkSWNvbiAmJlxuICAgICAgICAgICAgICAgICAgICAhaW5wdXRDb25maWcuaW5wdXRJY29uPy5pbmNsdWRlcygnY3VzdG9tJyksXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBwb3BvdmVyUmVmPy5pc09wZW4oKSxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICA+XG4gICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAjdDI9XCJuZ2JQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJjYUlucHV0RHJvcGRvd25Qb3BvdmVyXCJcbiAgICAgICAgICAgICAgICBwb3BvdmVyQ2xhc3M9XCJjYS1pbnB1dC1kcm9wZG93blwiXG4gICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxuICAgICAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgICAgICBbcGxhY2VtZW50XT1cIlsnYm90dG9tLWxlZnQnXVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1pY29uXCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cIlxuICAgICAgICAgICAgICAgICAgICBpbnB1dERyb3Bkb3duU3ZnUm91dGVzLnJlcGFpclBtU3ZnUm91dGUgK1xuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5pbnB1dEljb25cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPjwvc3ZnLWljb24+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNjYUlucHV0RHJvcGRvd25Qb3BvdmVyPlxuICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERyb3Bkb3duIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgIEBpZiAoaW5wdXRDb25maWc/Lm1lcmdlRHJvcGRvd25Cb2R5V2l0aElucHV0ICYmIF9vcHRpb25zPy5sZW5ndGgpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi1vcHRpb25zLWRpdmlkZXIge3tcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bldpZHRoQ2xhc3NcbiAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgIFtjbGFzcy5kaXNwYXRjaF9kcm9wZG93bl09XCJfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnXCJcbiAgICAgICAgPjwvZGl2PlxuICAgIH1cblxuICAgIEBpZiAoXG4gICAgICAgIChpbnB1dENvbmZpZz8ubmFtZSAhPSAnQWRkcmVzcycgJiZcbiAgICAgICAgICAgIGlucHV0Q29uZmlnPy5uYW1lICE9ICdSb3V0aW5nQWRkcmVzcycgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB8fFxuICAgICAgICAoKGlucHV0Q29uZmlnPy5uYW1lID09ICdBZGRyZXNzJyB8fFxuICAgICAgICAgICAgaW5wdXRDb25maWc/Lm5hbWUgPT0gJ1JvdXRpbmdBZGRyZXNzJykgJiZcbiAgICAgICAgICAgICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkICYmXG4gICAgICAgICAgICBfb3B0aW9ucz8ubGVuZ3RoKVxuICAgICkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsRHJvcGRvd24oJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNjcm9sbDogX29wdGlvbnMgfCBjYURyb3Bkb3duQ291bnQ6IF90ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1ncm91cHMnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdncm91cHMnIHx8XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2xvYWQtYnJva2VyLWNvbnRhY3QnLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWZ1ZWwtZnJhbmNoaXNlJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnLFxuICAgICAgICAgICAgICAgICdtZXJnZS1kcm9wZG93bi1ib2R5LXdpdGgtaW5wdXQnOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tZXJnZURyb3Bkb3duQm9keVdpdGhJbnB1dCxcbiAgICAgICAgICAgICAgICAnbm8tcmVzdWx0LWNvbnRhaW5lcic6IF9vcHRpb25zWzBdPy5uYW1lID09PSAnTm8gUmVzdWx0cycsXG4gICAgICAgICAgICAgICAgJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbnMgIHt7IGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzcyB9fVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBzd2l0Y2ggKF90ZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFNWRyBUZW1wbGF0ZSAoUmVuZGVyIHN2Z3Mgb3IgdGV4dCBpZiBzdmdzIGRvZXNuJ3QgZXhpc3QgKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlNWR19URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Zy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25XaXRoSW1hZ2VdPVwiaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXIgXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duU3ZnVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFN2ZyBUZXh0IFRlbXBsYXRlIChkaXNwbGF5IGZsZXgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uU1ZHVEVYVF9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwic3ZnVGV4dFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1EaXNwYXRjaCBkcm9wZG93bi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5TVkdURVhUX0RJU1BBVENIX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkaXNwYXRjaFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZXRhaWxzIHRlbXBsYXRlICh0cnVjaywgdHJhaWxlci4uLiBkZXRhaWxzLXBhZ2VzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5ERVRBSUxTX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydF09XCJfc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRldGFpbHNUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JvdXBpbmcgdGVtcGxhdGUgKGNhbiBzZWUgb24gY29udGFjdCBtb2RhbCkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uR1JPVVBTKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZ3JvdXBzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE11bHRpc2VsZWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTVVMVElTRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbV09XCJsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25NdWx0aXNlbGVjdFNlbGVjdCk9XCJvbk11bHRpc2VsZWN0U2VsZWN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbXVsdGlzZWxlY3Q+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExhYmVscyBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxBQkVMUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxhYmVsc1xuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsTW9kZV09XCJsYWJlbE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhbkFkZE5ld109XCJfY2FuQWRkTmV3XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERpc3BhdGNoIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRElTUEFUQ0gpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRpc3BhdGNoPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgRGlzcGF0Y2hlciBUZW1wbGF0ZSAodXNlciBhdmF0YXIgKyB1c2VyIG5hbWUpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIENvbWJpbmUgVHJ1Y2stVHJhaWxlci1Ecml2ZXIgVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0RJU1BBVENIRVNfVFREKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQ+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9hZCBCcm9rZXIgVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0JST0tFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXI+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9hZCBCcm9rZXIgQ29udGFjdCBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfQlJPS0VSX0NPTlRBQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItY29udGFjdD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIFNoaXBwZXIgVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX1NISVBQRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLXNoaXBwZXI+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGVtcGxhdGUgVGV4dCAtIENvdW50ZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5URVhUX0NPVU5URVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXI+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVlbCBGcmFuY2hpc2UgVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5GVUVMX0ZSQU5DSElTRSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHRvZ2dsZU5lc3RlZExpc3QpPVwidG9nZ2xlTmVzdGVkTGlzdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW1Hcm91cCk9XCJvbkFjdGl2ZUl0ZW1Hcm91cCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gRG91YmxlIFRleHQgVGVtcGxhdGUgLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkRPVUJMRV9URVhUX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIERvdWJsZSBDb2x1bW4gVGVtcGxhdGUgLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkRPVUJMRV9DT0xVTU5fVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gVHJpcGxlIENvbHVtbiBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uVFJJUExFX0NPTFVNTl9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXRyaXBsZS10ZXh0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tdHJpcGxlLXRleHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBQQVlST0xMIFRSVUNLUyBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uUEFZUk9MTF9UUlVDS1MpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1wYXlyb2xsLXRydWNrc1xuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLXBheXJvbGwtdHJ1Y2tzPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERlZmF1bHQgVGVtcGxhdGUgLSBSZW5kZXIgT25seSBUZXh0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cbiAgICAgICAgICAgICAgICBAZGVmYXVsdCB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZGVmYXVsdC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
899
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2EtY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUlILGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLElBQUksRUFDSixTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDSCxZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLElBQUksRUFDSixPQUFPLEVBQ1AsU0FBUyxHQUNaLE1BQU0sTUFBTSxDQUFDO0FBRWQsWUFBWTtBQUNaLE9BQU8sRUFFSCxnQkFBZ0IsRUFDaEIsU0FBUyxHQUNaLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsWUFBWTtBQUNaLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUt0RCxhQUFhO0FBQ2IsT0FBTyxFQUFFLGtDQUFrQyxFQUFFLE1BQU0sb0ZBQW9GLENBQUM7QUFDeEksT0FBTyxFQUFFLHlDQUF5QyxFQUFFLE1BQU0sb0dBQW9HLENBQUM7QUFDL0osT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sNEZBQTRGLENBQUM7QUFDcEosT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUM7QUFD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QkFBaUI7c0JBQXpCLEtBQUs7Z0JBRUksWUFBWTtzQkFBckIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxRQUFRO3NCQUFqQixNQUFNO2dCQUlHLGNBQWM7c0JBQXZCLE1BQU07Z0JBRUcsb0JBQW9CO3NCQUE3QixNQUFNO2dCQUVlLGVBQWU7c0JBQXBDLE1BQU07dUJBQUMsWUFBWTtnQkFFRyxnQkFBZ0I7c0JBQXRDLE1BQU07dUJBQUMsYUFBYTtnQkFFTSxlQUFlO3NCQUF6QyxNQUFNO3VCQUFDLGlCQUFpQjtnQkFHRyxnQkFBZ0I7c0JBQTNDLE1BQU07dUJBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2VsZixcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtcbiAgICBkZWJvdW5jZVRpbWUsXG4gICAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gICAgc2tpcCxcbiAgICBTdWJqZWN0LFxuICAgIHRha2VVbnRpbCxcbn0gZnJvbSAncnhqcyc7XG5cbi8vIGJvb3RzdHJhcFxuaW1wb3J0IHtcbiAgICBOZ2JQb3BvdmVyLFxuICAgIE5nYlBvcG92ZXJNb2R1bGUsXG4gICAgTmdiTW9kdWxlLFxufSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5cbi8vIGFuaW1hdGlvblxuaW1wb3J0IHsgaW5wdXREcm9wZG93bkFuaW1hdGlvbiB9IGZyb20gJy4vYW5pbWF0aW9ucyc7XG5cbi8vIGNvbmZpZ1xuaW1wb3J0IHsgSUNhSW5wdXQgfSBmcm9tICcuLi9jYS1pbnB1dC9jb25maWcnO1xuXG4vLyBjb21wb25lbnRzXG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXN2Zy10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1zdmctdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGUuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blN2Z3RleHREaXNwYXRjaFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duR3JvdXBzQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWdyb3Vwcy9jYS1pbnB1dC1kcm9wZG93bi1ncm91cHMuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bk11bHRpc2VsZWN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLW11bHRpc2VsZWN0L2NhLWlucHV0LWRyb3Bkb3duLW11bHRpc2VsZWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25MYWJlbHNDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzL2NhLWlucHV0LWRyb3Bkb3duLWxhYmVscy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbnRhY3RDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItY29udGFjdC9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLXNoaXBwZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlci9jYS1pbnB1dC1kcm9wZG93bi10ZXh0LWNvdW50ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkRvdWJsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duVHJpcGxlVGV4dFRlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLXRyaXBsZS10ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXRyaXBsZS10ZXh0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25EZWZhdWx0VGVtcGxhdGVDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY2EtaW5wdXQtZHJvcGRvd24tZGVmYXVsdC10ZW1wbGF0ZS9jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlL2NhLWlucHV0LWRyb3Bkb3duLWZ1ZWwtZnJhbmNoaXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaC9jYS1pbnB1dC1kcm9wZG93bi1kaXNwYXRjaC5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWRldGFpbHMtdGVtcGxhdGUvY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duUGF5cm9sbFRydWNrc0NvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1wYXlyb2xsLXRydWNrcy9jYS1pbnB1dC1kcm9wZG93bi1wYXlyb2xsLXRydWNrcy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnRJdGVtIH0gZnJvbSAnLi9jb21wb25lbnRzL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZC1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlcy10dGQtaXRlbSc7XG5pbXBvcnQgeyBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29tcG9uZW50SXRlbSB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1pdGVtL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJTaGlwcGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyL2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLXNoaXBwZXItaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1zaGlwcGVyLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXIvY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLWl0ZW0vY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyLWl0ZW0uY29tcG9uZW50JztcblxuLy8gcGlwZXNcbmltcG9ydCB7IEZvcm1Db250cm9sUGlwZSB9IGZyb20gJy4uL2NhLWlucHV0L3BpcGVzJztcbmltcG9ydCB7XG4gICAgRHJvcGRvd25Db3VudFBpcGUsXG4gICAgSW5wdXREcm9wZG93bkdldEljb25zUGlwZSxcbiAgICBJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDbGFzc1BpcGUsXG59IGZyb20gJy4vcGlwZXMnO1xuXG4vLyBtb2R1bGVzXG5pbXBvcnQgeyBBbmd1bGFyU3ZnSWNvbk1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3ZnLWljb24nO1xuXG4vLyBkaXJlY3RpdmVzXG5pbXBvcnQge1xuICAgIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICAgIEZvcm1Db250cm9sLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE5nQ29udHJvbCxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbi8vIG1vZGVsc1xuaW1wb3J0IHsgQ29tbWFuZHNFdmVudCB9IGZyb20gJy4uL2NhLWlucHV0L21vZGVscyc7XG5pbXBvcnQgeyBPcHRpb25Nb2RlbCB9IGZyb20gJy4vbW9kZWxzL2lucHV0LWRyb3Bkb3duLW9wdGlvbi5tb2RlbCc7XG5cbi8vIHNlcnZpY2VzXG5pbXBvcnQgeyBJbWFnZUJhc2U2NFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9pbWFnZS1iYXNlNjQuc2VydmljZSc7XG5cbi8vIHN2ZyByb3V0ZXNcbmltcG9ydCB7IElucHV0RHJvcGRvd25TdmdSb3V0ZXMgfSBmcm9tICcuL3V0aWxzL3N2Zy1yb3V0ZXMvaW5wdXQtZHJvcGRvd24tc3ZnLXJvdXRlcyc7XG5cbi8vIGVudW1zXG5pbXBvcnQgeyBEcm9wZG93blN0cmluZ0VudW0sIERyb3Bkb3duVGVtcGxhdGVUeXBlRW51bSB9IGZyb20gJy4vZW51bXMnO1xuXG4vLyBoZWxwZXJzXG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tICcuLi8uLi91dGlscy9oZWxwZXJzJztcblxuLy8gY29tcG9uZW50c1xuaW1wb3J0IHsgSW5wdXRUZXN0Q29tcG9uZW50IH0gZnJvbSAnLi4vY2EtaW5wdXQvaW5wdXQtdGVzdC9pbnB1dC10ZXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQgfSBmcm9tICcuLi9jYS1sb2FkLXN0YXR1cy1zdHJpbmcvY2EtbG9hZC1zdGF0dXMtc3RyaW5nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYVByb2ZpbGVJbWFnZUNvbXBvbmVudCB9IGZyb20gJy4uL2NhLXByb2ZpbGUtaW1hZ2UvY2EtcHJvZmlsZS1pbWFnZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25PcHRpb25zUGlwZSB9IGZyb20gJy4vcGlwZXMvZHJvcGRvd24tb3B0aW9ucy5waXBlJztcbmltcG9ydCB7IEV2ZW50SW5wdXRNYW5hZ2VyIH0gZnJvbSAnLi4vY2EtaW5wdXQvYmFzZS1jbGFzc2VzL2NhLWlucHV0LWV2ZW50LW1hbmFnZXInO1xuaW1wb3J0IHsgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dFRlbXBsYXRlSXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlL2NhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtdGVtcGxhdGUtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb250YWN0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0L2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QtaXRlbS9jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0LWl0ZW0uY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtY2EtaW5wdXQtZHJvcGRvd24nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jYS1pbnB1dC1kcm9wZG93bi5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY2EtaW5wdXQtZHJvcGRvd24uY29tcG9uZW50LnNjc3MnXSxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgcHJvdmlkZXJzOiBbRm9ybUNvbnRyb2xQaXBlXSxcbiAgICBhbmltYXRpb25zOiBbaW5wdXREcm9wZG93bkFuaW1hdGlvbignc2hvd0hpZGVEcm9wZG93bk9wdGlvbnMnKV0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICAvLyBNb2R1bGVcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiUG9wb3Zlck1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgTmdiTW9kdWxlLFxuICAgICAgICBBbmd1bGFyU3ZnSWNvbk1vZHVsZSxcbiAgICAgICAgLy8gQ29tcG9uZW50XG4gICAgICAgIENhUHJvZmlsZUltYWdlQ29tcG9uZW50LFxuICAgICAgICBDYUxvYWRTdGF0dXNTdHJpbmdDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blN2Z3RleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duU3ZndGV4dERpc3BhdGNoVGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkdyb3Vwc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxhYmVsc0NvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZERpc3BhdGNoZXNUdGRDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyQ29udGFjdENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlclNoaXBwZXJDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRleHRDb3VudGVyQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Eb3VibGVUZXh0VGVtcGxhdGVDb21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93blRyaXBsZVRleHRUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGVmYXVsdFRlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25GdWVsRnJhbmNoaXNlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25EaXNwYXRjaENvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duRGV0YWlsc1RlbXBsYXRlQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25QYXlyb2xsVHJ1Y2tzQ29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25TdmdUZW1wbGF0ZUNvbXBvbmVudCxcbiAgICAgICAgSW5wdXRUZXN0Q29tcG9uZW50LFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkRGlzcGF0Y2hlc1R0ZENvbXBvbmVudEl0ZW0sXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWRCcm9rZXJDb21wb25lbnRJdGVtLFxuICAgICAgICBDYUlucHV0RHJvcGRvd25Mb2FkQnJva2VyU2hpcHBlckl0ZW1Db21wb25lbnQsXG4gICAgICAgIENhSW5wdXREcm9wZG93bkxvYWREaXNwYXRjaGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgQ2FJbnB1dERyb3Bkb3duTG9hZEJyb2tlckNvbnRhY3RJdGVtQ29tcG9uZW50LFxuICAgICAgICAvLyBQaXBlc1xuICAgICAgICBGb3JtQ29udHJvbFBpcGUsXG4gICAgICAgIERyb3Bkb3duQ291bnRQaXBlLFxuICAgICAgICBJbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDbGFzc1BpcGUsXG4gICAgICAgIERyb3Bkb3duT3B0aW9uc1BpcGUsXG4gICAgICAgIElucHV0RHJvcGRvd25HZXRJY29uc1BpcGUsXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FJbnB1dERyb3Bkb3duQ29tcG9uZW50XG4gICAgaW1wbGVtZW50c1xuICAgICAgICBPbkluaXQsXG4gICAgICAgIEFmdGVyVmlld0luaXQsXG4gICAgICAgIE9uRGVzdHJveSxcbiAgICAgICAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gICAgICAgIEFmdGVyVmlld0luaXRcbntcbiAgICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0UmVmITogSW5wdXRUZXN0Q29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ3QyJykgcHVibGljIHBvcG92ZXJSZWYhOiBOZ2JQb3BvdmVyO1xuICAgIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duQ29tcG9uZW50UmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gICAgZHJvcGRvd25Db21wb25lbnRSZWY6IGFueTtcblxuICAgIC8vIExhYmVsIGlucHV0IC0gdmFsdWUgdGhhdCB3aWxsIGJlIHNob3dlZCBpbnNpZGUgaW5wdXRcbiAgICBASW5wdXQoKSBsYWJlbCE6IGtleW9mIE9wdGlvbk1vZGVsO1xuXG4gICAgLy8gb3B0aW9uVmFsdWUgaW5wdXQgLSBrZXkgdmFsdWUgZnJvbSBvYmplY3QgLSBFbWl0IHRoaXMgaWYgeW91IHdhbnQgdG8gc2V0IHdob2xlIG9iamVjdFxuICAgIEBJbnB1dCgpIG9wdGlvblZhbHVlITogc3RyaW5nO1xuXG4gICAgaW5wdXRIb3ZlcmVkSXRlbTogbnVtYmVyID0gLTE7XG4gICAgZHJvcERvd25Jc09wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIGRpZmZlcmVudCB0ZW1wbGF0ZXMgZm9yIGJvZHkgcmVuZGVyaW5nXG4gICAgcHVibGljIF90ZW1wbGF0ZSE6IHN0cmluZztcbiAgICBfY2FuQWRkTmV3OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzZXQgdGVtcGxhdGUodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl90ZW1wbGF0ZSA9IHZhbHVlO1xuICAgICAgICAvLyBpZiAodmFsdWUgPT09ICdkZXRhaWxzLXRlbXBsYXRlJyAmJiB0aGlzLmlzRGV0YWlsc1BhZ2VzKSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5pbnB1dFJlZi5zZXRJbnB1dEN1cnNvckF0VGhlRW5kKFxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgIC8vICAgICAgICAgKTtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9vcHRpb25zLmZpbmQoKGl0ZW0pID0+IGl0ZW0uYWN0aXZlKTtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uIHx8IG51bGw7XG4gICAgICAgIC8vICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnNldFZhbHVlKG9wdGlvbj8ubmFtZSk7XG5cbiAgICAgICAgLy8gICAgICAgICBjb25zdCB0aW1lb3V0MiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAvLyAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dDIpO1xuICAgICAgICAvLyAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIC8vICAgICB9KTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIG11bHRpc2VsZWN0VGVtcGxhdGUhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgaW5wdXRDb25maWchOiBJQ2FJbnB1dDtcbiAgICBASW5wdXQoKSBzZXQgY2FuQWRkTmV3KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2NhbkFkZE5ldyA9IHZhbHVlO1xuICAgIH0gLy8gQUREIE5FVyBpdGVtIGluIG9wdGlvbnNcblxuICAgIHB1YmxpYyBnZXQgY2FuQWRkTmV3KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2FuQWRkTmV3O1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGNhbk9wZW5Nb2RhbCE6IGJvb2xlYW47IC8vIG9wZW4gbW9kYWwgd2l0aCBBREQgTkVXIGJ1dHRvblxuXG4gICAgLy8gc29ydC10ZW1wbGF0ZSBmb3IgZGlmZmVyZW50IG9wdGlvbnNcbiAgICBwdWJsaWMgX3NvcnQhOiBzdHJpbmc7XG4gICAgQElucHV0KCkgc2V0IHNvcnQodmFsdWU6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9zb3J0ID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBzb3J0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fc29ydDtcbiAgICB9XG5cbiAgICAvLyBjdXJyZW50bHkgYWN0aXZlIGl0ZW1cbiAgICBwdWJsaWMgX2FjdGl2ZUl0ZW0hOiBPcHRpb25Nb2RlbCB8IG51bGw7XG4gICAgQElucHV0KCkgc2V0IGFjdGl2ZUl0ZW0odmFsdWU6IE9wdGlvbk1vZGVsIHwgbnVsbCkge1xuICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IHRydWUsXG4gICAgICAgIC8vIH07XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB2YWx1ZTtcblxuICAgICAgICAvLyBXaXRoIGFkZHJlc3NcbiAgICAgICAgLy8gaWYgKFxuICAgICAgICAvLyAgICAgdGhpcy5pbnB1dENvbmZpZy5uYW1lICYmXG4gICAgICAgIC8vICAgICB0aGlzLmlucHV0Q29uZmlnLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYWRkcmVzcycpICYmXG4gICAgICAgIC8vICAgICB0aGlzLl9hY3RpdmVJdGVtXG4gICAgICAgIC8vICkge1xuICAgICAgICAvLyAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX2FjdGl2ZUl0ZW0pLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbD8ucGF0Y2hWYWx1ZShcbiAgICAgICAgLy8gICAgICAgICAgICAgdmFsdWU/LmFkZHJlc3MgPyB2YWx1ZT8uYWRkcmVzcyA6IG51bGxcbiAgICAgICAgLy8gICAgICAgICApO1xuICAgICAgICAvLyAgICAgfVxuXG4gICAgICAgIC8vICAgICBpZiAoIXRoaXMuaW5wdXRDb25maWcuaGlkZUNvbG9yVmFsaWRhdGlvbnMpIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgICAgICAgICAvLyAgICAgYmxhY2tJbnB1dDogZmFsc2UsXG4gICAgICAgIC8vICAgICAgICAgICAgIC8vIH07XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAvLyAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gLy8gV2l0aG91dCBhZGRyZXNzXG4gICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgaWYgKHRoaXMuX2FjdGl2ZUl0ZW0pIHtcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5wYXRjaFZhbHVlKFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgdmFsdWU/Lm51bWJlclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgID8gdmFsdWU/Lm51bWJlclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIDogdmFsdWU/Lm5hbWVcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgID8gdmFsdWU/Lm5hbWVcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIDogKHZhbHVlPy5jb21wYW55TmFtZSA/PyBudWxsKVxuICAgICAgICAvLyAgICAgICAgICAgICApO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5pbnB1dENvbmZpZy5oaWRlQ29sb3JWYWxpZGF0aW9ucykge1xuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gICAgIGJsYWNrSW5wdXQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgLy8gICAgICAgICB9LCAxNTApO1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBhY3RpdmVJdGVtKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWN0aXZlSXRlbTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBhY3RpdmVJdGVtQ29sb3IhOiBPcHRpb25Nb2RlbCB8IG51bGw7IC8vIGN1cnJlbnRseSBhY3RpdmUgY29sb3IgaW4gZHJvcGRvd25cbiAgICBASW5wdXQoKSBsYWJlbE1vZGUhOiAnTGFiZWwnIHwgJ0NvbG9yJztcblxuICAgIC8vIHdoZW4gc2VuZCBTVkcsIHBsZWFzZSBwcmVtbWFwZWQgb2JqZWN0OiBhZGQgJ2ZvbGRlcicgfCAnc3ViZm9sZGVyJ1xuICAgIHB1YmxpYyBfb3B0aW9uczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBvcHRpb25zKHZhbHVlczogT3B0aW9uTW9kZWxbXSkge1xuICAgICAgICBpZiAodmFsdWVzKSB0aGlzLl9vcHRpb25zID0gWy4uLnZhbHVlc107XG4gICAgfVxuXG4gICAgLy8gTXVsdGlTZWxlY3QgU2VsZWN0ZWQgSXRlbXMgRnJvbSBCYWNrZW5kXG4gICAgQElucHV0KCkgc2V0IHByZWxvYWRNdWx0aXNlbGVjdEl0ZW1zKHZhbHVlczogT3B0aW9uTW9kZWxbXSkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcyh0aGlzLmlucHV0Q29uZmlnLmxhYmVsKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZXM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHZhbHVlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25NdWx0aXNlbGVjdFNlbGVjdChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIGlzRGV0YWlsc1BhZ2VzITogYm9vbGVhbjsgLy8gb25seSBmb3IgZGV0YWlscyBwYWdlc1xuICAgIEBJbnB1dCgpIGlzSW5jb3JyZWN0VmFsdWUhOiBib29sZWFuOyAvLyBhcHBsaWNhbnQgcmV2aWV3IG9wdGlvblxuICAgIEBJbnB1dCgpIGlzQWRkcmVzc0Ryb3Bkb3duITogYm9vbGVhbjsgLy8gb25seSBmb3IgYWRkcmVzcyBkcm9wZG93blxuXG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbTogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsIHwgbnVsbD4oKTtcbiAgICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtczogRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsW10gfCBudWxsPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWxbXSB8IG51bGw+KCk7XG4gICAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbUNvbG9yOiBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWwgfCBudWxsPiA9XG4gICAgICAgIG5ldyBFdmVudEVtaXR0ZXI8T3B0aW9uTW9kZWwgfCBudWxsPigpO1xuICAgIEBPdXRwdXQoKSBzZWxlY3RlZExhYmVsTW9kZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgICBAT3V0cHV0KCkgY2xvc2VEcm9wZG93bjogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAgIEBPdXRwdXQoKSBzYXZlSXRlbTogRXZlbnRFbWl0dGVyPHtcbiAgICAgICAgZGF0YTogT3B0aW9uTW9kZWwgfCBudWxsO1xuICAgICAgICBhY3Rpb246IHN0cmluZztcbiAgICB9PiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBkYXRhOiBPcHRpb25Nb2RlbCB8IG51bGw7IGFjdGlvbjogc3RyaW5nIH0+KCk7XG4gICAgQE91dHB1dCgpIGluY29ycmVjdEV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgpIHBsYWNlaG9sZGVySWNvbkV2ZW50OiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gICAgQE91dHB1dCgncGFnaW5hdGlvbicpIHBhZ2luYXRpb25FdmVudDogRXZlbnRFbWl0dGVyPG51bWJlcj4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcbiAgICBAT3V0cHV0KCdhY3RpdmVHcm91cCcpIGFjdGl2ZUdyb3VwRXZlbnQ6IEV2ZW50RW1pdHRlcjxPcHRpb25Nb2RlbD4gPVxuICAgICAgICBuZXcgRXZlbnRFbWl0dGVyPE9wdGlvbk1vZGVsPigpO1xuICAgIEBPdXRwdXQoJ2NsZWFySW5wdXRFdmVudCcpIGNsZWFySW5wdXRFdmVudDogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgQE91dHB1dCgnc2VhcmNoSW5wdXRFdmVudCcpIHNlYXJjaElucHV0RXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID1cbiAgICAgICAgbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gICAgLy8gZXZlbnRzXG4gICAgcHVibGljIHNlYXJjaElucHV0VGV4dCA9IG5ldyBFdmVudElucHV0TWFuYWdlcjxzdHJpbmc+KFxuICAgICAgICBudWxsLFxuICAgICAgICB0aGlzLnNlYXJjaElucHV0RXZlbnRcbiAgICApO1xuXG4gICAgLy8gQ29weSBvZiBPcHRpb25zXG4gICAgcHVibGljIG9yaWdpbmFsT3B0aW9uczogT3B0aW9uTW9kZWxbXSA9IFtdO1xuXG4gICAgLy8gUGFnaW5hdGlvblxuICAgIHB1YmxpYyBwYWdpbmF0aW9uTnVtYmVyOiBudW1iZXIgPSAwO1xuXG4gICAgLy8gTXVsdGlzZWxlY3QgZHJvcGRvd24gb3B0aW9uc1xuICAgIHB1YmxpYyBtdWx0aXNlbGVjdEl0ZW1zOiBPcHRpb25Nb2RlbFtdID0gW107XG4gICAgcHVibGljIGlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHVibGljIG11bHRpU2VsZWN0TGFiZWwhOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgcHVibGljIGxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0hOiBPcHRpb25Nb2RlbCB8IG51bGw7XG5cbiAgICAvLyBBZGQgbW9kZVxuICAgIHB1YmxpYyBpc0luQWRkTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gRHJvcGRvd24gbmF2aWdhdGlvbiB3aXRoIGtleWJvYXJkXG4gICAgcHJpdmF0ZSBkcm9wZG93blBvc2l0aW9uOiBudW1iZXIgPSAtMTtcblxuICAgIC8vIERyb3Bkb3duIENsZWFydGltZW91dFxuICAgIHB1YmxpYyBjbGVhclRpbWVvdXREcm9wZG93bjogc3RyaW5nIHwgbnVtYmVyIHwgTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgICBwdWJsaWMgaG92ZXJpbmdJbmRleCE6IG51bWJlcjtcbiAgICBwdWJsaWMgaW5wdXREcm9wZG93blN2Z1JvdXRlcyA9IElucHV0RHJvcGRvd25TdmdSb3V0ZXM7XG4gICAgcHVibGljIGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bSA9IERyb3Bkb3duVGVtcGxhdGVUeXBlRW51bTtcblxuICAgIC8vIERlc3Ryb3lcbiAgICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAU2VsZigpIHB1YmxpYyBzdXBlckNvbnRyb2w6IE5nQ29udHJvbCxcbiAgICAgICAgcHVibGljIGltYWdlQmFzZTY0U2VydmljZTogSW1hZ2VCYXNlNjRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyXG4gICAgKSB7XG4gICAgICAgIHRoaXMuc3VwZXJDb250cm9sLnZhbHVlQWNjZXNzb3IgPSB0aGlzO1xuICAgIH1cblxuICAgIGdldCBnZXRTdXBlckNvbnRyb2woKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1cGVyQ29udHJvbC5jb250cm9sO1xuICAgIH1cblxuICAgIHB1YmxpYyBpbnB1dEZvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbChudWxsKTtcblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBmaW5kSW5PcHRpb25zID0gdGhpcy5pbnB1dENvbmZpZy5zZWFyY2hpbkdyb3VwSW5kZXhcbiAgICAgICAgICAgID8gdGhpcy5nZXRNYWluR3JvdXAoKVxuICAgICAgICAgICAgOiB0aGlzLl9vcHRpb25zO1xuICAgICAgICBjb25zdCBmaW5kT3B0aW9uID0gZmluZEluT3B0aW9ucy5maW5kKFxuICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uW3RoaXMub3B0aW9uVmFsdWUgYXMga2V5b2YgT3B0aW9uTW9kZWxdID09IHZhbHVlXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGZpbmRPcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0RHJvcGRvd25WYWx1ZShmaW5kT3B0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgICBwdWJsaWMgb25DaGFuZ2UoXzogYW55KTogdm9pZCB7fVxuXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gTXVsdGlzZWxlY3RcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdExhYmVsID0gdGhpcy5pbnB1dENvbmZpZy5sYWJlbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaW5wdXRGb3JtQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDUwKSxcbiAgICAgICAgICAgICAgICBza2lwKDEpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoVGV4dCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSA9PT0gJ0NvbG9yJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dFJlZi5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KHNlYXJjaFRleHQgfHwgJycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmF1dG9Gb2N1cykge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZi5vcGVuKCk7XG4gICAgICAgICAgICB9LCA0NTApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2Nyb2xsRHJvcGRvd24oZXZlbnQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudCBhcyBIVE1MRWxlbWVudDtcblxuICAgICAgICBpZiAodGFyZ2V0LnNjcm9sbFRvcCArIHRhcmdldC5vZmZzZXRIZWlnaHQgPT09IHRhcmdldC5zY3JvbGxIZWlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvbk51bWJlciArPSAxO1xuXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRpb25FdmVudC5lbWl0KHRoaXMucGFnaW5hdGlvbk51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3RpdmVJdGVtKG9wdGlvbjogT3B0aW9uTW9kZWwsIGdyb3VwPzogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuY2FuT3Blbk1vZGFsICYmXG4gICAgICAgICAgICBvcHRpb24/Llt0aGlzLmxhYmVsXT8udG9Mb3dlckNhc2UoKSA9PT0gJ2FkZCBuZXcnXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7XG4gICAgICAgICAgICAgICAgaWQ6IDc2NTUsXG4gICAgICAgICAgICAgICAgbmFtZTogRHJvcGRvd25TdHJpbmdFbnVtLkFERF9ORVcsXG4gICAgICAgICAgICAgICAgY2FuT3Blbk1vZGFsOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLnNldERyb3Bkb3duVmFsdWUob3B0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gUHJldmVudCB1c2VyIHRvIHBpY2sgZnJhbmNoaXNlLCB3aXRob3V0IGdyb3VwXG4gICAgICAgIGNvbnNvbGUubG9nKG9wdGlvbiwgZ3JvdXAsIHRoaXMuX3RlbXBsYXRlKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fdGVtcGxhdGUgPT09ICdmdWVsLWZyYW5jaGlzZScgJiZcbiAgICAgICAgICAgIG9wdGlvbj8uaXNGcmFuY2hpc2UgJiZcbiAgICAgICAgICAgICFncm91cFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBEaXNhYmxlIHRvIHBpY2tpbmcgYmFubmVkIG9yIGRudSB1c2VyXG4gICAgICAgIGlmIChvcHRpb24/LmRudSB8fCBvcHRpb24/LmJhbikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIFJlc3VsdFxuICAgICAgICBpZiAob3B0aW9uLmlkID09PSA3NjU0IHx8IG9wdGlvbi5pZCA9PT0gNzY1Nikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFERCBORVdcbiAgICAgICAgZWxzZSBpZiAob3B0aW9uLmlkID09PSA3NjU1KSB7XG4gICAgICAgICAgICAvLyBPcGVuIE5ldyBNb2RhbFxuICAgICAgICAgICAgaWYgKHRoaXMuY2FuT3Blbk1vZGFsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7IC4uLm9wdGlvbiwgY2FuT3Blbk1vZGFsOiB0cnVlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gV29yayB3aXRoIGN1cnJlbnQgbW9kYWxcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERyb3BEb3duIGxhYmVsXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWxOZXcgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzRWRpdElucHV0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdDb2xvcicpO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAvLyB0aGlzLmlucHV0UmVmLnNldElucHV0Q3Vyc29yQXRUaGVFbmQoXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gTm9ybWFsIERyb3Bkb3duXG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWRkTmV3Q29uZmlnKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFBpY2sgdGhlIGl0ZW1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygxKTtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcuc2VsZWN0ZWREcm9wZG93biA9IHRydWU7XG4gICAgICAgICAgICAvLyBEcm9wZG93biBsYWJlbHMgb3B0aW9uIHNlbGVjdGVkXG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coMTIyKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5sYWJlbE1vZGUgPT09ICdMYWJlbCcpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnNldFZhbHVlKG9wdGlvbi5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG9wdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubGFiZWxNb2RlID09PSAnQ29sb3InKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSXRlbUNvbG9yID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ29sb3IuZW1pdCh0aGlzLmFjdGl2ZUl0ZW1Db2xvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gTm9ybWFsIERyb3Bkb3duIG9wdGlvbiBzZWxlY3RlZFxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coNDQ1KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gb3B0aW9uO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMub3JpZ2luYWxPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubmFtZSAhPT0gJ1JvdXRpbmdBZGRyZXNzJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgICAgICAgICAgICctLS0tLS0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uPy5udW1iZXIgPyBvcHRpb24ubnVtYmVyIDogb3B0aW9uLm5hbWVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/LnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb24/Lm51bWJlciA/IG9wdGlvbi5udW1iZXIgOiBvcHRpb24ubmFtZVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2whLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXAgPyBvcHRpb24ubmFtZSA6IG9wdGlvbi5idXNpbmVzc05hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGlkIH0gPSBvcHRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBncm91cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ub3B0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmdyb3VwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlSWQ6IGlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQob3B0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5vcHRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZ3JvdXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5zZWxlY3RlZEl0ZW0uZW1pdChvcHRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXRTdXBlckNvbnRyb2w/Lm1hcmtBc0RpcnR5KCk7XG5cbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXREcm9wZG93biA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25BY3RpdmVJdGVtR3JvdXAoZXZlbnQ6IHsgb3B0aW9uOiBPcHRpb25Nb2RlbDsgZ3JvdXA6IGFueSB9KSB7XG4gICAgICAgIHRoaXMub25BY3RpdmVJdGVtKGV2ZW50Lm9wdGlvbiwgZXZlbnQuZ3JvdXApO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0gbnVsbDtcbiAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID0gLTE7XG4gICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5zZWxlY3RlZERyb3Bkb3duID0gZmFsc2U7XG4gICAgICAgIC8vIHRoaXMuZ2V0U3VwZXJDb250cm9sPy5wYXRjaFZhbHVlKG51bGwpO1xuXG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKCcnKTtcblxuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KG51bGwpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjbGVhckRyb3Bkb3duTGFiZWwoKSB7XG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmFjdGl2ZUl0ZW1Db2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQobnVsbCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtQ29sb3IuZW1pdChudWxsKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb21tYW5kRXZlbnQoZXZlbnQ6IENvbW1hbmRzRXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ0VkaXQgSW5wdXQnKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkTGFiZWxNb2RlLmVtaXQoJ0NvbG9yJyk7XG4gICAgICAgICAgICAvL3RoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbE5ldyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdUb2dnbGUgRHJvcGRvd24nKSB7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWYudG9nZ2xlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ2NvbmZpcm0nICYmIGV2ZW50Lm1vZGUgPT09ICduZXcnKSB7XG4gICAgICAgICAgICB0aGlzLmFkZE5ld0l0ZW0oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChldmVudC5hY3Rpb24gPT09ICdjb25maXJtJyAmJiBldmVudC5tb2RlID09PSAnZWRpdCcpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSXRlbSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LmFjdGlvbiA9PT0gJ1BsYWNlaG9sZGVyIEljb24gRXZlbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlaG9sZGVySWNvbkV2ZW50LmVtaXQodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQuYWN0aW9uID09PSAnY2FuY2VsJykge1xuICAgICAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIGFjdGlvbjogJ2NhbmNlbCcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBhZGROZXdJdGVtKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY3RpdmVJdGVtID0ge1xuICAgICAgICAgICAgaWQ6IHBhcnNlSW50KHV1aWR2NCgpKSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZSxcbiAgICAgICAgfTtcbiAgICAgICAgLy90aGlzLmlucHV0Q29uZmlnLmNvbW1hbmRzIS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbnB1dFJlZi5pc1Zpc2libGVDb21tYW5kcyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuc2F2ZUl0ZW0uZW1pdCh7IGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sIGFjdGlvbjogJ25ldycgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZExhYmVsTW9kZS5lbWl0KCdMYWJlbCcpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc1RvdWNoZWRJbnB1dCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgdXBkYXRlSXRlbSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcuZHJvcGRvd25MYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5fYWN0aXZlSXRlbSA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9hY3RpdmVJdGVtLFxuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuZ2V0U3VwZXJDb250cm9sPy52YWx1ZSxcbiAgICAgICAgICAgICAgICBjb2xvcklkOiB0aGlzLmFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuYWN0aXZlSXRlbUNvbG9yLmlkXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29sb3JJZCxcbiAgICAgICAgICAgICAgICBjb2xvcjogdGhpcy5hY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmFjdGl2ZUl0ZW1Db2xvci5uYW1lXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29sb3IsXG4gICAgICAgICAgICAgICAgY29kZTogdGhpcy5hY3RpdmVJdGVtQ29sb3JcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmFjdGl2ZUl0ZW1Db2xvci5jb2RlXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5fYWN0aXZlSXRlbT8uY29kZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRMYWJlbE1vZGUuZW1pdCgnTGFiZWwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5fYWN0aXZlSXRlbSxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmdldFN1cGVyQ29udHJvbD8udmFsdWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zYXZlSXRlbS5lbWl0KHtcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuX2FjdGl2ZUl0ZW0sXG4gICAgICAgICAgICBhY3Rpb246ICdlZGl0JyxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGFkZE5ld0NvbmZpZygpIHtcbiAgICAgICAgdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgICAgICBjb21tYW5kczoge1xuICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnY29uZmlybS1jYW5jZWwnLFxuICAgICAgICAgICAgICAgIGZpcnN0Q29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgICBwb3B1cDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NvbmZpcm0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yOiAnIzMwNzRkMycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgc3ZnOiBJbnB1dERyb3Bkb3duU3ZnUm91dGVzLnNwZWNDb25maXJtU3ZnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgc2Vjb25kQ29tbWFuZDoge1xuICAgICAgICAgICAgICAgICAgICBwb3B1cDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ0NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICcjMmYyZjJmJyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogJ2NhbmNlbCcsXG4gICAgICAgICAgICAgICAgICAgIHN2ZzogSW5wdXREcm9wZG93blN2Z1JvdXRlcy54Q2xlYXJTdmcsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjogJycsXG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuXG4gICAgICAgIHRoaXMuaXNJbkFkZE1vZGUgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzSW5BZGRNb2RlID0gZmFsc2U7XG4gICAgICAgIH0sIDIwMCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5jb3JyZWN0SW5wdXQoZXZlbnQ6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5pbmNvcnJlY3RFdmVudC5lbWl0KGV2ZW50KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaWRlbnRpdHkoaW5kZXg6IG51bWJlciwgaXRlbTogT3B0aW9uTW9kZWwpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gaXRlbS5pZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlTmVzdGVkTGlzdChvcHRpb246IE9wdGlvbk1vZGVsKTogdm9pZCB7XG4gICAgICAgIGlmIChvcHRpb24ub3Blbikge1xuICAgICAgICAgICAgb3B0aW9uLm9wZW4gPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vcHRpb25zLmZpbHRlcigoaXRlbSkgPT4gKGl0ZW0ub3BlbiA9IGZhbHNlKSk7XG5cbiAgICAgICAgb3B0aW9uLm9wZW4gPSAhb3B0aW9uLm9wZW47XG5cbiAgICAgICAgaWYgKG9wdGlvbi5vcGVuKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZUdyb3VwRXZlbnQuZW1pdChvcHRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQmx1cklucHV0KGV2ZW50OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJSZWYuaXNPcGVuKCkpIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgdGhpcy5jbG9zZURyb3Bkb3duLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFySW5wdXRFdmVudChldmVudDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXRFdmVudC5lbWl0KGV2ZW50KTtcblxuICAgICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIC8vIGxhYmVsIGRyb3Bkb3duXG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmRyb3Bkb3duTGFiZWwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyRHJvcGRvd25MYWJlbCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gbm9ybWFsIGRyb3Bkb3duXG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xlYXJTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVIaWRkZW5Ecm9wZG93bigpIHtcbiAgICAgICAgdGhpcy5kcm9wRG93bklzT3BlbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmRyb3Bkb3duVmFsdWUgfHwgJycpO1xuICAgICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmJsdXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlT3BlbkRyb3Bkb3duKCkge1xuICAgICAgICB0aGlzLmRyb3BEb3duSXNPcGVuID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dFRleHQubmV4dCgnJyk7XG4gICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0hpZGVEcm9wZG93bihhY3Rpb246IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRDb25maWcubXVsdGlzZWxlY3REcm9wZG93bikge1xuICAgICAgICAgICAgdGhpcy5pc011bHRpU2VsZWN0SW5wdXRGb2N1cyA9IGFjdGlvbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmxhYmVsTW9kZSAhPT0gJ0NvbG9yJykge1xuICAgICAgICAgICAgLy8gRm9jdXMgT3V0XG4gICAgICAgICAgICAvLyBpZiAoIWFjdGlvbikge1xuICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl90ZW1wbGF0ZSAhPT0gJ2Z1ZWwtZnJhbmNoaXNlJykge1xuICAgICAgICAgICAgLy8gICAgICAgICB0aGlzLnBvcG92ZXJSZWYub3BlbigpO1xuICAgICAgICAgICAgLy8gICAgIH1cblxuICAgICAgICAgICAgLy8gICAgIC8vIFByZXZlbnQgdXNlciB0byB0eXBpbmcgZHVtbW15IGRhdGEgaWYgX2FjdGl2ZUl0ZW0gZG9lc24ndCBleGlzdFxuICAgICAgICAgICAgLy8gICAgIGlmICh0aGlzLl9hY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMuZ2V0U3VwZXJDb250cm9sIS5zZXRWYWx1ZSh0aGlzLl9hY3RpdmVJdGVtLm5hbWUpO1xuICAgICAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMuZmluZEluZGV4KFxuICAgICAgICAgICAgLy8gICAgICAgICAgICAgKGl0ZW0pID0+IGl0ZW0ubmFtZSA9PT0gdGhpcy5nZXRTdXBlckNvbnRyb2whLnZhbHVlXG4gICAgICAgICAgICAvLyAgICAgICAgICk7XG5cbiAgICAgICAgICAgIC8vICAgICAgICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgICAgICAgLy8gICAgICAgICAgICAgdGhpcy5vbkNsZWFyU2VhcmNoKCk7XG4gICAgICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyAgICAgaWYgKHRoaXMuX3RlbXBsYXRlICE9PSAnZnVlbC1mcmFuY2hpc2UnKSB7XG4gICAgICAgICAgICAvLyAgICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcbiAgICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAvLyBGb2N1cyBJblxuICAgICAgICAgICAgLy8gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzLmlucHV0Q29uZmlnID0ge1xuICAgICAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgICAgICAvLyAgICAgcGxhY2Vob2xkZXI6IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZVxuICAgICAgICAgICAgLy8gICAgICAgICA/IHRoaXMuZ2V0U3VwZXJDb250cm9sIS52YWx1ZVxuICAgICAgICAgICAgLy8gICAgICAgICA6IHRoaXMuX2FjdGl2ZUl0ZW0/Lm5hbWUsXG4gICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICB0aGlzLmdldFN1cGVyQ29udHJvbCEuc2V0VmFsdWUobnVsbCk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXJSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJSZWY/LmNsb3NlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzSW5BZGRNb2RlKSB7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgICAgICAvLyAgICAgcGxhY2Vob2xkZXI6ICcnLFxuICAgICAgICAgICAgICAgIC8vIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZXRhaWxzIHBhZ2VzXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuY3VzdG9tQ2xhc3M/LmluY2x1ZGVzKCdkZXRhaWxzLXBhZ2VzJykgJiZcbiAgICAgICAgICAgICFhY3Rpb25cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbS5lbWl0KHRoaXMuX2FjdGl2ZUl0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldE1haW5Hcm91cCgpIHtcbiAgICAgICAgbGV0IG1haW5Hcm91cDogT3B0aW9uTW9kZWxbXSA9IFtdO1xuICAgICAgICB0aGlzLl9vcHRpb25zLm1hcCgoZ3JvdXBzKSA9PiB7XG4gICAgICAgICAgICBtYWluR3JvdXAucHVzaChcbiAgICAgICAgICAgICAgICAuLi5ncm91cHNbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRDb25maWcuc2VhcmNoaW5Hcm91cEluZGV4IGFzIGtleW9mIE9wdGlvbk1vZGVsXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1haW5Hcm91cDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZHJvcERvd25LZXlOYXZpZ2F0aW9uKHtcbiAgICAgICAga2V5Q29kZSxcbiAgICAgICAgZGF0YSxcbiAgICB9OiB7XG4gICAgICAgIGtleUNvZGU6IG51bWJlcjtcbiAgICAgICAgZGF0YTogYW55O1xuICAgIH0pIHtcbiAgICAgICAgLy8gTmF2aWdhdGUgZG93blxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gNDApIHtcbiAgICAgICAgICAgIHRoaXMuZHJvcGRvd25OYXZpZ2F0aW9uKDEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5hdmlnYXRlIHVwXG4gICAgICAgIGlmIChrZXlDb2RlID09PSAzOCkge1xuICAgICAgICAgICAgdGhpcy5kcm9wZG93bk5hdmlnYXRpb24oLTEpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gUHJlc3MgJ2VudGVyJ1xuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gMTMpIHtcbiAgICAgICAgICAgIGxldCBzZWxlY3RlZEl0ZW07XG4gICAgICAgICAgICBpZiAodGhpcy5pbnB1dENvbmZpZy5zZWFyY2hpbkdyb3VwSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBsZXQgbWFpbkdyb3VwID0gdGhpcy5nZXRNYWluR3JvdXAoKTtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZEl0ZW0gPSBtYWluR3JvdXBbdGhpcy5pbnB1dEhvdmVyZWRJdGVtXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRJdGVtID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtID4gLTFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5kcm9wZG93bkNvbXBvbmVudFJlZi5vcHRpb25zW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dEhvdmVyZWRJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgIDogeyBbdGhpcy5sYWJlbF06ICcnIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB0aGlzLmNhbk9wZW5Nb2RhbCAmJlxuICAgICAgICAgICAgICAgIHNlbGVjdGVkSXRlbT8uW3RoaXMubGFiZWxdPy50b0xvd2VyQ2FzZSgpID09PSAnYWRkIG5ldydcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICBpZDogNzY1NSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogRHJvcGRvd25TdHJpbmdFbnVtLkFERF9ORVcsXG4gICAgICAgICAgICAgICAgICAgIGNhbk9wZW5Nb2RhbDogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREcm9wZG93blZhbHVlKHNlbGVjdGVkSXRlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gOSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXJSZWYuaXNPcGVuKCkpIHRoaXMucG9wb3ZlclJlZj8ub3BlbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldERyb3Bkb3duVmFsdWUoXG4gICAgICAgIG9wdGlvbjogT3B0aW9uTW9kZWwsXG4gICAgICAgIG9wdGlvblZhbHVlPzogc3RyaW5nLFxuICAgICAgICBsYWJlbD86IHN0cmluZ1xuICAgICkge1xuICAgICAgICBjb25zdCBvcHRWYWx1ZSA9IG9wdGlvblZhbHVlID8gb3B0aW9uVmFsdWUgOiB0aGlzLm9wdGlvblZhbHVlO1xuICAgICAgICBjb25zdCBsYmVsID0gbGFiZWwgPyBsYWJlbCA6IHRoaXMubGFiZWw7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xWYWx1ZSA9IG9wdFZhbHVlXG4gICAgICAgICAgICA/IG9wdGlvbltvcHRWYWx1ZSBhcyBrZXlvZiBPcHRpb25Nb2RlbF1cbiAgICAgICAgICAgIDogb3B0aW9uO1xuXG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBvcHRpb25bbGJlbCBhcyBrZXlvZiBPcHRpb25Nb2RlbF0gfHwgY29udHJvbFZhbHVlO1xuXG4gICAgICAgIHRoaXMuX2FjdGl2ZUl0ZW0gPSBvcHRpb247XG4gICAgICAgIHRoaXMuc2V0Q29udHJvbFZhbHVlKGNvbnRyb2xWYWx1ZSwgaW5wdXRWYWx1ZSk7XG4gICAgICAgIHRoaXMucG9wb3ZlclJlZj8uY2xvc2UoKTtcblxuICAgICAgICB0aGlzLnNlYXJjaElucHV0VGV4dC5uZXh0KCcnKTtcbiAgICB9XG5cbiAgICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBNdWx0aXNlbGVjdCBEcm9wZG93biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgcHVibGljIG9uTXVsdGlzZWxlY3RTZWxlY3Qob3B0aW9uOiBPcHRpb25Nb2RlbCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gZmFsc2U7XG4gICAgICAgIC8vdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdEl0ZW1zLnNvbWUoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX29wdGlvbnMgPSB0aGlzLl9vcHRpb25zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT09IG9wdGlvbi5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIWl0ZW0uYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMubXVsdGlzZWxlY3RJdGVtcyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQodGhpcy5tdWx0aXNlbGVjdEl0ZW1zKTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMub3JpZ2luYWxPcHRpb25zID0gWy4uLnRoaXMuX29wdGlvbnNdO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uYWN0aXZlKVxuICAgICAgICAgICAgLnNsaWNlKC0xKVswXTtcblxuICAgICAgICBpZiAodGhpcy5pbnB1dFJlZikge1xuICAgICAgICAgICAgdGhpcy5pbnB1dFJlZi5pc0ZvY3VzSW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRSZWYuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuYmx1cigpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZyA9IHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuaW5wdXRDb25maWcsXG4gICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB0cnVlLFxuICAgICAgICAvLyB9O1xuICAgIH1cblxuICAgIHB1YmxpYyByZW1vdmVNdWx0aVNlbGVjdEl0ZW0oaW5kZXg6IG51bWJlcikge1xuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5vcmlnaW5hbE9wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5pZCA9PT0gdGhpcy5tdWx0aXNlbGVjdEl0ZW1zW2luZGV4XS5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMubXVsdGlzZWxlY3RJdGVtc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5fb3B0aW9ucy5zb3J0KFxuICAgICAgICAgICAgKHgsIHkpID0+IE51bWJlcih5LmFjdGl2ZSkgLSBOdW1iZXIoeC5hY3RpdmUpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5vcmlnaW5hbE9wdGlvbnMgPSB0aGlzLl9vcHRpb25zO1xuICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcblxuICAgICAgICBpZiAoIXRoaXMubXVsdGlzZWxlY3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgICAgICAvLyAgICAgLi4udGhpcy5pbnB1dENvbmZpZyxcbiAgICAgICAgICAgIC8vICAgICBtdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAvLyB9O1xuXG4gICAgICAgICAgICB0aGlzLmxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgLy8gdGhpcy5pbnB1dENvbmZpZy5sYWJlbCA9IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IHRoaXMuX29wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmFjdGl2ZSlcbiAgICAgICAgICAgICAgICAuc2xpY2UoLTEpWzBdO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zLmVtaXQoXG4gICAgICAgICAgICB0aGlzLm11bHRpc2VsZWN0SXRlbXMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4uaXRlbSB9O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcyhjdXJyZW50TGFiZWw/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdEl0ZW1zID0gW107XG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcgPSB7XG4gICAgICAgIC8vICAgICAuLi50aGlzLmlucHV0Q29uZmlnLFxuICAgICAgICAvLyAgICAgbXVsdGlTZWxlY3REcm9wZG93bkFjdGl2ZTogdW5kZWZpbmVkLFxuICAgICAgICAvLyB9O1xuXG4gICAgICAgIC8vIHRoaXMuaW5wdXRDb25maWcubGFiZWwgPSBjdXJyZW50TGFiZWxcbiAgICAgICAgLy8gICAgID8gY3VycmVudExhYmVsXG4gICAgICAgIC8vICAgICA6IHRoaXMubXVsdGlTZWxlY3RMYWJlbDtcbiAgICAgICAgdGhpcy5fb3B0aW9ucyA9IHRoaXMuX29wdGlvbnMubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgYWN0aXZlOiBmYWxzZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9yaWdpbmFsT3B0aW9ucyA9IHRoaXMuX29wdGlvbnM7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtcy5lbWl0KG51bGwpO1xuXG4gICAgICAgIHRoaXMubGFzdEFjdGl2ZU11bHRpc2VsZWN0SXRlbSA9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHRvZ2dsZU11bHRpc2VsZWN0RHJvcGRvd24oKSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmlzTXVsdGlTZWxlY3RJbnB1dEZvY3VzID0gIXRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXM7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNNdWx0aVNlbGVjdElucHV0Rm9jdXMpIHtcbiAgICAgICAgICAgIC8vIHRoaXMuaW5wdXRSZWYuc2V0SW5wdXRDdXJzb3JBdFRoZUVuZChcbiAgICAgICAgICAgIC8vICAgICB0aGlzLmlucHV0UmVmLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAvLyApO1xuXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dERyb3Bkb3duID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmLm9wZW4oKTtcbiAgICAgICAgICAgIH0sIDE1MCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmlucHV0UmVmLmlzRm9jdXNJbnB1dCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyUmVmPy5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVuZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICBwdWJsaWMgZHJvcGRvd25WYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gJyc7XG4gICAgcHVibGljIHNldENvbnRyb2xWYWx1ZSh2YWx1ZT86IHN0cmluZywgZHJvcGRvd25JbnB1dFZhbHVlPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UodmFsdWUpOyAvLyBOb3RpZnkgQW5ndWxhciBmb3JtIGFib3V0IHRoZSBjaGFuZ2VcbiAgICAgICAgaWYgKHZhbHVlKSB0aGlzLm9uVG91Y2hlZCgpOyAvLyBNYXJrIGFzIHRvdWNoZWRcbiAgICAgICAgdGhpcy5kcm9wZG93blZhbHVlID0gZHJvcGRvd25JbnB1dFZhbHVlIHx8IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkcm9wZG93bklucHV0VmFsdWUgfHwgdmFsdWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE5hdmlnYXRlIHRocm91Z2ggZHJvcGRvd24gd2l0aCBrZXlib2FyZCBhcnJvd3NcbiAgICAgKi9cbiAgICBwcml2YXRlIGRyb3Bkb3duTmF2aWdhdGlvbihzdGVwOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgbmV4dFN0ZXAgPSB0aGlzLmlucHV0SG92ZXJlZEl0ZW0gKyBzdGVwO1xuXG4gICAgICAgIGlmIChuZXh0U3RlcCA+IHRoaXMuZHJvcGRvd25Db21wb25lbnRSZWYuZHJvcGRvd25PcHRpb24ubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA9IDA7XG4gICAgICAgIGVsc2UgaWYgKG5leHRTdGVwIDwgMClcbiAgICAgICAgICAgIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA9XG4gICAgICAgICAgICAgICAgdGhpcy5kcm9wZG93bkNvbXBvbmVudFJlZi5kcm9wZG93bk9wdGlvbi5sZW5ndGggLSAxO1xuICAgICAgICBlbHNlIHRoaXMuaW5wdXRIb3ZlcmVkSXRlbSA9IG5leHRTdGVwO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbGVhclRpbWVvdXREcm9wZG93bik7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIGNsYXNzPVwiYXBwbGljYXRpb24tZHJvcGRvd25cIlxuICAgIFtuZ0NsYXNzXT1cIlxuICAgICAgICBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgfCBpbnB1dERyb3Bkb3duTXVsdGlzZWxlY3RDbGFzc1xuICAgICAgICAgICAgICAgIDogbXVsdGlzZWxlY3RJdGVtc1xuICAgICAgICAgICAgICAgIDogaXNNdWx0aVNlbGVjdElucHV0Rm9jdXNcbiAgICBcIlxuPlxuICAgIEBpZiAobXVsdGlzZWxlY3RJdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgPHAgY2xhc3M9XCJtdWx0aXNlbGVjdC1sYWJlbFwiPlxuICAgICAgICAgICAge3sgbXVsdGlTZWxlY3RMYWJlbCB9fVxuICAgICAgICA8L3A+XG4gICAgfVxuXG4gICAgQGlmIChpbnB1dENvbmZpZy5tdWx0aVNlbGVjdERyb3Bkb3duQWN0aXZlKSB7XG4gICAgICAgIDwhLS0gTXVsdGlzZWxlY3QgYXJyb3cgLS0+XG4gICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgY2xhc3M9XCJtdWx0aXNlbGVjdC1hcnJvd1wiXG4gICAgICAgICAgICBbc3JjXT1cImlucHV0RHJvcGRvd25TdmdSb3V0ZXMuaW5wdXREcm9wZG93bkFycm93U3ZnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVNdWx0aXNlbGVjdERyb3Bkb3duKClcIlxuICAgICAgICA+PC9zdmctaWNvbj5cbiAgICB9XG5cbiAgICBAaWYgKG11bHRpc2VsZWN0SXRlbXMubGVuZ3RoICYmICFpbnB1dENvbmZpZy5pc0Rpc2FibGVkKSB7XG4gICAgICAgIDwhLS0gTXVsdGlzZWxlY3QgY2xlYXIgYWxsIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImlucHV0LWNsZWFyIG11bHRpc2VsZWN0LWNsZWFyXCJcbiAgICAgICAgICAgIG1haW5Ub29sdGlwPVwiQ2xlYXIgQWxsXCJcbiAgICAgICAgICAgIG5nYlRvb2x0aXBcbiAgICAgICAgICAgIHBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgIHRvb2x0aXBCYWNrZ3JvdW5kPVwiIzJmMmYyZlwiXG4gICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlQWxsTXVsdGlTZWxlY3RJdGVtcygpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHN2Zy1pY29uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jbGVhci14XCJcbiAgICAgICAgICAgICAgICBbc3JjXT1cImlucHV0RHJvcGRvd25TdmdSb3V0ZXMueENsZWFyU3ZnXCJcbiAgICAgICAgICAgID48L3N2Zy1pY29uPlxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICBAaWYgKFxuICAgICAgICBpbnB1dENvbmZpZy5tdWx0aXNlbGVjdERyb3Bkb3duICYmXG4gICAgICAgIG11bHRpc2VsZWN0SXRlbXMubGVuZ3RoICYmXG4gICAgICAgIF90ZW1wbGF0ZSA9PT0gJ211bHRpc2VsZWN0J1xuICAgICkge1xuICAgICAgICA8IS0tIE11bHRpc2VsZWN0IGl0ZW1zIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXVsdGlzZWxlY3QtaXRlbXMge3sgbXVsdGlzZWxlY3RUZW1wbGF0ZSB9fVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICBAZm9yIChcbiAgICAgICAgICAgICAgICBtdWx0aVNlbGVjdCBvZiBtdWx0aXNlbGVjdEl0ZW1zO1xuICAgICAgICAgICAgICAgIHRyYWNrICRpbmRleDtcbiAgICAgICAgICAgICAgICBsZXQgaW5kID0gJGluZGV4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm11bHRpc2VsZWN0LWl0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAge3sgbXVsdGlTZWxlY3Q/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgLSBUb3RhbCBDb3VudGVyIC0tPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRDb25maWcubXVsdGlTZWxlY3RJdGVtUmFuZ2UgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpU2VsZWN0Py50b3RhbENvdW50ZXJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdD8uYWN0aXZlQ291bnRlciB9fSBvZlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG11bHRpU2VsZWN0Py50b3RhbENvdW50ZXIgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tdWx0aVNlbGVjdEl0ZW1SYW5nZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIW11bHRpU2VsZWN0Py50b3RhbENvdW50ZXJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBtdWx0aVNlbGVjdD8uYWN0aXZlQ291bnRlciB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmICghaW5wdXRDb25maWcuaXNEaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgQ291bnRlciAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVtb3ZlTXVsdGlTZWxlY3RJdGVtKGluZClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXVsdGlzZWxlY3QtaXRlbS1jbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFpblRvb2x0aXA9XCJDbGVhclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmdiVG9vbHRpcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uPVwidG9wXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQmFja2dyb3VuZD1cIiMyZjJmMmZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3JjXT1cImlucHV0RHJvcGRvd25TdmdSb3V0ZXMueENsZWFyU3ZnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zdmctaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tIERyb3Bkb3duIHNlYXJjaCAtLT5cblxuICAgIEBpZiAoIWlucHV0Q29uZmlnLmlzSWNvbklucHV0KSB7XG4gICAgICAgIEBpZiAoIXNlYXJjaElucHV0VGV4dC52YWx1ZSkge1xuICAgICAgICAgICAgPCEtLSA8ZGl2XG4gICAgICAgICAgICAoc2Nyb2xsKT1cIm9uU2Nyb2xsRHJvcGRvd24oJGV2ZW50LnRhcmdldClcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgIHNjcm9sbDogX29wdGlvbnMgfCBjYURyb3Bkb3duQ291bnQ6IF90ZW1wbGF0ZSxcbiAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1ncm91cHMnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdncm91cHMnIHx8XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2xvYWQtYnJva2VyLWNvbnRhY3QnLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWZ1ZWwtZnJhbmNoaXNlJzpcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZnVlbC1mcmFuY2hpc2UnLFxuICAgICAgICAgICAgICAgICdtZXJnZS1kcm9wZG93bi1ib2R5LXdpdGgtaW5wdXQnOlxuICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tZXJnZURyb3Bkb3duQm9keVdpdGhJbnB1dCxcbiAgICAgICAgICAgICAgICAnbm8tcmVzdWx0LWNvbnRhaW5lcic6IF9vcHRpb25zWzBdPy5uYW1lID09PSAnTm8gUmVzdWx0cycsXG4gICAgICAgICAgICAgICAgJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT0gJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbnMgIHt7IGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzcyB9fVwiXG4gICAgICAgID4gLS0+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgW2NsYXNzLm9wZW5dPVwiZHJvcERvd25Jc09wZW5cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5sZWZ0SWNvbl09XCJpbnB1dENvbmZpZy5wbGFjZWhvbGRlckljb25cIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsOiBfb3B0aW9ucyB8IGNhRHJvcGRvd25Db3VudDogX3RlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAnZHJvcGRvd24tb3B0aW9ucy1ncm91cHMnOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnZ3JvdXBzJyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnbG9hZC1icm9rZXItY29udGFjdCcsXG4gICAgICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWZ1ZWwtZnJhbmNoaXNlJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2Z1ZWwtZnJhbmNoaXNlJyxcbiAgICAgICAgICAgICAgICAgICAgJ21lcmdlLWRyb3Bkb3duLWJvZHktd2l0aC1pbnB1dCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5tZXJnZURyb3Bkb3duQm9keVdpdGhJbnB1dCxcbiAgICAgICAgICAgICAgICAgICAgJ3N2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGUnOlxuICAgICAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09ICdzdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlJyxcbiAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duX3ZhbHVlIGRyb3Bkb3duLW9wdGlvbnMgIHt7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzc1xuICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAc3dpdGNoIChfdGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0RJU1BBVENIRVNfVFREKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tb3B0aW9uIGRyb3Bkb3duLWRvdWJsZS1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93Tm9SZXN1bHN0XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRleF09XCIwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbSFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0JST0tFUikge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChhY3RpdmVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbk9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9TSElQUEVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5PcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlci1pdGVtPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0JST0tFUl9DT05UQUNUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZC1icm9rZXItY29udGFjdC1ncm91cHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QtaXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaW5PcHRpb25dPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L2NhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3QtaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9ESVNQQVRDSEVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtZGlzcGF0Y2hlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZHJvcGRvd25XaXRoSW1hZ2VdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2luT3B0aW9uXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXItaXRlbT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8IS0tIFxuICAgICAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlNWR1RFWFRfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoYWN0aXZlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLWl0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZE9wdGlvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlLWl0ZW0+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gLS0+XG5cbiAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTcGVjaWFsIERyb3Bkb3duIFNlbGVjdGVkIFNWRyB3aXRoIG9yIFdpdGhvdXQgVGV4dCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaW5wdXRDb25maWcuZHJvcGRvd25JbWFnZUlucHV0ICYmIGFjdGl2ZUl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnLWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NyY109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dCFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlucHV0RHJvcGRvd25HZXRJY29uczogYWN0aXZlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLXNlbGVjdGVkLWltYWdlIHt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQ/LmNsYXNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Vuc2V0LWNvbG9yJzpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQ/LmNsYXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N2Z1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw6IGlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYWN0aXZlSXRlbT8uY29kZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJyNmZmZmZmYnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmctaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXQ/LndpdGhUZXh0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWlucHV0Q29uZmlnLmRyb3Bkb3duSW1hZ2VJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZHJvcGRvd25WYWx1ZSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cblxuICAgICAgICA8Y2EtaW5wdXQtdGVzdFxuICAgICAgICAgICAgI3QyPVwibmdiUG9wb3ZlclwiXG4gICAgICAgICAgICBbbmdiUG9wb3Zlcl09XCJjYUlucHV0RHJvcGRvd25Qb3BvdmVyXCJcbiAgICAgICAgICAgIHBvcG92ZXJDbGFzcz1cImNhLWlucHV0LWRyb3Bkb3duXCJcbiAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcbiAgICAgICAgICAgIFtjb250YWluZXJdPVwiJ2JvZHknXCJcbiAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiXG4gICAgICAgICAgICAgICAgX3RlbXBsYXRlID09ICdzdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlJ1xuICAgICAgICAgICAgICAgICAgICA/IFsnYm90dG9tLWxlZnQnLCAndG9wLWxlZnQnXVxuICAgICAgICAgICAgICAgICAgICA6IFsnYm90dG9tLWxlZnQnXVxuICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICNpbnB1dFxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImlucHV0Rm9ybUNvbnRyb2wgfCBmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICBbcGFyZW50Q29udHJvbF09XCJnZXRTdXBlckNvbnRyb2xcIlxuICAgICAgICAgICAgW2luY29ycmVjdFZhbHVlXT1cImlzSW5jb3JyZWN0VmFsdWVcIlxuICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgIFtzZWxlY3RlZERyb3Bkb3duTGFiZWxDb2xvcl09XCJcbiAgICAgICAgICAgICAgICBpbnB1dENvbmZpZy5kcm9wZG93bkxhYmVsXG4gICAgICAgICAgICAgICAgICAgID8gYWN0aXZlSXRlbVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBhY3RpdmVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGFjdGl2ZUl0ZW1Db2xvclxuICAgICAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgICBbdGVtcGxhdGVdPVwiX3RlbXBsYXRlXCJcbiAgICAgICAgICAgIChibHVySW5wdXQpPVwib25CbHVySW5wdXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xlYXIpPVwib25DbGVhcklucHV0RXZlbnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY29tbWFuZEV2ZW50KT1cImNvbW1hbmRFdmVudCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzaG93SGlkZURyb3Bkb3duKT1cInNob3dIaWRlRHJvcGRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAoZHJvcERvd25LZXlOYXZpZ2F0aW9uKT1cImRyb3BEb3duS2V5TmF2aWdhdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgIChpbmNvcnJlY3RFdmVudCk9XCJvbkluY29ycmVjdElucHV0KCRldmVudClcIlxuICAgICAgICAgICAgKGhpZGRlbik9XCJoYW5kbGVIaWRkZW5Ecm9wZG93bigpXCJcbiAgICAgICAgICAgIChzaG93bik9XCJoYW5kbGVPcGVuRHJvcGRvd24oKVwiXG4gICAgICAgID48L2NhLWlucHV0LXRlc3Q+XG4gICAgfVxuXG4gICAgPCEtLSBEcm9wZG93biBpY29uIGluc3RlYWQgb2YgaW5wdXQgLS0+XG4gICAgQGlmIChpbnB1dENvbmZpZy5pc0ljb25JbnB1dCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBpbnB1dC1pY29uLWNvbnRhaW5lclwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgdmFsaWQ6XG4gICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLmlzVmFsaWRJY29uICYmXG4gICAgICAgICAgICAgICAgICAgICFpbnB1dENvbmZpZy5pbnB1dEljb24/LmluY2x1ZGVzKCdjdXN0b20nKSxcbiAgICAgICAgICAgICAgICBhY3RpdmU6IHBvcG92ZXJSZWY/LmlzT3BlbigpLFxuICAgICAgICAgICAgfVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxzdmctaWNvblxuICAgICAgICAgICAgICAgICN0Mj1cIm5nYlBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIFtuZ2JQb3BvdmVyXT1cImNhSW5wdXREcm9wZG93blBvcG92ZXJcIlxuICAgICAgICAgICAgICAgIHBvcG92ZXJDbGFzcz1cImNhLWlucHV0LWRyb3Bkb3duXCJcbiAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXG4gICAgICAgICAgICAgICAgW2NvbnRhaW5lcl09XCInYm9keSdcIlxuICAgICAgICAgICAgICAgIFtwbGFjZW1lbnRdPVwiWydib3R0b20tbGVmdCddXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWljb25cIlxuICAgICAgICAgICAgICAgIFtzcmNdPVwiXG4gICAgICAgICAgICAgICAgICAgIGlucHV0RHJvcGRvd25TdmdSb3V0ZXMucmVwYWlyUG1TdmdSb3V0ZSArXG4gICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLmlucHV0SWNvblxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9zdmctaWNvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG48bmctdGVtcGxhdGUgI2NhSW5wdXREcm9wZG93blBvcG92ZXI+XG4gICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRHJvcGRvd24gb3B0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG4gICAgQGlmIChpbnB1dENvbmZpZz8ubWVyZ2VEcm9wZG93bkJvZHlXaXRoSW5wdXQgJiYgX29wdGlvbnM/Lmxlbmd0aCkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cImRyb3Bkb3duLW9wdGlvbnMtZGl2aWRlciB7e1xuICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLmRyb3Bkb3duV2lkdGhDbGFzc1xuICAgICAgICAgICAgfX1cIlxuICAgICAgICAgICAgW2NsYXNzLmRpc3BhdGNoX2Ryb3Bkb3duXT1cIl90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZSdcIlxuICAgICAgICA+PC9kaXY+XG4gICAgfVxuXG4gICAgQGlmIChcbiAgICAgICAgKGlucHV0Q29uZmlnPy5uYW1lICE9ICdBZGRyZXNzJyAmJlxuICAgICAgICAgICAgaW5wdXRDb25maWc/Lm5hbWUgIT0gJ1JvdXRpbmdBZGRyZXNzJyAmJlxuICAgICAgICAgICAgIWlucHV0Q29uZmlnLmlzRGlzYWJsZWQpIHx8XG4gICAgICAgICgoaW5wdXRDb25maWc/Lm5hbWUgPT0gJ0FkZHJlc3MnIHx8XG4gICAgICAgICAgICBpbnB1dENvbmZpZz8ubmFtZSA9PSAnUm91dGluZ0FkZHJlc3MnKSAmJlxuICAgICAgICAgICAgIWlucHV0Q29uZmlnLmlzRGlzYWJsZWQgJiZcbiAgICAgICAgICAgIF9vcHRpb25zPy5sZW5ndGgpXG4gICAgKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIChzY3JvbGwpPVwib25TY3JvbGxEcm9wZG93bigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgc2Nyb2xsOiBfb3B0aW9ucyB8IGNhRHJvcGRvd25Db3VudDogX3RlbXBsYXRlLFxuICAgICAgICAgICAgICAgICdkcm9wZG93bi1vcHRpb25zLWdyb3Vwcyc6XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PT0gJ2dyb3VwcycgfHxcbiAgICAgICAgICAgICAgICAgICAgX3RlbXBsYXRlID09PSAnbG9hZC1icm9rZXItY29udGFjdCcsXG4gICAgICAgICAgICAgICAgJ2Ryb3Bkb3duLW9wdGlvbnMtZnVlbC1mcmFuY2hpc2UnOlxuICAgICAgICAgICAgICAgICAgICBfdGVtcGxhdGUgPT09ICdmdWVsLWZyYW5jaGlzZScsXG4gICAgICAgICAgICAgICAgJ21lcmdlLWRyb3Bkb3duLWJvZHktd2l0aC1pbnB1dCc6XG4gICAgICAgICAgICAgICAgICAgIGlucHV0Q29uZmlnLm1lcmdlRHJvcGRvd25Cb2R5V2l0aElucHV0LFxuICAgICAgICAgICAgICAgICduby1yZXN1bHQtY29udGFpbmVyJzogX29wdGlvbnNbMF0/Lm5hbWUgPT09ICdObyBSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZSc6XG4gICAgICAgICAgICAgICAgICAgIF90ZW1wbGF0ZSA9PSAnc3ZndGV4dC1kaXNwYXRjaC10ZW1wbGF0ZScsXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZHJvcGRvd24tb3B0aW9ucyAge3sgaW5wdXRDb25maWcuZHJvcGRvd25XaWR0aENsYXNzIH19XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQHN3aXRjaCAoX3RlbXBsYXRlKSB7XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU1ZHIFRlbXBsYXRlIChSZW5kZXIgc3ZncyBvciB0ZXh0IGlmIHN2Z3MgZG9lc24ndCBleGlzdCApIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uU1ZHX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZnLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93bldpdGhJbWFnZV09XCJpbnB1dENvbmZpZy5kcm9wZG93bkltYWdlSW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lciBcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25TdmdUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj4gLS0+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3ZnIFRleHQgVGVtcGxhdGUgKGRpc3BsYXkgZmxleCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5TVkdURVhUX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tc3ZndGV4dC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LXRlbXBsYXRlPlxuXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdmdUZXh0VGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLURpc3BhdGNoIGRyb3Bkb3duLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlNWR1RFWFRfRElTUEFUQ0hfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1zdmd0ZXh0LWRpc3BhdGNoLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLXN2Z3RleHQtZGlzcGF0Y2gtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImRpc3BhdGNoVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERldGFpbHMgdGVtcGxhdGUgKHRydWNrLCB0cmFpbGVyLi4uIGRldGFpbHMtcGFnZXMpICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkRFVEFJTFNfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kZXRhaWxzLXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0XT1cIl9zb3J0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZGV0YWlscy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsc1RlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHcm91cGluZyB0ZW1wbGF0ZSAoY2FuIHNlZSBvbiBjb250YWN0IG1vZGFsKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5HUk9VUFMpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1ncm91cHNcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1ncm91cHM+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTXVsdGlzZWxlY3QgVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5NVUxUSVNFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLW11bHRpc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYXN0QWN0aXZlTXVsdGlzZWxlY3RJdGVtXT1cImxhc3RBY3RpdmVNdWx0aXNlbGVjdEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbk11bHRpc2VsZWN0U2VsZWN0KT1cIm9uTXVsdGlzZWxlY3RTZWxlY3QoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1tdWx0aXNlbGVjdD5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTGFiZWxzIFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTEFCRUxTKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbGFiZWxzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dENvbmZpZ109XCJpbnB1dENvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxNb2RlXT1cImxhYmVsTW9kZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FuQWRkTmV3XT1cIl9jYW5BZGROZXdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sYWJlbHM+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGlzcGF0Y2ggVGVtcGxhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5ESVNQQVRDSCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWRpc3BhdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZGlzcGF0Y2g+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTG9hZCBEaXNwYXRjaGVyIFRlbXBsYXRlICh1c2VyIGF2YXRhciArIHVzZXIgbmFtZSkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5MT0FEX0RJU1BBVENIRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRDb25maWddPVwiaW5wdXRDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVyPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgQ29tYmluZSBUcnVjay1UcmFpbGVyLURyaXZlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfRElTUEFUQ0hFU19UVEQpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWRpc3BhdGNoZXMtdHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1kaXNwYXRjaGVzLXR0ZD5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfQlJPS0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tbG9hZC1icm9rZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBMb2FkIEJyb2tlciBDb250YWN0IFRlbXBsYXRlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uTE9BRF9CUk9LRVJfQ09OVEFDVCkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtYnJva2VyLWNvbnRhY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi1sb2FkLWJyb2tlci1jb250YWN0PlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvYWQgU2hpcHBlciBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkxPQURfU0hJUFBFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWxvYWQtc2hpcHBlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBUZW1wbGF0ZSBUZXh0IC0gQ291bnRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLlRFWFRfQ09VTlRFUikge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLXRleHQtY291bnRlcj5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdWVsIEZyYW5jaGlzZSBUZW1wbGF0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+XG5cbiAgICAgICAgICAgICAgICBAY2FzZSAoZHJvcGRvd25UZW1wbGF0ZVR5cGVFbnVtLkZVRUxfRlJBTkNISVNFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAodG9nZ2xlTmVzdGVkTGlzdCk9XCJ0b2dnbGVOZXN0ZWRMaXN0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbUdyb3VwKT1cIm9uQWN0aXZlSXRlbUdyb3VwKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZnVlbC1mcmFuY2hpc2U+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBEb3VibGUgVGV4dCBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX1RFWFRfVEVNUExBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kb3VibGUtdGV4dC10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgI2Ryb3Bkb3duQ29tcG9uZW50UmVmXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjYURyb3Bkb3duT3B0aW9uc1BpcGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX29wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaW5wdXRDb25maWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogY2FuQWRkTmV3XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGxhYmVsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHNvcnRcbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYWN0aXZlSXRlbV09XCJhY3RpdmVJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0gRG91YmxlIENvbHVtbiBUZW1wbGF0ZSAtLT5cblxuICAgICAgICAgICAgICAgIEBjYXNlIChkcm9wZG93blRlbXBsYXRlVHlwZUVudW0uRE9VQkxFX0NPTFVNTl9URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLWRvdWJsZS10ZXh0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tZG91YmxlLXRleHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLSBUcmlwbGUgQ29sdW1uIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5UUklQTEVfQ09MVU1OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhcHAtY2EtaW5wdXQtZHJvcGRvd24tdHJpcGxlLXRleHQtdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICNkcm9wZG93bkNvbXBvbmVudFJlZlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY2FEcm9wZG93bk9wdGlvbnNQaXBlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9vcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGlucHV0Q29uZmlnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNhbkFkZE5ld1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBsYWJlbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzb3J0XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGl2ZUl0ZW1dPVwiYWN0aXZlSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoVGV4dF09XCJzZWFyY2hJbnB1dFRleHQudmFsdWUgfHwgJydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG9uQWN0aXZlSXRlbSk9XCJvbkFjdGl2ZUl0ZW0oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRIb3ZlcmVkSXRlbV09XCJpbnB1dEhvdmVyZWRJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICAgICAgICAgID48L2FwcC1jYS1pbnB1dC1kcm9wZG93bi10cmlwbGUtdGV4dC10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICA8IS0tIFBBWVJPTEwgVFJVQ0tTIFRlbXBsYXRlIC0tPlxuXG4gICAgICAgICAgICAgICAgQGNhc2UgKGRyb3Bkb3duVGVtcGxhdGVUeXBlRW51bS5QQVlST0xMX1RSVUNLUykge1xuICAgICAgICAgICAgICAgICAgICA8YXBwLWNhLWlucHV0LWRyb3Bkb3duLXBheXJvbGwtdHJ1Y2tzXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRleHRdPVwic2VhcmNoSW5wdXRUZXh0LnZhbHVlIHx8ICcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChvbkFjdGl2ZUl0ZW0pPVwib25BY3RpdmVJdGVtKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0SG92ZXJlZEl0ZW1dPVwiaW5wdXRIb3ZlcmVkSXRlbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgICAgICAgICA+PC9hcHAtY2EtaW5wdXQtZHJvcGRvd24tcGF5cm9sbC10cnVja3M+XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgPCEtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVmYXVsdCBUZW1wbGF0ZSAtIFJlbmRlciBPbmx5IFRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPlxuICAgICAgICAgICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgICAgICAgICAgPGFwcC1jYS1pbnB1dC1kcm9wZG93bi1kZWZhdWx0LXRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAjZHJvcGRvd25Db21wb25lbnRSZWZcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNhRHJvcGRvd25PcHRpb25zUGlwZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfb3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBpbnB1dENvbmZpZ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBjYW5BZGROZXdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbGFiZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogc29ydFxuICAgICAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthY3RpdmVJdGVtXT1cImFjdGl2ZUl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lucHV0Q29uZmlnXT1cImlucHV0Q29uZmlnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUZXh0XT1cInNlYXJjaElucHV0VGV4dC52YWx1ZSB8fCAnJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAob25BY3RpdmVJdGVtKT1cIm9uQWN0aXZlSXRlbSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpbnB1dEhvdmVyZWRJdGVtXT1cImlucHV0SG92ZXJlZEl0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvYXBwLWNhLWlucHV0LWRyb3Bkb3duLWRlZmF1bHQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|