tnx-shared 5.3.323 → 5.3.325
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +18 -4
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/form-schema.d.ts +1 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/dropdown/dropdown.component.d.ts.map +1 -1
- package/esm2015/classes/base/list-base.js +3 -2
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/dropdown/dropdown.component.js +10 -2
- package/esm2015/services/export.service.js +6 -2
- package/fesm2015/tnx-shared.js +17 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/export.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -1015,6 +1015,7 @@ export class ListBase extends ComponentBaseWithButton {
|
|
|
1015
1015
|
var _a;
|
|
1016
1016
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1017
1017
|
const lstData = (_a = (yield this.setting.baseService.getDataCustomRoute(this.plusUrl, this.currentGridInfo.filters, this.currentGridInfo.fields, this.currentGridInfo.sorts, -1, 1)).data) !== null && _a !== void 0 ? _a : [];
|
|
1018
|
+
const fileName = this.setting.title ? this.setting.title : `Danh sách ${this.setting.objectName.toLocaleLowerCase()}`;
|
|
1018
1019
|
const lstVisibleField = this.setting.cols
|
|
1019
1020
|
.filter(item => item.visible && item.dataType !== 'trangThaiV5')
|
|
1020
1021
|
.map(item => item.field);
|
|
@@ -1039,7 +1040,7 @@ export class ListBase extends ComponentBaseWithButton {
|
|
|
1039
1040
|
return row;
|
|
1040
1041
|
})
|
|
1041
1042
|
];
|
|
1042
|
-
this._exportService.objectToExcel(printData,
|
|
1043
|
+
this._exportService.objectToExcel(printData, fileName, 1);
|
|
1043
1044
|
});
|
|
1044
1045
|
}
|
|
1045
1046
|
beforeExportAllData(dataSource, lstVisibleField) {
|
|
@@ -1097,4 +1098,4 @@ ListBase.propDecorators = {
|
|
|
1097
1098
|
parentModel: [{ type: Input }],
|
|
1098
1099
|
loadDetailFromQueryParam: [{ type: Input }]
|
|
1099
1100
|
};
|
|
1100
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBRXRJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENB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LHVCQUF1QixDQUFDLENBQUM7WUFDN0UsT0FBTyx3QkFBd0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7O0tBQ3REO0lBRUssc0JBQXNCLENBQUMsSUFBUzs7UUFFdEMsQ0FBQztLQUFBO0lBQ0Qsc0JBQXNCLENBQUMsT0FBTztRQUMxQixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDOzs7WUFybkNKLFNBQVM7OztZQTlDNkIsUUFBUTs7OzsrQkFrRDFDLFlBQVksU0FBQyxRQUFROzhCQUVyQixTQUFTLFNBQUMsaUJBQWlCOytCQUczQixTQUFTLFNBQUMsa0JBQWtCOzBCQUk1QixLQUFLO3VDQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIFF1ZXJ5TGlzdCwgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW4sIGlzRGV2TW9kZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmltcG9ydCB7IENvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY29uZ3ZpZWMtcGlja2VyL3NlcnZpY2VzL2Nvbmd2aWVjLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgVHJlZVRhYmxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL3RyZWUtdGFibGUvdHJlZS10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgRW50aXR5UGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2VudGl0eS1wZXJtaXNzaW9uL3NlcnZpY2VzLmNzL2VudGl0eS1wZXJtaXNzaW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgS2V5VmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3R5cGVzJztcbmltcG9ydCB7IEVudW1Qcm9wZXJ0aWVzLCBFeHBvcnRJdGVtLCBQZXJtaXNzaW9uQmFzZSwgUGVybWlzc2lvblNlcnZpY2UsIFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLCBUbk1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vcHVibGljLWFwaSc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY2F1aGluaC13b3JrZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBMaXN0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpc3QtaGVscGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbW9kdWxlLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy93b3JrZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydEl0ZW1UeXBlLCBGb3JtU3RhdGUsIEtleUZsYXNoU2hvdywgV2ZJdGVtLCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDb250cm9sVHlwZSxcbiAgICBDcnVkRm9ybURhdGEsXG4gICAgQ3J1ZExpc3REYXRhLFxuICAgIENydWRMaXN0U2V0dGluZyxcbiAgICBEcm9wZG93bk9wdGlvbnMsXG4gICAgRmllbGRSb3dTcGFuLFxuICAgIE9wZXJhdG9yLFxuICAgIFBvcHVwU2l6ZSxcbiAgICBSZWZGaWVsZCxcbiAgICBUZXh0QWxpZ25cbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24gfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlLXdpdGgtYnV0dG9uJztcbmltcG9ydCB7IElMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9pLWxpc3QtY29tcG9uZW50JztcblxuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBMaXN0QmFzZTxUIGV4dGVuZHMgSUxpc3RDb21wb25lbnQ+IGV4dGVuZHMgQ29tcG9uZW50QmFzZVdpdGhCdXR0b24ge1xuICAgIHB1YmxpYyBjcnVkTGlzdDogVDtcblxuICAgIEBWaWV3Q2hpbGRyZW4oJ2J1dHRvbicpIGxzdEJ1dHRvbkVsZW1lbnQ6IFF1ZXJ5TGlzdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gICAgY3VycmVudEdyaWRJbmZvOiBHcmlkSW5mbztcbiAgICBAVmlld0NoaWxkKENydWRMaXN0Q29tcG9uZW50KSBzZXQgY29udGVudENydWRMaXN0KGNvbnRlbnQ6IFQpIHtcbiAgICAgICAgdGhpcy5zZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQpO1xuICAgIH1cbiAgICBAVmlld0NoaWxkKFRyZWVUYWJsZUNvbXBvbmVudCkgc2V0IGNvbnRlbnRUcmVlVGFibGUoY29udGVudDogVCkge1xuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IENydWRMaXN0RGF0YTtcbiAgICBASW5wdXQoKSBsb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW06IGJvb2xlYW47XG5cbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xuICAgIG1vZGVsOiBDcnVkTGlzdERhdGEgPSBuZXcgQ3J1ZExpc3REYXRhKCk7XG4gICAgZm9ybU1vZGVsOiBDcnVkRm9ybURhdGEgPSBuZXcgQ3J1ZEZvcm1EYXRhKCk7XG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XG4gICAgc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcbiAgICBlbnZpcm9ubWVudDogYW55ID0ge307XG4gICAgY291bnRSZWFkeSA9IDA7XG4gICAgbnVtYmVyT2ZQaW5lZCA9IDM7XG4gICAgZGVmYXVsdEZpbHRlckNvbHVtbjogS2V5VmFsdWVUeXBlID0ge307XG5cbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XG4gICAgY3VzdG9tR2V0RGF0YSA9IGZhbHNlO1xuICAgIHJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XG4gICAgc2hvd0FsbEJ1dHRvbnMgPSBmYWxzZTtcbiAgICBwbHVzVXJsID0gJyc7XG4gICAgbG9hZGluZ1RpbWVvdXQ7XG4gICAgZGF0YVNlYXJjaENvbW1vbjogYW55ID0ge307XG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcbiAgICBwb3B1cFNpemVNYXggPSBuZXcgUG9wdXBTaXplKHsgbWF4aW1pemU6IHRydWUgfSk7XG4gICAgdXNlRGVmYWx0U29ydCA9IHRydWU7XG4gICAgZGVmYXVsdFNvcnRGaWVsZCA9ICdjcmVhdGVkJztcbiAgICBkZWZhdWx0U29ydERpcjogMSB8IC0xID0gLTE7XG4gICAgZGVsZXRlUGx1c1VybDogc3RyaW5nO1xuICAgIGRlbGV0ZU1hbnlQbHVzVXJsOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBBZGR0aW9uYWwgZmllbGRzIHRvIGFkZCB0byBncmlkSW5mby5maWVsZHMgd2hlbiB1c2luZyBzZXR0aW5nLmF1dG9HZW5lcmF0ZVNlbGVjdEZpZWxkc1xuICAgICAqIEBkYXRlIDExLzQvMjAyMiAtIDI6MDM6MTkgUE1cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBhZGRpdGlvbmFsRmllbGRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGNvbnN0V2lkdGhDb2w7XG5cbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY3VzdG9tUm91dGVyU2VydmljZTogQ3VzdG9tUm91dGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2xpc3RIZWxwZXJTZXJ2aWNlOiBMaXN0SGVscGVyU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfbWFzdGVyRGF0YVNlcnZpY2U6IE1hc3RlckRhdGFTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlOiBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlOiBDb25nVmllY1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9wZXJtaXNzaW9uU2VydmljZTogUGVybWlzc2lvblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9sb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuXG4gICAgY29uc3RydWN0b3IoX2luamVjdG9yOiBJbmplY3RvciwgX2lzVHJlZUxpc3Q6IGJvb2xlYW4pIHtcbiAgICAgICAgc3VwZXIoX2luamVjdG9yKTtcbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IF9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9saXN0SGVscGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMaXN0SGVscGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRXhwb3J0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xuICAgICAgICB0aGlzLl9jZCA9IHRoaXMuX2luamVjdG9yLmdldChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZUluQmFzZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XG5cblxuICAgICAgICB0aGlzLnNldHRpbmcua2V5ID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRNYWluTGlzdENvbXBvbmVudFZhbHVlKGNvbnRlbnQ6IFQpIHtcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xuICAgICAgICBpZiAoY29udGVudCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREZWZhdWx0VmFsdWVGaWx0ZXIoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY3J1ZExpc3QuY2hlY2tJc0luc2lkZURpYWxvZygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRJdGVtRnJvbVF1ZXJ5UGFyYW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scykge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKTtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHRoaXMubm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIELhu48gxJFpLCBraMO0bmcgdGjhu4Mgc2V0IG5n4bqnbSDEkeG7i25oIG5oxrAgbsOgeSDEkcaw4bujYywgY2jhu5cgbsOgbyBkw7luZyB0aMOsIHBo4bqjaSB04buxIHNldCB1c2VXb3JrZmxvd1xuICAgICAgICAgICAgLy8gaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuU2V0dGluZ1dvcmtmbG93KSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuZW52aXJvbm1lbnQgPSBtb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICBpZiAodGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5cbiAgICAgICAgICAgICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZVxuICAgICAgICAgICAgJiYgdGhpcy5lbnZpcm9ubWVudC5jbGllbnREb21haW5bdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlXVxuICAgICAgICAgICAgJiYgIXRoaXMuc2V0dGluZy50YXJnZXRQYXRoXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnRhcmdldFBhdGggPSBgJHt0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLnRvTG93ZXJDYXNlKCl9L2RldGFpbGA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcbiAgICB9XG5cblxuICAgIHByaXZhdGUgbWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKSB7XG4gICAgICAgIGxldCBpID0gMCwgY29uc3RXaWR0aCA9IHRoaXMuY29uc3RXaWR0aENvbCB8fCA4Mywgc3VtV2lkdGggPSAwLCB3aWR0aENvbEJlZm9yZSA9IDA7IC8vIDgzIHThu5VuZyBjaGnhu4F1IGTDoGkgY2hlY2tib3ggKyBzdHQgY3J1ZC1saXN0XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIGNvbnN0V2lkdGggLT0gMzU7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuT3JkZXJDb2x1bW4pIGNvbnN0V2lkdGggLT0gNDg7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLnN0aWNreUNvbHVtbikgY29uc3RXaWR0aCA9IDA7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuaXNQaW5uZWQgJiYgY29sLndpZHRoICYmIGkgPCB0aGlzLm51bWJlck9mUGluZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgbGVmdCA9IGNvbnN0V2lkdGg7XG4gICAgICAgICAgICAgICAgaWYgKGkgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1bVdpZHRoICs9IHdpZHRoQ29sQmVmb3JlO1xuICAgICAgICAgICAgICAgICAgICBsZWZ0ICs9IHN1bVdpZHRoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3aWR0aENvbEJlZm9yZSA9IE51bWJlcihjb2wud2lkdGgucmVwbGFjZSgvXFxEL2csICcnKSk7XG4gICAgICAgICAgICAgICAgY29sLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgICAgIGNvbC5jbGFzcyArPSAndGgtc3RpY2t5LWNvbHVtbic7XG4gICAgICAgICAgICAgICAgY29sLmNlbGxDbGFzcyA9ICd0aC1zdGlja3ktY29sdW1uJztcbiAgICAgICAgICAgICAgICArK2k7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Nb2RlbFNjaGVtYSA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gY29sLmZpZWxkKTtcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYS5uYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5sYWJlbCA9IGNvbHVtbk1vZGVsU2NoZW1hLm5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZnVsbExhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEuZnVsbE5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbC5pc0ZvcmVpZ25GaWVsZCA9IGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgJiYgY29sLmRpc3BsYXlGaWVsZEluR3JpZCAhPSBjb2wuZGlzcGxheUZpZWxkO1xuICAgICAgICAgICAgICAgIGlmICghY29sLmRpc3BsYXlGaWVsZEluR3JpZCkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZGlzcGxheUZpZWxkSW5HcmlkID0gY29sLmRpc3BsYXlGaWVsZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGF0YVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb2x1bW5Nb2RlbFNjaGVtYS5kYXRhVHlwZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFUeXBlKHR5cGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCkge1xuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGNvbC5maWVsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkU2VhcmNoVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgc291cmNlRmllbGQ6ICdfaycgfSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgIGxvZ2ljOiAnb3InLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzXG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgX3JlZ2lzdGVyR2xvYmFsU2VydmljZShzZXJ2aWNlOiBCYXNlU2VydmljZSkge1xuICAgICAgICBjb25zdCBrZXkgPSBzZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCBzZXJ2aWNlKTtcbiAgICB9XG5cbiAgICBnZXRNZW51QnV0dG9ucyhyb3dEYXRhKTogYW55W10gfCBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmhhbmRsZUFmdGVyVmlld0luaXQoKTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgaWYgKCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KVxuICAgICAgICAgICAgfHwgdGhpcy5zZXR0aW5nLmlzV29ya2Zsb3dUcmVlXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc1dvcmtmbG93KCk7XG4gICAgICAgIH1cblxuXG4gICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xuICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5ID4gMSkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREZWZhdWx0VmFsdWVGaWx0ZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRGaWx0ZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3Quc2V0SW5pdEZpbHRlcih0aGlzLmRlZmF1bHRGaWx0ZXJDb2x1bW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gI3JlZ2lvbiBHZXQgRGF0YVxuICAgIGFzeW5jIHJlbG9hZCgpIHtcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBfdHJpZ2dlclByb2Nlc3NEYXRhKGluZm9HZXREYXRhPzogYW55KSB7XG4gICAgICAgIGlmIChpbmZvR2V0RGF0YT8uZGF0YVNlYXJjaENvbW1vbikge1xuICAgICAgICAgICAgdGhpcy5kYXRhU2VhcmNoQ29tbW9uID0gaW5mb0dldERhdGEuZGF0YVNlYXJjaENvbW1vbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMubW9kZWwuYmFzZVJlYWR5KSByZXR1cm47XG4gICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0RhdGEoaW5mb0dldERhdGE/LmdyaWRJbmZvIHx8IG51bGwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0RhdGEoZ3JpZEluZm8/OiBHcmlkSW5mbykge1xuICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSB0aGlzLmNydWRMaXN0LmdldEdyaWRJbmZvKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiA5OTlcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXG4gICAgICAgICAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhKGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPGJvb2xlYW4gfCB2b2lkPiB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5ICYmICF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XG4gICAgICAgICAgICBncmlkSW5mby5tb2RpZnlGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgZmlsdGVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdFZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNOdWxsVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdFZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNOdWxsVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0VmFsdWVzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmllbGQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZmlsdGVycyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pc051bGwsICcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYXV0b0dlbmVyYXRlU2VsZWN0RmllbGRzID09PSB0cnVlICYmIHRoaXMuc2V0dGluZy5jb2xzICYmIHRoaXMuc2V0dGluZy5jb2xzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSA9IHRoaXMuc2V0dGluZy5jb2xzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBbJ2lkJ107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sLmlzUmVmRmllbGQgfHwgY29sLmluY2x1ZGVTZWxlY3QgPT09IGZhbHNlIHx8IGNvbC5maWVsZCA9PSBudWxsIHx8IGNvbC5maWVsZCA9PSAnJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmllbGRzLnB1c2goY29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmllbGRzLnB1c2goLi4udGhpcy5hZGRpdGlvbmFsRmllbGRzKTtcbiAgICAgICAgICAgICAgICBncmlkSW5mby5maWVsZHMgPSBmaWVsZHMuam9pbignLCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0TW9kaWZ5ID0gYXdhaXQgdGhpcy5tb2RpZnlHcmlkSW5mbyhncmlkSW5mbyk7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRHcmlkSW5mbyA9IGdyaWRJbmZvO1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlRGVmYWx0U29ydCAmJiBncmlkSW5mby5zb3J0cy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnVuc2hpZnQodGhpcy5uZXdTb3J0KHRoaXMuZGVmYXVsdFNvcnRGaWVsZCwgdGhpcy5kZWZhdWx0U29ydERpcikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSBbXTtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xuICAgICAgICAgICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRBdXRob3JpemVCdXR0b25zKCk7XG4gICAgICAgICAgICAgICAgfSwgMTApO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRvR2V0UmVxdWVzdChncmlkSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGRvR2V0UmVxdWVzdChncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUdldERhdGEpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VHZXREYXRhKGdyaWRJbmZvKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvY2Vzc0dldERhdGEocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhyZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfbWFya0xvYWRpbmcoKSB7XG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XG4gICAgICAgIHRoaXMubW9kZWwuYWRqdXN0ZWRQb3NpdGlvbkxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5sb2FkaW5nVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdNw6F5IGNo4bunIHBo4bqjbiBo4buTaSBxdcOhIGzDonUsIHZ1aSBsw7JuZyBraeG7g20gdHJhIGzhuqFpIMSRxrDhu51uZyB0cnV54buBbiBt4bqhbmchJyk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSwgMjAwMDApO1xuICAgIH1cblxuICAgIF9oYW5kbGVSZWxvYWRlZChldnQgPSBudWxsKSB7XG4gICAgICAgIGlmIChldnQgPT09IEVudW1Qcm9wZXJ0aWVzLlJFVFJJRVZFX0JVVFRPTl9URU1QTEFURSkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5yZXRyaWV2ZUJ1dHRvblRlbXBsYXRlKHRoaXMubHN0QnV0dG9uRWxlbWVudFtFbnVtUHJvcGVydGllcy5SRVNVTFRTXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xuICAgICAgICB0aGlzLmFmdGVyUmVsb2FkZWQoKTtcbiAgICB9XG5cbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkge1xuICAgIH1cblxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmlyZURhdGFMb2FkZWQoc3VjY2VzczogYm9vbGVhbiA9IHRydWUpIHtcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5wcm9jZXNzQmFzZURhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgdGhpcy5wbHVzVXJsKTtcbiAgICB9XG5cbiAgICBnZXREYXRhQ3VzdG9tKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuXG4gICAgfVxuXG4gICAgYXN5bmMgX2dldERhdGFTb3VyY2UocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KTogUHJvbWlzZTxbYW55W10sIGFueVtdXT4ge1xuICAgICAgICByZXR1cm4gW1tdLCBbXV07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzR2V0RGF0YShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcbiAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IHJlc3BvbnNlLnRvdGFsUmVjb3JkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZGaWVsZHMocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVJlbmRlckRhdGFTb3VyY2UocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgW2RhdGFTb3VyY2UsIHJhd0RhdGFTb3VyY2VdID0gYXdhaXQgdGhpcy5fZ2V0RGF0YVNvdXJjZShyZXNwb25zZSk7XG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJQcm9jZXNzRGF0YUluQmFzZShkYXRhU291cmNlKTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgJiYgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudCkge1xuICAgICAgICAgICAgdGhpcy5ncm91cEluQ2xpZW50KGRhdGFTb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMubW9kZWwuYWxsRGF0YVNvdXJjZSA9IHtcbiAgICAgICAgICAgIHJhdzogcmF3RGF0YVNvdXJjZSxcbiAgICAgICAgICAgIGRhdGE6IGRhdGFTb3VyY2VcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCByZXNldFNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBhd2FpdCB0aGlzLmFmdGVyR2V0RGF0YSgpO1xuICAgICAgICAvLyB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24odGhpcy5tb2RlbC5kYXRhU291cmNlKTtcbiAgICAgICAgLy8gSyBkw7luZyBow6BtIOG7nyB0csOqbiB2w6wgxJHhu5FpIHbhu5tpIHRyZWUgbGlzdCB0aMOsIG1vZGVsLmRhdGFTb3VyY2UgxJHDoyBi4buLIHTDoWkgY+G6pXUgdHLDumNcbiAgICAgICAgdGhpcy5fZ2V0UmVmRGF0YURyb3Bkb3duKHJhd0RhdGFTb3VyY2UpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0QXV0aG9yaXplQnV0dG9ucygpO1xuICAgICAgICB9LCAxMCk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2V0QXV0aG9yaXplQnV0dG9ucygpIHtcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QgJiYgIXRoaXMuc2V0dGluZy5oaWRkZW5BdXRob3JpemVCdXR0b24gJiYgIXRoaXMuc2V0dGluZy5oaWRkZW5Ub29sYmFyKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnNldEF1dGhvcml6ZUJ1dHRvbih0aGlzLmxzdEJ1dHRvbkVsZW1lbnRbRW51bVByb3BlcnRpZXMuUkVTVUxUU10pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TWVudUJ1dHRvbkN1c3RvbUF1dGhvcml6ZWQobWVudUJ1dHRvbnM6IFRuTWVudUl0ZW1bXSk6IFByb21pc2U8VG5NZW51SXRlbVtdPiB7XG4gICAgICAgIGNvbnN0IGJ1dHRvblNldHRpbmc6IGFueSA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5CVVRUT05fQVVUSE9SSVpFKSB8fCAne30nKTtcbiAgICAgICAgbGV0IGF1dGhvcml6ZUJ1dHRvbktleSA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcbiAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICBhdXRob3JpemVCdXR0b25LZXkgPSBgJHtzZXJ2aWNlQ29kZX1fJHt3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKDEpLnRvVXBwZXJDYXNlKCl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISF0aGlzLnNldHRpbmcuc3VmZml4QXV0aG9yaXplQ29kZSkge1xuICAgICAgICAgICAgYXV0aG9yaXplQnV0dG9uS2V5ICs9IGBfJHt0aGlzLnNldHRpbmcuc3VmZml4QXV0aG9yaXplQ29kZX1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxzdEJ1dHRvbkF1dGhvcml6ZSA9IGJ1dHRvblNldHRpbmdbYXV0aG9yaXplQnV0dG9uS2V5XTtcbiAgICAgICAgaWYgKCFsc3RCdXR0b25BdXRob3JpemU/Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG1lbnVCdXR0b25zO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZWRCdXR0b25zOiBUbk1lbnVJdGVtW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVCdXR0b25zKSB7XG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uID0gbHN0QnV0dG9uQXV0aG9yaXplLmZpbmQocCA9PiBwLmNvZGUgPT0gaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbik7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24gfHwgIXBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoaXRlbS5hdXRob3JpemF0aW9uU2VydmljZUNvZGUgfHwgc2VydmljZUNvZGUsIHBlcm1pc3Npb24gPyBwZXJtaXNzaW9uLmNvZGUgOiBpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uLCB0cnVlKS50aGVuKGF1dGhvcml6ZWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXplZCAhPT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgICByZXR1cm4gYXV0aG9yaXplZEJ1dHRvbnM7XG4gICAgfVxuXG5cbiAgICBiZWZvcmVSZW5kZXJEYXRhU291cmNlKGRhdGFzb3VyY2U6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHJldHVybiBkYXRhc291cmNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgbWVyZ2VSZWZGaWVsZHMoZGF0YVNvdXJjZTogYW55W10pIHtcbiAgICAgICAgY29uc3Qgc2NoZW1hcyA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcihwID0+IHAuaXNGb3JlaWduRmllbGQgJiYgISFwLmRpc3BsYXlGaWVsZEluR3JpZCAmJiAhcC5maWVsZC5zdGFydHNXaXRoKCdzdHInKSk7XG4gICAgICAgIGlmICghc2NoZW1hcy5sZW5ndGgpIHJldHVybjtcblxuICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgICAgIHJvd0RhdGFbJ3N0cicgKyBzY2hlbWEuZmllbGRdID0gcm93RGF0YVtzY2hlbWEuZGlzcGxheUZpZWxkSW5HcmlkXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZVJvd1NwYW4oZGF0YVNvdXJjZTogYW55W10sIGZpZWxkczogRmllbGRSb3dTcGFuW10sIGZ1bmNOZXh0PzogRnVuY3Rpb24pIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhU291cmNlLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZ1bmNOZXh0ICYmIGZ1bmNOZXh0KGRhdGFTb3VyY2VbaV0pICE9IGZ1bmNOZXh0KGRhdGFTb3VyY2VbaSArIDFdKSkgY29udGludWU7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGQgPSBlbGVtZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkUm9vdEluZGV4ID0gYHJvb3RJbmRleF8ke2ZpZWxkfWA7XG4gICAgICAgICAgICAgICAgbGV0IGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZnVuY0dldFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZWxlbWVudC5mdW5jR2V0VmFsdWUoZGF0YVNvdXJjZVtpICsgMV0pID09IGVsZW1lbnQuZnVuY0dldFZhbHVlKGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBkYXRhU291cmNlW2kgKyAxXVtmaWVsZF0gPT0gZGF0YVNvdXJjZVtpXVtmaWVsZF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcXVhbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVNvdXJjZVtpXVtmaWVsZFJvb3RJbmRleF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpXVtmaWVsZFJvb3RJbmRleF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlW2ldLnJvd1NwYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldLnJvd1NwYW4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaV0ucm93U3BhbltmaWVsZF0gPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4Um9vdEl0ZW0gPSBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpICsgMV1bZmllbGRSb290SW5kZXhdID0gaW5kZXhSb290SXRlbTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpbmRleFJvb3RJdGVtXS5yb3dTcGFuW2ZpZWxkXSsrO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VbaSArIDFdLmhpZGRlbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuID0ge307XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuW2ZpZWxkXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgYWZ0ZXJQcm9jZXNzRGF0YUluQmFzZShkYXRhU291cmNlOiBhbnlbXSA9IFtdKSB7XG5cbiAgICB9XG5cbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XG5cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaMOqbSByZWZGaWVsZCB2w6BvIGNydWQgbGlzdCB0csaw4bubYyBraGkgdOG7lW5nIGjhu6NwIGThu68gbGnhu4d1XG4gICAgICogc+G6vSBvdmVycmlkZSBjw6FjIGZpZWxkIGLhu4sgdHLDuW5nXG4gICAgICogQHBhcmFtIHJlZkZpZWxkc1xuICAgICAqL1xuICAgIGFkZFJlZkZpZWxkcyhyZWZGaWVsZHM6IFJlZkZpZWxkW10pIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYgPT0gbnVsbCB8fCB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZiA9IFsuLi5yZWZGaWVsZHNdO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgcmVmRmllbGQgb2YgcmVmRmllbGRzKSB7XG4gICAgICAgICAgICBjb25zdCBvbGRSZWZJbmRleCA9IHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYuZmluZEluZGV4KHggPT4geC5maWVsZCA9PSByZWZGaWVsZC5maWVsZCk7XG4gICAgICAgICAgICBpZiAob2xkUmVmSW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5wdXNoKHJlZkZpZWxkKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWZbb2xkUmVmSW5kZXhdID0gcmVmRmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBncm91cEluQ2xpZW50KGRhdGFTb3VyY2UpIHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID09IDApIHJldHVybjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc29ydERhdGFTb3VyY2VCeUdyb3VwRmllbGQoZGF0YVNvdXJjZSwgZ3JvdXBGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzb3J0RGF0YVNvdXJjZUJ5R3JvdXBGaWVsZChkYXRhU291cmNlOiBhbnlbXSwgZ3JvdXBGaWVsZDogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGRpYzoge1xuICAgICAgICAgICAgW2tleTogc3RyaW5nXTogYW55W107XG4gICAgICAgIH0gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZUdyb3VwID0gZGF0YVNvdXJjZVtpXVtncm91cEZpZWxkXTtcbiAgICAgICAgICAgIGlmICghZGljW3ZhbHVlR3JvdXBdKSB7XG4gICAgICAgICAgICAgICAgZGljW3ZhbHVlR3JvdXBdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0ucHVzaChkYXRhU291cmNlW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFTb3VyY2Uuc3BsaWNlKDAsIGRhdGFTb3VyY2UubGVuZ3RoKTtcbiAgICAgICAgT2JqZWN0LnZhbHVlcyhkaWMpLmZvckVhY2godmFsdWVzID0+IHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaCguLi52YWx1ZXMpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XG4gICAgICAgIGlmIChkYXRhU291cmNlICYmIGRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgbHN0RmllbGROZWVkR2V0UmVmID0gdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5maWx0ZXIocCA9PiAhcC5pc0ZvcmVpZ25GaWVsZCk7XG4gICAgICAgICAgICBpZiAobHN0RmllbGROZWVkR2V0UmVmKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShcbiAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZSxcbiAgICAgICAgICAgICAgICAgICAgbHN0RmllbGROZWVkR2V0UmVmLFxuICAgICAgICAgICAgICAgICAgICAoZmllbGQpID0+IHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZDogc3RyaW5nKSB7XG5cbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyAjcmVnaW9uIFdvcmtmbG93XG5cbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRLZXlXb3JrZmxvd1NldHRpbmcoKTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdykge1xuICAgICAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93TmV3ID0gKGF3YWl0IHRoaXMuX3dvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCd0YWJsZU5hbWUnLCBPcGVyYXRvci5lcXVhbCwga2V5KVxuICAgICAgICAgICAgXSkpLmRhdGE7XG4gICAgICAgICAgICB0aGlzLl9yZWdpc3Rlckdsb2JhbFNlcnZpY2UodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlKTtcbiAgICAgICAgICAgIGlmIChkYXRhV29ya2Zsb3dOZXcpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoZGF0YVdvcmtmbG93TmV3KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3ID0gZGF0YVdvcmtmbG93TmV3O1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMoZGF0YVdvcmtmbG93TmV3LndvcmtmbG93cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWUpIHtcbiAgICAgICAgICAgICAgICAvLyBM4bqleSByYSB0b8OgbiBi4buZIGPhuqV1IGjDrG5oIHdvcmtmbG93IGN1c3RvbSDEkeG7gyBs4bqleSBkYXRhc291cmNlIHRy4bqhbmcgdGjDoWlcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gYXdhaXQgdGhpcy5nZXREYXRhU291cmNlVHJhbmdUaGFpV29ya2Zsb3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENvbFdvcmtmbG93U3RhdHVzKGRhdGFTb3VyY2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSkge1xuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IFtdO1xuICAgICAgICBsZXQgd29ya2Zsb3dDb2RlcyA9IFtdO1xuICAgICAgICAvLyBO4bq/dSB04bqhbyB0YXNrIHRoYXkgdsOsIHThuqFvIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xuICAgICAgICAgICAgd29ya2Zsb3dDb2RlcyA9IGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dDb2RlQnlUYXNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzICYmICFBcnJheS5pc0FycmF5KGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcykpIHtcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpO1xuICAgICAgICAgICAgd29ya2Zsb3dDb2RlcyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh3b3JrZmxvd0NvZGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxuICAgICAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2NvZGUnLCBPcGVyYXRvci5pbiwgd29ya2Zsb3dDb2RlcylcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogJ3RpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRQbHVzOiAnZGF0YSdcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSk7XG4gICAgICAgICAgICB3b3JrZmxvd3M/LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaXRlbS5kYXRhID0gSlNPTi5wYXJzZShpdGVtLmRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSBpdGVtLmRhdGE7XG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IHdvcmtmbG93cztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0V29ya2Zsb3dDb2RlQnlUYXNrKCkge1xuICAgICAgICAvLyBM4bqleSBjw6FjIHF1eSB0csOsbmggZ+G6r24gY2hvIGPDtG5nIHZp4buHY1xuICAgICAgICBjb25zdCBwaGFuQ29uZ0NvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDYXVIaW5oV29ya2Zsb3dTZXJ2aWNlKTtcbiAgICAgICAgY29uc3QgZGF0YVdvcmtmbG93QnlUYXNrID0gKGF3YWl0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlLmdldEFsbChcbiAgICAgICAgICAgIFtdLCAnd29ya2Zsb3dDb2RlcydcbiAgICAgICAgKSkuZGF0YTtcbiAgICAgICAgaWYgKCFkYXRhV29ya2Zsb3dCeVRhc2spIHJldHVybiBbXTtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dDb2RlcyA9IFtdO1xuICAgICAgICBkYXRhV29ya2Zsb3dCeVRhc2suZm9yRWFjaChjYXVIaW5oID0+IHtcbiAgICAgICAgICAgIGlmICghY2F1SGluaC53b3JrZmxvd0NvZGVzKSByZXR1cm47XG4gICAgICAgICAgICBjYXVIaW5oLndvcmtmbG93Q29kZXMuc3BsaXQoJywnKS5mb3JFYWNoKHdvcmtmbG93Q29kZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHdvcmtmbG93Q29kZXMuaW5kZXhPZih3b3JrZmxvd0NvZGUpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHdvcmtmbG93Q29kZXMucHVzaCh3b3JrZmxvd0NvZGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93Q29kZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyh3b3JrZmxvd3M6IFdmSXRlbVtdKSB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbe1xuICAgICAgICAgICAgaWQ6IG51bGwsXG4gICAgICAgICAgICByYXdUZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxuICAgICAgICAgICAgdGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcbiAgICAgICAgICAgIG1hTG93ZXI6ICcnLFxuICAgICAgICAgICAgdGVuTG93ZXI6ICdjaMawYSBi4bqvdCDEkeG6p3UnXG4gICAgICAgIH1dO1xuICAgICAgICBpZiAod29ya2Zsb3dzICYmIHdvcmtmbG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKHdvcmtmbG93ID0+IHtcbiAgICAgICAgICAgICAgICB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TdGF0dXMgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbWFjaGluZS5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3VGVuOiBtYWNoaW5lLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW46IG1hY2hpbmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hTG93ZXI6IG1hY2hpbmUuY29kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuTG93ZXI6IG1hY2hpbmUubmFtZS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZS5zb21lKHggPT4geC50ZW5Mb3dlciA9PSBpdGVtU3RhdHVzLnRlbkxvd2VyICYmIHgubWFMb3dlciA9PSBpdGVtU3RhdHVzLm1hTG93ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbVN0YXR1cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2FtZU5hbWUgPSBkYXRhU291cmNlLmZpbmQocSA9PiBxLnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgcS5tYUxvd2VyICE9IGl0ZW1TdGF0dXMubWFMb3dlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNhbWVOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNhbWVOYW1lLnRlbiA9IGAke2l0ZW1TYW1lTmFtZS5yYXdUZW59ICgke2l0ZW1TYW1lTmFtZS5pZH0pYDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU3RhdHVzLnRlbiA9IGAke2l0ZW1TdGF0dXMucmF3VGVufSAoJHtpdGVtU3RhdHVzLmlkfSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xuICAgICAgICBjb25zdCBjb2xQYXJlbnQgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICBmaWVsZDogV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSxcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxuICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3RyYW5nVGhhaVY1JyxcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW4sXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXG4gICAgICAgICAgICBsYWJlbDogJ1Ry4bqhbmcgdGjDoWknLFxuICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXG4gICAgICAgICAgICBpc1RyZWU6IHRydWUsXG4gICAgICAgICAgICBmaWVsZFRyZWU6ICdwYXJlbnRJZCcsXG4gICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogdGhpcy5zZXR0aW5nLmFsbG93RmlsdGVyV29ya2Zsb3dDb2x1bW5cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIE7hur91IGNoxrBhIGPDsyB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmIHRow6wgYsOqbiBjcnVkLWxpc3Qgc+G6vSBhZGQgY+G7mXQgbsOgeSBzYXVcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChuZXcgUmVmRmllbGQoe1xuICAgICAgICAgICAgICAgIC4uLmNvbFBhcmVudFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxuICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXG4gICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxuICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXG4gICAgICAgIH07XG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XG4gICAgICAgIGlmICh0aGlzLmNydWRMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAodXNlckN1cnJlbnQudXNlck5hbWUgPT0gJ2FkbWluJykge1xuICAgICAgICAgICAgY29uc3QgY29sRm9yQWRtaW4gPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ19fdmlld0hpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcbiAgICAgICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGluY2x1ZGVTZWxlY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dIaXN0b3J5XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sRm9yQWRtaW4pO1xuICAgICAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbEZvckFkbWluXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sRm9yQWRtaW5dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gY3J1ZFxuICAgIHByaXZhdGUgbG9hZEl0ZW1Gcm9tUXVlcnlQYXJhbSgpIHtcbiAgICAgICAgaWYgKHRoaXMubG9hZERldGFpbEZyb21RdWVyeVBhcmFtID09PSB1bmRlZmluZWQgfHwgdGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHRydWUpIHtcbiAgICAgICAgICAgIGxldCBpZEluUXVlcnlTdHJpbmcgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHBpZCA9IG51bGw7IC8vIHBlcm1pc3Npb24gSWQgxJHGsOG7o2MgbmfGsOG7nWkga2jDoWMgc2hhcmVcbiAgICAgICAgICAgIGlmICh0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdFxuICAgICAgICAgICAgICAgICYmIHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBpZEluUXVlcnlTdHJpbmcgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5pZCB8fCB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5lbnRpdHlLZXk7XG4gICAgICAgICAgICAgICAgcGlkID0gdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXMucGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZERldGFpbFBpZChwaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaWRJblF1ZXJ5U3RyaW5nKSB7XG4gICAgICAgICAgICAgICAgLy8gZ2V0IGRldGFpbCBkYXRhXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbFdpdGhQZXJtaXNzaW9uKGlkSW5RdWVyeVN0cmluZylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuUkVBRCkgPT0gUGVybWlzc2lvbkJhc2UuUkVBRFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZWRpdChyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIGtow7RuZyBjw7MgcXV54buBbiB4ZW0gYuG6o24gZ2hpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRGV0YWlsUGlkKHBpZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREZXRhaWxCeVBpZChwaWQpXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoKHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uICYgUGVybWlzc2lvbkJhc2UuRURJVCkgPT0gUGVybWlzc2lvbkJhc2UuRURJVFxuICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhLnBpZCA9IHBpZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEuYmFzZVBlcm1pc3Npb25CeVBpZCA9IHJlcy5kYXRhLmJhc2VQZXJtaXNzaW9uO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlLmxvZ0Vycm9yKCdlcnJvciBvbiBnZXQgZGV0YWlsIGZyb20gcXVlcnlzdHJpbmcnLCBlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2FkZChldnQpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWRkKCk7XG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0ge307XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5BREQ7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBUaMOqbSBt4bubaSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUFkZCgpO1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZUFkZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xuICAgIH1cblxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93RWRpdExpbmtPbmx5Vmlldykge1xuICAgICAgICAgICAgdGhpcy5fdmlld09ubHkocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lZGl0KHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZpZXdPbmx5KHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLlZJRVc7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVmlldygpO1xuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ2hpIHRp4bq/dCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0gdGhpcy5jbG9uZURhdGEocm93RGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5Vmlld01vZGVsKHJvd0RhdGEpO1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcbiAgICB9XG5cbiAgICBhc3luYyBfY29weUxpbmtNdWx0aXBsZSgpIHtcbiAgICAgICAgY29uc3QgcGF0aHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgcGF0aHMucHVzaChhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgaXRlbSkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UuY29weUJ5U3RvcmFnZShwYXRocy5qb2luKCdcXHJcXG4nKSk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgY8OhYyBsacOqbiBr4bq/dCDEkcOjIGNo4buNbicpO1xuICAgIH1cblxuICAgIGFzeW5jIF9jb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgcGF0aCA9IGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5QnlTdG9yYWdlKHBhdGgpO1xuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1N1Y2Nlc3MoJ8SQw6Mgc2FvIGNow6lwIGxpw6puIGvhur90Jyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlRWRpdChyb3dEYXRhKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZsYXNoU2hvdyA9IHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVFZGl0KCk7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ2hpIHRp4bq/dCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBmbGFzaFNob3cgPyAnaGlkZScgOiBudWxsO1xuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0gdGhpcy5jbG9uZURhdGEocm93RGF0YSk7XG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RWRpdE1vZGVsKHRoaXMuZm9ybU1vZGVsLmRhdGEsIHJvd0RhdGEpO1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlRWRpdChyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZUVkaXQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RWRpdE1vZGVsKG1vZGVsRWRpdDogYW55LCByb3dEYXRhOiBhbnkpIHtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwaWQ6IHJvd0RhdGEucGlkLFxuICAgICAgICAgICAgYmFzZVBlcm1pc3Npb25CeVBpZDogcm93RGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkLFxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV0sXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbjogcm93RGF0YS5iYXNlUGVybWlzc2lvblxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCwgdGhpcy5kZWxldGVQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyB2YWxpZGF0ZURlbGV0ZShpdGVtcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBfZGVsZXRlKHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVEZWxldGUoW3Jvd0RhdGFdKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XG4gICAgICAgICAgICBpZiAoIXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKFtyb3dEYXRhLmlkXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5DT01NT04uUkVMT0FEX0RBVEFfVkVSU0lPTiwge30sIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZURhdGFFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcywgdGhpcy5kZWxldGVNYW55UGx1c1VybCk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZURlbGV0ZShpdGVtcyk7XG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiB4w7NhIGLhuqNuIGdoaSDEkcOjIGNo4buNbiAoVsOgIGPDoWMgYuG6o24gZ2hpIGNvbiB0xrDGoW5nIOG7qW5nKT8nKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5iZWZvcmVSZWxvYWRBZnRlckRlbGV0ZShpdGVtcy5tYXAocSA9PiBxLmlkKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGlkczogc3RyaW5nW10pIHtcbiAgICB9XG5cbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcbiAgICB9XG5cbiAgICBfaGFuZGxlU2F2ZWQoKSB7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZUNhbmNlbCgkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHNwYWNlZC1jb21tZW50XG4gICAgLy8jZW5kcmVnaW9uXG5cbiAgICBkZWVwQ2xvbmUoZGF0YSkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkYXRhKSk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2V4cG9ydEFsbERhdGEoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgbHN0RGF0YSA9IChhd2FpdCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGF0YUN1c3RvbVJvdXRlKHRoaXMucGx1c1VybCwgdGhpcy5jdXJyZW50R3JpZEluZm8uZmlsdGVycywgdGhpcy5jdXJyZW50R3JpZEluZm8uZmllbGRzLCB0aGlzLmN1cnJlbnRHcmlkSW5mby5zb3J0cywgLTEsIDEpKS5kYXRhID8/IFtdO1xuICAgICAgICBjb25zdCBsc3RWaXNpYmxlRmllbGQgPSB0aGlzLnNldHRpbmcuY29sc1xuICAgICAgICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0udmlzaWJsZSAmJiBpdGVtLmRhdGFUeXBlICE9PSAndHJhbmdUaGFpVjUnKVxuICAgICAgICAgICAgLm1hcChpdGVtID0+IGl0ZW0uZmllbGQpO1xuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUV4cG9ydEFsbERhdGEobHN0RGF0YSwgbHN0VmlzaWJsZUZpZWxkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0UmVmRGF0YUluRGF0YXNvdXJjZShsc3REYXRhLCB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmKTtcblxuICAgICAgICBjb25zdCBsc3RIZWFkZXIgPSBbJ1RUJ107XG4gICAgICAgIGNvbnN0IGZpZWxkU2NoZW1hTWFwID0gbmV3IE1hcChcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMubWFwKHNjaGVtYSA9PiBbc2NoZW1hLmZpZWxkLCBzY2hlbWEubmFtZV0pXG4gICAgICAgICk7XG4gICAgICAgIGxzdFZpc2libGVGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBmaWVsZFNjaGVtYU1hcC5nZXQoZmllbGQpIHx8IGZpZWxkU2NoZW1hTWFwLmdldChmaWVsZC5zbGljZSgzKSkgfHwgJyc7XG4gICAgICAgICAgICBsc3RIZWFkZXIucHVzaChzY2hlbWFOYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHByaW50RGF0YSA9IFtcbiAgICAgICAgICAgIGxzdEhlYWRlcixcbiAgICAgICAgICAgIC4uLmxzdERhdGEubWFwKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvdyA9IFtpbmRleCArIDFdO1xuICAgICAgICAgICAgICAgIGxzdFZpc2libGVGaWVsZC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtW2ZpZWxkXSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1bZmllbGRdID0gaXRlbVtmaWVsZF0gPyAnQ8OzJyA6ICdLaMO0bmcnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJvdy5wdXNoKGl0ZW1bZmllbGRdKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcm93O1xuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlLm9iamVjdFRvRXhjZWwocHJpbnREYXRhLCAnRGFuaCBzw6FjaCAnICsgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWUsIDEpO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZUV4cG9ydEFsbERhdGEoZGF0YVNvdXJjZSwgbHN0VmlzaWJsZUZpZWxkKSB7XG4gICAgfVxuXG5cbiAgICBhc3luYyBfZXhwb3J0QWxsRGF0YVdpdGhUZW1wbGF0ZUNvZGUodGVtcGxhdGVDb2RlOiBzdHJpbmcsIGlzVmlld09ubGluZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGxzdFJhd0RhdGEgPSAoYXdhaXQgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERhdGFDdXN0b21Sb3V0ZSh0aGlzLnBsdXNVcmwsIHRoaXMuY3VycmVudEdyaWRJbmZvLmZpbHRlcnMsIHRoaXMuY3VycmVudEdyaWRJbmZvLmZpZWxkcywgdGhpcy5jdXJyZW50R3JpZEluZm8uc29ydHMsIC0xLCAxKSkuZGF0YSA/PyBbXTtcbiAgICAgICAgY29uc3QgbHN0VmlzaWJsZUZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHNcbiAgICAgICAgICAgIC5maWx0ZXIoaXRlbSA9PiBpdGVtLnZpc2libGUgJiYgaXRlbS5kYXRhVHlwZSAhPT0gJ3RyYW5nVGhhaVY1JylcbiAgICAgICAgICAgIC5tYXAoaXRlbSA9PiBpdGVtLmZpZWxkKTtcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVFeHBvcnRBbGxEYXRhKGxzdFJhd0RhdGEsIGxzdFZpc2libGVGaWVsZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuX2NydWRTZXJ2aWNlLmdldFJlZkRhdGFJbkRhdGFzb3VyY2UobHN0UmF3RGF0YSwgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZik7XG4gICAgICAgIGNvbnN0IGxzdERhdGEgPSBsc3RSYXdEYXRhLm1hcChyb3dEYXRhID0+IHRoaXMubW9kaWZ5Um93RGF0YUZvckV4cG9ydChyb3dEYXRhKSk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XG4gICAgICAgICAgICBsc3REYXRhOiBsc3REYXRhXG4gICAgICAgIH07XG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RGF0YUZvckV4cG9ydEFsbChkYXRhKTtcbiAgICAgICAgY29uc3Qgc2hlZXQgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbFNoZWV0LFxuICAgICAgICAgICAgdGVtcGxhdGVDb2RlLFxuICAgICAgICAgICAgZGF0YTogdGhpcy5zdHJpbmdpZnlEYXRhKGRhdGEpLFxuICAgICAgICAgICAgbmFtZTogJ1NoZWV0MSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsRmlsZSxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc2V0dGluZy50aXRsZSA/IHRoaXMuc2V0dGluZy50aXRsZSA6IGBEYW5oIHPDoWNoICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKX1gXG4gICAgICAgIH0pO1xuICAgICAgICBmaWxlLmNoaWxkcmVuID0gW3NoZWV0XTtcbiAgICAgICAgY29uc3QgX3RlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIF90ZW1wbGF0ZUluc3RhbmNlU2VydmljZS5leHBvcnROb3JtYWwoZmlsZSk7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5RGF0YUZvckV4cG9ydEFsbChkYXRhOiBhbnkpIHtcblxuICAgIH1cbiAgICBtb2RpZnlSb3dEYXRhRm9yRXhwb3J0KHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHJvd0RhdGE7XG4gICAgfVxufVxuIl19
|
|
1101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1iYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvYmFzZS9saXN0LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDREQUE0RCxDQUFDO0FBQzdGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDBFQUEwRSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBYyxNQUFNLGtCQUFrQixDQUFDO0FBRXRJLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENB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QUFpQixFQUFFLEVBQUU7YUFDN0csQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sd0JBQXdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUM3RSxPQUFPLHdCQUF3QixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQzs7S0FDdEQ7SUFFSyxzQkFBc0IsQ0FBQyxJQUFTOztRQUV0QyxDQUFDO0tBQUE7SUFDRCxzQkFBc0IsQ0FBQyxPQUFPO1FBQzFCLE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7OztZQXRuQ0osU0FBUzs7O1lBOUM2QixRQUFROzs7OytCQWtEMUMsWUFBWSxTQUFDLFFBQVE7OEJBRXJCLFNBQVMsU0FBQyxpQkFBaUI7K0JBRzNCLFNBQVMsU0FBQyxrQkFBa0I7MEJBSTVCLEtBQUs7dUNBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgUXVlcnlMaXN0LCBWaWV3Q2hpbGQsIFZpZXdDaGlsZHJlbiwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jb25ndmllYy1waWNrZXIvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWxpc3QvY3J1ZC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUcmVlVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvdHJlZS10YWJsZS90cmVlLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBLZXlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xuaW1wb3J0IHsgRW51bVByb3BlcnRpZXMsIEV4cG9ydEl0ZW0sIFBlcm1pc3Npb25CYXNlLCBQZXJtaXNzaW9uU2VydmljZSwgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UsIFRuTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9wdWJsaWMtYXBpJztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENhdUhpbmhXb3JrZmxvd1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jYXVoaW5oLXdvcmtmbG93LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTWFzdGVyRGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXN0ZXItZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XG5pbXBvcnQgeyBXb3JrZmxvd1NldHRpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmtmbG93LXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRXhwb3J0SXRlbVR5cGUsIEZvcm1TdGF0ZSwgS2V5Rmxhc2hTaG93LCBXZkl0ZW0sIFdvcmtmbG93RmllbGRTdGF0ZUNvZGUgfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IHtcbiAgICBDb2x1bW5TY2hlbWFCYXNlLFxuICAgIENvbnRyb2xUeXBlLFxuICAgIENydWRGb3JtRGF0YSxcbiAgICBDcnVkTGlzdERhdGEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERyb3Bkb3duT3B0aW9ucyxcbiAgICBGaWVsZFJvd1NwYW4sXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplLFxuICAgIFJlZkZpZWxkLFxuICAgIFRleHRBbGlnblxufSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XG5pbXBvcnQgeyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiB9IGZyb20gJy4vY29tcG9uZW50LWJhc2Utd2l0aC1idXR0b24nO1xuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuL2ktbGlzdC1jb21wb25lbnQnO1xuXG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpc3RCYXNlPFQgZXh0ZW5kcyBJTGlzdENvbXBvbmVudD4gZXh0ZW5kcyBDb21wb25lbnRCYXNlV2l0aEJ1dHRvbiB7XG4gICAgcHVibGljIGNydWRMaXN0OiBUO1xuXG4gICAgQFZpZXdDaGlsZHJlbignYnV0dG9uJykgbHN0QnV0dG9uRWxlbWVudDogUXVlcnlMaXN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgICBjdXJyZW50R3JpZEluZm86IEdyaWRJbmZvO1xuICAgIEBWaWV3Q2hpbGQoQ3J1ZExpc3RDb21wb25lbnQpIHNldCBjb250ZW50Q3J1ZExpc3QoY29udGVudDogVCkge1xuICAgICAgICB0aGlzLnNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudCk7XG4gICAgfVxuICAgIEBWaWV3Q2hpbGQoVHJlZVRhYmxlQ29tcG9uZW50KSBzZXQgY29udGVudFRyZWVUYWJsZShjb250ZW50OiBUKSB7XG4gICAgICAgIHRoaXMuc2V0TWFpbkxpc3RDb21wb25lbnRWYWx1ZShjb250ZW50KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xuICAgIEBJbnB1dCgpIGxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbTogYm9vbGVhbjtcblxuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcbiAgICBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBmb3JtTW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcbiAgICBzY29wZURhdGFFZGl0OiBhbnkgPSB7fTtcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xuICAgIGVudmlyb25tZW50OiBhbnkgPSB7fTtcbiAgICBjb3VudFJlYWR5ID0gMDtcbiAgICBudW1iZXJPZlBpbmVkID0gMztcbiAgICBkZWZhdWx0RmlsdGVyQ29sdW1uOiBLZXlWYWx1ZVR5cGUgPSB7fTtcblxuICAgIGhhc0NydWRMaXN0ID0gdHJ1ZTtcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XG4gICAgcmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICBzaG93QWxsQnV0dG9ucyA9IGZhbHNlO1xuICAgIHBsdXNVcmwgPSAnJztcbiAgICBsb2FkaW5nVGltZW91dDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xuICAgIHBvcHVwU2l6ZU1heCA9IG5ldyBQb3B1cFNpemUoeyBtYXhpbWl6ZTogdHJ1ZSB9KTtcbiAgICB1c2VEZWZhbHRTb3J0ID0gdHJ1ZTtcbiAgICBkZWZhdWx0U29ydEZpZWxkID0gJ2NyZWF0ZWQnO1xuICAgIGRlZmF1bHRTb3J0RGlyOiAxIHwgLTEgPSAtMTtcbiAgICBkZWxldGVQbHVzVXJsOiBzdHJpbmc7XG4gICAgZGVsZXRlTWFueVBsdXNVcmw6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEFkZHRpb25hbCBmaWVsZHMgdG8gYWRkIHRvIGdyaWRJbmZvLmZpZWxkcyB3aGVuIHVzaW5nIHNldHRpbmcuYXV0b0dlbmVyYXRlU2VsZWN0RmllbGRzXG4gICAgICogQGRhdGUgMTEvNC8yMDIyIC0gMjowMzoxOSBQTVxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqL1xuICAgIGFkZGl0aW9uYWxGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3RXaWR0aENvbDtcblxuICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfbGlzdEhlbHBlclNlcnZpY2U6IExpc3RIZWxwZXJTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9leHBvcnRTZXJ2aWNlOiBFeHBvcnRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XG4gICAgcHJvdGVjdGVkIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XG4gICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9lbnRpdHlQZXJtaXNzaW9uU2VydmljZTogRW50aXR5UGVybWlzc2lvblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBXb3JrZmxvd1NldHRpbmdzU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9zdGF0ZU1hY2hpbmVzU2VydmljZTogU3RhdGVNYWNoaW5lc1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9jb25nVmllY1NlcnZpY2VJbkJhc2U6IENvbmdWaWVjU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2xvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihfaW5qZWN0b3I6IEluamVjdG9yLCBfaXNUcmVlTGlzdDogYm9vbGVhbikge1xuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xuICAgICAgICBjb25zdCBtb2R1bGVDb25maWdTZXJ2aWNlID0gX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG5cbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2xpc3RIZWxwZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExpc3RIZWxwZXJTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFeHBvcnRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XG4gICAgICAgIHRoaXMuX2NkID0gdGhpcy5faW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICAgICAgdGhpcy5fdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1NldHRpbmdzU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFN0YXRlTWFjaGluZXNTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlSW5CYXNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbmdWaWVjU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fbG9nZ2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChMb2dnZXJTZXJ2aWNlKTtcblxuXG4gICAgICAgIHRoaXMuc2V0dGluZy5rZXkgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldE1haW5MaXN0Q29tcG9uZW50VmFsdWUoY29udGVudDogVCkge1xuICAgICAgICBjb25zdCBiZWZvcmVWYWx1ZSA9IHRoaXMuY3J1ZExpc3Q7XG4gICAgICAgIGlmIChjb250ZW50KSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0ID0gY29udGVudDtcbiAgICAgICAgICAgIGlmICghYmVmb3JlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcbiAgICAgICAgICAgICAgICB0aGlzLnNldERlZmF1bHRWYWx1ZUZpbHRlcigpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZiA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdC5jaGVja0lzSW5zaWRlRGlhbG9nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9hZEl0ZW1Gcm9tUXVlcnlQYXJhbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5IDwgMikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuYmFzZVJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5iYXNlUmVhZHkgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scyA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbHRlcihxID0+ICFxLnJlbW92ZU9uSW5pdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpO1xuICAgICAgICB0aGlzLmdlbmVyYXRlRmllbGRTZWFyY2hUZXh0KCk7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gQuG7jyDEkWksIGtow7RuZyB0aOG7gyBzZXQgbmfhuqdtIMSR4buLbmggbmjGsCBuw6B5IMSRxrDhu6NjLCBjaOG7lyBuw6BvIGTDuW5nIHRow6wgcGjhuqNpIHThu7Egc2V0IHVzZVdvcmtmbG93XG4gICAgICAgICAgICAvLyBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cpIHtcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgdGhpcy5fcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbW9kdWxlQ29uZmlnU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IG1vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQ7XG4gICAgICAgIGlmICh0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblxuICAgICAgICAgICAgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlXG4gICAgICAgICAgICAmJiB0aGlzLmVudmlyb25tZW50LmNsaWVudERvbWFpblt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGVdXG4gICAgICAgICAgICAmJiAhdGhpcy5zZXR0aW5nLnRhcmdldFBhdGhcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcudGFyZ2V0UGF0aCA9IGAke3RoaXMuZW52aXJvbm1lbnQuY2xpZW50RG9tYWluW3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZV19LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUudG9Mb3dlckNhc2UoKX0vZGV0YWlsYDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldE1lbnVCdXR0b25zID0gdGhpcy5nZXRNZW51QnV0dG9ucy5iaW5kKHRoaXMpO1xuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBtZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpIHtcbiAgICAgICAgbGV0IGkgPSAwLCBjb25zdFdpZHRoID0gdGhpcy5jb25zdFdpZHRoQ29sIHx8IDgzLCBzdW1XaWR0aCA9IDAsIHdpZHRoQ29sQmVmb3JlID0gMDsgLy8gODMgdOG7lW5nIGNoaeG7gXUgZMOgaSBjaGVja2JveCArIHN0dCBjcnVkLWxpc3RcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkgY29uc3RXaWR0aCAtPSAzNTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbikgY29uc3RXaWR0aCAtPSA0ODtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSBjb25zdFdpZHRoID0gMDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5pc1Bpbm5lZCAmJiBjb2wud2lkdGggJiYgaSA8IHRoaXMubnVtYmVyT2ZQaW5lZCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0ID0gY29uc3RXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3VtV2lkdGggKz0gd2lkdGhDb2xCZWZvcmU7XG4gICAgICAgICAgICAgICAgICAgIGxlZnQgKz0gc3VtV2lkdGg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdpZHRoQ29sQmVmb3JlID0gTnVtYmVyKGNvbC53aWR0aC5yZXBsYWNlKC9cXEQvZywgJycpKTtcbiAgICAgICAgICAgICAgICBjb2wubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICAgICAgY29sLmNsYXNzICs9ICd0aC1zdGlja3ktY29sdW1uJztcbiAgICAgICAgICAgICAgICBjb2wuY2VsbENsYXNzID0gJ3RoLXN0aWNreS1jb2x1bW4nO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbk1vZGVsU2NoZW1hID0gdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5maW5kKHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xuICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLm5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29sLmlzRm9yZWlnbkZpZWxkID0gY29sLmRpc3BsYXlGaWVsZEluR3JpZCAmJiBjb2wuZGlzcGxheUZpZWxkSW5HcmlkICE9IGNvbC5kaXNwbGF5RmllbGQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGlzcGxheUZpZWxkSW5HcmlkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbC5kaXNwbGF5RmllbGRJbkdyaWQgPSBjb2wuZGlzcGxheUZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5kYXRhVHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0eXBlO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKFxuICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHsgZmllbGQsIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLCBzb3VyY2VGaWVsZDogJ19rJyB9KVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWx0ZXJUZW1wbGF0ZUFkdnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzLnNwbGljZSgwLCAwLCBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnNcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBfcmVnaXN0ZXJHbG9iYWxTZXJ2aWNlKHNlcnZpY2U6IEJhc2VTZXJ2aWNlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHNlcnZpY2UpO1xuICAgIH1cblxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpOiBhbnlbXSB8IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgdGhpcy5yb3dEYXRhQ3VycmVudCA9IHJvd0RhdGE7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlQWZ0ZXJWaWV3SW5pdCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xuICAgICAgICBpZiAoKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpXG4gICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuaXNXb3JrZmxvd1RyZWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmNoZWNrSGFzV29ya2Zsb3coKTtcbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XG4gICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmJhc2VSZWFkeSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldERlZmF1bHRWYWx1ZUZpbHRlcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbikge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5zZXRJbml0RmlsdGVyKHRoaXMuZGVmYXVsdEZpbHRlckNvbHVtbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAjcmVnaW9uIEdldCBEYXRhXG4gICAgYXN5bmMgcmVsb2FkKCkge1xuICAgICAgICB0aGlzLmNydWRMaXN0LnJlbG9hZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIF90cmlnZ2VyUHJvY2Vzc0RhdGEoaW5mb0dldERhdGE/OiBhbnkpIHtcbiAgICAgICAgaWYgKGluZm9HZXREYXRhPy5kYXRhU2VhcmNoQ29tbW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGFTZWFyY2hDb21tb24gPSBpbmZvR2V0RGF0YS5kYXRhU2VhcmNoQ29tbW9uO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5iYXNlUmVhZHkpIHJldHVybjtcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShpbmZvR2V0RGF0YT8uZ3JpZEluZm8gfHwgbnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XG4gICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IHRoaXMuY3J1ZExpc3QuZ2V0R3JpZEluZm8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXREYXRhKGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkgJiYgIXRoaXMubW9kZWwubG9hZGluZykge1xuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XG4gICAgICAgICAgICAgICAgICAgIEpTT04ucGFyc2UoZmlsdGVyLnZhbHVlKS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3RWYWx1ZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmlzTnVsbCwgJycpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hdXRvR2VuZXJhdGVTZWxlY3RGaWVsZHMgPT09IHRydWUgJiYgdGhpcy5zZXR0aW5nLmNvbHMgJiYgdGhpcy5zZXR0aW5nLmNvbHMubGVuZ3RoID4gMCAmJiAhdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sczogQ29sdW1uU2NoZW1hQmFzZVtdID0gdGhpcy5zZXR0aW5nLmNvbHM7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRzOiBzdHJpbmdbXSA9IFsnaWQnXTtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuaXNSZWZGaWVsZCB8fCBjb2wuaW5jbHVkZVNlbGVjdCA9PT0gZmFsc2UgfHwgY29sLmZpZWxkID09IG51bGwgfHwgY29sLmZpZWxkID09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaWVsZHMucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaWVsZHMucHVzaCguLi50aGlzLmFkZGl0aW9uYWxGaWVsZHMpO1xuICAgICAgICAgICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IGZpZWxkcy5qb2luKCcsJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEdyaWRJbmZvID0gZ3JpZEluZm87XG4gICAgICAgICAgICBpZiAodGhpcy51c2VEZWZhbHRTb3J0ICYmIGdyaWRJbmZvLnNvcnRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMudW5zaGlmdCh0aGlzLm5ld1NvcnQodGhpcy5kZWZhdWx0U29ydEZpZWxkLCB0aGlzLmRlZmF1bHRTb3J0RGlyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0TW9kaWZ5ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwudG90YWwgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEF1dGhvcml6ZUJ1dHRvbnMoKTtcbiAgICAgICAgICAgICAgICB9LCAxMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xuICAgICAgICBpZiAoIXRoaXMuY3VzdG9tR2V0RGF0YSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKGFzeW5jIHJlc3BvbnNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKHJlc3BvbnNlLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIF9tYXJrTG9hZGluZygpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hZGp1c3RlZFBvc2l0aW9uTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ03DoXkgY2jhu6cgcGjhuqNuIGjhu5NpIHF1w6EgbMOidSwgdnVpIGzDsm5nIGtp4buDbSB0cmEgbOG6oWkgxJHGsOG7nW5nIHRydXnhu4FuIG3huqFuZyEnKTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB9LCAyMDAwMCk7XG4gICAgfVxuXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcbiAgICAgICAgaWYgKGV2dCA9PT0gRW51bVByb3BlcnRpZXMuUkVUUklFVkVfQlVUVE9OX1RFTVBMQVRFKSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnJldHJpZXZlQnV0dG9uVGVtcGxhdGUodGhpcy5sc3RCdXR0b25FbGVtZW50W0VudW1Qcm9wZXJ0aWVzLlJFU1VMVFNdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XG4gICAgICAgIHRoaXMuYWZ0ZXJSZWxvYWRlZCgpO1xuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyUmVsb2FkZWQoKSB7XG4gICAgfVxuXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJlRGF0YUxvYWRlZChzdWNjZXNzOiBib29sZWFuID0gdHJ1ZSkge1xuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcbiAgICB9XG5cbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xuICAgIH1cblxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XG5cbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0RGF0YVNvdXJjZShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpOiBQcm9taXNlPFthbnlbXSwgYW55W11dPiB7XG4gICAgICAgIHJldHVybiBbW10sIFtdXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NHZXREYXRhKHJlc3BvbnNlOiBSZXNwb25zZVJlc3VsdCkge1xuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhICYmIHJlc3BvbnNlLmRhdGEubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkZpZWxkcyhyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBbZGF0YVNvdXJjZSwgcmF3RGF0YVNvdXJjZV0gPSBhd2FpdCB0aGlzLl9nZXREYXRhU291cmNlKHJlc3BvbnNlKTtcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCAmJiB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50KSB7XG4gICAgICAgICAgICB0aGlzLmdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5tb2RlbC5hbGxEYXRhU291cmNlID0ge1xuICAgICAgICAgICAgcmF3OiByYXdEYXRhU291cmNlLFxuICAgICAgICAgICAgZGF0YTogZGF0YVNvdXJjZVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IHJlc2V0U2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XG4gICAgICAgIC8vIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xuICAgICAgICAvLyBLIGTDuW5nIGjDoG0g4bufIHRyw6puIHbDrCDEkeG7kWkgduG7m2kgdHJlZSBsaXN0IHRow6wgbW9kZWwuZGF0YVNvdXJjZSDEkcOjIGLhu4sgdMOhaSBj4bqldSB0csO6Y1xuICAgICAgICB0aGlzLl9nZXRSZWZEYXRhRHJvcGRvd24ocmF3RGF0YVNvdXJjZSk7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRBdXRob3JpemVCdXR0b25zKCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICB9XG5cbiAgICBhc3luYyBzZXRBdXRob3JpemVCdXR0b25zKCkge1xuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlbkF1dGhvcml6ZUJ1dHRvbiAmJiAhdGhpcy5zZXR0aW5nLmhpZGRlblRvb2xiYXIpIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3Quc2V0QXV0aG9yaXplQnV0dG9uKHRoaXMubHN0QnV0dG9uRWxlbWVudFtFbnVtUHJvcGVydGllcy5SRVNVTFRTXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBnZXRNZW51QnV0dG9uQ3VzdG9tQXV0aG9yaXplZChtZW51QnV0dG9uczogVG5NZW51SXRlbVtdKTogUHJvbWlzZTxUbk1lbnVJdGVtW10+IHtcbiAgICAgICAgY29uc3QgYnV0dG9uU2V0dGluZzogYW55ID0gSlNPTi5wYXJzZShzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkJVVFRPTl9BVVRIT1JJWkUpIHx8ICd7fScpO1xuICAgICAgICBsZXQgYXV0aG9yaXplQnV0dG9uS2V5ID0gd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLnN1YnN0cmluZygxKS50b1VwcGVyQ2FzZSgpLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xuICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgIGF1dGhvcml6ZUJ1dHRvbktleSA9IGAke3NlcnZpY2VDb2RlfV8ke3dpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zdWJzdHJpbmcoMSkudG9VcHBlckNhc2UoKX1gO1xuICAgICAgICB9XG4gICAgICAgIGlmICghIXRoaXMuc2V0dGluZy5zdWZmaXhBdXRob3JpemVDb2RlKSB7XG4gICAgICAgICAgICBhdXRob3JpemVCdXR0b25LZXkgKz0gYF8ke3RoaXMuc2V0dGluZy5zdWZmaXhBdXRob3JpemVDb2RlfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbHN0QnV0dG9uQXV0aG9yaXplID0gYnV0dG9uU2V0dGluZ1thdXRob3JpemVCdXR0b25LZXldO1xuICAgICAgICBpZiAoIWxzdEJ1dHRvbkF1dGhvcml6ZT8ubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbWVudUJ1dHRvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgYXV0aG9yaXplZEJ1dHRvbnM6IFRuTWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSBsc3RCdXR0b25BdXRob3JpemUuZmluZChwID0+IHAuY29kZSA9PSBpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uKTtcbiAgICAgICAgICAgIGlmICghaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiB8fCAhcGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSB8fCBzZXJ2aWNlQ29kZSwgcGVybWlzc2lvbiA/IHBlcm1pc3Npb24uY29kZSA6IGl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24sIHRydWUpLnRoZW4oYXV0aG9yaXplZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRob3JpemVkICE9PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXV0aG9yaXplZEJ1dHRvbnMucHVzaChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgICAgIHJldHVybiBhdXRob3JpemVkQnV0dG9ucztcbiAgICB9XG5cblxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgcmV0dXJuIGRhdGFzb3VyY2U7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBtZXJnZVJlZkZpZWxkcyhkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBjb25zdCBzY2hlbWFzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHAgPT4gcC5pc0ZvcmVpZ25GaWVsZCAmJiAhIXAuZGlzcGxheUZpZWxkSW5HcmlkICYmICFwLmZpZWxkLnN0YXJ0c1dpdGgoJ3N0cicpKTtcbiAgICAgICAgaWYgKCFzY2hlbWFzLmxlbmd0aCkgcmV0dXJuO1xuXG4gICAgICAgIGZvciAoY29uc3Qgcm93RGF0YSBvZiBkYXRhU291cmNlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YVsnc3RyJyArIHNjaGVtYS5maWVsZF0gPSByb3dEYXRhW3NjaGVtYS5kaXNwbGF5RmllbGRJbkdyaWRdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlUm93U3BhbihkYXRhU291cmNlOiBhbnlbXSwgZmllbGRzOiBGaWVsZFJvd1NwYW5bXSwgZnVuY05leHQ/OiBGdW5jdGlvbikge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZnVuY05leHQgJiYgZnVuY05leHQoZGF0YVNvdXJjZVtpXSkgIT0gZnVuY05leHQoZGF0YVNvdXJjZVtpICsgMV0pKSBjb250aW51ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBmaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IGVsZW1lbnQuZmllbGQ7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRSb290SW5kZXggPSBgcm9vdEluZGV4XyR7ZmllbGR9YDtcbiAgICAgICAgICAgICAgICBsZXQgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5mdW5jR2V0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBlbGVtZW50LmZ1bmNHZXRWYWx1ZShkYXRhU291cmNlW2kgKyAxXSkgPT0gZWxlbWVudC5mdW5jR2V0VmFsdWUoZGF0YVNvdXJjZVtpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGRhdGFTb3VyY2VbaSArIDFdW2ZpZWxkXSA9PSBkYXRhU291cmNlW2ldW2ZpZWxkXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGVxdWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2ldW2ZpZWxkUm9vdEluZGV4XSA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2VbaV0ucm93U3Bhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2VbaV0ucm93U3BhbiA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZVtpXS5yb3dTcGFuW2ZpZWxkXSA9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5kZXhSb290SXRlbSA9IGRhdGFTb3VyY2VbaV1bZmllbGRSb290SW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXVtmaWVsZFJvb3RJbmRleF0gPSBpbmRleFJvb3RJdGVtO1xuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2luZGV4Um9vdEl0ZW1dLnJvd1NwYW5bZmllbGRdKys7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZVtpICsgMV0uaGlkZGVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW4gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlW2kgKyAxXS5oaWRkZW5bZmllbGRdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBhZnRlclByb2Nlc3NEYXRhSW5CYXNlKGRhdGFTb3VyY2U6IGFueVtdID0gW10pIHtcblxuICAgIH1cblxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcblxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRow6ptIHJlZkZpZWxkIHbDoG8gY3J1ZCBsaXN0IHRyxrDhu5tjIGtoaSB04buVbmcgaOG7o3AgZOG7ryBsaeG7h3VcbiAgICAgKiBz4bq9IG92ZXJyaWRlIGPDoWMgZmllbGQgYuG7iyB0csO5bmdcbiAgICAgKiBAcGFyYW0gcmVmRmllbGRzXG4gICAgICovXG4gICAgYWRkUmVmRmllbGRzKHJlZkZpZWxkczogUmVmRmllbGRbXSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZiA9PSBudWxsIHx8IHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gWy4uLnJlZkZpZWxkc107XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCByZWZGaWVsZCBvZiByZWZGaWVsZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9sZFJlZkluZGV4ID0gdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5maW5kSW5kZXgoeCA9PiB4LmZpZWxkID09IHJlZkZpZWxkLmZpZWxkKTtcbiAgICAgICAgICAgIGlmIChvbGRSZWZJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gocmVmRmllbGQpO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZltvbGRSZWZJbmRleF0gPSByZWZGaWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdyb3VwSW5DbGllbnQoZGF0YVNvdXJjZSkge1xuICAgICAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT0gMCkgcmV0dXJuO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgbGV0IGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xuICAgICAgICAgICAgICAgIGdyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zb3J0RGF0YVNvdXJjZUJ5R3JvdXBGaWVsZChkYXRhU291cmNlLCBncm91cEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNvcnREYXRhU291cmNlQnlHcm91cEZpZWxkKGRhdGFTb3VyY2U6IGFueVtdLCBncm91cEZpZWxkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgZGljOiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnlbXTtcbiAgICAgICAgfSA9IHt9O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlR3JvdXAgPSBkYXRhU291cmNlW2ldW2dyb3VwRmllbGRdO1xuICAgICAgICAgICAgaWYgKCFkaWNbdmFsdWVHcm91cF0pIHtcbiAgICAgICAgICAgICAgICBkaWNbdmFsdWVHcm91cF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRpY1t2YWx1ZUdyb3VwXS5wdXNoKGRhdGFTb3VyY2VbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVNvdXJjZS5zcGxpY2UoMCwgZGF0YVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBPYmplY3QudmFsdWVzKGRpYykuZm9yRWFjaCh2YWx1ZXMgPT4ge1xuICAgICAgICAgICAgZGF0YVNvdXJjZS5wdXNoKC4uLnZhbHVlcyk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBsc3RGaWVsZE5lZWRHZXRSZWYgPSB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLmZpbHRlcihwID0+ICFwLmlzRm9yZWlnbkZpZWxkKTtcbiAgICAgICAgICAgIGlmIChsc3RGaWVsZE5lZWRHZXRSZWYpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhSW5EYXRhc291cmNlKFxuICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLFxuICAgICAgICAgICAgICAgICAgICBsc3RGaWVsZE5lZWRHZXRSZWYsXG4gICAgICAgICAgICAgICAgICAgIChmaWVsZCkgPT4gdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24obnVsbCk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkOiBzdHJpbmcpIHtcblxuICAgIH1cblxuICAgIC8vICNlbmRyZWdpb25cblxuICAgIC8vICNyZWdpb24gV29ya2Zsb3dcblxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNXb3JrZmxvdygpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dOZXcgPSAoYXdhaXQgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihbXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3RhYmxlTmFtZScsIE9wZXJhdG9yLmVxdWFsLCBrZXkpXG4gICAgICAgICAgICBdKSkuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuX3JlZ2lzdGVyR2xvYmFsU2VydmljZSh0aGlzLl9jb25nVmllY1NlcnZpY2VJbkJhc2UpO1xuICAgICAgICAgICAgaWYgKGRhdGFXb3JrZmxvd05ldykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0V29ya2Zsb3dEZXRhaWxCeVdvcmtmbG93U2V0dGluZyhkYXRhV29ya2Zsb3dOZXcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcgPSBkYXRhV29ya2Zsb3dOZXc7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyhkYXRhV29ya2Zsb3dOZXcud29ya2Zsb3dzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSkge1xuICAgICAgICAgICAgICAgIC8vIEzhuqV5IHJhIHRvw6BuIGLhu5kgY+G6pXUgaMOsbmggd29ya2Zsb3cgY3VzdG9tIMSR4buDIGzhuqV5IGRhdGFzb3VyY2UgdHLhuqFuZyB0aMOhaVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBhd2FpdCB0aGlzLmdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMoZGF0YVNvdXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoaXRlbVdvcmtmbG93U2V0dGluZzogYW55KSB7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gW107XG4gICAgICAgIGxldCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIC8vIE7hur91IHThuqFvIHRhc2sgdGhheSB2w6wgdOG6oW8gY8O0bmcgdmnhu4djXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gYXdhaXQgdGhpcy5nZXRXb3JrZmxvd0NvZGVCeVRhc2soKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xuICAgICAgICAgICAgaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzLnNwbGl0KCcsJyk7XG4gICAgICAgICAgICB3b3JrZmxvd0NvZGVzID0gaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHdvcmtmbG93Q29kZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXG4gICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmluLCB3b3JrZmxvd0NvZGVzKVxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlRmllbGQ6ICdjb2RlJyxcbiAgICAgICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApKTtcbiAgICAgICAgICAgIHdvcmtmbG93cz8uZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IGl0ZW0uZGF0YTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0NvZGVCeVRhc2soKSB7XG4gICAgICAgIC8vIEzhuqV5IGPDoWMgcXV5IHRyw6xuaCBn4bqvbiBjaG8gY8O0bmcgdmnhu4djXG4gICAgICAgIGNvbnN0IHBoYW5Db25nQ29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhdUhpbmhXb3JrZmxvd1NlcnZpY2UpO1xuICAgICAgICBjb25zdCBkYXRhV29ya2Zsb3dCeVRhc2sgPSAoYXdhaXQgcGhhbkNvbmdDb25nVmllY1NlcnZpY2UuZ2V0QWxsKFxuICAgICAgICAgICAgW10sICd3b3JrZmxvd0NvZGVzJ1xuICAgICAgICApKS5kYXRhO1xuICAgICAgICBpZiAoIWRhdGFXb3JrZmxvd0J5VGFzaykgcmV0dXJuIFtdO1xuICAgICAgICBjb25zdCB3b3JrZmxvd0NvZGVzID0gW107XG4gICAgICAgIGRhdGFXb3JrZmxvd0J5VGFzay5mb3JFYWNoKGNhdUhpbmggPT4ge1xuICAgICAgICAgICAgaWYgKCFjYXVIaW5oLndvcmtmbG93Q29kZXMpIHJldHVybjtcbiAgICAgICAgICAgIGNhdUhpbmgud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpLmZvckVhY2god29ya2Zsb3dDb2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAod29ya2Zsb3dDb2Rlcy5pbmRleE9mKHdvcmtmbG93Q29kZSkgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgd29ya2Zsb3dDb2Rlcy5wdXNoKHdvcmtmbG93Q29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gd29ya2Zsb3dDb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGVuZENvbFdvcmtmbG93U3RhdHVzKHdvcmtmbG93czogV2ZJdGVtW10pIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFt7XG4gICAgICAgICAgICBpZDogbnVsbCxcbiAgICAgICAgICAgIHJhd1RlbjogJ0NoxrBhIGLhuq90IMSR4bqndScsXG4gICAgICAgICAgICB0ZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxuICAgICAgICAgICAgbWFMb3dlcjogJycsXG4gICAgICAgICAgICB0ZW5Mb3dlcjogJ2NoxrBhIGLhuq90IMSR4bqndSdcbiAgICAgICAgfV07XG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgd29ya2Zsb3dzLmZvckVhY2god29ya2Zsb3cgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtmbG93LmRhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBtYWNoaW5lLmNvZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdUZW46IG1hY2hpbmUubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWFMb3dlcjogbWFjaGluZS5jb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW5Mb3dlcjogbWFjaGluZS5uYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhU291cmNlLnNvbWUoeCA9PiB4LnRlbkxvd2VyID09IGl0ZW1TdGF0dXMudGVuTG93ZXIgJiYgeC5tYUxvd2VyID09IGl0ZW1TdGF0dXMubWFMb3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaChpdGVtU3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2FtZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2FtZU5hbWUudGVuID0gYCR7aXRlbVNhbWVOYW1lLnJhd1Rlbn0gKCR7aXRlbVNhbWVOYW1lLmlkfSlgO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxuICAgICAgICAgICAgZGF0YVR5cGU6ICd0cmFuZ1RoYWlWNScsXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXG4gICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcbiAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcbiAgICAgICAgICAgIGZpZWxkVHJlZTogJ3BhcmVudElkJyxcbiAgICAgICAgICAgIGRhdGFTb3VyY2UsXG4gICAgICAgICAgICBpbmNsdWRlU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiB0aGlzLnNldHRpbmcuYWxsb3dGaWx0ZXJXb3JrZmxvd0NvbHVtblxuICAgICAgICB9KTtcbiAgICAgICAgLy8gTuG6v3UgY2jGsGEgY8OzIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYgdGjDrCBiw6puIGNydWQtbGlzdCBz4bq9IGFkZCBj4buZdCBuw6B5IHNhdVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZikge1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KG5ldyBSZWZGaWVsZCh7XG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcbiAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cbiAgICAgICAgfTtcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XG4gICAgICAgICAgICBjb25zdCBjb2xGb3JBZG1pbiA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZmFsc2UsXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW5jbHVkZVNlbGVjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0hpc3RvcnlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XG4gICAgICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgLy8gI2VuZHJlZ2lvblxuXG4gICAgLy8gI3JlZ2lvbiBjcnVkXG4gICAgcHJpdmF0ZSBsb2FkSXRlbUZyb21RdWVyeVBhcmFtKCkge1xuICAgICAgICBpZiAodGhpcy5sb2FkRGV0YWlsRnJvbVF1ZXJ5UGFyYW0gPT09IHVuZGVmaW5lZCB8fCB0aGlzLmxvYWREZXRhaWxGcm9tUXVlcnlQYXJhbSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgbGV0IGlkSW5RdWVyeVN0cmluZyA9IG51bGw7XG4gICAgICAgICAgICBsZXQgcGlkID0gbnVsbDsgLy8gcGVybWlzc2lvbiBJZCDEkcaw4bujYyBuZ8aw4budaSBraMOhYyBzaGFyZVxuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90XG4gICAgICAgICAgICAgICAgJiYgdGhpcy5fYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbXNcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlkSW5RdWVyeVN0cmluZyA9IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmlkIHx8IHRoaXMuX2FjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmVudGl0eUtleTtcbiAgICAgICAgICAgICAgICBwaWQgPSB0aGlzLl9hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5waWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGlkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGV0YWlsUGlkKHBpZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpZEluUXVlcnlTdHJpbmcpIHtcbiAgICAgICAgICAgICAgICAvLyBnZXQgZGV0YWlsIGRhdGFcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0RGV0YWlsV2l0aFBlcm1pc3Npb24oaWRJblF1ZXJ5U3RyaW5nKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBj4bqnbiB4ZW0gY2hpIHRp4bq/dCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLkVESVQpID09IFBlcm1pc3Npb25CYXNlLkVESVRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5SRUFEKSA9PSBQZXJtaXNzaW9uQmFzZS5SRUFEXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lZGl0KHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIHhlbSBi4bqjbiBnaGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY+G6p24geGVtIGNoaSB0aeG6v3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWREZXRhaWxQaWQocGlkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldERldGFpbEJ5UGlkKHBpZClcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgocmVzLmRhdGEuYmFzZVBlcm1pc3Npb24gJiBQZXJtaXNzaW9uQmFzZS5FRElUKSA9PSBQZXJtaXNzaW9uQmFzZS5FRElUXG4gICAgICAgICAgICAgICAgICAgIHx8IChyZXMuZGF0YS5iYXNlUGVybWlzc2lvbiAmIFBlcm1pc3Npb25CYXNlLlJFQUQpID09IFBlcm1pc3Npb25CYXNlLlJFQURcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEucGlkID0gcGlkO1xuICAgICAgICAgICAgICAgICAgICByZXMuZGF0YS5iYXNlUGVybWlzc2lvbkJ5UGlkID0gcmVzLmRhdGEuYmFzZVBlcm1pc3Npb247XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VkaXQocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqhbiBraMO0bmcgY8OzIHF1eeG7gW4geGVtIGLhuqNuIGdoaScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKS5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UubG9nRXJyb3IoJ2Vycm9yIG9uIGdldCBkZXRhaWwgZnJvbSBxdWVyeXN0cmluZycsIGVycik7XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgYuG6o24gZ2hpIGPhuqduIHhlbSBjaGkgdGnhur90Jyk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBfYWRkKGV2dCkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVBZGQoKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlQWRkKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBiZWZvcmVBZGQoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgX3ZpZXcocm93RGF0YSkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dFZGl0TGlua09ubHlWaWV3KSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3T25seShyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VkaXQocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhc3luYyBfdmlld09ubHkocm93RGF0YSkge1xuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcbiAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVWaWV3KCk7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIGJlZm9yZVZpZXcoKSB7XG4gICAgfVxuXG4gICAgYXN5bmMgbW9kaWZ5Vmlld01vZGVsKHJvd0RhdGE6IGFueSkge1xuICAgIH1cblxuICAgIGFzeW5jIF9jb3B5TGlua011bHRpcGxlKCkge1xuICAgICAgICBjb25zdCBwYXRocyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBwYXRocy5wdXNoKGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCBpdGVtKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5jb3B5QnlTdG9yYWdlKHBhdGhzLmpvaW4oJ1xcclxcbicpKTtcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dTdWNjZXNzKCfEkMOjIHNhbyBjaMOpcCBjw6FjIGxpw6puIGvhur90IMSRw6MgY2jhu41uJyk7XG4gICAgfVxuXG4gICAgYXN5bmMgX2NvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBwYXRoID0gYXdhaXQgdGhpcy5nZXRDb3B5UGF0aCh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLmNvcHlCeVN0b3JhZ2UocGF0aCk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93U3VjY2VzcygnxJDDoyBzYW8gY2jDqXAgbGnDqm4ga+G6v3QnKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xuICAgICAgICBjb25zdCByZXN1bHRWYWxpZGF0ZSA9IGF3YWl0IHRoaXMudmFsaWRhdGVFZGl0KHJvd0RhdGEpO1xuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmxhc2hTaG93ID0gcm93RGF0YVtLZXlGbGFzaFNob3ddO1xuICAgICAgICBkZWxldGUgcm93RGF0YVtLZXlGbGFzaFNob3ddO1xuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkVESVQ7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBDaGkgdGnhur90ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IGZsYXNoU2hvdyA/ICdoaWRlJyA6IG51bGw7XG4gICAgICAgIHRoaXMuc2NvcGVEYXRhRWRpdCA9IHNjb3BlRGF0YUVkaXQ7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlFZGl0TW9kZWwodGhpcy5mb3JtTW9kZWwuZGF0YSwgcm93RGF0YSk7XG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XSA9IGZsYXNoU2hvdztcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgdmFsaWRhdGVFZGl0KHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcbiAgICB9XG5cbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwobW9kZWxFZGl0OiBhbnksIHJvd0RhdGE6IGFueSkge1xuICAgIH1cblxuICAgIHByaXZhdGUgY2xvbmVEYXRhKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBpZDogcm93RGF0YS5waWQsXG4gICAgICAgICAgICBiYXNlUGVybWlzc2lvbkJ5UGlkOiByb3dEYXRhLmJhc2VQZXJtaXNzaW9uQnlQaWQsXG4gICAgICAgICAgICBpZDogcm93RGF0YVt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSxcbiAgICAgICAgICAgIGJhc2VQZXJtaXNzaW9uOiByb3dEYXRhLmJhc2VQZXJtaXNzaW9uXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZShyb3dEYXRhLmlkLCB0aGlzLmRlbGV0ZVBsdXNVcmwpO1xuICAgIH1cblxuICAgIGFzeW5jIHZhbGlkYXRlRGVsZXRlKGl0ZW1zKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIF9kZWxldGUocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZURlbGV0ZShbcm93RGF0YV0pO1xuICAgICAgICBpZiAoIXJlc3VsdFZhbGlkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmVmb3JlUmVsb2FkQWZ0ZXJEZWxldGUoW3Jvd0RhdGEuaWRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dWZXJzaW9uQnV0dG9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcbiAgICAgICAgY29uc3QgaWRzID0gaXRlbXMubWFwKHggPT4geC5pZCkuam9pbignLCcpO1xuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZU1hbnkoaWRzLCB0aGlzLmRlbGV0ZU1hbnlQbHVzVXJsKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZGVsZXRlTXVsdGlwbGUoaXRlbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlRGVsZXRlKGl0ZW1zKTtcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlQ29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHjDs2EgYuG6o24gZ2hpIMSRw6MgY2jhu41uIChWw6AgY8OhYyBi4bqjbiBnaGkgY29uIHTGsMahbmcg4bupbmcpPycpLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmJlZm9yZVJlbG9hZEFmdGVyRGVsZXRlKGl0ZW1zLm1hcChxID0+IHEuaWQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgYmVmb3JlUmVsb2FkQWZ0ZXJEZWxldGUoaWRzOiBzdHJpbmdbXSkge1xuICAgIH1cblxuICAgIG9uQmVmb3JlQ2FuY2VsKCkge1xuICAgIH1cblxuICAgIF9oYW5kbGVTYXZlZCgpIHtcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcbiAgICB9XG5cbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xuICAgICAgICB0aGlzLm9uQmVmb3JlQ2FuY2VsKCk7XG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyAjZW5kcmVnaW9uXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc3BhY2VkLWNvbW1lbnRcbiAgICAvLyNlbmRyZWdpb25cblxuICAgIGRlZXBDbG9uZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbiAgICB9XG5cbiAgICBhc3luYyBfZXhwb3J0QWxsRGF0YShldmVudCkge1xuICAgICAgICBjb25zdCBsc3REYXRhID0gKGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREYXRhQ3VzdG9tUm91dGUodGhpcy5wbHVzVXJsLCB0aGlzLmN1cnJlbnRHcmlkSW5mby5maWx0ZXJzLCB0aGlzLmN1cnJlbnRHcmlkSW5mby5maWVsZHMsIHRoaXMuY3VycmVudEdyaWRJbmZvLnNvcnRzLCAtMSwgMSkpLmRhdGEgPz8gW107XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5zZXR0aW5nLnRpdGxlID8gdGhpcy5zZXR0aW5nLnRpdGxlIDogYERhbmggc8OhY2ggJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpfWA7XG4gICAgICAgIGNvbnN0IGxzdFZpc2libGVGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2xzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS52aXNpYmxlICYmIGl0ZW0uZGF0YVR5cGUgIT09ICd0cmFuZ1RoYWlWNScpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5maWVsZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRXhwb3J0QWxsRGF0YShsc3REYXRhLCBsc3RWaXNpYmxlRmllbGQpO1xuICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhSW5EYXRhc291cmNlKGxzdERhdGEsIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYpO1xuXG4gICAgICAgIGNvbnN0IGxzdEhlYWRlciA9IFsnVFQnXTtcbiAgICAgICAgY29uc3QgZmllbGRTY2hlbWFNYXAgPSBuZXcgTWFwKFxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLm1vZGVsU2NoZW1hcy5tYXAoc2NoZW1hID0+IFtzY2hlbWEuZmllbGQsIHNjaGVtYS5uYW1lXSlcbiAgICAgICAgKTtcbiAgICAgICAgbHN0VmlzaWJsZUZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hTmFtZSA9IGZpZWxkU2NoZW1hTWFwLmdldChmaWVsZCkgfHwgZmllbGRTY2hlbWFNYXAuZ2V0KGZpZWxkLnNsaWNlKDMpKSB8fCAnJztcbiAgICAgICAgICAgIGxzdEhlYWRlci5wdXNoKHNjaGVtYU5hbWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcHJpbnREYXRhID0gW1xuICAgICAgICAgICAgbHN0SGVhZGVyLFxuICAgICAgICAgICAgLi4ubHN0RGF0YS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgcm93ID0gW2luZGV4ICsgMV07XG4gICAgICAgICAgICAgICAgbHN0VmlzaWJsZUZpZWxkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGl0ZW1bZmllbGRdID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtmaWVsZF0gPSBpdGVtW2ZpZWxkXSA/ICdDw7MnIDogJ0tow7RuZyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcm93LnB1c2goaXRlbVtmaWVsZF0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByb3c7XG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2Uub2JqZWN0VG9FeGNlbChwcmludERhdGEsIGZpbGVOYW1lLCAxKTtcbiAgICB9XG5cbiAgICBhc3luYyBiZWZvcmVFeHBvcnRBbGxEYXRhKGRhdGFTb3VyY2UsIGxzdFZpc2libGVGaWVsZCkge1xuICAgIH1cblxuXG4gICAgYXN5bmMgX2V4cG9ydEFsbERhdGFXaXRoVGVtcGxhdGVDb2RlKHRlbXBsYXRlQ29kZTogc3RyaW5nLCBpc1ZpZXdPbmxpbmU6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBsc3RSYXdEYXRhID0gKGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXREYXRhQ3VzdG9tUm91dGUodGhpcy5wbHVzVXJsLCB0aGlzLmN1cnJlbnRHcmlkSW5mby5maWx0ZXJzLCB0aGlzLmN1cnJlbnRHcmlkSW5mby5maWVsZHMsIHRoaXMuY3VycmVudEdyaWRJbmZvLnNvcnRzLCAtMSwgMSkpLmRhdGEgPz8gW107XG4gICAgICAgIGNvbnN0IGxzdFZpc2libGVGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2xzXG4gICAgICAgICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbS52aXNpYmxlICYmIGl0ZW0uZGF0YVR5cGUgIT09ICd0cmFuZ1RoYWlWNScpXG4gICAgICAgICAgICAubWFwKGl0ZW0gPT4gaXRlbS5maWVsZCk7XG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRXhwb3J0QWxsRGF0YShsc3RSYXdEYXRhLCBsc3RWaXNpYmxlRmllbGQpO1xuICAgICAgICBhd2FpdCB0aGlzLl9jcnVkU2VydmljZS5nZXRSZWZEYXRhSW5EYXRhc291cmNlKGxzdFJhd0RhdGEsIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYpO1xuICAgICAgICBjb25zdCBsc3REYXRhID0gbHN0UmF3RGF0YS5tYXAocm93RGF0YSA9PiB0aGlzLm1vZGlmeVJvd0RhdGFGb3JFeHBvcnQocm93RGF0YSkpO1xuICAgICAgICBjb25zdCBkYXRhID0ge1xuICAgICAgICAgICAgbHN0RGF0YTogbHN0RGF0YVxuICAgICAgICB9O1xuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeURhdGFGb3JFeHBvcnRBbGwoZGF0YSk7XG4gICAgICAgIGNvbnN0IHNoZWV0ID0gbmV3IEV4cG9ydEl0ZW0oe1xuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxTaGVldCxcbiAgICAgICAgICAgIHRlbXBsYXRlQ29kZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuc3RyaW5naWZ5RGF0YShkYXRhKSxcbiAgICAgICAgICAgIG5hbWU6ICdTaGVldDEnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbEZpbGUsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLnNldHRpbmcudGl0bGUgPyB0aGlzLnNldHRpbmcudGl0bGUgOiBgRGFuaCBzw6FjaCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCl9YFxuICAgICAgICB9KTtcbiAgICAgICAgZmlsZS5jaGlsZHJlbiA9IFtzaGVldF07XG4gICAgICAgIGNvbnN0IF90ZW1wbGF0ZUluc3RhbmNlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZUluc3RhbmNlU2VydmljZSk7XG4gICAgICAgIHJldHVybiBfdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UuZXhwb3J0Tm9ybWFsKGZpbGUpO1xuICAgIH1cblxuICAgIGFzeW5jIG1vZGlmeURhdGFGb3JFeHBvcnRBbGwoZGF0YTogYW55KSB7XG5cbiAgICB9XG4gICAgbW9kaWZ5Um93RGF0YUZvckV4cG9ydChyb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiByb3dEYXRhO1xuICAgIH1cbn1cbiJdfQ==
|