@sunbird-cb/consumption 0.1.25-cbrelease-4.8.27-multilingual → 0.1.25-cbrelease-4.8.28
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/_common/cards/card-portrait/card-portrait.component.mjs +6 -3
- package/esm2022/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.mjs +2 -1
- package/esm2022/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.mjs +1 -1
- package/esm2022/lib/_common/dialog-components/certificate-dialog/certificate-dialog.component.mjs +2 -2
- package/esm2022/lib/_common/microsites/mdo-channels/components/column-section-display/column-section-display.component.mjs +54 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/competency/competency.component.mjs +50 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/content-strip/content-strip.component.mjs +56 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/editor-dialog/editor-dialog.component.mjs +286 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/looker-section/looker-section.component.mjs +45 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/main-content/main-content.component.mjs +143 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/mobile-sections/mobile-sections.component.mjs +35 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/support-section/support-section.component.mjs +30 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/top-learners/top-learners.component.mjs +42 -0
- package/esm2022/lib/_common/microsites/mdo-channels/components/top-section/top-section.component.mjs +99 -0
- package/esm2022/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.mjs +986 -2
- package/esm2022/lib/_common/microsites/mdo-channels/mdo-channel-v3/mdo-channel-v3.component.mjs +222 -0
- package/esm2022/lib/_common/microsites/mdo-channels/mdo-channel.module.mjs +83 -7
- package/esm2022/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.mjs +5 -2
- package/esm2022/lib/_models/card-content.model.mjs +1 -1
- package/esm2022/lib/_services/widget-content-lib.service.mjs +5 -1
- package/esm2022/public-api.mjs +2 -1
- package/fesm2022/sunbird-cb-consumption.mjs +2067 -37
- package/fesm2022/sunbird-cb-consumption.mjs.map +1 -1
- package/lib/_common/cards/card-portrait/card-portrait.component.d.ts.map +1 -1
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.component.d.ts.map +1 -1
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts +1 -0
- package/lib/_common/content-strip-with-tabs-lib/content-strip-with-tabs-lib.model.d.ts.map +1 -1
- package/lib/_common/microsites/mdo-channels/components/column-section-display/column-section-display.component.d.ts +20 -0
- package/lib/_common/microsites/mdo-channels/components/column-section-display/column-section-display.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/competency/competency.component.d.ts +16 -0
- package/lib/_common/microsites/mdo-channels/components/competency/competency.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/content-strip/content-strip.component.d.ts +16 -0
- package/lib/_common/microsites/mdo-channels/components/content-strip/content-strip.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/editor-dialog/editor-dialog.component.d.ts +61 -0
- package/lib/_common/microsites/mdo-channels/components/editor-dialog/editor-dialog.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/looker-section/looker-section.component.d.ts +17 -0
- package/lib/_common/microsites/mdo-channels/components/looker-section/looker-section.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/main-content/main-content.component.d.ts +32 -0
- package/lib/_common/microsites/mdo-channels/components/main-content/main-content.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/mobile-sections/mobile-sections.component.d.ts +15 -0
- package/lib/_common/microsites/mdo-channels/components/mobile-sections/mobile-sections.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/support-section/support-section.component.d.ts +10 -0
- package/lib/_common/microsites/mdo-channels/components/support-section/support-section.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/top-learners/top-learners.component.d.ts +13 -0
- package/lib/_common/microsites/mdo-channels/components/top-learners/top-learners.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/components/top-section/top-section.component.d.ts +23 -0
- package/lib/_common/microsites/mdo-channels/components/top-section/top-section.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v2/mdo-channel-v2.component.d.ts.map +1 -1
- package/lib/_common/microsites/mdo-channels/mdo-channel-v3/mdo-channel-v3.component.d.ts +54 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel-v3/mdo-channel-v3.component.d.ts.map +1 -0
- package/lib/_common/microsites/mdo-channels/mdo-channel.module.d.ts +46 -26
- package/lib/_common/microsites/mdo-channels/mdo-channel.module.d.ts.map +1 -1
- package/lib/_common/strips/content-strip-with-tabs-pills/content-strip-with-tabs-pills.component.d.ts.map +1 -1
- package/lib/_models/card-content.model.d.ts +1 -0
- package/lib/_models/card-content.model.d.ts.map +1 -1
- package/lib/_services/widget-content-lib.service.d.ts.map +1 -1
- package/package.json +2 -2
- package/public-api.d.ts +1 -0
- package/public-api.d.ts.map +1 -1
- package/sunbird-cb-consumption-0.1.25-cbrelease-4.8.28.tgz +0 -0
- package/sunbird-cb-consumption-0.1.25-cbrelease-4.8.27-multilingual.tgz +0 -0
|
@@ -1298,6 +1298,7 @@ export class ContentStripWithTabsPillsComponent extends WidgetBaseComponent {
|
|
|
1298
1298
|
let all = [];
|
|
1299
1299
|
let upcoming = [];
|
|
1300
1300
|
let overdue = [];
|
|
1301
|
+
let apar = [];
|
|
1301
1302
|
array.forEach((e) => {
|
|
1302
1303
|
all.push(e);
|
|
1303
1304
|
if (e.planDuration === NsCardContent.ACBPConst.OVERDUE) {
|
|
@@ -1337,11 +1338,13 @@ export class ContentStripWithTabsPillsComponent extends WidgetBaseComponent {
|
|
|
1337
1338
|
upcoming = upcoming.filter((data) => {
|
|
1338
1339
|
return data.contentStatus < 2;
|
|
1339
1340
|
});
|
|
1341
|
+
apar = array.filter((e) => e.isApar === true);
|
|
1340
1342
|
return [
|
|
1341
1343
|
{ value: 'all', widgets: this.transformContentsToWidgets(all, strip) },
|
|
1342
1344
|
{ value: 'upcoming', widgets: this.transformContentsToWidgets(upcoming, strip) },
|
|
1343
1345
|
{ value: 'completed', widgets: this.transformContentsToWidgets(allCompleted, strip) },
|
|
1344
|
-
{ value: 'overdue', widgets: this.transformContentsToWidgets(overdue, strip) }
|
|
1346
|
+
{ value: 'overdue', widgets: this.transformContentsToWidgets(overdue, strip) },
|
|
1347
|
+
{ value: 'apar', widgets: this.transformContentsToWidgets(apar, strip) }
|
|
1345
1348
|
];
|
|
1346
1349
|
}
|
|
1347
1350
|
resetSelectedPill(pillData) {
|
|
@@ -1705,4 +1708,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1705
1708
|
type: HostBinding,
|
|
1706
1709
|
args: ['id']
|
|
1707
1710
|
}] } });
|
|
1708
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBb0IsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWdCaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLDZEQUE2RDtBQUM3RCwyQkFBMkI7QUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBS3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBRTFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBeUN4RCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQTtBQVE5QixNQUFNLE9BQU8sa0NBQW1DLFNBQVEsbUJBQW1CO0lBK0N6RTtJQUNFLDJEQUEyRDtJQUNwQyxXQUFnQixFQUMvQixVQUFtQyxFQUNuQyxTQUF3QixFQUN4QixRQUFzQixFQUN0QixTQUFnQyxFQUNqQyxVQUEwQjtJQUNqQyw0QkFBNEI7SUFDNUIsNENBQTRDO0lBQ3JDLE1BQWMsRUFDYixPQUE2QixFQUM3QixTQUEyQixFQUMzQixnQkFBaUQsRUFDakQsU0FBOEIsRUFDOUIsU0FBb0IsRUFDckIsUUFBcUI7UUFFNUIsS0FBSyxFQUFFLENBQUM7UUFmQSxlQUFVLEdBQVYsVUFBVSxDQUF5QjtRQUNuQyxjQUFTLEdBQVQsU0FBUyxDQUFlO1FBQ3hCLGFBQVEsR0FBUixRQUFRLENBQWM7UUFDdEIsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBZ0I7UUFHMUIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNiLFlBQU8sR0FBUCxPQUFPLENBQXNCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUM7UUFDakQsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDOUIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFhO1FBekRwQixrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDdkMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFBO1FBQ3pDLHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUE7UUFDM0MsZUFBVSxHQUFRLEVBQUUsQ0FBQTtRQUNwQixnQkFBVyxHQUFZLEtBQUssQ0FBQTtRQUM1QixpQkFBWSxHQUFRLEVBQUUsQ0FBQTtRQUV4QixPQUFFLEdBQUcscUJBQXFCLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBQ2pELHdCQUFtQixHQUE2QyxFQUFFLENBQUM7UUFDbkUsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDOUIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUN6QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIscUJBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4QixZQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ3hDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUV6Qiw0QkFBdUIsR0FBd0IsSUFBSSxDQUFDO1FBQ3BELHNCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUN2Qix3QkFBbUIsR0FBRyxHQUFHLENBQUM7UUFFMUIsaUJBQVksR0FBUSxFQUFFLENBQUM7UUFDdkIsbUJBQWMsR0FBVyxDQUFDLENBQUE7UUFDMUIsb0JBQWUsR0FBVyxDQUFDLENBQUE7UUFDM0Isd0JBQW1CLEdBQUcsS0FBSyxDQUFBO1FBQzNCLHlCQUFvQixHQUFHLEtBQUssQ0FBQTtRQUM1Qix5QkFBb0IsR0FBRyxLQUFLLENBQUE7UUFDNUIsa0JBQWEsR0FBRyxLQUFLLENBQUE7UUFFckIsb0NBQStCLEdBQXdCLElBQUksQ0FBQztRQUM1RCwyQkFBc0IsR0FBd0IsSUFBSSxDQUFDO1FBQ25ELHFCQUFnQixHQUFHLEVBQUUsQ0FBQTtRQUdyQixvQkFBZSxHQUFHLEtBQUssQ0FBQTtRQUV2QixrQkFBYSxHQUFHLFNBQVMsQ0FBQTtRQW9CdkIsSUFBSSxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNuRSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtJQUNoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLG1DQUFtQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM1RixJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDaEIsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUE7SUFDOUIsQ0FBQztJQUVELHFCQUFxQjtRQUVuQixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxzQkFBc0IsRUFBRTtZQUMzRSxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ25GLElBQUksQ0FBQyxJQUFJO29CQUFFLE9BQU07Z0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMseUJBQXlCLENBQUMsSUFBSSxDQUFDLENBQUE7Z0JBQy9DLElBQUksSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzlDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssU0FBUyxDQUFDOzJCQUMxQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssUUFBUTsyQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLGtCQUFrQixDQUFDO3VCQUN4RCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDM0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtvQkFDL0QsbURBQW1EO29CQUNuRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDakgsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO3dCQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQTt3QkFDbkQsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsaUJBQWlCLEVBQUUsQ0FBQTt3QkFDdEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtxQkFDakM7aUJBQ0Y7cUJBQU0sSUFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsS0FBSyxTQUFTO29CQUM1QyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLEtBQUssUUFBUTtvQkFDM0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLGtCQUFrQixFQUNyRDtvQkFDQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2lCQUNqQztZQUNILENBQUMsQ0FBQyxDQUFBO1NBQ0g7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsR0FBVztRQUMxQixPQUFPLEdBQUcsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7SUFDbEQsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRTtZQUNoQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDNUM7UUFFRCxJQUFJLElBQUksQ0FBQywrQkFBK0IsRUFBRTtZQUN4QyxJQUFJLENBQUMsK0JBQStCLENBQUMsV0FBVyxFQUFFLENBQUE7U0FDbkQ7UUFFRCxJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQixJQUFJLENBQUMsc0JBQXNCLENBQUMsV0FBVyxFQUFFLENBQUE7WUFDekMsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtTQUNqRDtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsR0FBVztRQUN2QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxFQUFFO1lBQ2xGLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDO1NBQy9CO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBVztRQUMzQixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztRQUNoRCxjQUFjLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxFQUFFLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUNPLGdCQUFnQixDQUFDLEdBQVc7UUFDbEMsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUQsT0FBTyxPQUFPLENBQUMsV0FBVyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEgsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDM0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtRQUNELGlCQUFpQjtRQUNqQixLQUFLLE1BQU0sS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQzFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNuQyxJQUFJLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2xEO1NBQ0Y7UUFDRCwyQkFBMkI7UUFDM0IsTUFBTSxXQUFXLEdBQWtELElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTTthQUN0RixHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO1lBQ2QsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUU7WUFDaEUsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxJQUFJLEVBQUU7U0FDdkUsQ0FBQyxDQUFDO2FBQ0YsTUFBTSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQ3hELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPO2FBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ3hELFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNqQixXQUFXO2lCQUNSLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLENBQUM7aUJBQ2hFLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7aUJBQ2YsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGlCQUFpQixDQUFDLEdBQVcsRUFBRSxxQkFBcUIsR0FBRyxJQUFJO1FBQ2pFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDMUUsSUFBSSxTQUFTLEVBQUU7WUFDYixJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUM7U0FDbEU7SUFDSCxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQVM7UUFDdEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBRWQsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1lBQzVGLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbEYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFDaEMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsZUFBZSxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsMkJBQTJCLEVBQUU7b0JBQ2xHLEtBQUssR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO2lCQUNuQjtZQUNILENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO2dCQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO2FBQ3ZCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO2FBQ3hCO1NBQ0Y7UUFDRCx5REFBeUQ7UUFDekQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztJQUMzQyxDQUFDO0lBRUQsT0FBTyxDQUFDLElBQTJCO1FBQ2pDLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFFWixDQUFDO0lBQ0QsY0FBYyxDQUNaLEtBQTJELEVBQzNELElBQTJCO1FBRTNCLElBQ0UsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQixLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVc7WUFDM0IsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUN2QztZQUNBLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7U0FDakQ7UUFDRCxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLEVBQUU7WUFDdEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FDakUsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQzdCLENBQUM7WUFDRixJQUFJLFlBQVksRUFBRTtnQkFDaEIsT0FBTyxZQUFZLENBQUMsT0FBTyxJQUFJLFlBQVksRUFBRSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUNqRTtTQUNGO2FBQU0sSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLEtBQUssa0JBQWtCLEVBQUU7WUFDdEQsT0FBTyxDQUNMLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUN4RSxDQUFDO1NBQ0g7YUFBTTtZQUNMLE9BQU8sQ0FDTCxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FDeEUsQ0FBQztTQUNIO0lBQ0gsQ0FBQztJQUNELFlBQVksQ0FBQyxJQUEyQjtRQUN0QyxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjLEtBQUssU0FBUyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxJQUEyQjtRQUNsRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUNELFNBQVMsQ0FBQyxJQUEyQjtRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMvQztRQUFDO1lBQ0EsbUZBQW1GO1lBQ25GLGtDQUFrQztZQUNsQyxrQ0FBa0M7WUFDbEMsK0NBQStDO1lBQy9DLGdEQUFnRDtZQUNoRCx1Q0FBdUM7WUFDdkMsbURBQW1EO1lBQ25ELDRCQUE0QjtZQUM1QixZQUFZO1lBQ1osaURBQWlEO1lBQ2pELG9GQUFvRjtZQUNwRixZQUFZO1lBQ1osa0RBQWtEO1lBQ2xELDRCQUE0QjtZQUM1QixZQUFZO1lBQ1osa0RBQWtEO1lBQ2xELHlCQUF5QjtZQUN6QixZQUFZO1lBQ1osMEJBQTBCO1lBQzFCLDBIQUEwSDtZQUMxSCw2Q0FBNkM7WUFDN0MsMEJBQTBCO1lBRTFCLE1BQU07WUFDTixLQUFLO1lBQ0wsaUVBQWlFO1lBQ2pFLE9BQU8sSUFBSSxDQUFDO1NBQ2I7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsU0FBYztRQUN4QyxNQUFNLE9BQU8sR0FBUSxFQUFFLENBQUM7UUFDeEIsSUFBSSxTQUFTLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtZQUNuQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRTtnQkFDNUIsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNKLE9BQU8sT0FBTyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVPLDBCQUEwQixDQUFDLFNBQWM7UUFDL0MsTUFBTSxPQUFPLEdBQVEsRUFBRSxDQUFDO1FBQ3hCLElBQUksU0FBUyxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUU7WUFDbkMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUMzQixPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUN4QixDQUFDLENBQUMsQ0FBQztZQUNMLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDSixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxPQUFZO1FBQzlCLElBQUksUUFBYSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQ3hELDJCQUEyQjtZQUMzQixPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtTQUMxRTthQUFNLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsMkJBQTJCLENBQUMsRUFBRTtZQUN6RSwyQkFBMkI7WUFDM0IsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQywyQkFBMkIsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7U0FDOUY7YUFBTSxJQUFJLE9BQU8sQ0FBQyxZQUFZO1lBQzdCLE9BQU8sQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFDNUM7WUFDQSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLE9BQU8sQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQzthQUN4QztpQkFBTTtnQkFDTCxPQUFPLENBQUMsWUFBWSxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDO2dCQUV0RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUNwRCxPQUFPLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7d0JBQzdELFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztpQkFDcEQ7YUFDRjtTQUVGO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVPLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsS0FBdUQsRUFDdkQscUJBQXFCLEdBQUcsSUFBSTtRQUU1Qix5QkFBeUI7UUFDekIsS0FBSyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUE7UUFDbEQsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLHFCQUFxQixDQUFDLENBQUE7UUFDOUQsTUFBTSxJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQTtRQUV2RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxTQUFTLEVBQUU7WUFDaEQsSUFBSSxDQUFDLDRCQUE0QixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1NBQ3pFO1FBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFBO1FBQy9CLDhEQUE4RDtRQUU5RCw0Q0FBNEM7UUFDNUMsd0RBQXdEO1FBQ3hELDBDQUEwQztJQUM1QyxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQTJCO1FBQ3BDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQy9ELElBQUksU0FBUyxFQUFFO1lBQ2IsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLFNBQVMsQ0FBQyxJQUFJLHNCQUFzQixDQUFDLENBQUM7Z0JBQzlFLFNBQVMsQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxTQUFTLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRTtnQkFDOUIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLEdBQUc7b0JBQzdDLEdBQUcsU0FBUztvQkFDWixjQUFjLEVBQUUsU0FBUyxDQUFDLGNBQWMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsUUFBUTtpQkFDN0UsQ0FBQzthQUNIO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sMEJBQTBCLENBQ2hDLFFBQThCLEVBQzlCLEtBQXVEO1FBRXZELE9BQU8sQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FDNUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNSLFVBQVUsRUFBRSxTQUFTO1lBQ3JCLGFBQWEsRUFBRSxnQkFBZ0I7WUFDL0IsZUFBZSxFQUFFLE1BQU07WUFDdkIsVUFBVSxFQUFFO2dCQUNWLE9BQU87Z0JBQ1AsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUM5QyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQy9ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlELE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBRWxELFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWTtnQkFDakUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUMvRCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQy9ELGtCQUFrQixFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7YUFFakQ7U0FDRixDQUFDLENBQUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLGFBQWEsRUFBRSxhQUFhO1lBQzVCLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sd0JBQXdCLENBQzlCLFFBQXdCLEVBQ3hCLEtBQXVEO1FBRXZELElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQVksRUFBRSxHQUFRLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUNuRixVQUFVLEVBQUUsTUFBTTtZQUNsQixhQUFhLEVBQUUsY0FBYztZQUM3QixlQUFlLEVBQUUsTUFBTTtZQUN2QixVQUFVLEVBQUU7Z0JBQ1YsT0FBTztnQkFDUCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0JBQy9ELGdCQUFnQixFQUFFLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUU7Z0JBQzlELE9BQU8sRUFBRSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7Z0JBQ2xELFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsWUFBWTtnQkFDakUsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUMvRCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7YUFDaEU7U0FDRixDQUFDLENBQUMsQ0FBQztZQUNGLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLGFBQWEsRUFBRSxjQUFjO1lBQzdCLGVBQWUsRUFBRSxNQUFNO1lBQ3ZCLFVBQVUsRUFBRSxFQUFFO1NBQ2YsQ0FDQSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sMEJBQTBCLENBQ2hDLEtBQVU7UUFFVixPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDekQsVUFBVSxFQUFFLFNBQVM7WUFDckIsYUFBYSxFQUFFLGdCQUFnQjtZQUMvQixlQUFlLEVBQUUsTUFBTTtZQUN2QixVQUFVLEVBQUU7Z0JBQ1YsV0FBVyxFQUFFLEtBQUssQ0FBQyxZQUFZLElBQUksS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLElBQUksd0JBQXdCO2dCQUM3RixnQkFBZ0IsRUFBRSxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFO2FBQy9EO1NBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTixDQUFDO0lBRU8sS0FBSyxDQUFDLFlBQVksQ0FDeEIsS0FBdUQsRUFDdkQsVUFBdUQsRUFBRSxFQUN6RCxXQUF5QixFQUN6QixxQkFBcUIsR0FBRyxJQUFJLEVBQzVCLFlBQWlCLEVBQ2pCLFdBQTJFO1FBRzNFLE1BQU0sU0FBUyxHQUFHO1lBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUc7WUFDZCxZQUFZLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUM7WUFDekMsU0FBUyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDO1lBQzNDLFlBQVksRUFBRSxLQUFLLENBQUMsWUFBWTtZQUNoQyxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7WUFDOUIsU0FBUyxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ3JCLFVBQVUsRUFBRSxLQUFLLENBQUMsS0FBSztZQUN2QixjQUFjLEVBQUUsS0FBSyxDQUFDLGNBQWM7WUFDcEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxZQUFZLEVBQUUsS0FBSyxDQUFDLFlBQVk7WUFDaEMsSUFBSSxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSTtZQUM1QyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUk7WUFDckIsSUFBSSxFQUFFLEtBQUssQ0FBQyxJQUFJO1lBQ2hCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztZQUM5QixlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7WUFDdEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtZQUN4QyxhQUFhLEVBQUUsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFO1lBQ3hDLE9BQU8sRUFDTCxXQUFXLEtBQUssTUFBTTtnQkFDcEIsQ0FBQyxDQUFDO29CQUNBLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3BDLEdBQUcsQ0FBQzt3QkFDSixlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsZUFBZSxFQUFFO3FCQUM3QyxDQUFDLENBQUM7b0JBQ0gsR0FBRyxPQUFPO29CQUNWLEdBQUcsQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3JDLEdBQUcsQ0FBQzt3QkFDSixlQUFlLEVBQUUsUUFBUSxDQUFDLENBQUMsZUFBZSxFQUFFO3FCQUM3QyxDQUFDLENBQUM7aUJBQ0o7Z0JBQ0QsQ0FBQyxDQUFDLEVBQUU7WUFDUixZQUFZLEVBQUUsT0FBTyxDQUNuQixLQUFLLENBQUMsWUFBWTtnQkFDbEIsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssQ0FBQyxXQUFXLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUN0RixXQUFXLEtBQUssTUFBTSxDQUN2QjtZQUNELFlBQVksRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sSUFBSSxXQUFXLEtBQUssVUFBVSxDQUFDO1lBQ2pFLFdBQVcsRUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxXQUFXLEtBQUssT0FBTyxDQUFDO1NBQ25FLENBQUM7UUFDRix3REFBd0Q7UUFDeEQsSUFBSSxDQUFDLG1CQUFtQixHQUFHO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQjtZQUMzQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTO1NBQ3ZCLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLElBQ0UscUJBQXFCO2dCQUNyQixDQUFDLFdBQVcsS0FBSyxNQUFNLElBQUksV0FBVyxLQUFLLE9BQU8sQ0FBQztnQkFDbkQsU0FBUyxDQUFDLE9BQU8sRUFDakI7Z0JBQ0EsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQy9EO1lBQ0QsSUFBSSxxQkFBcUIsSUFBSSxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzdELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7YUFDL0I7aUJBQU0sSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7YUFDOUI7U0FDRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUM5QjtJQUNILENBQUM7SUFDTyxpQkFBaUIsQ0FBQyxXQUF5QixFQUFFLGlCQUF5QjtRQUM1RSxJQUFJLFdBQVcsS0FBSyxNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUNoRCxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsQ0FBQztTQUN2QjthQUFNLElBQUksV0FBVyxLQUFLLE1BQU0sSUFBSSxpQkFBaUIsRUFBRTtZQUN0RCxJQUFJLENBQUMsZ0JBQWdCLElBQUksQ0FBQyxDQUFDO1NBQzVCO2FBQU0sSUFBSSxXQUFXLEtBQUssT0FBTyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUNwRixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDakQsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLFlBQVksR0FBRyxVQUFVLEVBQUU7WUFDMUQsT0FBTztTQUNSO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFlBQVksS0FBSyxVQUFVLENBQUM7UUFDcEQsSUFBSSxDQUFDLGdCQUFnQjtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxjQUFjLEtBQUssVUFBVSxDQUFDO1FBQ2hGLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGNBQWMsS0FBSyxVQUFVLENBQUM7SUFDNUQsQ0FBQztJQUNELG1CQUFtQixDQUFDLEtBQXVEO1FBQ3pFLElBQ0UsS0FBSyxDQUFDLE9BQU87WUFDYixDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDM0QsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUNsRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCO29CQUN2QyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQy9ELENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDcEUsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FDN0IsRUFDRDtZQUNBLE9BQU8sSUFBSSxDQUFDO1NBQ2I7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEtBQUssSUFBSSxFQUFFO1lBQ25DLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDO1NBQ2xDO2FBRUksSUFDSCxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxLQUFLLFNBQVMsQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGNBQWMsS0FBSyxDQUFDLENBQUM7WUFDM0UsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQzNFO1lBQ0EsT0FBTyxJQUFJLENBQUMsb0JBQW9CLENBQUM7U0FDbEM7UUFFRCxPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUM7SUFFRCxrQkFBa0IsQ0FDaEIsS0FBdUQsRUFDdkQsVUFBMkQsRUFDM0QscUJBQThCO1FBRTlCLDRCQUE0QjtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNoQyw0QkFBNEI7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUMxQyw0QkFBNEI7UUFDNUIsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1FBQy9ELDhEQUE4RDtRQUM5RCw2Q0FBNkM7SUFDL0MsQ0FBQztJQUVELGdCQUFnQixDQUFDLG1CQUF3QixFQUFFLEdBQVE7UUFDakQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxlQUFlLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDdEMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhLEVBQUUsSUFBUztRQUMvQixJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsR0FBRztRQUNuQixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBYSxFQUFFLElBQVM7UUFDOUIsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEdBQUc7UUFDbkIsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSwrQkFBK0IsQ0FBQyxDQUFBO0lBQ3JELENBQUM7SUFFRCxjQUFjLENBQUMsU0FBYztRQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7SUFFRCxlQUFlLENBQUMsU0FBYyxFQUFFLElBQVksRUFBRSxlQUFvQjtRQUNoRSxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUE7U0FDckM7YUFBTTtZQUNMLElBQUksZUFBZSxJQUFJLGVBQWUsQ0FBQyxXQUFXLElBQUksZUFBZSxDQUFDLFdBQVcsS0FBSyxhQUFhLEVBQUU7Z0JBQ25HLE9BQU8sZUFBZSxDQUFDLEdBQUcsQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUE7YUFDeEY7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFBO2FBQy9EO1NBRUY7SUFDSCxDQUFDO0lBRUQseUNBQXlDO0lBRXpDLGVBQWUsQ0FBQyxLQUF1RCxFQUFFLHFCQUFxQixHQUFHLElBQUk7UUFDbkcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUU7WUFDcEMsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFBO2dCQUN0QyxJQUFJLFFBQVEsQ0FBQyxlQUFlLEVBQUU7b0JBQzVCLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTt3QkFDbkYsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO3dCQUN2RSxNQUFNLGtCQUFrQixHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFvRCxDQUFDO3dCQUMzSCxJQUFJLENBQUMsMEJBQTBCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsQ0FBQzt3QkFDeEYsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLGtCQUFrQixFQUFFOzRCQUM3RCxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUc7Z0NBQzVELEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVztnQ0FDOUQsR0FBRyxFQUFFLEtBQUssQ0FBQyxHQUFHO2dDQUNkLFdBQVcsRUFBRSxRQUFRLENBQUMsS0FBSztnQ0FDM0IsWUFBWSxFQUFFLFFBQVEsQ0FBQyxLQUFLOzZCQUM3QixDQUFDO3lCQUNIO3FCQUNGO2lCQUNGO2FBRUY7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsS0FBdUQsRUFBRSxxQkFBcUIsR0FBRyxJQUFJO1FBQzNHLElBQUksS0FBSyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFO1lBQ3pGLHNGQUFzRjtZQUN0Rix1Q0FBdUM7WUFDdkMsOEVBQThFO1lBQzlFLGFBQWE7WUFDYiw2Q0FBNkM7WUFDN0MsTUFBTTtZQUNOLElBQUk7WUFDSixJQUFJLGVBQWUsR0FBUSxFQUFFLENBQUM7WUFDOUIsNEJBQTRCO1lBQzVCLElBQUksS0FBSyxDQUFDLE9BQU87Z0JBQ2YsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUN0QixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPO2dCQUM5QixLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO2dCQUN4QyxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztnQkFDekQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMxRyxLQUFLLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FDL0QsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FDdkMsQ0FBQzthQUNIO1lBQ0QsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNuQyxzRUFBc0U7Z0JBQ3RFLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9CLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRTtvQkFDNUIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFO3dCQUNuRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQzt3QkFDekQsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBb0QsQ0FBQzt3QkFFdkgsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLGlCQUFpQixFQUFFLHFCQUFxQixDQUFDLENBQUM7cUJBQ3hGO2lCQUNGO2FBRUY7aUJBQU07Z0JBQ0wsSUFBSTtvQkFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztvQkFDekYsdURBQXVEO29CQUN2RCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO3dCQUNoQyxtQ0FBbUM7d0JBQ25DLElBQUksUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOzRCQUVuQyxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUN2RSxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLFFBQVEsQ0FBQyxXQUFXLENBQ3JCLENBQUM7eUJBR0g7NkJBQU0sSUFBSSxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7NEJBQ3hDLElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLEVBQ25FLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsUUFBUSxDQUFDLFdBQVcsQ0FDckIsQ0FBQzt5QkFDSDs2QkFBTTs0QkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO3lCQUNwRTtxQkFFRjt5QkFBTTt3QkFDTCxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNwRTtpQkFDRjtnQkFBQyxPQUFPLEtBQUssRUFBRTtvQkFDZCxnQkFBZ0I7b0JBQ2hCLGtDQUFrQztpQkFDbkM7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQywwQkFBMEIsQ0FDOUIsS0FBdUQsRUFDdkQsUUFBZ0IsRUFDaEIsU0FBaUIsRUFDakIsVUFBMkQsRUFDM0QscUJBQThCO1FBRTlCLElBQUk7WUFDRixNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxxQkFBcUIsQ0FBQyxDQUFDO1lBQ3BHLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO2dCQUM3RCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUVoRSxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ25GLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7b0JBQy9FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDaEMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2xELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFOzRCQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUc7Z0NBQ3BCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQ0FDdEIsT0FBTztnQ0FDUCwwQkFBMEI7Z0NBQzFCLGlCQUFpQjs2QkFDbEIsQ0FBQzt5QkFDSDt3QkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7NEJBQ2xCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzs0QkFDcEIsT0FBTzs0QkFDUCxjQUFjLEVBQUUsTUFBTTt5QkFDdkIsQ0FBQzt3QkFDRixVQUFVLEdBQUcsT0FBTyxDQUFDO3FCQUN0QjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixVQUFVLENBQUMsd0JBQXdCO2lCQUNwQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRTtvQkFDbkYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ3pELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFNBQVMsQ0FBQztvQkFDL0UsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUNoQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTt3QkFDbEQsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7NEJBQ3RELFFBQVEsQ0FBQyxTQUFTLENBQUMsR0FBRztnQ0FDcEIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO2dDQUN0QixPQUFPLEVBQUUsRUFBRTtnQ0FDWCxjQUFjLEVBQUUsTUFBTTtnQ0FDdEIsUUFBUSxFQUFFLElBQUk7NkJBQ2YsQ0FBQzt5QkFDSDt3QkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7NEJBQ2xCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzs0QkFDcEIsT0FBTyxFQUFFLEVBQUU7NEJBQ1gsY0FBYyxFQUFFLE1BQU07eUJBQ3ZCLENBQUM7d0JBQ0YsVUFBVSxHQUFHLE9BQU8sQ0FBQztxQkFDdEI7aUJBQ0Y7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUNuRTtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxnQkFBZ0I7WUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztTQUNwRTtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCLENBQzlCLEtBQXVELEVBQ3ZELFFBQWdCLEVBQ2hCLFNBQWlCLEVBQ2pCLFVBQTJELEVBQzNELHFCQUE4QjtRQUU5QixJQUFJO1lBQ0YsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxVQUFVLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDOUYsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDaEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDeEYsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFDO2dCQUMzQixJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUU7b0JBQ25GLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUN6RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7b0JBQy9FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDaEMsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ2xELElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFOzRCQUN0RCxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUc7Z0NBQ3BCLEdBQUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztnQ0FDdEIsT0FBTztnQ0FDUCwwQkFBMEI7Z0NBQzFCLGlCQUFpQjs2QkFDbEIsQ0FBQzt5QkFDSDt3QkFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUc7NEJBQ2xCLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQzs0QkFDcEIsT0FBTzs0QkFDUCxjQUFjLEVBQUUsTUFBTTt5QkFDdkIsQ0FBQzt3QkFDRixVQUFVLEdBQUcsT0FBTyxDQUFDO3FCQUN0QjtpQkFDRjtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixRQUFRLENBQUMsV0FBVyxFQUNwQixVQUFVLENBQUMsd0JBQXdCO2lCQUNwQyxDQUFDO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7YUFDcEU7U0FDRjtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsZ0JBQWdCO1lBQ2hCLGtDQUFrQztTQUNuQztJQUNILENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQUMsS0FBdUQsRUFDakYsT0FBb0UsRUFDcEUscUJBQThCO1FBRTlCLE1BQU0sZUFBZSxHQUFRLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3JDLGtEQUFrRDtnQkFDbEQsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWTtvQkFDckQsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUMzRTtvQkFDQSxJQUFJLGFBQWEsQ0FBQztvQkFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTt3QkFDOUIsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztxQkFDdEQ7b0JBQ0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksR0FBRyxhQUFhLENBQUM7aUJBQ3JFO2dCQUNELElBQUksQ0FBQyxVQUFVLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDaEYsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUMxQixPQUFPLENBQUMsTUFBTTt3QkFDZCxLQUFLLENBQUMsT0FBTzt3QkFDYixPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQzt3QkFDeEQsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQzt3QkFDbkUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLGlCQUFpQixDQUN6RCxDQUFDO29CQUVGLE1BQU0sV0FBVyxHQUFHLFlBQVk7d0JBQzlCLENBQUMsQ0FBQzs0QkFDQSxJQUFJLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFOzRCQUN2RCxXQUFXLEVBQUU7Z0NBQ1gsR0FBRyxFQUFFLE9BQU87Z0NBQ1osQ0FBQyxFQUFFLEtBQUssQ0FBQyxXQUFXLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dDQUNyRCxDQUFDLEVBQ0MsT0FBTztvQ0FDTCxPQUFPLENBQUMsY0FBYztvQ0FDdEIsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPO29DQUM5QixPQUFPLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxPQUFPO29DQUN0QyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FDZCxJQUFJLENBQUMsMEJBQTBCLENBQzdCLGVBQWUsQ0FDaEIsQ0FDRjtvQ0FDRCxDQUFDLENBQUMsRUFBRTs2QkFDVDt5QkFDRjt3QkFDRCxDQUFDLENBQUMsSUFBSSxDQUFDO29CQUVULElBQUksZUFBZSxHQUFRLEVBQUUsQ0FBQTtvQkFDN0IsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLGNBQWMsRUFBRTt3QkFDbEUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBVyxFQUFFLEVBQUU7NEJBQ2xELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFO2dDQUN2QyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBOzZCQUM3Qjt3QkFDSCxDQUFDLENBQUMsQ0FBQTt3QkFDRixPQUFPLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxjQUFjLEVBQUUsZUFBZSxFQUFFLEVBQUUsQ0FBQTtxQkFDNUQ7b0JBQ0QsT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNoQixJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFO3dCQUM3QyxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO3FCQUNuRTtvQkFDRCxvRUFBb0U7b0JBQ3BFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDaEIsQ0FBQyxDQUFFLENBQUM7YUFDTDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLFVBQVUsQ0FBQyxRQUFhLEVBQUUsU0FBYyxFQUFFLFFBQStCLEVBQUUsUUFBZ0I7UUFDaEcsSUFBSSxhQUFhLENBQUM7UUFDbEIsSUFBSSxRQUFRLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxFQUFFO1lBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFBO1lBQ3ZCLGFBQWEsR0FBRyxDQUFDLENBQUE7U0FDbEI7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsUUFBUSxDQUFBO1lBQzlCLGFBQWEsR0FBRyxRQUFRLENBQUE7U0FDekI7UUFDRCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUU7WUFDN0QsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztZQUNoRixRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3BFLFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1NBQy9EO1FBQ0QsNkNBQTZDO1FBQzdDLCtDQUErQztRQUMvQyxxQkFBcUI7UUFDckIsS0FBSztRQUNMLHdDQUF3QztRQUN4QyxNQUFNO1FBQ04sOENBQThDO1FBQzlDLG1FQUFtRTtRQUNuRSw0Q0FBNEM7UUFDNUMsT0FBTztRQUNQLFFBQVE7UUFDUixNQUFNO1FBQ04sa0RBQWtEO1FBQ2xELE1BQU07UUFFTixLQUFLO1FBQ0wsTUFBTSxpQkFBaUIsR0FBUSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0UsTUFBTSxrQkFBa0IsR0FBUSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BHLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxDQUFDLGFBQWEsR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUE7UUFDekIsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksaUJBQWlCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUc7Z0JBQzNELEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUM3RCxXQUFXLEVBQUUsaUJBQWlCLENBQUMsS0FBSztnQkFDcEMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7YUFDdkMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxZQUFZLElBQUksaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRTtZQUNwRyxJQUFJLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BFLHVDQUF1QztnQkFDdkMsOERBQThEO2dCQUM5RCxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDM0Y7cUJBQU0sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO29CQUNwRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxDQUFDLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzNGO3FCQUFNLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTtvQkFDaEUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFlBQVksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFBO2lCQUM1RTtxQkFBTSxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO29CQUMzRCxJQUFJLENBQUMsK0JBQStCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBQ25GO2dCQUNELG9FQUFvRTtnQkFDcEUsc0RBQXNEO2dCQUN0RCxJQUFJO2dCQUVKLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7YUFDckU7aUJBQU0sSUFBSSxpQkFBaUIsQ0FBQyxlQUFlLElBQUksaUJBQWlCLENBQUMsT0FBTyxFQUFFO2dCQUN6RSxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxJQUFJLFlBQVksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO29CQUN6RyxJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQTtpQkFDckU7cUJBQU0sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUU7b0JBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBQzFDO3FCQUFNLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7b0JBQ3BILElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFBO29CQUM1RixJQUFJLENBQUMsNEJBQTRCLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7aUJBQzVGO2dCQUNELFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7YUFDckU7U0FDRjtJQUNILENBQUM7SUFFRCxLQUFLLENBQUMsNEJBQTRCLENBQ2hDLEtBQXVELEVBQ3ZELFFBQWdCLEVBQ2hCLHFCQUE4QjtRQUU5QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO1lBQ2xGLElBQUk7Z0JBQ0YsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFLENBQUMsU0FBUyxFQUFFLENBQUE7Z0JBQ3JFLElBQUksUUFBUSxFQUFFO29CQUNaLElBQUksT0FBTyxHQUFHO3dCQUNaLFNBQVMsRUFBRTs0QkFDVCxVQUFVLEVBQUUsUUFBUTt5QkFDckI7cUJBQ0YsQ0FBQTtvQkFDRCxJQUFJLFNBQVMsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFRLEVBQUUsRUFBRTt3QkFDdkcsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7NEJBQ3hFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUE7eUJBQzFCOzZCQUFNOzRCQUNMLE9BQU8sRUFBRSxDQUFBO3lCQUNWO29CQUNILENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO3dCQUNyQixPQUFPLEVBQUUsQ0FBQTtvQkFDWCxDQUFDLENBQUMsQ0FBQTtvQkFDRixNQUFNLFFBQVEsR0FBUTt3QkFDcEIsVUFBVSxFQUFFOzRCQUNWLFNBQVMsRUFBRTtnQ0FDVCxTQUFTLEVBQUU7b0NBQ1QsWUFBWSxFQUFFLFFBQVE7aUNBQ3ZCO2dDQUNELFFBQVEsRUFBRSxDQUFDO2dDQUNYLE9BQU8sRUFBRSxFQUFFO2dDQUNYLFNBQVMsRUFBRTtvQ0FDVCxlQUFlLEVBQUUsTUFBTTtpQ0FDeEI7NkJBQ0Y7eUJBQ0Y7cUJBQ0YsQ0FBQTtvQkFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUM5RCxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFOzRCQUN2RCxJQUFJLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQTs0QkFDcEMsSUFBSSxVQUFlLENBQUE7NEJBQ25CLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQ0FDbkMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUE7Z0NBQzlGLElBQUksYUFBYSxHQUFHLElBQUksQ0FBQTtnQ0FDeEIsSUFBSSxLQUFLLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtvQ0FDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTt3Q0FDOUIsSUFBSSxHQUFHLENBQUMsS0FBSyxLQUFLLGFBQWEsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFOzRDQUN4RSxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dEQUNsQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO29EQUMvQyxJQUFJLGFBQWEsRUFBRTt3REFDakIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7d0RBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFBO3dEQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTt3REFDdkIsYUFBYSxHQUFHLEtBQUssQ0FBQTtxREFDdEI7eURBQUs7d0RBQ0osSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7cURBQ3RCO2lEQUNGOzRDQUNILENBQUMsQ0FBQyxDQUFDO3lDQUNKO29DQUNILENBQUMsQ0FBQyxDQUFBO2lDQUNIO2dDQUNELG9EQUFvRDtnQ0FDcEQsNERBQTREO2dDQUM1RCxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtnQ0FDMUIsdURBQXVEO2dDQUN2RCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUMvQyxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLEVBQUUsRUFDRixVQUFVLENBQ1gsQ0FBQTs2QkFDRjtpQ0FBTTtnQ0FDTCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO2dDQUNqRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFBO2dDQUN6RCxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtnQ0FDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQ0FDcEQsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDL0MsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixhQUFhLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FDMUIsQ0FBQTs2QkFDRjt5QkFDRjs2QkFDSTs0QkFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7eUJBQ3BDO29CQUNILENBQUMsQ0FBQyxDQUFBO2lCQUNIO3FCQUFNO29CQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtvQkFDL0MsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtvQkFDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQTtvQkFDOUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQTtvQkFDekQsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7b0JBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7b0JBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtvQkFDbkMsSUFBSSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQTtvQkFDckIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFO3dCQUMxQyxJQUFJLEdBQUcsRUFBRSxDQUFBO3FCQUNWO29CQUNELHFCQUFxQjtvQkFDckIsV0FBVztvQkFDWCxnREFBZ0Q7b0JBQ2hELFlBQVk7b0JBQ1osMkJBQTJCO29CQUMzQixRQUFRO29CQUNSLFNBQVM7b0JBQ1QsS0FBSztpQkFDTjthQUNGO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUMvQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFBO2dCQUNqRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFBO2dCQUM5QyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsTUFBTSxDQUFBO2dCQUN6RCxLQUFLLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQTtnQkFDMUIsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQTtnQkFDcEQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO2dCQUNuQyxJQUFJLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFBO2dCQUNyQixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUU7b0JBQzFDLElBQUksR0FBRyxFQUFFLENBQUE7aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsRUFDMUMsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixFQUFFLEVBQ0YsSUFBSSxDQUNMLENBQUM7YUFDSDtTQUVGO0lBQ0gsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFTO1FBQ2xCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtZQUN6QixJQUFJLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQTtZQUM1QixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUE7WUFDdEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7UUFDbkIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsd0JBQXdCLENBQUMsVUFBZ0MsRUFBRSxLQUF1RCxFQUNoSCxTQUFjLEVBQUUsWUFBaUIsRUFBRSxJQUFZO1FBQy9DLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQzVDLFVBQVUsRUFDVixLQUFLLEVBQUUsU0FBUyxFQUFFLFlBQVksQ0FDL0IsQ0FBQztRQUNGLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDN0MsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxJQUFJLEVBQUU7b0JBQ2hDLElBQUksd0JBQXdCLEdBQUcsSUFBSSxDQUFBO29CQUNuQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTt3QkFDN0QsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFOzRCQUMxRCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUM5QixVQUFVLENBQUMsSUFBSSxDQUNiO29DQUNFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29DQUM3QixjQUFjLEVBQUUsTUFBTTtvQ0FDdEIsVUFBVSxFQUFFLEtBQUs7b0NBQ2pCLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dDQUM1QixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFOzRDQUNoSCxPQUFPLFFBQVEsQ0FBQTt5Q0FDaEI7d0NBQ0QsT0FBTyxTQUFTLENBQUE7b0NBQ2xCLENBQUMsQ0FBQyxDQUFDO2lDQUNKLENBQ0YsQ0FBQTs2QkFDRjt5QkFDRjt3QkFDRCxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUE7cUJBQ3JDO2lCQUNGO2FBQ0Y7U0FDRjtRQUNELE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQTtJQUNuQixDQUFDO0lBRUQsdUJBQXVCLENBQUMsS0FBMkIsRUFDakQsS0FBdUQsRUFBRSxTQUFjLEVBQUUsWUFBaUI7UUFDMUYsSUFBSSxVQUFVLEdBQVUsRUFBRSxDQUFBO1FBQzFCLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQTtRQUMxQixJQUFJLFlBQVksR0FBVSxFQUFFLENBQUE7UUFDNUIsSUFBSSxPQUFZLENBQUE7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckQsT0FBTyxHQUFHLE1BQU0sQ0FBQTtRQUNsQixDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ0gsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQWEsRUFBRSxFQUFFO1lBQ3JDLElBQUksTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDLENBQUE7WUFDcEUsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsSUFBSSxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtvQkFDN0IsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQ3hGLElBQUksT0FBTyxFQUFFO3dCQUNYLE9BQU07cUJBQ1A7aUJBQ0Y7Z0JBQ0QsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLE1BQU0sRUFBRTtvQkFDakMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7b0JBQ3RGLElBQUksSUFBSSxFQUFFO3dCQUNSLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7NEJBQ3JCLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7eUJBQzFCOzZCQUFNOzRCQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7eUJBQ3hCO3FCQUNGO3lCQUFNO3dCQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7cUJBQ3hCO2lCQUNGO3FCQUFNO29CQUNMLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7aUJBQ3hCO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQTtRQUNGLE9BQU87WUFDTCxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDcEYsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ3JGLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRTtTQUN2RixDQUFBO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxLQUFVLEVBQUUsUUFBK0IsRUFBRSxRQUFhLEVBQUUsU0FBYyxFQUFFLFFBQWE7UUFDbkcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7UUFDekQsSUFBSSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUE7UUFDaEMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDN0QsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQztZQUMzRSxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQy9ELFFBQVEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1NBQzlCO1FBQ0QsTUFBTSxpQkFBaUIsR0FBUSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDeEUsTUFBTSxrQkFBa0IsR0FBUSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzlGLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssUUFBUSxDQUFDLENBQUM7UUFDMUUsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsUUFBUSxDQUFDLElBQUksaUJBQWlCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUc7Z0JBQzNELEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxXQUFXO2dCQUM3RCxXQUFXLEVBQUUsaUJBQWlCLENBQUMsS0FBSztnQkFDcEMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7YUFDdkMsQ0FBQztTQUNIO1FBQ0QsSUFBSSxZQUFZLElBQUksaUJBQWlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRTtZQUNwRyxJQUFJLGtCQUFrQixDQUFDLGVBQWUsSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3BFLHVDQUF1QztnQkFDdkMsOERBQThEO2dCQUM5RCxJQUFJLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDOUY7cUJBQU0sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO29CQUNwRCxJQUFJLENBQUMsMEJBQTBCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQzlGO3FCQUFNLElBQUksa0JBQWtCLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7b0JBQzNELElBQUksQ0FBQywrQkFBK0IsQ0FBQyxZQUFZLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQTtpQkFDOUU7cUJBQU0sSUFBSSxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLGlCQUFpQixFQUFFO29CQUNoRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUE7aUJBRXZFO2dCQUNELG9FQUFvRTtnQkFDcEUsc0RBQXNEO2dCQUN0RCxJQUFJO2dCQUNKLHFCQUFxQjtnQkFDckIscUVBQXFFO2dCQUNyRSxtQ0FBbUM7Z0JBQ25DLFdBQVc7YUFDWjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUMvRCw4REFBOEQ7Z0JBQzlELGdGQUFnRjtnQkFDaEYscUVBQXFFO2dCQUNyRSxrQ0FBa0M7Z0JBQ2xDLElBQUk7Z0JBQ0osVUFBVSxDQUFDLEdBQUcsRUFBRTtvQkFDZCxJQUFJLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7d0JBQ3hELFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUM7d0JBQ3JFLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7d0JBQ2hFLFFBQVEsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO3dCQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQTt3QkFDekQsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFBO3FCQUNoRTtnQkFDSCxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7YUFDVDtTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlLENBQUMsS0FBdUQsRUFDM0UsT0FBb0UsRUFDcEUscUJBQThCO1FBRTlCLE1BQU0sZUFBZSxHQUFRLEVBQUUsQ0FBQztRQUNoQyxPQUFPLElBQUksT0FBTyxDQUFNLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQzdELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FDMUIsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQ3hILENBQUM7b0JBQ0YsTUFBTSxXQUFXLEdBQUcsWUFBWTt3QkFDOUIsQ0FBQyxDQUFDOzRCQUNBLElBQUksRUFBRSxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxXQUFXLENBQUMsSUFBSSxJQUFJLEVBQUU7NEJBQ3ZELFdBQVcsRUFBRTtnQ0FDWCxHQUFHLEVBQUUsT0FBTztnQ0FDWixDQUFDLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVc7Z0NBQ3JELENBQUMsRUFDQyxPQUFPO29DQUNMLE9BQU8sQ0FBQyxRQUFRO29DQUNoQixPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU87b0NBQ3hCLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU87b0NBQ2hDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUNkLElBQUksQ0FBQywwQkFBMEIsQ0FDN0IsZUFBZSxDQUNoQixDQUNGO29DQUNELENBQUMsQ0FBQyxFQUFFOzZCQUNUO3lCQUNGO3dCQUNELENBQUMsQ0FBQyxJQUFJLENBQUM7b0JBQ1QsZ0RBQWdEO29CQUNoRCxzREFBc0Q7b0JBQ3RELElBQUk7b0JBQ0osT0FBTyxDQUFDLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFO29CQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO29CQUNuRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hCLENBQUMsQ0FDQSxDQUFDO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFHRCxvQkFBb0IsQ0FBQyxPQUFZLEVBQUUsUUFBYTtRQUM5QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7WUFDakQsSUFBSSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDcEQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFBO1lBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsT0FBTyxLQUFLLENBQUE7U0FDYjtRQUNELE9BQU8sQ0FBQyxDQUFBO0lBQ1YsQ0FBQztJQUVELGNBQWMsQ0FBQyxLQUFVO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDOUMsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUNELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBQ25HLE9BQU8sQ0FBQyxXQUFXLENBQUM7SUFDdEIsQ0FBQztJQUdELFlBQVk7SUFDWixLQUFLLENBQUMsZ0JBQWdCLENBQUMsS0FBVSxFQUFFLHFCQUFxQixHQUFHLElBQUk7UUFDN0QsSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDdkYsSUFBSSxPQUE2QixDQUFDO1lBQ2xDLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQztZQUMzQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUE7WUFDOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRXpFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDbEQsT0FBTyxHQUFHLFFBQVEsQ0FBQztnQkFFbkIsSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO29CQUNuQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxhQUFhLEdBQUcsSUFBSSxDQUFBO29CQUN4QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO3dCQUM1QyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFOzRCQUM5QixJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0NBQ3pDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0NBQ2xDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0NBQy9DLElBQUksYUFBYSxFQUFFOzRDQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTs0Q0FDcEIsYUFBYSxHQUFHLEtBQUssQ0FBQTt5Q0FDdEI7cUNBQ0Y7Z0NBQ0gsQ0FBQyxDQUFDLENBQUM7NkJBQ0o7d0JBQ0gsQ0FBQyxDQUFDLENBQUE7cUJBQ0g7b0JBQ0QsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUNyQixLQUFLLEVBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDL0MsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixFQUFFLEVBQ0YsVUFBVSxDQUNYLENBQUM7aUJBQ0g7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsSUFBSSxDQUFDLDBCQUEwQixDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFDL0MsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixhQUFhLENBQ2QsQ0FBQztpQkFDSDthQUNGO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7Z0JBQzFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7Z0JBQ3ZDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUE7Z0JBQ2xELEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO2dCQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO2dCQUM3QyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7Z0JBQzVCLG9EQUFvRDtnQkFDcEQsMkVBQTJFO2dCQUMzRSxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUMvQyxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLEVBQUUsRUFDRixLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7YUFDSDtZQUNELGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLG1CQUFtQixDQUFDLEtBQVU7UUFDbEMsSUFBSTtZQUNGLElBQUksS0FBSyxFQUFFLEdBQUcsS0FBSyxTQUFTO2dCQUFFLE9BQU07WUFFcEMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQTtZQUM5RCxJQUFJLFdBQVcsQ0FBQyxTQUFTLEVBQUU7Z0JBQ3pCLElBQUksUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUNwRixJQUFJLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTtvQkFDOUIsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO29CQUM3QixJQUFJLENBQUMsNEJBQTRCLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUE7aUJBRXpFO3FCQUFNO29CQUNMLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtpQkFDN0I7YUFDRjtTQUNGO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxJQUFJLEtBQUssRUFBRSxHQUFHLEtBQUssU0FBUztnQkFBRSxPQUFNO1lBQ3BDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTtTQUM3QjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxVQUFnQyxFQUFFLEtBQXVEO1FBQ3hHLElBQUksVUFBVSxHQUFVLEVBQUUsQ0FBQztRQUMzQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUNoQyxVQUFVLEVBQ1YsS0FBSyxDQUNOLENBQUM7UUFDRixJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzdDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssYUFBYSxFQUFFO29CQUN6QyxJQUFJLHdCQUF3QixHQUFHLElBQUksQ0FBQTtvQkFDbkMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUU7d0JBQzdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRTs0QkFDMUQsZ0JBQWdCOzRCQUNoQix5RkFBeUY7NEJBQ3pGLCtDQUErQzs0QkFDL0MscUNBQXFDOzRCQUNyQyxJQUFJOzRCQUNKLDZDQUE2Qzs0QkFDN0MsSUFBSTs0QkFDSixJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dDQUM5QixVQUFVLENBQUMsSUFBSSxDQUNiO29DQUNFLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO29DQUM3QixjQUFjLEVBQUUsTUFBTTtvQ0FDdEIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUU7d0NBQzVCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssS0FBSyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUU7NENBQ2hILE9BQU8sUUFBUSxDQUFDO3lDQUNqQjt3Q0FDRCxPQUFPLFNBQVMsQ0FBQztvQ0FDbkIsQ0FBQyxDQUFDLENBQUM7aUNBQ0osQ0FDRixDQUFDOzZCQUNIO3lCQUNGO3dCQUNELEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxHQUFHLFVBQVUsQ0FBQTtxQkFDckM7aUJBQ0Y7YUFDRjtTQUNGO1FBRUQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxXQUFXLENBQUMsS0FBMkIsRUFDckMsS0FBdUQ7UUFDdkQsSUFBSSxHQUFHLEdBQVUsRUFBRSxDQUFDO1FBQ3BCLElBQUksUUFBUSxHQUFVLEVBQUUsQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBVSxFQUFFLENBQUM7UUFDeEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFO1lBQ3ZCLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDWixJQUFJLENBQUMsQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQ3RELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDakI7aUJBQU0sSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFO2dCQUM5RCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2xCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsYUFBYSxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQy9FLElBQUksY0FBYyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFZLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFN0UsSUFBSSxtQkFBbUIsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBWSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUgsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQVksRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhILG1CQUFtQixHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQU8sRUFBRTtZQUNyRSxJQUFJLENBQUMsQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLFlBQVksS0FBSyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtnQkFDNUcsTUFBTSxTQUFTLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLFVBQVUsR0FBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQzVDLE9BQU8sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUN4QztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFPLEVBQUU7WUFDM0QsSUFBSSxDQUFDLENBQUMsWUFBWSxLQUFLLGFBQWEsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxZQUFZLEtBQUssYUFBYSxDQUFDLFNBQVMsQ0FBQyxPQUFPLEVBQUU7Z0JBQzVHLE1BQU0sU0FBUyxHQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxVQUFVLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM1QyxPQUFPLFNBQVMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDeEM7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUVILEdBQUcsR0FBRyxDQUFDLEdBQUcsY0FBYyxFQUFFLEdBQUcsZUFBZSxFQUFFLEdBQUcsbUJBQW1CLENBQUMsQ0FBQztRQUV0RSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQVMsRUFBTyxFQUFFO1lBQzFDLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQU8sRUFBRTtZQUM3QyxNQUFNLFNBQVMsR0FBUSxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDM0MsTUFBTSxVQUFVLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzVDLE9BQU8sU0FBUyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUVILFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBUyxFQUFPLEVBQUU7WUFDNUMsT0FBTyxJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU87WUFDTCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLEVBQUU7WUFDdEUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsMEJBQTBCLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO1lBQ2hGLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLDBCQUEwQixDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBRTtZQUNyRixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQUU7U0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFDRCxpQkFBaUIsQ0FBQyxRQUFhO1FBQzdCLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDL0IsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVMsRUFBRSxFQUFFO2dCQUM3QixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsS0FBSyxDQUFBO1lBQzFCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBR0Qsd0NBQXdDO0lBQ3hDLHFCQUFxQixDQUFDLEtBQXVELEVBQUUsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLHFCQUFxQixHQUFHLElBQUk7UUFDOUksSUFBSSxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEVBQUU7WUFDckcsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtnQkFDNUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsZUFBZSxFQUFFO29CQUN6QyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTt3QkFDM0UsSUFBSSxDQUFDLCtCQUErQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUE7cUJBQ3hGO2lCQUNGO2dCQUNELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7b0JBQzVDLElBQUksaUJBQWlCLEdBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDakQsSUFBSSxrQkFBa0IsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDL0QsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUc7d0JBQzlCLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQyxXQUFXO3dCQUNoQyxXQUFXLEVBQUUsaUJBQWlCLENBQUMsS0FBSzt3QkFDcEMsWUFBWSxFQUFFLGtCQUFrQixDQUFDLEtBQUs7cUJBQ3ZDLENBQUM7aUJBQ0g7YUFDRjtTQUNGO0lBQ0gsQ0FBQztJQUdELCtCQUErQixDQUFDLEtBQXVELEVBQUUsUUFBZ0IsRUFBRSxTQUFpQixFQUFFLHFCQUFxQixHQUFHLElBQUk7UUFDeEosSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDckgsSUFBSSxrQkFBa0IsR0FBUSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTtZQUN2RSxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUE7WUFDZixJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFO2dCQUM5QixNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO2dCQUM1RyxJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUE7Z0JBQ3JCLElBQUksR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO29CQUN4RSxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7aUJBQzlDO2dCQUNELElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUVwRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDeEUsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUM5QztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUE7Z0JBQzFGLENBQUMsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNmLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0JBQzdCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQTtxQkFDekY7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsRUFBRSxFQUNGLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsRUFBRSxFQUNGLEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQzt3QkFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDckQ7Z0JBQ0gsQ0FBQyxDQUFDLENBQUE7WUFDSixDQUFDLEVBQUUsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFDZixJQUFJLE9BQU8sR0FBUSxFQUFFLENBQUE7Z0JBQ3JCLElBQUksQ0FBQyxTQUFTLENBQUMsMkJBQTJCLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUVwRyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTt3QkFDeEUsT0FBTyxHQUFHLENBQUMsR0FBRyxPQUFPLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFBO3FCQUM5QztvQkFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUE7Z0JBQzFGLENBQUMsRUFBRSxDQUFDLElBQVMsRUFBRSxFQUFFO29CQUNmLElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLEVBQUUsRUFDRixNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLEVBQUUsRUFDRixLQUFLLENBQUMsSUFBSSxDQUNYLENBQUM7b0JBRUYsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7Z0JBQ3RELENBQUMsQ0FBQyxDQUFBO1lBQ0osQ0FBQyxDQUFDLENBQUE7U0FDSDtJQUNILENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxLQUF1RCxFQUFFLFFBQWdCLEVBQUUsU0FBaUIsRUFBRSxxQkFBcUIsR0FBRyxJQUFJO1FBQ2pKLElBQUksS0FBSyxDQUFDLElBQUksSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFO1lBQ3JILElBQUksa0JBQWtCLEdBQVEsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUE7WUFDdkUsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFBO1lBQ2YsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRTtnQkFDOUIsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQzthQUM1QztZQUNELElBQUksQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsTUFBTSxFQUFFLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtnQkFFMUcsSUFBSSxNQUFNLEdBQVEsRUFBRSxDQUFBO2dCQUNwQixJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDdEUsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFBO2lCQUMzQztnQkFDRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUE7WUFDekYsQ0FBQyxFQUFFLENBQUMsSUFBUyxFQUFFLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDLFlBQVksQ0FDZixLQUFLLEVBQ0wsRUFBRSxFQUNGLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsRUFBRSxFQUNGLEtBQUssQ0FBQyxJQUFJLENBQ1gsQ0FBQztnQkFDRixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0RCxDQUFDLENBQUMsQ0FBQTtTQUNIO0lBQ0gsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQVUsRUFBRSxRQUFnQixFQUFFLFNBQWlCLEVBQUUsT0FBWSxFQUFFLHdCQUE2QixJQUFJO1FBQ3RILElBQUksT0FBNkIsQ0FBQztRQUNsQyxJQUFJLE9BQU8sSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQzdCLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sV0FBVyxHQUF1QixDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNuRSxXQUFXLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLG9CQUFvQixJQUFJLENBQUMsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDO2dCQUM3RSxXQUFXLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixJQUFJLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDO2dCQUNuRSxXQUFXLENBQUMsWUFBWSxHQUFHLENBQUMsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO2dCQUNoRCxXQUFXLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxDQUFDLHFCQUFxQixJQUFJLEVBQUUsQ0FBQztnQkFDbEUsV0FBVyxDQUFDLHFCQUFxQixHQUFHLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxFQUFFLENBQUM7Z0JBQ2xFLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO2dCQUMxRCxXQUFXLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQztnQkFDNUQsV0FBVyxDQUFDLGtCQUFrQixHQUFHLENBQUMsQ0FBQyxrQkFBa0IsSUFBSSxDQUFDLENBQUMsbUJBQW1CLElBQUksRUFBRSxDQUFDO2dCQUNyRixXQUFXLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDO2dCQUN0QyxXQUFXLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2pELFdBQVcsQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxlQUFlLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7Z0JBQ3RILFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQzNDLE9BQU8sV0FBVyxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLGFBQWEsR0FBUSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFNLEVBQUUsQ0FBTSxFQUFFLEVBQUU7WUFDL0QsTUFBTSxLQUFLLEdBQVEsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLHFCQUFxQixJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzFELE1BQU0sS0FBSyxHQUFRLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMxRCxPQUFPLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsSUFBSSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQzVDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFO2dCQUMzRSxJQUFJLGtCQUFrQixHQUFRLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO2dCQUN2RSxrQkFBa0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLE1BQU0sQ0FBQTtnQkFDN0MsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3RELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQTtnQkFDNUQsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtnQkFDbkUsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsT0FBTyxDQUFBO2dCQUM5RCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxPQUFPLEVBQ1AsTUFBTSxFQUNOLHFCQUFxQixFQUNyQixFQUFFLEVBQ0YsS0FBSyxDQUFDLElBQUksQ0FDWCxDQUFDO2dCQUNGLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2FBQ3JEO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsYUFBYTtRQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDJCQUEyQixFQUFFO1lBQ2hFLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFBO1FBRUYsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN4QyxJQUFJLE1BQU0sRUFBRTtnQkFDVixJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQTtnQkFDekIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQTtnQkFDakMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFBO2FBQ2pCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLDRCQUE0QixDQUNoQyxLQUF1RCxFQUN2RCxRQUFnQixFQUNoQixxQkFBOEIsRUFDOUIsc0JBQThCO1FBRTlCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7WUFDckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUE7WUFDekIsSUFBSSxPQUFPLEdBQUc7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLE1BQU07Z0JBQzVDLFlBQVksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxjQUFjO2dCQUN2RCxhQUFhLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEVBQUUsV0FBVztnQkFDN0UsYUFBYSxFQUFFLEtBQUs7YUFDckIsQ0FBQTtZQUNELElBQUksUUFBYSxDQUFBO1lBQ2pCLElBQUksVUFBZSxDQUFBO1lBRW5CLElBQUksc0JBQXNCLEVBQUU7Z0JBQzFCLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsOEJBQThCLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxFQUFFO29CQUN6SCxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7eUJBQ3BILFNBQVMsRUFBRSxDQUFBO2dCQUNoQixDQUFDLENBQUMsQ0FBQTthQUNIO2lCQUFNO2dCQUNMLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQ3BELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUM7cUJBQy9ELFNBQVMsRUFBRSxDQUFBO2FBQ2Y7WUFFRCxJQUFJLFFBQVEsRUFBRSxtQkFBbUIsSUFBSSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxFQUFFO2dCQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQTtnQkFDMUIsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFFBQVEsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFBO2dCQUM5QyxJQUFJLENBQUMsVUFBVSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQTtnQkFFL0YsSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFBO2lCQUNwRDtnQkFFRCxJQUFJLENBQUMsMkJBQTJCLEVBQUUsQ0FBQTtnQkFDbEMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7Z0JBQ3pFLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtvQkFDckIsSUFBSSxPQUFPLEdBQUc7d0JBQ1osU0FBUyxFQUFFOzRCQUNULFVBQVUsRUFBRSxVQUFVO3lCQUN2QjtxQkFDRixDQUFBO29CQUNELElBQUksU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQVEsRUFBRSxFQUFFO3dCQUN2RyxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTs0QkFDeEUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQTt5QkFDMUI7NkJBQU07NEJBQ0wsT0FBTyxFQUFFLENBQUE7eUJBQ1Y7b0JBQ0gsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7d0JBQ3JCLE9BQU8sRUFBRSxDQUFBO29CQUNYLENBQUMsQ0FBQyxDQUFBO29CQUVGLE1BQU0sVUFBVSxHQUFRO3dCQUN0QixTQUFTLEVBQUU7NEJBQ1QsU0FBUyxFQUFFO2dDQUNULGlCQUFpQixFQUFFO29DQUNqQixRQUFRO2lDQUNUO2dDQUNELFlBQVksRUFBRSxVQUFVOzZCQUN6Qjs0QkFDRCxRQUFRLEVBQUU7Z0NBQ1IsZUFBZSxFQUFFLE1BQU07NkJBQ3hCO3lCQUNGO3FCQUNGLENBQUE7b0JBQ0QsTUFBTSxRQUFRLEdBQVE7d0JBQ3BCLFNBQVMsRUFBRTs0QkFDVCxTQUFTLEVBQUU7Z0NBQ1QsWUFBWSxFQUFFLFVBQVU7NkJBQ3pCOzRCQUNELFFBQVEsRUFBRSxDQUFDOzRCQUNYLFNBQVMsRUFBRTtnQ0FDVCxlQUFlLEVBQUUsTUFBTTs2QkFDeEI7eUJBQ0Y7cUJBQ0YsQ0FBQTtvQkFDRCw4RUFBOEU7b0JBQzlFLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDckQsSUFBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLEVBQUU7NEJBQzNCLElBQUksT0FBTyxJQUFJLE9BQU8sRUFBRSxNQUFNLElBQUksT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUU7Z0NBQzFELHVDQUF1QztnQ0FDdkMsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyx5QkFBeUIsQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQ0FDekYsSUFBSSxVQUFlLENBQUE7Z0NBQ25CLElBQUksS0FBSyxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtvQ0FDdEMsVUFBVSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFBO29DQUN0RyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUE7b0NBQ3hCLElBQUksS0FBSyxJQUFJLEtBQUssRUFBRSxJQUFJLElBQUksS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7d0NBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7NENBQzlCLElBQUksR0FBRyxFQUFFLEtBQUssS0FBSyxTQUFTLENBQUMsU0FBUyxJQUFJLEdBQUcsRUFBRSxTQUFTLElBQUksR0FBRyxFQUFFLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0RBQ2pGLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBUyxFQUFFLEVBQUU7b0RBQ2xDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUU7d0RBQy9DLElBQUksYUFBYSxFQUFFOzREQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTs0REFDcEIsYUFBYSxHQUFHLEtBQUssQ0FBQTt5REFDdEI7cURBQ0Y7Z0RBQ0gsQ0FBQyxDQUFDLENBQUM7NkNBQ0o7d0NBQ0gsQ0FBQyxDQUFDLENBQUE7cUNBQ0g7b0NBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtvQ0FDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQTtvQ0FDekQsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7b0NBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7b0NBQ3BELElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQy9DLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsRUFBRSxFQUNGLFVBQVUsQ0FDWCxDQUFBO29DQUNELElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFO3dDQUN6QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFBO3dDQUMvQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQTtxQ0FDNUI7aUNBQ0Y7cUNBQU07b0NBQ0wsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtvQ0FDakQsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxHQUFHLE1BQU0sQ0FBQTtvQ0FDekQsS0FBSyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7b0NBQzFCLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUE7b0NBQ3BELElBQUksQ0FBQyxZQUFZLENBQ2YsS0FBSyxFQUNMLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLEVBQy9DLE1BQU0sRUFDTixxQkFBcUIsRUFDckIsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQzFCLENBQUE7aUNBQ0Y7NkJBQ0Y7eUJBQ0Y7NkJBQ0k7NEJBQ0gsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFBO3lCQUNwQztvQkFDSCxDQUFDLENBQUMsQ0FBQTtpQkFDSDtxQkFBTTtvQkFDTCxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUE7b0JBQy9DLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUE7b0JBQ2pELEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUE7b0JBQzlDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxNQUFNLENBQUE7b0JBQ3pELEtBQUssQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFBO29CQUMxQixLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFBO29CQUNwRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUE7b0JBQ25DLElBQUksSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUE7b0JBQ3JCLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRTt3QkFDMUMsSUFBSSxHQUFHLEVBQUUsQ0FBQTtxQkFDVjtvQkFDRCxJQUFJLENBQUMsWUFBWSxDQUNmLEtBQUssRUFDTCxJQUFJLENBQUMsMEJBQTBCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQyxFQUMxQyxNQUFNLEVBQ04scUJBQXFCLEVBQ3JCLEVBQUUsRUFDRixJQUFJLENBQ0wsQ0FBQztpQkFDSDthQUNGO2lCQUNJO2dCQUNILEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQTthQUNwQztTQUNGO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBZSxFQUFFLE1BQU0sR0FBRyxDQUFDO1FBQzVDLE1BQU0sT0FBTyxHQUFHO1lBQ2QsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG9CQUFvQjtZQUM5QyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUNsQyxRQUFRLEVBQUUsTUFBTTtZQUNoQixVQUFVLEVBQUUsT0FBTztZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsTUFBTTtTQUM3QyxDQUFBO1FBQ0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtRQUNsRyxJQUFJLFFBQVEsSUFBSSxRQUFRLEVBQUUsT0FBTyxFQUFFO1lBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ2pELElBQUksRUFBRTtvQkFDSixPQUFPLEVBQUUsOEJBQThCLEVBQUUsSUFBSSxFQUFFLFNBQVM7aUJBQ3pELEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSx5QkFBeUI7YUFDdEUsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUNoQixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTthQUNuRztTQUNGO2FBQU0sSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO2dCQUNqRCxJQUFJLEVBQUU7b0JBQ0osT0FBTyxFQUFFLDRDQUE0QyxFQUFFLElBQUksRUFBRSxPQUFPO2lCQUNyRSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsdUJBQXVCO2FBQ3BFLENBQUMsQ0FBQTtTQUNIO1FBQ0QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEtBQUssQ0FBQztJQUNwQyxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUU7WUFDekMsSUFBSSxDQUFDLCtCQUErQixHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsb0JBQW9CLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzRixJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFVBQVUsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7b0JBQzdGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUE7b0JBQzVELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTt3QkFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7cUJBQ3pCO3lCQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO3dCQUMzQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFBO3FCQUNqQztpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUFDO1NBQ0o7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQTtJQUM1QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBVSxFQUFDLFFBQWUsRUFBQyxTQUFnQjtRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUM7UUFDL0UsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDdEQsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHO2dCQUNwQixHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3RCLGNBQWMsRUFBRSxNQUFNO2dCQUN0QixVQUFVLEVBQUUsS0FBSztnQkFDakIsUUFBUSxFQUFFLElBQUk7YUFDZixDQUFDO1lBQ0YsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzFEO0lBQ0gsQ0FBQzsrR0FqNURVLGtDQUFrQyxrQkFpRG5DLGFBQWE7bUdBakRaLGtDQUFrQywrWENoRi9DLDQ5bUJBb1JjLHV3S0R0TUEsQ0FBQyxhQUFhLENBQUM7OzRGQUVoQixrQ0FBa0M7a0JBTjlDLFNBQVM7K0JBQ0Usc0NBQXNDLGNBR3BDLENBQUMsYUFBYSxDQUFDOzswQkFtRHhCLE1BQU07MkJBQUMsYUFBYTttYUE1Q2QsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUVDLEVBQUU7c0JBRFIsV0FBVzt1QkFBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBJbmplY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXItdjInO1xuaW1wb3J0IHsgTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1waWxscy5tb2RlbCc7XG4vLyBpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBXaWRnZXRDb250ZW50TGliU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtY29udGVudC1saWIuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbiAgV2lkZ2V0RW5yb2xsU2VydmljZSxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZUxpYiB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci1saWIuc2VydmljZSc7XG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTnNDYXJkQ29udGVudCB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvY2FyZC1jb250ZW50LXYyLm1vZGVsJztcbmltcG9ydCB7IElUb2RheUV2ZW50cyB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvZXZlbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBBZGRDb21wZXRlbmN5UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2ctY29tcG9uZW50cy9hZGQtY29tcGV0ZW5jeS1wb3B1cC9hZGQtY29tcGV0ZW5jeS1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2ctY29tcG9uZW50cy9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFkZUFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL19hbmltYXRpb25zL2ZhZGUtYW5pbWF0aW9uJztcbmltcG9ydCB7IFNha3NoYW1BSSB9IGZyb20gJy4uLy4uLy4uL2NvbnN1bXB0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBJU3RyaXBVbml0Q29udGVudERhdGEge1xuICBrZXk6IHN0cmluZztcbiAgY2FuSGlkZVN0cmlwOiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBzaG93U3RyaXA6IGJvb2xlYW47XG4gIGRpc2FibGVUcmFuc2xhdGU6IGJvb2xlYW47XG4gIHdpZGdldHM/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdO1xuICBzdHJpcFRpdGxlOiBzdHJpbmc7XG4gIHN0cmlwVGl0bGVMaW5rPzoge1xuICAgIGxpbms6IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgICB9LFxuICAgIGljb246IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gIH07XG4gIHNsaWRlckNvbmZpZz86IHtcbiAgICBzaG93TmF2czogYm9vbGVhbixcbiAgICBzaG93RG90czogYm9vbGVhbixcbiAgICBtYXhXaWRnZXRzPzogbnVtYmVyXG4gICAgY2VyaWZpY2F0ZUNhcmRNYXJnaW4/OiBib29sZWFuXG4gIH07XG4gIHN0cmlwQ29uZmlnOiBhbnk7XG4gIHRhYnM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFRhYltdIHwgdW5kZWZpbmVkO1xuICBzdHJpcE5hbWU/OiBzdHJpbmc7XG4gIHN0cmlwTG9nbz86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0cmlwSW5mbz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcblxufVxuY29uc3QgU05BQ0tCQVJfRFVSQVRJT04gPSAzMDAwXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLXVpYy1jb250ZW50LXN0cmlwLXdpdGgtdGFicy1waWxscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1waWxscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLXBpbGxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic1BpbGxzQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwTXVsdGlwbGU+IHtcbiAgQElucHV0KCkgd2lkZ2V0RGF0YSE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHZpZXdBbGxSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB0ZWxlbXRyeVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZDogYW55ID0gJydcbiAgQElucHV0KCkgZW1pdFZpZXdBbGw6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBjaGFubm5lbE5hbWU6IGFueSA9ICcnXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgbWF4V2lkZ2V0c1Nha3NoYW1BSSA9IDEwMDtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcbiAgYWN0aXZlVGFiSW5kZXg6IG51bWJlciA9IDBcbiAgYWN0aXZlUGlsbEluZGV4OiBudW1iZXIgPSAwXG4gIHJlY29tbWVuZGF0aW9uUG9wdXAgPSBmYWxzZVxuICBzYWtzaGFtRmVlZGJhY2tQb3B1cCA9IGZhbHNlXG4gIHNha3NoYW1BZGRDb21wZXRlbmN5ID0gZmFsc2VcbiAgc2Frc2hhbUxvYWRlciA9IGZhbHNlXG4gIHJlY29tbWVuZGVkQ291cnNlc0lkOiBzdHJpbmdcbiAgcmVsZXZlbnROb3RSZWxldmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHRlbGVtZW50cnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBmZWVkYmFja0NvdXJzZUlkID0gJydcbiAgY3VycmVudFN0cmlwRzogYW55O1xuICB0YWJFdmVudEc6IGFueTtcbiAgZmlyc3RUaW1lTG9hZGVkID0gZmFsc2VcbiAgbG9jYWxSZWNvbW1lbmRlZDogYW55O1xuICBzYWtzaGFtQUlFbnVtID0gU2Frc2hhbUFJXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIHByaXZhdGUgY29udGVudFN0cmlwU3ZjOiBDb250ZW50U3RyaXBOZXdNdWx0aXBsZVNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55LFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudExpYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXJTdmM6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHV0aWxpdHlTdmM6IFV0aWxpdHlTZXJ2aWNlLFxuICAgIC8vIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAvLyBwcml2YXRlIHNlYXJjaFNlcnZTdmM6IFNlYXJjaFNlcnZTZXJ2aWNlLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHVzZXJTdmM6IFdpZGdldFVzZXJTZXJ2aWNlTGliLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGVucm9sbFN2YzogV2lkZ2V0RW5yb2xsU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJyk7XG4gICAgICBsZXQgbGFuZyA9IEpTT04uc3RyaW5naWZ5KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSk7XG4gICAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9cXFwiL2csICcnKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMubG9jYWxSZWNvbW1lbmRlZCA9IHRoaXMuY29udGVudFN2Yy5nZXRSZWNvbW1lbmRlZElkcyh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQpXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9UZWxlbWVudHJ5KClcbiAgfVxuXG4gIHN1YnNjcmliZVRvVGVsZW1lbnRyeSgpIHtcblxuICAgIGlmICghdGhpcy50ZWxlbWVudHJ5U3Vic2NyaXB0aW9uICYmICF0aGlzLmNvbnRlbnRTdmMuaXNUZWxlbWVudHJ5U3Vic2NyaWJlZCkge1xuICAgICAgdGhpcy50ZWxlbWVudHJ5U3Vic2NyaXB0aW9uID0gdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5zZXRUZWxlbWVudHJ5U3Vic2NyaXB0aW9uKHRydWUpXG4gICAgICAgIGlmICh0aGlzLndpZGdldERhdGEgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXSAmJlxuICAgICAgICAgICgodGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ID09PSAnY2JwUGxhbicpXG4gICAgICAgICAgICB8fCB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgPT09ICdmb3JZb3UnXG4gICAgICAgICAgICB8fCB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgPT09ICdjb250aW51ZUxlYXJuaW5nJylcbiAgICAgICAgICAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdLmtleSA9PT0gZGF0YS50eXBlT2ZUZWxlbWV0cnkpIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdLnRhYnNbdGhpcy5hY3RpdmVUYWJJbmRleF1cbiAgICAgICAgICAvLyBjb25zdCBwaWxsID0gdGFiLnBpbGxzRGF0YVt0aGlzLmFjdGl2ZVBpbGxJbmRleF1cbiAgICAgICAgICBjb25zdCBwaWxsID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8udGFic1t0aGlzLmFjdGl2ZVRhYkluZGV4XT8ucGlsbHNEYXRhLmZpbmQoKHBpbGw6IGFueSkgPT4gcGlsbD8uc2VsZWN0ZWQpO1xuICAgICAgICAgIGlmICh0YWIgJiYgcGlsbCkge1xuICAgICAgICAgICAgZGF0YS5zZWxlY3RlZFRhYiA9IHRoaXMucGFyYW1ldHJpemVkVGV4dCh0YWIubGFiZWwpXG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkUGlsbCA9IHBpbGwubGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJcIikudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwcyAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdICYmXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ICE9PSAnY2JwUGxhbicgJiZcbiAgICAgICAgICB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgIT09ICdmb3JZb3UnICYmXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ICE9PSAnY29udGludWVMZWFybmluZydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwYXJhbWV0cml6ZWRUZXh0KHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci50b0xvY2FsZUxvd2VyQ2FzZSgpLnJlcGxhY2UoXCIgXCIsIFwiLVwiKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxldmVudE5vdFJlbGV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbGV2ZW50Tm90UmVsZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbGVtZW50cnlTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGVsZW1lbnRyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLmNvbnRlbnRTdmMuc2V0VGVsZW1lbnRyeVN1YnNjcmlwdGlvbihmYWxzZSlcbiAgICB9XG4gIH1cblxuICBzaG93QWNjb3JkaW9uKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5tb2RlID09PSAnYWNjb3JkaW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0FjY29yZGlvbkRhdGE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2V0SGlkZGVuRm9yU3RyaXAoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBjc3RyaXBfJHtrZXl9YCwgJzEnKTtcbiAgfVxuICBwcml2YXRlIGdldElmU3RyaXBIaWRkZW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYGNzdHJpcF8ke2tleX1gKTtcbiAgICByZXR1cm4gQm9vbGVhbihzdG9yYWdlSXRlbSAhPT0gJzEnKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgdHJ1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFN1YnNjcmlwdGlvbiBmb3IgY2hhbmdlc1xuICAgIGNvbnN0IGtleUFuZEV2ZW50OiB7IGtleTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZyb206IHN0cmluZyB9W10gPSB0aGlzLndpZGdldERhdGEuc3RyaXBzXG4gICAgICAubWFwKHN0cmlwID0+ICh7XG4gICAgICAgIGtleTogc3RyaXAua2V5LFxuICAgICAgICB0eXBlOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5ldmVudFR5cGUpIHx8ICcnLFxuICAgICAgICBmcm9tOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5mcm9tLnRvU3RyaW5nKCkpIHx8ICcnLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKCh7IGtleSwgdHlwZSwgZnJvbSB9KSA9PiBrZXkgJiYgdHlwZSAmJiBmcm9tKTtcbiAgICBjb25zdCBldmVudFR5cGVTZXQgPSBuZXcgU2V0KGtleUFuZEV2ZW50Lm1hcChlID0+IGUudHlwZSkpO1xuICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50U3ZjLmV2ZW50cyRcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudFR5cGVTZXQuaGFzKGV2ZW50LmV2ZW50VHlwZSkpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGtleUFuZEV2ZW50XG4gICAgICAgICAgLmZpbHRlcihlID0+IGUudHlwZSA9PT0gZXZlbnQuZXZlbnRUeXBlICYmIGUuZnJvbSA9PT0gZXZlbnQuZnJvbSlcbiAgICAgICAgICAubWFwKGUgPT4gZS5rZXkpXG4gICAgICAgICAgLmZvckVhY2goayA9PiB0aGlzLmZldGNoU3RyaXBGcm9tS2V5KGssIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21LZXkoa2V5OiBzdHJpbmcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQoc3RyaXAgPT4gc3RyaXAua2V5ID09PSBrZXkpO1xuICAgIGlmIChzdHJpcERhdGEpIHtcbiAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcERhdGEsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgaXNTdHJpcFNob3dpbmcoZGF0YTogYW55KSB7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGlmIChkYXRhICYmIGRhdGEua2V5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcEtleSAmJiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkgJiZcbiAgICAgIGRhdGEuc3RyaXBUaXRsZSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBOYW1lICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhLndpZGdldHMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGtleSAmJiBrZXkud2lkZ2V0RGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBQcmltYXJ5Q2F0ZWdvcnkpIHtcbiAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhLmtleScsIGRhdGEsIGRhdGEua2V5LCBkYXRhLndpZGdldHMpO1xuICAgIHJldHVybiBkYXRhLnNob3dTdHJpcDtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0ZGF0YShkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoZGF0YS5zdHJpcEluZm8pIHtcbiAgICAgIHJldHVybiBkYXRhLnN0cmlwSW5mby53aWRnZXQ7XG4gICAgfVxuICAgIHJldHVybiB7fTtcblxuICB9XG4gIGNoZWNrQ29uZGl0aW9uKFxuICAgIHdEYXRhOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLFxuICAgIGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YVxuICApIHtcbiAgICBpZiAoXG4gICAgICB3RGF0YS5zdHJpcHMgJiYgd0RhdGEuc3RyaXBzWzBdICYmXG4gICAgICB3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcgJiZcbiAgICAgIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbFxuICAgICkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIGlmIChkYXRhLmtleSAmJiBkYXRhLmtleSA9PT0gXCJjYnBQbGFuXCIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGlsbCA9IGRhdGEudGFic1t0aGlzLmFjdGl2ZVRhYkluZGV4XT8ucGlsbHNEYXRhLmZpbmQoXG4gICAgICAgIChwaWxsOiBhbnkpID0+IHBpbGwuc2VsZWN0ZWRcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWRQaWxsKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZFBpbGwud2lkZ2V0cyAmJiBzZWxlY3RlZFBpbGw/LndpZGdldHMubGVuZ3RoID4gNDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEua2V5ICYmIGRhdGEua2V5ID09PSBcImNvbnRpbnVlTGVhcm5pbmdcIikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgd0RhdGEuc3RyaXBzWzBdLnZpZXdNb3JlVXJsICYmIGRhdGEud2lkZ2V0cyAmJiBkYXRhLndpZGdldHMubGVuZ3RoID49IDFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHdEYXRhLnN0cmlwc1swXS52aWV3TW9yZVVybCAmJiBkYXRhLndpZGdldHMgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+PSA0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIC8vIGxldCB0YWJXaXRoTWF4V2lkZ2V0czogYW55ID0ge31cbiAgICAgIC8vIGRhdGEudGFicy5mb3JFYWNoKCh0YWI6IGFueSk9PntcbiAgICAgIC8vICAgaWYodGFiLnBpbGxzRGF0YSAmJiB0YWIucGlsbHNEYXRhLmxlbmd0aCl7XG4gICAgICAvLyAgICAgdGFiV2l0aE1heFdpZGdldHMgPSB0YWIucGlsbHNEYXRhLnJlZHVjZShcbiAgICAgIC8vICAgICAgIChwcmV2OiBhbnksIGN1cnJlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAvLyAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAvLyAgICAgICAgIH1cbiAgICAgIC8vICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgIC8vICAgICAgICAgICByZXR1cm4gKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSA/IHByZXYgOiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgLy8gICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgLy8gICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICAvLyByZXR1cm4gKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMgJiYgKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSApID8gcHJldiA6IGN1cnJlbnRcbiAgICAgIC8vICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBhbGlnblxuICAgICAgLy8gICAgICAgfSwgZGF0YS50YWJzWzBdKTtcblxuICAgICAgLy8gICB9XG4gICAgICAvLyB9KVxuICAgICAgLy8gaWYgdGFicyBoYXMgYXRsZWFzdCAxIHdpZGdldHMgdGhlbiBzdHJpcCB3aWxsIHNob3cgb3IgZWxzZSBub3RcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyc0Zyb21BcnJheSh2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMih2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgY2hlY2tGb3JEYXRlRmlsdGVycyhmaWx0ZXJzOiBhbnkpIHtcbiAgICBsZXQgdXNlckRhdGE6IGFueTtcbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHVzZXJEYXRhID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbmREYXRlJ11bJz49J10gPSBldmFsKGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJ11bJz49J10pXG4gICAgfSBlbHNlIGlmIChmaWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVySWQpIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgZmlsdGVycy5kZXNpZ25hdGlvbiA9IHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5mZXRjaEZyb21TZWFyY2hWNihzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRm9yWW91RGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoVXNlckVucm9sbGVkRGF0YShzdHJpcCwgMCwgMCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIGF3YWl0IHRoaXMuZmV0Y2hEZXNpZ25hdGlvbkJhc2VkQ291cnNlcyhzdHJpcCwgMiwgdHJ1ZSlcblxuICAgIGlmIChzdHJpcC50YWJzWzBdPy52YWx1ZSA9PT0gU2Frc2hhbUFJLlNha3NoYW1BSSkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKHN0cmlwLCAwLCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgfVxuICAgIHRoaXMuY2FuU2hvd1Nha3NoYW1BaVRhYihzdHJpcClcbiAgICAvLyB0aGlzLmZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuXG4gICAgLy8gdGhpcy5lbnJvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKVxuICB9XG5cbiAgdG9nZ2xlSW5mbyhkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBjb25zdCBzdHJpcEluZm8gPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbztcbiAgICBpZiAoc3RyaXBJbmZvKSB7XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgIT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2Fybihgc3RyaXAgaW5mbyBtb2RlOiAke3N0cmlwSW5mby5tb2RlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7XG4gICAgICAgIHN0cmlwSW5mby5tb2RlID0gJ2JlbG93JztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSA9PT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbyA9IHtcbiAgICAgICAgICAuLi5zdHJpcEluZm8sXG4gICAgICAgICAgdmlzaWJpbGl0eU1vZGU6IHN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ2hpZGRlbicgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG5cbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICAgIHNha3NoYW1BSUdlbmVyYXRlZDogdGhpcy5nZXRSZWNvbW1lbmRlZElkKHN0cmlwKVxuXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBJVG9kYXlFdmVudHNbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVzdWx0czogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXSA9IFtdLFxuICAgIGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgICBfdmlld01vcmVVcmw6IGFueSxcbiAgICB0YWJzUmVzdWx0cz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIHdpZGdldHM6XG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZSdcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLihzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAgICAgICAuLi4oc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgc2hvd09uTm9EYXRhOiBCb29sZWFuKFxuICAgICAgICBzdHJpcC5ub0RhdGFXaWRnZXQgJiZcbiAgICAgICAgISgoc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubGVuZ3RoICsgcmVzdWx0cy5sZW5ndGggKyAoc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLmxlbmd0aCkgJiZcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJyxcbiAgICAgICksXG4gICAgICBzaG93T25Mb2FkZXI6IEJvb2xlYW4oc3RyaXAubG9hZGVyICYmIGZldGNoU3RhdHVzID09PSAnZmV0Y2hpbmcnKSxcbiAgICAgIHNob3dPbkVycm9yOiBCb29sZWFuKHN0cmlwLmVycm9yV2lkZ2V0ICYmIGZldGNoU3RhdHVzID09PSAnZXJyb3InKSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldXG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwID0ge1xuICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwLFxuICAgICAgW3N0cmlwLmtleV06IHN0cmlwRGF0YSxcbiAgICB9O1xuICAgIGlmICghdGFic1Jlc3VsdHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmXG4gICAgICAgIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZldGNoU3RhdHVzID09PSAnZXJyb3InKSAmJlxuICAgICAgICBzdHJpcERhdGEud2lkZ2V0c1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXMsIHN0cmlwRGF0YS53aWRnZXRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmICEocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmNicExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jYnBMaXN0KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcCAmJiBzdHJpcC50YWJzLmxlbmd0aClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvbW1lbmRlZElkKHN0cmlwOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc3RyaXA/LnRhYnMgfHwgIUFycmF5LmlzQXJyYXkoc3RyaXAudGFicykpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoc3RyaXAudGFic1swXT8uaGlkZVRhYiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoXG4gICAgICAoc3RyaXAudGFic1swXT8udmFsdWUgPT09IFNha3NoYW1BSS5TYWtzaGFtQUkgJiYgdGhpcy5hY3RpdmVUYWJJbmRleCA9PT0gMCkgfHxcbiAgICAgIChzdHJpcC50YWJzWzFdPy52YWx1ZSA9PT0gU2Frc2hhbUFJLlNha3NoYW1BSSAmJiB0aGlzLmFjdGl2ZVRhYkluZGV4ID09PSAxKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0VGFiRGF0YUJ5ZmlsdGVyKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnc3RyaXAgLS0gJywgc3RyaXApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLSAnLCBjdXJyZW50VGFiKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2NhbGN1bGF0ZVBhcmVudFN0YXR1cy0tICcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgLy8gVE9ETzogV3JpdGUgbG9naWMgZm9yIGluZGl2aWR1YWwgZmlsdGVyIGlmIHBhc3NlZCBpbiBjb25maWdcbiAgICAvLyBhZGQgc3dpdGNoIGNhc2UgYmFzZWQgb24gY29uZmlnIGtleSBwYXNzZWRcbiAgfVxuXG4gIGdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcDogYW55LCBrZXk6IGFueSk6IG51bWJlciB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gMDtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHRyYWNrZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBfLmdldChpdGVtLCAnd2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXInKVxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnkoc3RyaXBEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gIH1cblxuICByZWRpcmVjdFZpZXdBbGwoc3RyaXBEYXRhOiBhbnksIHBhdGg6IHN0cmluZywgcXVlcnlQYXJhbXNEYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5lbWl0Vmlld0FsbCkge1xuICAgICAgdGhpcy52aWV3QWxsUmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWVyeVBhcmFtc0RhdGEgJiYgcXVlcnlQYXJhbXNEYXRhLnRhYlNlbGVjdGVkICYmIHF1ZXJ5UGFyYW1zRGF0YS50YWJTZWxlY3RlZCA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNEYXRhLmtleVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wYWdlL3JlY29tbWVuZGVkLWxlYXJuaW5ncyddLCB7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXNEYXRhIH0pXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICAvLyBuZXcgY29kZSB3cml0dGluZyBmcm9tIGhlcmU9PT09bmV3PT09PVxuXG4gIGZldGNoRm9yWW91RGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwICYmIHN0cmlwLnR5cGUgPT09ICdmb3JZb3UnKSB7XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGNvbnN0IHBpbGxEYXRhID0gZmlyc3RUYWIucGlsbHNEYXRhWzBdXG4gICAgICAgIGlmIChwaWxsRGF0YS5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsUGlsbHMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzWzBdLnBpbGxzRGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlblBpbGxzRnJvbU1hcCA9IChhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiO1xuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhzdHJpcCwgMCwgMCwgY3VycmVuUGlsbHNGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIGN1cnJlblBpbGxzRnJvbU1hcCkge1xuICAgICAgICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgICAgICAgICB0YWJTZWxlY3RlZDogZmlyc3RUYWIudmFsdWUsXG4gICAgICAgICAgICAgICAgcGlsbFNlbGVjdGVkOiBwaWxsRGF0YS52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVNlYXJjaFY2KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihzdHJpcCwgMCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFY2UmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUV2ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIHBpbGxJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgY3VycmVudFRhYi5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBjb25zdCBhbGxQaWxscyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnNbdGFiSW5kZXhdPy5waWxsc0RhdGE7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChhbGxQaWxscylcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgaWYgKGFsbFBpbGxzICYmIGFsbFBpbGxzLmxlbmd0aCAmJiBhbGxQaWxsc1twaWxsSW5kZXhdKSB7XG4gICAgICAgICAgICAgIGFsbFBpbGxzW3BpbGxJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgLi4uYWxsUGlsbHNbcGlsbEluZGV4XSxcbiAgICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICAgIC8vIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgY29uc3QgYWxsUGlsbHMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzW3RhYkluZGV4XT8ucGlsbHNEYXRhO1xuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoYWxsUGlsbHMpXG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGlmIChhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbcGlsbEluZGV4XSkge1xuICAgICAgICAgICAgICBhbGxQaWxsc1twaWxsSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgIC4uLmFsbFBpbGxzW3BpbGxJbmRleF0sXG4gICAgICAgICAgICAgICAgd2lkZ2V0czogW10sXG4gICAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzOiBbXSxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHRhYkluZGV4OiBudW1iZXIsXG4gICAgcGlsbEluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGNvbnN0IGFsbFBpbGxzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFic1t0YWJJbmRleF0/LnBpbGxzRGF0YTtcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRQaWxsKGFsbFBpbGxzKVxuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBpZiAoYWxsUGlsbHMgJiYgYWxsUGlsbHMubGVuZ3RoICYmIGFsbFBpbGxzW3BpbGxJbmRleF0pIHtcbiAgICAgICAgICAgICAgYWxsUGlsbHNbcGlsbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAuLi5hbGxQaWxsc1twaWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgdGFiUmVzdWx0cyAvLyB0YWJSZXN1bHRzIGFzIHdpZGdldHNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGFuZ2V0b0RvbmUoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgZHluYW1pYyB2YWx1ZXNdXG4gICAgICAgIGlmIChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHVzZXJSb290T3JnSWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgICAgICB1c2VyUm9vdE9yZ0lkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gPSB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy50cmVuZGluZ0NvbnRlbnRTZWFyY2gocmVxdWVzdC50cmVuZGluZ1NlYXJjaCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdCAmJlxuICAgICAgICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldLmxlbmd0aCA+IDUgJiZcbiAgICAgICAgICAgIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgIGxldCBwcm9jY2VzZWRSZXN1bHQ6IGFueSA9IFtdXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5yZXNwb25zZSAmJiByZXN1bHRzLnJlc3BvbnNlLmNlcnRpZmljYXRpb25zKSB7XG4gICAgICAgICAgICByZXN1bHRzLnJlc3BvbnNlLmNlcnRpZmljYXRpb25zLm1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zb3VyY2UgPT09IHRoaXMuY2hhbm5uZWxOYW1lKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Nlc2VkUmVzdWx0LnB1c2gocmVzdWx0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0cyA9IHsgcmVzcG9uc2U6IHsgY2VydGlmaWNhdGlvbnM6IHByb2NjZXNlZFJlc3VsdCB9IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IGFueSwgcGlsbEluZGV4OiBhbnksIHN0cmlwTWFwOiBJU3RyaXBVbml0Q29udGVudERhdGEsIHN0cmlwS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgdGFiRXZlbnRJbmRleDtcbiAgICBpZiAodGFiRXZlbnQgPT09IDEgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudF0uaGlkZVRhYikge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IDJcbiAgICAgIHRhYkV2ZW50SW5kZXggPSAyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0YWJFdmVudFxuICAgICAgdGFiRXZlbnRJbmRleCA9IHRhYkV2ZW50XG4gICAgfVxuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnaW5wcm9ncmVzcyc7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50SW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGEpXG4gICAgfVxuICAgIC8vIGNvbnN0IGRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlUYWJEYXRhID0ge1xuICAgIC8vICAgbGFiZWw6IGAke3N0cmlwTWFwLnRhYnNbdGFiRXZlbnRdLmxhYmVsfWAsXG4gICAgLy8gICBpbmRleDogdGFiRXZlbnQsXG4gICAgLy8gfTtcbiAgICAvLyB0aGlzLmV2ZW50U3ZjLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgLy8gICB7XG4gICAgLy8gICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxuICAgIC8vICAgICBzdWJUeXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RTdWJUeXBlcy5IT01FX1BBR0VfU1RSSVBfVEFCUyxcbiAgICAvLyAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxuICAgIC8vICAgfSxcbiAgICAvLyAgIHt9LFxuICAgIC8vICAge1xuICAgIC8vICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkhPTUUsXG4gICAgLy8gICB9XG5cbiAgICAvLyApO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF07XG4gICAgY29uc3QgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0/LnBpbGxzRGF0YVtwaWxsSW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRTdHJpcCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzID0+IHMua2V5ID09PSBzdHJpcEtleSk7XG4gICAgdGhpcy5jdXJyZW50U3RyaXBHID0gY3VycmVudFN0cmlwO1xuICAgIHRoaXMudGFiRXZlbnRHID0gdGFiRXZlbnRcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljayAmJiBjdXJyZW50UGlsbEZyb21NYXApIHtcbiAgICAgIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgMCwgY3VycmVudFBpbGxGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCAwLCBjdXJyZW50UGlsbEZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnR5cGUgPT09ICdldmVudEVucm9sbG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RW5yb2xsbWVudExpc3QoY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QudHlwZSA9PT0gJ2Vucm9sbG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZyb21JbnRlcm5hbEVucm9sbG1lbnRMaXN0KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgcGlsbEluZGV4LCB0cnVlKVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgIC8vICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRTdHJpcC50YWJzW3RhYkV2ZW50SW5kZXhdLnJlcXVlc3QgJiYgY3VycmVudFN0cmlwLnRhYnNbdGFiRXZlbnRJbmRleF0ucmVxdWVzdC5kZXNpZ25hdGlvbnNMaXN0KSB7XG4gICAgICAgICAgdGhpcy5mZXRjaERlc2lnbmF0aW9uQmFzZWRDb3Vyc2VzKGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3RyaXAudGFic1t0YWJFdmVudEluZGV4XS5yZXF1ZXN0ICYmIGN1cnJlbnRTdHJpcC50YWJzW3RhYkV2ZW50SW5kZXhdLnJlcXVlc3QuY2JwTGlzdCkge1xuICAgICAgICAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhjdXJyZW50U3RyaXAsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0cmlwLnRhYnNbdGFiRXZlbnRJbmRleF0ucmVxdWVzdCAmJiBjdXJyZW50U3RyaXAudGFic1t0YWJFdmVudEluZGV4XS5yZXF1ZXN0LmNvdXJzZVJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbFJlY29tbWVuZGVkID0gdGhpcy5jb250ZW50U3ZjLmdldFJlY29tbWVuZGVkSWRzKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZClcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb24oY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgICAgIH1cbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaERlc2lnbmF0aW9uQmFzZWRDb3Vyc2VzKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKHN0cmlwLnRhYnNbdGFiSW5kZXhdPy5yZXF1ZXN0ICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3QuZGVzaWduYXRpb25zTGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoRGVzaWduYXRpb25zRGF0YSgpLnRvUHJvbWlzZSgpXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgICAgXCJjb3Vyc2VJZFwiOiByZXNwb25zZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZW5vbGxEYXRhID0gYXdhaXQgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFbnJvbGxDb250ZW50RGF0YShyZXF1ZXN0KS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291cnNlcyAmJiByZXMucmVzdWx0LmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMucmVzdWx0LmNvdXJzZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3Qgc1JlcXVlc3Q6IGFueSA9IHtcbiAgICAgICAgICAgIFwic2VhcmNoVjZcIjoge1xuICAgICAgICAgICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgICAgICAgICBcImlkZW50aWZpZXJcIjogcmVzcG9uc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwib2Zmc2V0XCI6IDAsXG4gICAgICAgICAgICAgICAgXCJxdWVyeVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwic29ydF9ieVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImxhc3RVcGRhdGVkT25cIjogXCJkZXNjXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29udGVudFN2Yy5zZWFyY2hWNihzUmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5yZXN1bHQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgICAgICBsZXQgY291cnNlcyA9IHJlc3VsdHMucmVzdWx0LmNvbnRlbnRcbiAgICAgICAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVxuICAgICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0RGVzaWduYXRpb25zVGFiRGF0YShjb3Vyc2VzLCBzdHJpcCwgZW5vbGxEYXRhLCByZXNwb25zZSwgJ2Rlc2lnbmF0aW9uJylcbiAgICAgICAgICAgICAgICBsZXQgY291bnRPZldpZGdldCA9IHRydWVcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgc3RyaXA/LnRhYnMgJiYgc3RyaXA/LnRhYnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgc3RyaXAudGFicy5mb3JFYWNoKCh0YWI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFiLnZhbHVlID09PSAnZGVzaWduYXRpb24nICYmIHRhYi5waWxsc0RhdGEgJiYgdGFiLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0YWIucGlsbHNEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbGwgJiYgcGlsbC53aWRnZXRzICYmIHBpbGwud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50T2ZXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbGwuZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50T2ZXaWRnZXQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlsbC5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgICAgICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgJ3ZpZXdNb3JlVXJsJywgc3RyaXAudGFic1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc2V0UGlsbHMoc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0uaGlkZVRhYiA9IHRydWVcbiAgICAgICAgICBsZXQgdGFicyA9IHN0cmlwLnRhYnNcbiAgICAgICAgICBpZiAoc3RyaXAudGFic1swXSAmJiBzdHJpcC50YWJzWzBdLmhpZGVUYWIpIHtcbiAgICAgICAgICAgIHRhYnMgPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAvLyAgIHN0cmlwLFxuICAgICAgICAgIC8vICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhbXSwgc3RyaXApLFxuICAgICAgICAgIC8vICAgJ2RvbmUnLFxuICAgICAgICAgIC8vICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIC8vICAgJycsXG4gICAgICAgICAgLy8gICB0YWJzXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5yZXNldFBpbGxzKHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YSlcbiAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICBzdHJpcC5zaG93T25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgIGxldCB0YWJzID0gc3RyaXAudGFic1xuICAgICAgICBpZiAoc3RyaXAudGFic1swXSAmJiBzdHJpcC50YWJzWzBdLmhpZGVUYWIpIHtcbiAgICAgICAgICB0YWJzID0gW11cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFtdLCBzdHJpcCksXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICB0YWJzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICByZXNldFBpbGxzKGRhdGE6IGFueSkge1xuICAgIGRhdGEuZm9yRWFjaCgocGlsbDogYW55KSA9PiB7XG4gICAgICBwaWxsLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICBkZWxldGUgcGlsbC50YWJMb2FkaW5nXG4gICAgICBwaWxsLndpZGdldHMgPSBbXVxuICAgIH0pXG4gIH1cblxuICBzcGxpdERlc2lnbmF0aW9uc1RhYkRhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgZW5vbGxEYXRhOiBhbnksIGNvdXJzZXNBcnJheTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldFRhYnNEZXNpZ25hdGlvbnNMaXN0KFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIHN0cmlwLCBlbm9sbERhdGEsIGNvdXJzZXNBcnJheVxuICAgICk7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXS52YWx1ZSA9PT0gdHlwZSkge1xuICAgICAgICAgIGxldCBjaGVja1dpZGdldEFuZEFjdGl2ZVBpbGwgPSB0cnVlXG4gICAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YS5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0pIHtcbiAgICAgICAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgICB0YWJMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHNwbGl0RGF0YS5maW5kKGl0bUlubmVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRtSW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YSA9IHRhYlJlc3VsdHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cmlwLnRhYnNcbiAgfVxuXG4gIGdldFRhYnNEZXNpZ25hdGlvbnNMaXN0KGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCBlbm9sbERhdGE6IGFueSwgY291cnNlc0FycmF5OiBhbnkpIHtcbiAgICBsZXQgYXZhaWFsYWJsZTogYW55W10gPSBbXVxuICAgIGxldCBpbnByb2dyZXNzOiBhbnlbXSA9IFtdXG4gICAgbGV0IGFsbENvbXBsZXRlZDogYW55W10gPSBbXVxuICAgIGxldCBjYnBEYXRhOiBhbnlcbiAgICB0aGlzLnVzZXJTdmMuZ2V0Q0JQRGF0YSgnY2JwRGF0YScpLnN1YnNjcmliZSgocmVzdWx0ID0+IHtcbiAgICAgIGNicERhdGEgPSByZXN1bHRcbiAgICB9KSlcbiAgICBjb3Vyc2VzQXJyYXkuZm9yRWFjaCgoY291cnNlSWQ6IGFueSkgPT4ge1xuICAgICAgbGV0IGNvdXJzZSA9IGFycmF5LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pZGVudGlmaWVyID09PSBjb3Vyc2VJZClcbiAgICAgIGlmIChjb3Vyc2UpIHtcbiAgICAgICAgaWYgKGNicERhdGEgJiYgY2JwRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjYnBlbGVtID0gY2JwRGF0YS5maW5kKChfY291cnNlOiBhbnkpID0+IF9jb3Vyc2UuaWRlbnRpZmllciA9PT0gY291cnNlLmlkZW50aWZpZXIpXG4gICAgICAgICAgaWYgKGNicGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5vbGxEYXRhICYmIGVub2xsRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBlbGVtID0gZW5vbGxEYXRhLmZpbmQoKGVDb3Vyc2U6IGFueSkgPT4gZUNvdXJzZS5jb250ZW50SWQgPT09IGNvdXJzZS5pZGVudGlmaWVyKVxuICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICBpZiAoZWxlbS5zdGF0dXMgPT09IDIpIHtcbiAgICAgICAgICAgICAgYWxsQ29tcGxldGVkLnB1c2goY291cnNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5wcm9ncmVzcy5wdXNoKGNvdXJzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWFsYWJsZS5wdXNoKGNvdXJzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWFsYWJsZS5wdXNoKGNvdXJzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgdmFsdWU6ICdyYXZhaWxhYmxlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhdmFpYWxhYmxlLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdyaW5wcm9ncmVzcycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoaW5wcm9ncmVzcywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAncmNvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoYWxsQ29tcGxldGVkLCBzdHJpcCkgfSxcbiAgICBdXG4gIH1cblxuICBwaWxsQ2xpY2tlZChldmVudDogYW55LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogYW55LCBwaWxsSW5kZXg6IGFueSwgdGFiSW5kZXg6IGFueSkge1xuICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgIHRoaXMuYWN0aXZlUGlsbEluZGV4ID0gcGlsbEluZGV4XG4gICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0udGFiTG9hZGluZyA9IHRydWU7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50UGlsbEZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljayAmJiBjdXJyZW50UGlsbEZyb21NYXApIHtcbiAgICAgIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY3VycmVudFBpbGxGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4LCBjdXJyZW50UGlsbEZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnR5cGUgPT09ICdlbnJvbGxtZW50Jykge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGcm9tSW50ZXJuYWxFbnJvbGxtZW50TGlzdChjdXJyZW50U3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QudHlwZSA9PT0gJ2V2ZW50RW5yb2xsbWVudCcpIHtcbiAgICAgICAgICB0aGlzLmZldGNoRXZlbnRFbnJvbGxtZW50TGlzdChjdXJyZW50U3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG5cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAvLyAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIC8vIH0sIDIwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgLy8gaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1bJ3NlbGVjdGVkJ10gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaFY2UmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYocmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIGlmICh2aWV3TW9yZVVybCAmJiB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcykge1xuICAgICAgICAgIC8vICAgdmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB2aWV3TW9yZVVybC5xdWVyeVBhcmFtc1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldFNlbGVjdGVkUGlsbEluZGV4KHRhYmRhdGE6IGFueSwgdGFiSW5kZXg6IGFueSkge1xuICAgIGlmICh0YWJkYXRhLnBpbGxzRGF0YSAmJiB0YWJkYXRhLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgIGxldCBpbmRleCA9IHRhYmRhdGEucGlsbHNEYXRhLmZpbmRJbmRleCgocGlsbDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwaWxsLnNlbGVjdGVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleFxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9XG5cbiAgY2FuU2hvd0hlYWRpbmcoc3RyaXA6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3RyaXA/LnRhYnMgfHwgIUFycmF5LmlzQXJyYXkoc3RyaXAudGFicykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0FsbEhpZGRlbiA9IHN0cmlwLnRhYnMuZXZlcnkodGFiID0+IHRhYi5oYXNPd25Qcm9wZXJ0eSgnaGlkZVRhYicpICYmIHRhYi5oaWRlVGFiID09PSB0cnVlKTtcbiAgICByZXR1cm4gIWlzQWxsSGlkZGVuO1xuICB9XG5cblxuICAvLyBjYnAgcGxhbnNcbiAgYXN5bmMgZmV0Y2hBbGxDYnBQbGFucyhzdHJpcDogYW55LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB7XG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGxldCB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWRcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QodXNlcklkKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuXG4gICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgbGV0IGNvdW50T2ZXaWRnZXQgPSB0cnVlXG4gICAgICAgICAgaWYgKHN0cmlwICYmIHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmlwLnRhYnMuZm9yRWFjaCgodGFiOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRhYi5waWxsc0RhdGEgJiYgdGFiLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YWIucGlsbHNEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBpbGwgJiYgcGlsbC53aWRnZXRzICYmIHBpbGwud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50T2ZXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwaWxsLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50T2ZXaWRnZXQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpcC50YWJzWzBdLnBpbGxzRGF0YVswXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgc3RyaXAudGFic1swXS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgIHN0cmlwLnRhYnNbMF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgIHN0cmlwLnRhYnNbMF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBzdHJpcC50YWJzWzBdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgIC8vIHRoaXMuZmV0Y2hEZXNpZ25hdGlvbkJhc2VkQ291cnNlcyhzdHJpcCwgMSwgdHJ1ZSlcbiAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKHN0cmlwLCAxLCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjYW5TaG93U2Frc2hhbUFpVGFiKHN0cmlwOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN0cmlwPy5rZXkgIT09ICdjYnBQbGFuJykgcmV0dXJuXG5cbiAgICAgIGxldCB1c2VyUHJvZmlsZSA9IHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlXG4gICAgICBpZiAodXNlclByb2ZpbGUucm9vdE9yZ0lkKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudXNlclN2Yy5nZXRPcmdSZWFkRGF0YSh1c2VyUHJvZmlsZS5yb290T3JnSWQpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnNha3NoYW1BSWVuYWJsZWQpIHtcbiAgICAgICAgICBzdHJpcC50YWJzWzFdLmhpZGVUYWIgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbihzdHJpcCwgMSwgdHJ1ZSwgdGhpcy5sb2NhbFJlY29tbWVuZGVkKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaXAudGFic1sxXS5oaWRlVGFiID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChzdHJpcD8ua2V5ICE9PSAnY2JwUGxhbicpIHJldHVyblxuICAgICAgc3RyaXAudGFic1sxXS5oaWRlVGFiID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHNwbGl0Q2JwVGFic0RhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldFRhYnNMaXN0KFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIHN0cmlwLFxuICAgICk7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXS52YWx1ZSA9PT0gXCJteUlnb3RQbGFuc1wiKSB7XG4gICAgICAgICAgbGV0IGNoZWNrV2lkZ2V0QW5kQWN0aXZlUGlsbCA9IHRydWVcbiAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1tpXS5waWxsc0RhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgICAgIC8vIGlmKGogPT09IDAgKXtcbiAgICAgICAgICAgICAgLy8gaWYoc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0ud2lkZ2V0cyAmJiBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS53aWRnZXRzLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgLy8gICBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICAgICAgLy8gICBjaGVja1dpZGdldEFuZEFjdGl2ZVBpbGwgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXSkge1xuICAgICAgICAgICAgICAgIHRhYlJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0sXG4gICAgICAgICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdICYmIGl0bUlubmVyLnZhbHVlID09PSBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyaXAudGFic1tpXS5waWxsc0RhdGEgPSB0YWJSZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmlwLnRhYnM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGxldCBhbGw6IGFueVtdID0gW107XG4gICAgbGV0IHVwY29taW5nOiBhbnlbXSA9IFtdO1xuICAgIGxldCBvdmVyZHVlOiBhbnlbXSA9IFtdO1xuICAgIGFycmF5LmZvckVhY2goKGU6IGFueSkgPT4ge1xuICAgICAgYWxsLnB1c2goZSk7XG4gICAgICBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgb3ZlcmR1ZS5wdXNoKGUpO1xuICAgICAgfSBlbHNlIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuVVBDT01JTkcpIHtcbiAgICAgICAgdXBjb21pbmcucHVzaChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA9PT0gMik7XG4gICAgbGV0IGFsbEluQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPCAyKTtcblxuICAgIGxldCBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkQWxsID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gZmlyc3REYXRlID4gc2Vjb25kRGF0ZSA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFsbEluQ29tcGxldGVkID0gYWxsSW5Db21wbGV0ZWQuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFICYmIGIucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGwgPSBbLi4uYWxsSW5Db21wbGV0ZWQsIC4uLmFsbENvbXBsZXRlZEFsbCwgLi4uYWxsQ29tcGxldGVkT3ZlckR1ZV07XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcblxuICAgIG92ZXJkdWUgPSBvdmVyZHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICByZXR1cm4gZmlyc3REYXRlID4gc2Vjb25kRGF0ZSA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gW1xuICAgICAgeyB2YWx1ZTogJ2FsbCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoYWxsLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICd1cGNvbWluZycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHModXBjb21pbmcsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ2NvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoYWxsQ29tcGxldGVkLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdvdmVyZHVlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhvdmVyZHVlLCBzdHJpcCkgfV07XG4gIH1cbiAgcmVzZXRTZWxlY3RlZFBpbGwocGlsbERhdGE6IGFueSkge1xuICAgIGlmIChwaWxsRGF0YSAmJiBwaWxsRGF0YS5sZW5ndGgpIHtcbiAgICAgIHBpbGxEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICBwaWxsWydzZWxlY3RlZCddID0gZmFsc2VcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG5cbiAgLy8gTVkgbGVhcm5pbmcgU3RyaXAgbWV0aG9kcyBzdGFydHMgaGVyZVxuICBmZXRjaFVzZXJFbnJvbGxlZERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCwgdGFiSW5kZXg6IG51bWJlciwgcGlsbEluZGV4OiBudW1iZXIsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkge1xuICAgICAgaWYgKHN0cmlwICYmIHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFzdHJpcC50YWJzW3RhYkluZGV4XS5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAoc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGcm9tSW50ZXJuYWxFbnJvbGxtZW50TGlzdChzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RyaXAgJiYgc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgIGxldCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXAudGFic1t0YWJJbmRleF1cbiAgICAgICAgICBsZXQgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF1cbiAgICAgICAgICBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgIC4uLnN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICAgICAgcGlsbFNlbGVjdGVkOiBjdXJyZW50UGlsbEZyb21NYXAudmFsdWUsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG5cbiAgZmV0Y2hGcm9tSW50ZXJuYWxFbnJvbGxtZW50TGlzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCB0YWJJbmRleDogbnVtYmVyLCBwaWxsSW5kZXg6IG51bWJlciwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YSAmJiBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XSkge1xuICAgICAgbGV0IGN1cnJlbnRQaWxsRnJvbU1hcDogYW55ID0gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1cbiAgICAgIGxldCB1c2VySWQgPSAnJ1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5yb2xsU3ZjLmZldGNoSW50ZXJuYWxFbnJvbGxtZW50RGF0YSh1c2VySWQsIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgbGV0IGNvdXJzZXM6IGFueSA9IFtdXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdXJzZXMgJiYgcmVzLnJlc3VsdC5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgIGNvdXJzZXMgPSBbLi4uY291cnNlcywgLi4ucmVzLnJlc3VsdC5jb3Vyc2VzXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5yb2xsU3ZjLmZldGNoRXh0ZXJuYWxFbnJvbGxtZW50RGF0YShjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC5wYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5jb3Vyc2VzICYmIHJlcy5yZXN1bHQuY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvdXJzZXMgPSBbLi4uY291cnNlcywgLi4ucmVzLnJlc3VsdC5jb3Vyc2VzXVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmZvcm1hdE5ld0Vucm9sbG1lbnREYXRhKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4LCBjb3Vyc2VzLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgICAgIH0sIChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mb3JtYXROZXdFbnJvbGxtZW50RGF0YShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY291cnNlcywgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgIHN0cmlwLnRhYnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZXRvRG9uZShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICBsZXQgY291cnNlczogYW55ID0gW11cbiAgICAgICAgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFeHRlcm5hbEVucm9sbG1lbnREYXRhKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdXJzZXMgJiYgcmVzLnJlc3VsdC5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY291cnNlcyA9IFsuLi5jb3Vyc2VzLCAuLi5yZXMucmVzdWx0LmNvdXJzZXNdXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9ybWF0TmV3RW5yb2xsbWVudERhdGEoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIGNvdXJzZXMsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZXRvRG9uZShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCk7XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZldGNoRXZlbnRFbnJvbGxtZW50TGlzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCB0YWJJbmRleDogbnVtYmVyLCBwaWxsSW5kZXg6IG51bWJlciwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YSAmJiBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XSkge1xuICAgICAgbGV0IGN1cnJlbnRQaWxsRnJvbU1hcDogYW55ID0gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1cbiAgICAgIGxldCB1c2VySWQgPSAnJ1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZDtcbiAgICAgIH1cbiAgICAgIHRoaXMuZW5yb2xsU3ZjLmZldGNoRXZlbnRzRW5yb2xsbWVudERhdGEodXNlcklkLCBjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC5wYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG5cbiAgICAgICAgbGV0IGV2ZW50czogYW55ID0gW11cbiAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuZXZlbnRzICYmIHJlcy5yZXN1bHQuZXZlbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGV2ZW50cyA9IFsuLi5ldmVudHMsIC4uLnJlcy5yZXN1bHQuZXZlbnRzXVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybWF0TmV3RW5yb2xsbWVudERhdGEoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIGV2ZW50cywgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICBbXSxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHt9LFxuICAgICAgICAgIHN0cmlwLnRhYnNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGFuZ2V0b0RvbmUoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgpO1xuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBmb3JtYXROZXdFbnJvbGxtZW50RGF0YShzdHJpcDogYW55LCB0YWJJbmRleDogbnVtYmVyLCBwaWxsSW5kZXg6IG51bWJlciwgY291cnNlczogYW55LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGFueSA9IHRydWUpIHtcbiAgICBsZXQgY29udGVudDogTnNDb250ZW50LklDb250ZW50W107XG4gICAgaWYgKGNvdXJzZXMgJiYgY291cnNlcy5sZW5ndGgpIHtcbiAgICAgIGNvbnRlbnQgPSBjb3Vyc2VzLm1hcCgoYzogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRUZW1wOiBOc0NvbnRlbnQuSUNvbnRlbnQgPSBjLmNvbnRlbnQgfHwgYy5ldmVudCB8fCB7fTtcbiAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblBlcmNlbnRhZ2UgPSBjLmNvbXBsZXRpb25QZXJjZW50YWdlIHx8IGMucHJvZ3Jlc3MgfHwgMDtcbiAgICAgICAgY29udGVudFRlbXAuY29tcGxldGlvblN0YXR1cyA9IGMuY29tcGxldGlvblN0YXR1cyB8fCBjLnN0YXR1cyB8fCAwO1xuICAgICAgICBjb250ZW50VGVtcC5lbnJvbGxlZERhdGUgPSBjLmVucm9sbGVkRGF0ZSB8fCAnJztcbiAgICAgICAgY29udGVudFRlbXAubGFzdENvbnRlbnRBY2Nlc3NUaW1lID0gYy5sYXN0Q29udGVudEFjY2Vzc1RpbWUgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudFN0YXR1cyA9IGMubGFzdFJlYWRDb250ZW50U3RhdHVzIHx8ICcnO1xuICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRJZCA9IGMubGFzdFJlYWRDb250ZW50SWQgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmxyY1Byb2dyZXNzRGV0YWlscyA9IGMubHJjUHJvZ3Jlc3NEZXRhaWxzIHx8ICcnO1xuICAgICAgICBjb250ZW50VGVtcC5pc3N1ZWRDZXJ0aWZpY2F0ZXMgPSBjLmlzc3VlZENlcnRpZmljYXRlcyB8fCBjLmlzc3VlZF9jZXJ0aWZpY2F0ZXMgfHwgW107XG4gICAgICAgIGNvbnRlbnRUZW1wLmJhdGNoSWQgPSBjLmJhdGNoSWQgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmNvbnRlbnQgPSBjLmNvbnRlbnQgfHwgYy5ldmVudCB8fCB7fTtcbiAgICAgICAgY29udGVudFRlbXAuY29udGVudC5wcmltYXJ5Q2F0ZWdvcnkgPSBjLmNvbnRlbnQgJiYgYy5jb250ZW50LnByaW1hcnlDYXRlZ29yeSB8fCBjLmV2ZW50ICYmIGMuZXZlbnQucmVzb3VyY2VUeXBlIHx8ICcnO1xuICAgICAgICBjb250ZW50VGVtcC5jVHlwZSA9IGMuZXZlbnQgPyAnZXZlbnQnIDogJyc7XG4gICAgICAgIHJldHVybiBjb250ZW50VGVtcDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGxldCBzb3J0ZWRDb250ZW50OiBhbnkgPSAoY29udGVudCB8fCBbXSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGRhdGVBOiBhbnkgPSBuZXcgRGF0ZShhLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgIGNvbnN0IGRhdGVCOiBhbnkgPSBuZXcgRGF0ZShiLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgIHJldHVybiBkYXRlQiAtIGRhdGVBO1xuICAgIH0pO1xuICAgIGlmIChzdHJpcCAmJiBzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgbGV0IGN1cnJlbnRQaWxsRnJvbU1hcDogYW55ID0gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1cbiAgICAgICAgY3VycmVudFBpbGxGcm9tTWFwWydmZXRjaFRhYlN0YXR1cyddID0gJ2RvbmUnXG4gICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVsnc2VsZWN0ZWQnXSA9IHRydWVcbiAgICAgICAgbGV0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHNvcnRlZENvbnRlbnQsIHN0cmlwKVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVsnd2lkZ2V0cyddID0gd2lkZ2V0c1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAge30sXG4gICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZXRvRG9uZShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29tcGV0ZW5jeSgpIHtcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubWF0RGlhbG9nLm9wZW4oQWRkQ29tcGV0ZW5jeVBvcHVwQ29tcG9uZW50LCB7XG4gICAgICB3aWR0aDogJzcwJSdcbiAgICB9KVxuXG4gICAgbW9kZWxSZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5zYWtzaGFtTG9hZGVyID0gdHJ1ZVxuICAgICAgICB0aGlzLnNha3NoYW1BZGRDb21wZXRlbmN5ID0gZmFsc2VcbiAgICAgICAgbW9kZWxSZWYuY2xvc2UoKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW4sXG4gICAgY291cnNlUmVjb21tZW5kYXRpb25JZDogc3RyaW5nXG4gICkge1xuICAgIGlmIChzdHJpcC50YWJzW3RhYkluZGV4XS5yZXF1ZXN0LmNvdXJzZVJlY29tbWVuZGF0aW9uKSB7XG4gICAgICB0aGlzLnNha3NoYW1Mb2FkZXIgPSB0cnVlXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgXCJ1c2VyX2lkXCI6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZCxcbiAgICAgICAgXCJkZXBhcnRtZW50XCI6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLmRlcGFydG1lbnROYW1lLFxuICAgICAgICBcImRlc2lnbmF0aW9uXCI6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnByb2Zlc3Npb25hbERldGFpbHNbMF0/LmRlc2lnbmF0aW9uLFxuICAgICAgICBcImRldmljZV90eXBlXCI6IFwid2ViXCJcbiAgICAgIH1cbiAgICAgIGxldCByZXNwb25zZTogYW55XG4gICAgICBsZXQgY291cnNlc0lkczogYW55XG5cbiAgICAgIGlmIChjb3Vyc2VSZWNvbW1lbmRhdGlvbklkKSB7XG4gICAgICAgIHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmdldFJlY29tbWVuZGVkQ291cnNlc1Nha3NoYW1BSShjb3Vyc2VSZWNvbW1lbmRhdGlvbklkKS50b1Byb21pc2UoKS5jYXRjaChhc3luYyAoX2VycjogYW55KSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZ2VuZXJhdGVDb3Vyc2VzU2Frc2hhbUFJKHN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3QuY291cnNlUmVjb21tZW5kYXRpb24ucGF0aCwgcGF5bG9hZClcbiAgICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZ2VuZXJhdGVDb3Vyc2VzU2Frc2hhbUFJKFxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3QuY291cnNlUmVjb21tZW5kYXRpb24ucGF0aCwgcGF5bG9hZClcbiAgICAgICAgICAudG9Qcm9taXNlKClcbiAgICAgIH1cblxuICAgICAgaWYgKHJlc3BvbnNlPy5yZWNvbW1lbmRlZF9jb3Vyc2VzICYmIHJlc3BvbnNlPy5yZWNvbW1lbmRlZF9jb3Vyc2VzPy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5zYWtzaGFtTG9hZGVyID0gZmFsc2VcbiAgICAgICAgdGhpcy5yZWNvbW1lbmRlZENvdXJzZXNJZCA9IHJlc3BvbnNlPy5pZCB8fCAnJ1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2V0UmVjb21tZW5kZWRJZHModGhpcy5yZWNvbW1lbmRlZENvdXJzZXNJZCwgdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkKVxuXG4gICAgICAgIGlmIChyZXNwb25zZS5mZWVkYmFja3MubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5jb250ZW50U3ZjLnNldEZlZWRiYWNrRGF0YShyZXNwb25zZS5mZWVkYmFja3MpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN1YnNjcmliZVRvUmVsZXZlbnRFbW1pdHRlcigpXG4gICAgICAgIGNvdXJzZXNJZHMgPSByZXNwb25zZS5yZWNvbW1lbmRlZF9jb3Vyc2VzLm1hcChjb3Vyc2UgPT4gY291cnNlLmNvdXJzZV9pZClcbiAgICAgICAgaWYgKGNvdXJzZXNJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICAgICAgICBcImNvdXJzZUlkXCI6IGNvdXJzZXNJZHNcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGVub2xsRGF0YSA9IGF3YWl0IHRoaXMuZW5yb2xsU3ZjLmZldGNoRW5yb2xsQ29udGVudERhdGEocmVxdWVzdCkudG9Qcm9taXNlKCkudGhlbihhc3luYyAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdXJzZXMgJiYgcmVzLnJlc3VsdC5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICByZXR1cm4gcmVzLnJlc3VsdC5jb3Vyc2VzXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KS5jYXRjaCgoX2VycjogYW55KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgY29uc3Qgc1JlcXVlc3RWMTogYW55ID0ge1xuICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICAgICAgICBcInByaW1hcnlDYXRlZ29yeVwiOiBbXG4gICAgICAgICAgICAgICAgICBcIkNvdXJzZVwiXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBcImlkZW50aWZpZXJcIjogY291cnNlc0lkc1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcInNvcnRCeVwiOiB7XG4gICAgICAgICAgICAgICAgXCJsYXN0VXBkYXRlZE9uXCI6IFwiRGVzY1wiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc1JlcXVlc3Q6IGFueSA9IHtcbiAgICAgICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJpZGVudGlmaWVyXCI6IGNvdXJzZXNJZHNcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXCJvZmZzZXRcIjogMCxcbiAgICAgICAgICAgICAgXCJzb3J0X2J5XCI6IHtcbiAgICAgICAgICAgICAgICBcImxhc3RVcGRhdGVkT25cIjogXCJkZXNjXCJcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5jb250ZW50U3ZjLnNlYXJjaENvbnRlbnRTZWFyY2hfUFJPRChzUmVxdWVzdFYxKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgdGhpcy5jb250ZW50U3ZjLnNlYXJjaFY2KHNSZXF1ZXN0KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZihyZXN1bHRzLnJlc3VsdC5jb3VudCA+IDApIHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cz8ucmVzdWx0ICYmIHJlc3VsdHM/LnJlc3VsdD8uY29udGVudCkge1xuICAgICAgICAgICAgICAgIC8vIGxldCBjb3Vyc2VzID0gcmVzdWx0cy5yZXN1bHQuY29udGVudFxuICAgICAgICAgICAgICAgIGxldCBjb3Vyc2VzID0gdGhpcy5jb250ZW50U3ZjLmZpbHRlckNvdXJzZXNXaXRoTm9SYXRpbmcocmVzcG9uc2UsIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQpXG4gICAgICAgICAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVxuICAgICAgICAgICAgICAgIGlmIChzdHJpcD8udGFicyAmJiBzdHJpcD8udGFicz8ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdERlc2lnbmF0aW9uc1RhYkRhdGEoY291cnNlcywgc3RyaXAsIGVub2xsRGF0YSwgY291cnNlc0lkcywgU2Frc2hhbUFJLlNha3NoYW1BSSlcbiAgICAgICAgICAgICAgICAgIGxldCBjb3VudE9mV2lkZ2V0ID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwICYmIHN0cmlwPy50YWJzICYmIHN0cmlwPy50YWJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaXAudGFicy5mb3JFYWNoKCh0YWI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmICh0YWI/LnZhbHVlID09PSBTYWtzaGFtQUkuU2Frc2hhbUFJICYmIHRhYj8ucGlsbHNEYXRhICYmIHRhYj8ucGlsbHNEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGFiLnBpbGxzRGF0YS5mb3JFYWNoKChwaWxsOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbGwgJiYgcGlsbC53aWRnZXRzICYmIHBpbGwud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY291bnRPZldpZGdldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlsbC5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50T2ZXaWRnZXQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgICAgICAgICBzdHJpcC5zaG93T25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZmlyc3RUaW1lTG9hZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb21tZW5kYXRpb25Qb3B1cCA9IHRydWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJzdFRpbWVMb2FkZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgICAgICAgICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgICAndmlld01vcmVVcmwnLCBzdHJpcC50YWJzXG4gICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0uaGlkZVRhYiA9IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucmVzZXRQaWxscyhzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEpXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS53aWRnZXRzID0gW11cbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICBzdHJpcC5zaG93T25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5oaWRlVGFiID0gdHJ1ZVxuICAgICAgICAgIGxldCB0YWJzID0gc3RyaXAudGFic1xuICAgICAgICAgIGlmIChzdHJpcC50YWJzWzBdICYmIHN0cmlwLnRhYnNbMF0uaGlkZVRhYikge1xuICAgICAgICAgICAgdGFicyA9IFtdXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFtdLCBzdHJpcCksXG4gICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHRhYnNcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0uaGlkZVRhYiA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzYXZlRmVlZGJhY2soY29tbWVudDogc3RyaW5nLCByYXRpbmcgPSAwKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIFwicmVjb21tZW5kYXRpb25faWRcIjogdGhpcy5yZWNvbW1lbmRlZENvdXJzZXNJZCxcbiAgICAgIFwiY291cnNlX2lkXCI6IHRoaXMuZmVlZGJhY2tDb3Vyc2VJZCxcbiAgICAgIFwicmF0aW5nXCI6IHJhdGluZyxcbiAgICAgIFwiY29tbWVudHNcIjogY29tbWVudCxcbiAgICAgIFwidXNlcl9pZFwiOiB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWRcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnRlbnRTdmMuc2F2ZUZlZWRiYWNrU2Frc2hhbUFJKHBheWxvYWQpLnRvUHJvbWlzZSgpLmNhdGNoKCgpID0+IHsgfSlcbiAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2U/Lm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoU25hY2tiYXJDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdUaGFuayB5b3UgZm9yIHlvdXIgZmVlZGJhY2suJywgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB9LCBkdXJhdGlvbjogU05BQ0tCQVJfRFVSQVRJT04sIHBhbmVsQ2xhc3M6ICdjb3Vyc2Utc3VjY2Vzcy1zbmFja2JhcicsXG4gICAgICB9KVxuICAgICAgaWYgKHJhdGluZyA9PT0gMCkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb24odGhpcy5jdXJyZW50U3RyaXBHLCB0aGlzLnRhYkV2ZW50RywgdHJ1ZSwgdGhpcy5sb2NhbFJlY29tbWVuZGVkKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICB0aGlzLnNuYWNrQmFyLm9wZW5Gcm9tQ29tcG9uZW50KFNuYWNrYmFyQ29tcG9uZW50LCB7XG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICBtZXNzYWdlOiAnU29tZXRoaW5nIGlzIHdyb25nLiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyJywgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgfSwgZHVyYXRpb246IFNOQUNLQkFSX0RVUkFUSU9OLCBwYW5lbENsYXNzOiAnY291cnNlLWVycm9yLXNuYWNrYmFyJyxcbiAgICAgIH0pXG4gICAgfVxuICAgIHRoaXMuc2Frc2hhbUZlZWRiYWNrUG9wdXAgPSBmYWxzZTtcbiAgfVxuXG4gIHN1YnNjcmliZVRvUmVsZXZlbnRFbW1pdHRlcigpIHtcbiAgICBpZiAoIXRoaXMucmVsZXZlbnROb3RSZWxldmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5yZWxldmVudE5vdFJlbGV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5jb250ZW50U3ZjLnJlbGV2ZW50Tm90UmVsZXZlbnQkLnN1YnNjcmliZShkYXRhID0+IHtcbiAgICAgICAgaWYgKGRhdGEgJiYgZGF0YS53aWRnZXREYXRhICYmIGRhdGEud2lkZ2V0RGF0YT8uY29udGVudD8uaWRlbnRpZmllciAhPT0gdGhpcy5mZWVkYmFja0NvdXJzZUlkKSB7XG4gICAgICAgICAgdGhpcy5mZWVkYmFja0NvdXJzZUlkID0gZGF0YS53aWRnZXREYXRhPy5jb250ZW50Py5pZGVudGlmaWVyXG4gICAgICAgICAgaWYgKGRhdGEuaXNSZWxldmVudCkge1xuICAgICAgICAgICAgdGhpcy5zYXZlRmVlZGJhY2soJycsIDEpXG4gICAgICAgICAgfSBlbHNlIGlmICghZGF0YS5pc1JlbGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNha3NoYW1GZWVkYmFja1BvcHVwID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsRmVlZGJhY2tQb3B1cCgpIHtcbiAgICB0aGlzLnNha3NoYW1GZWVkYmFja1BvcHVwID0gZmFsc2U7XG4gICAgdGhpcy5mZWVkYmFja0NvdXJzZUlkID0gJydcbiAgfVxuXG4gIHN0YXR1c0NoYW5nZXRvRG9uZShzdHJpcDogYW55LHRhYkluZGV4Om51bWJlcixwaWxsSW5kZXg6bnVtYmVyKSB7XG4gICAgY29uc3QgYWxsUGlsbHMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzW3RhYkluZGV4XT8ucGlsbHNEYXRhO1xuICAgIGlmIChhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbcGlsbEluZGV4XSkge1xuICAgICAgYWxsUGlsbHNbcGlsbEluZGV4XSA9IHtcbiAgICAgICAgLi4uYWxsUGlsbHNbcGlsbEluZGV4XSxcbiAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgdGFiTG9hZGluZzogZmFsc2UsXG4gICAgICAgIHNlbGVjdGVkOiB0cnVlXG4gICAgICB9O1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0uc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCIhY29udGVudEF2YWlsYWJsZTsgZWxzZSBvdGhlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG48bmctdGVtcGxhdGUgI290aGVyVGVtcGxhdGU+XG4gIDwhLS0gPGRpdiAqbmdJZj1cInNob3dQYXJlbnRMb2FkZXJcIiBjbGFzcz1cInRleHQtY2VudGVyIG15LTJcIj5cbiAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICA8L2Rpdj4gLS0+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UGFyZW50RXJyb3JcIiBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldERhdGEuZXJyb3JXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYXJlbnROb0RhdGFcIiBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldERhdGEubm9EYXRhV2lkZ2V0XCI+PC9uZy1jb250YWluZXI+XG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGtleSBvZiBzdHJpcHNLZXlPcmRlcjsgbGV0IGkgPSBpbmRleDsgdHJhY2tCeTogaWRlbnRpZnlcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdHJpcFNob3dpbmcoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKSAmJiBjYW5TaG93SGVhZGluZyhzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pXCI+XG4gICAgICA8YSBuYW1lPVwie3tzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGV9fVwiIFtjbGFzc109XCJrZXlcIj5cbiAgICAgICAgPGRpdiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXAgJiYgKGdldExlbmd0aChzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTm9EYXRhIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTG9hZGVyIHx8XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uRXJyb3IpXG4gICAgICAgICAgICAgICAgICBcIiBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgIXdpZGdldERhdGE/LmlzQ2hhbm5lbFN0cmlwID8gJ3hzOnB4LTggc3g6cHgtMTBzcycgOiBpID4gMCA/ICdtdC0xMicgOiAnJ1xuICAgICAgICAgICAgICAgICAgXCIgW2lkXT1cImtleVwiIFtuZ0NsYXNzXT1cIiF3aWRnZXREYXRhPy5pc0NoYW5uZWxTdHJpcCA/ICdtYXJnaW4tYm90dG9tLWN1c3RvbScgOiAnbWFyZ2luLWJvdHRvbS14cydcIj5cbiAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgcGFkOiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwQmFja2dyb3VuZCB9XCJcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsgJ2JhY2tncm91bmQtY29sb3InOiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwQmFja2dyb3VuZCB9XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBwbC00IHByLTQgbWQ6cHItMCBtZDpwbC0wIFwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgIXdpZGdldERhdGE/LmlzQ2hhbm5lbFN0cmlwXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJydcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnbWItOCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgICAgICAgICAgIFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LTEgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIG1hcmdpbi1yZW1vdmUgaW5saW5lLWJsb2NrIFwiICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNhcGl0YWxpemVcIiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uZGlzYWJsZVRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7e3N0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZX19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIiFzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmRpc2FibGVUcmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgdHJhbnNsYXRlTGFiZWxzKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZSwgJ2hvbWUnKSB9fVxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwSW5mbz8uaWNvblwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVJbmZvKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIiBpMThuLW1hdFRvb2x0aXAgbWF0VG9vbHRpcD1cImluZm9cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXJnaW4tbGVmdC14c1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uPnt7IHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBJbmZvPy5pY29uLmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlTGluaz8ubGlua1wiXG4gICAgICAgICAgICAgICAgICBbcm91dGVyTGlua109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVMaW5rPy5saW5rXCJcbiAgICAgICAgICAgICAgICAgIFtxdWVyeVBhcmFtc109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVMaW5rPy5saW5rPy5xdWVyeVBhcmFtc1wiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LXByaW1hcnktcHJpbWFyeS10ZXh0IHdzLW1hdC1kZWZhdWx0LXRleHRcIiBbY29sb3JdPVwiJ2FjY2VudCdcIj57e1xuICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVMaW5rPy5pY29uIH19PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzcGFjZXJcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgPCEtLSB2aWV3QWxsIHN0YXJ0LS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNoZWNrQ29uZGl0aW9uKHdpZGdldERhdGEgLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pXCIgY2xhc3M9XCJibG9jayBtZDpoaWRkZW5cIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00IHBsLTIgdmlldy1tb3JlIHdzLW1hdC1kZWZhdWx0LXRleHQgIFwiPlxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggd3MtbWF0LWRlZmF1bHQtdGV4dCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWF0LWJvZHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5KHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSk7cmVkaXJlY3RWaWV3QWxsKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucGF0aCwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucXVlcnlQYXJhbXMgKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid3MtbWF0LWRlZmF1bHQtdGV4dFwiPnt7dHJhbnNsYXRlTGFiZWxzKHdpZGdldERhdGEuc3RyaXBzWzBdPy52aWV3TW9yZVVybD8udmlld01vcmVUZXh0LCdob21lJylcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdTZWUgYWxsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIndzLW1hdC1kZWZhdWx0LXRleHQgbWF0LWljb24gbm90cmFuc2xhdGUgbWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tbm8tY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I9XCJhY2NlbnRcIj5uYXZpZ2F0ZV9uZXh0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSB2aWV3QWxsIGVuZC0tPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtaWNvbi1idXR0b24gKGNsaWNrKT1cInNldEhpZGRlbkZvclN0cmlwKGtleSlcIiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uY2FuSGlkZVN0cmlwXCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/Lm1vZGUgPT09ICdhY2NvcmRpb24nICYmIGlzTW9iaWxlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2hvd0FjY29yZGlvbkRhdGEgPSAhc2hvd0FjY29yZGlvbkRhdGFcIj57eyBzaG93QWNjb3JkaW9uRGF0YSA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTRcIiAqbmdJZj1cImNoZWNrVmlzaWJsZShzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3NiVWlSZXNvbHZlcldpZGdldF09XCJnZXRkYXRhKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIj5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbk5vRGF0YVwiXG4gICAgICAgICAgICAgIFtzYlVpUmVzb2x2ZXJXaWRnZXRdPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5ub0RhdGFXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkVycm9yXCJcbiAgICAgICAgICAgICAgW3NiVWlSZXNvbHZlcldpZGdldF09XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmVycm9yV2lkZ2V0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8IS0tIElGIG5vIGVycm9ycyB0aGVuIHByb2NlZWQgdG8gc2hvdyB0YWJzIG9yIG5vbiB0YWJzIHN0cmlwIC0tPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbk5vRGF0YSAmJiAhc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zaG93T25FcnJvclwiPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnRhYnMgJiYgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnRhYnMubGVuZ3RoXCI+XG4gICAgICAgICAgICAgICAgPG1hdC10YWItZ3JvdXAgYW5pbWF0aW9uRHVyYXRpb249XCIwbXNcIiBbc2VsZWN0ZWRJbmRleF09XCJnZXRTZWxlY3RlZEluZGV4KHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwga2V5KVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC10YWItbGFiZWxzIHctZnVsbCBzdHJpcHMtdGFiZ3JvdXAgcGFkZGluZy1ib3R0b20tdGFic1wiIGR5bmFtaWNIZWlnaHRcbiAgICAgICAgICAgICAgICAgIChzZWxlY3RlZEluZGV4Q2hhbmdlKT1cInRhYkNsaWNrZWQoJGV2ZW50LCAwLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0sIGtleSlcIj5cbiAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHRhYiBvZiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0udGFiczsgbGV0IGxhc3QgPSBsYXN0O2xldCB0YWJJbmRleCA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtdGFiICpuZ0lmPVwiIXRhYj8uaGlkZVRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtYXQtdGFiLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj8udmFsdWUgIT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRyYW5zbGF0ZUxhYmVscyh0YWI/LmxhYmVsLCAnaG9tZScpIH19ICZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJ0YWI/LnNob3dUYWJEYXRhQ291bnQgJiYgdGFiPy53aWRnZXRzPy5sZW5ndGhcIj4oe3t0YWI/LndpZGdldHM/Lmxlbmd0aH19KTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj8udmFsdWUgPT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvc2Frc2hhbUFJL2FpLWljb24uc3ZnXCIgYWx0PVwibG9hZGVyXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IHRyYW5zbGF0ZUxhYmVscyh0YWI/LmxhYmVsLCAnaG9tZScpIH19ICZuYnNwOzwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImluZm8tb3V0bGluZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1yZW1vdmUgdy0xNi1weCBjdXJzb3ItcG9pbnRlciByZXF1ZXN0LWlkLXRvb2xUaXAgbS1weFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF0VG9vbHRpcF09XCInaG9tZS5zYWtzaGFtQUlUb29sdGlwJyB8IHRyYW5zbGF0ZVwiIFttYXRUb29sdGlwUG9zaXRpb25dPVwiJ2Fib3ZlJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRUb29sdGlwQ2xhc3M9XCJyZXF1ZXN0LWlkLXRvb2xUaXBcIj48L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndmdWxsIHdyYXBwZXItc2Frc2hhbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYj8ucGlsbHNEYXRhICYmIHRhYj8ucGlsbHNEYXRhPy5sZW5ndGggJiYgIXRhYj8uaGlkZVRhYlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J292ZXJsYXktbWF4LWhlaWdodCc6IHJlY29tbWVuZGF0aW9uUG9wdXAgfHwgc2Frc2hhbUZlZWRiYWNrUG9wdXB9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHQtMyBmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPy52YWx1ZSAhPT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAtbGlzdCBjbGFzcz1cImNvbnRlbnQtcGlsbFwiIGFyaWEtbGFiZWw9XCJGaXNoIHNlbGVjdGlvblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBwaWxsIG9mIHRhYj8ucGlsbHNEYXRhO2xldCBwID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXAgW3NlbGVjdGVkXT1cInBpbGw/LnNlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJwaWxsQ2xpY2tlZCgkZXZlbnQsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwga2V5LCBwLCB0YWJJbmRleClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlsbC1uYW1lXCI+e3twaWxsPy5sYWJlbH19PC9zcGFuPjwvbWF0LWNoaXA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtY2hpcC1saXN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB2aWV3QWxsIHN0YXJ0LS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImNoZWNrQ29uZGl0aW9uKHdpZGdldERhdGEgLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pICYmIHRhYj8udmFsdWUgIT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiBoaWRkZW4gbWQ6YmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWwtNCBwbC0yIHZpZXctbW9yZSB3cy1tYXQtZGVmYXVsdC10ZXh0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImZsZXggd3MtbWF0LWRlZmF1bHQtdGV4dCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbWF0LWJvZHktMSBjdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJyYWlzZVRlbGVtZXRyeShzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pO3JlZGlyZWN0Vmlld0FsbChzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0sIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8udmlld01vcmVVcmw/LnBhdGgsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8udmlld01vcmVVcmw/LnF1ZXJ5UGFyYW1zIClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwid3MtbWF0LWRlZmF1bHQtdGV4dFwiPnt7dHJhbnNsYXRlTGFiZWxzKHdpZGdldERhdGEuc3RyaXBzWzBdPy52aWV3TW9yZVVybD8udmlld01vcmVUZXh0LCdob21lJylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAnU2VlIGFsbCd9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0IG1hdC1pY29uIG5vdHJhbnNsYXRlIG1hdGVyaWFsLWljb25zIG1hdC1pY29uLW5vLWNvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiPm5hdmlnYXRlX25leHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSB2aWV3QWxsIGVuZC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiKHN0cmlwc1Jlc3VsdERhdGFNYXAgJiYgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zaG93T25Mb2FkZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAhdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5mZXRjaFRhYlN0YXR1cykgJiYgIXNha3NoYW1Mb2FkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtY2VudGVyIG15LTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiLXVpYy1ob3Jpem9udGFsLXNjcm9sbGVyLXYyIFtzbGlkZXJDb25maWddPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCJrZXkrJy1zY3JvbGxlcidcIiBbbG9hZFN0YXR1c109XCInZmV0Y2hpbmcnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3RyaXBDb25maWddPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcENvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2Ygc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5sb2FkZXJXaWRnZXRzOyB0cmFja0J5OiB0cmFja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtzYlVpUmVzb2x2ZXJXaWRnZXRdPVwid2lkZ2V0XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2ItdWljLWhvcml6b250YWwtc2Nyb2xsZXItdjI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ0YWI/LnBpbGxzRGF0YSAmJiB0YWI/LnBpbGxzRGF0YS5sZW5ndGggJiYgdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIigodGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5mZXRjaFRhYlN0YXR1cyAmJiB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzID09PSAnZG9uZScpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgKCF0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHMgfHwgIXRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0cz8ubGVuZ3RoKSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8udmFsdWUgPT09ICdpbnByb2dyZXNzJzsgZWxzZSBtc2dUZW1wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgYWx0PVwiXCIgY2xhc3M9XCJtdC00IG1iLTRcIiBzcmM9XCJhc3NldHMvaWNvbnMvaG9tZS9ub2RhdGFEZWZhdWx0LnN2Z1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWF0LXN1YmhlYWRpbmctMSB0ZXh0LWNlbnRlciBpbmZvLWNvbnRlbnRcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb250ZW50c3RyaXBtdWx0aXBsZS5nZXRSZWFkeUZvckxlYXJuaW5nQWR2ZW50dXJlJyB8IHRyYW5zbGF0ZSB9fSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJjbGljay1oZXJlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInRhYj8ubGFiZWwgPT09ICdFdmVudHMnID8gJy9hcHAvZXZlbnQtaHViL2hvbWUnOicvcGFnZS9sZWFybidcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnRzdHJpcG11bHRpcGxlLmNsaWNrSGVyZScgfCB0cmFuc2xhdGUgfX08L2E+IDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiB0YWI/LmxhYmVsID09PSAnRXZlbnRzJ1wiPnt7J2NvbnRlbnRzdHJpcG11bHRpcGxlLnRvRW5yb2xsTmV4dEV2ZW50cycgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIHRhYj8ubGFiZWwgIT09ICdFdmVudHMnXCI+e3sgJ2NvbnRlbnRzdHJpcG11bHRpcGxlLnRvRW5yb2xsTmV4dENvdXJzZScgfFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbXNnVGVtcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cIm10LTQgbWItNFwiIHNyYz1cImFzc2V0cy9pY29ucy9ob21lL25vZGF0YURlZmF1bHQucG5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIHRleHQtY2VudGVyXCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVMYWJlbHModGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5ub2RhdGFNc2csXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2hvbWUnKSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIodGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5mZXRjaFRhYlN0YXR1cyA9PT0gJ2RvbmUnIHx8IHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0cz8ubGVuZ3RoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8udGFiTG9hZGluZ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYi11aWMtaG9yaXpvbnRhbC1zY3JvbGxlci12MiBbaWRdPVwia2V5Kyctc2Nyb2xsZXInXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzbGlkZXJDb25maWddPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZGdldHNMZW5ndGhdPVwidGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy53aWRnZXRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKSAmJiBzaG93QWNjb3JkaW9uKGtleSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2xvYWRTdGF0dXNdPVwiJ2RvbmUnXCIgW2RlZmF1bHRNYXhXaWRnZXRzXT1cInRhYj8udmFsdWUgPT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJID8gbWF4V2lkZ2V0c1Nha3NoYW1BSSA6IHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ubWF4V2lkZ2V0cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2xpZGVyQ29uZmlnPy5tYXhXaWRnZXRzIHx8IGRlZmF1bHRNYXhXaWRnZXRzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpcENvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwQ29uZmlnXCIgW2V4dHJhTWV0YV09XCJ0YWJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0c3wgc2xpY2U6MDoodGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5tYXhXaWRnZXRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWc/Lm1heFdpZGdldHMgfHwgZGVmYXVsdE1heFdpZGdldHMpOyB0cmFja0J5OiB0cmFja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3NiVWlSZXNvbHZlcldpZGdldF09XCJ3aWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHMgfCBzbGljZTowOihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWI/LnZhbHVlID09PSBzYWtzaGFtQUlFbnVtLlNha3NoYW1BSSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbWF4V2lkZ2V0c1Nha3NoYW1BSSBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5tYXhXaWRnZXRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2xpZGVyQ29uZmlnPy5tYXhXaWRnZXRzIHx8IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0TWF4V2lkZ2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOyB0cmFja0J5OiB0cmFja2VyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3NiVWlSZXNvbHZlcldpZGdldF09XCJ3aWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zYi11aWMtaG9yaXpvbnRhbC1zY3JvbGxlci12Mj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYj8udmFsdWUgPT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyZWNvbW1lbmRhdGlvblBvcHVwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyZWV0LW92ZXJsYXlcIiBAZmFkZUluT3V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9zYWtzaGFtQUkvbGFkeS1ncmVldC5zdmdcIiBhbHQ9XCJncmVldFwiIHdpZHRoPVwiMTA2XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwib3ZlcmxheS10ZXh0IG10LTQgdGV4dC13aGl0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydob21lLnNha3NoYW1haWRlc2MnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cIm92ZXJsYXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJlY29tbWVuZGF0aW9uUG9wdXAgPSBmYWxzZVwiPnt7J3Byb2ZpbGVJbmZvLm9rJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzYWtzaGFtRmVlZGJhY2tQb3B1cFwiID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JlZXQtb3ZlcmxheSBmZWVkYmFjay1vdmVybGF5XCIgQGZhZGVJbk91dD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LXRleHQgbXQtNCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2hvbWUuc2Frc2hhbWFpZmVlZGJhY2tUZXh0JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBjbGFzcz1cImZlZWRiYWNrLXRleHQgdy00LzUgbXQtNFwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBtYXRJbnB1dCBwbGFjZWhvbGRlcj1cIkVudGVyIHlvdXIgZmVlZGJhY2suLi5cIiByb3dzPVwiNFwiICNmZWVkYmFjayBbbWF4TGVuZ3RoXT1cIjUwMFwiPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbi1mZWVkYmFjayBtdC00IGZsZXggZ2FwLTQganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJvdmVybGF5LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVGZWVkYmFjayhmZWVkYmFjay52YWx1ZSlcIj57eyd1c2VyUHJvZmlsZS5zdWJtaXQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJvdmVybGF5LWJ1dHRvbi10cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNhbmNlbEZlZWRiYWNrUG9wdXAoKVwiPnt7J3VzZXJQcm9maWxlLmNhbmNlbCcgfCB0cmFuc2xhdGV9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzYWtzaGFtQWRkQ29tcGV0ZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBweS02XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2Frc2hhbS1sb2FkLXRleHQgdGV4dC1zbSBmb250LW5vcm1hbCBsYXRvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExldCB1cyBrbm93IHdoYXQgZG8geW91IHdhbnQgdG8gbGVhcm4gdG9kYXkhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gbWF0LXJhaXNlZC1idXR0b24gY2xhc3M9XCJvdmVybGF5LWJ1dHRvbiBtdC00XCIgKGNsaWNrKT1cImFkZENvbXBldGVuY3koKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYi0xXCI+YWRkPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIENvbXBldGVuY3k8L2J1dHRvbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIExvYWRlciBhbmQgQ29udGVudCAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNha3NoYW1Mb2FkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHRleHQtY2VudGVyIHB5LTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVwiL2Fzc2V0cy9pbWFnZXMvc2Frc2hhbUFJL3Nha3NoYW1fYWlfbG9hZGVyLTIuZ2lmXCIgYWx0PVwibG9hZGVyXCIgY2xhc3M9XCJtYi0zXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDBcIiBoZWlnaHQ9XCIxMDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWtzaGFtLWxvYWQtdGV4dCB0ZXh0LXNtIGZvbnQtbm9ybWFsIGxhdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snaG9tZS5zYWtzaGFtYWlMb2FkZXJUZXh0JyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICAgICAgICA8L21hdC10YWI+XG4gICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L21hdC10YWItZ3JvdXA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9hPlxuXG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT4iXX0=
|
|
1711
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL2NvbnN1bXB0aW9uL3NyYy9saWIvX2NvbW1vbi9zdHJpcHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMvY29udGVudC1zdHJpcC13aXRoLXRhYnMtcGlsbHMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxLQUFLLEVBQWEsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9HLE9BQU8sRUFBb0IsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQWdCaEYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhDLDZEQUE2RDtBQUM3RCwyQkFBMkI7QUFDM0IsT0FBTyxLQUFLLENBQUMsTUFBTSxRQUFRLENBQUE7QUFDM0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBS3ZFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZFQUE2RSxDQUFDO0FBRTFILE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7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RHRNQSxDQUFDLGFBQWEsQ0FBQzs7NEZBRWhCLGtDQUFrQztrQkFOOUMsU0FBUzsrQkFDRSxzQ0FBc0MsY0FHcEMsQ0FBQyxhQUFhLENBQUM7OzBCQW1EeEIsTUFBTTsyQkFBQyxhQUFhO21hQTVDZCxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0UsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBRUMsRUFBRTtzQkFEUixXQUFXO3VCQUFDLElBQUkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMgfSBmcm9tICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLXBpbGxzLm1vZGVsJztcbi8vIGltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IFdpZGdldENvbnRlbnRMaWJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LWxpYi5zZXJ2aWNlJztcbmltcG9ydCB7IE5zQ29udGVudCB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvd2lkZ2V0LWNvbnRlbnQubW9kZWwnO1xuaW1wb3J0IHsgTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL19zZXJ2aWNlcy9tdWx0aWxpbmd1YWwtdHJhbnNsYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgVEZldGNoU3RhdHVzLFxuICBMb2dnZXJTZXJ2aWNlLFxuICBFdmVudFNlcnZpY2UsXG4gIENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgVXRpbGl0eVNlcnZpY2UsXG4gIFdzRXZlbnRzLFxuICBXaWRnZXRFbnJvbGxTZXJ2aWNlLFxufSBmcm9tICdAc3VuYmlyZC1jYi91dGlscy12Mic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFdpZGdldFVzZXJTZXJ2aWNlTGliIH0gZnJvbSAnLi4vLi4vLi4vX3NlcnZpY2VzL3dpZGdldC11c2VyLWxpYi5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBOc0NhcmRDb250ZW50IH0gZnJvbSAnLi4vLi4vLi4vX21vZGVscy9jYXJkLWNvbnRlbnQtdjIubW9kZWwnOyBcbmltcG9ydCB7IElUb2RheUV2ZW50cyB9IGZyb20gJy4uLy4uLy4uL19tb2RlbHMvZXZlbnQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBBZGRDb21wZXRlbmN5UG9wdXBDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2ctY29tcG9uZW50cy9hZGQtY29tcGV0ZW5jeS1wb3B1cC9hZGQtY29tcGV0ZW5jeS1wb3B1cC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zbmFjay1iYXInO1xuaW1wb3J0IHsgU25hY2tiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kaWFsb2ctY29tcG9uZW50cy9zbmFja2Jhci9zbmFja2Jhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmFkZUFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL19hbmltYXRpb25zL2ZhZGUtYW5pbWF0aW9uJztcbmltcG9ydCB7IFNha3NoYW1BSSB9IGZyb20gJy4uLy4uLy4uL2NvbnN1bXB0aW9uLmNvbmZpZyc7XG5cbmludGVyZmFjZSBJU3RyaXBVbml0Q29udGVudERhdGEge1xuICBrZXk6IHN0cmluZztcbiAgY2FuSGlkZVN0cmlwOiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBzaG93U3RyaXA6IGJvb2xlYW47XG4gIGRpc2FibGVUcmFuc2xhdGU6IGJvb2xlYW47XG4gIHdpZGdldHM/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdO1xuICBzdHJpcFRpdGxlOiBzdHJpbmc7XG4gIHN0cmlwVGl0bGVMaW5rPzoge1xuICAgIGxpbms6IHtcbiAgICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgICB9LFxuICAgIGljb246IHN0cmluZyxcbiAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gIH07XG4gIHNsaWRlckNvbmZpZz86IHtcbiAgICBzaG93TmF2czogYm9vbGVhbixcbiAgICBzaG93RG90czogYm9vbGVhbixcbiAgICBtYXhXaWRnZXRzPzogbnVtYmVyXG4gICAgY2VyaWZpY2F0ZUNhcmRNYXJnaW4/OiBib29sZWFuXG4gIH07XG4gIHN0cmlwQ29uZmlnOiBhbnk7XG4gIHRhYnM/OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFRhYltdIHwgdW5kZWZpbmVkO1xuICBzdHJpcE5hbWU/OiBzdHJpbmc7XG4gIHN0cmlwTG9nbz86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0cmlwSW5mbz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcblxufVxuY29uc3QgU05BQ0tCQVJfRFVSQVRJT04gPSAzMDAwXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLXVpYy1jb250ZW50LXN0cmlwLXdpdGgtdGFicy1waWxscycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1waWxscy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLXBpbGxzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtmYWRlQW5pbWF0aW9uXVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic1BpbGxzQ29tcG9uZW50IGV4dGVuZHMgV2lkZ2V0QmFzZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzXG4gIE9uSW5pdCxcbiAgT25EZXN0cm95LFxuICBOc1dpZGdldFJlc29sdmVyLklXaWRnZXREYXRhPE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwTXVsdGlwbGU+IHtcbiAgQElucHV0KCkgd2lkZ2V0RGF0YSE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHZpZXdBbGxSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB0ZWxlbXRyeVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZDogYW55ID0gJydcbiAgQElucHV0KCkgZW1pdFZpZXdBbGw6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBjaGFubm5lbE5hbWU6IGFueSA9ICcnXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgbWF4V2lkZ2V0c1Nha3NoYW1BSSA9IDEwMDtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcbiAgYWN0aXZlVGFiSW5kZXg6IG51bWJlciA9IDBcbiAgYWN0aXZlUGlsbEluZGV4OiBudW1iZXIgPSAwXG4gIHJlY29tbWVuZGF0aW9uUG9wdXAgPSBmYWxzZVxuICBzYWtzaGFtRmVlZGJhY2tQb3B1cCA9IGZhbHNlXG4gIHNha3NoYW1BZGRDb21wZXRlbmN5ID0gZmFsc2VcbiAgc2Frc2hhbUxvYWRlciA9IGZhbHNlXG4gIHJlY29tbWVuZGVkQ291cnNlc0lkOiBzdHJpbmdcbiAgcmVsZXZlbnROb3RSZWxldmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHRlbGVtZW50cnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiB8IG51bGwgPSBudWxsO1xuICBmZWVkYmFja0NvdXJzZUlkID0gJydcbiAgY3VycmVudFN0cmlwRzogYW55O1xuICB0YWJFdmVudEc6IGFueTtcbiAgZmlyc3RUaW1lTG9hZGVkID0gZmFsc2VcbiAgbG9jYWxSZWNvbW1lbmRlZDogYW55O1xuICBzYWtzaGFtQUlFbnVtID0gU2Frc2hhbUFJXG4gIGNvbnN0cnVjdG9yKFxuICAgIC8vIHByaXZhdGUgY29udGVudFN0cmlwU3ZjOiBDb250ZW50U3RyaXBOZXdNdWx0aXBsZVNlcnZpY2UsXG4gICAgQEluamVjdCgnZW52aXJvbm1lbnQnKSBlbnZpcm9ubWVudDogYW55LFxuICAgIHByaXZhdGUgY29udGVudFN2YzogV2lkZ2V0Q29udGVudExpYlNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsb2dnZXJTdmM6IExvZ2dlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFN2YzogRXZlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29uZmlnU3ZjOiBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHV0aWxpdHlTdmM6IFV0aWxpdHlTZXJ2aWNlLFxuICAgIC8vIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcbiAgICAvLyBwcml2YXRlIHNlYXJjaFNlcnZTdmM6IFNlYXJjaFNlcnZTZXJ2aWNlLFxuICAgIHB1YmxpYyByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIHVzZXJTdmM6IFdpZGdldFVzZXJTZXJ2aWNlTGliLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbGFuZ3RyYW5zbGF0aW9uczogTXVsdGlsaW5ndWFsVHJhbnNsYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIGVucm9sbFN2YzogV2lkZ2V0RW5yb2xsU2VydmljZSxcbiAgICBwcml2YXRlIG1hdERpYWxvZzogTWF0RGlhbG9nLFxuICAgIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJyk7XG4gICAgICBsZXQgbGFuZyA9IEpTT04uc3RyaW5naWZ5KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSk7XG4gICAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9cXFwiL2csICcnKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMubG9jYWxSZWNvbW1lbmRlZCA9IHRoaXMuY29udGVudFN2Yy5nZXRSZWNvbW1lbmRlZElkcyh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQpXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuICAgIHRoaXMuc3Vic2NyaWJlVG9UZWxlbWVudHJ5KClcbiAgfVxuXG4gIHN1YnNjcmliZVRvVGVsZW1lbnRyeSgpIHtcblxuICAgIGlmICghdGhpcy50ZWxlbWVudHJ5U3Vic2NyaXB0aW9uICYmICF0aGlzLmNvbnRlbnRTdmMuaXNUZWxlbWVudHJ5U3Vic2NyaWJlZCkge1xuICAgICAgdGhpcy50ZWxlbWVudHJ5U3Vic2NyaXB0aW9uID0gdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICAgIGlmICghZGF0YSkgcmV0dXJuXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5zZXRUZWxlbWVudHJ5U3Vic2NyaXB0aW9uKHRydWUpXG4gICAgICAgIGlmICh0aGlzLndpZGdldERhdGEgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXSAmJlxuICAgICAgICAgICgodGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ID09PSAnY2JwUGxhbicpXG4gICAgICAgICAgICB8fCB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgPT09ICdmb3JZb3UnXG4gICAgICAgICAgICB8fCB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgPT09ICdjb250aW51ZUxlYXJuaW5nJylcbiAgICAgICAgICAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdLmtleSA9PT0gZGF0YS50eXBlT2ZUZWxlbWV0cnkpIHtcbiAgICAgICAgICBjb25zdCB0YWIgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdLnRhYnNbdGhpcy5hY3RpdmVUYWJJbmRleF1cbiAgICAgICAgICAvLyBjb25zdCBwaWxsID0gdGFiLnBpbGxzRGF0YVt0aGlzLmFjdGl2ZVBpbGxJbmRleF1cbiAgICAgICAgICBjb25zdCBwaWxsID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8udGFic1t0aGlzLmFjdGl2ZVRhYkluZGV4XT8ucGlsbHNEYXRhLmZpbmQoKHBpbGw6IGFueSkgPT4gcGlsbD8uc2VsZWN0ZWQpO1xuICAgICAgICAgIGlmICh0YWIgJiYgcGlsbCkge1xuICAgICAgICAgICAgZGF0YS5zZWxlY3RlZFRhYiA9IHRoaXMucGFyYW1ldHJpemVkVGV4dCh0YWIubGFiZWwpXG4gICAgICAgICAgICBkYXRhLnNlbGVjdGVkUGlsbCA9IHBpbGwubGFiZWwuc3BsaXQoXCIgXCIpLmpvaW4oXCJcIikudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwcyAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdICYmXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ICE9PSAnY2JwUGxhbicgJiZcbiAgICAgICAgICB0aGlzLndpZGdldERhdGEuc3RyaXBzWzBdPy5rZXkgIT09ICdmb3JZb3UnICYmXG4gICAgICAgICAgdGhpcy53aWRnZXREYXRhLnN0cmlwc1swXT8ua2V5ICE9PSAnY29udGludWVMZWFybmluZydcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBwYXJhbWV0cml6ZWRUZXh0KHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0ci50b0xvY2FsZUxvd2VyQ2FzZSgpLnJlcGxhY2UoXCIgXCIsIFwiLVwiKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZWxldmVudE5vdFJlbGV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbGV2ZW50Tm90UmVsZXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnRlbGVtZW50cnlTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMudGVsZW1lbnRyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpXG4gICAgICB0aGlzLmNvbnRlbnRTdmMuc2V0VGVsZW1lbnRyeVN1YnNjcmlwdGlvbihmYWxzZSlcbiAgICB9XG4gIH1cblxuICBzaG93QWNjb3JkaW9uKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5tb2RlID09PSAnYWNjb3JkaW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0FjY29yZGlvbkRhdGE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2V0SGlkZGVuRm9yU3RyaXAoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBjc3RyaXBfJHtrZXl9YCwgJzEnKTtcbiAgfVxuICBwcml2YXRlIGdldElmU3RyaXBIaWRkZW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYGNzdHJpcF8ke2tleX1gKTtcbiAgICByZXR1cm4gQm9vbGVhbihzdG9yYWdlSXRlbSAhPT0gJzEnKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgdHJ1ZSwgbnVsbCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIFN1YnNjcmlwdGlvbiBmb3IgY2hhbmdlc1xuICAgIGNvbnN0IGtleUFuZEV2ZW50OiB7IGtleTogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IGZyb206IHN0cmluZyB9W10gPSB0aGlzLndpZGdldERhdGEuc3RyaXBzXG4gICAgICAubWFwKHN0cmlwID0+ICh7XG4gICAgICAgIGtleTogc3RyaXAua2V5LFxuICAgICAgICB0eXBlOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5ldmVudFR5cGUpIHx8ICcnLFxuICAgICAgICBmcm9tOiAoc3RyaXAucmVmcmVzaEV2ZW50ICYmIHN0cmlwLnJlZnJlc2hFdmVudC5mcm9tLnRvU3RyaW5nKCkpIHx8ICcnLFxuICAgICAgfSkpXG4gICAgICAuZmlsdGVyKCh7IGtleSwgdHlwZSwgZnJvbSB9KSA9PiBrZXkgJiYgdHlwZSAmJiBmcm9tKTtcbiAgICBjb25zdCBldmVudFR5cGVTZXQgPSBuZXcgU2V0KGtleUFuZEV2ZW50Lm1hcChlID0+IGUudHlwZSkpO1xuICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmV2ZW50U3ZjLmV2ZW50cyRcbiAgICAgIC5waXBlKGZpbHRlcihldmVudCA9PiBldmVudFR5cGVTZXQuaGFzKGV2ZW50LmV2ZW50VHlwZSkpKVxuICAgICAgLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgIGtleUFuZEV2ZW50XG4gICAgICAgICAgLmZpbHRlcihlID0+IGUudHlwZSA9PT0gZXZlbnQuZXZlbnRUeXBlICYmIGUuZnJvbSA9PT0gZXZlbnQuZnJvbSlcbiAgICAgICAgICAubWFwKGUgPT4gZS5rZXkpXG4gICAgICAgICAgLmZvckVhY2goayA9PiB0aGlzLmZldGNoU3RyaXBGcm9tS2V5KGssIGZhbHNlKSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21LZXkoa2V5OiBzdHJpbmcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBjb25zdCBzdHJpcERhdGEgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQoc3RyaXAgPT4gc3RyaXAua2V5ID09PSBrZXkpO1xuICAgIGlmIChzdHJpcERhdGEpIHtcbiAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcERhdGEsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgfVxuICB9XG5cbiAgaXNTdHJpcFNob3dpbmcoZGF0YTogYW55KSB7XG4gICAgbGV0IGNvdW50ID0gMDtcblxuICAgIGlmIChkYXRhICYmIGRhdGEua2V5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcEtleSAmJiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkgJiZcbiAgICAgIGRhdGEuc3RyaXBUaXRsZSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBOYW1lICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhLndpZGdldHMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGtleSAmJiBrZXkud2lkZ2V0RGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBQcmltYXJ5Q2F0ZWdvcnkpIHtcbiAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhLmtleScsIGRhdGEsIGRhdGEua2V5LCBkYXRhLndpZGdldHMpO1xuICAgIHJldHVybiBkYXRhLnNob3dTdHJpcDtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0ZGF0YShkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoZGF0YS5zdHJpcEluZm8pIHtcbiAgICAgIHJldHVybiBkYXRhLnN0cmlwSW5mby53aWRnZXQ7XG4gICAgfVxuICAgIHJldHVybiB7fTtcblxuICB9XG4gIGNoZWNrQ29uZGl0aW9uKFxuICAgIHdEYXRhOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLFxuICAgIGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YVxuICApIHtcbiAgICBpZiAoXG4gICAgICB3RGF0YS5zdHJpcHMgJiYgd0RhdGEuc3RyaXBzWzBdICYmXG4gICAgICB3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcgJiZcbiAgICAgIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbFxuICAgICkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIGlmIChkYXRhLmtleSAmJiBkYXRhLmtleSA9PT0gXCJjYnBQbGFuXCIpIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkUGlsbCA9IGRhdGEudGFic1t0aGlzLmFjdGl2ZVRhYkluZGV4XT8ucGlsbHNEYXRhLmZpbmQoXG4gICAgICAgIChwaWxsOiBhbnkpID0+IHBpbGwuc2VsZWN0ZWRcbiAgICAgICk7XG4gICAgICBpZiAoc2VsZWN0ZWRQaWxsKSB7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZFBpbGwud2lkZ2V0cyAmJiBzZWxlY3RlZFBpbGw/LndpZGdldHMubGVuZ3RoID4gNDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEua2V5ICYmIGRhdGEua2V5ID09PSBcImNvbnRpbnVlTGVhcm5pbmdcIikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgd0RhdGEuc3RyaXBzWzBdLnZpZXdNb3JlVXJsICYmIGRhdGEud2lkZ2V0cyAmJiBkYXRhLndpZGdldHMubGVuZ3RoID49IDFcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHdEYXRhLnN0cmlwc1swXS52aWV3TW9yZVVybCAmJiBkYXRhLndpZGdldHMgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+PSA0XG4gICAgICApO1xuICAgIH1cbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIC8vIGxldCB0YWJXaXRoTWF4V2lkZ2V0czogYW55ID0ge31cbiAgICAgIC8vIGRhdGEudGFicy5mb3JFYWNoKCh0YWI6IGFueSk9PntcbiAgICAgIC8vICAgaWYodGFiLnBpbGxzRGF0YSAmJiB0YWIucGlsbHNEYXRhLmxlbmd0aCl7XG4gICAgICAvLyAgICAgdGFiV2l0aE1heFdpZGdldHMgPSB0YWIucGlsbHNEYXRhLnJlZHVjZShcbiAgICAgIC8vICAgICAgIChwcmV2OiBhbnksIGN1cnJlbnQ6IGFueSkgPT4ge1xuICAgICAgLy8gICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAvLyAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAvLyAgICAgICAgIH1cbiAgICAgIC8vICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgIC8vICAgICAgICAgICByZXR1cm4gKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSA/IHByZXYgOiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgLy8gICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgLy8gICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgLy8gICAgICAgICB9XG4gICAgICAvLyAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgLy8gICAgICAgICAvLyByZXR1cm4gKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMgJiYgKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSApID8gcHJldiA6IGN1cnJlbnRcbiAgICAgIC8vICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBhbGlnblxuICAgICAgLy8gICAgICAgfSwgZGF0YS50YWJzWzBdKTtcblxuICAgICAgLy8gICB9XG4gICAgICAvLyB9KVxuICAgICAgLy8gaWYgdGFicyBoYXMgYXRsZWFzdCAxIHdpZGdldHMgdGhlbiBzdHJpcCB3aWxsIHNob3cgb3IgZWxzZSBub3RcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0RmlsdGVyc0Zyb21BcnJheSh2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMih2NmZpbHRlcnM6IGFueSkge1xuICAgIGNvbnN0IGZpbHRlcnM6IGFueSA9IHt9O1xuICAgIGlmICh2NmZpbHRlcnMuY29uc3RydWN0b3IgPT09IEFycmF5KSB7XG4gICAgICB2NmZpbHRlcnMuZm9yRWFjaCgoKGY6IGFueSkgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhmKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgZmlsdGVyc1trZXldID0gZltrZXldO1xuICAgICAgICB9KTtcbiAgICAgIH0pKTtcbiAgICAgIHJldHVybiBmaWx0ZXJzO1xuICAgIH1cbiAgICByZXR1cm4gdjZmaWx0ZXJzO1xuICB9XG5cbiAgY2hlY2tGb3JEYXRlRmlsdGVycyhmaWx0ZXJzOiBhbnkpIHtcbiAgICBsZXQgdXNlckRhdGE6IGFueTtcbiAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgIHVzZXJEYXRhID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGU7XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbmREYXRlJ11bJz49J10gPSBldmFsKGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJykpIHtcbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJ11bJz49J10pXG4gICAgfSBlbHNlIGlmIChmaWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICApIHtcbiAgICAgIGlmICh0aGlzLnByb3ZpZGVySWQpIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgZmlsdGVycy5kZXNpZ25hdGlvbiA9IHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUsXG4gICkge1xuICAgIC8vIHNldHRpbmcgaW5pdGlhbCB2YWx1ZXNcbiAgICBzdHJpcC5sb2FkZXJXaWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhzdHJpcCk7XG4gICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCBmYWxzZSwgbnVsbCk7XG4gICAgdGhpcy5mZXRjaEZyb21TZWFyY2hWNihzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRm9yWW91RGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIGF3YWl0IHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoVXNlckVucm9sbGVkRGF0YShzdHJpcCwgMCwgMCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIGF3YWl0IHRoaXMuZmV0Y2hEZXNpZ25hdGlvbkJhc2VkQ291cnNlcyhzdHJpcCwgMiwgdHJ1ZSlcblxuICAgIGlmIChzdHJpcC50YWJzWzBdPy52YWx1ZSA9PT0gU2Frc2hhbUFJLlNha3NoYW1BSSkge1xuICAgICAgdGhpcy5nZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKHN0cmlwLCAwLCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgfVxuICAgIHRoaXMuY2FuU2hvd1Nha3NoYW1BaVRhYihzdHJpcClcbiAgICAvLyB0aGlzLmZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuXG4gICAgLy8gdGhpcy5lbnJvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKVxuICB9XG5cbiAgdG9nZ2xlSW5mbyhkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBjb25zdCBzdHJpcEluZm8gPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbztcbiAgICBpZiAoc3RyaXBJbmZvKSB7XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgIT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2Fybihgc3RyaXAgaW5mbyBtb2RlOiAke3N0cmlwSW5mby5tb2RlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7XG4gICAgICAgIHN0cmlwSW5mby5tb2RlID0gJ2JlbG93JztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSA9PT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbyA9IHtcbiAgICAgICAgICAuLi5zdHJpcEluZm8sXG4gICAgICAgICAgdmlzaWJpbGl0eU1vZGU6IHN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ2hpZGRlbicgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICByZXR1cm4gKGNvbnRlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQsIGlkeCkgPT4gKFxuICAgICAgY29udGVudCA/IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgLi4uKGNvbnRlbnQuYmF0Y2ggJiYgeyBiYXRjaDogY29udGVudC5iYXRjaCB9KSxcbiAgICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG5cbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICAgIHNha3NoYW1BSUdlbmVyYXRlZDogdGhpcy5nZXRSZWNvbW1lbmRlZElkKHN0cmlwKVxuXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBJVG9kYXlFdmVudHNbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICApIHtcbiAgICB0aGlzLmV2ZW50U3ZjLnNldEV2ZW50TGlzdERhdGEoY29udGVudHMpO1xuICAgIHJldHVybiAodGhpcy5ldmVudFN2Yy50b2RheXNFdmVudHMgfHwgW10pLm1hcCgoY29udGVudDogYW55LCBpZHg6IGFueSkgPT4gKGNvbnRlbnQgPyB7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnZXZlbnRIdWJDYXJkJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY2FyZFN1YlR5cGUsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgaW50cmFuZXRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5pbnRyYW5ldE1vZGUsXG4gICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgfSxcbiAgICB9IDoge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHt9LFxuICAgIH1cbiAgICApKTtcbiAgfVxuICBwcml2YXRlIHRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKFxuICAgIHN0cmlwOiBhbnlcbiAgKSB7XG4gICAgcmV0dXJuIFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA3LCA4LCA5LCAxMF0ubWFwKF9jb250ZW50ID0+ICh7XG4gICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnRMaWInLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5sb2FkZXJDb25maWcgJiYgc3RyaXAubG9hZGVyQ29uZmlnLmNhcmRTdWJUeXBlIHx8ICdjYXJkLXN0YW5kYXJkLXNrZWxldG9uJyxcbiAgICAgICAgY2FyZEN1c3RvbWVDbGFzczogc3RyaXAuY3VzdG9tZUNsYXNzID8gc3RyaXAuY3VzdG9tZUNsYXNzIDogJycsXG4gICAgICB9LFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcHJvY2Vzc1N0cmlwKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVzdWx0czogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXSA9IFtdLFxuICAgIGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgICBfdmlld01vcmVVcmw6IGFueSxcbiAgICB0YWJzUmVzdWx0cz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIHdpZGdldHM6XG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZSdcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLihzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAgICAgICAuLi4oc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgc2hvd09uTm9EYXRhOiBCb29sZWFuKFxuICAgICAgICBzdHJpcC5ub0RhdGFXaWRnZXQgJiZcbiAgICAgICAgISgoc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubGVuZ3RoICsgcmVzdWx0cy5sZW5ndGggKyAoc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLmxlbmd0aCkgJiZcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJyxcbiAgICAgICksXG4gICAgICBzaG93T25Mb2FkZXI6IEJvb2xlYW4oc3RyaXAubG9hZGVyICYmIGZldGNoU3RhdHVzID09PSAnZmV0Y2hpbmcnKSxcbiAgICAgIHNob3dPbkVycm9yOiBCb29sZWFuKHN0cmlwLmVycm9yV2lkZ2V0ICYmIGZldGNoU3RhdHVzID09PSAnZXJyb3InKSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldXG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwID0ge1xuICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwLFxuICAgICAgW3N0cmlwLmtleV06IHN0cmlwRGF0YSxcbiAgICB9O1xuICAgIGlmICghdGFic1Jlc3VsdHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmXG4gICAgICAgIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZldGNoU3RhdHVzID09PSAnZXJyb3InKSAmJlxuICAgICAgICBzdHJpcERhdGEud2lkZ2V0c1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXMsIHN0cmlwRGF0YS53aWRnZXRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmICEocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0KTogYm9vbGVhbiB7XG4gICAgaWYgKFxuICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgKChzdHJpcC5yZXF1ZXN0LmFwaSAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmFwaSkubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2gpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoUmVnaW9uUmVjb21tZW5kYXRpb24gJiZcbiAgICAgICAgICBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmNicExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5jYnBMaXN0KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcCAmJiBzdHJpcC50YWJzLmxlbmd0aClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBnZXRSZWNvbW1lbmRlZElkKHN0cmlwOiBhbnkpOiBzdHJpbmcge1xuICAgIGlmICghc3RyaXA/LnRhYnMgfHwgIUFycmF5LmlzQXJyYXkoc3RyaXAudGFicykpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoc3RyaXAudGFic1swXT8uaGlkZVRhYiA9PT0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQ7XG4gICAgfVxuXG4gICAgZWxzZSBpZiAoXG4gICAgICAoc3RyaXAudGFic1swXT8udmFsdWUgPT09IFNha3NoYW1BSS5TYWtzaGFtQUkgJiYgdGhpcy5hY3RpdmVUYWJJbmRleCA9PT0gMCkgfHxcbiAgICAgIChzdHJpcC50YWJzWzFdPy52YWx1ZSA9PT0gU2Frc2hhbUFJLlNha3NoYW1BSSAmJiB0aGlzLmFjdGl2ZVRhYkluZGV4ID09PSAxKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRoaXMucmVjb21tZW5kZWRDb3Vyc2VzSWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgZ2V0VGFiRGF0YUJ5ZmlsdGVyKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnc3RyaXAgLS0gJywgc3RyaXApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLSAnLCBjdXJyZW50VGFiKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2NhbGN1bGF0ZVBhcmVudFN0YXR1cy0tICcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgLy8gVE9ETzogV3JpdGUgbG9naWMgZm9yIGluZGl2aWR1YWwgZmlsdGVyIGlmIHBhc3NlZCBpbiBjb25maWdcbiAgICAvLyBhZGQgc3dpdGNoIGNhc2UgYmFzZWQgb24gY29uZmlnIGtleSBwYXNzZWRcbiAgfVxuXG4gIGdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcDogYW55LCBrZXk6IGFueSk6IG51bWJlciB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gMDtcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XG4gIH1cblxuICB0cmFuc2xhdGVMYWJlbHMobGFiZWw6IHN0cmluZywgdHlwZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMubGFuZ3RyYW5zbGF0aW9ucy50cmFuc2xhdGVMYWJlbChsYWJlbCwgdHlwZSwgJycpO1xuICB9XG5cbiAgaWRlbnRpZnkoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBpdGVtO1xuICB9XG4gIHRyYWNrZXIoaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgaWYgKGluZGV4ID49IDApIHsgfVxuICAgIHJldHVybiBfLmdldChpdGVtLCAnd2lkZ2V0RGF0YS5jb250ZW50LmlkZW50aWZpZXInKVxuICB9XG5cbiAgcmFpc2VUZWxlbWV0cnkoc3RyaXBEYXRhOiBhbnkpIHtcbiAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gIH1cblxuICByZWRpcmVjdFZpZXdBbGwoc3RyaXBEYXRhOiBhbnksIHBhdGg6IHN0cmluZywgcXVlcnlQYXJhbXNEYXRhOiBhbnkpIHtcbiAgICBpZiAodGhpcy5lbWl0Vmlld0FsbCkge1xuICAgICAgdGhpcy52aWV3QWxsUmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChxdWVyeVBhcmFtc0RhdGEgJiYgcXVlcnlQYXJhbXNEYXRhLnRhYlNlbGVjdGVkICYmIHF1ZXJ5UGFyYW1zRGF0YS50YWJTZWxlY3RlZCA9PT0gJ2Rlc2lnbmF0aW9uJykge1xuICAgICAgICBkZWxldGUgcXVlcnlQYXJhbXNEYXRhLmtleVxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9wYWdlL3JlY29tbWVuZGVkLWxlYXJuaW5ncyddLCB7IHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtwYXRoXSwgeyBxdWVyeVBhcmFtczogcXVlcnlQYXJhbXNEYXRhIH0pXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICAvLyBuZXcgY29kZSB3cml0dGluZyBmcm9tIGhlcmU9PT09bmV3PT09PVxuXG4gIGZldGNoRm9yWW91RGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwICYmIHN0cmlwLnR5cGUgPT09ICdmb3JZb3UnKSB7XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGNvbnN0IHBpbGxEYXRhID0gZmlyc3RUYWIucGlsbHNEYXRhWzBdXG4gICAgICAgIGlmIChwaWxsRGF0YS5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsUGlsbHMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzWzBdLnBpbGxzRGF0YTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlblBpbGxzRnJvbU1hcCA9IChhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiO1xuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhzdHJpcCwgMCwgMCwgY3VycmVuUGlsbHNGcm9tTWFwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIGN1cnJlblBpbGxzRnJvbU1hcCkge1xuICAgICAgICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgICAgICAgICB0YWJTZWxlY3RlZDogZmlyc3RUYWIudmFsdWUsXG4gICAgICAgICAgICAgICAgcGlsbFNlbGVjdGVkOiBwaWxsRGF0YS52YWx1ZSxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVNlYXJjaFY2KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmNoZWNrRm9yRGF0ZUZpbHRlcnMoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuZ2V0RmlsdGVyc0Zyb21BcnJheShcbiAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIFRPRE86IEhhdmUgdG8gZXh0cmFjdCByZXF1ZXN0UmVxdWlyZWQgdG8gb3V0ZXIgbGV2ZWwgb2YgdGFicyBjb25maWdcbiAgICAgICAgY29uc3QgZmlyc3RUYWIgPSBzdHJpcC50YWJzWzBdO1xuICAgICAgICBpZiAoZmlyc3RUYWIucmVxdWVzdFJlcXVpcmVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFRhYkZyb21NYXAgPSAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzWzBdKSBhcyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihzdHJpcCwgMCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFY2UmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG5cblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUV2ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIHBpbGxJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVGFiLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgY3VycmVudFRhYi5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW2N1cnJlbnRUYWIudmFsdWVdIHx8IFtdO1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBjb25zdCBhbGxQaWxscyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnNbdGFiSW5kZXhdPy5waWxsc0RhdGE7XG4gICAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChhbGxQaWxscylcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgaWYgKGFsbFBpbGxzICYmIGFsbFBpbGxzLmxlbmd0aCAmJiBhbGxQaWxsc1twaWxsSW5kZXhdKSB7XG4gICAgICAgICAgICAgIGFsbFBpbGxzW3BpbGxJbmRleF0gPSB7XG4gICAgICAgICAgICAgICAgLi4uYWxsUGlsbHNbcGlsbEluZGV4XSxcbiAgICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICAgIC8vIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgLy8gc2VsZWN0ZWQ6IHRydWVcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgY29uc3QgYWxsUGlsbHMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzW3RhYkluZGV4XT8ucGlsbHNEYXRhO1xuICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoYWxsUGlsbHMpXG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGlmIChhbGxQaWxscyAmJiBhbGxQaWxscy5sZW5ndGggJiYgYWxsUGlsbHNbcGlsbEluZGV4XSkge1xuICAgICAgICAgICAgICBhbGxQaWxsc1twaWxsSW5kZXhdID0ge1xuICAgICAgICAgICAgICAgIC4uLmFsbFBpbGxzW3BpbGxJbmRleF0sXG4gICAgICAgICAgICAgICAgd2lkZ2V0czogW10sXG4gICAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgICBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzOiBbXSxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHRhYkluZGV4OiBudW1iZXIsXG4gICAgcGlsbEluZGV4OiBudW1iZXIsXG4gICAgY3VycmVudFRhYjogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBjdXJyZW50VGFiLnJlcXVlc3QsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICBjb25zdCB3aWRnZXRzID0gdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCk7XG4gICAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgIGNvbnN0IGFsbFRhYnMgPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzO1xuICAgICAgICAgIGNvbnN0IGFsbFBpbGxzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFic1t0YWJJbmRleF0/LnBpbGxzRGF0YTtcbiAgICAgICAgICB0aGlzLnJlc2V0U2VsZWN0ZWRQaWxsKGFsbFBpbGxzKVxuICAgICAgICAgIGlmIChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbdGFiSW5kZXhdKSB7XG4gICAgICAgICAgICBpZiAoYWxsUGlsbHMgJiYgYWxsUGlsbHMubGVuZ3RoICYmIGFsbFBpbGxzW3BpbGxJbmRleF0pIHtcbiAgICAgICAgICAgICAgYWxsUGlsbHNbcGlsbEluZGV4XSA9IHtcbiAgICAgICAgICAgICAgICAuLi5hbGxQaWxsc1twaWxsSW5kZXhdLFxuICAgICAgICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgICAgICAgLy8gZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgICAvLyBzZWxlY3RlZDogdHJ1ZVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgdGFiUmVzdWx0cyAvLyB0YWJSZXN1bHRzIGFzIHdpZGdldHNcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zdGF0dXNDaGFuZ2V0b0RvbmUoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgdHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgIC8vIGNoZWNrIGZvciB0aGUgcmVxdWVzdCBpZiBpdCBoYXMgZHluYW1pYyB2YWx1ZXNdXG4gICAgICAgIGlmIChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24uaW5kZXhPZignPG9yZ0lEPicpID49IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgbGV0IHVzZXJSb290T3JnSWQ7XG4gICAgICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgICAgICB1c2VyUm9vdE9yZ0lkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucm9vdE9yZ0lkO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycy5vcmdhbmlzYXRpb24gPSB1c2VyUm9vdE9yZ0lkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy50cmVuZGluZ0NvbnRlbnRTZWFyY2gocmVxdWVzdC50cmVuZGluZ1NlYXJjaCkuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdCAmJlxuICAgICAgICAgICAgc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0gJiZcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0W3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldLmxlbmd0aCA+IDUgJiZcbiAgICAgICAgICAgIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcblxuICAgICAgICAgIGxldCBwcm9jY2VzZWRSZXN1bHQ6IGFueSA9IFtdXG4gICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5yZXNwb25zZSAmJiByZXN1bHRzLnJlc3BvbnNlLmNlcnRpZmljYXRpb25zKSB7XG4gICAgICAgICAgICByZXN1bHRzLnJlc3BvbnNlLmNlcnRpZmljYXRpb25zLm1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zb3VyY2UgPT09IHRoaXMuY2hhbm5uZWxOYW1lKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Nlc2VkUmVzdWx0LnB1c2gocmVzdWx0KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgcmVzdWx0cyA9IHsgcmVzcG9uc2U6IHsgY2VydGlmaWNhdGlvbnM6IHByb2NjZXNlZFJlc3VsdCB9IH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChlcnJvci5lcnJvciAmJiBlcnJvci5lcnJvci5zdGF0dXMgPT09IDQwMCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpXG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSwpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IGFueSwgcGlsbEluZGV4OiBhbnksIHN0cmlwTWFwOiBJU3RyaXBVbml0Q29udGVudERhdGEsIHN0cmlwS2V5OiBzdHJpbmcpIHtcbiAgICBsZXQgdGFiRXZlbnRJbmRleDtcbiAgICBpZiAodGFiRXZlbnQgPT09IDEgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudF0uaGlkZVRhYikge1xuICAgICAgdGhpcy5hY3RpdmVUYWJJbmRleCA9IDJcbiAgICAgIHRhYkV2ZW50SW5kZXggPSAyXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWN0aXZlVGFiSW5kZXggPSB0YWJFdmVudFxuICAgICAgdGFiRXZlbnRJbmRleCA9IHRhYkV2ZW50XG4gICAgfVxuICAgIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnaW5wcm9ncmVzcyc7XG4gICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50SW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnRhYkxvYWRpbmcgPSB0cnVlO1xuICAgICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGEpXG4gICAgfVxuICAgIC8vIGNvbnN0IGRhdGE6IFdzRXZlbnRzLklUZWxlbWV0cnlUYWJEYXRhID0ge1xuICAgIC8vICAgbGFiZWw6IGAke3N0cmlwTWFwLnRhYnNbdGFiRXZlbnRdLmxhYmVsfWAsXG4gICAgLy8gICBpbmRleDogdGFiRXZlbnQsXG4gICAgLy8gfTtcbiAgICAvLyB0aGlzLmV2ZW50U3ZjLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgLy8gICB7XG4gICAgLy8gICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxuICAgIC8vICAgICBzdWJUeXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RTdWJUeXBlcy5IT01FX1BBR0VfU1RSSVBfVEFCUyxcbiAgICAvLyAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxuICAgIC8vICAgfSxcbiAgICAvLyAgIHt9LFxuICAgIC8vICAge1xuICAgIC8vICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkhPTUUsXG4gICAgLy8gICB9XG5cbiAgICAvLyApO1xuICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF07XG4gICAgY29uc3QgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnRJbmRleF0/LnBpbGxzRGF0YVtwaWxsSW5kZXhdO1xuICAgIGNvbnN0IGN1cnJlbnRTdHJpcCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzID0+IHMua2V5ID09PSBzdHJpcEtleSk7XG4gICAgdGhpcy5jdXJyZW50U3RyaXBHID0gY3VycmVudFN0cmlwO1xuICAgIHRoaXMudGFiRXZlbnRHID0gdGFiRXZlbnRcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljayAmJiBjdXJyZW50UGlsbEZyb21NYXApIHtcbiAgICAgIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgMCwgY3VycmVudFBpbGxGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCAwLCBjdXJyZW50UGlsbEZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnR5cGUgPT09ICdldmVudEVucm9sbG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEV2ZW50RW5yb2xsbWVudExpc3QoY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QudHlwZSA9PT0gJ2Vucm9sbG1lbnQnKSB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZyb21JbnRlcm5hbEVucm9sbG1lbnRMaXN0KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgcGlsbEluZGV4LCB0cnVlKVxuICAgICAgICB9XG4gICAgICAgIC8vIGlmIChzdHJpcE1hcCAmJiBzdHJpcE1hcC50YWJzICYmIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdKSB7XG4gICAgICAgIC8vICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudFRhYkZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3QpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRTdHJpcC50YWJzW3RhYkV2ZW50SW5kZXhdLnJlcXVlc3QgJiYgY3VycmVudFN0cmlwLnRhYnNbdGFiRXZlbnRJbmRleF0ucmVxdWVzdC5kZXNpZ25hdGlvbnNMaXN0KSB7XG4gICAgICAgICAgdGhpcy5mZXRjaERlc2lnbmF0aW9uQmFzZWRDb3Vyc2VzKGN1cnJlbnRTdHJpcCwgdGFiRXZlbnRJbmRleCwgdHJ1ZSlcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50U3RyaXAudGFic1t0YWJFdmVudEluZGV4XS5yZXF1ZXN0ICYmIGN1cnJlbnRTdHJpcC50YWJzW3RhYkV2ZW50SW5kZXhdLnJlcXVlc3QuY2JwTGlzdCkge1xuICAgICAgICAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhjdXJyZW50U3RyaXAsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFN0cmlwLnRhYnNbdGFiRXZlbnRJbmRleF0ucmVxdWVzdCAmJiBjdXJyZW50U3RyaXAudGFic1t0YWJFdmVudEluZGV4XS5yZXF1ZXN0LmNvdXJzZVJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgdGhpcy5sb2NhbFJlY29tbWVuZGVkID0gdGhpcy5jb250ZW50U3ZjLmdldFJlY29tbWVuZGVkSWRzKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZClcbiAgICAgICAgICB0aGlzLmdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb24oY3VycmVudFN0cmlwLCB0YWJFdmVudEluZGV4LCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgICAgIH1cbiAgICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudEluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaERlc2lnbmF0aW9uQmFzZWRDb3Vyc2VzKFxuICAgIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgdGFiSW5kZXg6IG51bWJlcixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgaWYgKHN0cmlwLnRhYnNbdGFiSW5kZXhdPy5yZXF1ZXN0ICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3QuZGVzaWduYXRpb25zTGlzdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoRGVzaWduYXRpb25zRGF0YSgpLnRvUHJvbWlzZSgpXG4gICAgICAgIGlmIChyZXNwb25zZSkge1xuICAgICAgICAgIGxldCByZXF1ZXN0ID0ge1xuICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgICAgXCJjb3Vyc2VJZFwiOiByZXNwb25zZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZW5vbGxEYXRhID0gYXdhaXQgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFbnJvbGxDb250ZW50RGF0YShyZXF1ZXN0KS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291cnNlcyAmJiByZXMucmVzdWx0LmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMucmVzdWx0LmNvdXJzZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0pXG4gICAgICAgICAgY29uc3Qgc1JlcXVlc3Q6IGFueSA9IHtcbiAgICAgICAgICAgIFwic2VhcmNoVjZcIjoge1xuICAgICAgICAgICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICAgICAgICAgIFwiZmlsdGVyc1wiOiB7XG4gICAgICAgICAgICAgICAgICBcImlkZW50aWZpZXJcIjogcmVzcG9uc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwib2Zmc2V0XCI6IDAsXG4gICAgICAgICAgICAgICAgXCJxdWVyeVwiOiBcIlwiLFxuICAgICAgICAgICAgICAgIFwic29ydF9ieVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImxhc3RVcGRhdGVkT25cIjogXCJkZXNjXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY29udGVudFN2Yy5zZWFyY2hWNihzUmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdHMgJiYgcmVzdWx0cy5yZXN1bHQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgICAgICBsZXQgY291cnNlcyA9IHJlc3VsdHMucmVzdWx0LmNvbnRlbnRcbiAgICAgICAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVxuICAgICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0RGVzaWduYXRpb25zVGFiRGF0YShjb3Vyc2VzLCBzdHJpcCwgZW5vbGxEYXRhLCByZXNwb25zZSwgJ2Rlc2lnbmF0aW9uJylcbiAgICAgICAgICAgICAgICBsZXQgY291bnRPZldpZGdldCA9IHRydWVcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgc3RyaXA/LnRhYnMgJiYgc3RyaXA/LnRhYnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgc3RyaXAudGFicy5mb3JFYWNoKCh0YWI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFiLnZhbHVlID09PSAnZGVzaWduYXRpb24nICYmIHRhYi5waWxsc0RhdGEgJiYgdGFiLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0YWIucGlsbHNEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBpbGwgJiYgcGlsbC53aWRnZXRzICYmIHBpbGwud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50T2ZXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpbGwuZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50T2ZXaWRnZXQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGlsbC5zZWxlY3RlZCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgIC8vIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgICAgICAgICAgLy8gc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgICAgICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICAgJ3ZpZXdNb3JlVXJsJywgc3RyaXAudGFic1xuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnJlc2V0UGlsbHMoc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgc3RyaXAuc2hvd09uTG9hZGVyID0gZmFsc2VcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0uaGlkZVRhYiA9IHRydWVcbiAgICAgICAgICBsZXQgdGFicyA9IHN0cmlwLnRhYnNcbiAgICAgICAgICBpZiAoc3RyaXAudGFic1swXSAmJiBzdHJpcC50YWJzWzBdLmhpZGVUYWIpIHtcbiAgICAgICAgICAgIHRhYnMgPSBbXVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAvLyAgIHN0cmlwLFxuICAgICAgICAgIC8vICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhbXSwgc3RyaXApLFxuICAgICAgICAgIC8vICAgJ2RvbmUnLFxuICAgICAgICAgIC8vICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIC8vICAgJycsXG4gICAgICAgICAgLy8gICB0YWJzXG4gICAgICAgICAgLy8gKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5yZXNldFBpbGxzKHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YSlcbiAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICBzdHJpcC5zaG93T25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgIGxldCB0YWJzID0gc3RyaXAudGFic1xuICAgICAgICBpZiAoc3RyaXAudGFic1swXSAmJiBzdHJpcC50YWJzWzBdLmhpZGVUYWIpIHtcbiAgICAgICAgICB0YWJzID0gW11cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFtdLCBzdHJpcCksXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAnJyxcbiAgICAgICAgICB0YWJzXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuICByZXNldFBpbGxzKGRhdGE6IGFueSkge1xuICAgIGRhdGEuZm9yRWFjaCgocGlsbDogYW55KSA9PiB7XG4gICAgICBwaWxsLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICBkZWxldGUgcGlsbC50YWJMb2FkaW5nXG4gICAgICBwaWxsLndpZGdldHMgPSBbXVxuICAgIH0pXG4gIH1cblxuICBzcGxpdERlc2lnbmF0aW9uc1RhYkRhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgZW5vbGxEYXRhOiBhbnksIGNvdXJzZXNBcnJheTogYW55LCB0eXBlOiBzdHJpbmcpIHtcbiAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldFRhYnNEZXNpZ25hdGlvbnNMaXN0KFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIHN0cmlwLCBlbm9sbERhdGEsIGNvdXJzZXNBcnJheVxuICAgICk7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXS52YWx1ZSA9PT0gdHlwZSkge1xuICAgICAgICAgIGxldCBjaGVja1dpZGdldEFuZEFjdGl2ZVBpbGwgPSB0cnVlXG4gICAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YS5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0pIHtcbiAgICAgICAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLFxuICAgICAgICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgICB0YWJMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgLi4uKHNwbGl0RGF0YS5maW5kKGl0bUlubmVyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRtSW5uZXJcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YSA9IHRhYlJlc3VsdHNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cmlwLnRhYnNcbiAgfVxuXG4gIGdldFRhYnNEZXNpZ25hdGlvbnNMaXN0KGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCBlbm9sbERhdGE6IGFueSwgY291cnNlc0FycmF5OiBhbnkpIHtcbiAgICBsZXQgYXZhaWFsYWJsZTogYW55W10gPSBbXVxuICAgIGxldCBpbnByb2dyZXNzOiBhbnlbXSA9IFtdXG4gICAgbGV0IGFsbENvbXBsZXRlZDogYW55W10gPSBbXVxuICAgIGxldCBjYnBEYXRhOiBhbnlcbiAgICB0aGlzLnVzZXJTdmMuZ2V0Q0JQRGF0YSgnY2JwRGF0YScpLnN1YnNjcmliZSgocmVzdWx0ID0+IHtcbiAgICAgIGNicERhdGEgPSByZXN1bHRcbiAgICB9KSlcbiAgICBjb3Vyc2VzQXJyYXkuZm9yRWFjaCgoY291cnNlSWQ6IGFueSkgPT4ge1xuICAgICAgbGV0IGNvdXJzZSA9IGFycmF5LmZpbmQoKGl0ZW06IGFueSkgPT4gaXRlbS5pZGVudGlmaWVyID09PSBjb3Vyc2VJZClcbiAgICAgIGlmIChjb3Vyc2UpIHtcbiAgICAgICAgaWYgKGNicERhdGEgJiYgY2JwRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBjYnBlbGVtID0gY2JwRGF0YS5maW5kKChfY291cnNlOiBhbnkpID0+IF9jb3Vyc2UuaWRlbnRpZmllciA9PT0gY291cnNlLmlkZW50aWZpZXIpXG4gICAgICAgICAgaWYgKGNicGVsZW0pIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZW5vbGxEYXRhICYmIGVub2xsRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICBjb25zdCBlbGVtID0gZW5vbGxEYXRhLmZpbmQoKGVDb3Vyc2U6IGFueSkgPT4gZUNvdXJzZS5jb250ZW50SWQgPT09IGNvdXJzZS5pZGVudGlmaWVyKVxuICAgICAgICAgIGlmIChlbGVtKSB7XG4gICAgICAgICAgICBpZiAoZWxlbS5zdGF0dXMgPT09IDIpIHtcbiAgICAgICAgICAgICAgYWxsQ29tcGxldGVkLnB1c2goY291cnNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaW5wcm9ncmVzcy5wdXNoKGNvdXJzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXZhaWFsYWJsZS5wdXNoKGNvdXJzZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXZhaWFsYWJsZS5wdXNoKGNvdXJzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIFtcbiAgICAgIHsgdmFsdWU6ICdyYXZhaWxhYmxlJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhdmFpYWxhYmxlLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdyaW5wcm9ncmVzcycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoaW5wcm9ncmVzcywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAncmNvbXBsZXRlZCcsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoYWxsQ29tcGxldGVkLCBzdHJpcCkgfSxcbiAgICBdXG4gIH1cblxuICBwaWxsQ2xpY2tlZChldmVudDogYW55LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogYW55LCBwaWxsSW5kZXg6IGFueSwgdGFiSW5kZXg6IGFueSkge1xuICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgIHRoaXMuYWN0aXZlUGlsbEluZGV4ID0gcGlsbEluZGV4XG4gICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0udGFiTG9hZGluZyA9IHRydWU7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50UGlsbEZyb21NYXA6IGFueSA9IHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF07XG4gICAgY29uc3QgY3VycmVudFN0cmlwID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHMgPT4gcy5rZXkgPT09IHN0cmlwS2V5KTtcbiAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XSAmJiBjdXJyZW50VGFiRnJvbU1hcCkge1xuICAgICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHtcbiAgICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwS2V5XS52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgdGFiU2VsZWN0ZWQ6IGN1cnJlbnRUYWJGcm9tTWFwLnZhbHVlLFxuICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgIH07XG4gICAgfVxuICAgIGlmIChjdXJyZW50U3RyaXAgJiYgY3VycmVudFRhYkZyb21NYXAgJiYgIWN1cnJlbnRUYWJGcm9tTWFwLmNvbXB1dGVEYXRhT25DbGljayAmJiBjdXJyZW50UGlsbEZyb21NYXApIHtcbiAgICAgIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdFJlcXVpcmVkICYmIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0KSB7XG4gICAgICAgIC8vIGNhbGwgQVBJIHRvIGdldCB0YWIgZGF0YSBhbmQgcHJvY2Vzc1xuICAgICAgICAvLyB0aGlzLnByb2Nlc3NTdHJpcChjdXJyZW50U3RyaXAsIFtdLCAnZmV0Y2hpbmcnLCB0cnVlLCBudWxsKVxuICAgICAgICBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY3VycmVudFBpbGxGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50UGlsbEZyb21NYXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkge1xuICAgICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5TmV3UmVxVHJlbmRpbmcoY3VycmVudFN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4LCBjdXJyZW50UGlsbEZyb21NYXAsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnR5cGUgPT09ICdlbnJvbGxtZW50Jykge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGcm9tSW50ZXJuYWxFbnJvbGxtZW50TGlzdChjdXJyZW50U3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG4gICAgICAgIH0gZWxzZSBpZiAoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QudHlwZSA9PT0gJ2V2ZW50RW5yb2xsbWVudCcpIHtcbiAgICAgICAgICB0aGlzLmZldGNoRXZlbnRFbnJvbGxtZW50TGlzdChjdXJyZW50U3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIHRydWUpXG5cbiAgICAgICAgfVxuICAgICAgICAvLyBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAvLyAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLnRhYkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIC8vIH0sIDIwMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdldFRhYkRhdGFCeWZpbHRlcihjdXJyZW50U3RyaXAsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgLy8gaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS5mZXRjaFRhYlN0YXR1cyA9ICdpbnByb2dyZXNzJztcbiAgICAgICAgLy8gICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vICAgc3RyaXBNYXAuc2hvd09uTG9hZGVyID0gdHJ1ZTtcbiAgICAgICAgLy8gfVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSc7XG4gICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucmVzZXRTZWxlY3RlZFBpbGwoc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhKVxuICAgICAgICAgICAgc3RyaXBNYXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhW3BpbGxJbmRleF1bJ3NlbGVjdGVkJ10gPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9LCAyMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNlYXJjaFY2UmVxdWVzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LFxuICAgIHJlcXVlc3Q6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhblxuICApOiBQcm9taXNlPGFueT4ge1xuICAgIGNvbnN0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QgJiYgcmVxdWVzdC5zZWFyY2hWNikge1xuICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYocmVxdWVzdC5zZWFyY2hWNikuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdC5jb250ZW50ICYmIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICB0YWI6ICdMZWFybicsXG4gICAgICAgICAgICAgICAgcTogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICAgICAgZjpcbiAgICAgICAgICAgICAgICAgIHJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWx0ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIC8vIGlmICh2aWV3TW9yZVVybCAmJiB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcykge1xuICAgICAgICAgIC8vICAgdmlld01vcmVVcmwucXVlcnlQYXJhbXMgPSB2aWV3TW9yZVVybC5xdWVyeVBhcmFtc1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuXG4gIGdldFNlbGVjdGVkUGlsbEluZGV4KHRhYmRhdGE6IGFueSwgdGFiSW5kZXg6IGFueSkge1xuICAgIGlmICh0YWJkYXRhLnBpbGxzRGF0YSAmJiB0YWJkYXRhLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgIGxldCBpbmRleCA9IHRhYmRhdGEucGlsbHNEYXRhLmZpbmRJbmRleCgocGlsbDogYW55KSA9PiB7XG4gICAgICAgIHJldHVybiBwaWxsLnNlbGVjdGVkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleFxuICAgIH1cbiAgICByZXR1cm4gMFxuICB9XG5cbiAgY2FuU2hvd0hlYWRpbmcoc3RyaXA6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghc3RyaXA/LnRhYnMgfHwgIUFycmF5LmlzQXJyYXkoc3RyaXAudGFicykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0FsbEhpZGRlbiA9IHN0cmlwLnRhYnMuZXZlcnkodGFiID0+IHRhYi5oYXNPd25Qcm9wZXJ0eSgnaGlkZVRhYicpICYmIHRhYi5oaWRlVGFiID09PSB0cnVlKTtcbiAgICByZXR1cm4gIWlzQWxsSGlkZGVuO1xuICB9XG5cblxuICAvLyBjYnAgcGxhbnNcbiAgYXN5bmMgZmV0Y2hBbGxDYnBQbGFucyhzdHJpcDogYW55LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB7XG4gICAgICBsZXQgY291cnNlczogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGxldCB1c2VySWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWRcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy51c2VyU3ZjLmZldGNoQ2JwUGxhbkxpc3QodXNlcklkKS50b1Byb21pc2UoKTtcblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzcG9uc2UpICYmIHJlc3BvbnNlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY291cnNlcyA9IHJlc3BvbnNlO1xuXG4gICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRDYnBUYWJzRGF0YShjb3Vyc2VzLCBzdHJpcCk7XG4gICAgICAgICAgbGV0IGNvdW50T2ZXaWRnZXQgPSB0cnVlXG4gICAgICAgICAgaWYgKHN0cmlwICYmIHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0cmlwLnRhYnMuZm9yRWFjaCgodGFiOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRhYi5waWxsc0RhdGEgJiYgdGFiLnBpbGxzRGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB0YWIucGlsbHNEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgaWYgKHBpbGwgJiYgcGlsbC53aWRnZXRzICYmIHBpbGwud2lkZ2V0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50T2ZXaWRnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICBwaWxsLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50T2ZXaWRnZXQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgJ3ZpZXdNb3JlVXJsJyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpcC50YWJzWzBdLnBpbGxzRGF0YVswXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgc3RyaXAudGFic1swXS5waWxsc0RhdGFbMF0ud2lkZ2V0cyA9IFtdXG4gICAgICAgIHN0cmlwLnRhYnNbMF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgIHN0cmlwLnRhYnNbMF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICBzdHJpcC50YWJzWzBdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgIC8vIHRoaXMuZmV0Y2hEZXNpZ25hdGlvbkJhc2VkQ291cnNlcyhzdHJpcCwgMSwgdHJ1ZSlcbiAgICAgICAgLy8gdGhpcy5nZW5lcmF0ZUNvdXJzZVJlY29tbWVuZGF0aW9uKHN0cmlwLCAxLCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgJycsXG4gICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmVucm9sbEludGVydmFsKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBjYW5TaG93U2Frc2hhbUFpVGFiKHN0cmlwOiBhbnkpIHtcbiAgICB0cnkge1xuICAgICAgaWYgKHN0cmlwPy5rZXkgIT09ICdjYnBQbGFuJykgcmV0dXJuXG5cbiAgICAgIGxldCB1c2VyUHJvZmlsZSA9IHRoaXMuY29uZmlnU3ZjICYmIHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlXG4gICAgICBpZiAodXNlclByb2ZpbGUucm9vdE9yZ0lkKSB7XG4gICAgICAgIGxldCByZXNwb25zZSA9IGF3YWl0IHRoaXMudXNlclN2Yy5nZXRPcmdSZWFkRGF0YSh1c2VyUHJvZmlsZS5yb290T3JnSWQpLnRvUHJvbWlzZSgpO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnNha3NoYW1BSWVuYWJsZWQpIHtcbiAgICAgICAgICBzdHJpcC50YWJzWzFdLmhpZGVUYWIgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbihzdHJpcCwgMSwgdHJ1ZSwgdGhpcy5sb2NhbFJlY29tbWVuZGVkKVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc3RyaXAudGFic1sxXS5oaWRlVGFiID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChzdHJpcD8ua2V5ICE9PSAnY2JwUGxhbicpIHJldHVyblxuICAgICAgc3RyaXAudGFic1sxXS5oaWRlVGFiID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHNwbGl0Q2JwVGFic0RhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldFRhYnNMaXN0KFxuICAgICAgY29udGVudE5ldyxcbiAgICAgIHN0cmlwLFxuICAgICk7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXS52YWx1ZSA9PT0gXCJteUlnb3RQbGFuc1wiKSB7XG4gICAgICAgICAgbGV0IGNoZWNrV2lkZ2V0QW5kQWN0aXZlUGlsbCA9IHRydWVcbiAgICAgICAgICBpZiAoc3RyaXAudGFic1tpXS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1tpXS5waWxsc0RhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhLmxlbmd0aDsgaiArPSAxKSB7XG4gICAgICAgICAgICAgIC8vIGlmKGogPT09IDAgKXtcbiAgICAgICAgICAgICAgLy8gaWYoc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0ud2lkZ2V0cyAmJiBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS53aWRnZXRzLmxlbmd0aCApIHtcbiAgICAgICAgICAgICAgLy8gICBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS5zZWxlY3RlZCA9IHRydWVcbiAgICAgICAgICAgICAgLy8gICBjaGVja1dpZGdldEFuZEFjdGl2ZVBpbGwgPSBmYWxzZVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIC8vIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAvLyB9XG4gICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXSkge1xuICAgICAgICAgICAgICAgIHRhYlJlc3VsdHMucHVzaChcbiAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLi4uc3RyaXAudGFic1tpXS5waWxsc0RhdGFbal0sXG4gICAgICAgICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbaV0ucGlsbHNEYXRhW2pdICYmIGl0bUlubmVyLnZhbHVlID09PSBzdHJpcC50YWJzW2ldLnBpbGxzRGF0YVtqXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RyaXAudGFic1tpXS5waWxsc0RhdGEgPSB0YWJSZXN1bHRzXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmlwLnRhYnM7XG4gIH1cblxuICBnZXRUYWJzTGlzdChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGxldCBhbGw6IGFueVtdID0gW107XG4gICAgbGV0IHVwY29taW5nOiBhbnlbXSA9IFtdO1xuICAgIGxldCBvdmVyZHVlOiBhbnlbXSA9IFtdO1xuICAgIGxldCBhcGFyOiBhbnlbXSA9IFtdO1xuICAgIGFycmF5LmZvckVhY2goKGU6IGFueSkgPT4ge1xuICAgICAgYWxsLnB1c2goZSk7XG4gICAgICBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgb3ZlcmR1ZS5wdXNoKGUpO1xuICAgICAgfSBlbHNlIGlmIChlLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuVVBDT01JTkcpIHtcbiAgICAgICAgdXBjb21pbmcucHVzaChlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBhbGxDb21wbGV0ZWQgPSBhbGwuZmlsdGVyKChhbGxEYXRhOiBhbnkpID0+IGFsbERhdGEuY29udGVudFN0YXR1cyA9PT0gMik7XG4gICAgbGV0IGFsbEluQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPCAyKTtcblxuICAgIGxldCBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkQWxsID0gYWxsQ29tcGxldGVkLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLnBsYW5EdXJhdGlvbiAhPT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSk7XG5cbiAgICBhbGxDb21wbGV0ZWRPdmVyRHVlID0gYWxsQ29tcGxldGVkT3ZlckR1ZS5zb3J0KChhOiBhbnksIGI6IGFueSk6IGFueSA9PiB7XG4gICAgICBpZiAoYS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUgJiYgYi5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpIHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gZmlyc3REYXRlID4gc2Vjb25kRGF0ZSA/IC0xIDogMTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGFsbEluQ29tcGxldGVkID0gYWxsSW5Db21wbGV0ZWQuc29ydCgoYTogYW55LCBiOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgaWYgKGEucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFICYmIGIucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgICAgY29uc3Qgc2Vjb25kRGF0ZTogYW55ID0gbmV3IERhdGUoYi5lbmREYXRlKTtcbiAgICAgICAgcmV0dXJuIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGwgPSBbLi4uYWxsSW5Db21wbGV0ZWQsIC4uLmFsbENvbXBsZXRlZEFsbCwgLi4uYWxsQ29tcGxldGVkT3ZlckR1ZV07XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcblxuICAgIG92ZXJkdWUgPSBvdmVyZHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0RGF0ZTogYW55ID0gbmV3IERhdGUoYS5lbmREYXRlKTtcbiAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICByZXR1cm4gZmlyc3REYXRlID4gc2Vjb25kRGF0ZSA/IC0xIDogMTtcbiAgICB9KTtcblxuICAgIHVwY29taW5nID0gdXBjb21pbmcuZmlsdGVyKChkYXRhOiBhbnkpOiBhbnkgPT4ge1xuICAgICAgcmV0dXJuIGRhdGEuY29udGVudFN0YXR1cyA8IDI7XG4gICAgfSk7XG5cbiAgICBhcGFyID0gYXJyYXkuZmlsdGVyKChlOiBhbnkpID0+IGUuaXNBcGFyID09PSB0cnVlKTtcblxuICAgIHJldHVybiBbXG4gICAgICB7IHZhbHVlOiAnYWxsJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGwsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ3VwY29taW5nJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyh1cGNvbWluZywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAnY29tcGxldGVkJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhhbGxDb21wbGV0ZWQsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ292ZXJkdWUnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKG92ZXJkdWUsIHN0cmlwKSB9LFxuICAgICAgeyB2YWx1ZTogJ2FwYXInLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGFwYXIsIHN0cmlwKSB9XTtcbiAgfVxuICByZXNldFNlbGVjdGVkUGlsbChwaWxsRGF0YTogYW55KSB7XG4gICAgaWYgKHBpbGxEYXRhICYmIHBpbGxEYXRhLmxlbmd0aCkge1xuICAgICAgcGlsbERhdGEuZm9yRWFjaCgocGlsbDogYW55KSA9PiB7XG4gICAgICAgIHBpbGxbJ3NlbGVjdGVkJ10gPSBmYWxzZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cblxuICAvLyBNWSBsZWFybmluZyBTdHJpcCBtZXRob2RzIHN0YXJ0cyBoZXJlXG4gIGZldGNoVXNlckVucm9sbGVkRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFic0FuZFBpbGxzLklDb250ZW50U3RyaXBVbml0LCB0YWJJbmRleDogbnVtYmVyLCBwaWxsSW5kZXg6IG51bWJlciwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB7XG4gICAgICBpZiAoc3RyaXAgJiYgc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICBpZiAoIXN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmIChzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZyb21JbnRlcm5hbEVucm9sbG1lbnRMaXN0KHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzdHJpcCAmJiBzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGN1cnJlbnRUYWJGcm9tTWFwOiBhbnkgPSBzdHJpcC50YWJzW3RhYkluZGV4XVxuICAgICAgICAgIGxldCBjdXJyZW50UGlsbEZyb21NYXA6IGFueSA9IHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXVxuICAgICAgICAgIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAgICAgLi4uc3RyaXAudmlld01vcmVVcmwucXVlcnlQYXJhbXMsXG4gICAgICAgICAgICB0YWJTZWxlY3RlZDogY3VycmVudFRhYkZyb21NYXAudmFsdWUsXG4gICAgICAgICAgICBwaWxsU2VsZWN0ZWQ6IGN1cnJlbnRQaWxsRnJvbU1hcC52YWx1ZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cblxuICBmZXRjaEZyb21JbnRlcm5hbEVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsIHRhYkluZGV4OiBudW1iZXIsIHBpbGxJbmRleDogbnVtYmVyLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1t0YWJJbmRleF0gJiYgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdKSB7XG4gICAgICBsZXQgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVxuICAgICAgbGV0IHVzZXJJZCA9ICcnXG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnJvbGxTdmMuZmV0Y2hJbnRlcm5hbEVucm9sbG1lbnREYXRhKHVzZXJJZCwgY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICBsZXQgY291cnNlczogYW55ID0gW11cbiAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291cnNlcyAmJiByZXMucmVzdWx0LmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgY291cnNlcyA9IFsuLi5jb3Vyc2VzLCAuLi5yZXMucmVzdWx0LmNvdXJzZXNdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFeHRlcm5hbEVucm9sbG1lbnREYXRhKGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJlc3VsdCAmJiByZXMucmVzdWx0LmNvdXJzZXMgJiYgcmVzLnJlc3VsdC5jb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgY291cnNlcyA9IFsuLi5jb3Vyc2VzLCAuLi5yZXMucmVzdWx0LmNvdXJzZXNdXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZm9ybWF0TmV3RW5yb2xsbWVudERhdGEoc3RyaXAsIHRhYkluZGV4LCBwaWxsSW5kZXgsIGNvdXJzZXMsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cylcbiAgICAgICAgfSwgKF9lcnI6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChjb3Vyc2VzICYmIGNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdE5ld0Vucm9sbG1lbnREYXRhKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4LCBjb3Vyc2VzLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgW10sXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9LCAoX2VycjogYW55KSA9PiB7XG4gICAgICAgIGxldCBjb3Vyc2VzOiBhbnkgPSBbXVxuICAgICAgICB0aGlzLmVucm9sbFN2Yy5mZXRjaEV4dGVybmFsRW5yb2xsbWVudERhdGEoY3VycmVudFBpbGxGcm9tTWFwLnJlcXVlc3QucGF5bG9hZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291cnNlcyAmJiByZXMucmVzdWx0LmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb3Vyc2VzID0gWy4uLmNvdXJzZXMsIC4uLnJlcy5yZXN1bHQuY291cnNlc11cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5mb3JtYXROZXdFbnJvbGxtZW50RGF0YShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgY291cnNlcywgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgICAgICB9LCAoX2VycjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBzdHJpcC50YWJzXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4KTtcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hFdmVudEVucm9sbG1lbnRMaXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzQW5kUGlsbHMuSUNvbnRlbnRTdHJpcFVuaXQsIHRhYkluZGV4OiBudW1iZXIsIHBpbGxJbmRleDogbnVtYmVyLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1t0YWJJbmRleF0gJiYgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhICYmIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdKSB7XG4gICAgICBsZXQgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVxuICAgICAgbGV0IHVzZXJJZCA9ICcnXG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkO1xuICAgICAgfVxuICAgICAgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFdmVudHNFbnJvbGxtZW50RGF0YSh1c2VySWQsIGN1cnJlbnRQaWxsRnJvbU1hcC5yZXF1ZXN0LnBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcblxuICAgICAgICBsZXQgZXZlbnRzOiBhbnkgPSBbXVxuICAgICAgICBpZiAocmVzICYmIHJlcy5yZXN1bHQgJiYgcmVzLnJlc3VsdC5ldmVudHMgJiYgcmVzLnJlc3VsdC5ldmVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgZXZlbnRzID0gWy4uLmV2ZW50cywgLi4ucmVzLnJlc3VsdC5ldmVudHNdXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb3JtYXROZXdFbnJvbGxtZW50RGF0YShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCwgZXZlbnRzLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgICB9LCAoX2VycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIFtdLFxuICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAge30sXG4gICAgICAgICAgc3RyaXAudGFic1xuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0YXR1c0NoYW5nZXRvRG9uZShzdHJpcCwgdGFiSW5kZXgsIHBpbGxJbmRleCk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGZvcm1hdE5ld0Vucm9sbG1lbnREYXRhKHN0cmlwOiBhbnksIHRhYkluZGV4OiBudW1iZXIsIHBpbGxJbmRleDogbnVtYmVyLCBjb3Vyc2VzOiBhbnksIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYW55ID0gdHJ1ZSkge1xuICAgIGxldCBjb250ZW50OiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICBpZiAoY291cnNlcyAmJiBjb3Vyc2VzLmxlbmd0aCkge1xuICAgICAgY29udGVudCA9IGNvdXJzZXMubWFwKChjOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgY29udGVudFRlbXA6IE5zQ29udGVudC5JQ29udGVudCA9IGMuY29udGVudCB8fCBjLmV2ZW50IHx8IHt9O1xuICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGMuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgYy5wcm9ncmVzcyB8fCAwO1xuICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uU3RhdHVzID0gYy5jb21wbGV0aW9uU3RhdHVzIHx8IGMuc3RhdHVzIHx8IDA7XG4gICAgICAgIGNvbnRlbnRUZW1wLmVucm9sbGVkRGF0ZSA9IGMuZW5yb2xsZWREYXRlIHx8ICcnO1xuICAgICAgICBjb250ZW50VGVtcC5sYXN0Q29udGVudEFjY2Vzc1RpbWUgPSBjLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAnJztcbiAgICAgICAgY29udGVudFRlbXAubGFzdFJlYWRDb250ZW50U3RhdHVzID0gYy5sYXN0UmVhZENvbnRlbnRTdGF0dXMgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudElkID0gYy5sYXN0UmVhZENvbnRlbnRJZCB8fCAnJztcbiAgICAgICAgY29udGVudFRlbXAubHJjUHJvZ3Jlc3NEZXRhaWxzID0gYy5scmNQcm9ncmVzc0RldGFpbHMgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmlzc3VlZENlcnRpZmljYXRlcyA9IGMuaXNzdWVkQ2VydGlmaWNhdGVzIHx8IGMuaXNzdWVkX2NlcnRpZmljYXRlcyB8fCBbXTtcbiAgICAgICAgY29udGVudFRlbXAuYmF0Y2hJZCA9IGMuYmF0Y2hJZCB8fCAnJztcbiAgICAgICAgY29udGVudFRlbXAuY29udGVudCA9IGMuY29udGVudCB8fCBjLmV2ZW50IHx8IHt9O1xuICAgICAgICBjb250ZW50VGVtcC5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9IGMuY29udGVudCAmJiBjLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5IHx8IGMuZXZlbnQgJiYgYy5ldmVudC5yZXNvdXJjZVR5cGUgfHwgJyc7XG4gICAgICAgIGNvbnRlbnRUZW1wLmNUeXBlID0gYy5ldmVudCA/ICdldmVudCcgOiAnJztcbiAgICAgICAgcmV0dXJuIGNvbnRlbnRUZW1wO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbGV0IHNvcnRlZENvbnRlbnQ6IGFueSA9IChjb250ZW50IHx8IFtdKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZGF0ZUE6IGFueSA9IG5ldyBEYXRlKGEubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgY29uc3QgZGF0ZUI6IGFueSA9IG5ldyBEYXRlKGIubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgcmV0dXJuIGRhdGVCIC0gZGF0ZUE7XG4gICAgfSk7XG4gICAgaWYgKHN0cmlwICYmIHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGlmIChzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEgJiYgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhLmxlbmd0aCkge1xuICAgICAgICBsZXQgY3VycmVudFBpbGxGcm9tTWFwOiBhbnkgPSBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbcGlsbEluZGV4XVxuICAgICAgICBjdXJyZW50UGlsbEZyb21NYXBbJ2ZldGNoVGFiU3RhdHVzJ10gPSAnZG9uZSdcbiAgICAgICAgdGhpcy5yZXNldFNlbGVjdGVkUGlsbChzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGEpXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdWydzZWxlY3RlZCddID0gdHJ1ZVxuICAgICAgICBsZXQgd2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoc29ydGVkQ29udGVudCwgc3RyaXApXG4gICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVtwaWxsSW5kZXhdWyd3aWRnZXRzJ10gPSB3aWRnZXRzXG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgIHdpZGdldHMsXG4gICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICB7fSxcbiAgICAgICAgICBzdHJpcC50YWJzXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwLCB0YWJJbmRleCwgcGlsbEluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhZGRDb21wZXRlbmN5KCkge1xuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tYXREaWFsb2cub3BlbihBZGRDb21wZXRlbmN5UG9wdXBDb21wb25lbnQsIHtcbiAgICAgIHdpZHRoOiAnNzAlJ1xuICAgIH0pXG5cbiAgICBtb2RlbFJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLnNha3NoYW1Mb2FkZXIgPSB0cnVlXG4gICAgICAgIHRoaXMuc2Frc2hhbUFkZENvbXBldGVuY3kgPSBmYWxzZVxuICAgICAgICBtb2RlbFJlZi5jbG9zZSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIGdlbmVyYXRlQ291cnNlUmVjb21tZW5kYXRpb24oXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnNBbmRQaWxscy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1czogYm9vbGVhbixcbiAgICBjb3Vyc2VSZWNvbW1lbmRhdGlvbklkOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHN0cmlwLnRhYnNbdGFiSW5kZXhdLnJlcXVlc3QuY291cnNlUmVjb21tZW5kYXRpb24pIHtcbiAgICAgIHRoaXMuc2Frc2hhbUxvYWRlciA9IHRydWVcbiAgICAgIGxldCBwYXlsb2FkID0ge1xuICAgICAgICBcInVzZXJfaWRcIjogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkLFxuICAgICAgICBcImRlcGFydG1lbnRcIjogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUuZGVwYXJ0bWVudE5hbWUsXG4gICAgICAgIFwiZGVzaWduYXRpb25cIjogdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUucHJvZmVzc2lvbmFsRGV0YWlsc1swXT8uZGVzaWduYXRpb24sXG4gICAgICAgIFwiZGV2aWNlX3R5cGVcIjogXCJ3ZWJcIlxuICAgICAgfVxuICAgICAgbGV0IHJlc3BvbnNlOiBhbnlcbiAgICAgIGxldCBjb3Vyc2VzSWRzOiBhbnlcblxuICAgICAgaWYgKGNvdXJzZVJlY29tbWVuZGF0aW9uSWQpIHtcbiAgICAgICAgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZ2V0UmVjb21tZW5kZWRDb3Vyc2VzU2Frc2hhbUFJKGNvdXJzZVJlY29tbWVuZGF0aW9uSWQpLnRvUHJvbWlzZSgpLmNhdGNoKGFzeW5jIChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMudXNlclN2Yy5nZW5lcmF0ZUNvdXJzZXNTYWtzaGFtQUkoc3RyaXAudGFic1t0YWJJbmRleF0ucmVxdWVzdC5jb3Vyc2VSZWNvbW1lbmRhdGlvbi5wYXRoLCBwYXlsb2FkKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNwb25zZSA9IGF3YWl0IHRoaXMudXNlclN2Yy5nZW5lcmF0ZUNvdXJzZXNTYWtzaGFtQUkoXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucmVxdWVzdC5jb3Vyc2VSZWNvbW1lbmRhdGlvbi5wYXRoLCBwYXlsb2FkKVxuICAgICAgICAgIC50b1Byb21pc2UoKVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzcG9uc2U/LnJlY29tbWVuZGVkX2NvdXJzZXMgJiYgcmVzcG9uc2U/LnJlY29tbWVuZGVkX2NvdXJzZXM/Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLnNha3NoYW1Mb2FkZXIgPSBmYWxzZVxuICAgICAgICB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkID0gcmVzcG9uc2U/LmlkIHx8ICcnXG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5zZXRSZWNvbW1lbmRlZElkcyh0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLCB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS51c2VySWQpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmZlZWRiYWNrcy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2V0RmVlZGJhY2tEYXRhKHJlc3BvbnNlLmZlZWRiYWNrcylcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9SZWxldmVudEVtbWl0dGVyKClcbiAgICAgICAgY291cnNlc0lkcyA9IHJlc3BvbnNlLnJlY29tbWVuZGVkX2NvdXJzZXMubWFwKGNvdXJzZSA9PiBjb3Vyc2UuY291cnNlX2lkKVxuICAgICAgICBpZiAoY291cnNlc0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICBsZXQgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIFwicmVxdWVzdFwiOiB7XG4gICAgICAgICAgICAgIFwiY291cnNlSWRcIjogY291cnNlc0lkc1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgZW5vbGxEYXRhID0gYXdhaXQgdGhpcy5lbnJvbGxTdmMuZmV0Y2hFbnJvbGxDb250ZW50RGF0YShyZXF1ZXN0KS50b1Byb21pc2UoKS50aGVuKGFzeW5jIChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHJlcyAmJiByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQuY291cnNlcyAmJiByZXMucmVzdWx0LmNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZXMucmVzdWx0LmNvdXJzZXNcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pLmNhdGNoKChfZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBjb25zdCBzUmVxdWVzdFYxOiBhbnkgPSB7XG4gICAgICAgICAgICBcInJlcXVlc3RcIjoge1xuICAgICAgICAgICAgICBcImZpbHRlcnNcIjoge1xuICAgICAgICAgICAgICAgIFwicHJpbWFyeUNhdGVnb3J5XCI6IFtcbiAgICAgICAgICAgICAgICAgIFwiQ291cnNlXCJcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIFwiaWRlbnRpZmllclwiOiBjb3Vyc2VzSWRzXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIFwic29ydEJ5XCI6IHtcbiAgICAgICAgICAgICAgICBcImxhc3RVcGRhdGVkT25cIjogXCJEZXNjXCJcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzUmVxdWVzdDogYW55ID0ge1xuICAgICAgICAgICAgXCJyZXF1ZXN0XCI6IHtcbiAgICAgICAgICAgICAgXCJmaWx0ZXJzXCI6IHtcbiAgICAgICAgICAgICAgICBcImlkZW50aWZpZXJcIjogY291cnNlc0lkc1xuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICBcIm9mZnNldFwiOiAwLFxuICAgICAgICAgICAgICBcInNvcnRfYnlcIjoge1xuICAgICAgICAgICAgICAgIFwibGFzdFVwZGF0ZWRPblwiOiBcImRlc2NcIlxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoQ29udGVudFNlYXJjaF9QUk9EKHNSZXF1ZXN0VjEpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICB0aGlzLmNvbnRlbnRTdmMuc2VhcmNoVjYoc1JlcXVlc3QpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmKHJlc3VsdHMucmVzdWx0LmNvdW50ID4gMCkge1xuICAgICAgICAgICAgICBpZiAocmVzdWx0cyAmJiByZXN1bHRzPy5yZXN1bHQgJiYgcmVzdWx0cz8ucmVzdWx0Py5jb250ZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gbGV0IGNvdXJzZXMgPSByZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgICAgICAgbGV0IGNvdXJzZXMgPSB0aGlzLmNvbnRlbnRTdmMuZmlsdGVyQ291cnNlc1dpdGhOb1JhdGluZyhyZXNwb25zZSwgcmVzdWx0cy5yZXN1bHQuY29udGVudClcbiAgICAgICAgICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwPy50YWJzICYmIHN0cmlwPy50YWJzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0RGVzaWduYXRpb25zVGFiRGF0YShjb3Vyc2VzLCBzdHJpcCwgZW5vbGxEYXRhLCBjb3Vyc2VzSWRzLCBTYWtzaGFtQUkuU2Frc2hhbUFJKVxuICAgICAgICAgICAgICAgICAgbGV0IGNvdW50T2ZXaWRnZXQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICBpZiAoc3RyaXAgJiYgc3RyaXA/LnRhYnMgJiYgc3RyaXA/LnRhYnM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBzdHJpcC50YWJzLmZvckVhY2goKHRhYjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYj8udmFsdWUgPT09IFNha3NoYW1BSS5TYWtzaGFtQUkgJiYgdGFiPy5waWxsc0RhdGEgJiYgdGFiPy5waWxsc0RhdGEubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YWIucGlsbHNEYXRhLmZvckVhY2goKHBpbGw6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGlsbCAmJiBwaWxsLndpZGdldHMgJiYgcGlsbC53aWRnZXRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudE9mV2lkZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWxsLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRPZldpZGdldCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uZmV0Y2hUYWJTdGF0dXMgPSAnZG9uZSdcbiAgICAgICAgICAgICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0udGFiTG9hZGluZyA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY291cnNlcywgc3RyaXApLFxuICAgICAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgJycsXG4gICAgICAgICAgICAgICAgICAgIHRhYlJlc3VsdHNcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5maXJzdFRpbWVMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvbW1lbmRhdGlvblBvcHVwID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcnN0VGltZUxvYWRlZCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnNlbGVjdGVkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnXG4gICAgICAgICAgICAgICAgICBzdHJpcC5zaG93T25Mb2FkZXIgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICAgICd2aWV3TW9yZVVybCcsIHN0cmlwLnRhYnNcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5oaWRlVGFiID0gdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXNldFBpbGxzKHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YSlcbiAgICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5waWxsc0RhdGFbMF0uc2VsZWN0ZWQgPSB0cnVlXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLndpZGdldHMgPSBbXVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLnBpbGxzRGF0YVswXS5mZXRjaFRhYlN0YXR1cyA9ICdkb25lJ1xuICAgICAgICAgIHN0cmlwLnNob3dPbkxvYWRlciA9IGZhbHNlXG4gICAgICAgICAgc3RyaXAudGFic1t0YWJJbmRleF0ucGlsbHNEYXRhWzBdLnRhYkxvYWRpbmcgPSBmYWxzZVxuICAgICAgICAgIHN0cmlwLnRhYnNbdGFiSW5kZXhdLmhpZGVUYWIgPSB0cnVlXG4gICAgICAgICAgbGV0IHRhYnMgPSBzdHJpcC50YWJzXG4gICAgICAgICAgaWYgKHN0cmlwLnRhYnNbMF0gJiYgc3RyaXAudGFic1swXS5oaWRlVGFiKSB7XG4gICAgICAgICAgICB0YWJzID0gW11cbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoW10sIHN0cmlwKSxcbiAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAgdGFic1xuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBzdHJpcC50YWJzW3RhYkluZGV4XS5oaWRlVGFiID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHNhdmVGZWVkYmFjayhjb21tZW50OiBzdHJpbmcsIHJhdGluZyA9IDApIHtcbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgXCJyZWNvbW1lbmRhdGlvbl9pZFwiOiB0aGlzLnJlY29tbWVuZGVkQ291cnNlc0lkLFxuICAgICAgXCJjb3Vyc2VfaWRcIjogdGhpcy5mZWVkYmFja0NvdXJzZUlkLFxuICAgICAgXCJyYXRpbmdcIjogcmF0aW5nLFxuICAgICAgXCJjb21tZW50c1wiOiBjb21tZW50LFxuICAgICAgXCJ1c2VyX2lkXCI6IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZFxuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udGVudFN2Yy5zYXZlRmVlZGJhY2tTYWtzaGFtQUkocGF5bG9hZCkudG9Qcm9taXNlKCkuY2F0Y2goKCkgPT4geyB9KVxuICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZT8ubWVzc2FnZSkge1xuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuRnJvbUNvbXBvbmVudChTbmFja2JhckNvbXBvbmVudCwge1xuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgbWVzc2FnZTogJ1RoYW5rIHlvdSBmb3IgeW91ciBmZWVkYmFjay4nLCB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIH0sIGR1cmF0aW9uOiBTTkFDS0JBUl9EVVJBVElPTiwgcGFuZWxDbGFzczogJ2NvdXJzZS1zdWNjZXNzLXNuYWNrYmFyJyxcbiAgICAgIH0pXG4gICAgICBpZiAocmF0aW5nID09PSAwKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVDb3Vyc2VSZWNvbW1lbmRhdGlvbih0aGlzLmN1cnJlbnRTdHJpcEcsIHRoaXMudGFiRXZlbnRHLCB0cnVlLCB0aGlzLmxvY2FsUmVjb21tZW5kZWQpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbkZyb21Db21wb25lbnQoU25hY2tiYXJDb21wb25lbnQsIHtcbiAgICAgICAgZGF0YToge1xuICAgICAgICAgIG1lc3NhZ2U6ICdTb21ldGhpbmcgaXMgd3JvbmcuIFBsZWFzZSB0cnkgYWdhaW4gbGF0ZXInLCB0eXBlOiAnZXJyb3InLFxuICAgICAgICB9LCBkdXJhdGlvbjogU05BQ0tCQVJfRFVSQVRJT04sIHBhbmVsQ2xhc3M6ICdjb3Vyc2UtZXJyb3Itc25hY2tiYXInLFxuICAgICAgfSlcbiAgICB9XG4gICAgdGhpcy5zYWtzaGFtRmVlZGJhY2tQb3B1cCA9IGZhbHNlO1xuICB9XG5cbiAgc3Vic2NyaWJlVG9SZWxldmVudEVtbWl0dGVyKCkge1xuICAgIGlmICghdGhpcy5yZWxldmVudE5vdFJlbGV2ZW50U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnJlbGV2ZW50Tm90UmVsZXZlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmNvbnRlbnRTdmMucmVsZXZlbnROb3RSZWxldmVudCQuc3Vic2NyaWJlKGRhdGEgPT4ge1xuICAgICAgICBpZiAoZGF0YSAmJiBkYXRhLndpZGdldERhdGEgJiYgZGF0YS53aWRnZXREYXRhPy5jb250ZW50Py5pZGVudGlmaWVyICE9PSB0aGlzLmZlZWRiYWNrQ291cnNlSWQpIHtcbiAgICAgICAgICB0aGlzLmZlZWRiYWNrQ291cnNlSWQgPSBkYXRhLndpZGdldERhdGE/LmNvbnRlbnQ/LmlkZW50aWZpZXJcbiAgICAgICAgICBpZiAoZGF0YS5pc1JlbGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNhdmVGZWVkYmFjaygnJywgMSlcbiAgICAgICAgICB9IGVsc2UgaWYgKCFkYXRhLmlzUmVsZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuc2Frc2hhbUZlZWRiYWNrUG9wdXAgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBjYW5jZWxGZWVkYmFja1BvcHVwKCkge1xuICAgIHRoaXMuc2Frc2hhbUZlZWRiYWNrUG9wdXAgPSBmYWxzZTtcbiAgICB0aGlzLmZlZWRiYWNrQ291cnNlSWQgPSAnJ1xuICB9XG5cbiAgc3RhdHVzQ2hhbmdldG9Eb25lKHN0cmlwOiBhbnksdGFiSW5kZXg6bnVtYmVyLHBpbGxJbmRleDpudW1iZXIpIHtcbiAgICBjb25zdCBhbGxQaWxscyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnNbdGFiSW5kZXhdPy5waWxsc0RhdGE7XG4gICAgaWYgKGFsbFBpbGxzICYmIGFsbFBpbGxzLmxlbmd0aCAmJiBhbGxQaWxsc1twaWxsSW5kZXhdKSB7XG4gICAgICBhbGxQaWxsc1twaWxsSW5kZXhdID0ge1xuICAgICAgICAuLi5hbGxQaWxsc1twaWxsSW5kZXhdLFxuICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICB0YWJMb2FkaW5nOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0ZWQ6IHRydWVcbiAgICAgIH07XG4gICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb250ZW50QXZhaWxhYmxlOyBlbHNlIG90aGVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjxuZy10ZW1wbGF0ZSAjb3RoZXJUZW1wbGF0ZT5cbiAgPCEtLSA8ZGl2ICpuZ0lmPVwic2hvd1BhcmVudExvYWRlclwiIGNsYXNzPVwidGV4dC1jZW50ZXIgbXktMlwiPlxuICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gIDwvZGl2PiAtLT5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dQYXJlbnRFcnJvclwiIFtzYlVpUmVzb2x2ZXJXaWRnZXRdPVwid2lkZ2V0RGF0YS5lcnJvcldpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1BhcmVudE5vRGF0YVwiIFtzYlVpUmVzb2x2ZXJXaWRnZXRdPVwid2lkZ2V0RGF0YS5ub0RhdGFXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIHN0cmlwc0tleU9yZGVyOyBsZXQgaSA9IGluZGV4OyB0cmFja0J5OiBpZGVudGlmeVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0cmlwU2hvd2luZyhzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pICYmIGNhblNob3dIZWFkaW5nKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIj5cbiAgICAgIDxhIG5hbWU9XCJ7e3N0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZX19XCIgW2NsYXNzXT1cImtleVwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcCAmJiAoZ2V0TGVuZ3RoKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSkgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zaG93T25Ob0RhdGEgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zaG93T25Mb2FkZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zaG93T25FcnJvcilcbiAgICAgICAgICAgICAgICAgIFwiIFtuZ0NsYXNzXT1cIlxuICAgICAgICAgICAgICAgICAgICAhd2lkZ2V0RGF0YT8uaXNDaGFubmVsU3RyaXAgPyAneHM6cHgtOCBzeDpweC0xMHNzJyA6IGkgPiAwID8gJ210LTEyJyA6ICcnXG4gICAgICAgICAgICAgICAgICBcIiBbaWRdPVwia2V5XCIgW25nQ2xhc3NdPVwiIXdpZGdldERhdGE/LmlzQ2hhbm5lbFN0cmlwID8gJ21hcmdpbi1ib3R0b20tY3VzdG9tJyA6ICdtYXJnaW4tYm90dG9tLXhzJ1wiPlxuICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyBwYWQ6IHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBCYWNrZ3JvdW5kIH1cIlxuICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBCYWNrZ3JvdW5kIH1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIHBsLTQgcHItNCBtZDpwci0wIG1kOnBsLTAgXCIgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAhd2lkZ2V0RGF0YT8uaXNDaGFubmVsU3RyaXBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6IHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdtYi04J1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICAgICAgICAgICAgXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtMSBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTEgbWFyZ2luLXJlbW92ZSBpbmxpbmUtYmxvY2sgXCIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FwaXRhbGl6ZVwiICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5kaXNhYmxlVHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7c3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIXN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uZGlzYWJsZVRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyB0cmFuc2xhdGVMYWJlbHMoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcFRpdGxlLCAnaG9tZScpIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9wPlxuXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBJbmZvPy5pY29uXCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUluZm8oc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiIGkxOG4tbWF0VG9vbHRpcCBtYXRUb29sdGlwPVwiaW5mb1wiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hcmdpbi1sZWZ0LXhzXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24+e3sgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zdHJpcEluZm8/Lmljb24uaWNvbiB9fTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgPGEgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwVGl0bGVMaW5rPy5saW5rXCJcbiAgICAgICAgICAgICAgICAgIFtyb3V0ZXJMaW5rXT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZUxpbms/LmxpbmtcIlxuICAgICAgICAgICAgICAgICAgW3F1ZXJ5UGFyYW1zXT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZUxpbms/Lmxpbms/LnF1ZXJ5UGFyYW1zXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ3cy1tYXQtcHJpbWFyeS1wcmltYXJ5LXRleHQgd3MtbWF0LWRlZmF1bHQtdGV4dFwiIFtjb2xvcl09XCInYWNjZW50J1wiPnt7XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBUaXRsZUxpbms/Lmljb24gfX08L21hdC1pY29uPlxuICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNwYWNlclwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgc3RhcnQtLT5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2hlY2tDb25kaXRpb24od2lkZ2V0RGF0YSAsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIiBjbGFzcz1cImJsb2NrIG1kOmhpZGRlblwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1sLTQgcGwtMiB2aWV3LW1vcmUgd3MtbWF0LWRlZmF1bHQtdGV4dCAgXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCB3cy1tYXQtZGVmYXVsdC10ZXh0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYXQtYm9keS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmFpc2VUZWxlbWV0cnkoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKTtyZWRpcmVjdFZpZXdBbGwoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnZpZXdNb3JlVXJsPy5wYXRoLCBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnZpZXdNb3JlVXJsPy5xdWVyeVBhcmFtcyApXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0XCI+e3t0cmFuc2xhdGVMYWJlbHMod2lkZ2V0RGF0YS5zdHJpcHNbMF0/LnZpZXdNb3JlVXJsPy52aWV3TW9yZVRleHQsJ2hvbWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgfHwgJ1NlZSBhbGwnfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwid3MtbWF0LWRlZmF1bHQtdGV4dCBtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBtYXQtaWNvbi1uby1jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcj1cImFjY2VudFwiPm5hdmlnYXRlX25leHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgZW5kLS0+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1pY29uLWJ1dHRvbiAoY2xpY2spPVwic2V0SGlkZGVuRm9yU3RyaXAoa2V5KVwiICpuZ0lmPVwic3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5jYW5IaWRlU3RyaXBcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8ubW9kZSA9PT0gJ2FjY29yZGlvbicgJiYgaXNNb2JpbGVcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzaG93QWNjb3JkaW9uRGF0YSA9ICFzaG93QWNjb3JkaW9uRGF0YVwiPnt7IHNob3dBY2NvcmRpb25EYXRhID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItNFwiICpuZ0lmPVwiY2hlY2tWaXNpYmxlKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSlcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cImdldGRhdGEoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldKVwiPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTm9EYXRhXCJcbiAgICAgICAgICAgICAgW3NiVWlSZXNvbHZlcldpZGdldF09XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/Lm5vRGF0YVdpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uRXJyb3JcIlxuICAgICAgICAgICAgICBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uZXJyb3JXaWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwhLS0gSUYgbm8gZXJyb3JzIHRoZW4gcHJvY2VlZCB0byBzaG93IHRhYnMgb3Igbm9uIHRhYnMgc3RyaXAgLS0+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc2hvd09uTm9EYXRhICYmICFzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkVycm9yXCI+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0udGFicyAmJiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0udGFicy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXRhYi1ncm91cCBhbmltYXRpb25EdXJhdGlvbj1cIjBtc1wiIFtzZWxlY3RlZEluZGV4XT1cImdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCBrZXkpXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0LXRhYi1sYWJlbHMgdy1mdWxsIHN0cmlwcy10YWJncm91cCBwYWRkaW5nLWJvdHRvbS10YWJzXCIgZHluYW1pY0hlaWdodFxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwidGFiQ2xpY2tlZCgkZXZlbnQsIDAsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwga2V5KVwiPlxuICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdGFiIG9mIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS50YWJzOyBsZXQgbGFzdCA9IGxhc3Q7bGV0IHRhYkluZGV4ID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC10YWIgKm5nSWY9XCIhdGFiPy5oaWRlVGFiXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG1hdC10YWItbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPy52YWx1ZSAhPT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdHJhbnNsYXRlTGFiZWxzKHRhYj8ubGFiZWwsICdob21lJykgfX0gJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInRhYj8uc2hvd1RhYkRhdGFDb3VudCAmJiB0YWI/LndpZGdldHM/Lmxlbmd0aFwiPih7e3RhYj8ud2lkZ2V0cz8ubGVuZ3RofX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPy52YWx1ZSA9PT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9zYWtzaGFtQUkvYWktaWNvbi5zdmdcIiBhbHQ9XCJsb2FkZXJcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgdHJhbnNsYXRlTGFiZWxzKHRhYj8ubGFiZWwsICdob21lJykgfX0gJm5ic3A7PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBzdmdJY29uPVwiaW5mby1vdXRsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWFyZ2luLXJlbW92ZSB3LTE2LXB4IGN1cnNvci1wb2ludGVyIHJlcXVlc3QtaWQtdG9vbFRpcCBtLXB4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidob21lLnNha3NoYW1BSVRvb2x0aXAnIHwgdHJhbnNsYXRlXCIgW21hdFRvb2x0aXBQb3NpdGlvbl09XCInYWJvdmUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cInJlcXVlc3QtaWQtdG9vbFRpcFwiPjwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Z1bGwgd3JhcHBlci1zYWtzaGFtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiPy5waWxsc0RhdGEgJiYgdGFiPy5waWxsc0RhdGE/Lmxlbmd0aCAmJiAhdGFiPy5oaWRlVGFiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnb3ZlcmxheS1tYXgtaGVpZ2h0JzogcmVjb21tZW5kYXRpb25Qb3B1cCB8fCBzYWtzaGFtRmVlZGJhY2tQb3B1cH1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwdC0zIGZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW0tY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0YWI/LnZhbHVlICE9PSBzYWtzaGFtQUlFbnVtLlNha3NoYW1BSVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCIgZmxleCBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcC1saXN0IGNsYXNzPVwiY29udGVudC1waWxsXCIgYXJpYS1sYWJlbD1cIkZpc2ggc2VsZWN0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHBpbGwgb2YgdGFiPy5waWxsc0RhdGE7bGV0IHAgPSBpbmRleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcCBbc2VsZWN0ZWRdPVwicGlsbD8uc2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInBpbGxDbGlja2VkKCRldmVudCwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLCBrZXksIHAsIHRhYkluZGV4KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwaWxsLW5hbWVcIj57e3BpbGw/LmxhYmVsfX08L3NwYW4+PC9tYXQtY2hpcD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1jaGlwLWxpc3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgc3RhcnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2hlY2tDb25kaXRpb24od2lkZ2V0RGF0YSAsIHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSkgJiYgdGFiPy52YWx1ZSAhPT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIGhpZGRlbiBtZDpibG9ja1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtbC00IHBsLTIgdmlldy1tb3JlIHdzLW1hdC1kZWZhdWx0LXRleHRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwiZmxleCB3cy1tYXQtZGVmYXVsdC10ZXh0IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBtYXQtYm9keS0xIGN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInJhaXNlVGVsZW1ldHJ5KHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSk7cmVkaXJlY3RWaWV3QWxsKHN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XSwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucGF0aCwgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy52aWV3TW9yZVVybD8ucXVlcnlQYXJhbXMgKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBpMThuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ3cy1tYXQtZGVmYXVsdC10ZXh0XCI+e3t0cmFuc2xhdGVMYWJlbHMod2lkZ2V0RGF0YS5zdHJpcHNbMF0/LnZpZXdNb3JlVXJsPy52aWV3TW9yZVRleHQsJ2hvbWUnKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICdTZWUgYWxsJ319PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIndzLW1hdC1kZWZhdWx0LXRleHQgbWF0LWljb24gbm90cmFuc2xhdGUgbWF0ZXJpYWwtaWNvbnMgbWF0LWljb24tbm8tY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yPVwiYWNjZW50XCI+bmF2aWdhdGVfbmV4dDwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHZpZXdBbGwgZW5kLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIoc3RyaXBzUmVzdWx0RGF0YU1hcCAmJiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNob3dPbkxvYWRlciB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICF0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzKSAmJiAhc2Frc2hhbUxvYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgbXktMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c2ItdWljLWhvcml6b250YWwtc2Nyb2xsZXItdjIgW3NsaWRlckNvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNsaWRlckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImtleSsnLXNjcm9sbGVyJ1wiIFtsb2FkU3RhdHVzXT1cIidmZXRjaGluZydcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHJpcENvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnN0cmlwQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IHdpZGdldCBvZiBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LmxvYWRlcldpZGdldHM7IHRyYWNrQnk6IHRyYWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW3NiVWlSZXNvbHZlcldpZGdldF09XCJ3aWRnZXRcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zYi11aWMtaG9yaXpvbnRhbC1zY3JvbGxlci12Mj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInRhYj8ucGlsbHNEYXRhICYmIHRhYj8ucGlsbHNEYXRhLmxlbmd0aCAmJiB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKCh0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzICYmIHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8uZmV0Y2hUYWJTdGF0dXMgPT09ICdkb25lJykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAoIXRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0cyB8fCAhdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy53aWRnZXRzPy5sZW5ndGgpKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwidGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy52YWx1ZSA9PT0gJ2lucHJvZ3Jlc3MnOyBlbHNlIG1zZ1RlbXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBhbHQ9XCJcIiBjbGFzcz1cIm10LTQgbWItNFwiIHNyYz1cImFzc2V0cy9pY29ucy9ob21lL25vZGF0YURlZmF1bHQuc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYXQtc3ViaGVhZGluZy0xIHRleHQtY2VudGVyIGluZm8tY29udGVudFwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbnRlbnRzdHJpcG11bHRpcGxlLmdldFJlYWR5Rm9yTGVhcm5pbmdBZHZlbnR1cmUnIHwgdHJhbnNsYXRlIH19IC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cImNsaWNrLWhlcmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JvdXRlckxpbmtdPVwidGFiPy5sYWJlbCA9PT0gJ0V2ZW50cycgPyAnL2FwcC9ldmVudC1odWIvaG9tZSc6Jy9wYWdlL2xlYXJuJ1wiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29udGVudHN0cmlwbXVsdGlwbGUuY2xpY2tIZXJlJyB8IHRyYW5zbGF0ZSB9fTwvYT4gPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIHRhYj8ubGFiZWwgPT09ICdFdmVudHMnXCI+e3snY29udGVudHN0cmlwbXVsdGlwbGUudG9FbnJvbGxOZXh0RXZlbnRzJyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCIgdGFiPy5sYWJlbCAhPT0gJ0V2ZW50cydcIj57eyAnY29udGVudHN0cmlwbXVsdGlwbGUudG9FbnJvbGxOZXh0Q291cnNlJyB8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNtc2dUZW1wPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIGFsdD1cIlwiIGNsYXNzPVwibXQtNCBtYi00XCIgc3JjPVwiYXNzZXRzL2ljb25zL2hvbWUvbm9kYXRhRGVmYXVsdC5wbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1hdC1zdWJoZWFkaW5nLTEgdGV4dC1jZW50ZXJcIj57e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUxhYmVscyh0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/Lm5vZGF0YU1zZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG9tZScpIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIih0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LmZldGNoVGFiU3RhdHVzID09PSAnZG9uZScgfHwgdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy53aWRnZXRzPy5sZW5ndGgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy50YWJMb2FkaW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiLXVpYy1ob3Jpem9udGFsLXNjcm9sbGVyLXYyIFtpZF09XCJrZXkrJy1zY3JvbGxlcidcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NsaWRlckNvbmZpZ109XCJzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNsaWRlckNvbmZpZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkZ2V0c0xlbmd0aF09XCJ0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/LndpZGdldHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImdldENvbnRpbmV1TGVhcm5pbmdMZW50aChzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0pICYmIHNob3dBY2NvcmRpb24oa2V5KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbG9hZFN0YXR1c109XCInZG9uZSdcIiBbZGVmYXVsdE1heFdpZGdldHNdPVwidGFiPy52YWx1ZSA9PT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUkgPyBtYXhXaWRnZXRzU2Frc2hhbUFJIDogdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy5tYXhXaWRnZXRzIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWc/Lm1heFdpZGdldHMgfHwgZGVmYXVsdE1heFdpZGdldHNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0cmlwQ29uZmlnXT1cInN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XT8uc3RyaXBDb25maWdcIiBbZXh0cmFNZXRhXT1cInRhYlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB3aWRnZXQgb2YgdGFiPy5waWxsc0RhdGFbZ2V0U2VsZWN0ZWRQaWxsSW5kZXgodGFiICx0YWJJbmRleCldPy53aWRnZXRzfCBzbGljZTowOih0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/Lm1heFdpZGdldHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcHNSZXN1bHREYXRhTWFwW2tleV0/LnNsaWRlckNvbmZpZz8ubWF4V2lkZ2V0cyB8fCBkZWZhdWx0TWF4V2lkZ2V0cyk7IHRyYWNrQnk6IHRyYWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgd2lkZ2V0IG9mIHRhYj8ucGlsbHNEYXRhW2dldFNlbGVjdGVkUGlsbEluZGV4KHRhYiAsdGFiSW5kZXgpXT8ud2lkZ2V0cyB8IHNsaWNlOjA6KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYj8udmFsdWUgPT09IHNha3NoYW1BSUVudW0uU2Frc2hhbUFJIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtYXhXaWRnZXRzU2Frc2hhbUFJIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB0YWI/LnBpbGxzRGF0YVtnZXRTZWxlY3RlZFBpbGxJbmRleCh0YWIgLHRhYkluZGV4KV0/Lm1heFdpZGdldHMgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldPy5zbGlkZXJDb25maWc/Lm1heFdpZGdldHMgfHwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRNYXhXaWRnZXRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7IHRyYWNrQnk6IHRyYWNrZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbc2JVaVJlc29sdmVyV2lkZ2V0XT1cIndpZGdldFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NiLXVpYy1ob3Jpem9udGFsLXNjcm9sbGVyLXYyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGFiPy52YWx1ZSA9PT0gc2Frc2hhbUFJRW51bS5TYWtzaGFtQUlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInJlY29tbWVuZGF0aW9uUG9wdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JlZXQtb3ZlcmxheVwiIEBmYWRlSW5PdXQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaW1hZ2VzL3Nha3NoYW1BSS9sYWR5LWdyZWV0LnN2Z1wiIGFsdD1cImdyZWV0XCIgd2lkdGg9XCIxMDZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5LXRleHQgbXQtNCB0ZXh0LXdoaXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7J2hvbWUuc2Frc2hhbWFpZGVzYycgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIG1hdC1yYWlzZWQtYnV0dG9uIGNsYXNzPVwib3ZlcmxheS1idXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwicmVjb21tZW5kYXRpb25Qb3B1cCA9IGZhbHNlXCI+e3sncHJvZmlsZUluZm8ub2snIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNha3NoYW1GZWVkYmFja1BvcHVwXCIgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncmVldC1vdmVybGF5IGZlZWRiYWNrLW92ZXJsYXlcIiBAZmFkZUluT3V0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm92ZXJsYXktdGV4dCBtdC00IHRleHQtd2hpdGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3snaG9tZS5zYWtzaGFtYWlmZWVkYmFja1RleHQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGNsYXNzPVwiZmVlZGJhY2stdGV4dCB3LTQvNSBtdC00XCIgYXBwZWFyYW5jZT1cIm91dGxpbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRleHRhcmVhIG1hdElucHV0IHBsYWNlaG9sZGVyPVwiRW50ZXIgeW91ciBmZWVkYmFjay4uLlwiIHJvd3M9XCI0XCIgI2ZlZWRiYWNrIFttYXhMZW5ndGhdPVwiNTAwXCI+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uLWZlZWRiYWNrIG10LTQgZmxleCBnYXAtNCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cIm92ZXJsYXktYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUZlZWRiYWNrKGZlZWRiYWNrLnZhbHVlKVwiPnt7J3VzZXJQcm9maWxlLnN1Ym1pdCcgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cIm92ZXJsYXktYnV0dG9uLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2FuY2VsRmVlZGJhY2tQb3B1cCgpXCI+e3sndXNlclByb2ZpbGUuY2FuY2VsJyB8IHRyYW5zbGF0ZX19PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNha3NoYW1BZGRDb21wZXRlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIHB5LTZcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYWtzaGFtLWxvYWQtdGV4dCB0ZXh0LXNtIGZvbnQtbm9ybWFsIGxhdG9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGV0IHVzIGtub3cgd2hhdCBkbyB5b3Ugd2FudCB0byBsZWFybiB0b2RheSFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBtYXQtcmFpc2VkLWJ1dHRvbiBjbGFzcz1cIm92ZXJsYXktYnV0dG9uIG10LTRcIiAoY2xpY2spPVwiYWRkQ29tcGV0ZW5jeSgpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1iLTFcIj5hZGQ8L21hdC1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGQgQ29tcGV0ZW5jeTwvYnV0dG9uPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gTG9hZGVyIGFuZCBDb250ZW50IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2Frc2hhbUxvYWRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgdGV4dC1jZW50ZXIgcHktNlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2ltYWdlcy9zYWtzaGFtQUkvc2Frc2hhbV9haV9sb2FkZXItMi5naWZcIiBhbHQ9XCJsb2FkZXJcIiBjbGFzcz1cIm1iLTNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMFwiIGhlaWdodD1cIjEwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNha3NoYW0tbG9hZC10ZXh0IHRleHQtc20gZm9udC1ub3JtYWwgbGF0b1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eydob21lLnNha3NoYW1haUxvYWRlclRleHQnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXRhYj5cbiAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbWF0LXRhYi1ncm91cD5cbiAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2E+XG5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPiJdfQ==
|