ng-pli-commons 0.0.1913 → 0.0.1915
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/esm2020/lib/components/token/token.component.mjs +17 -12
- package/esm2020/version.mjs +3 -3
- package/fesm2015/ng-pli-commons.mjs +20 -13
- package/fesm2015/ng-pli-commons.mjs.map +1 -1
- package/fesm2020/ng-pli-commons.mjs +18 -13
- package/fesm2020/ng-pli-commons.mjs.map +1 -1
- package/lib/components/token/token.component.d.ts +1 -0
- package/package.json +1 -1
|
@@ -657,17 +657,7 @@ export class TokenComponent {
|
|
|
657
657
|
else if (subToken[1].toLowerCase() == TokenService.STATIC_TOKEN_SURNAME.toLowerCase()) {
|
|
658
658
|
if (this.data.dataFormApplication.username &&
|
|
659
659
|
this.data.dataFormApplication.username !== null) {
|
|
660
|
-
this.
|
|
661
|
-
next: (sesion) => {
|
|
662
|
-
const surnames = sesion.surname !== '' && sesion.surname !== null
|
|
663
|
-
? sesion.surname + ' ' + sesion.lastname
|
|
664
|
-
: sesion.lastname;
|
|
665
|
-
html = this.tokenService.replaceToken(html, token.value, surnames);
|
|
666
|
-
},
|
|
667
|
-
error: (error) => {
|
|
668
|
-
console.error('Error consultando el login en PLIS, getByLogin', error);
|
|
669
|
-
}
|
|
670
|
-
});
|
|
660
|
+
this.findSesionByLogin(html, token);
|
|
671
661
|
}
|
|
672
662
|
}
|
|
673
663
|
else {
|
|
@@ -680,6 +670,21 @@ export class TokenComponent {
|
|
|
680
670
|
value: valueReplace
|
|
681
671
|
};
|
|
682
672
|
}
|
|
673
|
+
async findSesionByLogin(html, token) {
|
|
674
|
+
try {
|
|
675
|
+
const sesion = await this.sesionService
|
|
676
|
+
.getByLogin(this.data.dataFormApplication.username)
|
|
677
|
+
.toPromise();
|
|
678
|
+
const surnames = sesion.surname !== '' && sesion.surname !== null
|
|
679
|
+
? sesion.surname + ' ' + sesion.lastname
|
|
680
|
+
: sesion.lastname;
|
|
681
|
+
html = this.tokenService.replaceToken(html, token.value, surnames);
|
|
682
|
+
console.log('surname', surnames);
|
|
683
|
+
}
|
|
684
|
+
catch (error) {
|
|
685
|
+
console.error('Error consultando el login en PLIS, getByLogin', error);
|
|
686
|
+
}
|
|
687
|
+
}
|
|
683
688
|
/**
|
|
684
689
|
* Find all the tokens present in the HTML text. Organize this tokens in four categories.
|
|
685
690
|
* @param html Text of the html
|
|
@@ -1021,4 +1026,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.5", ngImpor
|
|
|
1021
1026
|
}], onGenerate: [{
|
|
1022
1027
|
type: Output
|
|
1023
1028
|
}] } });
|
|
1024
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcGxpLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuL3Rva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy90b2tlbi90b2tlbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUlaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixVQUFVLEVBSVYsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixrQkFBa0IsRUFHbEIsUUFBUSxFQUVSLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLFFBQVEsQ0FBQzs7Ozs7OztBQVFoQixNQUFNLE9BQU8sY0FBYztJQTZCMUIsWUFDUyxZQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBNEMsRUFDNUMsYUFBNEI7UUFKNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTdCckMsdUNBQXVDO1FBQzdCLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVsRSxrREFBa0Q7UUFDbEQsc0JBQWlCLEdBQVksS0FBSyxDQUFDO0lBMEJoQyxDQUFDO0lBRUosUUFBUTtRQUNQLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixH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dXQsXHJcblx0T3V0cHV0LFxyXG5cdEV2ZW50RW1pdHRlcixcclxuXHRPbkNoYW5nZXMsXHJcblx0U2ltcGxlQ2hhbmdlcyxcclxuXHRTaW1wbGVDaGFuZ2VcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuXHRVdGlsU3RyaW5nLFxyXG5cdERhdGFUb1RyYW5zbGF0ZVRva2VuLFxyXG5cdFRva2VuLFxyXG5cdEJ1ZGdldER0byxcclxuXHRFVGlwb1ByZXN1cHVlc3RvLFxyXG5cdFBsaVVzdWFyaW8sXHJcblx0c2VzaW9uLFxyXG5cdEF1dGhlbnRpY2F0aW9uVXRpbCxcclxuXHRQbGlVc2VyLFxyXG5cdEFwcGxpY2F0aW9uQnVkZ2V0VG90YWwsXHJcblx0RGF0ZVV0aWwsXHJcblx0RXZhbHVhdGlvblxyXG59IGZyb20gJ25nLXBsaS11dGlsJztcclxuaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgVG9rZW5TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdG9rZW4uc2VydmljZSc7XHJcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcclxuaW1wb3J0IHsgQXV0aGVudGljYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYXV0aGVudGljYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCAnanF1ZXJ5JztcclxuaW1wb3J0IHsgU2VzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Nlc2lvbi5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG5cdHNlbGVjdG9yOiAncGxpLXRva2VuJyxcclxuXHR0ZW1wbGF0ZVVybDogJy4vdG9rZW4uY29tcG9uZW50Lmh0bWwnLFxyXG5cdHN0eWxlVXJsczogWycuL3Rva2VuLmNvbXBvbmVudC5jc3MnXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgVG9rZW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblx0LyoqIEl0IGNvbnRhaW5zIHRoZSB0ZW1wbGF0ZSBodG1sIHRvIHRyYW5zbGF0ZSAqL1xyXG5cdEBJbnB1dCgpIHRlbXBsYXRlOiBzdHJpbmc7XHJcblx0LyoqIEl0IGNvbnRhaW5zIHRoZSBkYXRhIHRvIGltcGxlbWVudCAqL1xyXG5cdEBJbnB1dCgpIGRhdGE6IERhdGFUb1RyYW5zbGF0ZVRva2VuO1xyXG5cdC8qKiBJdCBub3RpZmllcyB0aGUgaHRtbCBpcyBnZW5lcmF0ZWQqL1xyXG5cdEBPdXRwdXQoKSBvbkdlbmVyYXRlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG5cclxuXHQvKiogSXQgZW5hYmxlcyB0aGUgdmlzdWFsaXphdGlvbiBvZiBkZXN0aW5hdGlvbiAqL1xyXG5cdGVuYWJsZURlc3RpbmF0aW9uOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG5cdC8qKiBJdCBjb250YWlucyB0aGUgcHJvbSBjb2RlICovXHJcblx0cHJvbUNvZGlnbzogbnVtYmVyO1xyXG5cclxuXHQvKiogKi9cclxuXHRsVG9rZW5DYWxjdWxhdGVkOiBUb2tlbltdO1xyXG5cdC8qKiAqL1xyXG5cdGxGb3JtRmllbGRzVG9rZW46IGFueVtdO1xyXG5cdC8qKiAqL1xyXG5cdHVuaXF1ZVZlcmlmaWNhdGlvbkNvZGU6IHN0cmluZztcclxuXHQvKiogKi9cclxuXHRidWRnZXREdG9QcmltYXJ5OiBCdWRnZXREdG87XHJcblx0LyoqICovXHJcblx0YnVkZ2V0RHRvU2VjdW5kYXJ5OiBCdWRnZXREdG87XHJcblx0LyoqIEFzIHRoZSBsaXN0IG9mIHRva2VuIGFyZSBsb2FkZWQgZHluYW1pY2FsbHksIHRoaXMgbWFuYWdlIHRoYXQgb25seSByZXBsYWNlIHRoZSBpbmZvIG9uY2UuICovXHJcblx0YWxyZWFkeUNhbGxSZXBsYWNlVG9rZW5zOiBib29sZWFuO1xyXG5cclxuXHRldmFsdWF0aW9uOiBFdmFsdWF0aW9uO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHByaXZhdGUgY3VycmVuY3lQaXBlOiBDdXJyZW5jeVBpcGUsXHJcblx0XHRwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSB0b2FzdHJTZXJ2aWNlOiBUb2FzdHJTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBhdXRoZW50aWNhdGlvblNlcnZpY2U6IEF1dGhlbnRpY2F0aW9uU2VydmljZSxcclxuXHRcdHByaXZhdGUgc2VzaW9uU2VydmljZTogU2VzaW9uU2VydmljZVxyXG5cdCkge31cclxuXHJcblx0bmdPbkluaXQoKSB7XHJcblx0XHR0aGlzLmxUb2tlbkNhbGN1bGF0ZWQgPSBudWxsO1xyXG5cdFx0dGhpcy5sRm9ybUZpZWxkc1Rva2VuID0gbnVsbDtcclxuXHRcdHRoaXMuYnVkZ2V0RHRvUHJpbWFyeSA9IG51bGw7XHJcblx0XHR0aGlzLmJ1ZGdldER0b1NlY3VuZGFyeSA9IG51bGw7XHJcblx0XHR0aGlzLmV2YWx1YXRpb24gPSBudWxsO1xyXG5cdH1cclxuXHJcblx0LyoqIEl0IG1hbmFnZXMgdGhlIGNoYW5nZSBvZiB0aGUgZXZlcnkgQElucHV0ICovXHJcblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cdFx0Ly8gRXZlcnkgdGltZSB0aGF0IGlucHV0IHZhbHVlcyBjaGFuZ2UsIGNhbGwgbmV3IHZlcmlmaWNhdGlvbiBjb2RlXHJcblx0XHR0aGlzLnVuaXF1ZVZlcmlmaWNhdGlvbkNvZGUgPSBudWxsO1xyXG5cdFx0Y29uc3QgdGVtcGxhdGU6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMudGVtcGxhdGU7XHJcblx0XHRjb25zdCBkYXRhOiBTaW1wbGVDaGFuZ2UgPSBjaGFuZ2VzLmRhdGE7XHJcblxyXG5cdFx0aWYgKHRlbXBsYXRlICYmIHRlbXBsYXRlLmN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLnRlbXBsYXRlID0gdGVtcGxhdGUuY3VycmVudFZhbHVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGRhdGEgJiYgZGF0YS5jdXJyZW50VmFsdWUpIHtcclxuXHRcdFx0dGhpcy5kYXRhID0gZGF0YS5jdXJyZW50VmFsdWU7XHJcblx0XHRcdHRoaXMucHJvbUNvZGlnbyA9IHRoaXMuZGF0YS5wcm9tQ29kaWdvO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZGF0YSkge1xyXG5cdFx0XHR0aGlzLmJ1ZGdldER0b1ByaW1hcnkgPSB0aGlzLmRhdGEuYnVkZ2V0RHRvUHJpbWFyeSA/IHRoaXMuZGF0YS5idWRnZXREdG9QcmltYXJ5IDogbnVsbDtcclxuXHRcdFx0dGhpcy5idWRnZXREdG9TZWN1bmRhcnkgPSB0aGlzLmRhdGEuYnVkZ2V0RHRvU2VjdW5kYXJ5XHJcblx0XHRcdFx0PyB0aGlzLmRhdGEuYnVkZ2V0RHRvU2VjdW5kYXJ5XHJcblx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHR0aGlzLmV2YWx1YXRpb24gPSB0aGlzLmRhdGEuZXZhbHVhdGlvbjtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmRhdGEgJiYgdGhpcy50ZW1wbGF0ZSAmJiB0aGlzLnByb21Db2RpZ28pIHtcclxuXHRcdFx0Y29uc3Qgc2VsZiA9IHRoaXM7XHJcblx0XHRcdHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cdFx0XHRcdHNlbGYuaW5pdCgpO1xyXG5cdFx0XHR9LCAzMDApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHQvKiogSXQgaW5pdGlhbGl6ZXMgdGhlIHByb2Nlc3Mgb2YgdHJhbnNsYXRpb24gKi9cclxuXHRwcml2YXRlIGluaXQoKSB7XHJcblx0XHR0aGlzLnRyYW5zbGF0ZVRva2Vucyh0aGlzLnRlbXBsYXRlLCB0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm0pO1xyXG5cdH1cclxuXHJcblx0dHJhbnNsYXRlQ2F0ZWdvcnkoY2F0ZWdvcnlOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0Y29uc3QgbGFuZ3VhZ2VCeURlZmF1bHQgPSAnZW4nO1xyXG5cdFx0Ly8gSWYgZG9uJ3QgZmluZCB0aGUgbGFuZywgZ2V0IGluIGVuLlxyXG5cdFx0bGV0IGNhdGVnb3J5TmFtZUJ5RGVmOiBzdHJpbmcgPSBjYXRlZ29yeU5hbWU7XHJcblx0XHRpZiAoY2F0ZWdvcnlOYW1lICYmIHRoaXMuZGF0YS5jYXRlZ29yaWVzICYmIHRoaXMuZGF0YS5pZGlvbWEpIHtcclxuXHRcdFx0Ly8gSWYgdGhlIGxvY2FsZSBzZWxlY3QgaXMgZXMsIHRoaXMgaXMgdGhlIGRhZnVsdCBjYXRlZ29yeSBsYW5ndWFnZVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdlcycpIHtcclxuXHRcdFx0XHRyZXR1cm4gY2F0ZWdvcnlOYW1lO1xyXG5cdFx0XHR9XHJcblx0XHRcdGZvciAoY29uc3QgY2F0ZWdvcnkgb2YgdGhpcy5kYXRhLmNhdGVnb3JpZXMpIHtcclxuXHRcdFx0XHRpZiAoY2F0ZWdvcnkubGlzdGFSdWJyb0lkaW9tYSAmJiBjYXRlZ29yeS5ydWJSdWJybyA9PT0gY2F0ZWdvcnlOYW1lKSB7XHJcblx0XHRcdFx0XHRmb3IgKGNvbnN0IGxhbmd1YWdlIG9mIGNhdGVnb3J5Lmxpc3RhUnVicm9JZGlvbWEpIHtcclxuXHRcdFx0XHRcdFx0aWYgKGxhbmd1YWdlLnJ1YmlJZGlvbWEgPT09IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlKSB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGxhbmd1YWdlLnJ1YmlUcmFkdWNjaW9uO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGlmIChsYW5ndWFnZS5ydWJpSWRpb21hID09PSBsYW5ndWFnZUJ5RGVmYXVsdCkge1xyXG5cdFx0XHRcdFx0XHRcdGNhdGVnb3J5TmFtZUJ5RGVmID0gbGFuZ3VhZ2UucnViaVRyYWR1Y2Npb247XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGNhdGVnb3J5TmFtZUJ5RGVmO1xyXG5cdH1cclxuXHJcblx0dHJhbnNsYXRlVG9rZW5zKGh0bWw6IHN0cmluZywgbGlzdERhdGE6IGFueSkge1xyXG5cdFx0dGhpcy5hbHJlYWR5Q2FsbFJlcGxhY2VUb2tlbnMgPSBmYWxzZTtcclxuXHRcdGNvbnN0IGxUb2tlbnM6IGFueVtdID0gdGhpcy5nZXRMaXN0VG9rZW5zKGh0bWwpO1xyXG5cdFx0aWYgKCFsVG9rZW5zIHx8IE9iamVjdC5rZXlzKGxUb2tlbnMpLmxlbmd0aCA9PT0gMCkge1xyXG5cdFx0XHR0aGlzLnRlbXBsYXRlID0gaHRtbDtcclxuXHRcdH1cclxuXHRcdHRoaXMuY2FsbExpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdH1cclxuXHJcblx0Y2FsbExpc3RUb2tlbnMobFRva2VuczogYW55W10sIGh0bWw6IHN0cmluZywgbGlzdERhdGE6IGFueSkge1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXSAmJlxyXG5cdFx0XHRPYmplY3Qua2V5cyhsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXSkubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmICh0aGlzLmxUb2tlbkNhbGN1bGF0ZWQpIHtcclxuXHRcdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy50b2tlblNlcnZpY2UuZ2V0TGlzdEJ5UHJvbUNvZGlnbyh0aGlzLnByb21Db2RpZ28pLnN1YnNjcmliZShcclxuXHRcdFx0XHRcdChsVG9rZW5DYWxjdWxhdGVkOiBUb2tlbltdKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubFRva2VuQ2FsY3VsYXRlZCA9IGxUb2tlbkNhbGN1bGF0ZWQ7XHJcblx0XHRcdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY2FsbExpc3RUb2tlbnMgLWdldExpc3RCeVByb21Db2RpZ28nLCBlcnJvcik7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgZ2VuZXJhbmRvIGNhcnRhJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy52YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNXSAmJlxyXG5cdFx0XHRPYmplY3Qua2V5cyhsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNXSkubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGlmICh0aGlzLmxGb3JtRmllbGRzVG9rZW4pIHtcclxuXHRcdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy50b2tlblNlcnZpY2UuZ2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUodGhpcy5wcm9tQ29kaWdvKS50aGVuKFxyXG5cdFx0XHRcdFx0KGxGb3JtRmllbGRzVG9rZW46IGFueVtdKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMubEZvcm1GaWVsZHNUb2tlbiA9IGxGb3JtRmllbGRzVG9rZW47XHJcblx0XHRcdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY2FsbExpc3RUb2tlbnMgLWdldEZvcm1GaWVsZHNCeVByb21Db2RlJywgZXJyb3IpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoJ0Vycm9yIGdlbmVyYW5kbyBjYXJ0YScpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0bFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXSAmJlxyXG5cdFx0XHRPYmplY3Qua2V5cyhsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdKS5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSAhPT0gbnVsbCkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjb25zdCB0b2tlblZlcmlmaWNhdGlvbkNvZGU6IGFueVtdID0gbFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXS5maW5kKFxyXG5cdFx0XHRcdFx0KHRva2VuKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHN1YlRva2VuOiBzdHJpbmdbXSA9IHRva2VuLmtleVxyXG5cdFx0XHRcdFx0XHRcdC5yZXBsYWNlKCd7JywgJycpXHJcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoJ30nLCAnJylcclxuXHRcdFx0XHRcdFx0XHQuc3BsaXQoJ18nKTtcclxuXHRcdFx0XHRcdFx0cmV0dXJuIChcclxuXHRcdFx0XHRcdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFx0XHRcdFx0VG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0NPRElHT19WRVJJRklDQUNJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0Ly8gT25seSBpZiB0aGUgc3RhdGljIHRva2VuIGlzIHRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIGNvZGVcclxuXHRcdFx0XHRpZiAodG9rZW5WZXJpZmljYXRpb25Db2RlICYmIE9iamVjdC5rZXlzKHRva2VuVmVyaWZpY2F0aW9uQ29kZSkubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRcdFx0bGV0IHBsaVVzdWFyaW9PYmplY3QgPSBBdXRoZW50aWNhdGlvblV0aWwuZ2V0UGxpVXN1YXJpbygpO1xyXG5cdFx0XHRcdFx0aWYgKCFwbGlVc3VhcmlvT2JqZWN0KSB7XHJcblx0XHRcdFx0XHRcdHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSA9ICcnO1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFxyXG5cdFx0XHRcdFx0XHRcdCdObyBzZSBsb2dybyBjb25zdWx0YXIgZWwgdXN1YXJpbyBwYXJhIGNvbnN1bHRhciBlbCB0b2tlbicsXHJcblx0XHRcdFx0XHRcdFx0cGxpVXN1YXJpb09iamVjdFxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBwbGlVc3VhcmlvOiBQbGlVc3VhcmlvID0gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0XHRcdFx0XHRuZXcgUGxpVXN1YXJpbygpLFxyXG5cdFx0XHRcdFx0XHRcdEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGxpVXN1YXJpb09iamVjdCkpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMuYXV0aGVudGljYXRpb25TZXJ2aWNlLmdldFRva2VuQnlMb2dpbihwbGlVc3VhcmlvLnVzdUxvZ2luKS5zdWJzY3JpYmUoXHJcblx0XHRcdFx0XHRcdFx0KHNlc2lvbjogc2VzaW9uKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBUcnkgdG8gZ2V0IHRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIGNvZGUgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBzZXNpb24gaWYgaXMgbm90IGEgdmFsaWQgdmFsdWVcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNlc2lvblZhbHVlID0gc2VzaW9uID8gc2VzaW9uLnNlc2lvbiA6ICcxJztcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxpVXN1YXJpby51c3VMb2dpbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0c2VzaW9uVmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxUb2tlbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGh0bWwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3REYXRhXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnRXJyb3IgY29uc3VsdGFuZG8gZWwgbG9naW4gZW4gUExJUywgZ2V0VG9rZW5CeUxvZ2luJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHQvLyBUcnkgdG8gZ2V0IHRoZSB1bmlxdWUgdmVyaWZpY2F0aW9uIGNvZGUgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBzZXNpb25cclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuZ2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZShcclxuXHRcdFx0XHRcdFx0XHRcdFx0cGxpVXN1YXJpby51c3VMb2dpbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0JzEnLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsVG9rZW5zLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRodG1sLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0RGF0YVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vdGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKFwiRXJyb3IgZ2VuZXJhbmRvIGNhcnRhXCIpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy51bmlxdWVWZXJpZmljYXRpb25Db2RlID0gJyc7XHJcblx0XHRcdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBHZXQgdGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gY29kZSBhbmQgY2FsbCB2YWxpZGF0ZUxpc3RUb2tlbnMgbWV0aG9kXHJcblx0ICovXHJcblx0Z2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZShcclxuXHRcdHVzdUxvZ2luOiBzdHJpbmcsXHJcblx0XHRzZXNpb246IHN0cmluZyxcclxuXHRcdGxUb2tlbnM6IGFueVtdLFxyXG5cdFx0aHRtbDogc3RyaW5nLFxyXG5cdFx0bGlzdERhdGE6IGFueVxyXG5cdCkge1xyXG5cdFx0dGhpcy50b2tlblNlcnZpY2UuZ2V0VW5pcXVlVmVyaWZpY2F0aW9uQ29kZSh1c3VMb2dpbiwgc2VzaW9uKS5zdWJzY3JpYmUoXHJcblx0XHRcdCh1bmlxdWVDb2RlVmFsdWU6IGFueSkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHVuaXF1ZUNvZGU6IHN0cmluZyA9IHVuaXF1ZUNvZGVWYWx1ZS5jb2RpZ29VbmljbztcclxuXHRcdFx0XHR0aGlzLnVuaXF1ZVZlcmlmaWNhdGlvbkNvZGUgPVxyXG5cdFx0XHRcdFx0dW5pcXVlQ29kZS5zdWJzdHJpbmcoMCwgNCkgKyAnICcgKyB1bmlxdWVDb2RlLnN1YnN0cmluZyg0LCA4KTtcclxuXHRcdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHRcdH0sXHJcblx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNhbGxMaXN0VG9rZW5zIC1nZXRMaXN0QnlQcm9tQ29kaWdvJywgZXJyb3IpO1xyXG5cdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgZ2VuZXJhbmRvIGNhcnRhJyk7XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHR2YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VuczogYW55W10sIGh0bWw6IHN0cmluZywgbGlzdERhdGE6IGFueSkge1xyXG5cdFx0bGV0IGZpbmlzaExvYWRMaXN0Rm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0bGV0IGZpbmlzaExvYWRMaXN0Q2FsY3VsYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cdFx0bGV0IGZpbmlzaExvYWRMaXN0U3RhdGljOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRjb25zdCBmaW5pc2hMb2FkTGlzdEJ1ZGdldDogYm9vbGVhbiA9IHRydWU7XHJcblx0XHRpZiAoXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dICYmXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdEZvcm0gPSB0aGlzLmxGb3JtRmllbGRzVG9rZW4gPyB0cnVlIDogZmFsc2U7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdEZvcm0gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXSAmJlxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXS5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RDYWxjdWxhdGVkID0gdGhpcy5sVG9rZW5DYWxjdWxhdGVkID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RDYWxjdWxhdGVkID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0bFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXSAmJlxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdFN0YXRpYyA9IHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSAhPT0gbnVsbCA/IHRydWUgOiBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZpbmlzaExvYWRMaXN0U3RhdGljID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGlmIChcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RGb3JtICYmXHJcblx0XHRcdGZpbmlzaExvYWRMaXN0QnVkZ2V0ICYmXHJcblx0XHRcdGZpbmlzaExvYWRMaXN0U3RhdGljICYmXHJcblx0XHRcdGZpbmlzaExvYWRMaXN0Q2FsY3VsYXRlZCAmJlxyXG5cdFx0XHQhdGhpcy5hbHJlYWR5Q2FsbFJlcGxhY2VUb2tlbnNcclxuXHRcdCkge1xyXG5cdFx0XHR0aGlzLmFscmVhZHlDYWxsUmVwbGFjZVRva2VucyA9IHRydWU7XHJcblx0XHRcdHRoaXMucmVwbGFjZVRva2Vuc1dpdGhEYXRhKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdHJlcGxhY2VUb2tlbnNXaXRoRGF0YShsVG9rZW5zOiBhbnlbXSwgaHRtbDogc3RyaW5nLCBsaXN0RGF0YTogYW55KSB7XHJcblx0XHRjb25zdCBsRGF0YU9yZzogYW55W10gPSBbXTtcclxuXHRcdGNvbnN0IGxGb3JtRmllbGRzVG9rZW5Pcmc6IGFueVtdID0gW107XHJcblx0XHRpZiAoXHJcblx0XHRcdChsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNXSB8fFxyXG5cdFx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdKSAmJlxyXG5cdFx0XHRsaXN0RGF0YVxyXG5cdFx0KSB7XHJcblx0XHRcdGZvciAoY29uc3QgZGF0YUZvcm0gaW4gbGlzdERhdGEpIHtcclxuXHRcdFx0XHRsRGF0YU9yZ1tkYXRhRm9ybS50b0xvd2VyQ2FzZSgpXSA9IGxpc3REYXRhW2RhdGFGb3JtXTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5sRm9ybUZpZWxkc1Rva2VuKSB7XHJcblx0XHRcdFx0Zm9yIChjb25zdCBmb3JtRmllbGRUb2tlbiBvZiB0aGlzLmxGb3JtRmllbGRzVG9rZW4pIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgdmFsdWVzRmllbGQgb2YgZm9ybUZpZWxkVG9rZW4udmFsdWUpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qga2V5VG9rZW46IHN0cmluZyA9XHJcblx0XHRcdFx0XHRcdFx0JyR7JyArIGZvcm1GaWVsZFRva2VuLnRpdGxlLmtleSArICdfJyArIHZhbHVlc0ZpZWxkLmtleSArICd9JztcclxuXHRcdFx0XHRcdFx0bEZvcm1GaWVsZHNUb2tlbk9yZ1trZXlUb2tlbl0gPSB2YWx1ZXNGaWVsZDtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnN0IGxUb2tlbnNDYWxjdWxhdGVkOiBhbnlbXSA9IFtdO1xyXG5cdFx0aWYgKGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdKSB7XHJcblx0XHRcdGlmICh0aGlzLmxUb2tlbkNhbGN1bGF0ZWQpIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IHRva2VuQ2FsIG9mIHRoaXMubFRva2VuQ2FsY3VsYXRlZCkge1xyXG5cdFx0XHRcdFx0bFRva2Vuc0NhbGN1bGF0ZWRbVXRpbFN0cmluZy5yZXBsYWNlQWNjZW50U3BhY2VzT3RoZXJzKHRva2VuQ2FsLm5hbWUpXSA9XHJcblx0XHRcdFx0XHRcdHRva2VuQ2FsO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0bGV0IHR5cGVUb2tlbjogYW55O1xyXG5cdFx0Y29uc3QgdG9rZW5UeXBlVHJhbnNsYXRlZDogYW55ID0gW107XHJcblx0XHRmb3IgKHR5cGVUb2tlbiBpbiBsVG9rZW5zKSB7XHJcblx0XHRcdGlmICghbFRva2Vuc1t0eXBlVG9rZW5dKSB7XHJcblx0XHRcdFx0Y29udGludWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdG9rZW5zVHlwZTogYW55W10gPSBsVG9rZW5zW3R5cGVUb2tlbl07XHJcblx0XHRcdHRva2VuVHlwZVRyYW5zbGF0ZWRbdHlwZVRva2VuXSA9IFtdO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vuc1R5cGUpIHtcclxuXHRcdFx0XHRsZXQgdG9rZW5UcmFuc2xhdGVkID0gbnVsbDtcclxuXHRcdFx0XHRjb25zdCBzdWJUb2tlbjogc3RyaW5nW10gPSB0b2tlbi5rZXkucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpLnNwbGl0KCdfJyk7XHJcblx0XHRcdFx0c3dpdGNoICh0eXBlVG9rZW4pIHtcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk06IC8vIEZvcm1cclxuXHRcdFx0XHRcdFx0bGV0IHZhbHVlRGF0YSA9IG51bGw7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFPcmdLZXkgPSBzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0XHQvLyBQdXQgdGhpcyBrZXkgYmVjYXVzZSB0aGVyZSBubyBvdGhlciB3YXkgdG8gZGlmZmVyZW50aWF0ZSB0aGUgc2FtZSBrZXkgaW4gZGlmZmVyZW50cyBmb3Jtc1xyXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhT3JnS2V5QnlGb3JtID1cclxuXHRcdFx0XHRcdFx0XHRzdWJUb2tlblswXS5zdWJzdHJpbmcoMSkgKyAnXycgKyBzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpO1xyXG5cdFx0XHRcdFx0XHRjb25zdCBkYXRhT3JnVmFsdWUgPSBsRGF0YU9yZy5oYXNPd25Qcm9wZXJ0eShkYXRhT3JnS2V5KVxyXG5cdFx0XHRcdFx0XHRcdD8gbERhdGFPcmdbZGF0YU9yZ0tleV1cclxuXHRcdFx0XHRcdFx0XHQ6IGxEYXRhT3JnLmhhc093blByb3BlcnR5KGRhdGFPcmdLZXlCeUZvcm0pXHJcblx0XHRcdFx0XHRcdFx0PyBsRGF0YU9yZ1tkYXRhT3JnS2V5QnlGb3JtXVxyXG5cdFx0XHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0XHRcdFx0Ly8gY29uc3QgZGF0YU9yZ1ZhbHVlQnlGb3JtID0gbERhdGFPcmdbZGF0YU9yZ0tleUJ5Rm9ybV07XHJcblx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRzdWJUb2tlbi5sZW5ndGggPT09IDMgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZGF0YU9yZ1ZhbHVlICE9PSAndW5kZWZpbmVkJyAmJlxyXG5cdFx0XHRcdFx0XHRcdGRhdGFPcmdWYWx1ZSAhPT0gbnVsbCAmJlxyXG5cdFx0XHRcdFx0XHRcdGRhdGFPcmdWYWx1ZS5oYXNPd25Qcm9wZXJ0eShzdWJUb2tlblsyXSlcclxuXHRcdFx0XHRcdFx0KSB7XHJcblx0XHRcdFx0XHRcdFx0dmFsdWVEYXRhID0gZGF0YU9yZ1ZhbHVlW3N1YlRva2VuWzJdXTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0XHRcdFx0XHRzdWJUb2tlbi5sZW5ndGggPT09IDIgJiZcclxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZGF0YU9yZ1ZhbHVlICE9PSAndW5kZWZpbmVkJyAmJlxyXG5cdFx0XHRcdFx0XHRcdGRhdGFPcmdWYWx1ZSAhPT0gbnVsbFxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBkYXRhT3JnVmFsdWU7XHJcblx0XHRcdFx0XHRcdFx0aWYgKGxGb3JtRmllbGRzVG9rZW5PcmdbdG9rZW4ua2V5XSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dmFsdWVEYXRhID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0VmFsdWVGcm9tRm9ybUZpZWxkKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuT3JnW3Rva2VuLmtleV0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlRGF0YVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0dmFsdWVEYXRhID0gdmFsdWVEYXRhID8gdmFsdWVEYXRhIDogJyc7XHJcblx0XHRcdFx0XHRcdHRva2VuVHJhbnNsYXRlZCA9IHZhbHVlRGF0YTtcclxuXHRcdFx0XHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgdmFsdWVEYXRhKTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVQ6IC8vQnVkZ2V0XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJ1ZGdldFJlc29sdmVUb2tlbiA9IHRoaXMucmVzb2x2ZUJ1ZGdldFRva2VuKGh0bWwsIHRva2VuLCBzdWJUb2tlbik7XHJcblx0XHRcdFx0XHRcdGh0bWwgPSBidWRnZXRSZXNvbHZlVG9rZW4uaHRtbDtcclxuXHRcdFx0XHRcdFx0dG9rZW5UcmFuc2xhdGVkID0gYnVkZ2V0UmVzb2x2ZVRva2VuLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMOiAvL1Rhc2tcclxuXHRcdFx0XHRcdFx0Y29uc3QgdGFza1Jlc29sdmVUb2tlbiA9IHRoaXMucmVzb2x2ZVRhc2tva2VuKGh0bWwsIHRva2VuLCBzdWJUb2tlbik7XHJcblx0XHRcdFx0XHRcdGh0bWwgPSB0YXNrUmVzb2x2ZVRva2VuLmh0bWw7XHJcblx0XHRcdFx0XHRcdHRva2VuVHJhbnNsYXRlZCA9IHRhc2tSZXNvbHZlVG9rZW4udmFsdWU7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDOiAvL1N0YXRpY1xyXG5cdFx0XHRcdFx0XHRjb25zdCBzdGF0aWNSZXNvbHZlVG9rZW4gPSB0aGlzLnJlc29sdmVTdGF0aWNUb2tlbihodG1sLCB0b2tlbiwgc3ViVG9rZW4pO1xyXG5cdFx0XHRcdFx0XHRodG1sID0gc3RhdGljUmVzb2x2ZVRva2VuLmh0bWw7XHJcblx0XHRcdFx0XHRcdHRva2VuVHJhbnNsYXRlZCA9IHN0YXRpY1Jlc29sdmVUb2tlbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEOiAvL0NhbGN1bGF0ZWRcclxuXHRcdFx0XHRcdFx0Ly8gUmVwbGFjZXMgZGUgdG9rZW5zIG9mIHRoZSBmb3JtdWxhXHJcblx0XHRcdFx0XHRcdGNvbnN0IHRva2VuTmFtZTogc3RyaW5nID0gbFRva2Vuc0NhbGN1bGF0ZWRbc3ViVG9rZW5bMV1dLm5hbWU7XHJcblx0XHRcdFx0XHRcdGxldCBmb3JtdWxhOiBzdHJpbmcgPSBsVG9rZW5zQ2FsY3VsYXRlZFtzdWJUb2tlblsxXV0uZm9ybXVsYTtcclxuXHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHQvL0FRVUlcclxuXHRcdFx0XHRcdFx0XHRmb3JtdWxhID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2Vuc0Zyb21MaXN0T2JqZWN0KFxyXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5OYW1lLFxyXG5cdFx0XHRcdFx0XHRcdFx0Zm9ybXVsYSxcclxuXHRcdFx0XHRcdFx0XHRcdGxEYXRhT3JnXHJcblx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcclxuXHRcdFx0XHRcdFx0XHRmb3JtdWxhID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yLmVycm9yID8gZXJyb3IuZXJyb3IgOiBlcnJvcik7XHJcblx0XHRcdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLndhcm5pbmcoZXJyb3IubWVzc2FnZSwgZXJyb3IudGl0dGxlKTtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Ly8gVHJ5IHRvIGV2YWx1YXRlIHRoZSBmb3JtdWxhXHJcblx0XHRcdFx0XHRcdGxldCByZXN1bHQ6IGFueSA9IG51bGw7XHJcblx0XHRcdFx0XHRcdGlmIChmb3JtdWxhICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0dHJ5IHtcclxuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdCA9IGZvcm11bGEuc3RhcnRzV2l0aCgnZmlsZTovLycpXHJcblx0XHRcdFx0XHRcdFx0XHRcdD8gXCI8aW1nIHdpZHRoPScyNTBweCcgaGVpZ2h0PSdhdXRvJyBzcmM9J1wiICsgZm9ybXVsYSArIFwiJy8+XCJcclxuXHRcdFx0XHRcdFx0XHRcdFx0OiBldmFsKGZvcm11bGEpO1xyXG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdFcnJvciBldmFsdWF0aW5nIHRoZSBmb3JtdWxhLicsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxUb2tlbnNDYWxjdWxhdGVkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzdWJUb2tlbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0ZVxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0J05vIHNlIGxvZ3JvIGV2YWx1YXIgbGEgZm9ybXVsYXIgZGVsIHRva2VuICcgKyB0b2tlbk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdFcnJvciEnXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHRpZiAocmVzdWx0ICE9PSBudWxsKSB7XHJcblx0XHRcdFx0XHRcdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCByZXN1bHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5UcmFuc2xhdGVkID0gcmVzdWx0O1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dG9rZW5UeXBlVHJhbnNsYXRlZFt0eXBlVG9rZW5dW3Rva2VuLmtleV0gPSB0b2tlblRyYW5zbGF0ZWQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHRoaXMub25HZW5lcmF0ZS5lbWl0KHtcclxuXHRcdFx0aHRtbDogaHRtbCxcclxuXHRcdFx0dG9rZW5UeXBlVHJhbnNsYXRlZDogdG9rZW5UeXBlVHJhbnNsYXRlZFxyXG5cdFx0fSk7XHJcblx0XHQvLyB9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBUcnkgdG8gZmluZCB0aGUgYnVkZ2V0IGluZm8gdG8gdHJhbnNsYXRlIHRoZSB0b2tlbi5cclxuXHQgKiBAcGFyYW0gaHRtbFxyXG5cdCAqIEBwYXJhbSB0b2tlblxyXG5cdCAqIEBwYXJhbSBzdWJUb2tlblxyXG5cdCAqL1xyXG5cdHJlc29sdmVCdWRnZXRUb2tlbihodG1sOiBzdHJpbmcsIHRva2VuOiBhbnksIHN1YlRva2VuOiBzdHJpbmdbXSk6IGFueSB7XHJcblx0XHRsZXQgdHByZXNDb2RpZ286IG51bWJlciA9IE51bWJlcihzdWJUb2tlblsxXSk7XHJcblx0XHRsZXQgdG9rZW5WYWx1ZTogc3RyaW5nID0gc3ViVG9rZW5bMl07XHJcblx0XHRsZXQgYnVkZ2V0RHRvOiBCdWRnZXREdG8gPSBudWxsO1xyXG5cdFx0bGV0IGlkVG90YWxCdWRnZXQ6IHN0cmluZyA9IG51bGw7XHJcblx0XHRpZiAoXHJcblx0XHRcdHRoaXMuYnVkZ2V0RHRvUHJpbWFyeSAmJlxyXG5cdFx0XHR0aGlzLmJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0ICYmXHJcblx0XHRcdHRwcmVzQ29kaWdvID09IEVUaXBvUHJlc3VwdWVzdG8uUFJJTUFSWVxyXG5cdFx0KSB7XHJcblx0XHRcdGJ1ZGdldER0byA9IHRoaXMuYnVkZ2V0RHRvUHJpbWFyeTtcclxuXHRcdFx0aWRUb3RhbEJ1ZGdldCA9ICdwbGktdG9rZW4tcHJpbmNpcGFsLWJ1ZGdldC10b3RhbC1zdW1tYXJ5JztcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHRoaXMuYnVkZ2V0RHRvU2VjdW5kYXJ5ICYmXHJcblx0XHRcdHRoaXMuYnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldCAmJlxyXG5cdFx0XHR0cHJlc0NvZGlnbyA9PSBFVGlwb1ByZXN1cHVlc3RvLlNFQ09OREFSWVxyXG5cdFx0KSB7XHJcblx0XHRcdGJ1ZGdldER0byA9IHRoaXMuYnVkZ2V0RHRvU2VjdW5kYXJ5O1xyXG5cdFx0XHRpZFRvdGFsQnVkZ2V0ID0gJ3BsaS10b2tlbi1zZWN1bmRhcnktYnVkZ2V0LXRvdGFsLXN1bW1hcnknO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGJ1ZGdldER0byA9PT0gbnVsbCB8fCAhYnVkZ2V0RHRvLmJ1ZGdldCkge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKFxyXG5cdFx0XHRcdCdObyBzZSBsb2dybyBlbmNvbnRyYXIgZWwgcHJlc3VwdWVzdG8gZGVsIHRva2VuLicsXHJcblx0XHRcdFx0dG9rZW4sXHJcblx0XHRcdFx0dGhpcy5idWRnZXREdG9QcmltYXJ5LFxyXG5cdFx0XHRcdHRoaXMuYnVkZ2V0RHRvU2VjdW5kYXJ5XHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0aHRtbDogaHRtbCxcclxuXHRcdFx0XHR2YWx1ZTogbnVsbFxyXG5cdFx0XHR9O1xyXG5cdFx0fVxyXG5cdFx0bGV0IHZhbHVlRGF0YSA9IG51bGw7XHJcblx0XHRjb25zdCBhcHBsaWNhdGlvblByb2Nlc3MgPVxyXG5cdFx0XHR0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0FNT1VOVCB8fFxyXG5cdFx0XHR0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFMgfHxcclxuXHRcdFx0dG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkc7XHJcblx0XHRjb25zdCBsZWdhbGl6YXRpb25Qcm9jZXNzID1cclxuXHRcdFx0dG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UIHx8XHJcblx0XHRcdHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFMgfHxcclxuXHRcdFx0dG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfRklOQU5DSU5HO1xyXG5cclxuXHRcdGlmICh0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9UT1RBTF9BTU9VTlQpIHtcclxuXHRcdFx0dmFsdWVEYXRhID1cclxuXHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0ICYmIGJ1ZGdldER0by5idWRnZXQuc3VtbWFyeVxyXG5cdFx0XHRcdFx0PyB0aGlzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0oXHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0RHRvLmJ1ZGdldC5zdW1tYXJ5LmJ1ZGdldFRvdGFsLFxyXG5cdFx0XHRcdFx0XHRcdCdkZWZhdWx0JyxcclxuXHRcdFx0XHRcdFx0XHQnJyxcclxuXHRcdFx0XHRcdFx0XHQnMS4wLTAnXHJcblx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdDogMDtcclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfUkVTVU1FX0NBVEVHT1JZX1lFQVIpIHtcclxuXHRcdFx0Ly8gdGhpcy5hZGRJbmZvVG9rZW5SZXN1bWVDYXRlZ29yeVllYXIodHByZXNDb2RpZ28sIGlkVG90YWxCdWRnZXQsIGJ1ZGdldER0byk7XHJcblx0XHRcdHRoaXMuYWRkSW5mb1Rva2VuUmVzdW1lQ2F0ZWdvcnlZZWFyKHRwcmVzQ29kaWdvLCBpZFRvdGFsQnVkZ2V0LCBidWRnZXREdG8pO1xyXG5cdFx0XHRjb25zdCBwbGlUb2tlblRvdGFsQnVkZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRUb3RhbEJ1ZGdldCk7XHJcblx0XHRcdGlmIChwbGlUb2tlblRvdGFsQnVkZ2V0KSB7XHJcblx0XHRcdFx0dmFsdWVEYXRhID0gdGhpcy5yZW1vdmVDb21tZW50c0h0bWwocGxpVG9rZW5Ub3RhbEJ1ZGdldC5pbm5lckhUTUwpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnNvbGUubG9nKCdwbGlUb2tlblRvdGFsQnVkZ2V0IC0gTlVMTCcsIHBsaVRva2VuVG90YWxCdWRnZXQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19TVEFSVCkge1xyXG5cdFx0XHR2YWx1ZURhdGEgPVxyXG5cdFx0XHRcdGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdTdGFydFxyXG5cdFx0XHRcdFx0PyBidWRnZXREdG8uYnVkZ2V0LmZpbmFuY2luZ1N0YXJ0XHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihcclxuXHRcdFx0XHRodG1sLFxyXG5cdFx0XHRcdHRva2VuLnZhbHVlLFxyXG5cdFx0XHRcdHZhbHVlRGF0YSxcclxuXHRcdFx0XHR0aGlzLmRhdGE/LmlkaW9tYT8ubG9jYWxlXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0ZFQ0hBX0ZJTkFOQ0lOR19FTkQpIHtcclxuXHRcdFx0dmFsdWVEYXRhID1cclxuXHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0ICYmIGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nRW5kXHJcblx0XHRcdFx0XHQ/IGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nRW5kXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihcclxuXHRcdFx0XHRodG1sLFxyXG5cdFx0XHRcdHRva2VuLnZhbHVlLFxyXG5cdFx0XHRcdHZhbHVlRGF0YSxcclxuXHRcdFx0XHR0aGlzLmRhdGE/LmlkaW9tYT8ubG9jYWxlXHJcblx0XHRcdCk7XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfRFVSQVRJT05fU1RVRElFUykge1xyXG5cdFx0XHR2YWx1ZURhdGEgPVxyXG5cdFx0XHRcdGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5zdHVkeVN0YXJ0ICYmIGJ1ZGdldER0by5idWRnZXQuc3R1ZHlFbmRcclxuXHRcdFx0XHRcdD8gRGF0ZVV0aWwuZWxhcHNlZE1vbnRocyhcclxuXHRcdFx0XHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0LnN0dWR5U3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0RHRvLmJ1ZGdldC5zdHVkeUVuZFxyXG5cdFx0XHRcdFx0ICApICsgMVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19GSU5BTkNJTkdfRFVSQVRJT04pIHtcclxuXHRcdFx0dmFsdWVEYXRhID1cclxuXHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0ICYmIGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nRW5kICYmIGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nU3RhcnRcclxuXHRcdFx0XHRcdD8gRGF0ZVV0aWwuZWxhcHNlZE1vbnRocyhcclxuXHRcdFx0XHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0LmZpbmFuY2luZ1N0YXJ0LFxyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nRW5kXHJcblx0XHRcdFx0XHQgICkgKyAxXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0fSBlbHNlIGlmICh0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5MRUdBTElaQVRJT05fT1JfQVBQTElDQVRJT05fVE9UQUxfRklOQU5DSU5HKSB7XHJcblx0XHRcdC8vIEpNUCAtIE1hbnRpcyA2Njc0IC0gQWRkIGxvZ2ljIHRvIGxlZ2FsaXphdGlvbiBvciBhcHBsaWNhdGlvbiB0b3RhbCBmaW5hbmNpbmdcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHRoaXMuZGF0YSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24uYnVkZ2V0XHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdGNvbnN0IGJ1ZGdldCA9IHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldDtcclxuXHJcblx0XHRcdFx0aWYgKGJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzICYmIGJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzLnRvdGFsRmluYW5jaW5nKSB7XHJcblx0XHRcdFx0XHRjb25zdCB0b3RhbEZpbmFuY2luZyA9IE51bWJlcihidWRnZXQubGVnYWxpemF0aW9uUHJvY2Vzcy50b3RhbEZpbmFuY2luZyk7XHJcblx0XHRcdFx0XHR2YWx1ZURhdGEgPSB0b3RhbEZpbmFuY2luZyAqIDEuMDAzO1xyXG5cdFx0XHRcdH0gZWxzZSBpZiAoYnVkZ2V0LmFwcGxpY2F0aW9uUHJvY2VzcyAmJiBidWRnZXQuYXBwbGljYXRpb25Qcm9jZXNzLnRvdGFsRmluYW5jaW5nKSB7XHJcblx0XHRcdFx0XHR2YWx1ZURhdGEgPSBOdW1iZXIoYnVkZ2V0LmFwcGxpY2F0aW9uUHJvY2Vzcy50b3RhbEZpbmFuY2luZyk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHQoYXBwbGljYXRpb25Qcm9jZXNzIHx8IGxlZ2FsaXphdGlvblByb2Nlc3MpICYmXHJcblx0XHRcdHRoaXMuZGF0YSAmJlxyXG5cdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbiAmJlxyXG5cdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5idWRnZXRcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBHZXQgdGhlIHRvdGFsIGJ1ZGdldCBhbW91bnQgZGVwZW5kIG9mIHRoZSBwcm9jZXNzXHJcblx0XHRcdGNvbnN0IGFwcEJ1ZGdldFRvdGFsOiBBcHBsaWNhdGlvbkJ1ZGdldFRvdGFsID0gYXBwbGljYXRpb25Qcm9jZXNzXHJcblx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5idWRnZXQuYXBwbGljYXRpb25Qcm9jZXNzXHJcblx0XHRcdFx0OiB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5idWRnZXQubGVnYWxpemF0aW9uUHJvY2VzcztcclxuXHRcdFx0aWYgKGFwcEJ1ZGdldFRvdGFsICE9IHVuZGVmaW5lZCAmJiBhcHBCdWRnZXRUb3RhbCAhPSBudWxsKSB7XHJcblx0XHRcdFx0Ly8gbm8gbWF0dGVyIHRoZSBwcm9jZXNzLCB0aGUgY2xhc3MgaXMgdGhlIHNhbWVcclxuXHRcdFx0XHRzd2l0Y2ggKHRva2VuVmFsdWUpIHtcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UOlxyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UOlxyXG5cdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBhcHBCdWRnZXRUb3RhbC50b3RhbEFtb3VudDtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFM6XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9PV05fRk9VTkRTOlxyXG5cdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBhcHBCdWRnZXRUb3RhbC50b3RhbE93bkZ1bmRzO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfRklOQU5DSU5HOlxyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfRklOQU5DSU5HOlxyXG5cdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBhcHBCdWRnZXRUb3RhbC50b3RhbEZpbmFuY2luZztcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0lOU1VSQU5DRV9BTU9VTlQpIHtcclxuXHRcdFx0bGV0IHRvdGFsRmluYW5jaW5nID1cclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5idWRnZXQubGVnYWxpemF0aW9uUHJvY2VzcyAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzLnRvdGFsRmluYW5jaW5nO1xyXG5cdFx0XHR0b3RhbEZpbmFuY2luZyA9XHJcblx0XHRcdFx0dG90YWxGaW5hbmNpbmcgPT0gdW5kZWZpbmVkIHx8IHRvdGFsRmluYW5jaW5nID09IG51bGwgPyAwIDogTnVtYmVyKHRvdGFsRmluYW5jaW5nKTtcclxuXHRcdFx0Ly8gbGV0IHRvdGFsSW5zdXJhbmNlQW1vdW50ID0gdGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24udG90YWxJbnN1cmFuY2VBbW91bnQ7XHJcblx0XHRcdC8vIHRvdGFsSW5zdXJhbmNlQW1vdW50ID1cclxuXHRcdFx0Ly8gXHR0b3RhbEluc3VyYW5jZUFtb3VudCA9PSB1bmRlZmluZWQgfHwgdG90YWxJbnN1cmFuY2VBbW91bnQgPT0gbnVsbFxyXG5cdFx0XHQvLyBcdFx0PyAwXHJcblx0XHRcdC8vIFx0XHQ6IE51bWJlcih0b3RhbEluc3VyYW5jZUFtb3VudCk7XHJcblx0XHRcdHZhbHVlRGF0YSA9IHRvdGFsRmluYW5jaW5nICogMS4wMDM7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBXaGVuIHRoZSB0b2tlbiBjYW4ndCBiZSByZXNvbHZlXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ3Jlc29sdmVCdWRnZXRUb2tlbiAtTm8gc2UgbG9ncm8gcmVzb2x2ZXIgZWwgdG9rZW4gZGUgdGlwbyBwcmVzdXB1ZXN0bycpO1xyXG5cdFx0fVxyXG5cdFx0dmFsdWVEYXRhID0gdmFsdWVEYXRhID09PSBudWxsID8gJycgOiB2YWx1ZURhdGE7XHJcblx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCB2YWx1ZURhdGEpO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aHRtbDogaHRtbCxcclxuXHRcdFx0dmFsdWU6IHZhbHVlRGF0YVxyXG5cdFx0fTtcclxuXHR9XHJcblx0cmVzb2x2ZVRhc2tva2VuKGh0bWw6IHN0cmluZywgdG9rZW46IGFueSwgc3ViVG9rZW46IHN0cmluZ1tdKTogYW55IHtcclxuXHRcdGxldCB2YWx1ZVRhc2sgPSBudWxsO1xyXG5cdFx0aWYgKHN1YlRva2VuLmxlbmd0aCA+IDIpIHtcclxuXHRcdFx0bGV0IHRhc2tJZCA9IE51bWJlcihzdWJUb2tlblsyXSk7XHJcblx0XHRcdGxldCB0YXNrID0gdGhpcy5ldmFsdWF0aW9uLnRhc2tzLmZpbmQoKHQpID0+IHQuaWRUYXNrID09IHRhc2tJZCk7XHJcblx0XHRcdHZhbHVlVGFzayA9IHRhc2sucmVzdWx0O1xyXG5cdFx0fVxyXG5cdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgdmFsdWVUYXNrKTtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGh0bWw6IGh0bWwsXHJcblx0XHRcdHZhbHVlOiB2YWx1ZVRhc2tcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlU3RhdGljVG9rZW4oaHRtbDogc3RyaW5nLCB0b2tlbjogYW55LCBzdWJUb2tlbjogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0bGV0IHZhbHVlUmVwbGFjZTogYW55ID0gbnVsbDtcclxuXHRcdGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQ09ESUdPX1ZFUklGSUNBQ0lPTi50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gdGhpcy51bmlxdWVWZXJpZmljYXRpb25Db2RlO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCB0aGlzLnVuaXF1ZVZlcmlmaWNhdGlvbkNvZGUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQV9RVUlFTl9WQV9ESVJJR0lETy50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Ly8gaWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24pIHtcclxuXHRcdFx0aHRtbCA9IHRoaXMucmVzb2x2ZVN0YXRpY1Rva2Vuc0tleUFRdWllblZhRGlyaWdpZG8oaHRtbCwgdG9rZW4udmFsdWUpO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSAnJztcclxuXHRcdFx0Ly8gfVxyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfTEVUVEVSX1NJR04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnJlc29sdmVTdGF0aWNUb2tlbnNLZXlTaWduKGh0bWwsIHRva2VuLnZhbHVlLCBzdWJUb2tlbik7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9ICcnO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfU0FMVURPX0NPTVBMRU1FTlRBUklPLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbikge1xyXG5cdFx0XHRodG1sID0gdGhpcy5yZXNvbHZlU3RhdGljVG9rZW5zS2V5U2FsdWRvQ29tcGxlbWVudGFyaW8oaHRtbCwgdG9rZW4udmFsdWUpO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSAnJztcclxuXHRcdFx0Ly8gfVxyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfRkVDSEFfQUNUVUFMLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBuZXcgRGF0ZSgpO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBuZXcgRGF0ZSgpKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT0gVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1BBVFJPQ0lOQURPUi50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgcGF0Tm9tYnJlID1cclxuXHRcdFx0XHR0aGlzLmRhdGEucGxpUHJvbW9jaW9uICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLnBsaVByb21vY2lvbi5wbGlQcm9ncmFtYSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5wbGlQcm9tb2Npb24ucGxpUHJvZ3JhbWEucGxpUGF0cm9jaW5hZG9yXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5wbGlQcm9tb2Npb24ucGxpUHJvZ3JhbWEucGxpUGF0cm9jaW5hZG9yLnBhdE5vbWJyZVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gcGF0Tm9tYnJlO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBwYXROb21icmUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfUFJPR1JBTUEudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHByb2dOb21icmUgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5wbGlQcm9tb2Npb24gJiYgdGhpcy5kYXRhLnBsaVByb21vY2lvbi5wbGlQcm9ncmFtYVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEucGxpUHJvbW9jaW9uLnBsaVByb2dyYW1hLnByb2dOb21icmVcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IHByb2dOb21icmU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHByb2dOb21icmUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfUFJPTU9DSU9OLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBwcm9tTm9tYnJlID0gdGhpcy5kYXRhLnBsaVByb21vY2lvbiA/IHRoaXMuZGF0YS5wbGlQcm9tb2Npb24ucHJvbU5vbWJyZSA6ICcnO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBwcm9tTm9tYnJlO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBwcm9tTm9tYnJlKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT0gVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0FOSU9fUFJPTU9DSU9OLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBhbmlvUHJvbW9jaW9uID1cclxuXHRcdFx0XHR0aGlzLmRhdGEucGxpUHJvbW9jaW9uICYmIHRoaXMuZGF0YS5wbGlQcm9tb2Npb24ucHJvbUFuaW9cclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLnBsaVByb21vY2lvbi5wcm9tQW5pb1xyXG5cdFx0XHRcdFx0OiAwO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBhbmlvUHJvbW9jaW9uO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBhbmlvUHJvbW9jaW9uKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT1cclxuXHRcdFx0VG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX0lTT19NT05FREFfQkFTRS50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgYmFzZUN1cnJlbmN5ID1cclxuXHRcdFx0XHR0aGlzLmRhdGEuYnVkZ2V0RHRvUHJpbWFyeSAmJiB0aGlzLmRhdGEuYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXRcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LmJhc2VDdXJyZW5jeVxyXG5cdFx0XHRcdFx0OiB0aGlzLmRhdGEuYnVkZ2V0RHRvU2VjdW5kYXJ5ICYmIHRoaXMuZGF0YS5idWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0XHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5idWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LmJhc2VDdXJyZW5jeVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gYmFzZUN1cnJlbmN5O1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBiYXNlQ3VycmVuY3kpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfU1RBVFVTX05BTUUudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHN0YXR1c05hbWUgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uICYmXHJcblx0XHRcdFx0VXRpbFN0cmluZy5pc1ZhbGlkKHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLnN0YXRlTmFtZSlcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24uc3RhdGVOYW1lXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBzdGF0dXNOYW1lO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBzdGF0dXNOYW1lKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT0gVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX1VTRVJfSU5JVElBTFMudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHBsaVVzZXI6IFBsaVVzZXIgPSBBdXRoZW50aWNhdGlvblV0aWwuZ2V0UGxpVXNlcigpO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBVdGlsU3RyaW5nLmluaXRpYWxMZXR0ZXJzKHBsaVVzZXIuZmlyc3RuYW1lICsgJyAnICsgcGxpVXNlci5sYXN0bmFtZSk7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHZhbHVlUmVwbGFjZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9OVU1CRVJfQVBQTElDQVRJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IG51bWJlciA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24gJiYgdGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24ubnVtYmVyXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLm51bWJlclxyXG5cdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBudW1iZXI7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIG51bWJlcik7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9OQU1FLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBjb21pdGVOb21icmUgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSAmJiB0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm0uY29taXRlTm9tYnJlXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybS5jb21pdGVOb21icmVcclxuXHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gY29taXRlTm9tYnJlO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBjb21pdGVOb21icmUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfU0VHTUVOVEFUSU9OLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBjb21pdGVTZWdtZW50YWNpb24gPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfU0VHTUVOVEFUSU9OXVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm1bVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09NTUlUVEVFX1NFR01FTlRBVElPTl1cclxuXHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gY29taXRlU2VnbWVudGFjaW9uO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBjb21pdGVTZWdtZW50YWNpb24pO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQUdHUlVQQVRJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IGNvbWl0ZUFncnVwYWNpb24gPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQUdHUlVQQVRJT05dXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQUdHUlVQQVRJT05dXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IGNvbWl0ZUFncnVwYWNpb247XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIGNvbWl0ZUFncnVwYWNpb24pO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgY3V0TGluZURhdGUgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFXVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm1bVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09NTUlUVEVFX0NVVExJTkVfREFURV1cclxuXHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0aWYgKGN1dExpbmVEYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG5cdFx0XHRcdGN1dExpbmVEYXRlID0gY3V0TGluZURhdGUudG9TdHJpbmcoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBjdXRMaW5lRGF0ZTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgY3V0TGluZURhdGUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19UT1RBTF9XRUlHSFRFRC50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0bGV0IGJlc3RTY2VuYXJpb1ZhbHVlOiBhbnkgPSAnJztcclxuXHRcdFx0aWYgKHRoaXMuZXZhbHVhdGlvbiAmJiB0aGlzLmV2YWx1YXRpb24uc2NlbmFyaW9zKSB7XHJcblx0XHRcdFx0bGV0IGJlc3RTY2VuYXJpbyA9IHRoaXMuZXZhbHVhdGlvbi5zY2VuYXJpb3MuZmlsdGVyKChzKSA9PiBzLmJlc3QpWzBdO1xyXG5cdFx0XHRcdGlmIChiZXN0U2NlbmFyaW8pIHtcclxuXHRcdFx0XHRcdGJlc3RTY2VuYXJpb1ZhbHVlID0gYmVzdFNjZW5hcmlvLnJlc3VsdDtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgYmVzdFNjZW5hcmlvVmFsdWUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19VU0VSX1RZUEVfQ1JFRElUX1NUVURZLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCB1c2VyVHlwZUNyZWRpdFN0dWR5ID1cclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm0gJiZcclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm1bVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfVVNFUl9UWVBFX0NSRURJVF9TVFVEWV1cclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtW1Rva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1VTRVJfVFlQRV9DUkVESVRfU1RVRFldXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IHVzZXJUeXBlQ3JlZGl0U3R1ZHk7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHVzZXJUeXBlQ3JlZGl0U3R1ZHkpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19CRU5fQ09ESUdPLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5iZW5Db2RpZ287XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oXHJcblx0XHRcdFx0aHRtbCxcclxuXHRcdFx0XHR0b2tlbi52YWx1ZSxcclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5iZW5Db2RpZ29cclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSBpZiAoc3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOX1NVUk5BTUUudG9Mb3dlckNhc2UoKSkge1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24udXNlcm5hbWUgJiZcclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi51c2VybmFtZSAhPT0gbnVsbFxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHR0aGlzLnNlc2lvblNlcnZpY2UuZ2V0QnlMb2dpbih0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi51c2VybmFtZSkuc3Vic2NyaWJlKHtcclxuXHRcdFx0XHRcdG5leHQ6IChzZXNpb24pID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc3VybmFtZXMgPVxyXG5cdFx0XHRcdFx0XHRcdHNlc2lvbi5zdXJuYW1lICE9PSAnJyAmJiBzZXNpb24uc3VybmFtZSAhPT0gbnVsbFxyXG5cdFx0XHRcdFx0XHRcdFx0PyBzZXNpb24uc3VybmFtZSArICcgJyArIHNlc2lvbi5sYXN0bmFtZVxyXG5cdFx0XHRcdFx0XHRcdFx0OiBzZXNpb24ubGFzdG5hbWU7XHJcblx0XHRcdFx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHN1cm5hbWVzKTtcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRlcnJvcjogKGVycm9yKSA9PiB7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbnN1bHRhbmRvIGVsIGxvZ2luIGVuIFBMSVMsIGdldEJ5TG9naW4nLCBlcnJvcik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIERvbid0IGZpbmQgdGhlIHRva2VuXHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ05vIHNlIGVuY29udHJvIGVsIHRva2VuJywgdG9rZW4pO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCAnJyk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRodG1sOiBodG1sLFxyXG5cdFx0XHR2YWx1ZTogdmFsdWVSZXBsYWNlXHJcblx0XHR9O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogRmluZCBhbGwgdGhlIHRva2VucyBwcmVzZW50IGluIHRoZSBIVE1MIHRleHQuIE9yZ2FuaXplIHRoaXMgdG9rZW5zIGluIGZvdXIgY2F0ZWdvcmllcy5cclxuXHQgKiBAcGFyYW0gaHRtbCBUZXh0IG9mIHRoZSBodG1sXHJcblx0ICovXHJcblx0Z2V0TGlzdFRva2VucyhodG1sOiBzdHJpbmcpOiBhbnlbXSB7XHJcblx0XHQvLyBsZXQgc3RyaW5nczogc3RyaW5nW10gPSBodG1sLnNwbGl0KFwiIFwiKTtcclxuXHRcdGxldCB0b2tlbnM6IGFueVtdID0gdGhpcy50b2tlblNlcnZpY2UuZ2V0TGlzdFRva2Vuc0J5U3RyaW5nKGh0bWwpO1xyXG5cdFx0bGV0IHRva2Vuc0NhdGVnb3J5OiBhbnlbXSA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaW5mb1Rva2VuIG9mIHRva2Vucykge1xyXG5cdFx0XHRpZiAoaW5mb1Rva2VuKSB7XHJcblx0XHRcdFx0Y29uc3Qga2V5VHlwZTogbnVtYmVyID0gVG9rZW5TZXJ2aWNlLmdldEtleVR5cGUoXHJcblx0XHRcdFx0XHRpbmZvVG9rZW4ua2V5LnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnfScsICcnKVxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0aWYgKGtleVR5cGUpIHtcclxuXHRcdFx0XHRcdHN3aXRjaCAoa2V5VHlwZSkge1xyXG5cdFx0XHRcdFx0XHRjYXNlIDE6IC8vIEZvcm1cclxuXHRcdFx0XHRcdFx0XHRpZiAoIXRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9GT1JNXS5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgMjogLy9CdWRnZXRcclxuXHRcdFx0XHRcdFx0XHRpZiAoIXRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVRdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQlVER0VUXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQlVER0VUXS5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgMzogLy9TdGF0aWNcclxuXHRcdFx0XHRcdFx0XHRpZiAoIXRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfU1RBVElDXS5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgNDogLy9DYWxjdWxhdGVkXHJcblx0XHRcdFx0XHRcdFx0aWYgKCF0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQ0FMQ1VMQVRFRF0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQ0FMQ1VMQVRFRF0ucHVzaChpbmZvVG9rZW4pO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0XHRjYXNlIDU6IC8vVGFza1xyXG5cdFx0XHRcdFx0XHRcdGlmICghdG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1RBU0tMXSA9IFtdO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0xdLnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiB0b2tlbnNDYXRlZ29yeTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEl0IHJlc29sdmVzIHRoZSBzdGF0aWMgdG9rZW4gZGVzdGluYXRpb25cclxuXHQgKiBAcGFyYW0gc3RyaW5nVGV4dFxyXG5cdCAqIEBwYXJhbSB0b2tlblxyXG5cdCAqIEBwYXJhbSBkYXRhVmFsdWVcclxuXHQgKi9cclxuXHRyZXNvbHZlU3RhdGljVG9rZW5zS2V5QVF1aWVuVmFEaXJpZ2lkbyhzdHJpbmdUZXh0OiBzdHJpbmcsIHRva2VuVmFsdWU6IGFueSk6IHN0cmluZyB7XHJcblx0XHQvLyBpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbikge1xyXG5cdFx0dGhpcy5lbmFibGVEZXN0aW5hdGlvbiA9IHRydWU7XHJcblx0XHR0aGlzLmFkZEluZm9Ub2tlbkRlc3RpbmF0aW9uKCk7XHJcblx0XHRjb25zdCBwbGlUb2tlbkRlc3RpbmF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsaS10b2tlbi1kZXN0aW5hdGlvbicpO1xyXG5cdFx0bGV0IGh0bWwgPSAnJztcclxuXHRcdGlmIChwbGlUb2tlbkRlc3RpbmF0aW9uICYmIHBsaVRva2VuRGVzdGluYXRpb24uaW5uZXJIVE1MLmxlbmd0aCA+IDApIHtcclxuXHRcdFx0aHRtbCA9IHRoaXMucmVtb3ZlQ29tbWVudHNIdG1sKHBsaVRva2VuRGVzdGluYXRpb24uaW5uZXJIVE1MKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oc3RyaW5nVGV4dCwgdG9rZW5WYWx1ZSwgaHRtbCk7XHJcblx0XHQvLyB9XHJcblx0XHQvLyByZXR1cm4gc3RyaW5nVGV4dDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICovXHJcblx0YWRkSW5mb1Rva2VuRGVzdGluYXRpb24oKSB7XHJcblx0XHRsZXQgcGxpVG9rZW5EZXN0aW5hdGlvbiA9ICQoJyNwbGktdG9rZW4tZGVzdGluYXRpb24nKTtcclxuXHRcdHBsaVRva2VuRGVzdGluYXRpb24uZW1wdHkoKTtcclxuXHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uKSB7XHJcblx0XHRcdGxldCBkZXN0aW5hdGlvbkluZm8gPSAkKCc8ZGl2PjwvZGl2PicpO1xyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi50ZXh0KSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRleHQpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5hcHBlbmQodmFsdWVJbmZvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi50aXRsZSkge1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLnRleHQodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi50aXRsZSk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmFwcGVuZCh2YWx1ZUluZm8pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLm5hbWUgfHwgdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZSkge1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm9OYW1lID0gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5uYW1lXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubmFtZSArICcgJ1xyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0XHR2YWx1ZUluZm9OYW1lICs9IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWVcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvID0gJCgnPGRpdj48L2Rpdj4nKS5hcHBlbmQoJzxzdHJvbmc+JyArIHZhbHVlSW5mb05hbWUgKyAnPC9zdHJvbmc+Jyk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmFwcGVuZCh2YWx1ZUluZm8pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNhcmdvKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNhcmdvKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ub2NjdXBhdGlvbikge1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLnRleHQodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5vY2N1cGF0aW9uKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY29tcGFueSkge1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLnRleHQodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jb21wYW55KTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzcyB8fCB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3NEZXRhaWxzKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mb05hbWUgPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3NcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5hZGRyZXNzICsgJyAnXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdHZhbHVlSW5mb05hbWUgKz0gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5hZGRyZXNzRGV0YWlsc1xyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3NEZXRhaWxzXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLnRleHQodmFsdWVJbmZvTmFtZSk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmFwcGVuZCh2YWx1ZUluZm8pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNpdHkgfHwgdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jb3VudHJ5KSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mb05hbWUgPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNpdHlcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jaXR5XHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdHZhbHVlSW5mb05hbWUgKz1cclxuXHRcdFx0XHRcdHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY2l0eSAmJiB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnkgPyAnLCAnIDogJyc7XHJcblx0XHRcdFx0dmFsdWVJbmZvTmFtZSArPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnlcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jb3VudHJ5XHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLnRleHQodmFsdWVJbmZvTmFtZSk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmFwcGVuZCh2YWx1ZUluZm8pO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBsaVRva2VuRGVzdGluYXRpb24uYXBwZW5kKGRlc3RpbmF0aW9uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBJdCByZXNvbHZlcyB0aGUgc3RhdGljIHRva2VuIGRlc3RpbmF0aW9uXHJcblx0ICogQHBhcmFtIHN0cmluZ1RleHRcclxuXHQgKiBAcGFyYW0gdG9rZW5cclxuXHQgKiBAcGFyYW0gZGF0YVZhbHVlXHJcblx0ICovXHJcblx0cmVzb2x2ZVN0YXRpY1Rva2Vuc0tleVNhbHVkb0NvbXBsZW1lbnRhcmlvKHN0cmluZ1RleHQ6IHN0cmluZywgdG9rZW5WYWx1ZTogYW55KTogc3RyaW5nIHtcclxuXHRcdC8vIGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uKSB7XHJcblx0XHR0aGlzLmVuYWJsZURlc3RpbmF0aW9uID0gdHJ1ZTtcclxuXHRcdHRoaXMuYWRkSW5mb1Rva2VuU2FsdWRvQ29tcGxlbWVudGFyaW8oKTtcclxuXHRcdGNvbnN0IHBsaVRva2VuRGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxpLXRva2VuLWNvbXBsZW1lbnRhcnktZ3JlZXRpbmcnKTtcclxuXHRcdGxldCBodG1sID0gJyc7XHJcblx0XHRpZiAocGxpVG9rZW5EZXN0aW5hdGlvbikge1xyXG5cdFx0XHRodG1sID0gdGhpcy5yZW1vdmVDb21tZW50c0h0bWwocGxpVG9rZW5EZXN0aW5hdGlvbi5pbm5lckhUTUwpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihzdHJpbmdUZXh0LCB0b2tlblZhbHVlLCBodG1sKTtcclxuXHRcdC8vIH1cclxuXHRcdC8vIHJldHVybiBzdHJpbmdUZXh0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKi9cclxuXHRhZGRJbmZvVG9rZW5TYWx1ZG9Db21wbGVtZW50YXJpbygpIHtcclxuXHRcdGxldCBwbGlUb2tlbkRlc3RpbmF0aW9uID0gJCgnI3BsaS10b2tlbi1jb21wbGVtZW50YXJ5LWdyZWV0aW5nJyk7XHJcblx0XHRwbGlUb2tlbkRlc3RpbmF0aW9uLmVtcHR5KCk7XHJcblx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbikge1xyXG5cdFx0XHRsZXQgZGVzdGluYXRpb25JbmZvID0gJCgnPGRpdj48L2Rpdj4nKTtcclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uZ3JlZXRpbmcpIHtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uaHRtbCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmdyZWV0aW5nKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi50aXRsZSkge1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlVGV4dCA9XHJcblx0XHRcdFx0XHQoZGVzdGluYXRpb25JbmZvLmh0bWwoKS5sZW5ndGggPT0gMCA/ICcnIDogJyAnKSArXHJcblx0XHRcdFx0XHR0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5odG1sKGRlc3RpbmF0aW9uSW5mby5odG1sKCkgKyB2YWx1ZVRleHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mb05hbWUgPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWVcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVUZXh0ID1cclxuXHRcdFx0XHRcdChkZXN0aW5hdGlvbkluZm8uaHRtbCgpLmxlbmd0aCA9PSAwID8gJycgOiAnICcpICtcclxuXHRcdFx0XHRcdCc8c3Ryb25nPicgK1xyXG5cdFx0XHRcdFx0dmFsdWVJbmZvTmFtZSArXHJcblx0XHRcdFx0XHQnPC9zdHJvbmc+JztcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uaHRtbChkZXN0aW5hdGlvbkluZm8uaHRtbCgpICsgdmFsdWVUZXh0KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRwbGlUb2tlbkRlc3RpbmF0aW9uLmFwcGVuZChkZXN0aW5hdGlvbkluZm8pO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSByZW1vdmVDb21tZW50c0h0bWwoaHRtbDogc3RyaW5nKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiBodG1sID8gaHRtbC5yZXBsYWNlKC88IS0tW1xcc1xcU10qPy0tPi9nLCAnJykgOiBodG1sO1xyXG5cdH1cclxuXHJcblx0cmVzb2x2ZVN0YXRpY1Rva2Vuc0tleVNpZ24oaHRtbCwgdG9rZW5WYWx1ZTogYW55LCBzdWJUb2tlbjogc3RyaW5nW10pOiBzdHJpbmcge1xyXG5cdFx0bGV0IGNvbnRhaW5lciA9ICQoJzxkaXY+PC9kaXY+Jyk7XHJcblx0XHRsZXQgaW1nID0gJCgnPGltZyBpZD1cIicgKyBUb2tlblNlcnZpY2UuU0lHTl9MRVRURVJfVEFHX0lEICsgJ1wiPicpO1xyXG5cdFx0aW1nLmF0dHIoJ3NyYycsICcnKTtcclxuXHRcdGlmIChzdWJUb2tlbi5sZW5ndGggPiAyKSB7XHJcblx0XHRcdGltZy5hdHRyKCd3aWR0aCcsIHN1YlRva2VuWzJdLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHN1YlRva2VuLmxlbmd0aCA+IDMpIHtcclxuXHRcdFx0aW1nLmF0dHIoJ2hlaWdodCcsIHN1YlRva2VuWzNdLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHN1YlRva2VuLmxlbmd0aCA+IDQpIHtcclxuXHRcdFx0aW1nLmF0dHIoJ25hbWUnLCBzdWJUb2tlbls0XS50b1N0cmluZygpKTtcclxuXHRcdH1cclxuXHRcdGNvbnRhaW5lci5hcHBlbmQoaW1nKTtcclxuXHRcdC8vIHJldHVybiBjb250YWluZXIuaHRtbCgpO1xyXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlblZhbHVlLCBjb250YWluZXIuaHRtbCgpKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0UnVicm9MYWJlbCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZXMnXHJcblx0XHRcdD8gJ1J1YnJvJ1xyXG5cdFx0XHQ6IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZGUnXHJcblx0XHRcdD8gJ1Bvc3RlbidcclxuXHRcdFx0OiAnSXRlbSc7XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIGdldFRvdGFsTGFiZWwoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2VzJ1xyXG5cdFx0XHQ/ICdUb3RhbCdcclxuXHRcdFx0OiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2RlJ1xyXG5cdFx0XHQ/ICdHZXNhbXQnXHJcblx0XHRcdDogdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdmcidcclxuXHRcdFx0PyAnVG90YWwnXHJcblx0XHRcdDogdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdpdCdcclxuXHRcdFx0PyAnVG90YWxlJ1xyXG5cdFx0XHQ6ICdJdGVtJztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0WWVhckxhYmVsKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdlcydcclxuXHRcdFx0PyAnQcOxbydcclxuXHRcdFx0OiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2RlJ1xyXG5cdFx0XHQ/ICdKYWhyJ1xyXG5cdFx0XHQ6IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZnInXHJcblx0XHRcdD8gJ0FubsOpZSdcclxuXHRcdFx0OiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2l0J1xyXG5cdFx0XHQ/ICdBbm5vJ1xyXG5cdFx0XHQ6ICdZZWFyJztcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqXHJcblx0ICovXHJcblx0YWRkSW5mb1Rva2VuUmVzdW1lQ2F0ZWdvcnlZZWFyKFxyXG5cdFx0dHByZXNDb2RpZ286IG51bWJlcixcclxuXHRcdGlkVG90YWxCdWRnZXQ6IHN0cmluZyxcclxuXHRcdGJ1ZGdldER0bzogQnVkZ2V0RHRvXHJcblx0KSB7XHJcblx0XHRpZiAodHByZXNDb2RpZ28gPT0gRVRpcG9QcmVzdXB1ZXN0by5QUklNQVJZKSB7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0fVxyXG5cdFx0bGV0IHJlc3VtZUNhdGVnb3J5WWVhckNvbnRlbnQgPSAkKCcjJyArIGlkVG90YWxCdWRnZXQpO1xyXG5cdFx0cmVzdW1lQ2F0ZWdvcnlZZWFyQ29udGVudC5lbXB0eSgpO1xyXG5cdFx0aWYgKGJ1ZGdldER0byAmJiBidWRnZXREdG8uYnVkZ2V0ICYmIGJ1ZGdldER0by5idWRnZXQuc3VtbWFyeSkge1xyXG5cdFx0XHRjb25zdCBzdW1tYXJ5ID0gYnVkZ2V0RHRvLmJ1ZGdldC5zdW1tYXJ5O1xyXG5cdFx0XHRjb25zdCB0YWJsZSA9ICQoJzx0YWJsZT48L3RhYmxlPicpO1xyXG5cdFx0XHR0YWJsZS5jc3MoJ2JvcmRlci1zcGFjaW5nJywgJzJweCcpO1xyXG5cdFx0XHR0YWJsZS5jc3MoJ2JvcmRlci1jb2xsYXBzZScsICdjb2xsYXBzZScpO1xyXG5cdFx0XHQvL3RoZWFkXHJcblx0XHRcdGNvbnN0IHRoZWFkID0gJCgnPHRoZWFkPicpLmFwcGVuZFRvKHRhYmxlKTtcclxuXHRcdFx0Y29uc3QgdGhSdWJybyA9ICQoJzx0aD4nLCB7IGh0bWw6IHRoaXMuZ2V0UnVicm9MYWJlbCgpIH0pLmFwcGVuZFRvKHRoZWFkKTtcclxuXHRcdFx0dGhSdWJyby5jc3MoJ3RleHQtYWxpZ24nLCAnY2VudGVyJyk7XHJcblx0XHRcdHRoUnVicm8uY3NzKCdib3JkZXInLCAnMXB4IHNvbGlkIGJsYWNrJyk7XHJcblx0XHRcdHRoUnVicm8uY3NzKCdjb2xvcicsICd3aGl0ZScpO1xyXG5cdFx0XHR0aFJ1YnJvLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICdncmV5Jyk7XHJcblx0XHRcdGxldCBpdGVyYWNpb25BbmlvID0gMDtcclxuXHRcdFx0Zm9yIChjb25zdCB5ZWFyIG9mIHN1bW1hcnkueWVhcnMpIHtcclxuXHRcdFx0XHRjb25zdCB0aFllYXIgPSAkKCc8dGg+JywgeyBodG1sOiB0aGlzLmdldFllYXJMYWJlbCgpICsgKytpdGVyYWNpb25BbmlvIH0pLmFwcGVuZFRvKFxyXG5cdFx0XHRcdFx0dGhlYWRcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHRoWWVhci5jc3MoJ3RleHQtYWxpZ24nLCAnY2VudGVyJyk7XHJcblx0XHRcdFx0dGhZZWFyLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHRcdHRoWWVhci5jc3MoJ2NvbG9yJywgJ3doaXRlJyk7XHJcblx0XHRcdFx0dGhZZWFyLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICdncmV5Jyk7XHJcblx0XHRcdFx0dGhZZWFyLmNzcygnd2lkdGgnLCAnODBweCcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRvdGFsTGFiZWwgPSAnJm5ic3A7JyArIHRoaXMuZ2V0VG90YWxMYWJlbCgpICsgc3VtbWFyeS5iYXNlQ3VycmVuY3kgKyAnJm5ic3A7JztcclxuXHRcdFx0Y29uc3QgdGhUb3RhbCA9ICQoJzx0aD4nLCB7IGh0bWw6IHRvdGFsTGFiZWwgfSkuYXBwZW5kVG8odGhlYWQpO1xyXG5cdFx0XHR0aFRvdGFsLmNzcygndGV4dC1hbGlnbicsICdjZW50ZXInKTtcclxuXHRcdFx0dGhUb3RhbC5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0dGhUb3RhbC5jc3MoJ2NvbG9yJywgJ3doaXRlJyk7XHJcblx0XHRcdHRoVG90YWwuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0dGhUb3RhbC5jc3MoJ3dpZHRoJywgJzgwcHgnKTtcclxuXHRcdFx0Ly90Ym9keVxyXG5cdFx0XHRsZXQgdGJvZHkgPSAkKCc8dGJvZHk+JykuYXBwZW5kVG8odGFibGUpO1xyXG5cdFx0XHRmb3IgKGxldCBpQ2F0ID0gMDsgaUNhdCA8IHN1bW1hcnkuY2F0ZWdvcmllcy5sZW5ndGg7IGlDYXQrKykge1xyXG5cdFx0XHRcdGNvbnN0IHRyID0gJCgnPHRyPicpLmFwcGVuZFRvKHRib2R5KTtcclxuXHRcdFx0XHRjb25zdCBjYXRlZ29yeSA9IHN1bW1hcnkuY2F0ZWdvcmllc1tpQ2F0XTtcclxuXHRcdFx0XHRjb25zdCBydWJyb0xhYmVsID1cclxuXHRcdFx0XHRcdCcmbmJzcDsmbmJzcDsnICtcclxuXHRcdFx0XHRcdHRoaXMudHJhbnNsYXRlQ2F0ZWdvcnkoY2F0ZWdvcnkuY2F0ZWdvcnkpICtcclxuXHRcdFx0XHRcdCcmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRcdGNvbnN0IHRkUnVicm8gPSAkKCc8dGQ+JywgeyBodG1sOiBydWJyb0xhYmVsIH0pLmFwcGVuZFRvKHRyKTtcclxuXHRcdFx0XHR0ZFJ1YnJvLmNzcygndGV4dC1hbGlnbicsICdsZWZ0Jyk7XHJcblx0XHRcdFx0dGRSdWJyby5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0XHR0ZFJ1YnJvLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xyXG5cdFx0XHRcdGZvciAoY29uc3QgeWVhciBvZiBjYXRlZ29yeS55ZWFycykge1xyXG5cdFx0XHRcdFx0Y29uc3QgeWVhclRvdGFsID1cclxuXHRcdFx0XHRcdFx0eWVhci50b3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdFx0PyAnLSdcclxuXHRcdFx0XHRcdFx0XHQ6IHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybSh5ZWFyLnRvdGFsLCAnZGVmYXVsdCcsICcnLCAnMS4wLTAnKTtcclxuXHRcdFx0XHRcdGNvbnN0IHllYXJMYWJlbFRvdGFsID0gJyZuYnNwOyZuYnNwOycgKyB5ZWFyVG90YWwgKyAnJm5ic3A7Jm5ic3A7JztcclxuXHRcdFx0XHRcdGNvbnN0IHRkWWVhciA9ICQoJzx0ZD4nLCB7IGh0bWw6IHllYXJMYWJlbFRvdGFsIH0pLmFwcGVuZFRvKHRyKTtcclxuXHRcdFx0XHRcdHRkWWVhci5jc3MoJ3RleHQtYWxpZ24nLCAncmlnaHQnKTtcclxuXHRcdFx0XHRcdHRkWWVhci5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgY2F0ZWdvcnlUb3RhbCA9XHJcblx0XHRcdFx0XHRjYXRlZ29yeS50b3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdD8gJy0nXHJcblx0XHRcdFx0XHRcdDogdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKGNhdGVnb3J5LnRvdGFsLCAnZGVmYXVsdCcsICcnLCAnMS4wLTAnKTtcclxuXHRcdFx0XHRjb25zdCBjYXRlZ29yeUxhYmVsVG90YWwgPSAnJm5ic3A7Jm5ic3A7JyArIGNhdGVnb3J5VG90YWwgKyAnJm5ic3A7Jm5ic3A7JztcclxuXHRcdFx0XHRjb25zdCB0ZFRvdGFsID0gJCgnPHRkPicsIHsgaHRtbDogY2F0ZWdvcnlMYWJlbFRvdGFsIH0pLmFwcGVuZFRvKHRyKTtcclxuXHRcdFx0XHR0ZFRvdGFsLmNzcygndGV4dC1hbGlnbicsICdyaWdodCcpO1xyXG5cdFx0XHRcdHRkVG90YWwuY3NzKCdib3JkZXInLCAnMXB4IHNvbGlkIGJsYWNrJyk7XHJcblx0XHRcdFx0dGRUb3RhbC5jc3MoJ2ZvbnQtd2VpZ2h0JywgJ2JvbGQnKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB0ckZpbmFsID0gJCgnPHRyPicpLmFwcGVuZFRvKHRib2R5KTtcclxuXHRcdFx0Y29uc3QgYmFzZUN1cnJlbmN5ID0gdGhpcy5nZXRUb3RhbExhYmVsKCkgKyAnICcgKyBzdW1tYXJ5LmJhc2VDdXJyZW5jeSArICcmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRjb25zdCB0ZEZpbmFsVG90YWxCQyA9ICQoJzx0ZD4nLCB7IGh0bWw6IGJhc2VDdXJyZW5jeSB9KS5hcHBlbmRUbyh0ckZpbmFsKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsQkMuY3NzKCd0ZXh0LWFsaWduJywgJ3JpZ2h0Jyk7XHJcblx0XHRcdHRkRmluYWxUb3RhbEJDLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHR0ZEZpbmFsVG90YWxCQy5jc3MoJ2NvbG9yJywgJ3doaXRlJyk7XHJcblx0XHRcdHRkRmluYWxUb3RhbEJDLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICdncmV5Jyk7XHJcblx0XHRcdGxldCBidWRnZXRUb3RhbCA9IDA7XHJcblx0XHRcdGZvciAoY29uc3QgeWVhciBvZiBzdW1tYXJ5LnllYXJzKSB7XHJcblx0XHRcdFx0Y29uc3QgeWVhclRvdGFsID1cclxuXHRcdFx0XHRcdHllYXIudG90YWwgPT0gMFxyXG5cdFx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0XHQ6IHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybSh5ZWFyLnRvdGFsLCAnZGVmYXVsdCcsICcnLCAnMS4wLTAnKTtcclxuXHRcdFx0XHRjb25zdCB5ZWFyTGFiZWxUb3RhbCA9IHllYXJUb3RhbCArICcmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRcdGNvbnN0IHRkWWVhciA9ICQoJzx0ZD4nLCB7IGh0bWw6IHllYXJMYWJlbFRvdGFsIH0pLmFwcGVuZFRvKHRyRmluYWwpO1xyXG5cdFx0XHRcdHRkWWVhci5jc3MoJ3RleHQtYWxpZ24nLCAncmlnaHQnKTtcclxuXHRcdFx0XHR0ZFllYXIuY3NzKCdib3JkZXInLCAnMXB4IHNvbGlkIGJsYWNrJyk7XHJcblx0XHRcdFx0dGRZZWFyLmNzcygnY29sb3InLCAnd2hpdGUnKTtcclxuXHRcdFx0XHR0ZFllYXIuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0XHRidWRnZXRUb3RhbCArPSB5ZWFyLnRvdGFsO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRvdGFsQmFzZUN1cnJlbmN5ID1cclxuXHRcdFx0XHRidWRnZXRUb3RhbCA9PSAwXHJcblx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0OiB0aGlzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0oYnVkZ2V0VG90YWwsICdkZWZhdWx0JywgJycsICcxLjAtMCcpO1xyXG5cdFx0XHRjb25zdCB0b3RhbExhYmVsQmFzZUN1cnJlbmN5ID0gJyZuYnNwOyZuYnNwOycgKyB0b3RhbEJhc2VDdXJyZW5jeSArICcmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRjb25zdCB0ZEZpbmFsVG90YWwgPSAkKCc8dGQ+JywgeyBodG1sOiB0b3RhbExhYmVsQmFzZUN1cnJlbmN5IH0pLmFwcGVuZFRvKHRyRmluYWwpO1xyXG5cdFx0XHR0ZEZpbmFsVG90YWwuY3NzKCd0ZXh0LWFsaWduJywgJ3JpZ2h0Jyk7XHJcblx0XHRcdHRkRmluYWxUb3RhbC5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsLmNzcygnY29sb3InLCAnd2hpdGUnKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsLmNzcygnYmFja2dyb3VuZC1jb2xvcicsICdncmV5Jyk7XHJcblx0XHRcdHJlc3VtZUNhdGVnb3J5WWVhckNvbnRlbnQuYXBwZW5kKHRhYmxlKTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJwbGktdG9rZW4tZGVzdGluYXRpb25cIj5cclxuXHQ8IS0tIDxkaXYgKm5nSWY9XCJkYXRhICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGFEZXN0aW5hdGlvbiAhPSB1bmRlZmluZWRcIj5cclxuXHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuZGF0YURlc3RpbmF0aW9uLnRleHQgIT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5kYXRhRGVzdGluYXRpb24udGV4dH19XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24ubmFtZSAhPSB1bmRlZmluZWQgfHwgZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWUgIT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgIDxzdHJvbmc+e3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5uYW1lfX0ge3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZX19PC9zdHJvbmc+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiAqbmdJZj1cImRhdGEuZGF0YURlc3RpbmF0aW9uLmNhcmdvICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLmNhcmdvfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24ub2NjdXBhdGlvbiAhPSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAge3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5vY2N1cGF0aW9ufX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24uY29tcGFueSAhPSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAge3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5jb21wYW55fX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzcyAhPSB1bmRlZmluZWQgfHwgZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc0RldGFpbHMgIT0gdW5kZWZpbmVkIFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3N9fSB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3NEZXRhaWxzfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24uY2l0eSAhPSB1bmRlZmluZWQgfHwgZGF0YS5kYXRhRGVzdGluYXRpb24uY291bnRyeSAhPSB1bmRlZmluZWQgXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5kYXRhRGVzdGluYXRpb24uY2l0eX19PHNwYW4gKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5jaXR5ICE9IHVuZGVmaW5lZCAmJiBkYXRhLmRhdGFEZXN0aW5hdGlvbi5jb3VudHJ5ICE9IHVuZGVmaW5lZFwiPiw8L3NwYW4+e3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5jb3VudHJ5fX1cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj4gLS0+XHJcbjwvZGl2PlxyXG48IS0tIENvbXBsZW1lbnRhcnkgZ3JlZXRpbmctLT5cclxuPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJwbGktdG9rZW4tY29tcGxlbWVudGFyeS1ncmVldGluZ1wiPlxyXG5cdDwhLS0gPGRpdlxyXG5cdFx0Km5nSWY9XCJcclxuXHRcdFx0ZGF0YSAhPSB1bmRlZmluZWQgJiZcclxuXHRcdFx0ZGF0YS5kYXRhRGVzdGluYXRpb24gIT0gdW5kZWZpbmVkICYmXHJcblx0XHRcdGRhdGEuZGF0YURlc3RpbmF0aW9uLnRhcmdldElkID09IDIgJiZcclxuXHRcdFx0ZGF0YS5kYXRhRGVzdGluYXRpb24uZ3JlZXRpbmcgIT0gdW5kZWZpbmVkXHJcblx0XHRcIlxyXG5cdD5cclxuXHRcdHt7IGRhdGEuZGF0YURlc3RpbmF0aW9uLmdyZWV0aW5nXHJcblx0XHR9fTxzcGFuICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24udGl0bGUgIT0gdW5kZWZpbmVkXCJcclxuXHRcdFx0PiZuYnNwO3t7IGRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlIH19PC9zcGFuXHJcblx0XHQ+PHNwYW4gKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZSAhPSB1bmRlZmluZWRcIlxyXG5cdFx0XHQ+Jm5ic3A7e3sgZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWUgfX08L3NwYW5cclxuXHRcdD46XHJcblx0PC9kaXY+LS0+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBQcmltYXJ5IGJ1ZGdldCB0b3RhbCBzdW1tYXJ5ICR7cHJlc3VwdWVzdG9fMjg4X3Jlc3VtZUNhdGVnb3J5WWVhcn0gLS0+XHJcbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwicGxpLXRva2VuLXByaW5jaXBhbC1idWRnZXQtdG90YWwtc3VtbWFyeVwiPlxyXG5cdDwhLS0gPGRpdj5cclxuXHRcdDx0YWJsZVxyXG5cdFx0XHQqbmdJZj1cIlxyXG5cdFx0XHRcdGJ1ZGdldER0b1ByaW1hcnkgIT09IG51bGwgJiZcclxuXHRcdFx0XHRidWRnZXREdG9QcmltYXJ5LmJ1ZGdldCAmJlxyXG5cdFx0XHRcdGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LnN1bW1hcnlcclxuXHRcdFx0XCJcclxuXHRcdFx0c3R5bGU9XCJib3JkZXItc3BhY2luZzogMnB4O2JvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XCJcclxuXHRcdD5cclxuXHRcdFx0PHRoZWFkPlxyXG5cdFx0XHRcdDx0ciBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBjb2xvcjogd2hpdGU7YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRSdWJyb1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgeWVhciBvZiBidWRnZXREdG9QcmltYXJ5LmJ1ZGdldC5zdW1tYXJ5LnllYXJzXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7IGNvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiBncmV5OyB3aWR0aDo4MHB4O1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdHt7IHllYXIueWVhck51bWJlciB9fVxyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgY29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6IGdyZXk7IHdpZHRoOiAxMTBweDtcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRUb3RhbCAoe3sgYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeS5iYXNlQ3VycmVuY3kgfX0pXHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdDwvdGhlYWQ+XHJcblx0XHRcdDx0Ym9keT5cclxuXHRcdFx0XHQ8dHJcclxuXHRcdFx0XHRcdCpuZ0Zvcj1cIlxyXG5cdFx0XHRcdFx0XHRsZXQgY2F0ZWdvcnkgb2YgYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeS5jYXRlZ29yaWVzO1xyXG5cdFx0XHRcdFx0XHRsZXQgaUNhdCA9IGluZGV4XHJcblx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdD5cclxuXHRcdFx0XHRcdDx0ZCBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO3RleHQtYWxpZ246IGxlZnQ7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XCI+XHJcblx0XHRcdFx0XHRcdCZuYnNwOyZuYnNwO3t7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNsYXRlQ2F0ZWdvcnkoY2F0ZWdvcnkuY2F0ZWdvcnkpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCB5ZWFyIG9mIGNhdGVnb3J5LnllYXJzXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgXCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0Jm5ic3A7Jm5ic3A7e3tcclxuXHRcdFx0XHRcdFx0XHR5ZWFyLnRvdGFsID09IDAgPyAnLScgOiAoeWVhci50b3RhbCB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogcmlnaHQ7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XCI+XHJcblx0XHRcdFx0XHRcdCZuYnNwOyZuYnNwO3t7XHJcblx0XHRcdFx0XHRcdFx0Y2F0ZWdvcnkudG90YWwgPT0gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyAnLSdcclxuXHRcdFx0XHRcdFx0XHRcdDogKGNhdGVnb3J5LnRvdGFsIHwgY3VycmVuY3k6ICdkZWZhdWx0JzonJzonMS4wLTAnKVxyXG5cdFx0XHRcdFx0XHR9fSZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHQ8L3RyPlxyXG5cdFx0XHRcdDx0ciBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7IGNvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFRvdGFsICh7eyBidWRnZXREdG9QcmltYXJ5LmJ1ZGdldC5zdW1tYXJ5LmJhc2VDdXJyZW5jeSB9fSkmbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0Km5nRm9yPVwibGV0IHllYXIgb2YgYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeS55ZWFyc1wiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7IGNvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiBncmV5OyBcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHR7e1xyXG5cdFx0XHRcdFx0XHRcdHllYXIudG90YWwgPT0gMCA/ICctJyA6ICh5ZWFyLnRvdGFsIHwgY3VycmVuY3k6ICdkZWZhdWx0JzonJzonMS4wLTAnKVxyXG5cdFx0XHRcdFx0XHR9fSZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBjb2xvcjogd2hpdGU7YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHR7e1xyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LnN1bW1hcnkuYnVkZ2V0VG90YWwgPT0gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyAnLSdcclxuXHRcdFx0XHRcdFx0XHRcdDogKGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LnN1bW1hcnkuYnVkZ2V0VG90YWxcclxuXHRcdFx0XHRcdFx0XHRcdCAgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdDwvdGJvZHk+XHJcblx0XHQ8L3RhYmxlPlxyXG5cdDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbjwhLS0gU2VjdW5kYXJ5IGJ1ZGdldCB0b3RhbCBzdW1tYXJ5ICR7cHJlc3VwdWVzdG9fMjg4X3Jlc3VtZUNhdGVnb3J5WWVhcn0gLS0+XHJcbjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIGlkPVwicGxpLXRva2VuLXNlY3VuZGFyeS1idWRnZXQtdG90YWwtc3VtbWFyeVwiPlxyXG5cdDxkaXY+XHJcblx0XHQ8dGFibGVcclxuXHRcdFx0Km5nSWY9XCJcclxuXHRcdFx0XHRidWRnZXREdG9TZWN1bmRhcnkgIT09IG51bGwgJiZcclxuXHRcdFx0XHRidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0ICYmXHJcblx0XHRcdFx0YnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5XHJcblx0XHRcdFwiXHJcblx0XHRcdHN0eWxlPVwiYm9yZGVyLXNwYWNpbmc6IDJweDsgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsgd2lkdGg6IDEwMCU7XCJcclxuXHRcdD5cclxuXHRcdFx0PHRoZWFkPlxyXG5cdFx0XHRcdDx0ciBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkO1wiPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiXHJcblx0XHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiB3aGl0ZTtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xyXG5cdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRSdWJyb1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgeWVhciBvZiBidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LnN1bW1hcnkueWVhcnNcIlxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cIlxyXG5cdFx0XHRcdFx0XHRcdHRleHQtYWxpZ246IGNlbnRlcjtcclxuXHRcdFx0XHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcclxuXHRcdFx0XHRcdFx0XHR3aWR0aDogODBweDtcclxuXHRcdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0e3sgeWVhci55ZWFyTnVtYmVyIH19XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiXHJcblx0XHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiB3aGl0ZTtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xyXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiAxMTBweDtcclxuXHRcdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0VG90YWwgKHt7IGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuc3VtbWFyeS5iYXNlQ3VycmVuY3kgfX0pXHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdDwvdGhlYWQ+XHJcblx0XHRcdDx0Ym9keT5cclxuXHRcdFx0XHQ8dHJcclxuXHRcdFx0XHRcdCpuZ0Zvcj1cIlxyXG5cdFx0XHRcdFx0XHRsZXQgY2F0ZWdvcnkgb2YgYnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5LmNhdGVnb3JpZXM7XHJcblx0XHRcdFx0XHRcdGxldCBpQ2F0ID0gaW5kZXhcclxuXHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHRkIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IGxlZnQ7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wiPlxyXG5cdFx0XHRcdFx0XHQmbmJzcDsmbmJzcDt7e1xyXG5cdFx0XHRcdFx0XHRcdHRyYW5zbGF0ZUNhdGVnb3J5KGNhdGVnb3J5LmNhdGVnb3J5KVxyXG5cdFx0XHRcdFx0XHR9fSZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgeWVhciBvZiBjYXRlZ29yeS55ZWFyc1wiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdCZuYnNwOyZuYnNwO3t7XHJcblx0XHRcdFx0XHRcdFx0eWVhci50b3RhbCA9PSAwID8gJy0nIDogKHllYXIudG90YWwgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtYWxpZ246IHJpZ2h0OyBib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIj5cclxuXHRcdFx0XHRcdFx0Jm5ic3A7Jm5ic3A7e3tcclxuXHRcdFx0XHRcdFx0XHRjYXRlZ29yeS50b3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0XHRcdFx0OiAoY2F0ZWdvcnkudG90YWwgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PHRyIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdFx0XHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcclxuXHRcdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0VG90YWwgKHt7IGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuc3VtbWFyeS5iYXNlQ3VycmVuY3kgfX0pJm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCB5ZWFyIG9mIGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuc3VtbWFyeS55ZWFyc1wiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiXHJcblx0XHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IGdyZXk7XHJcblx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdHt7XHJcblx0XHRcdFx0XHRcdFx0eWVhci50b3RhbCA9PSAwID8gJy0nIDogKHllYXIudG90YWwgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiXHJcblx0XHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogcmlnaHQ7XHJcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IGdyZXk7XHJcblx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdHt7XHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5LmJ1ZGdldFRvdGFsID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdD8gJy0nXHJcblx0XHRcdFx0XHRcdFx0XHQ6IChidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LnN1bW1hcnkuYnVkZ2V0VG90YWxcclxuXHRcdFx0XHRcdFx0XHRcdCAgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdDwvdGJvZHk+XHJcblx0XHQ8L3RhYmxlPlxyXG5cdDwvZGl2PlxyXG48L2Rpdj5cclxuIl19
|
|
1029
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctcGxpLWNvbW1vbnMvc3JjL2xpYi9jb21wb25lbnRzL3Rva2VuL3Rva2VuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLXBsaS1jb21tb25zL3NyYy9saWIvY29tcG9uZW50cy90b2tlbi90b2tlbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUlaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTixVQUFVLEVBSVYsZ0JBQWdCLEVBQ2hCLFVBQVUsRUFFVixrQkFBa0IsRUFHbEIsUUFBUSxFQUVSLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc1RCxPQUFPLFFBQVEsQ0FBQzs7Ozs7OztBQVFoQixNQUFNLE9BQU8sY0FBYztJQTZCMUIsWUFDUyxZQUEwQixFQUMxQixZQUEwQixFQUMxQixhQUE0QixFQUM1QixxQkFBNEMsRUFDNUMsYUFBNEI7UUFKNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQTdCckMsdUNBQXVDO1FBQzdCLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVsRSxrREFBa0Q7UUFDbEQsc0JBQWlCLEdBQVksS0FBSyxDQUFDO0lBMEJoQyxDQUFDO0lBRUosUUFBUTtRQUNQLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGdCQUFnQixH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QkFFRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRUksVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcblx0Q29tcG9uZW50LFxyXG5cdE9uSW5pdCxcclxuXHRJbnB1dCxcclxuXHRPdXRwdXQsXHJcblx0RXZlbnRFbWl0dGVyLFxyXG5cdE9uQ2hhbmdlcyxcclxuXHRTaW1wbGVDaGFuZ2VzLFxyXG5cdFNpbXBsZUNoYW5nZVxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG5cdFV0aWxTdHJpbmcsXHJcblx0RGF0YVRvVHJhbnNsYXRlVG9rZW4sXHJcblx0VG9rZW4sXHJcblx0QnVkZ2V0RHRvLFxyXG5cdEVUaXBvUHJlc3VwdWVzdG8sXHJcblx0UGxpVXN1YXJpbyxcclxuXHRzZXNpb24sXHJcblx0QXV0aGVudGljYXRpb25VdGlsLFxyXG5cdFBsaVVzZXIsXHJcblx0QXBwbGljYXRpb25CdWRnZXRUb3RhbCxcclxuXHREYXRlVXRpbCxcclxuXHRFdmFsdWF0aW9uXHJcbn0gZnJvbSAnbmctcGxpLXV0aWwnO1xyXG5pbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBUb2tlblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90b2tlbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xyXG5pbXBvcnQgeyBBdXRoZW50aWNhdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hdXRoZW50aWNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0ICdqcXVlcnknO1xyXG5pbXBvcnQgeyBTZXNpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvc2VzaW9uLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblx0c2VsZWN0b3I6ICdwbGktdG9rZW4nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi90b2tlbi5jb21wb25lbnQuaHRtbCcsXHJcblx0c3R5bGVVcmxzOiBbJy4vdG9rZW4uY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUb2tlbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIHRlbXBsYXRlIGh0bWwgdG8gdHJhbnNsYXRlICovXHJcblx0QElucHV0KCkgdGVtcGxhdGU6IHN0cmluZztcclxuXHQvKiogSXQgY29udGFpbnMgdGhlIGRhdGEgdG8gaW1wbGVtZW50ICovXHJcblx0QElucHV0KCkgZGF0YTogRGF0YVRvVHJhbnNsYXRlVG9rZW47XHJcblx0LyoqIEl0IG5vdGlmaWVzIHRoZSBodG1sIGlzIGdlbmVyYXRlZCovXHJcblx0QE91dHB1dCgpIG9uR2VuZXJhdGU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcblxyXG5cdC8qKiBJdCBlbmFibGVzIHRoZSB2aXN1YWxpemF0aW9uIG9mIGRlc3RpbmF0aW9uICovXHJcblx0ZW5hYmxlRGVzdGluYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcblx0LyoqIEl0IGNvbnRhaW5zIHRoZSBwcm9tIGNvZGUgKi9cclxuXHRwcm9tQ29kaWdvOiBudW1iZXI7XHJcblxyXG5cdC8qKiAqL1xyXG5cdGxUb2tlbkNhbGN1bGF0ZWQ6IFRva2VuW107XHJcblx0LyoqICovXHJcblx0bEZvcm1GaWVsZHNUb2tlbjogYW55W107XHJcblx0LyoqICovXHJcblx0dW5pcXVlVmVyaWZpY2F0aW9uQ29kZTogc3RyaW5nO1xyXG5cdC8qKiAqL1xyXG5cdGJ1ZGdldER0b1ByaW1hcnk6IEJ1ZGdldER0bztcclxuXHQvKiogKi9cclxuXHRidWRnZXREdG9TZWN1bmRhcnk6IEJ1ZGdldER0bztcclxuXHQvKiogQXMgdGhlIGxpc3Qgb2YgdG9rZW4gYXJlIGxvYWRlZCBkeW5hbWljYWxseSwgdGhpcyBtYW5hZ2UgdGhhdCBvbmx5IHJlcGxhY2UgdGhlIGluZm8gb25jZS4gKi9cclxuXHRhbHJlYWR5Q2FsbFJlcGxhY2VUb2tlbnM6IGJvb2xlYW47XHJcblxyXG5cdGV2YWx1YXRpb246IEV2YWx1YXRpb247XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBjdXJyZW5jeVBpcGU6IEN1cnJlbmN5UGlwZSxcclxuXHRcdHByaXZhdGUgdG9rZW5TZXJ2aWNlOiBUb2tlblNlcnZpY2UsXHJcblx0XHRwcml2YXRlIHRvYXN0clNlcnZpY2U6IFRvYXN0clNlcnZpY2UsXHJcblx0XHRwcml2YXRlIGF1dGhlbnRpY2F0aW9uU2VydmljZTogQXV0aGVudGljYXRpb25TZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBzZXNpb25TZXJ2aWNlOiBTZXNpb25TZXJ2aWNlXHJcblx0KSB7fVxyXG5cclxuXHRuZ09uSW5pdCgpIHtcclxuXHRcdHRoaXMubFRva2VuQ2FsY3VsYXRlZCA9IG51bGw7XHJcblx0XHR0aGlzLmxGb3JtRmllbGRzVG9rZW4gPSBudWxsO1xyXG5cdFx0dGhpcy5idWRnZXREdG9QcmltYXJ5ID0gbnVsbDtcclxuXHRcdHRoaXMuYnVkZ2V0RHRvU2VjdW5kYXJ5ID0gbnVsbDtcclxuXHRcdHRoaXMuZXZhbHVhdGlvbiA9IG51bGw7XHJcblx0fVxyXG5cclxuXHQvKiogSXQgbWFuYWdlcyB0aGUgY2hhbmdlIG9mIHRoZSBldmVyeSBASW5wdXQgKi9cclxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XHJcblx0XHQvLyBFdmVyeSB0aW1lIHRoYXQgaW5wdXQgdmFsdWVzIGNoYW5nZSwgY2FsbCBuZXcgdmVyaWZpY2F0aW9uIGNvZGVcclxuXHRcdHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSA9IG51bGw7XHJcblx0XHRjb25zdCB0ZW1wbGF0ZTogU2ltcGxlQ2hhbmdlID0gY2hhbmdlcy50ZW1wbGF0ZTtcclxuXHRcdGNvbnN0IGRhdGE6IFNpbXBsZUNoYW5nZSA9IGNoYW5nZXMuZGF0YTtcclxuXHJcblx0XHRpZiAodGVtcGxhdGUgJiYgdGVtcGxhdGUuY3VycmVudFZhbHVlKSB7XHJcblx0XHRcdHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZS5jdXJyZW50VmFsdWU7XHJcblx0XHR9XHJcblx0XHRpZiAoZGF0YSAmJiBkYXRhLmN1cnJlbnRWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLmRhdGEgPSBkYXRhLmN1cnJlbnRWYWx1ZTtcclxuXHRcdFx0dGhpcy5wcm9tQ29kaWdvID0gdGhpcy5kYXRhLnByb21Db2RpZ287XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5kYXRhKSB7XHJcblx0XHRcdHRoaXMuYnVkZ2V0RHRvUHJpbWFyeSA9IHRoaXMuZGF0YS5idWRnZXREdG9QcmltYXJ5ID8gdGhpcy5kYXRhLmJ1ZGdldER0b1ByaW1hcnkgOiBudWxsO1xyXG5cdFx0XHR0aGlzLmJ1ZGdldER0b1NlY3VuZGFyeSA9IHRoaXMuZGF0YS5idWRnZXREdG9TZWN1bmRhcnlcclxuXHRcdFx0XHQ/IHRoaXMuZGF0YS5idWRnZXREdG9TZWN1bmRhcnlcclxuXHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdHRoaXMuZXZhbHVhdGlvbiA9IHRoaXMuZGF0YS5ldmFsdWF0aW9uO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZGF0YSAmJiB0aGlzLnRlbXBsYXRlICYmIHRoaXMucHJvbUNvZGlnbykge1xyXG5cdFx0XHRjb25zdCBzZWxmID0gdGhpcztcclxuXHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0c2VsZi5pbml0KCk7XHJcblx0XHRcdH0sIDMwMCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdC8qKiBJdCBpbml0aWFsaXplcyB0aGUgcHJvY2VzcyBvZiB0cmFuc2xhdGlvbiAqL1xyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdHRoaXMudHJhbnNsYXRlVG9rZW5zKHRoaXMudGVtcGxhdGUsIHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSk7XHJcblx0fVxyXG5cclxuXHR0cmFuc2xhdGVDYXRlZ29yeShjYXRlZ29yeU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XHJcblx0XHRjb25zdCBsYW5ndWFnZUJ5RGVmYXVsdCA9ICdlbic7XHJcblx0XHQvLyBJZiBkb24ndCBmaW5kIHRoZSBsYW5nLCBnZXQgaW4gZW4uXHJcblx0XHRsZXQgY2F0ZWdvcnlOYW1lQnlEZWY6IHN0cmluZyA9IGNhdGVnb3J5TmFtZTtcclxuXHRcdGlmIChjYXRlZ29yeU5hbWUgJiYgdGhpcy5kYXRhLmNhdGVnb3JpZXMgJiYgdGhpcy5kYXRhLmlkaW9tYSkge1xyXG5cdFx0XHQvLyBJZiB0aGUgbG9jYWxlIHNlbGVjdCBpcyBlcywgdGhpcyBpcyB0aGUgZGFmdWx0IGNhdGVnb3J5IGxhbmd1YWdlXHJcblx0XHRcdGlmICh0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2VzJykge1xyXG5cdFx0XHRcdHJldHVybiBjYXRlZ29yeU5hbWU7XHJcblx0XHRcdH1cclxuXHRcdFx0Zm9yIChjb25zdCBjYXRlZ29yeSBvZiB0aGlzLmRhdGEuY2F0ZWdvcmllcykge1xyXG5cdFx0XHRcdGlmIChjYXRlZ29yeS5saXN0YVJ1YnJvSWRpb21hICYmIGNhdGVnb3J5LnJ1YlJ1YnJvID09PSBjYXRlZ29yeU5hbWUpIHtcclxuXHRcdFx0XHRcdGZvciAoY29uc3QgbGFuZ3VhZ2Ugb2YgY2F0ZWdvcnkubGlzdGFSdWJyb0lkaW9tYSkge1xyXG5cdFx0XHRcdFx0XHRpZiAobGFuZ3VhZ2UucnViaUlkaW9tYSA9PT0gdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUpIHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gbGFuZ3VhZ2UucnViaVRyYWR1Y2Npb247XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0aWYgKGxhbmd1YWdlLnJ1YmlJZGlvbWEgPT09IGxhbmd1YWdlQnlEZWZhdWx0KSB7XHJcblx0XHRcdFx0XHRcdFx0Y2F0ZWdvcnlOYW1lQnlEZWYgPSBsYW5ndWFnZS5ydWJpVHJhZHVjY2lvbjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gY2F0ZWdvcnlOYW1lQnlEZWY7XHJcblx0fVxyXG5cclxuXHR0cmFuc2xhdGVUb2tlbnMoaHRtbDogc3RyaW5nLCBsaXN0RGF0YTogYW55KSB7XHJcblx0XHR0aGlzLmFscmVhZHlDYWxsUmVwbGFjZVRva2VucyA9IGZhbHNlO1xyXG5cdFx0Y29uc3QgbFRva2VuczogYW55W10gPSB0aGlzLmdldExpc3RUb2tlbnMoaHRtbCk7XHJcblx0XHRpZiAoIWxUb2tlbnMgfHwgT2JqZWN0LmtleXMobFRva2VucykubGVuZ3RoID09PSAwKSB7XHJcblx0XHRcdHRoaXMudGVtcGxhdGUgPSBodG1sO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5jYWxsTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0fVxyXG5cclxuXHRjYWxsTGlzdFRva2VucyhsVG9rZW5zOiBhbnlbXSwgaHRtbDogc3RyaW5nLCBsaXN0RGF0YTogYW55KSB7XHJcblx0XHRpZiAoXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdICYmXHJcblx0XHRcdE9iamVjdC5rZXlzKGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdKS5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKHRoaXMubFRva2VuQ2FsY3VsYXRlZCkge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnRva2VuU2VydmljZS5nZXRMaXN0QnlQcm9tQ29kaWdvKHRoaXMucHJvbUNvZGlnbykuc3Vic2NyaWJlKFxyXG5cdFx0XHRcdFx0KGxUb2tlbkNhbGN1bGF0ZWQ6IFRva2VuW10pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sVG9rZW5DYWxjdWxhdGVkID0gbFRva2VuQ2FsY3VsYXRlZDtcclxuXHRcdFx0XHRcdFx0dGhpcy52YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBjYWxsTGlzdFRva2VucyAtZ2V0TGlzdEJ5UHJvbUNvZGlnbycsIGVycm9yKTtcclxuXHRcdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBnZW5lcmFuZG8gY2FydGEnKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zLCBodG1sLCBsaXN0RGF0YSk7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dICYmXHJcblx0XHRcdE9iamVjdC5rZXlzKGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dKS5sZW5ndGggPiAwXHJcblx0XHQpIHtcclxuXHRcdFx0aWYgKHRoaXMubEZvcm1GaWVsZHNUb2tlbikge1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnRva2VuU2VydmljZS5nZXRGb3JtRmllbGRzQnlQcm9tQ29kZSh0aGlzLnByb21Db2RpZ28pLnRoZW4oXHJcblx0XHRcdFx0XHQobEZvcm1GaWVsZHNUb2tlbjogYW55W10pID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5sRm9ybUZpZWxkc1Rva2VuID0gbEZvcm1GaWVsZHNUb2tlbjtcclxuXHRcdFx0XHRcdFx0dGhpcy52YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdChlcnJvcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdFcnJvciBjYWxsTGlzdFRva2VucyAtZ2V0Rm9ybUZpZWxkc0J5UHJvbUNvZGUnLCBlcnJvcik7XHJcblx0XHRcdFx0XHRcdHRoaXMudG9hc3RyU2VydmljZS5lcnJvcignRXJyb3IgZ2VuZXJhbmRvIGNhcnRhJyk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy52YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdICYmXHJcblx0XHRcdE9iamVjdC5rZXlzKGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQ10pLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRpZiAodGhpcy51bmlxdWVWZXJpZmljYXRpb25Db2RlICE9PSBudWxsKSB7XHJcblx0XHRcdFx0dGhpcy52YWxpZGF0ZUxpc3RUb2tlbnMobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGNvbnN0IHRva2VuVmVyaWZpY2F0aW9uQ29kZTogYW55W10gPSBsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdLmZpbmQoXHJcblx0XHRcdFx0XHQodG9rZW4pID0+IHtcclxuXHRcdFx0XHRcdFx0Y29uc3Qgc3ViVG9rZW46IHN0cmluZ1tdID0gdG9rZW4ua2V5XHJcblx0XHRcdFx0XHRcdFx0LnJlcGxhY2UoJ3snLCAnJylcclxuXHRcdFx0XHRcdFx0XHQucmVwbGFjZSgnfScsICcnKVxyXG5cdFx0XHRcdFx0XHRcdC5zcGxpdCgnXycpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gKFxyXG5cdFx0XHRcdFx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT1cclxuXHRcdFx0XHRcdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQ09ESUdPX1ZFUklGSUNBQ0lPTi50b0xvd2VyQ2FzZSgpXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyBPbmx5IGlmIHRoZSBzdGF0aWMgdG9rZW4gaXMgdGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gY29kZVxyXG5cdFx0XHRcdGlmICh0b2tlblZlcmlmaWNhdGlvbkNvZGUgJiYgT2JqZWN0LmtleXModG9rZW5WZXJpZmljYXRpb25Db2RlKS5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0XHRsZXQgcGxpVXN1YXJpb09iamVjdCA9IEF1dGhlbnRpY2F0aW9uVXRpbC5nZXRQbGlVc3VhcmlvKCk7XHJcblx0XHRcdFx0XHRpZiAoIXBsaVVzdWFyaW9PYmplY3QpIHtcclxuXHRcdFx0XHRcdFx0dGhpcy51bmlxdWVWZXJpZmljYXRpb25Db2RlID0gJyc7XHJcblx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0J05vIHNlIGxvZ3JvIGNvbnN1bHRhciBlbCB1c3VhcmlvIHBhcmEgY29uc3VsdGFyIGVsIHRva2VuJyxcclxuXHRcdFx0XHRcdFx0XHRwbGlVc3VhcmlvT2JqZWN0XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHBsaVVzdWFyaW86IFBsaVVzdWFyaW8gPSBPYmplY3QuYXNzaWduKFxyXG5cdFx0XHRcdFx0XHRcdG5ldyBQbGlVc3VhcmlvKCksXHJcblx0XHRcdFx0XHRcdFx0SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShwbGlVc3VhcmlvT2JqZWN0KSlcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0dGhpcy5hdXRoZW50aWNhdGlvblNlcnZpY2UuZ2V0VG9rZW5CeUxvZ2luKHBsaVVzdWFyaW8udXN1TG9naW4pLnN1YnNjcmliZShcclxuXHRcdFx0XHRcdFx0XHQoc2VzaW9uOiBzZXNpb24pID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFRyeSB0byBnZXQgdGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gY29kZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHNlc2lvbiBpZiBpcyBub3QgYSB2YWxpZCB2YWx1ZVxyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc2VzaW9uVmFsdWUgPSBzZXNpb24gPyBzZXNpb24uc2VzaW9uIDogJzEnO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRVbmlxdWVWZXJpZmljYXRpb25Db2RlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwbGlVc3VhcmlvLnVzdUxvZ2luLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRzZXNpb25WYWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bFRva2VucyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0aHRtbCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdERhdGFcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0fSxcclxuXHRcdFx0XHRcdFx0XHQoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0XHRcdFx0XHRcdCdFcnJvciBjb25zdWx0YW5kbyBlbCBsb2dpbiBlbiBQTElTLCBnZXRUb2tlbkJ5TG9naW4nLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvclxyXG5cdFx0XHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0XHRcdC8vIFRyeSB0byBnZXQgdGhlIHVuaXF1ZSB2ZXJpZmljYXRpb24gY29kZSB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHNlc2lvblxyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5nZXRVbmlxdWVWZXJpZmljYXRpb25Db2RlKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRwbGlVc3VhcmlvLnVzdUxvZ2luLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnMScsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxUb2tlbnMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGh0bWwsXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3REYXRhXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0Ly90aGlzLnRvYXN0clNlcnZpY2UuZXJyb3IoXCJFcnJvciBnZW5lcmFuZG8gY2FydGFcIik7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHR0aGlzLnVuaXF1ZVZlcmlmaWNhdGlvbkNvZGUgPSAnJztcclxuXHRcdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEdldCB0aGUgdW5pcXVlIHZlcmlmaWNhdGlvbiBjb2RlIGFuZCBjYWxsIHZhbGlkYXRlTGlzdFRva2VucyBtZXRob2RcclxuXHQgKi9cclxuXHRnZXRVbmlxdWVWZXJpZmljYXRpb25Db2RlKFxyXG5cdFx0dXN1TG9naW46IHN0cmluZyxcclxuXHRcdHNlc2lvbjogc3RyaW5nLFxyXG5cdFx0bFRva2VuczogYW55W10sXHJcblx0XHRodG1sOiBzdHJpbmcsXHJcblx0XHRsaXN0RGF0YTogYW55XHJcblx0KSB7XHJcblx0XHR0aGlzLnRva2VuU2VydmljZS5nZXRVbmlxdWVWZXJpZmljYXRpb25Db2RlKHVzdUxvZ2luLCBzZXNpb24pLnN1YnNjcmliZShcclxuXHRcdFx0KHVuaXF1ZUNvZGVWYWx1ZTogYW55KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgdW5pcXVlQ29kZTogc3RyaW5nID0gdW5pcXVlQ29kZVZhbHVlLmNvZGlnb1VuaWNvO1xyXG5cdFx0XHRcdHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSA9XHJcblx0XHRcdFx0XHR1bmlxdWVDb2RlLnN1YnN0cmluZygwLCA0KSArICcgJyArIHVuaXF1ZUNvZGUuc3Vic3RyaW5nKDQsIDgpO1xyXG5cdFx0XHRcdHRoaXMudmFsaWRhdGVMaXN0VG9rZW5zKGxUb2tlbnMsIGh0bWwsIGxpc3REYXRhKTtcclxuXHRcdFx0fSxcclxuXHRcdFx0KGVycm9yKSA9PiB7XHJcblx0XHRcdFx0Y29uc29sZS5lcnJvcignRXJyb3IgY2FsbExpc3RUb2tlbnMgLWdldExpc3RCeVByb21Db2RpZ28nLCBlcnJvcik7XHJcblx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKCdFcnJvciBnZW5lcmFuZG8gY2FydGEnKTtcclxuXHRcdFx0fVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHZhbGlkYXRlTGlzdFRva2VucyhsVG9rZW5zOiBhbnlbXSwgaHRtbDogc3RyaW5nLCBsaXN0RGF0YTogYW55KSB7XHJcblx0XHRsZXQgZmluaXNoTG9hZExpc3RGb3JtOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRsZXQgZmluaXNoTG9hZExpc3RDYWxjdWxhdGVkOiBib29sZWFuID0gZmFsc2U7XHJcblx0XHRsZXQgZmluaXNoTG9hZExpc3RTdGF0aWM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHRcdGNvbnN0IGZpbmlzaExvYWRMaXN0QnVkZ2V0OiBib29sZWFuID0gdHJ1ZTtcclxuXHRcdGlmIChcclxuXHRcdFx0bFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STV0gJiZcclxuXHRcdFx0bFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STV0ubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGZpbmlzaExvYWRMaXN0Rm9ybSA9IHRoaXMubEZvcm1GaWVsZHNUb2tlbiA/IHRydWUgOiBmYWxzZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZpbmlzaExvYWRMaXN0Rm9ybSA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRpZiAoXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdICYmXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdLmxlbmd0aCA+IDBcclxuXHRcdCkge1xyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdENhbGN1bGF0ZWQgPSB0aGlzLmxUb2tlbkNhbGN1bGF0ZWQgPyB0cnVlIDogZmFsc2U7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdENhbGN1bGF0ZWQgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRsVG9rZW5zW1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdICYmXHJcblx0XHRcdGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQ10ubGVuZ3RoID4gMFxyXG5cdFx0KSB7XHJcblx0XHRcdGZpbmlzaExvYWRMaXN0U3RhdGljID0gdGhpcy51bmlxdWVWZXJpZmljYXRpb25Db2RlICE9PSBudWxsID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RTdGF0aWMgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0aWYgKFxyXG5cdFx0XHRmaW5pc2hMb2FkTGlzdEZvcm0gJiZcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RCdWRnZXQgJiZcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RTdGF0aWMgJiZcclxuXHRcdFx0ZmluaXNoTG9hZExpc3RDYWxjdWxhdGVkICYmXHJcblx0XHRcdCF0aGlzLmFscmVhZHlDYWxsUmVwbGFjZVRva2Vuc1xyXG5cdFx0KSB7XHJcblx0XHRcdHRoaXMuYWxyZWFkeUNhbGxSZXBsYWNlVG9rZW5zID0gdHJ1ZTtcclxuXHRcdFx0dGhpcy5yZXBsYWNlVG9rZW5zV2l0aERhdGEobFRva2VucywgaHRtbCwgbGlzdERhdGEpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmVwbGFjZVRva2Vuc1dpdGhEYXRhKGxUb2tlbnM6IGFueVtdLCBodG1sOiBzdHJpbmcsIGxpc3REYXRhOiBhbnkpIHtcclxuXHRcdGNvbnN0IGxEYXRhT3JnOiBhbnlbXSA9IFtdO1xyXG5cdFx0Y29uc3QgbEZvcm1GaWVsZHNUb2tlbk9yZzogYW55W10gPSBbXTtcclxuXHRcdGlmIChcclxuXHRcdFx0KGxUb2tlbnNbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dIHx8XHJcblx0XHRcdFx0bFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQ0FMQ1VMQVRFRF0pICYmXHJcblx0XHRcdGxpc3REYXRhXHJcblx0XHQpIHtcclxuXHRcdFx0Zm9yIChjb25zdCBkYXRhRm9ybSBpbiBsaXN0RGF0YSkge1xyXG5cdFx0XHRcdGxEYXRhT3JnW2RhdGFGb3JtLnRvTG93ZXJDYXNlKCldID0gbGlzdERhdGFbZGF0YUZvcm1dO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmxGb3JtRmllbGRzVG9rZW4pIHtcclxuXHRcdFx0XHRmb3IgKGNvbnN0IGZvcm1GaWVsZFRva2VuIG9mIHRoaXMubEZvcm1GaWVsZHNUb2tlbikge1xyXG5cdFx0XHRcdFx0Zm9yIChjb25zdCB2YWx1ZXNGaWVsZCBvZiBmb3JtRmllbGRUb2tlbi52YWx1ZSkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBrZXlUb2tlbjogc3RyaW5nID1cclxuXHRcdFx0XHRcdFx0XHQnJHsnICsgZm9ybUZpZWxkVG9rZW4udGl0bGUua2V5ICsgJ18nICsgdmFsdWVzRmllbGQua2V5ICsgJ30nO1xyXG5cdFx0XHRcdFx0XHRsRm9ybUZpZWxkc1Rva2VuT3JnW2tleVRva2VuXSA9IHZhbHVlc0ZpZWxkO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgbFRva2Vuc0NhbGN1bGF0ZWQ6IGFueVtdID0gW107XHJcblx0XHRpZiAobFRva2Vuc1tUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfQ0FMQ1VMQVRFRF0pIHtcclxuXHRcdFx0aWYgKHRoaXMubFRva2VuQ2FsY3VsYXRlZCkge1xyXG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5DYWwgb2YgdGhpcy5sVG9rZW5DYWxjdWxhdGVkKSB7XHJcblx0XHRcdFx0XHRsVG9rZW5zQ2FsY3VsYXRlZFtVdGlsU3RyaW5nLnJlcGxhY2VBY2NlbnRTcGFjZXNPdGhlcnModG9rZW5DYWwubmFtZSldID1cclxuXHRcdFx0XHRcdFx0dG9rZW5DYWw7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRsZXQgdHlwZVRva2VuOiBhbnk7XHJcblx0XHRjb25zdCB0b2tlblR5cGVUcmFuc2xhdGVkOiBhbnkgPSBbXTtcclxuXHRcdGZvciAodHlwZVRva2VuIGluIGxUb2tlbnMpIHtcclxuXHRcdFx0aWYgKCFsVG9rZW5zW3R5cGVUb2tlbl0pIHtcclxuXHRcdFx0XHRjb250aW51ZTtcclxuXHRcdFx0fVxyXG5cdFx0XHRjb25zdCB0b2tlbnNUeXBlOiBhbnlbXSA9IGxUb2tlbnNbdHlwZVRva2VuXTtcclxuXHRcdFx0dG9rZW5UeXBlVHJhbnNsYXRlZFt0eXBlVG9rZW5dID0gW107XHJcblx0XHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zVHlwZSkge1xyXG5cdFx0XHRcdGxldCB0b2tlblRyYW5zbGF0ZWQgPSBudWxsO1xyXG5cdFx0XHRcdGNvbnN0IHN1YlRva2VuOiBzdHJpbmdbXSA9IHRva2VuLmtleS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ30nLCAnJykuc3BsaXQoJ18nKTtcclxuXHRcdFx0XHRzd2l0Y2ggKHR5cGVUb2tlbikge1xyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STTogLy8gRm9ybVxyXG5cdFx0XHRcdFx0XHRsZXQgdmFsdWVEYXRhID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0Y29uc3QgZGF0YU9yZ0tleSA9IHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdC8vIFB1dCB0aGlzIGtleSBiZWNhdXNlIHRoZXJlIG5vIG90aGVyIHdheSB0byBkaWZmZXJlbnRpYXRlIHRoZSBzYW1lIGtleSBpbiBkaWZmZXJlbnRzIGZvcm1zXHJcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFPcmdLZXlCeUZvcm0gPVxyXG5cdFx0XHRcdFx0XHRcdHN1YlRva2VuWzBdLnN1YnN0cmluZygxKSArICdfJyArIHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCk7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGRhdGFPcmdWYWx1ZSA9IGxEYXRhT3JnLmhhc093blByb3BlcnR5KGRhdGFPcmdLZXkpXHJcblx0XHRcdFx0XHRcdFx0PyBsRGF0YU9yZ1tkYXRhT3JnS2V5XVxyXG5cdFx0XHRcdFx0XHRcdDogbERhdGFPcmcuaGFzT3duUHJvcGVydHkoZGF0YU9yZ0tleUJ5Rm9ybSlcclxuXHRcdFx0XHRcdFx0XHQ/IGxEYXRhT3JnW2RhdGFPcmdLZXlCeUZvcm1dXHJcblx0XHRcdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHRcdFx0XHQvLyBjb25zdCBkYXRhT3JnVmFsdWVCeUZvcm0gPSBsRGF0YU9yZ1tkYXRhT3JnS2V5QnlGb3JtXTtcclxuXHRcdFx0XHRcdFx0aWYgKFxyXG5cdFx0XHRcdFx0XHRcdHN1YlRva2VuLmxlbmd0aCA9PT0gMyAmJlxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBkYXRhT3JnVmFsdWUgIT09ICd1bmRlZmluZWQnICYmXHJcblx0XHRcdFx0XHRcdFx0ZGF0YU9yZ1ZhbHVlICE9PSBudWxsICYmXHJcblx0XHRcdFx0XHRcdFx0ZGF0YU9yZ1ZhbHVlLmhhc093blByb3BlcnR5KHN1YlRva2VuWzJdKVxyXG5cdFx0XHRcdFx0XHQpIHtcclxuXHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSBkYXRhT3JnVmFsdWVbc3ViVG9rZW5bMl1dO1xyXG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRcdFx0XHRcdHN1YlRva2VuLmxlbmd0aCA9PT0gMiAmJlxyXG5cdFx0XHRcdFx0XHRcdHR5cGVvZiBkYXRhT3JnVmFsdWUgIT09ICd1bmRlZmluZWQnICYmXHJcblx0XHRcdFx0XHRcdFx0ZGF0YU9yZ1ZhbHVlICE9PSBudWxsXHJcblx0XHRcdFx0XHRcdCkge1xyXG5cdFx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IGRhdGFPcmdWYWx1ZTtcclxuXHRcdFx0XHRcdFx0XHRpZiAobEZvcm1GaWVsZHNUb2tlbk9yZ1t0b2tlbi5rZXldKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSB0aGlzLnRva2VuU2VydmljZS5nZXRWYWx1ZUZyb21Gb3JtRmllbGQoXHJcblx0XHRcdFx0XHRcdFx0XHRcdGxGb3JtRmllbGRzVG9rZW5PcmdbdG9rZW4ua2V5XSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWVEYXRhXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR2YWx1ZURhdGEgPSB2YWx1ZURhdGEgPyB2YWx1ZURhdGEgOiAnJztcclxuXHRcdFx0XHRcdFx0dG9rZW5UcmFuc2xhdGVkID0gdmFsdWVEYXRhO1xyXG5cdFx0XHRcdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCB2YWx1ZURhdGEpO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVDogLy9CdWRnZXRcclxuXHRcdFx0XHRcdFx0Y29uc3QgYnVkZ2V0UmVzb2x2ZVRva2VuID0gdGhpcy5yZXNvbHZlQnVkZ2V0VG9rZW4oaHRtbCwgdG9rZW4sIHN1YlRva2VuKTtcclxuXHRcdFx0XHRcdFx0aHRtbCA9IGJ1ZGdldFJlc29sdmVUb2tlbi5odG1sO1xyXG5cdFx0XHRcdFx0XHR0b2tlblRyYW5zbGF0ZWQgPSBidWRnZXRSZXNvbHZlVG9rZW4udmFsdWU7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0w6IC8vVGFza1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0YXNrUmVzb2x2ZVRva2VuID0gdGhpcy5yZXNvbHZlVGFza29rZW4oaHRtbCwgdG9rZW4sIHN1YlRva2VuKTtcclxuXHRcdFx0XHRcdFx0aHRtbCA9IHRhc2tSZXNvbHZlVG9rZW4uaHRtbDtcclxuXHRcdFx0XHRcdFx0dG9rZW5UcmFuc2xhdGVkID0gdGFza1Jlc29sdmVUb2tlbi52YWx1ZTtcclxuXHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUM6IC8vU3RhdGljXHJcblx0XHRcdFx0XHRcdGNvbnN0IHN0YXRpY1Jlc29sdmVUb2tlbiA9IHRoaXMucmVzb2x2ZVN0YXRpY1Rva2VuKGh0bWwsIHRva2VuLCBzdWJUb2tlbik7XHJcblx0XHRcdFx0XHRcdGh0bWwgPSBzdGF0aWNSZXNvbHZlVG9rZW4uaHRtbDtcclxuXHRcdFx0XHRcdFx0dG9rZW5UcmFuc2xhdGVkID0gc3RhdGljUmVzb2x2ZVRva2VuLnZhbHVlO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURUQ6IC8vQ2FsY3VsYXRlZFxyXG5cdFx0XHRcdFx0XHQvLyBSZXBsYWNlcyBkZSB0b2tlbnMgb2YgdGhlIGZvcm11bGFcclxuXHRcdFx0XHRcdFx0Y29uc3QgdG9rZW5OYW1lOiBzdHJpbmcgPSBsVG9rZW5zQ2FsY3VsYXRlZFtzdWJUb2tlblsxXV0ubmFtZTtcclxuXHRcdFx0XHRcdFx0bGV0IGZvcm11bGE6IHN0cmluZyA9IGxUb2tlbnNDYWxjdWxhdGVkW3N1YlRva2VuWzFdXS5mb3JtdWxhO1xyXG5cdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdC8vQVFVSVxyXG5cdFx0XHRcdFx0XHRcdGZvcm11bGEgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW5zRnJvbUxpc3RPYmplY3QoXHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlbk5hbWUsXHJcblx0XHRcdFx0XHRcdFx0XHRmb3JtdWxhLFxyXG5cdFx0XHRcdFx0XHRcdFx0bERhdGFPcmdcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRcdFx0XHRcdGZvcm11bGEgPSBudWxsO1xyXG5cdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IuZXJyb3IgPyBlcnJvci5lcnJvciA6IGVycm9yKTtcclxuXHRcdFx0XHRcdFx0XHR0aGlzLnRvYXN0clNlcnZpY2Uud2FybmluZyhlcnJvci5tZXNzYWdlLCBlcnJvci50aXR0bGUpO1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHQvLyBUcnkgdG8gZXZhbHVhdGUgdGhlIGZvcm11bGFcclxuXHRcdFx0XHRcdFx0bGV0IHJlc3VsdDogYW55ID0gbnVsbDtcclxuXHRcdFx0XHRcdFx0aWYgKGZvcm11bGEgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHR0cnkge1xyXG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0ID0gZm9ybXVsYS5zdGFydHNXaXRoKCdmaWxlOi8vJylcclxuXHRcdFx0XHRcdFx0XHRcdFx0PyBcIjxpbWcgd2lkdGg9JzI1MHB4JyBoZWlnaHQ9J2F1dG8nIHNyYz0nXCIgKyBmb3JtdWxhICsgXCInLz5cIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IGV2YWwoZm9ybXVsYSk7XHJcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0Y29uc29sZS5lcnJvcihcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0Vycm9yIGV2YWx1YXRpbmcgdGhlIGZvcm11bGEuJyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0bFRva2Vuc0NhbGN1bGF0ZWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdHN1YlRva2VuLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRlXHJcblx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy50b2FzdHJTZXJ2aWNlLmVycm9yKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHQnTm8gc2UgbG9ncm8gZXZhbHVhciBsYSBmb3JtdWxhciBkZWwgdG9rZW4gJyArIHRva2VuTmFtZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0J0Vycm9yISdcclxuXHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdGlmIChyZXN1bHQgIT09IG51bGwpIHtcclxuXHRcdFx0XHRcdFx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHJlc3VsdCk7XHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlblRyYW5zbGF0ZWQgPSByZXN1bHQ7XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHR0b2tlblR5cGVUcmFuc2xhdGVkW3R5cGVUb2tlbl1bdG9rZW4ua2V5XSA9IHRva2VuVHJhbnNsYXRlZDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0dGhpcy5vbkdlbmVyYXRlLmVtaXQoe1xyXG5cdFx0XHRodG1sOiBodG1sLFxyXG5cdFx0XHR0b2tlblR5cGVUcmFuc2xhdGVkOiB0b2tlblR5cGVUcmFuc2xhdGVkXHJcblx0XHR9KTtcclxuXHRcdC8vIH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIFRyeSB0byBmaW5kIHRoZSBidWRnZXQgaW5mbyB0byB0cmFuc2xhdGUgdGhlIHRva2VuLlxyXG5cdCAqIEBwYXJhbSBodG1sXHJcblx0ICogQHBhcmFtIHRva2VuXHJcblx0ICogQHBhcmFtIHN1YlRva2VuXHJcblx0ICovXHJcblx0cmVzb2x2ZUJ1ZGdldFRva2VuKGh0bWw6IHN0cmluZywgdG9rZW46IGFueSwgc3ViVG9rZW46IHN0cmluZ1tdKTogYW55IHtcclxuXHRcdGxldCB0cHJlc0NvZGlnbzogbnVtYmVyID0gTnVtYmVyKHN1YlRva2VuWzFdKTtcclxuXHRcdGxldCB0b2tlblZhbHVlOiBzdHJpbmcgPSBzdWJUb2tlblsyXTtcclxuXHRcdGxldCBidWRnZXREdG86IEJ1ZGdldER0byA9IG51bGw7XHJcblx0XHRsZXQgaWRUb3RhbEJ1ZGdldDogc3RyaW5nID0gbnVsbDtcclxuXHRcdGlmIChcclxuXHRcdFx0dGhpcy5idWRnZXREdG9QcmltYXJ5ICYmXHJcblx0XHRcdHRoaXMuYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQgJiZcclxuXHRcdFx0dHByZXNDb2RpZ28gPT0gRVRpcG9QcmVzdXB1ZXN0by5QUklNQVJZXHJcblx0XHQpIHtcclxuXHRcdFx0YnVkZ2V0RHRvID0gdGhpcy5idWRnZXREdG9QcmltYXJ5O1xyXG5cdFx0XHRpZFRvdGFsQnVkZ2V0ID0gJ3BsaS10b2tlbi1wcmluY2lwYWwtYnVkZ2V0LXRvdGFsLXN1bW1hcnknO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0dGhpcy5idWRnZXREdG9TZWN1bmRhcnkgJiZcclxuXHRcdFx0dGhpcy5idWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0ICYmXHJcblx0XHRcdHRwcmVzQ29kaWdvID09IEVUaXBvUHJlc3VwdWVzdG8uU0VDT05EQVJZXHJcblx0XHQpIHtcclxuXHRcdFx0YnVkZ2V0RHRvID0gdGhpcy5idWRnZXREdG9TZWN1bmRhcnk7XHJcblx0XHRcdGlkVG90YWxCdWRnZXQgPSAncGxpLXRva2VuLXNlY3VuZGFyeS1idWRnZXQtdG90YWwtc3VtbWFyeSc7XHJcblx0XHR9XHJcblx0XHRpZiAoYnVkZ2V0RHRvID09PSBudWxsIHx8ICFidWRnZXREdG8uYnVkZ2V0KSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoXHJcblx0XHRcdFx0J05vIHNlIGxvZ3JvIGVuY29udHJhciBlbCBwcmVzdXB1ZXN0byBkZWwgdG9rZW4uJyxcclxuXHRcdFx0XHR0b2tlbixcclxuXHRcdFx0XHR0aGlzLmJ1ZGdldER0b1ByaW1hcnksXHJcblx0XHRcdFx0dGhpcy5idWRnZXREdG9TZWN1bmRhcnlcclxuXHRcdFx0KTtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRodG1sOiBodG1sLFxyXG5cdFx0XHRcdHZhbHVlOiBudWxsXHJcblx0XHRcdH07XHJcblx0XHR9XHJcblx0XHRsZXQgdmFsdWVEYXRhID0gbnVsbDtcclxuXHRcdGNvbnN0IGFwcGxpY2F0aW9uUHJvY2VzcyA9XHJcblx0XHRcdHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfQU1PVU5UIHx8XHJcblx0XHRcdHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUyB8fFxyXG5cdFx0XHR0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9BUFBMSUNBVElPTl9QUk9DRVNTX1RPVEFMX0ZJTkFOQ0lORztcclxuXHRcdGNvbnN0IGxlZ2FsaXphdGlvblByb2Nlc3MgPVxyXG5cdFx0XHR0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQgfHxcclxuXHRcdFx0dG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfTEVHQUxJWkFUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUyB8fFxyXG5cdFx0XHR0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkc7XHJcblxyXG5cdFx0aWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX1RPVEFMX0FNT1VOVCkge1xyXG5cdFx0XHR2YWx1ZURhdGEgPVxyXG5cdFx0XHRcdGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5zdW1tYXJ5XHJcblx0XHRcdFx0XHQ/IHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShcclxuXHRcdFx0XHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0LnN1bW1hcnkuYnVkZ2V0VG90YWwsXHJcblx0XHRcdFx0XHRcdFx0J2RlZmF1bHQnLFxyXG5cdFx0XHRcdFx0XHRcdCcnLFxyXG5cdFx0XHRcdFx0XHRcdCcxLjAtMCdcclxuXHRcdFx0XHRcdCAgKVxyXG5cdFx0XHRcdFx0OiAwO1xyXG5cdFx0fSBlbHNlIGlmICh0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9SRVNVTUVfQ0FURUdPUllfWUVBUikge1xyXG5cdFx0XHQvLyB0aGlzLmFkZEluZm9Ub2tlblJlc3VtZUNhdGVnb3J5WWVhcih0cHJlc0NvZGlnbywgaWRUb3RhbEJ1ZGdldCwgYnVkZ2V0RHRvKTtcclxuXHRcdFx0dGhpcy5hZGRJbmZvVG9rZW5SZXN1bWVDYXRlZ29yeVllYXIodHByZXNDb2RpZ28sIGlkVG90YWxCdWRnZXQsIGJ1ZGdldER0byk7XHJcblx0XHRcdGNvbnN0IHBsaVRva2VuVG90YWxCdWRnZXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZFRvdGFsQnVkZ2V0KTtcclxuXHRcdFx0aWYgKHBsaVRva2VuVG90YWxCdWRnZXQpIHtcclxuXHRcdFx0XHR2YWx1ZURhdGEgPSB0aGlzLnJlbW92ZUNvbW1lbnRzSHRtbChwbGlUb2tlblRvdGFsQnVkZ2V0LmlubmVySFRNTCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0Y29uc29sZS5sb2coJ3BsaVRva2VuVG90YWxCdWRnZXQgLSBOVUxMJywgcGxpVG9rZW5Ub3RhbEJ1ZGdldCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfRkVDSEFfRklOQU5DSU5HX1NUQVJUKSB7XHJcblx0XHRcdHZhbHVlRGF0YSA9XHJcblx0XHRcdFx0YnVkZ2V0RHRvLmJ1ZGdldCAmJiBidWRnZXREdG8uYnVkZ2V0LmZpbmFuY2luZ1N0YXJ0XHJcblx0XHRcdFx0XHQ/IGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nU3RhcnRcclxuXHRcdFx0XHRcdDogJyc7XHJcblxyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKFxyXG5cdFx0XHRcdGh0bWwsXHJcblx0XHRcdFx0dG9rZW4udmFsdWUsXHJcblx0XHRcdFx0dmFsdWVEYXRhLFxyXG5cdFx0XHRcdHRoaXMuZGF0YT8uaWRpb21hPy5sb2NhbGVcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfRkVDSEFfRklOQU5DSU5HX0VORCkge1xyXG5cdFx0XHR2YWx1ZURhdGEgPVxyXG5cdFx0XHRcdGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdFbmRcclxuXHRcdFx0XHRcdD8gYnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdFbmRcclxuXHRcdFx0XHRcdDogJyc7XHJcblxyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKFxyXG5cdFx0XHRcdGh0bWwsXHJcblx0XHRcdFx0dG9rZW4udmFsdWUsXHJcblx0XHRcdFx0dmFsdWVEYXRhLFxyXG5cdFx0XHRcdHRoaXMuZGF0YT8uaWRpb21hPy5sb2NhbGVcclxuXHRcdFx0KTtcclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19EVVJBVElPTl9TVFVESUVTKSB7XHJcblx0XHRcdHZhbHVlRGF0YSA9XHJcblx0XHRcdFx0YnVkZ2V0RHRvLmJ1ZGdldCAmJiBidWRnZXREdG8uYnVkZ2V0LnN0dWR5U3RhcnQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5zdHVkeUVuZFxyXG5cdFx0XHRcdFx0PyBEYXRlVXRpbC5lbGFwc2VkTW9udGhzKFxyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldER0by5idWRnZXQuc3R1ZHlTdGFydCxcclxuXHRcdFx0XHRcdFx0XHRidWRnZXREdG8uYnVkZ2V0LnN0dWR5RW5kXHJcblx0XHRcdFx0XHQgICkgKyAxXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0fSBlbHNlIGlmICh0b2tlblZhbHVlID09IFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0ZJTkFOQ0lOR19EVVJBVElPTikge1xyXG5cdFx0XHR2YWx1ZURhdGEgPVxyXG5cdFx0XHRcdGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdFbmQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdTdGFydFxyXG5cdFx0XHRcdFx0PyBEYXRlVXRpbC5lbGFwc2VkTW9udGhzKFxyXG5cdFx0XHRcdFx0XHRcdGJ1ZGdldER0by5idWRnZXQuZmluYW5jaW5nU3RhcnQsXHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0RHRvLmJ1ZGdldC5maW5hbmNpbmdFbmRcclxuXHRcdFx0XHRcdCAgKSArIDFcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHR9IGVsc2UgaWYgKHRva2VuVmFsdWUgPT0gVG9rZW5TZXJ2aWNlLkxFR0FMSVpBVElPTl9PUl9BUFBMSUNBVElPTl9UT1RBTF9GSU5BTkNJTkcpIHtcclxuXHRcdFx0Ly8gSk1QIC0gTWFudGlzIDY2NzQgLSBBZGQgbG9naWMgdG8gbGVnYWxpemF0aW9uIG9yIGFwcGxpY2F0aW9uIHRvdGFsIGZpbmFuY2luZ1xyXG5cdFx0XHRpZiAoXHJcblx0XHRcdFx0dGhpcy5kYXRhICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24gJiZcclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5idWRnZXRcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0Y29uc3QgYnVkZ2V0ID0gdGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24uYnVkZ2V0O1xyXG5cclxuXHRcdFx0XHRpZiAoYnVkZ2V0LmxlZ2FsaXphdGlvblByb2Nlc3MgJiYgYnVkZ2V0LmxlZ2FsaXphdGlvblByb2Nlc3MudG90YWxGaW5hbmNpbmcpIHtcclxuXHRcdFx0XHRcdGNvbnN0IHRvdGFsRmluYW5jaW5nID0gTnVtYmVyKGJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzLnRvdGFsRmluYW5jaW5nKTtcclxuXHRcdFx0XHRcdHZhbHVlRGF0YSA9IHRvdGFsRmluYW5jaW5nICogMS4wMDM7XHJcblx0XHRcdFx0fSBlbHNlIGlmIChidWRnZXQuYXBwbGljYXRpb25Qcm9jZXNzICYmIGJ1ZGdldC5hcHBsaWNhdGlvblByb2Nlc3MudG90YWxGaW5hbmNpbmcpIHtcclxuXHRcdFx0XHRcdHZhbHVlRGF0YSA9IE51bWJlcihidWRnZXQuYXBwbGljYXRpb25Qcm9jZXNzLnRvdGFsRmluYW5jaW5nKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdChhcHBsaWNhdGlvblByb2Nlc3MgfHwgbGVnYWxpemF0aW9uUHJvY2VzcykgJiZcclxuXHRcdFx0dGhpcy5kYXRhICYmXHJcblx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uICYmXHJcblx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldFxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIEdldCB0aGUgdG90YWwgYnVkZ2V0IGFtb3VudCBkZXBlbmQgb2YgdGhlIHByb2Nlc3NcclxuXHRcdFx0Y29uc3QgYXBwQnVkZ2V0VG90YWw6IEFwcGxpY2F0aW9uQnVkZ2V0VG90YWwgPSBhcHBsaWNhdGlvblByb2Nlc3NcclxuXHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldC5hcHBsaWNhdGlvblByb2Nlc3NcclxuXHRcdFx0XHQ6IHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzO1xyXG5cdFx0XHRpZiAoYXBwQnVkZ2V0VG90YWwgIT0gdW5kZWZpbmVkICYmIGFwcEJ1ZGdldFRvdGFsICE9IG51bGwpIHtcclxuXHRcdFx0XHQvLyBubyBtYXR0ZXIgdGhlIHByb2Nlc3MsIHRoZSBjbGFzcyBpcyB0aGUgc2FtZVxyXG5cdFx0XHRcdHN3aXRjaCAodG9rZW5WYWx1ZSkge1xyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQ6XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9BTU9VTlQ6XHJcblx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IGFwcEJ1ZGdldFRvdGFsLnRvdGFsQW1vdW50O1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0FQUExJQ0FUSU9OX1BST0NFU1NfVE9UQUxfT1dOX0ZPVU5EUzpcclxuXHRcdFx0XHRcdGNhc2UgVG9rZW5TZXJ2aWNlLkJVREdFVF9UT0tFTlNfS0VZX0xFR0FMSVpBVElPTl9QUk9DRVNTX1RPVEFMX09XTl9GT1VORFM6XHJcblx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IGFwcEJ1ZGdldFRvdGFsLnRvdGFsT3duRnVuZHM7XHJcblx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0Y2FzZSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfQVBQTElDQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkc6XHJcblx0XHRcdFx0XHRjYXNlIFRva2VuU2VydmljZS5CVURHRVRfVE9LRU5TX0tFWV9MRUdBTElaQVRJT05fUFJPQ0VTU19UT1RBTF9GSU5BTkNJTkc6XHJcblx0XHRcdFx0XHRcdHZhbHVlRGF0YSA9IGFwcEJ1ZGdldFRvdGFsLnRvdGFsRmluYW5jaW5nO1xyXG5cdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAodG9rZW5WYWx1ZSA9PSBUb2tlblNlcnZpY2UuQlVER0VUX1RPS0VOU19LRVlfSU5TVVJBTkNFX0FNT1VOVCkge1xyXG5cdFx0XHRsZXQgdG90YWxGaW5hbmNpbmcgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJ1ZGdldC5sZWdhbGl6YXRpb25Qcm9jZXNzICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24uYnVkZ2V0LmxlZ2FsaXphdGlvblByb2Nlc3MudG90YWxGaW5hbmNpbmc7XHJcblx0XHRcdHRvdGFsRmluYW5jaW5nID1cclxuXHRcdFx0XHR0b3RhbEZpbmFuY2luZyA9PSB1bmRlZmluZWQgfHwgdG90YWxGaW5hbmNpbmcgPT0gbnVsbCA/IDAgOiBOdW1iZXIodG90YWxGaW5hbmNpbmcpO1xyXG5cdFx0XHQvLyBsZXQgdG90YWxJbnN1cmFuY2VBbW91bnQgPSB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi50b3RhbEluc3VyYW5jZUFtb3VudDtcclxuXHRcdFx0Ly8gdG90YWxJbnN1cmFuY2VBbW91bnQgPVxyXG5cdFx0XHQvLyBcdHRvdGFsSW5zdXJhbmNlQW1vdW50ID09IHVuZGVmaW5lZCB8fCB0b3RhbEluc3VyYW5jZUFtb3VudCA9PSBudWxsXHJcblx0XHRcdC8vIFx0XHQ/IDBcclxuXHRcdFx0Ly8gXHRcdDogTnVtYmVyKHRvdGFsSW5zdXJhbmNlQW1vdW50KTtcclxuXHRcdFx0dmFsdWVEYXRhID0gdG90YWxGaW5hbmNpbmcgKiAxLjAwMztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdC8vIFdoZW4gdGhlIHRva2VuIGNhbid0IGJlIHJlc29sdmVcclxuXHRcdFx0Y29uc29sZS5lcnJvcigncmVzb2x2ZUJ1ZGdldFRva2VuIC1ObyBzZSBsb2dybyByZXNvbHZlciBlbCB0b2tlbiBkZSB0aXBvIHByZXN1cHVlc3RvJyk7XHJcblx0XHR9XHJcblx0XHR2YWx1ZURhdGEgPSB2YWx1ZURhdGEgPT09IG51bGwgPyAnJyA6IHZhbHVlRGF0YTtcclxuXHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHZhbHVlRGF0YSk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRodG1sOiBodG1sLFxyXG5cdFx0XHR2YWx1ZTogdmFsdWVEYXRhXHJcblx0XHR9O1xyXG5cdH1cclxuXHRyZXNvbHZlVGFza29rZW4oaHRtbDogc3RyaW5nLCB0b2tlbjogYW55LCBzdWJUb2tlbjogc3RyaW5nW10pOiBhbnkge1xyXG5cdFx0bGV0IHZhbHVlVGFzayA9IG51bGw7XHJcblx0XHRpZiAoc3ViVG9rZW4ubGVuZ3RoID4gMikge1xyXG5cdFx0XHRsZXQgdGFza0lkID0gTnVtYmVyKHN1YlRva2VuWzJdKTtcclxuXHRcdFx0bGV0IHRhc2sgPSB0aGlzLmV2YWx1YXRpb24udGFza3MuZmluZCgodCkgPT4gdC5pZFRhc2sgPT0gdGFza0lkKTtcclxuXHRcdFx0dmFsdWVUYXNrID0gdGFzay5yZXN1bHQ7XHJcblx0XHR9XHJcblx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCB2YWx1ZVRhc2spO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aHRtbDogaHRtbCxcclxuXHRcdFx0dmFsdWU6IHZhbHVlVGFza1xyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdHJlc29sdmVTdGF0aWNUb2tlbihodG1sOiBzdHJpbmcsIHRva2VuOiBhbnksIHN1YlRva2VuOiBzdHJpbmdbXSk6IGFueSB7XHJcblx0XHRsZXQgdmFsdWVSZXBsYWNlOiBhbnkgPSBudWxsO1xyXG5cdFx0aWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9DT0RJR09fVkVSSUZJQ0FDSU9OLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSB0aGlzLnVuaXF1ZVZlcmlmaWNhdGlvbkNvZGU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHRoaXMudW5pcXVlVmVyaWZpY2F0aW9uQ29kZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9BX1FVSUVOX1ZBX0RJUklHSURPLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHQvLyBpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbikge1xyXG5cdFx0XHRodG1sID0gdGhpcy5yZXNvbHZlU3RhdGljVG9rZW5zS2V5QVF1aWVuVmFEaXJpZ2lkbyhodG1sLCB0b2tlbi52YWx1ZSk7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9ICcnO1xyXG5cdFx0XHQvLyB9XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9MRVRURVJfU0lHTi50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0aHRtbCA9IHRoaXMucmVzb2x2ZVN0YXRpY1Rva2Vuc0tleVNpZ24oaHRtbCwgdG9rZW4udmFsdWUsIHN1YlRva2VuKTtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gJyc7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9TQUxVRE9fQ09NUExFTUVOVEFSSU8udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdC8vIGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uKSB7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnJlc29sdmVTdGF0aWNUb2tlbnNLZXlTYWx1ZG9Db21wbGVtZW50YXJpbyhodG1sLCB0b2tlbi52YWx1ZSk7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9ICcnO1xyXG5cdFx0XHQvLyB9XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9GRUNIQV9BQ1RVQUwudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IG5ldyBEYXRlKCk7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIG5ldyBEYXRlKCkpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfUEFUUk9DSU5BRE9SLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBwYXROb21icmUgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5wbGlQcm9tb2Npb24gJiZcclxuXHRcdFx0XHR0aGlzLmRhdGEucGxpUHJvbW9jaW9uLnBsaVByb2dyYW1hICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLnBsaVByb21vY2lvbi5wbGlQcm9ncmFtYS5wbGlQYXRyb2NpbmFkb3JcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLnBsaVByb21vY2lvbi5wbGlQcm9ncmFtYS5wbGlQYXRyb2NpbmFkb3IucGF0Tm9tYnJlXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBwYXROb21icmU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHBhdE5vbWJyZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9QUk9HUkFNQS50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgcHJvZ05vbWJyZSA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLnBsaVByb21vY2lvbiAmJiB0aGlzLmRhdGEucGxpUHJvbW9jaW9uLnBsaVByb2dyYW1hXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5wbGlQcm9tb2Npb24ucGxpUHJvZ3JhbWEucHJvZ05vbWJyZVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gcHJvZ05vbWJyZTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgcHJvZ05vbWJyZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9QUk9NT0NJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHByb21Ob21icmUgPSB0aGlzLmRhdGEucGxpUHJvbW9jaW9uID8gdGhpcy5kYXRhLnBsaVByb21vY2lvbi5wcm9tTm9tYnJlIDogJyc7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IHByb21Ob21icmU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHByb21Ob21icmUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfQU5JT19QUk9NT0NJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IGFuaW9Qcm9tb2Npb24gPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5wbGlQcm9tb2Npb24gJiYgdGhpcy5kYXRhLnBsaVByb21vY2lvbi5wcm9tQW5pb1xyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEucGxpUHJvbW9jaW9uLnByb21BbmlvXHJcblx0XHRcdFx0XHQ6IDA7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IGFuaW9Qcm9tb2Npb247XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIGFuaW9Qcm9tb2Npb24pO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PVxyXG5cdFx0XHRUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfSVNPX01PTkVEQV9CQVNFLnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRjb25zdCBiYXNlQ3VycmVuY3kgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5idWRnZXREdG9QcmltYXJ5ICYmIHRoaXMuZGF0YS5idWRnZXREdG9QcmltYXJ5LmJ1ZGdldFxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuYmFzZUN1cnJlbmN5XHJcblx0XHRcdFx0XHQ6IHRoaXMuZGF0YS5idWRnZXREdG9TZWN1bmRhcnkgJiYgdGhpcy5kYXRhLmJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXRcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuYmFzZUN1cnJlbmN5XHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBiYXNlQ3VycmVuY3k7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIGJhc2VDdXJyZW5jeSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0tFWV9TVEFUVVNfTkFNRS50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3Qgc3RhdHVzTmFtZSA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24gJiZcclxuXHRcdFx0XHRVdGlsU3RyaW5nLmlzVmFsaWQodGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24uc3RhdGVOYW1lKVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5zdGF0ZU5hbWVcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IHN0YXR1c05hbWU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIHN0YXR1c05hbWUpO1xyXG5cdFx0fSBlbHNlIGlmIChcclxuXHRcdFx0c3ViVG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PSBUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19LRVlfVVNFUl9JTklUSUFMUy50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgcGxpVXNlcjogUGxpVXNlciA9IEF1dGhlbnRpY2F0aW9uVXRpbC5nZXRQbGlVc2VyKCk7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IFV0aWxTdHJpbmcuaW5pdGlhbExldHRlcnMocGxpVXNlci5maXJzdG5hbWUgKyAnICcgKyBwbGlVc2VyLmxhc3RuYW1lKTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgdmFsdWVSZXBsYWNlKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT1cclxuXHRcdFx0VG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfS0VZX05VTUJFUl9BUFBMSUNBVElPTi50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgbnVtYmVyID1cclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbiAmJiB0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi5udW1iZXJcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24ubnVtYmVyXHJcblx0XHRcdFx0XHQ6IG51bGw7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IG51bWJlcjtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgbnVtYmVyKTtcclxuXHRcdH0gZWxzZSBpZiAoXHJcblx0XHRcdHN1YlRva2VuWzFdLnRvTG93ZXJDYXNlKCkgPT0gVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfQ09NTUlUVEVFX05BTUUudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IGNvbWl0ZU5vbWJyZSA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtICYmIHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybS5jb21pdGVOb21icmVcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtLmNvbWl0ZU5vbWJyZVxyXG5cdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBjb21pdGVOb21icmU7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIGNvbWl0ZU5vbWJyZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9TRUdNRU5UQVRJT04udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IGNvbWl0ZVNlZ21lbnRhY2lvbiA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtW1Rva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9TRUdNRU5UQVRJT05dXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfU0VHTUVOVEFUSU9OXVxyXG5cdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHR2YWx1ZVJlcGxhY2UgPSBjb21pdGVTZWdtZW50YWNpb247XHJcblx0XHRcdGh0bWwgPSB0aGlzLnRva2VuU2VydmljZS5yZXBsYWNlVG9rZW4oaHRtbCwgdG9rZW4udmFsdWUsIGNvbWl0ZVNlZ21lbnRhY2lvbik7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9BR0dSVVBBVElPTi50b0xvd2VyQ2FzZSgpXHJcblx0XHQpIHtcclxuXHRcdFx0Y29uc3QgY29taXRlQWdydXBhY2lvbiA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtW1Rva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9BR0dSVVBBVElPTl1cclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtW1Rva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9BR0dSVVBBVElPTl1cclxuXHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gY29taXRlQWdydXBhY2lvbjtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgY29taXRlQWdydXBhY2lvbik7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9DVVRMSU5FX0RBVEUudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGxldCBjdXRMaW5lRGF0ZSA9XHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtICYmXHJcblx0XHRcdFx0dGhpcy5kYXRhLmRhdGFGb3JtQnlGb3JtW1Rva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0NPTU1JVFRFRV9DVVRMSU5FX0RBVEVdXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19DT01NSVRURUVfQ1VUTElORV9EQVRFXVxyXG5cdFx0XHRcdFx0OiBudWxsO1xyXG5cdFx0XHRpZiAoY3V0TGluZURhdGUgaW5zdGFuY2VvZiBEYXRlKSB7XHJcblx0XHRcdFx0Y3V0TGluZURhdGUgPSBjdXRMaW5lRGF0ZS50b1N0cmluZygpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IGN1dExpbmVEYXRlO1xyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBjdXRMaW5lRGF0ZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1RPVEFMX1dFSUdIVEVELnRvTG93ZXJDYXNlKClcclxuXHRcdCkge1xyXG5cdFx0XHRsZXQgYmVzdFNjZW5hcmlvVmFsdWU6IGFueSA9ICcnO1xyXG5cdFx0XHRpZiAodGhpcy5ldmFsdWF0aW9uICYmIHRoaXMuZXZhbHVhdGlvbi5zY2VuYXJpb3MpIHtcclxuXHRcdFx0XHRsZXQgYmVzdFNjZW5hcmlvID0gdGhpcy5ldmFsdWF0aW9uLnNjZW5hcmlvcy5maWx0ZXIoKHMpID0+IHMuYmVzdClbMF07XHJcblx0XHRcdFx0aWYgKGJlc3RTY2VuYXJpbykge1xyXG5cdFx0XHRcdFx0YmVzdFNjZW5hcmlvVmFsdWUgPSBiZXN0U2NlbmFyaW8ucmVzdWx0O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRodG1sID0gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuLnZhbHVlLCBiZXN0U2NlbmFyaW9WYWx1ZSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09XHJcblx0XHRcdFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX1VTRVJfVFlQRV9DUkVESVRfU1RVRFkudG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdGNvbnN0IHVzZXJUeXBlQ3JlZGl0U3R1ZHkgPVxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUJ5Rm9ybVtUb2tlblNlcnZpY2UuU1RBVElDX1RPS0VOU19VU0VSX1RZUEVfQ1JFRElUX1NUVURZXVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YUZvcm1CeUZvcm1bVG9rZW5TZXJ2aWNlLlNUQVRJQ19UT0tFTlNfVVNFUl9UWVBFX0NSRURJVF9TVFVEWV1cclxuXHRcdFx0XHRcdDogbnVsbDtcclxuXHRcdFx0dmFsdWVSZXBsYWNlID0gdXNlclR5cGVDcmVkaXRTdHVkeTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgdXNlclR5cGVDcmVkaXRTdHVkeSk7XHJcblx0XHR9IGVsc2UgaWYgKFxyXG5cdFx0XHRzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5TX0JFTl9DT0RJR08udG9Mb3dlckNhc2UoKVxyXG5cdFx0KSB7XHJcblx0XHRcdHZhbHVlUmVwbGFjZSA9IHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJlbkNvZGlnbztcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihcclxuXHRcdFx0XHRodG1sLFxyXG5cdFx0XHRcdHRva2VuLnZhbHVlLFxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLmJlbkNvZGlnb1xyXG5cdFx0XHQpO1xyXG5cdFx0fSBlbHNlIGlmIChzdWJUb2tlblsxXS50b0xvd2VyQ2FzZSgpID09IFRva2VuU2VydmljZS5TVEFUSUNfVE9LRU5fU1VSTkFNRS50b0xvd2VyQ2FzZSgpKSB7XHJcblx0XHRcdGlmIChcclxuXHRcdFx0XHR0aGlzLmRhdGEuZGF0YUZvcm1BcHBsaWNhdGlvbi51c2VybmFtZSAmJlxyXG5cdFx0XHRcdHRoaXMuZGF0YS5kYXRhRm9ybUFwcGxpY2F0aW9uLnVzZXJuYW1lICE9PSBudWxsXHJcblx0XHRcdCkge1xyXG5cdFx0XHRcdHRoaXMuZmluZFNlc2lvbkJ5TG9naW4oaHRtbCwgdG9rZW4pO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBEb24ndCBmaW5kIHRoZSB0b2tlblxyXG5cdFx0XHRjb25zb2xlLmVycm9yKCdObyBzZSBlbmNvbnRybyBlbCB0b2tlbicsIHRva2VuKTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgJycpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0aHRtbDogaHRtbCxcclxuXHRcdFx0dmFsdWU6IHZhbHVlUmVwbGFjZVxyXG5cdFx0fTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGZpbmRTZXNpb25CeUxvZ2luKGh0bWw6IHN0cmluZywgdG9rZW46IGFueSkge1xyXG5cdFx0dHJ5IHtcclxuXHRcdFx0Y29uc3Qgc2VzaW9uID0gYXdhaXQgdGhpcy5zZXNpb25TZXJ2aWNlXHJcblx0XHRcdFx0LmdldEJ5TG9naW4odGhpcy5kYXRhLmRhdGFGb3JtQXBwbGljYXRpb24udXNlcm5hbWUpXHJcblx0XHRcdFx0LnRvUHJvbWlzZSgpO1xyXG5cdFx0XHRjb25zdCBzdXJuYW1lcyA9XHJcblx0XHRcdFx0c2VzaW9uLnN1cm5hbWUgIT09ICcnICYmIHNlc2lvbi5zdXJuYW1lICE9PSBudWxsXHJcblx0XHRcdFx0XHQ/IHNlc2lvbi5zdXJuYW1lICsgJyAnICsgc2VzaW9uLmxhc3RuYW1lXHJcblx0XHRcdFx0XHQ6IHNlc2lvbi5sYXN0bmFtZTtcclxuXHRcdFx0aHRtbCA9IHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihodG1sLCB0b2tlbi52YWx1ZSwgc3VybmFtZXMpO1xyXG5cdFx0XHRjb25zb2xlLmxvZygnc3VybmFtZScsIHN1cm5hbWVzKTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbnN1bHRhbmRvIGVsIGxvZ2luIGVuIFBMSVMsIGdldEJ5TG9naW4nLCBlcnJvcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBGaW5kIGFsbCB0aGUgdG9rZW5zIHByZXNlbnQgaW4gdGhlIEhUTUwgdGV4dC4gT3JnYW5pemUgdGhpcyB0b2tlbnMgaW4gZm91ciBjYXRlZ29yaWVzLlxyXG5cdCAqIEBwYXJhbSBodG1sIFRleHQgb2YgdGhlIGh0bWxcclxuXHQgKi9cclxuXHRnZXRMaXN0VG9rZW5zKGh0bWw6IHN0cmluZyk6IGFueVtdIHtcclxuXHRcdC8vIGxldCBzdHJpbmdzOiBzdHJpbmdbXSA9IGh0bWwuc3BsaXQoXCIgXCIpO1xyXG5cdFx0bGV0IHRva2VuczogYW55W10gPSB0aGlzLnRva2VuU2VydmljZS5nZXRMaXN0VG9rZW5zQnlTdHJpbmcoaHRtbCk7XHJcblx0XHRsZXQgdG9rZW5zQ2F0ZWdvcnk6IGFueVtdID0gW107XHJcblx0XHRmb3IgKGxldCBpbmZvVG9rZW4gb2YgdG9rZW5zKSB7XHJcblx0XHRcdGlmIChpbmZvVG9rZW4pIHtcclxuXHRcdFx0XHRjb25zdCBrZXlUeXBlOiBudW1iZXIgPSBUb2tlblNlcnZpY2UuZ2V0S2V5VHlwZShcclxuXHRcdFx0XHRcdGluZm9Ub2tlbi5rZXkucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCd9JywgJycpXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRpZiAoa2V5VHlwZSkge1xyXG5cdFx0XHRcdFx0c3dpdGNoIChrZXlUeXBlKSB7XHJcblx0XHRcdFx0XHRcdGNhc2UgMTogLy8gRm9ybVxyXG5cdFx0XHRcdFx0XHRcdGlmICghdG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfRk9STV0gPSBbXTtcclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0dG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0ZPUk1dLnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAyOiAvL0J1ZGdldFxyXG5cdFx0XHRcdFx0XHRcdGlmICghdG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0JVREdFVF0pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVRdID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9CVURHRVRdLnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSAzOiAvL1N0YXRpY1xyXG5cdFx0XHRcdFx0XHRcdGlmICghdG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX1NUQVRJQ10pIHtcclxuXHRcdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9TVEFUSUNdLnB1c2goaW5mb1Rva2VuKTtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRcdFx0Y2FzZSA0OiAvL0NhbGN1bGF0ZWRcclxuXHRcdFx0XHRcdFx0XHRpZiAoIXRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXSkge1xyXG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zQ2F0ZWdvcnlbVG9rZW5TZXJ2aWNlLlRPS0VOX0xBQkVMX0NBTENVTEFURURdID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9DQUxDVUxBVEVEXS5wdXNoKGluZm9Ub2tlbik7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHRcdGNhc2UgNTogLy9UYXNrXHJcblx0XHRcdFx0XHRcdFx0aWYgKCF0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0xdKSB7XHJcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnNDYXRlZ29yeVtUb2tlblNlcnZpY2UuVE9LRU5fTEFCRUxfVEFTS0xdID0gW107XHJcblx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdHRva2Vuc0NhdGVnb3J5W1Rva2VuU2VydmljZS5UT0tFTl9MQUJFTF9UQVNLTF0ucHVzaChpbmZvVG9rZW4pO1xyXG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRva2Vuc0NhdGVnb3J5O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogSXQgcmVzb2x2ZXMgdGhlIHN0YXRpYyB0b2tlbiBkZXN0aW5hdGlvblxyXG5cdCAqIEBwYXJhbSBzdHJpbmdUZXh0XHJcblx0ICogQHBhcmFtIHRva2VuXHJcblx0ICogQHBhcmFtIGRhdGFWYWx1ZVxyXG5cdCAqL1xyXG5cdHJlc29sdmVTdGF0aWNUb2tlbnNLZXlBUXVpZW5WYURpcmlnaWRvKHN0cmluZ1RleHQ6IHN0cmluZywgdG9rZW5WYWx1ZTogYW55KTogc3RyaW5nIHtcclxuXHRcdC8vIGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uKSB7XHJcblx0XHR0aGlzLmVuYWJsZURlc3RpbmF0aW9uID0gdHJ1ZTtcclxuXHRcdHRoaXMuYWRkSW5mb1Rva2VuRGVzdGluYXRpb24oKTtcclxuXHRcdGNvbnN0IHBsaVRva2VuRGVzdGluYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGxpLXRva2VuLWRlc3RpbmF0aW9uJyk7XHJcblx0XHRsZXQgaHRtbCA9ICcnO1xyXG5cdFx0aWYgKHBsaVRva2VuRGVzdGluYXRpb24gJiYgcGxpVG9rZW5EZXN0aW5hdGlvbi5pbm5lckhUTUwubGVuZ3RoID4gMCkge1xyXG5cdFx0XHRodG1sID0gdGhpcy5yZW1vdmVDb21tZW50c0h0bWwocGxpVG9rZW5EZXN0aW5hdGlvbi5pbm5lckhUTUwpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5TZXJ2aWNlLnJlcGxhY2VUb2tlbihzdHJpbmdUZXh0LCB0b2tlblZhbHVlLCBodG1sKTtcclxuXHRcdC8vIH1cclxuXHRcdC8vIHJldHVybiBzdHJpbmdUZXh0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKi9cclxuXHRhZGRJbmZvVG9rZW5EZXN0aW5hdGlvbigpIHtcclxuXHRcdGxldCBwbGlUb2tlbkRlc3RpbmF0aW9uID0gJCgnI3BsaS10b2tlbi1kZXN0aW5hdGlvbicpO1xyXG5cdFx0cGxpVG9rZW5EZXN0aW5hdGlvbi5lbXB0eSgpO1xyXG5cdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24pIHtcclxuXHRcdFx0bGV0IGRlc3RpbmF0aW9uSW5mbyA9ICQoJzxkaXY+PC9kaXY+Jyk7XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRleHQpIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvID0gJCgnPGRpdj48L2Rpdj4nKS50ZXh0KHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24udGV4dCk7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmFwcGVuZCh2YWx1ZUluZm8pO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubmFtZSB8fCB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mb05hbWUgPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLm5hbWVcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5uYW1lICsgJyAnXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdHZhbHVlSW5mb05hbWUgKz0gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lXHJcblx0XHRcdFx0XHQ6ICcnO1xyXG5cdFx0XHRcdGxldCB2YWx1ZUluZm8gPSAkKCc8ZGl2PjwvZGl2PicpLmFwcGVuZCgnPHN0cm9uZz4nICsgdmFsdWVJbmZvTmFtZSArICc8L3N0cm9uZz4nKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY2FyZ28pIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvID0gJCgnPGRpdj48L2Rpdj4nKS50ZXh0KHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY2FyZ28pO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5hcHBlbmQodmFsdWVJbmZvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5vY2N1cGF0aW9uKSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLm9jY3VwYXRpb24pO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5hcHBlbmQodmFsdWVJbmZvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jb21wYW55KSB7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNvbXBhbnkpO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5hcHBlbmQodmFsdWVJbmZvKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5hZGRyZXNzIHx8IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc0RldGFpbHMpIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvTmFtZSA9IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc1xyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3MgKyAnICdcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdFx0dmFsdWVJbmZvTmFtZSArPSB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmFkZHJlc3NEZXRhaWxzXHJcblx0XHRcdFx0XHQ/IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc0RldGFpbHNcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh2YWx1ZUluZm9OYW1lKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY2l0eSB8fCB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnkpIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvTmFtZSA9IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY2l0eVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNpdHlcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdFx0dmFsdWVJbmZvTmFtZSArPVxyXG5cdFx0XHRcdFx0dGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5jaXR5ICYmIHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY291bnRyeSA/ICcsICcgOiAnJztcclxuXHRcdFx0XHR2YWx1ZUluZm9OYW1lICs9IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uY291bnRyeVxyXG5cdFx0XHRcdFx0PyB0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnlcclxuXHRcdFx0XHRcdDogJyc7XHJcblx0XHRcdFx0bGV0IHZhbHVlSW5mbyA9ICQoJzxkaXY+PC9kaXY+JykudGV4dCh2YWx1ZUluZm9OYW1lKTtcclxuXHRcdFx0XHRkZXN0aW5hdGlvbkluZm8uYXBwZW5kKHZhbHVlSW5mbyk7XHJcblx0XHRcdH1cclxuXHRcdFx0cGxpVG9rZW5EZXN0aW5hdGlvbi5hcHBlbmQoZGVzdGluYXRpb25JbmZvKTtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEl0IHJlc29sdmVzIHRoZSBzdGF0aWMgdG9rZW4gZGVzdGluYXRpb25cclxuXHQgKiBAcGFyYW0gc3RyaW5nVGV4dFxyXG5cdCAqIEBwYXJhbSB0b2tlblxyXG5cdCAqIEBwYXJhbSBkYXRhVmFsdWVcclxuXHQgKi9cclxuXHRyZXNvbHZlU3RhdGljVG9rZW5zS2V5U2FsdWRvQ29tcGxlbWVudGFyaW8oc3RyaW5nVGV4dDogc3RyaW5nLCB0b2tlblZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG5cdFx0Ly8gaWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24pIHtcclxuXHRcdHRoaXMuZW5hYmxlRGVzdGluYXRpb24gPSB0cnVlO1xyXG5cdFx0dGhpcy5hZGRJbmZvVG9rZW5TYWx1ZG9Db21wbGVtZW50YXJpbygpO1xyXG5cdFx0Y29uc3QgcGxpVG9rZW5EZXN0aW5hdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGktdG9rZW4tY29tcGxlbWVudGFyeS1ncmVldGluZycpO1xyXG5cdFx0bGV0IGh0bWwgPSAnJztcclxuXHRcdGlmIChwbGlUb2tlbkRlc3RpbmF0aW9uKSB7XHJcblx0XHRcdGh0bWwgPSB0aGlzLnJlbW92ZUNvbW1lbnRzSHRtbChwbGlUb2tlbkRlc3RpbmF0aW9uLmlubmVySFRNTCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKHN0cmluZ1RleHQsIHRva2VuVmFsdWUsIGh0bWwpO1xyXG5cdFx0Ly8gfVxyXG5cdFx0Ly8gcmV0dXJuIHN0cmluZ1RleHQ7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKlxyXG5cdCAqL1xyXG5cdGFkZEluZm9Ub2tlblNhbHVkb0NvbXBsZW1lbnRhcmlvKCkge1xyXG5cdFx0bGV0IHBsaVRva2VuRGVzdGluYXRpb24gPSAkKCcjcGxpLXRva2VuLWNvbXBsZW1lbnRhcnktZ3JlZXRpbmcnKTtcclxuXHRcdHBsaVRva2VuRGVzdGluYXRpb24uZW1wdHkoKTtcclxuXHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uKSB7XHJcblx0XHRcdGxldCBkZXN0aW5hdGlvbkluZm8gPSAkKCc8ZGl2PjwvZGl2PicpO1xyXG5cdFx0XHRpZiAodGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5ncmVldGluZykge1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5odG1sKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24uZ3JlZXRpbmcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLmRhdGEuZGF0YURlc3RpbmF0aW9uLnRpdGxlKSB7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVUZXh0ID1cclxuXHRcdFx0XHRcdChkZXN0aW5hdGlvbkluZm8uaHRtbCgpLmxlbmd0aCA9PSAwID8gJycgOiAnICcpICtcclxuXHRcdFx0XHRcdHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24udGl0bGU7XHJcblx0XHRcdFx0ZGVzdGluYXRpb25JbmZvLmh0bWwoZGVzdGluYXRpb25JbmZvLmh0bWwoKSArIHZhbHVlVGV4dCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWUpIHtcclxuXHRcdFx0XHRsZXQgdmFsdWVJbmZvTmFtZSA9IHRoaXMuZGF0YS5kYXRhRGVzdGluYXRpb24ubGFzdE5hbWVcclxuXHRcdFx0XHRcdD8gdGhpcy5kYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZVxyXG5cdFx0XHRcdFx0OiAnJztcclxuXHRcdFx0XHRjb25zdCB2YWx1ZVRleHQgPVxyXG5cdFx0XHRcdFx0KGRlc3RpbmF0aW9uSW5mby5odG1sKCkubGVuZ3RoID09IDAgPyAnJyA6ICcgJykgK1xyXG5cdFx0XHRcdFx0JzxzdHJvbmc+JyArXHJcblx0XHRcdFx0XHR2YWx1ZUluZm9OYW1lICtcclxuXHRcdFx0XHRcdCc8L3N0cm9uZz4nO1xyXG5cdFx0XHRcdGRlc3RpbmF0aW9uSW5mby5odG1sKGRlc3RpbmF0aW9uSW5mby5odG1sKCkgKyB2YWx1ZVRleHQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHBsaVRva2VuRGVzdGluYXRpb24uYXBwZW5kKGRlc3RpbmF0aW9uSW5mbyk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRwcml2YXRlIHJlbW92ZUNvbW1lbnRzSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGh0bWwgPyBodG1sLnJlcGxhY2UoLzwhLS1bXFxzXFxTXSo/LS0+L2csICcnKSA6IGh0bWw7XHJcblx0fVxyXG5cclxuXHRyZXNvbHZlU3RhdGljVG9rZW5zS2V5U2lnbihodG1sLCB0b2tlblZhbHVlOiBhbnksIHN1YlRva2VuOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcblx0XHRsZXQgY29udGFpbmVyID0gJCgnPGRpdj48L2Rpdj4nKTtcclxuXHRcdGxldCBpbWcgPSAkKCc8aW1nIGlkPVwiJyArIFRva2VuU2VydmljZS5TSUdOX0xFVFRFUl9UQUdfSUQgKyAnXCI+Jyk7XHJcblx0XHRpbWcuYXR0cignc3JjJywgJycpO1xyXG5cdFx0aWYgKHN1YlRva2VuLmxlbmd0aCA+IDIpIHtcclxuXHRcdFx0aW1nLmF0dHIoJ3dpZHRoJywgc3ViVG9rZW5bMl0udG9TdHJpbmcoKSk7XHJcblx0XHR9XHJcblx0XHRpZiAoc3ViVG9rZW4ubGVuZ3RoID4gMykge1xyXG5cdFx0XHRpbWcuYXR0cignaGVpZ2h0Jywgc3ViVG9rZW5bM10udG9TdHJpbmcoKSk7XHJcblx0XHR9XHJcblx0XHRpZiAoc3ViVG9rZW4ubGVuZ3RoID4gNCkge1xyXG5cdFx0XHRpbWcuYXR0cignbmFtZScsIHN1YlRva2VuWzRdLnRvU3RyaW5nKCkpO1xyXG5cdFx0fVxyXG5cdFx0Y29udGFpbmVyLmFwcGVuZChpbWcpO1xyXG5cdFx0Ly8gcmV0dXJuIGNvbnRhaW5lci5odG1sKCk7XHJcblx0XHRyZXR1cm4gdGhpcy50b2tlblNlcnZpY2UucmVwbGFjZVRva2VuKGh0bWwsIHRva2VuVmFsdWUsIGNvbnRhaW5lci5odG1sKCkpO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRSdWJyb0xhYmVsKCk6IHN0cmluZyB7XHJcblx0XHRyZXR1cm4gdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdlcydcclxuXHRcdFx0PyAnUnVicm8nXHJcblx0XHRcdDogdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdkZSdcclxuXHRcdFx0PyAnUG9zdGVuJ1xyXG5cdFx0XHQ6ICdJdGVtJztcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgZ2V0VG90YWxMYWJlbCgpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZXMnXHJcblx0XHRcdD8gJ1RvdGFsJ1xyXG5cdFx0XHQ6IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZGUnXHJcblx0XHRcdD8gJ0dlc2FtdCdcclxuXHRcdFx0OiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2ZyJ1xyXG5cdFx0XHQ/ICdUb3RhbCdcclxuXHRcdFx0OiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2l0J1xyXG5cdFx0XHQ/ICdUb3RhbGUnXHJcblx0XHRcdDogJ0l0ZW0nO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBnZXRZZWFyTGFiZWwoKTogc3RyaW5nIHtcclxuXHRcdHJldHVybiB0aGlzLmRhdGEuaWRpb21hLmxvY2FsZSA9PT0gJ2VzJ1xyXG5cdFx0XHQ/ICdBw7FvJ1xyXG5cdFx0XHQ6IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnZGUnXHJcblx0XHRcdD8gJ0phaHInXHJcblx0XHRcdDogdGhpcy5kYXRhLmlkaW9tYS5sb2NhbGUgPT09ICdmcidcclxuXHRcdFx0PyAnQW5uw6llJ1xyXG5cdFx0XHQ6IHRoaXMuZGF0YS5pZGlvbWEubG9jYWxlID09PSAnaXQnXHJcblx0XHRcdD8gJ0Fubm8nXHJcblx0XHRcdDogJ1llYXInO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICpcclxuXHQgKi9cclxuXHRhZGRJbmZvVG9rZW5SZXN1bWVDYXRlZ29yeVllYXIoXHJcblx0XHR0cHJlc0NvZGlnbzogbnVtYmVyLFxyXG5cdFx0aWRUb3RhbEJ1ZGdldDogc3RyaW5nLFxyXG5cdFx0YnVkZ2V0RHRvOiBCdWRnZXREdG9cclxuXHQpIHtcclxuXHRcdGlmICh0cHJlc0NvZGlnbyA9PSBFVGlwb1ByZXN1cHVlc3RvLlBSSU1BUlkpIHtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHR9XHJcblx0XHRsZXQgcmVzdW1lQ2F0ZWdvcnlZZWFyQ29udGVudCA9ICQoJyMnICsgaWRUb3RhbEJ1ZGdldCk7XHJcblx0XHRyZXN1bWVDYXRlZ29yeVllYXJDb250ZW50LmVtcHR5KCk7XHJcblx0XHRpZiAoYnVkZ2V0RHRvICYmIGJ1ZGdldER0by5idWRnZXQgJiYgYnVkZ2V0RHRvLmJ1ZGdldC5zdW1tYXJ5KSB7XHJcblx0XHRcdGNvbnN0IHN1bW1hcnkgPSBidWRnZXREdG8uYnVkZ2V0LnN1bW1hcnk7XHJcblx0XHRcdGNvbnN0IHRhYmxlID0gJCgnPHRhYmxlPjwvdGFibGU+Jyk7XHJcblx0XHRcdHRhYmxlLmNzcygnYm9yZGVyLXNwYWNpbmcnLCAnMnB4Jyk7XHJcblx0XHRcdHRhYmxlLmNzcygnYm9yZGVyLWNvbGxhcHNlJywgJ2NvbGxhcHNlJyk7XHJcblx0XHRcdC8vdGhlYWRcclxuXHRcdFx0Y29uc3QgdGhlYWQgPSAkKCc8dGhlYWQ+JykuYXBwZW5kVG8odGFibGUpO1xyXG5cdFx0XHRjb25zdCB0aFJ1YnJvID0gJCgnPHRoPicsIHsgaHRtbDogdGhpcy5nZXRSdWJyb0xhYmVsKCkgfSkuYXBwZW5kVG8odGhlYWQpO1xyXG5cdFx0XHR0aFJ1YnJvLmNzcygndGV4dC1hbGlnbicsICdjZW50ZXInKTtcclxuXHRcdFx0dGhSdWJyby5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0dGhSdWJyby5jc3MoJ2NvbG9yJywgJ3doaXRlJyk7XHJcblx0XHRcdHRoUnVicm8uY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0bGV0IGl0ZXJhY2lvbkFuaW8gPSAwO1xyXG5cdFx0XHRmb3IgKGNvbnN0IHllYXIgb2Ygc3VtbWFyeS55ZWFycykge1xyXG5cdFx0XHRcdGNvbnN0IHRoWWVhciA9ICQoJzx0aD4nLCB7IGh0bWw6IHRoaXMuZ2V0WWVhckxhYmVsKCkgKyArK2l0ZXJhY2lvbkFuaW8gfSkuYXBwZW5kVG8oXHJcblx0XHRcdFx0XHR0aGVhZFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0dGhZZWFyLmNzcygndGV4dC1hbGlnbicsICdjZW50ZXInKTtcclxuXHRcdFx0XHR0aFllYXIuY3NzKCdib3JkZXInLCAnMXB4IHNvbGlkIGJsYWNrJyk7XHJcblx0XHRcdFx0dGhZZWFyLmNzcygnY29sb3InLCAnd2hpdGUnKTtcclxuXHRcdFx0XHR0aFllYXIuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0XHR0aFllYXIuY3NzKCd3aWR0aCcsICc4MHB4Jyk7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdG90YWxMYWJlbCA9ICcmbmJzcDsnICsgdGhpcy5nZXRUb3RhbExhYmVsKCkgKyBzdW1tYXJ5LmJhc2VDdXJyZW5jeSArICcmbmJzcDsnO1xyXG5cdFx0XHRjb25zdCB0aFRvdGFsID0gJCgnPHRoPicsIHsgaHRtbDogdG90YWxMYWJlbCB9KS5hcHBlbmRUbyh0aGVhZCk7XHJcblx0XHRcdHRoVG90YWwuY3NzKCd0ZXh0LWFsaWduJywgJ2NlbnRlcicpO1xyXG5cdFx0XHR0aFRvdGFsLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHR0aFRvdGFsLmNzcygnY29sb3InLCAnd2hpdGUnKTtcclxuXHRcdFx0dGhUb3RhbC5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnZ3JleScpO1xyXG5cdFx0XHR0aFRvdGFsLmNzcygnd2lkdGgnLCAnODBweCcpO1xyXG5cdFx0XHQvL3Rib2R5XHJcblx0XHRcdGxldCB0Ym9keSA9ICQoJzx0Ym9keT4nKS5hcHBlbmRUbyh0YWJsZSk7XHJcblx0XHRcdGZvciAobGV0IGlDYXQgPSAwOyBpQ2F0IDwgc3VtbWFyeS5jYXRlZ29yaWVzLmxlbmd0aDsgaUNhdCsrKSB7XHJcblx0XHRcdFx0Y29uc3QgdHIgPSAkKCc8dHI+JykuYXBwZW5kVG8odGJvZHkpO1xyXG5cdFx0XHRcdGNvbnN0IGNhdGVnb3J5ID0gc3VtbWFyeS5jYXRlZ29yaWVzW2lDYXRdO1xyXG5cdFx0XHRcdGNvbnN0IHJ1YnJvTGFiZWwgPVxyXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOycgK1xyXG5cdFx0XHRcdFx0dGhpcy50cmFuc2xhdGVDYXRlZ29yeShjYXRlZ29yeS5jYXRlZ29yeSkgK1xyXG5cdFx0XHRcdFx0JyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyc7XHJcblx0XHRcdFx0Y29uc3QgdGRSdWJybyA9ICQoJzx0ZD4nLCB7IGh0bWw6IHJ1YnJvTGFiZWwgfSkuYXBwZW5kVG8odHIpO1xyXG5cdFx0XHRcdHRkUnVicm8uY3NzKCd0ZXh0LWFsaWduJywgJ2xlZnQnKTtcclxuXHRcdFx0XHR0ZFJ1YnJvLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHRcdHRkUnVicm8uY3NzKCdmb250LXdlaWdodCcsICdib2xkJyk7XHJcblx0XHRcdFx0Zm9yIChjb25zdCB5ZWFyIG9mIGNhdGVnb3J5LnllYXJzKSB7XHJcblx0XHRcdFx0XHRjb25zdCB5ZWFyVG90YWwgPVxyXG5cdFx0XHRcdFx0XHR5ZWFyLnRvdGFsID09IDBcclxuXHRcdFx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0XHRcdDogdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKHllYXIudG90YWwsICdkZWZhdWx0JywgJycsICcxLjAtMCcpO1xyXG5cdFx0XHRcdFx0Y29uc3QgeWVhckxhYmVsVG90YWwgPSAnJm5ic3A7Jm5ic3A7JyArIHllYXJUb3RhbCArICcmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRcdFx0Y29uc3QgdGRZZWFyID0gJCgnPHRkPicsIHsgaHRtbDogeWVhckxhYmVsVG90YWwgfSkuYXBwZW5kVG8odHIpO1xyXG5cdFx0XHRcdFx0dGRZZWFyLmNzcygndGV4dC1hbGlnbicsICdyaWdodCcpO1xyXG5cdFx0XHRcdFx0dGRZZWFyLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBjYXRlZ29yeVRvdGFsID1cclxuXHRcdFx0XHRcdGNhdGVnb3J5LnRvdGFsID09IDBcclxuXHRcdFx0XHRcdFx0PyAnLSdcclxuXHRcdFx0XHRcdFx0OiB0aGlzLmN1cnJlbmN5UGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkudG90YWwsICdkZWZhdWx0JywgJycsICcxLjAtMCcpO1xyXG5cdFx0XHRcdGNvbnN0IGNhdGVnb3J5TGFiZWxUb3RhbCA9ICcmbmJzcDsmbmJzcDsnICsgY2F0ZWdvcnlUb3RhbCArICcmbmJzcDsmbmJzcDsnO1xyXG5cdFx0XHRcdGNvbnN0IHRkVG90YWwgPSAkKCc8dGQ+JywgeyBodG1sOiBjYXRlZ29yeUxhYmVsVG90YWwgfSkuYXBwZW5kVG8odHIpO1xyXG5cdFx0XHRcdHRkVG90YWwuY3NzKCd0ZXh0LWFsaWduJywgJ3JpZ2h0Jyk7XHJcblx0XHRcdFx0dGRUb3RhbC5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0XHR0ZFRvdGFsLmNzcygnZm9udC13ZWlnaHQnLCAnYm9sZCcpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGNvbnN0IHRyRmluYWwgPSAkKCc8dHI+JykuYXBwZW5kVG8odGJvZHkpO1xyXG5cdFx0XHRjb25zdCBiYXNlQ3VycmVuY3kgPSB0aGlzLmdldFRvdGFsTGFiZWwoKSArICcgJyArIHN1bW1hcnkuYmFzZUN1cnJlbmN5ICsgJyZuYnNwOyZuYnNwOyc7XHJcblx0XHRcdGNvbnN0IHRkRmluYWxUb3RhbEJDID0gJCgnPHRkPicsIHsgaHRtbDogYmFzZUN1cnJlbmN5IH0pLmFwcGVuZFRvKHRyRmluYWwpO1xyXG5cdFx0XHR0ZEZpbmFsVG90YWxCQy5jc3MoJ3RleHQtYWxpZ24nLCAncmlnaHQnKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsQkMuY3NzKCdib3JkZXInLCAnMXB4IHNvbGlkIGJsYWNrJyk7XHJcblx0XHRcdHRkRmluYWxUb3RhbEJDLmNzcygnY29sb3InLCAnd2hpdGUnKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsQkMuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0bGV0IGJ1ZGdldFRvdGFsID0gMDtcclxuXHRcdFx0Zm9yIChjb25zdCB5ZWFyIG9mIHN1bW1hcnkueWVhcnMpIHtcclxuXHRcdFx0XHRjb25zdCB5ZWFyVG90YWwgPVxyXG5cdFx0XHRcdFx0eWVhci50b3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdD8gJy0nXHJcblx0XHRcdFx0XHRcdDogdGhpcy5jdXJyZW5jeVBpcGUudHJhbnNmb3JtKHllYXIudG90YWwsICdkZWZhdWx0JywgJycsICcxLjAtMCcpO1xyXG5cdFx0XHRcdGNvbnN0IHllYXJMYWJlbFRvdGFsID0geWVhclRvdGFsICsgJyZuYnNwOyZuYnNwOyc7XHJcblx0XHRcdFx0Y29uc3QgdGRZZWFyID0gJCgnPHRkPicsIHsgaHRtbDogeWVhckxhYmVsVG90YWwgfSkuYXBwZW5kVG8odHJGaW5hbCk7XHJcblx0XHRcdFx0dGRZZWFyLmNzcygndGV4dC1hbGlnbicsICdyaWdodCcpO1xyXG5cdFx0XHRcdHRkWWVhci5jc3MoJ2JvcmRlcicsICcxcHggc29saWQgYmxhY2snKTtcclxuXHRcdFx0XHR0ZFllYXIuY3NzKCdjb2xvcicsICd3aGl0ZScpO1xyXG5cdFx0XHRcdHRkWWVhci5jc3MoJ2JhY2tncm91bmQtY29sb3InLCAnZ3JleScpO1xyXG5cdFx0XHRcdGJ1ZGdldFRvdGFsICs9IHllYXIudG90YWw7XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdG90YWxCYXNlQ3VycmVuY3kgPVxyXG5cdFx0XHRcdGJ1ZGdldFRvdGFsID09IDBcclxuXHRcdFx0XHRcdD8gJy0nXHJcblx0XHRcdFx0XHQ6IHRoaXMuY3VycmVuY3lQaXBlLnRyYW5zZm9ybShidWRnZXRUb3RhbCwgJ2RlZmF1bHQnLCAnJywgJzEuMC0wJyk7XHJcblx0XHRcdGNvbnN0IHRvdGFsTGFiZWxCYXNlQ3VycmVuY3kgPSAnJm5ic3A7Jm5ic3A7JyArIHRvdGFsQmFzZUN1cnJlbmN5ICsgJyZuYnNwOyZuYnNwOyc7XHJcblx0XHRcdGNvbnN0IHRkRmluYWxUb3RhbCA9ICQoJzx0ZD4nLCB7IGh0bWw6IHRvdGFsTGFiZWxCYXNlQ3VycmVuY3kgfSkuYXBwZW5kVG8odHJGaW5hbCk7XHJcblx0XHRcdHRkRmluYWxUb3RhbC5jc3MoJ3RleHQtYWxpZ24nLCAncmlnaHQnKTtcclxuXHRcdFx0dGRGaW5hbFRvdGFsLmNzcygnYm9yZGVyJywgJzFweCBzb2xpZCBibGFjaycpO1xyXG5cdFx0XHR0ZEZpbmFsVG90YWwuY3NzKCdjb2xvcicsICd3aGl0ZScpO1xyXG5cdFx0XHR0ZEZpbmFsVG90YWwuY3NzKCdiYWNrZ3JvdW5kLWNvbG9yJywgJ2dyZXknKTtcclxuXHRcdFx0cmVzdW1lQ2F0ZWdvcnlZZWFyQ29udGVudC5hcHBlbmQodGFibGUpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCI8ZGl2IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBpZD1cInBsaS10b2tlbi1kZXN0aW5hdGlvblwiPlxyXG5cdDwhLS0gPGRpdiAqbmdJZj1cImRhdGEgIT0gdW5kZWZpbmVkICYmIGRhdGEuZGF0YURlc3RpbmF0aW9uICE9IHVuZGVmaW5lZFwiPlxyXG5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24udGV4dCAhPSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAge3tkYXRhLmRhdGFEZXN0aW5hdGlvbi50ZXh0fX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24udGl0bGUgIT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5kYXRhRGVzdGluYXRpb24udGl0bGV9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5uYW1lICE9IHVuZGVmaW5lZCB8fCBkYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZSAhPSB1bmRlZmluZWRcIj5cclxuICAgICAgICAgICAgPHN0cm9uZz57e2RhdGEuZGF0YURlc3RpbmF0aW9uLm5hbWV9fSB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lfX08L3N0cm9uZz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2ICpuZ0lmPVwiZGF0YS5kYXRhRGVzdGluYXRpb24uY2FyZ28gIT0gdW5kZWZpbmVkXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5kYXRhRGVzdGluYXRpb24uY2FyZ299fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5vY2N1cGF0aW9uICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLm9jY3VwYXRpb259fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5jb21wYW55ICE9IHVuZGVmaW5lZFwiPlxyXG4gICAgICAgICAgICB7e2RhdGEuZGF0YURlc3RpbmF0aW9uLmNvbXBhbnl9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5hZGRyZXNzICE9IHVuZGVmaW5lZCB8fCBkYXRhLmRhdGFEZXN0aW5hdGlvbi5hZGRyZXNzRGV0YWlscyAhPSB1bmRlZmluZWQgXCI+XHJcbiAgICAgICAgICAgIHt7ZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc319IHt7ZGF0YS5kYXRhRGVzdGluYXRpb24uYWRkcmVzc0RldGFpbHN9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi5jaXR5ICE9IHVuZGVmaW5lZCB8fCBkYXRhLmRhdGFEZXN0aW5hdGlvbi5jb3VudHJ5ICE9IHVuZGVmaW5lZCBcIj5cclxuICAgICAgICAgICAge3tkYXRhLmRhdGFEZXN0aW5hdGlvbi5jaXR5fX08c3BhbiAqbmdJZj1cImRhdGEuZGF0YURlc3RpbmF0aW9uLmNpdHkgIT0gdW5kZWZpbmVkICYmIGRhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnkgIT0gdW5kZWZpbmVkXCI+LDwvc3Bhbj57e2RhdGEuZGF0YURlc3RpbmF0aW9uLmNvdW50cnl9fVxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgIDwvZGl2PiAtLT5cclxuPC9kaXY+XHJcbjwhLS0gQ29tcGxlbWVudGFyeSBncmVldGluZy0tPlxyXG48ZGl2IHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiBpZD1cInBsaS10b2tlbi1jb21wbGVtZW50YXJ5LWdyZWV0aW5nXCI+XHJcblx0PCEtLSA8ZGl2XHJcblx0XHQqbmdJZj1cIlxyXG5cdFx0XHRkYXRhICE9IHVuZGVmaW5lZCAmJlxyXG5cdFx0XHRkYXRhLmRhdGFEZXN0aW5hdGlvbiAhPSB1bmRlZmluZWQgJiZcclxuXHRcdFx0ZGF0YS5kYXRhRGVzdGluYXRpb24udGFyZ2V0SWQgPT0gMiAmJlxyXG5cdFx0XHRkYXRhLmRhdGFEZXN0aW5hdGlvbi5ncmVldGluZyAhPSB1bmRlZmluZWRcclxuXHRcdFwiXHJcblx0PlxyXG5cdFx0e3sgZGF0YS5kYXRhRGVzdGluYXRpb24uZ3JlZXRpbmdcclxuXHRcdH19PHNwYW4gKm5nSWY9XCJkYXRhLmRhdGFEZXN0aW5hdGlvbi50aXRsZSAhPSB1bmRlZmluZWRcIlxyXG5cdFx0XHQ+Jm5ic3A7e3sgZGF0YS5kYXRhRGVzdGluYXRpb24udGl0bGUgfX08L3NwYW5cclxuXHRcdD48c3BhbiAqbmdJZj1cImRhdGEuZGF0YURlc3RpbmF0aW9uLmxhc3ROYW1lICE9IHVuZGVmaW5lZFwiXHJcblx0XHRcdD4mbmJzcDt7eyBkYXRhLmRhdGFEZXN0aW5hdGlvbi5sYXN0TmFtZSB9fTwvc3BhblxyXG5cdFx0PjpcclxuXHQ8L2Rpdj4tLT5cclxuPC9kaXY+XHJcblxyXG48IS0tIFByaW1hcnkgYnVkZ2V0IHRvdGFsIHN1bW1hcnkgJHtwcmVzdXB1ZXN0b18yODhfcmVzdW1lQ2F0ZWdvcnlZZWFyfSAtLT5cclxuPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJwbGktdG9rZW4tcHJpbmNpcGFsLWJ1ZGdldC10b3RhbC1zdW1tYXJ5XCI+XHJcblx0PCEtLSA8ZGl2PlxyXG5cdFx0PHRhYmxlXHJcblx0XHRcdCpuZ0lmPVwiXHJcblx0XHRcdFx0YnVkZ2V0RHRvUHJpbWFyeSAhPT0gbnVsbCAmJlxyXG5cdFx0XHRcdGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0ICYmXHJcblx0XHRcdFx0YnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeVxyXG5cdFx0XHRcIlxyXG5cdFx0XHRzdHlsZT1cImJvcmRlci1zcGFjaW5nOiAycHg7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcIlxyXG5cdFx0PlxyXG5cdFx0XHQ8dGhlYWQ+XHJcblx0XHRcdFx0PHRyIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiBjZW50ZXI7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7IGNvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFJ1YnJvXHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCB5ZWFyIG9mIGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LnN1bW1hcnkueWVhcnNcIlxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IGNlbnRlcjtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgY29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6IGdyZXk7IHdpZHRoOjgwcHg7XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0e3sgeWVhci55ZWFyTnVtYmVyIH19XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBjb2xvcjogd2hpdGU7YmFja2dyb3VuZC1jb2xvcjogZ3JleTsgd2lkdGg6IDExMHB4O1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFRvdGFsICh7eyBidWRnZXREdG9QcmltYXJ5LmJ1ZGdldC5zdW1tYXJ5LmJhc2VDdXJyZW5jeSB9fSlcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0PC90cj5cclxuXHRcdFx0PC90aGVhZD5cclxuXHRcdFx0PHRib2R5PlxyXG5cdFx0XHRcdDx0clxyXG5cdFx0XHRcdFx0Km5nRm9yPVwiXHJcblx0XHRcdFx0XHRcdGxldCBjYXRlZ29yeSBvZiBidWRnZXREdG9QcmltYXJ5LmJ1ZGdldC5zdW1tYXJ5LmNhdGVnb3JpZXM7XHJcblx0XHRcdFx0XHRcdGxldCBpQ2F0ID0gaW5kZXhcclxuXHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0PHRkIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7dGV4dC1hbGlnbjogbGVmdDtib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIj5cclxuXHRcdFx0XHRcdFx0Jm5ic3A7Jm5ic3A7e3tcclxuXHRcdFx0XHRcdFx0XHR0cmFuc2xhdGVDYXRlZ29yeShjYXRlZ29yeS5jYXRlZ29yeSlcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0Km5nRm9yPVwibGV0IHllYXIgb2YgY2F0ZWdvcnkueWVhcnNcIlxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cInRleHQtYWxpZ246IHJpZ2h0O2JvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyBcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHQmbmJzcDsmbmJzcDt7e1xyXG5cdFx0XHRcdFx0XHRcdHllYXIudG90YWwgPT0gMCA/ICctJyA6ICh5ZWFyLnRvdGFsIHwgY3VycmVuY3k6ICdkZWZhdWx0JzonJzonMS4wLTAnKVxyXG5cdFx0XHRcdFx0XHR9fSZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZCBzdHlsZT1cImZvbnQtd2VpZ2h0OiBib2xkOyB0ZXh0LWFsaWduOiByaWdodDtib3JkZXI6IDFweCBzb2xpZCBibGFjaztcIj5cclxuXHRcdFx0XHRcdFx0Jm5ic3A7Jm5ic3A7e3tcclxuXHRcdFx0XHRcdFx0XHRjYXRlZ29yeS50b3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0XHRcdFx0OiAoY2F0ZWdvcnkudG90YWwgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdDwvdHI+XHJcblx0XHRcdFx0PHRyIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgY29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6IGdyZXk7XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0VG90YWwgKHt7IGJ1ZGdldER0b1ByaW1hcnkuYnVkZ2V0LnN1bW1hcnkuYmFzZUN1cnJlbmN5IH19KSZuYnNwOyZuYnNwO1xyXG5cdFx0XHRcdFx0PC90ZD5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHQqbmdGb3I9XCJsZXQgeWVhciBvZiBidWRnZXREdG9QcmltYXJ5LmJ1ZGdldC5zdW1tYXJ5LnllYXJzXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtib3JkZXI6IDFweCBzb2xpZCBibGFjazsgY29sb3I6IHdoaXRlO2JhY2tncm91bmQtY29sb3I6IGdyZXk7IFwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdHt7XHJcblx0XHRcdFx0XHRcdFx0eWVhci50b3RhbCA9PSAwID8gJy0nIDogKHllYXIudG90YWwgfCBjdXJyZW5jeTogJ2RlZmF1bHQnOicnOicxLjAtMCcpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwidGV4dC1hbGlnbjogcmlnaHQ7Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7IGNvbG9yOiB3aGl0ZTtiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1wiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdHt7XHJcblx0XHRcdFx0XHRcdFx0YnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeS5idWRnZXRUb3RhbCA9PSAwXHJcblx0XHRcdFx0XHRcdFx0XHQ/ICctJ1xyXG5cdFx0XHRcdFx0XHRcdFx0OiAoYnVkZ2V0RHRvUHJpbWFyeS5idWRnZXQuc3VtbWFyeS5idWRnZXRUb3RhbFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0PC90cj5cclxuXHRcdFx0PC90Ym9keT5cclxuXHRcdDwvdGFibGU+XHJcblx0PC9kaXY+IC0tPlxyXG48L2Rpdj5cclxuPCEtLSBTZWN1bmRhcnkgYnVkZ2V0IHRvdGFsIHN1bW1hcnkgJHtwcmVzdXB1ZXN0b18yODhfcmVzdW1lQ2F0ZWdvcnlZZWFyfSAtLT5cclxuPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmU7XCIgaWQ9XCJwbGktdG9rZW4tc2VjdW5kYXJ5LWJ1ZGdldC10b3RhbC1zdW1tYXJ5XCI+XHJcblx0PGRpdj5cclxuXHRcdDx0YWJsZVxyXG5cdFx0XHQqbmdJZj1cIlxyXG5cdFx0XHRcdGJ1ZGdldER0b1NlY3VuZGFyeSAhPT0gbnVsbCAmJlxyXG5cdFx0XHRcdGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQgJiZcclxuXHRcdFx0XHRidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LnN1bW1hcnlcclxuXHRcdFx0XCJcclxuXHRcdFx0c3R5bGU9XCJib3JkZXItc3BhY2luZzogMnB4OyBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOyB3aWR0aDogMTAwJTtcIlxyXG5cdFx0PlxyXG5cdFx0XHQ8dGhlYWQ+XHJcblx0XHRcdFx0PHRyIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7XCI+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IGdyZXk7XHJcblx0XHRcdFx0XHRcdFwiXHJcblx0XHRcdFx0XHQ+XHJcblx0XHRcdFx0XHRcdFJ1YnJvXHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCB5ZWFyIG9mIGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuc3VtbWFyeS55ZWFyc1wiXHJcblx0XHRcdFx0XHRcdHN0eWxlPVwiXHJcblx0XHRcdFx0XHRcdFx0dGV4dC1hbGlnbjogY2VudGVyO1xyXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiB3aGl0ZTtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xyXG5cdFx0XHRcdFx0XHRcdHdpZHRoOiA4MHB4O1xyXG5cdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHR7eyB5ZWFyLnllYXJOdW1iZXIgfX1cclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LWFsaWduOiBjZW50ZXI7XHJcblx0XHRcdFx0XHRcdFx0Ym9yZGVyOiAxcHggc29saWQgYmxhY2s7XHJcblx0XHRcdFx0XHRcdFx0Y29sb3I6IHdoaXRlO1xyXG5cdFx0XHRcdFx0XHRcdGJhY2tncm91bmQtY29sb3I6IGdyZXk7XHJcblx0XHRcdFx0XHRcdFx0d2lkdGg6IDExMHB4O1xyXG5cdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRUb3RhbCAoe3sgYnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5LmJhc2VDdXJyZW5jeSB9fSlcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0PC90cj5cclxuXHRcdFx0PC90aGVhZD5cclxuXHRcdFx0PHRib2R5PlxyXG5cdFx0XHRcdDx0clxyXG5cdFx0XHRcdFx0Km5nRm9yPVwiXHJcblx0XHRcdFx0XHRcdGxldCBjYXRlZ29yeSBvZiBidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LnN1bW1hcnkuY2F0ZWdvcmllcztcclxuXHRcdFx0XHRcdFx0bGV0IGlDYXQgPSBpbmRleFxyXG5cdFx0XHRcdFx0XCJcclxuXHRcdFx0XHQ+XHJcblx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogbGVmdDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XCI+XHJcblx0XHRcdFx0XHRcdCZuYnNwOyZuYnNwO3t7XHJcblx0XHRcdFx0XHRcdFx0dHJhbnNsYXRlQ2F0ZWdvcnkoY2F0ZWdvcnkuY2F0ZWdvcnkpXHJcblx0XHRcdFx0XHRcdH19Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7XHJcblx0XHRcdFx0XHQ8L3RkPlxyXG5cdFx0XHRcdFx0PHRkXHJcblx0XHRcdFx0XHRcdCpuZ0Zvcj1cImxldCB5ZWFyIG9mIGNhdGVnb3J5LnllYXJzXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDsgYm9yZGVyOiAxcHggc29saWQgYmxhY2s7XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0Jm5ic3A7Jm5ic3A7e3tcclxuXHRcdFx0XHRcdFx0XHR5ZWFyLnRvdGFsID09IDAgPyAnLScgOiAoeWVhci50b3RhbCB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGQgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgdGV4dC1hbGlnbjogcmlnaHQ7IGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1wiPlxyXG5cdFx0XHRcdFx0XHQmbmJzcDsmbmJzcDt7e1xyXG5cdFx0XHRcdFx0XHRcdGNhdGVnb3J5LnRvdGFsID09IDBcclxuXHRcdFx0XHRcdFx0XHRcdD8gJy0nXHJcblx0XHRcdFx0XHRcdFx0XHQ6IChjYXRlZ29yeS50b3RhbCB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0PC90cj5cclxuXHRcdFx0XHQ8dHIgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDtcIj5cclxuXHRcdFx0XHRcdDx0ZFxyXG5cdFx0XHRcdFx0XHRzdHlsZT1cIlxyXG5cdFx0XHRcdFx0XHRcdHRleHQtYWxpZ246IHJpZ2h0O1xyXG5cdFx0XHRcdFx0XHRcdGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrO1xyXG5cdFx0XHRcdFx0XHRcdGNvbG9yOiB3aGl0ZTtcclxuXHRcdFx0XHRcdFx0XHRiYWNrZ3JvdW5kLWNvbG9yOiBncmV5O1xyXG5cdFx0XHRcdFx0XHRcIlxyXG5cdFx0XHRcdFx0PlxyXG5cdFx0XHRcdFx0XHRUb3RhbCAoe3sgYnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5LmJhc2VDdXJyZW5jeSB9fSkmbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0Km5nRm9yPVwibGV0IHllYXIgb2YgYnVkZ2V0RHRvU2VjdW5kYXJ5LmJ1ZGdldC5zdW1tYXJ5LnllYXJzXCJcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdFx0XHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcclxuXHRcdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0e3tcclxuXHRcdFx0XHRcdFx0XHR5ZWFyLnRvdGFsID09IDAgPyAnLScgOiAoeWVhci50b3RhbCB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0XHQ8dGRcclxuXHRcdFx0XHRcdFx0c3R5bGU9XCJcclxuXHRcdFx0XHRcdFx0XHR0ZXh0LWFsaWduOiByaWdodDtcclxuXHRcdFx0XHRcdFx0XHRib3JkZXI6IDFweCBzb2xpZCBibGFjaztcclxuXHRcdFx0XHRcdFx0XHRjb2xvcjogd2hpdGU7XHJcblx0XHRcdFx0XHRcdFx0YmFja2dyb3VuZC1jb2xvcjogZ3JleTtcclxuXHRcdFx0XHRcdFx0XCJcclxuXHRcdFx0XHRcdD5cclxuXHRcdFx0XHRcdFx0e3tcclxuXHRcdFx0XHRcdFx0XHRidWRnZXREdG9TZWN1bmRhcnkuYnVkZ2V0LnN1bW1hcnkuYnVkZ2V0VG90YWwgPT0gMFxyXG5cdFx0XHRcdFx0XHRcdFx0PyAnLSdcclxuXHRcdFx0XHRcdFx0XHRcdDogKGJ1ZGdldER0b1NlY3VuZGFyeS5idWRnZXQuc3VtbWFyeS5idWRnZXRUb3RhbFxyXG5cdFx0XHRcdFx0XHRcdFx0ICB8IGN1cnJlbmN5OiAnZGVmYXVsdCc6Jyc6JzEuMC0wJylcclxuXHRcdFx0XHRcdFx0fX0mbmJzcDsmbmJzcDtcclxuXHRcdFx0XHRcdDwvdGQ+XHJcblx0XHRcdFx0PC90cj5cclxuXHRcdFx0PC90Ym9keT5cclxuXHRcdDwvdGFibGU+XHJcblx0PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|