@piserve-tech/form-submission 1.3.201 → 1.3.202
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/form-submission/submit-form/submit-form.component.mjs +2 -2
- package/esm2022/question/inline-multiple-subform/inline-multiple-subform.component.mjs +2 -2
- package/esm2022/services/aggregate.service.mjs +11 -2
- package/fesm2022/piserve-tech-form-submission.mjs +13 -4
- package/fesm2022/piserve-tech-form-submission.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -191,7 +191,7 @@ export class SubmitFormComponent {
|
|
|
191
191
|
this.nextPage = this.pageDetails[1];
|
|
192
192
|
}
|
|
193
193
|
this.webhookPayloadArray;
|
|
194
|
-
this.webhookPayloadArray = response?.result?.webhooks
|
|
194
|
+
this.webhookPayloadArray = response?.result?.webhooks?.map((w) => ({
|
|
195
195
|
id: w.id,
|
|
196
196
|
...this.extractGroupedWebhookData([w])
|
|
197
197
|
}));
|
|
@@ -1132,4 +1132,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
1132
1132
|
type: ViewChild,
|
|
1133
1133
|
args: [NavigationTabsComponent]
|
|
1134
1134
|
}] } });
|
|
1135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWtDdkYsTUFBTSxPQUFPLG1CQUFtQjtJQWtFOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQztRQVQzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFB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S2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs2WEFNbEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRTZCLEtBQUs7c0JBQXhDLFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcHBlciBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3B1YmxpY0Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNhcHRjaGEuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tdGFicy9uYXZpZ2F0aW9uLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcXVlc3Rpb25JZDogc3RyaW5nO1xuICBhbnN3ZXI6IGFueTtcbiAgYW5zd2VySWQ/OiBzdHJpbmc7XG4gIGRlbGV0ZUZpbGVzPzogc3RyaW5nW107XG4gIGZpZWxkcz86IGFueTtcbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb24ge1xuICBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xufVxuXG5pbnRlcmZhY2UgUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciB7XG4gIHBhcmVudElkOiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xuICBmb3JtczogRm9ybVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2tpcE1hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgYXBpQ2FsbGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50UGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoTmF2aWdhdGlvblRhYnNDb21wb25lbnQpIGNoaWxkITogTmF2aWdhdGlvblRhYnNDb21wb25lbnQ7XG5cbiAgbmFtZTogc3RyaW5nID0gJyc7XG4gIHNhdmVBdXRvbWF0aWNhbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgY3VzdG9taXplRm9udDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb250RmFtaWx5OiBzdHJpbmcgPSAnJztcbiAgZm9udFNpemU6IG51bWJlciA9IDA7XG4gIGVuYWJsZURhdGFFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsZUZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uTnVtYmVyaW5nOiBzdHJpbmcgPSAnJztcbiAgZW5hYmxlR29vZ2xlUmVjYXB0Y2hhOiBib29sZWFuID0gZmFsc2U7XG4gIGdvb2dsZVJlY2FwdGNoYUtleTogc3RyaW5nID0gJyc7XG4gIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogc3RyaW5nID0gJyc7XG4gIG5hdmlnYXRpb246IHN0cmluZyA9ICcnO1xuICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdlczogYW55ID0gW107XG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByZXZpb3VzUGFnZTogYW55ID0ge307XG4gIGN1cnJlbnRQYWdlOiBhbnkgPSB7fTtcbiAgbmV4dFBhZ2U6IGFueSA9IHt9O1xuICBsYXN0VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uQW5zd2VyczogUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciA9IHtcbiAgICBwYXJlbnRJZDogJycsXG4gICAgYW5zd2VyczogW10sXG4gICAgZm9ybXM6IFtdLFxuICB9O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSB9W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwYWdlRGV0YWlsczogYW55ID0gW107XG4gIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG4gIHJvd1NldDogbnVtYmVyID0gMDtcbiAgcm93U2V0Q291bnQ6IFtudW1iZXJdID0gWzBdO1xuICByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICAgbWF4UmV0cmllczpudW1iZXIgPSA1O1xuICBlbGlnaWJsZUZvclN1Ym1pc3Npb246IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9IHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgbWVzc2FnZTogJycsXG4gIH07XG4gIHdlYmhvb2tQYXlsb2FkQXJyYXk6IGFueVtdID0gW107XG4gIGluVmFsaWRRdWVzdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICB2aXNpdGVkUm93czogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGFsbEVsZW1lbnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lcjogYW55O1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZyA9ICcnO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2FwdGNoYVNlcnZpY2U6IFJlY2FwdGNoYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50VHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRpb25TZXJ2aWNlOiBGb3JtVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVTZXJ2aWNlOkFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWlzc2lvbiA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydzdWJtaXNzaW9uJ107XG4gICAgdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQgPSB0aGlzLnN1Ym1pc3Npb24/LmlkO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gdGhpcy5zdWJtaXNzaW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbnMgPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/LlsncGFyZW50UXVlc3Rpb25zJ107XG4gICAgdGhpcy5kYXRhU2VydmljZS5zZXRQYXJlbnRRdWVzdGlvbnModGhpcy5wYXJlbnRRdWVzdGlvbnMpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgdGhpcy52aXNpdGVkUm93cy5jbGVhcigpO1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xuICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZ2dyZWdhdGVTZXJ2aWNlLmNsZWFyQWxsKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuYWNjZXB0ZWRMYW5ndWFnZSA9IGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZWRpdCkgdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZWNhcHRjaGFUb2tlbigpO1xuICAgICAgdGhpcy5yZWNhcHRjaGFUb2tlbiA9IHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLFxuICAgICAgICBlcnJvci5lcnJvci5tZXNzYWdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRGb250KGZvbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb250UGF0aCA9IGBhc3NldHMvZm9udHMvJHtmb250TmFtZX0ud29mZjJgOyAvLyBBZGp1c3QgZXh0ZW5zaW9uIGFzIHBlciB5b3VyIGZvbnQgZmlsZVxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfSc7XG4gICAgICAgIHNyYzogdXJsKCcke2ZvbnRQYXRofScpIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBnZXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgMSwwLHRydWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzLm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG5cblxuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0U3VibWl0dGVkRm9ybURhdGEoKSB7XG4gICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgLmdldFN1Ym1pdHRlZEZvcm0odGhpcy5tb2R1bGVOYW1lLCB0aGlzLnN1Ym1pc3Npb25JZClcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgICAgIHRoaXMucXVlc3Rpb24gPSBtYXBwZXIubWFwUHVibGljRm9ybVRvTW9kZWwocmVzcG9uc2UpO1xuICAgICAgICB0aGlzLmFzc2lnblF1ZXN0aW9uUHJvcGVydGllcyh0aGlzLnF1ZXN0aW9uKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZURldGFpbHMpIHtcbiAgICAgICAgICB0aGlzLnBhZ2VEZXRhaWxzID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VEZXRhaWxzO1xuICAgICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzWzFdO1xuICAgICAgICB9XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5XG4gICAgICAgICAgdGhpcy53ZWJob29rUGF5bG9hZEFycmF5ID0gcmVzcG9uc2U/LnJlc3VsdD8ud2ViaG9va3M/Lm1hcCgodzphbnkpID0+ICh7XG4gICAgICAgICAgaWQ6IHcuaWQsXG4gICAgICAgICAgIC4uLnRoaXMuZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YShbd10pXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIHRoaXMucm93U2V0Q291bnRbMF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlc1tpXSkge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpXSA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldFVwRm9udEZhbWlseShyZXNwb25zZSk7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICAgIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBzZXRVcEZvbnRGYW1pbHkocmVzcG9uc2U6IGFueSkge1xuICAgIC8vc2V0IGZvbnQgZmFtaWx5IGFuZCBmb250IHNpemVcbiAgICBpZiAocmVzcG9uc2UucmVzdWx0Py5tb2R1bGVDb25maWd1cmF0aW9uPy5jdXN0b21pemVGb250KSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udEZhbWlseTtcbiAgICAgIHRoaXMuZm9udFNpemUgPSByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZm9udFNpemU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9udEZhbWlseSA9ICdQb3BwaW5zJztcbiAgICAgIHRoaXMuZm9udFNpemUgPSAxODtcbiAgICB9XG4gICAgdGhpcy5sb2FkRm9udCh0aGlzLmZvbnRGYW1pbHkpO1xuICAgIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcbiAgICAgICctLWxpYnJhcnktZm9udC1mYW1pbHknLFxuICAgICAgdGhpcy5mb250RmFtaWx5XG4gICAgKTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtc2l6ZScsXG4gICAgICB0aGlzLmZvbnRTaXplICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBhc3NpZ25RdWVzdGlvblByb3BlcnRpZXMocXVlc3Rpb246IFB1YmxpY0Zvcm0pIHtcbiAgICB0aGlzLm5hbWUgPSBxdWVzdGlvbi5uYW1lO1xuICAgIHRoaXMucGFnZXMgPSBxdWVzdGlvbi5wYWdlcztcbiAgICBpZiAodGhpcy5wYXJlbnRRdWVzdGlvbnMpIHtcbiAgICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gcXVlc3Rpb24/LnF1ZXN0aW9uQW5zd2VycztcbiAgICAgIHRoaXMucGFyZW50U3VibWlzc2lvbklkID0gcXVlc3Rpb24/LnBhcmVudElkO1xuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1swXTtcbiAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlc1sxXTtcbiAgICB0aGlzLnNhdmVBdXRvbWF0aWNhbGx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUF1dG9tYXRpY2FsbHk7XG4gICAgdGhpcy5zYXZlSW50ZXJ2YWwgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5zYXZlSW50ZXJ2YWw7XG4gICAgdGhpcy5jdXN0b21pemVGb250ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uY3VzdG9taXplRm9udDtcbiAgICB0aGlzLmZvbnRGYW1pbHkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250RmFtaWx5O1xuICAgIHRoaXMuZm9udFNpemUgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5mb250U2l6ZTtcbiAgICB0aGlzLmVuYWJsZURhdGFFeHBvcnQgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVEYXRhRXhwb3J0O1xuICAgIHRoaXMuZmlsZUZvcm1hdHMgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5maWxlRm9ybWF0cztcbiAgICB0aGlzLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nO1xuICAgIHRoaXMucXVlc3Rpb25OdW1iZXJpbmcgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5xdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVHb29nbGVSZWNhcHRjaGE7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFLZXkgPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5nb29nbGVSZWNhcHRjaGFLZXk7XG4gICAgdGhpcy5nb29nbGVSZWNhcHRjaGFTZWNyZXQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0O1xuICAgIHRoaXMubmF2aWdhdGlvbiA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLm5hdmlnYXRpb247XG4gICAgdGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDtcbiAgICB0aGlzLmFwaUNhbGxlZC5lbWl0KHRydWUpO1xuICB9XG5cbiAgbmF2aWdhdGVUb05leHRQYWdlKCkge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuY3VycmVudFBhZ2VJbmRleCArIDE7XG4gICAgaWYgKG5leHRJbmRleCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgaWYodGhpcy5wYWdlc1tuZXh0SW5kZXhdLmxlbmd0aCAhPSAwKXtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1tuZXh0SW5kZXggKyAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbbmV4dEluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXg9bmV4dEluZGV4O1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICB0aGlzLnNldEN1cnJlbnRQYWdlKG5leHRJbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICB9XG4gICAgfVxuICAgICAgdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKSB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCA+IDApIHtcbiAgICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQYWdlRGF0YSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpO1xuICAgICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleC0tO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCAtIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBjaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpOiB2b2lkIHtcbiAgICB0aGlzLmVsaWdpYmxlRm9yU3VibWlzc2lvbiA9IHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBzZXRDdXJyZW50UGFnZShpbmRleDogbnVtYmVyKSB7XG4gICAgaWYgKGluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5wYWdlc1tpbmRleF0gfHwgdGhpcy5wYWdlc1tpbmRleF0ubGVuZ3RoICE9IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnBhZ2VOdW1iZXIgPSBpbmRleCArIDE7XG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgdGhpcy5wYWdlTnVtYmVyLFxuICAgICAgICAgIHRoaXMucm93U2V0XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXNwb25zZT8ucmVzdWx0Py5wYWdlcykge1xuICAgICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0gPSByZXNwb25zZS5yZXN1bHQucGFnZXNbMF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFF1ZXN0aW9ucyh0aGlzLm1vZHVsZU5hbWUsIHRoaXMucGFnZU51bWJlciwgdGhpcy5yb3dTZXQsIHRydWUpXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkKSB7XG4gICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICBjb25zdCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSk7XG4gICAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBsb2FkTW9yZURhdGEoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGxldCByb3dDb3VudExpbWl0ID0gdGhpcy5yb3dTZXRDb3VudFtpbmRleF07XG4gICAgbGV0IGkgPSAwO1xuICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBsZXQgcm93Q291bnQgPWkvMjA7XG4gICAgcm93Q291bnQgPSBNYXRoLmNlaWwocm93Q291bnQpO1xuXG4gaWYodGhpcy52aXNpdGVkUm93cy5oYXMoaW5kZXgpKSB7XG4gICBpZih0aGlzLnZpc2l0ZWRSb3dzLmdldChpbmRleCk9PT0gcm93Q291bnQpe1xuICAgIHJldHVybjtcbiAgIH1cbiB9XG5cblxuICAgIGlmIChyb3dDb3VudCArIDEgPiByb3dDb3VudExpbWl0KSB7XG4gICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMudmlzaXRlZFJvd3Muc2V0KGluZGV4LCByb3dDb3VudCk7XG5cbiAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRTdWJtaXR0ZWRGb3JtKFxuICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JZCxcbiAgICAgICAgICBpbmRleCArIDEsXG4gICAgICAgICAgcm93Q291bnRcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3Um93cyA9IHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzWzBdPy5yb3dzID8/IFtdO1xuICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdLnJvd3MgPSBbXG4gICAgICAgICAgICAuLi4odGhpcy5wYWdlc1tpbmRleF0/LnJvd3MgPz8gW10pLFxuICAgICAgICAgICAgLi4ubmV3Um93cyxcbiAgICAgICAgICBdO1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW2luZGV4XTtcbiAgICAgICAgICB0aGlzLnJvd1NldENvdW50W2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgICB0aGlzLmNoZWNrU3VibWlzc2lvbkVsaWdpYmlsaXR5KCk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lLCBpbmRleCArIDEsIHJvd0NvdW50IClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzID0gW1xuICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKTtcbiAgfVxuXG4gIGdlbmVyYXRlUXVlc3Rpb25BbnN3ZXJzKCkge1xuICAgIGNvbnN0IGV4dHJhY3RRdWVzdGlvbnMgPSAoXG4gICAgICBmb3JtRWxlbWVudHM6IGFueVtdLFxuICAgICAgcGFyZW50Rm9ybUlkOiBzdHJpbmcgfCBudWxsID0gbnVsbCxcbiAgICAgIGlzSW5TdWJGb3JtOiBib29sZWFuID0gZmFsc2UsXG4gICAgICBzdWJGb3JtSW5kZXg6IG51bWJlciA9IDBcbiAgICApOiB7IGFuc3dlcnM6IEFuc3dlcltdOyBmb3JtczogRm9ybVtdIH0gPT4ge1xuICAgICAgY29uc3QgcXVlc3Rpb25zOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZm9ybXM6IEZvcm1bXSA9IFtdO1xuXG4gICAgICBmb3JtRWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgbGV0IGJhc2VRdWVzdGlvbjogYW55O1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBpc0luU3ViRm9ybVxuICAgICAgICAgICAgICAgID8gYCR7cGFyZW50Rm9ybUlkfV8ke3N1YkZvcm1JbmRleH1fJHtlbGVtZW50LmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgIDogZWxlbWVudC5lbGVtZW50LmlkO1xuICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgZmlsZTogZWxlbWVudC5lbGVtZW50LmFuc3dlcixcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZWxlbWVudC5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICBhbnN3ZXI6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgIC4uLmJhc2VRdWVzdGlvbixcbiAgICAgICAgICAgICAgYW5zd2VySWQ6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXJJZCB8fCAnJyxcbiAgICAgICAgICAgICAgZGVsZXRlRmlsZXM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgcm93IG9mIGxvZ2ljLnJvd3MpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRGb3JtSWQsXG4gICAgICAgICAgICAgICAgICAgIGlzSW5TdWJGb3JtLFxuICAgICAgICAgICAgICAgICAgICBzdWJGb3JtSW5kZXhcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nKSB7XG4gICAgICAgICAgY29uc3Qgc3ViZm9ybUlkID0gZWxlbWVudC5lbGVtZW50LmlkO1xuICAgICAgICAgIGNvbnN0IHN1Ym1pc3Npb25JZCA9IGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9uSWQ7XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgICAgICBsZXQgYWxsQW5zd2VyczogQW5zd2VyW10gPSBbXTtcblxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXh0cmFjdGVkID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSxcbiAgICAgICAgICAgICAgICBmb3Jtcy5sZW5ndGhcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZXh0cmFjdGVkLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyKSA9PiB7XG4gICAgICAgICAgICAgICAgYWxsQW5zd2Vycy5wdXNoKHsgLi4uYW5zd2VyIH0pO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBzdWJmb3JtOiBGb3JtID0ge1xuICAgICAgICAgICAgICBmb3JtSWQ6IHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgZGVsZXRlZFN1Ym1pc3Npb25zOiBbXSxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICBzdWJtaXNzaW9uSWQ6IHN1Ym1pc3Npb25JZCxcbiAgICAgICAgICAgICAgICAgIGFuc3dlcnM6IGFsbEFuc3dlcnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGZvcm1zLnB1c2goc3ViZm9ybSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybUFuc3dlcnM6IEFuc3dlcltdID0gW107XG4gICAgICAgICAgICBsZXQgc3ViZm9ybVF1ZXN0aW9uczogYW55ID0geyBhbnN3ZXJzOiBbXSB9O1xuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgc3ViZm9ybVF1ZXN0aW9ucyA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nU3ViZm9ybSA9IGZvcm1zLmZpbmQoXG4gICAgICAgICAgICAgIChmb3JtKSA9PiBmb3JtLmZvcm1JZCA9PT0gc3ViZm9ybUlkXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5lbmFibGVJbmxpbmVFZGl0aW5nICYmIGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9ucykge1xuICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMgPSB0aGlzLmNsZWFyRW1wdHlTdWJtaXNzaW9ucyhcbiAgICAgICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudD8uc3VibWlzc2lvbnM/LmZvckVhY2goXG4gICAgICAgICAgICAgIChzdWJtaXNzaW9uOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBzdWJtaXNzaW9uLmFuc3dlcnMuZm9yRWFjaCgoYW5zd2VyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuaHRtbENvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhbnN3ZXIuZmlsZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXN0aW9uSWQgPSBgJHtzdWJmb3JtSWR9XyR7aW5kZXh9XyR7YW5zd2VyLnF1ZXN0aW9uSWR9YDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGFuc3dlci5maWxlcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbnN3ZXIuZmlsZXM7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmF0dGFjaG1lbnRzO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybTogRm9ybSA9IHtcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTdWJtaXNzaW9uczogZWxlbWVudC5lbGVtZW50LmRlbGV0ZWRTdWJtaXNzaW9ucyxcbiAgICAgICAgICAgICAgc3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5zdWJtaXNzaW9ucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgUXVlc3Rpb24gR3JvdXAgYnkgaXRlcmF0aW5nIHRocm91Z2ggcm93c1xuICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzphbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOmFueSkgPT4ge1xuXG4gICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgICAgICAgbGV0IGJhc2VRdWVzdGlvbjogYW55O1xuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50Py5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6ICcnLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7Z3JpZEl0ZW0uZWxlbWVudC5pZH1gXG4gICAgICAgICAgICAgICAgICAgICAgOiBncmlkSXRlbS5lbGVtZW50LmlkO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IHF1ZXN0aW9uSWQsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZTogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGdyaWRJdGVtLmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcjogZ3JpZEl0ZW0uZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0KSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLmJhc2VRdWVzdGlvbixcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VySWQ6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VySWQgfHwgJycsXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUZpbGVzOiBncmlkSXRlbS5lbGVtZW50LmRlbGV0ZUZpbGVzIHx8IFtdLFxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKGJhc2VRdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGdyaWRJdGVtLmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9ybUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBpc0luU3ViRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViRm9ybUluZGV4XG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goLi4ucmVzdWx0LmFuc3dlcnMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnTVVMVElGSUVMRCcpIHtcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZ3JpZEl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGdyaWRJdGVtLmVsZW1lbnQuaWQsXG4gICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyIHx8ICcnLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3JtcyB9O1xuICAgIH07XG5cbiAgICBjb25zdCBwcm9jZXNzUGFnZXMgPSAoXG4gICAgICBwYWdlczogYW55W11cbiAgICApOiB7IGFuc3dlcnM6IEFuc3dlcltdOyBmb3JtczogRm9ybVtdIH0gPT4ge1xuICAgICAgY29uc3QgcXVlc3Rpb25zOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgY29uc3QgZm9ybXM6IEZvcm1bXSA9IFtdO1xuXG4gICAgICBwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICAgIHBhZ2Uucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGV4dHJhY3RRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICBmb3Jtcy5wdXNoKC4uLnJlc3VsdC5mb3Jtcyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7IGFuc3dlcnM6IHF1ZXN0aW9ucywgZm9ybXM6IGZvcm1zIH07XG4gICAgfTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IHByb2Nlc3NQYWdlcyh0aGlzLnBhZ2VzKTtcbiAgICB0aGlzLnF1ZXN0aW9uQW5zd2VycyA9IHtcbiAgICAgIHBhcmVudElkOiAnJyxcbiAgICAgIGFuc3dlcnM6IHJlc3VsdC5hbnN3ZXJzLFxuICAgICAgZm9ybXM6IHJlc3VsdC5mb3JtcyxcbiAgICB9O1xuICB9XG5cbiAgY2xlYXJFbXB0eVN1Ym1pc3Npb25zKHN1Ym1pc3Npb25zOiBhbnkpIHtcbiAgICBjb25zdCBub25FbXB0eVN1Ym1pc3Npb25zOiBTdWJtaXNzaW9uW10gPSBbXTtcbiAgICBjb25zdCBlbXB0eVN1Ym1pc3Npb25JZHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBzdWJtaXNzaW9ucy5mb3JFYWNoKChzdWJtaXNzaW9uOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGhhc1ZhbHVlID0gc3VibWlzc2lvbi5hbnN3ZXJzLnNvbWUoXG4gICAgICAgIChhbnN3ZXI6IGFueSkgPT5cbiAgICAgICAgICBhbnN3ZXIuYW5zd2VyICE9PSAnJyAmJlxuICAgICAgICAgIGFuc3dlci5hbnN3ZXIgIT09IG51bGwgJiZcbiAgICAgICAgICBhbnN3ZXIuYW5zd2VyICE9PSB1bmRlZmluZWRcbiAgICAgICk7XG4gICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgbm9uRW1wdHlTdWJtaXNzaW9ucy5wdXNoKHN1Ym1pc3Npb24pO1xuICAgICAgfSBlbHNlIGlmIChzdWJtaXNzaW9uLnN1Ym1pc3Npb25JZCkge1xuICAgICAgICBlbXB0eVN1Ym1pc3Npb25JZHMucHVzaChzdWJtaXNzaW9uLnN1Ym1pc3Npb25JZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdWJtaXNzaW9ucyA9IG5vbkVtcHR5U3VibWlzc2lvbnM7XG4gICAgcmV0dXJuIHN1Ym1pc3Npb25zO1xuICB9XG5cbiAgdmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk6IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSB7XG4gICAgaWYgKHRoaXMucGFnZXMubGVuZ3RoIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6XG4gICAgICAgICAgJ1BsZWFzZSBlbnN1cmUgYWxsIHBhZ2VzIGFyZSBmdWxseSB2aXNpYmxlIGJlZm9yZSBzdWJtaXR0aW5nIHRoZSBmb3JtLicsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGluY29tcGxldGVQYWdlczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMucGFnZXMuZm9yRWFjaCgocDogYW55LCBpOiBudW1iZXIpID0+IHtcbiAgICAgIGlmKHAgJiYgQXJyYXkuaXNBcnJheShwLnJvd3MpKXtcbiAgICAgIGxldCBqPTA7XG4gICAgICBwLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICBqKys7XG4gICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoXG4gICAgICAgICFwIHx8XG4gICAgICAgICFBcnJheS5pc0FycmF5KHAucm93cykgfHxcbiAgICAgICAgTWF0aC5jZWlsKGogLyAyMCkgPCB0aGlzLnJvd1NldENvdW50W2ldXG4gICAgICApIHtcbiAgICAgICAgaW5jb21wbGV0ZVBhZ2VzLnB1c2godGhpcy5wYWdlRGV0YWlsc1tpXS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgfVxuICAgIH0pO1xuXG5cbiAgICBpZiAoaW5jb21wbGV0ZVBhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBTb21lIHNlY3Rpb25zIGFyZSBzdGlsbCBsb2FkaW5nLiBQbGVhc2Ugc2Nyb2xsIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwYWdlcyB0byBlbnN1cmUgYWxsIHF1ZXN0aW9ucyBhcmUgbG9hZGVkOiAke2luY29tcGxldGVQYWdlcy5qb2luKFxuICAgICAgICAgICcsICdcbiAgICAgICAgKX0uYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6ICdHcmVhdCEgQWxsIHNlY3Rpb25zIGFyZSBjb21wbGV0ZS4gWW91IGNhbiBub3cgc3VibWl0IHRoZSBmb3JtLicsXG4gICAgfTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdEZvcm0oKSB7XG4gICAgaWYgKCF0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpLnN0YXR1cykge1xuICAgICAgdGhpcy50b2FzdHIud2FybmluZygnUGxlYXNlIHdhaXQgZm9yIGFsbCBlbGVtZW50cyB0byBsb2FkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5jbGVhcigpO1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2UuY2xlYXJBbGwoKTtcbiAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgICAnRXJyb3Igd2hpbGUgZ2V0dGluZyByZUNBUFRDSEEgdG9rZW46JyxcbiAgICAgICAgICBlcnJvci5lcnJvcj8ubWVzc2FnZVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcignRmFpbGVkIHRvIHZlcmlmeSByZUNBUFRDSEEuJyk7XG4gICAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy52YWxpZGF0ZUZvcm0odGhpcy5wYWdlcyk7XG4gICAgY29uc3QgZ2V0Q2lyY3VsYXJSZXBsYWNlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHNlZW4gPSBuZXcgV2Vha1NldCgpO1xuICAgICAgcmV0dXJuIChfa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGlmIChzZWVuLmhhcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNlZW4uYWRkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH07XG4gICAgdGhpcy5nZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpO1xuICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEoKTtcbiAgICAgIHRoaXMucXVlc3Rpb25BbnN3ZXJzLnBhcmVudElkID0gdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQ7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb24nLCBKU09OLnN0cmluZ2lmeSh0aGlzLnF1ZXN0aW9uQW5zd2VycywgZ2V0Q2lyY3VsYXJSZXBsYWNlcigpKSk7XG4gICAgICBmb3JtRGF0YS5hcHBlbmQoXCJ3ZWJob29rUGF5bG9hZFwiLCBKU09OLnN0cmluZ2lmeSh0aGlzLndlYmhvb2tQYXlsb2FkQXJyYXkpKTtcbiAgICAgIGlmICh0aGlzLmZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY29uc3Qgc2VlblF1ZXN0aW9uSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgY29uc3QgdW5pcXVlRmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcigoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoc2VlblF1ZXN0aW9uSWRzLmhhcyhmaWxlSXRlbS5xdWVzdGlvbklkKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuUXVlc3Rpb25JZHMuYWRkKGZpbGVJdGVtLnF1ZXN0aW9uSWQpO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KTtcblxuICAgICAgICB1bmlxdWVGaWxlcy5mb3JFYWNoKChmaWxlSXRlbSkgPT4ge1xuICAgICAgICAgIGZpbGVJdGVtLmZpbGUuZm9yRWFjaCgoZmlsZTogYW55KSA9PiB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoZmlsZUl0ZW0ucXVlc3Rpb25JZCwgZmlsZS5fZmlsZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgY29uc3QgZm9ybVNlcnZpY2VDYWxsID1cbiAgICAgICAgdGhpcy5lZGl0ICYmIHRoaXMuc3VibWlzc2lvbklkXG4gICAgICAgICAgPyB0aGlzLmZvcm1TZXJ2aWNlLnVwZGF0ZUZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgICB0aGlzLnJlY2FwdGNoYVRva2VuXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB0aGlzLmZvcm1TZXJ2aWNlLnN1Ym1pdEZvcm0oXG4gICAgICAgICAgICAgIHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgZm9ybURhdGEsXG4gICAgICAgICAgICAgIHRoaXMucmVjYXB0Y2hhVG9rZW5cbiAgICAgICAgICAgICk7XG5cbiAgICAgIGZvcm1TZXJ2aWNlQ2FsbC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0ci5zdWNjZXNzKFxuICAgICAgICAgICAgdGhpcy5lZGl0XG4gICAgICAgICAgICAgID8gJ0Zvcm0gdXBkYXRlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgICAgIDogJ0Zvcm0gc3VibWl0dGVkIHN1Y2Nlc3NmdWxseSdcbiAgICAgICAgICApO1xuICAgICAgICAgIHRoaXMuc3VibWl0LmVtaXQoJ3N1Y2Nlc3MnKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFyQWxsKCk7XG4gICAgICAgICAgdGhpcy5maW5kUXVlc3Rpb25QYWdlSW5kZXgodGhpcy5wYXJzZUVycm9yc1RvTWFwKGVycm9yLmVycm9yLm1lc3NhZ2UpKTtcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gdGhpcy5wYWdlcy5sZW5ndGgtMTtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGVUb0ZpcnN0RXJyb3IoKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG4gICAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMudG9hc3RyLmVycm9yKHZhbGlkYXRpb25SZXNwb25zZS5tZXNzYWdlKTtcbiAgICAgIHRoaXMuc3VibWlzc2lvbkluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuIHBhcnNlRXJyb3JzVG9NYXAoZXJyb3JTdHJpbmc6IHN0cmluZyk6IE1hcDxzdHJpbmcsIHN0cmluZz4ge1xuICAgIGNvbnN0IGVycm9yTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICAvLyBDb252ZXJ0IHRoZSBpbmNvcnJlY3QgZm9ybWF0IHRvIGEgdmFsaWQgb2JqZWN0IHN0cnVjdHVyZVxuICAgIGVycm9yU3RyaW5nXG4gICAgICAgIC5yZXBsYWNlKC9be31dL2csICcnKSAvLyBSZW1vdmUgY3VybHkgYnJhY2VzXG4gICAgICAgIC5zcGxpdCgnLCAnKSAvLyBTcGxpdCBrZXktdmFsdWUgcGFpcnNcbiAgICAgICAgLmZvckVhY2gocGFpciA9PiB7XG4gICAgICAgICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBwYWlyLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAoa2V5ICYmIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNYXAuc2V0KGtleS50cmltKCksIHZhbHVlLnRyaW0oKSk7IC8vIFN0b3JlIGluIE1hcFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgIHJldHVybiBlcnJvck1hcDtcbn1cbiAgYXN5bmMgbmF2aWdhdGVUb0ZpcnN0RXJyb3IoKSB7XG4gICAgY29uc3QgZmlyc3RFcnJvciA9IHRoaXMudmFsaWRhdGlvblNlcnZpY2UuZ2V0Rmlyc3RJbnZhbGlkKCk7XG4gICAgaWYgKCFmaXJzdEVycm9yKSByZXR1cm47XG5cbiAgICBjb25zdCBlbGVtZW50SWQgPSBgcXVlc3Rpb24tJHtmaXJzdEVycm9yLmlkfWA7XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwO1xuXG4gICAgLy8gQ2hhbmdlIHBhZ2UgaWYgbmVlZGVkXG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2VJbmRleCAhPT0gZmlyc3RFcnJvci5wYWdlSW5kZXgpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGZpcnN0RXJyb3IucGFnZUluZGV4O1xuICAgICAgaWYodGhpcy5jdXJyZW50UGFnZUluZGV4KzEgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCl7XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleCsxXTtcbiAgICAgIH1cbiAgICAgIGlmKHRoaXMuY3VycmVudFBhZ2VJbmRleC0xPj0wKXtcbiAgICAgICAgdGhpcy5wcmV2aW91c1BhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW3RoaXMuY3VycmVudFBhZ2VJbmRleC0xXTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5kZWJvdW5jZSgoKSA9PiB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKSwgMTAwKTtcbiAgICAgIGlmKHRoaXMubmF2aWdhdGlvbiA9PT0gJ1RBQicpXG4gICAgICB0aGlzLmNoaWxkLnRyaWdnZXJGdW5jdGlvbihmaXJzdEVycm9yLnBhZ2VJbmRleCk7XG4gICAgfVxuXG5cbiAgICBhd2FpdCB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnJldHJ5Q291bnQrKztcbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudElkKTtcblxuICAgIGlmIChlbGVtZW50KSB7XG4gICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5zY3JvbGxBbmRGb2N1cyhlbGVtZW50KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmV0cnlDb3VudCA8IHRoaXMubWF4UmV0cmllcykge1xuICAgICAgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xuICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZCk7XG4gICAgfVxuXG4gICAgY29uc29sZS5lcnJvcihgRWxlbWVudCAke2VsZW1lbnRJZH0gbm90IGZvdW5kIGFmdGVyICR7dGhpcy5tYXhSZXRyaWVzfSBhdHRlbXB0c2ApO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmZhbGxiYWNrU2Nyb2xsKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzY3JvbGxBbmRGb2N1cyhlbGVtZW50OiBIVE1MRWxlbWVudCkge1xuICAgIGVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoe1xuICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnLFxuICAgICAgYmxvY2s6ICdjZW50ZXInLFxuICAgICAgaW5saW5lOiAnbmVhcmVzdCdcbiAgICB9KTtcblxuICAgIGNvbnN0IGZvY3VzYWJsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgYnV0dG9uLCBbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXg9XCItMVwiXSknXG4gICAgKSBhcyBIVE1MRWxlbWVudDtcbiAgICBmb2N1c2FibGU/LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGZhbGxiYWNrU2Nyb2xsKCkge1xuICAgIGNvbnN0IHBhZ2VFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLnBhZ2UtJHt0aGlzLmN1cnJlbnRQYWdlSW5kZXh9YCk7XG4gICAgcGFnZUVsZW1lbnQ/LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdhdXRvJyB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2UoZnVuYzogKCkgPT4gdm9pZCwgZGVsYXk6IG51bWJlcikge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZXIpO1xuICAgIHRoaXMuZGVib3VuY2VUaW1lciA9IHNldFRpbWVvdXQoZnVuYywgZGVsYXkpO1xuICB9XG4vLyAgIGV4dHJhY3RJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbi8vICAgICBjb25zdCBtYXRjaCA9IG1lc3NhZ2UubWF0Y2goL1swLTlhLWZBLUYtXXszNn0vKTtcbi8vICAgICByZXR1cm4gbWF0Y2ggPyBtYXRjaFswXSA6IG51bGw7XG4vLyB9XG5cbi8vICByZW1vdmVJZChtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuLy8gICByZXR1cm4gbWVzc2FnZS5yZXBsYWNlKC9bMC05YS1mQS1GLV17MzZ9JC8sIFwiXCIpLnRyaW0oKTtcbi8vIH1cblxuXG5maW5kUXVlc3Rpb25QYWdlSW5kZXgocXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4pOiB2b2lkIHtcbiAgZm9yIChsZXQgcGFnZUluZGV4ID0gMDsgcGFnZUluZGV4IDwgdGhpcy5wYWdlcy5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgY29uc3QgcGFnZSA9IHRoaXMucGFnZXNbcGFnZUluZGV4XTtcblxuICAgIGZvciAoY29uc3Qgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudCwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbnByaXZhdGUgY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZWxlbWVudDogYW55LCBxdWVzdGlvbkVycm9yczogTWFwPHN0cmluZywgc3RyaW5nPiwgcGFnZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgaWYgKGVsZW1lbnQuZWxlbWVudC5pZCAmJiBxdWVzdGlvbkVycm9ycy5oYXMoZWxlbWVudC5lbGVtZW50LmlkKSkge1xuICAgIHRoaXMudmFsaWRhdGlvblNlcnZpY2Uuc2V0SW52YWxpZChlbGVtZW50LmVsZW1lbnQuaWQsIHF1ZXN0aW9uRXJyb3JzLmdldChlbGVtZW50LmVsZW1lbnQuaWQpISwgcGFnZUluZGV4KTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBzdWJmb3JtcyByZWN1cnNpdmVseVxuICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHwgZWxlbWVudC5lbnRpdHlUeXBlPT09J01VTFRJRklFTEQnKSAmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgIGZvciAoY29uc3Qgcm93IG9mIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICBmb3IgKGNvbnN0IGdyaWRJdGVtIG9mIHJvdy5ncmlkKSB7XG4gICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEhhbmRsZSBsb2dpYy1iYXNlZCBjb25kaXRpb25zIHJlY3Vyc2l2ZWx5XG4gIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSAmJiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICBmb3IgKGNvbnN0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZvY3VzUXVlc3Rpb25FbGVtZW50KGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpIHtcbiAgLy8gRmluZCBmaXJzdCBmb2N1c2FibGUgZWxlbWVudCB3aXRoaW4gdGhlIHF1ZXN0aW9uXG4gIGNvbnN0IGZvY3VzYWJsZSA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCdpbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSwgW3RhYmluZGV4XScpO1xuICBpZiAoZm9jdXNhYmxlKSB7XG4gICAgKGZvY3VzYWJsZSBhcyBIVE1MRWxlbWVudCkuZm9jdXMoKTtcbiAgfSBlbHNlIHtcbiAgICBjb250YWluZXIuZm9jdXMoKTtcbiAgfVxufVxuICB2YWxpZGF0ZUZvcm0oanNvbkRhdGE6IGFueSk6IHtcbiAgICBpc1ZhbGlkOiBib29sZWFuO1xuICAgIG1lc3NhZ2U6IHN0cmluZztcbiAgICBwYWdlSW5kZXg6IG51bWJlciB8IDA7XG4gIH0ge1xuICAgIGNvbnN0IHZhbGlkYXRlUXVlc3Rpb25zID0gKFxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXVxuICAgICk6IHsgaXNWYWxpZDogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nOyBwYWdlSW5kZXg6IG51bWJlciB8IDAgfSA9PiB7XG4gICAgICBmb3IgKGxldCBlbGVtZW50IG9mIGZvcm1FbGVtZW50cykge1xuICAgICAgICBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT04nKSB7XG4gICAgICAgICAgY29uc3QgcmVxdWlyZWQgPSBlbGVtZW50LmVsZW1lbnQucmVxdWlyZWQ7XG4gICAgICAgICAgY29uc3QgYW5zd2VyID0gZWxlbWVudC5lbGVtZW50LmFuc3dlcjtcbiAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gZWxlbWVudC5lbGVtZW50LnZhbGlkYXRpb247XG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5mb3JtRWxlbWVudC5lbGVtZW50VHlwZSA9PT0gJ0ZJTEVfUElDS0VSJykge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNobWVudCA9IGVsZW1lbnQuZWxlbWVudC5hdHRhY2htZW50cztcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoKCFhbnN3ZXIgfHwgYW5zd2VyPy5sZW5ndGggPT09IDApICYmICghYXR0YWNobWVudCB8fGF0dGFjaG1lbnQ/Lmxlbmd0aCA9PSAwKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUmVxdWlyZWQgZmlsZSBxdWVzdGlvbiBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBSZXF1aXJlZCBmaWxlIHF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBoYXMgbm8gZmlsZXMgdXBsb2FkZWQuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChyZXF1aXJlZCkge1xuICAgICAgICAgICAgICBpZiAoIWFuc3dlciB8fCBPYmplY3Qua2V5cyhhbnN3ZXIpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IG5vIGFuc3dlciBwcm92aWRlZC5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmICh2YWxpZGF0aW9uPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gJHtlbGVtZW50LmVsZW1lbnQucXVlc3Rpb25OdW1iZXJ9IGlzIHJlcXVpcmVkIGJ1dCB2YWxpZGF0aW9uIGlzIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICghcmVxdWlyZWQgJiYgYW5zd2VyICYmIE9iamVjdC5rZXlzKGFuc3dlcikubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICBpZiAodmFsaWRhdGlvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIG5vdCByZXF1aXJlZCBidXQgYW5zd2VyIHByb3ZpZGVkIHdpdGggdmFsaWRhdGlvbiBmYWxzZS5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyBub3QgcmVxdWlyZWQgYnV0IGFuc3dlciBwcm92aWRlZCB3aXRoIHZhbGlkYXRpb24gZmFsc2UuYCxcbiAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGxvZ2ljIG9mIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljcykge1xuICAgICAgICAgICAgICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMobG9naWMucm93cyk7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyAgZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgKSB7XG4gICAgICAgIC8vICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgIC8vICAgICBjb25zdCBkYXRhID0gZWxlbWVudC5lbGVtZW50LnJvd3M7XG4gICAgICAgIC8vICAgICBjb25zdCByZXF1aXJlZFF1ZXN0aW9uSWRzID0gZGF0YVxuICAgICAgICAvLyAgICAgICAuZmxhdE1hcCgocm93OiBhbnkpID0+IHJvdy5ncmlkKSAvLyBFeHRyYWN0aW5nIGdyaWQgaXRlbXMgZnJvbSBlYWNoIG9iamVjdFxuICAgICAgICAvLyAgICAgICAuZmlsdGVyKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gaXRlbS5lbGVtZW50LnJlcXVpcmVkOyAvLyBFbnN1cmluZyB0aGUgZmlsdGVyIHByb3Blcmx5IGNoZWNrcyAncmVxdWlyZWQnXG4gICAgICAgIC8vICAgICAgIH0pXG4gICAgICAgIC8vICAgICAgIC5tYXAoKGl0ZW06IGFueSkgPT4gaXRlbS5lbGVtZW50LmlkKTtcblxuICAgICAgICAvLyAgICAgaWYgKHJlcXVpcmVkUXVlc3Rpb25JZHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyAgICAgICBpZiAoZWxlbWVudD8uZWxlbWVudD8uc3VibWlzc2lvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgICBjb25zdCBhcmVSZXF1aXJlZFF1ZXN0aW9uc0Fuc3dlcmVkID0gcmVxdWlyZWRRdWVzdGlvbklkcy5ldmVyeShcbiAgICAgICAgLy8gICAgICAgICAgIChyZXF1aXJlZElkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgbWF0Y2hpbmdBbnN3ZXIgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnNcbiAgICAgICAgLy8gICAgICAgICAgICAgICAuZmxhdE1hcCgoc3ViOiBhbnkpID0+IHN1Yi5hbnN3ZXJzKVxuICAgICAgICAvLyAgICAgICAgICAgICAgIC5maW5kKChhbnM6IGFueSkgPT4gYW5zLnF1ZXN0aW9uSWQgPT09IHJlcXVpcmVkSWQpO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICghbWF0Y2hpbmdBbnN3ZXIpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBhID0gbWF0Y2hpbmdBbnN3ZXIuYW5zd2VyO1xuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gYS50cmltKCkgIT09ICcnO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgICByZXR1cm4gYS5sZW5ndGggPiAwO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgaWYgKGEgIT09IG51bGwgJiYgdHlwZW9mIGEgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGEpLmxlbmd0aCA+IDA7XG4gICAgICAgIC8vICAgICAgICAgICAgIH1cblxuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4gYSAhPT0gbnVsbCAmJiBhICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIC8vICAgICAgICAgICB9XG4gICAgICAgIC8vICAgICAgICAgKTtcblxuICAgICAgICAvLyAgICAgICAgIGlmICghYXJlUmVxdWlyZWRRdWVzdGlvbnNBbnN3ZXJlZCkge1xuICAgICAgICAvLyAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLlwiKTtcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAgICAgICBtZXNzYWdlOlxuICAgICAgICAvLyAgICAgICAgICAgICAgICdGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgbm8gYW5zd2VyIHByb3ZpZGVkLicsXG4gICAgICAgIC8vICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgLy8gICAgICAgICAgIH07XG4gICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgLy8gZWxzZSB7XG4gICAgICAgIC8vICAgICAgIC8vICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJObyBzdWJtaXNzaW9ucyBwcm92aWRlZCBmb3IgcmVxdWlyZWQgcXVlc3Rpb25zLlwiKTtcbiAgICAgICAgLy8gICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICAgIC8vICAgICBtZXNzYWdlOlxuICAgICAgICAvLyAgICAgICAvLyAgICAgICAnRm9ybSBpcyBpbnZhbGlkIC0gTm8gc3VibWlzc2lvbnMgcHJvdmlkZWQgZm9yIHJlcXVpcmVkIHF1ZXN0aW9ucy4nLFxuICAgICAgICAvLyAgICAgICAvLyAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAvLyAgICAgICAvLyAgIH07XG4gICAgICAgIC8vICAgICAgIC8vIH1cbiAgICAgICAgLy8gICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgIHJldHVybiB7IGlzVmFsaWQ6IHRydWUsIG1lc3NhZ2U6ICcnLCBwYWdlSW5kZXg6IDAgfTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgICAgIC8vICAgICAgIGNvbnN0IHJlc3VsdHMgPSBlbGVtZW50LmVsZW1lbnQucm93cy5tYXAoKHJvdzogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdmFsaWRhdGlvblJlc3VsdDtcbiAgICAgICAgLy8gICAgICAgfSk7XG4gICAgICAgIC8vICAgICAgIGNvbnN0IGlzVmFsaWQgPSByZXN1bHRzLmV2ZXJ5KChyZXM6IGFueSkgPT4gcmVzLmlzVmFsaWQpO1xuICAgICAgICAvLyAgICAgICBpZiAoIWlzVmFsaWQpIHtcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgLy8gICAgICAgfVxuICAgICAgICAvLyAgICAgICAvLyBjb25zdCByZXN1bHQgPSAgZWxlbWVudC5lbGVtZW50LnJvd3MuZmxhdE1hcCgocm93OiBhbnkpID0+XG4gICAgICAgIC8vICAgICAgIC8vICAge1xuICAgICAgICAvLyAgICAgICAvLyAgICAgdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAvLyAgICAgICAvLyAgICAgaWYgKCFyZXN1bHQuaXNWYWxpZCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gICAgICAgLy8gfSlcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgZWxzZSAgaWYgKChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTl9HUk9VUCcgfHwgZWxlbWVudC5lbnRpdHlUeXBlPT09J01VTFRJRklFTEQnKSYmIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG5cbiAgICAgICAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQgJiYgZWxlbWVudC5lbnRpdHlUeXBlIT0nTVVMVElGSUVMRCcpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnJywgcGFnZUluZGV4OiAwIH07XG4gICAgfTtcblxuICAgIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IGpzb25EYXRhLmxlbmd0aDsgcGFnZUluZGV4KyspIHtcbiAgICAgIGNvbnN0IHBhZ2UgPSBqc29uRGF0YVtwYWdlSW5kZXhdO1xuICAgICAgZm9yIChsZXQgcm93IG9mIHBhZ2Uucm93cykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5mb3JFYWNoKChtZXNzYWdlOiBzdHJpbmcsIGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQoaWQsbWVzc2FnZSwgcGFnZUluZGV4KTtcbn0pO1xuICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnM9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIC8vIGlmICghcmVzdWx0LmlzVmFsaWQpIHtcbiAgICAgICAgLy8gICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIC8vICAgICBtZXNzYWdlOiBgUGFnZSAke3BhZ2VJbmRleCArIDF9OiAke3Jlc3VsdC5tZXNzYWdlfWAsXG4gICAgICAgIC8vICAgICBwYWdlSW5kZXg6IHBhZ2VJbmRleCxcbiAgICAgICAgLy8gICB9O1xuICAgICAgICAvLyB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGpzb25EYXRhLmxlbmd0aC0xO1xuICAgIGlmICh0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEZpcnN0SW52YWxpZCgpKSB7XG4gICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdEVycm9yKCk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgbWVzc2FnZTogYFBhZ2VgLFxuICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNWYWxpZDogdHJ1ZSxcbiAgICAgIG1lc3NhZ2U6ICdGb3JtIGlzIHZhbGlkLicsXG4gICAgICBwYWdlSW5kZXg6IDAsXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMudXBkYXRlU3ViRm9ybSh0aGlzLnBhZ2VzLCBldmVudCk7XG4gIH1cblxuICB1cGRhdGVTdWJGb3JtID0gKHBhZ2VzOiBhbnlbXSwgdXBkYXRlZFN1YkZvcm06IGFueSkgPT4ge1xuICAgIHBhZ2VzLmZvckVhY2goKHBhZ2UpID0+IHtcbiAgICAgIHBhZ2Uucm93cy5mb3JFYWNoKChyb3c6IGFueSkgPT4ge1xuICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkID09PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgZXhpc3Rpbmcgc3ViZm9ybSB3aXRoIHRoZSBuZXcgZGF0YVxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50ID0gdXBkYXRlZFN1YkZvcm07XG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmXG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQuaWQgIT09IHVwZGF0ZWRTdWJGb3JtLmZvcm1JZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gSGFuZGxlIG11bHRpcGxlIHN1YmZvcm1zIGxvZ2ljIGhlcmUgaWYgbmVlZGVkXG4gICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSB1cGRhdGUgY2hpbGQgbG9naWNzXG4gICAgICAgICAgICAvLyBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MuZm9yRWFjaCgobG9naWM6IGFueSkgPT4ge1xuICAgICAgICAgICAgLy8gICBpZiAobG9naWMuc2hvd0xvZ2ljKSB7XG4gICAgICAgICAgICAvLyAgICAgdGhpcy51cGRhdGVTdWJGb3JtKGxvZ2ljLnJvd3MsIHVwZGF0ZWRTdWJGb3JtKTtcbiAgICAgICAgICAgIC8vICAgfVxuICAgICAgICAgICAgLy8gfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG5cbiBleHRyYWN0R3JvdXBlZFdlYmhvb2tEYXRhKHdlYmhvb2tzOiBhbnlbXSk6IHtcbiAgaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICByZXF1ZXN0Qm9kaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufSB7XG4gIGNvbnN0IHJlc3VsdDoge1xuICAgIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhdGhWYXJpYWJsZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgcmVxdWVzdEJvZGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSA9IHtcbiAgICBoZWFkZXJzOiB7fSxcbiAgICBwYXJhbXM6IHt9LFxuICAgIHBhdGhWYXJpYWJsZXM6IHt9LFxuICAgIHJlcXVlc3RCb2RpZXM6IHt9XG4gIH07XG5cbiAgZm9yIChjb25zdCB3ZWJob29rIG9mIHdlYmhvb2tzID8/IFtdKSB7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LmhlYWRlcnMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LmhlYWRlcnNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXJhbXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhcmFtc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHdlYmhvb2s/LnBhdGhWYXJpYWJsZXMgPz8gW10pIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUZyb21TdG9yYWdlKGl0ZW0udmFsdWVTb3VyY2UsIGl0ZW0ua2V5TmFtZSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmVzdWx0LnBhdGhWYXJpYWJsZXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5yZXF1ZXN0Qm9kaWVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5yZXF1ZXN0Qm9kaWVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5cbmdldFZhbHVlRnJvbVN0b3JhZ2Uoc291cmNlOiAnTE9DQUxfU1RPUkFHRScgfCAnU0VTU0lPTl9TVE9SQUdFJywga2V5OiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcblxuICBpZiAoc291cmNlID09PSAnTE9DQUxfU1RPUkFHRScpIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICBpZiAoc291cmNlID09PSAnU0VTU0lPTl9TVE9SQUdFJykgcmV0dXJuIHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgcmV0dXJuIG51bGw7XG59XG5cblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwib3V0ZXItY29udGFpbmVyXCI+XG4gIFxuICBcbiAgPGRpdiBjbGFzcz1cImhlYWQgY29udGFpbmVyXCIgKm5nSWY9XCIhc2tpcE1hcmdpblwiPlxuICAgIDxsaWItaGVhZGVyIFtuYW1lXT1cIm5hbWVcIiBbc2tpcE1hcmdpbl09XCJza2lwTWFyZ2luXCI+PC9saWItaGVhZGVyPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImJvZHlcIiBbbmdDbGFzc109XCJ7ICdza2lwLW1hcmdpbic6IHNraXBNYXJnaW4sY29udGFpbmVyOiAhc2tpcE1hcmdpbn1cIj5cbiAgICBcbiAgICA8bGliLXN1Ym1pc3Npb24tY29udGFpbmVyIFtwYXJlbnRRdWVzdGlvbkFuc3dlcnNdPVwicGFyZW50UXVlc3Rpb25BbnN3ZXJzXCJcbiAgICAqbmdJZj1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiPjwvbGliLXN1Ym1pc3Npb24tY29udGFpbmVyPlxuICAgIFxuICAgIDxsaWItbmF2aWdhdGlvbi10YWJzXG4gICAgICAqbmdJZj1cIm5hdmlnYXRpb24gPT0gJ1RBQidcIlxuICAgICAgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiXG4gICAgICBbcGFnZXNdPVwicGFnZXNcIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICAocGFnZUNoYW5nZWQpPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW3BhZ2VEZXRhaWxzXT1cInBhZ2VEZXRhaWxzXCJcbiAgICAgIFtlbGlnaWJsZUZvclN1Ym1pc3Npb25dPVwiZWxpZ2libGVGb3JTdWJtaXNzaW9uXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgW2FjY2VwdGVkTGFuZ3VhZ2VdID0gXCJhY2NlcHRlZExhbmd1YWdlXCJcbiAgICAgIFtwcmltYXJ5Q29sb3JdPVwicHJpbWFyeUNvbG9yXCJcbiAgICAgIFtzZWNvbmRhcnlDb2xvcl09XCJzZWNvbmRhcnlDb2xvclwiXG4gICAgICBbbWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRdPVwibWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWRcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICAgIChyb3dTZXRJbmRleCk9XCJsb2FkTW9yZURhdGEoJGV2ZW50KVwiXG4gICAgPjwvbGliLW5hdmlnYXRpb24tdGFicz5cbiAgICA8bGliLW5leHQtcHJldi1uYXZpZ2F0aW9uXG4gICAgICAqbmdJZj1cIm5hdmlnYXRpb24gPT0gJ05FWFRfQU5EX1BSRVZJT1VTX0JVVFRPTidcIlxuICAgICAgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiXG4gICAgICBbY3VycmVudFBhZ2VJbmRleF09XCJjdXJyZW50UGFnZUluZGV4XCJcbiAgICAgIFtwYWdlRGV0YWlsc109XCJwYWdlRGV0YWlsc1wiXG4gICAgICAocm93U2V0SW5kZXgpPVwibG9hZE1vcmVEYXRhKCRldmVudClcIlxuICAgICAgW3BhZ2VzXT1cInBhZ2VzXCJcbiAgICAgIFtwcmV2aW91c1BhZ2VdPVwicHJldmlvdXNQYWdlXCJcbiAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW25leHRQYWdlXT1cIm5leHRQYWdlXCJcbiAgICAgIChuYXZpZ2F0ZU5leHQpPVwibmF2aWdhdGVUb05leHRQYWdlKClcIlxuICAgICAgKG5hdmlnYXRlUHJldmlvdXMpPVwibmF2aWdhdGVUb1ByZXZpb3VzUGFnZSgpXCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICAoc3VibWl0RW1pdCk9XCJzdWJtaXRGb3JtKClcIlxuICAgICAgW2VkaXRdPVwiZWRpdFwiXG4gICAgICAoc3ViRm9ybUNoYW5nZSk9XCJ1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKCRldmVudClcIlxuICAgID48L2xpYi1uZXh0LXByZXYtbmF2aWdhdGlvbj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
1135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3VibWl0LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZm9ybS1zdWJtaXNzaW9uL3NyYy9mb3JtLXN1Ym1pc3Npb24vc3VibWl0LWZvcm0vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxLQUFLLE1BQU0sTUFBTSwrQkFBK0IsQ0FBQztBQVF4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7OztBQWtDdkYsTUFBTSxPQUFPLG1CQUFtQjtJQWtFOUIsWUFDVSxXQUF3QixFQUN4QixNQUFxQixFQUNyQixNQUFjLEVBQ2QsV0FBd0IsRUFDeEIsZ0JBQWtDLEVBQ2xDLGlCQUFvQyxFQUNwQyxpQkFBb0MsRUFDcEMsY0FBcUMsRUFDckMscUJBQTRDLEVBQzVDLGdCQUEyQztRQVQzQyxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxtQkFBYyxHQUFkLGNBQWMsQ0FBdUI7UUFDckMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxxQkFB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S2EsbUJBQW1CO2tCQUwvQixTQUFTOytCQUNFLGlCQUFpQjs2WEFNbEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBRTZCLEtBQUs7c0JBQXhDLFNBQVM7dUJBQUMsdUJBQXVCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZm9ybS5zZXJ2aWNlJztcbmltcG9ydCAqIGFzIG1hcHBlciBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tYXBwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQdWJsaWNGb3JtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3B1YmxpY0Zvcm0ubW9kZWwnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IFJlY2FwdGNoYVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9yZWNhcHRjaGEuc2VydmljZSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ZhbGlkYXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBFbGVtZW50VHJhY2tlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbGVtZW50LXRyYWNrZXIuc2VydmljZSc7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tdGFicy9uYXZpZ2F0aW9uLXRhYnMuY29tcG9uZW50JztcbmltcG9ydCB7IEZvcm1WYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zvcm0tdmFsaWRhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYWdncmVnYXRlLnNlcnZpY2UnO1xuXG5pbnRlcmZhY2UgQW5zd2VyIHtcbiAgcXVlc3Rpb25JZDogc3RyaW5nO1xuICBhbnN3ZXI6IGFueTtcbiAgYW5zd2VySWQ/OiBzdHJpbmc7XG4gIGRlbGV0ZUZpbGVzPzogc3RyaW5nW107XG4gIGZpZWxkcz86IGFueTtcbn1cblxuaW50ZXJmYWNlIFN1Ym1pc3Npb24ge1xuICBzdWJtaXNzaW9uSWQ/OiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xufVxuXG5pbnRlcmZhY2UgRm9ybSB7XG4gIGZvcm1JZDogc3RyaW5nO1xuICBkZWxldGVkU3VibWlzc2lvbnM6IGFueVtdO1xuICBzdWJtaXNzaW9uczogU3VibWlzc2lvbltdO1xufVxuXG5pbnRlcmZhY2UgUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciB7XG4gIHBhcmVudElkOiBzdHJpbmc7XG4gIGFuc3dlcnM6IEFuc3dlcltdO1xuICBmb3JtczogRm9ybVtdO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItc3VibWl0LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3VibWl0LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdWJtaXQtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdWJtaXRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBxdWVzdGlvbjogUHVibGljRm9ybSB8IG51bGwgPSBudWxsO1xuICBASW5wdXQoKSBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgZWRpdDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBzdWJtaXNzaW9uSWQ6IHN0cmluZyA9ICcnO1xuICBASW5wdXQoKSBhY2NlcHRlZExhbmd1YWdlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2tpcE1hcmdpbjogYm9vbGVhbiA9IGZhbHNlO1xuICBAT3V0cHV0KCkgc3VibWl0OiBFdmVudEVtaXR0ZXI8c3RyaW5nPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgYXBpQ2FsbGVkOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBjdXJyZW50UGFnZUluZGV4Q2hhbmdlOiBFdmVudEVtaXR0ZXI8bnVtYmVyPiA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIEBWaWV3Q2hpbGQoTmF2aWdhdGlvblRhYnNDb21wb25lbnQpIGNoaWxkITogTmF2aWdhdGlvblRhYnNDb21wb25lbnQ7XG5cbiAgbmFtZTogc3RyaW5nID0gJyc7XG4gIHNhdmVBdXRvbWF0aWNhbGx5OiBib29sZWFuID0gZmFsc2U7XG4gIHNhdmVJbnRlcnZhbDogbnVtYmVyID0gMDtcbiAgY3VzdG9taXplRm9udDogYm9vbGVhbiA9IGZhbHNlO1xuICBmb250RmFtaWx5OiBzdHJpbmcgPSAnJztcbiAgZm9udFNpemU6IG51bWJlciA9IDA7XG4gIGVuYWJsZURhdGFFeHBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgZmlsZUZvcm1hdHM6IHN0cmluZ1tdID0gW107XG4gIGVuYWJsZVF1ZXN0aW9uTnVtYmVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uTnVtYmVyaW5nOiBzdHJpbmcgPSAnJztcbiAgZW5hYmxlR29vZ2xlUmVjYXB0Y2hhOiBib29sZWFuID0gZmFsc2U7XG4gIGdvb2dsZVJlY2FwdGNoYUtleTogc3RyaW5nID0gJyc7XG4gIGdvb2dsZVJlY2FwdGNoYVNlY3JldDogc3RyaW5nID0gJyc7XG4gIG5hdmlnYXRpb246IHN0cmluZyA9ICcnO1xuICBtYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwYWdlczogYW55ID0gW107XG4gIGN1cnJlbnRQYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIHByZXZpb3VzUGFnZTogYW55ID0ge307XG4gIGN1cnJlbnRQYWdlOiBhbnkgPSB7fTtcbiAgbmV4dFBhZ2U6IGFueSA9IHt9O1xuICBsYXN0VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHF1ZXN0aW9uQW5zd2VyczogUXVlc3Rpb25BbnN3ZXJzV3JhcHBlciA9IHtcbiAgICBwYXJlbnRJZDogJycsXG4gICAgYW5zd2VyczogW10sXG4gICAgZm9ybXM6IFtdLFxuICB9O1xuICBmaWxlczogeyBxdWVzdGlvbklkOiBzdHJpbmc7IGZpbGU6IGFueSB9W10gPSBbXTtcbiAgcGFyZW50UXVlc3Rpb25zOiBhbnk7XG4gIHN1Ym1pc3Npb246IGFueSA9IHt9O1xuICBwYXJlbnRRdWVzdGlvbkFuc3dlcnM6IGFueTtcbiAgcGFyZW50U3VibWlzc2lvbklkOiBzdHJpbmcgPSAnJztcbiAgc3VibWlzc2lvbkluUHJvZ3Jlc3M6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcmVjYXB0Y2hhVG9rZW46IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIGlzUmVmcmVzaGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIGludGVydmFsSWQ6IFJldHVyblR5cGU8dHlwZW9mIHNldEludGVydmFsPiB8IG51bGwgPSBudWxsO1xuICBwYWdlRGV0YWlsczogYW55ID0gW107XG4gIHBhZ2VOdW1iZXI6IG51bWJlciA9IDE7XG4gIHJvd1NldDogbnVtYmVyID0gMDtcbiAgcm93U2V0Q291bnQ6IFtudW1iZXJdID0gWzBdO1xuICByZXRyeUNvdW50OiBudW1iZXIgPSAwO1xuICAgbWF4UmV0cmllczpudW1iZXIgPSA1O1xuICBlbGlnaWJsZUZvclN1Ym1pc3Npb246IHsgc3RhdHVzOiBib29sZWFuOyBtZXNzYWdlOiBzdHJpbmcgfSA9IHtcbiAgICBzdGF0dXM6IHRydWUsXG4gICAgbWVzc2FnZTogJycsXG4gIH07XG4gIHdlYmhvb2tQYXlsb2FkQXJyYXk6IGFueVtdID0gW107XG4gIGluVmFsaWRRdWVzdGlvbnM6IE1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICB2aXNpdGVkUm93czogTWFwPG51bWJlciwgbnVtYmVyPiA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gIGFsbEVsZW1lbnRJZHM6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVib3VuY2VUaW1lcjogYW55O1xuICBwcmltYXJ5Q29sb3I6IHN0cmluZyA9ICcnO1xuICBzZWNvbmRhcnlDb2xvcjogc3RyaW5nID0gJyc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtU2VydmljZTogRm9ybVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcbiAgICBwcml2YXRlIHJlY2FwdGNoYVNlcnZpY2U6IFJlY2FwdGNoYVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50VHJhY2tlcjogRWxlbWVudFRyYWNrZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybVZhbGlkYXRpb25TZXJ2aWNlOiBGb3JtVmFsaWRhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhZ2dyZWdhdGVTZXJ2aWNlOkFnZ3JlZ2F0aW9uRnVuY3Rpb25TZXJ2aWNlXG4gICkge1xuICAgIGNvbnN0IG5hdmlnYXRpb24gPSB0aGlzLnJvdXRlci5nZXRDdXJyZW50TmF2aWdhdGlvbigpO1xuICAgIHRoaXMuc3VibWlzc2lvbiA9IG5hdmlnYXRpb24/LmV4dHJhcy5zdGF0ZT8uWydzdWJtaXNzaW9uJ107XG4gICAgdGhpcy5wYXJlbnRTdWJtaXNzaW9uSWQgPSB0aGlzLnN1Ym1pc3Npb24/LmlkO1xuICAgIHRoaXMucGFyZW50UXVlc3Rpb25BbnN3ZXJzID0gdGhpcy5zdWJtaXNzaW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgdGhpcy5wYXJlbnRRdWVzdGlvbnMgPSBuYXZpZ2F0aW9uPy5leHRyYXMuc3RhdGU/LlsncGFyZW50UXVlc3Rpb25zJ107XG4gICAgdGhpcy5kYXRhU2VydmljZS5zZXRQYXJlbnRRdWVzdGlvbnModGhpcy5wYXJlbnRRdWVzdGlvbnMpO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgdGhpcy52aXNpdGVkUm93cy5jbGVhcigpO1xuICAgIHRoaXMucmVjYXB0Y2hhU2VydmljZS5yZW1vdmVSZWNhcHRjaGFTY3JpcHQoKTtcbiAgICBpZiAodGhpcy5pbnRlcnZhbElkKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxJZCk7XG4gICAgICB0aGlzLmludGVydmFsSWQgPSBudWxsO1xuICAgICAgdGhpcy5pc1JlZnJlc2hpbmcgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5hZ2dyZWdhdGVTZXJ2aWNlLmNsZWFyQWxsKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMuYWNjZXB0ZWRMYW5ndWFnZSA9IGNoYW5nZXNbJ2FjY2VwdGVkTGFuZ3VhZ2UnXS5jdXJyZW50VmFsdWU7XG4gICAgICBpZiAoIXRoaXMuZWRpdCkgdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmVkaXQgJiYgdGhpcy5zdWJtaXNzaW9uSWQpIHtcbiAgICAgIHRoaXMuZ2V0U3VibWl0dGVkRm9ybURhdGEoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcy5nZXRGb3JtRGF0YSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGdldFRva2VuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IHRoaXMucmVjYXB0Y2hhU2VydmljZS5nZXRSZWNhcHRjaGFUb2tlbigpO1xuICAgICAgdGhpcy5yZWNhcHRjaGFUb2tlbiA9IHRva2VuO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICdFcnJvciB3aGlsZSBnZXR0aW5nIHJlQ0FQVENIQSB0b2tlbjonLFxuICAgICAgICBlcnJvci5lcnJvci5tZXNzYWdlXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRGb250KGZvbnROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBmb250UGF0aCA9IGBhc3NldHMvZm9udHMvJHtmb250TmFtZX0ud29mZjJgOyAvLyBBZGp1c3QgZXh0ZW5zaW9uIGFzIHBlciB5b3VyIGZvbnQgZmlsZVxuICAgIGNvbnN0IHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICBzdHlsZS5pbm5lckhUTUwgPSBgXG4gICAgICBAZm9udC1mYWNlIHtcbiAgICAgICAgZm9udC1mYW1pbHk6ICcke2ZvbnROYW1lfSc7XG4gICAgICAgIHNyYzogdXJsKCcke2ZvbnRQYXRofScpIGZvcm1hdCgnd29mZjInKTtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgICAgfVxuICAgICAgYm9keSB7XG4gICAgICAgIGZvbnQtZmFtaWx5OiAnJHtmb250TmFtZX0nLCBzYW5zLXNlcmlmO1xuICAgICAgfVxuICAgIGA7XG4gICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBnZXRGb3JtRGF0YSgpIHtcbiAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgMSwwLHRydWUpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhID1cbiAgICAgICAgICByZXNwb25zZS5yZXN1bHQubW9kdWxlQ29uZmlndXJhdGlvbj8uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMuc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5wcmltYXJ5Q29sb3IgPSByZXNwb25zZS5yZXN1bHQucHJpbWFyeUNvbG9yO1xuICAgICAgICB0aGlzLnNlY29uZGFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnNlY29uZGFyeUNvbG9yO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHRoaXMuZ2V0VG9rZW4oKTtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuXG5cbiAgICAgICAgdGhpcy5yb3dTZXRDb3VudFswXSA9IHJlc3BvbnNlLnJlc3VsdC50b3RhbE51bWJlclJvdztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VzW2ldKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2ldID0gW107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFN1Ym1pdHRlZEZvcm1EYXRhKCkge1xuICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgIC5nZXRTdWJtaXR0ZWRGb3JtKHRoaXMubW9kdWxlTmFtZSwgdGhpcy5zdWJtaXNzaW9uSWQpXG4gICAgICAuc3Vic2NyaWJlKChyZXNwb25zZSkgPT4ge1xuICAgICAgICB0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSA9XG4gICAgICAgICAgcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgICAgICB0aGlzLnF1ZXN0aW9uID0gbWFwcGVyLm1hcFB1YmxpY0Zvcm1Ub01vZGVsKHJlc3BvbnNlKTtcbiAgICAgICAgdGhpcy5hc3NpZ25RdWVzdGlvblByb3BlcnRpZXModGhpcy5xdWVzdGlvbik7XG4gICAgICAgIHRoaXMucHJpbWFyeUNvbG9yID0gcmVzcG9uc2UucmVzdWx0LnByaW1hcnlDb2xvcjtcbiAgICAgICAgdGhpcy5zZWNvbmRhcnlDb2xvciA9IHJlc3BvbnNlLnJlc3VsdC5zZWNvbmRhcnlDb2xvcjtcbiAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VEZXRhaWxzKSB7XG4gICAgICAgICAgdGhpcy5wYWdlRGV0YWlscyA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlRGV0YWlscztcbiAgICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1sxXTtcbiAgICAgICAgfVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheVxuICAgICAgICAgIHRoaXMud2ViaG9va1BheWxvYWRBcnJheSA9IHJlc3BvbnNlPy5yZXN1bHQ/LndlYmhvb2tzPy5tYXAoKHc6YW55KSA9PiAoe1xuICAgICAgICAgIGlkOiB3LmlkLFxuICAgICAgICAgICAuLi50aGlzLmV4dHJhY3RHcm91cGVkV2ViaG9va0RhdGEoW3ddKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB0aGlzLnJvd1NldENvdW50WzBdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoIXRoaXMucGFnZXNbaV0pIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaV0gPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRVcEZvbnRGYW1pbHkocmVzcG9uc2UpO1xuICAgICAgICBpZiAodGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEpIHtcbiAgICAgICAgICB0aGlzLmdldFRva2VuKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgc2V0VXBGb250RmFtaWx5KHJlc3BvbnNlOiBhbnkpIHtcbiAgICAvL3NldCBmb250IGZhbWlseSBhbmQgZm9udCBzaXplXG4gICAgaWYgKHJlc3BvbnNlLnJlc3VsdD8ubW9kdWxlQ29uZmlndXJhdGlvbj8uY3VzdG9taXplRm9udCkge1xuICAgICAgdGhpcy5mb250RmFtaWx5ID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRGYW1pbHk7XG4gICAgICB0aGlzLmZvbnRTaXplID0gcmVzcG9uc2UucmVzdWx0Lm1vZHVsZUNvbmZpZ3VyYXRpb24/LmZvbnRTaXplO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvbnRGYW1pbHkgPSAnUG9wcGlucyc7XG4gICAgICB0aGlzLmZvbnRTaXplID0gMTg7XG4gICAgfVxuICAgIHRoaXMubG9hZEZvbnQodGhpcy5mb250RmFtaWx5KTtcbiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXG4gICAgICAnLS1saWJyYXJ5LWZvbnQtZmFtaWx5JyxcbiAgICAgIHRoaXMuZm9udEZhbWlseVxuICAgICk7XG4gICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgJy0tbGlicmFyeS1mb250LXNpemUnLFxuICAgICAgdGhpcy5mb250U2l6ZSArICdweCdcbiAgICApO1xuICB9XG5cbiAgYXNzaWduUXVlc3Rpb25Qcm9wZXJ0aWVzKHF1ZXN0aW9uOiBQdWJsaWNGb3JtKSB7XG4gICAgdGhpcy5uYW1lID0gcXVlc3Rpb24ubmFtZTtcbiAgICB0aGlzLnBhZ2VzID0gcXVlc3Rpb24ucGFnZXM7XG4gICAgaWYgKHRoaXMucGFyZW50UXVlc3Rpb25zKSB7XG4gICAgICB0aGlzLnBhcmVudFF1ZXN0aW9uQW5zd2VycyA9IHF1ZXN0aW9uPy5xdWVzdGlvbkFuc3dlcnM7XG4gICAgICB0aGlzLnBhcmVudFN1Ym1pc3Npb25JZCA9IHF1ZXN0aW9uPy5wYXJlbnRJZDtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbMF07XG4gICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZXNbMV07XG4gICAgdGhpcy5zYXZlQXV0b21hdGljYWxseSA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLnNhdmVBdXRvbWF0aWNhbGx5O1xuICAgIHRoaXMuc2F2ZUludGVydmFsID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uc2F2ZUludGVydmFsO1xuICAgIHRoaXMuY3VzdG9taXplRm9udCA9IHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmN1c3RvbWl6ZUZvbnQ7XG4gICAgdGhpcy5mb250RmFtaWx5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udEZhbWlseTtcbiAgICB0aGlzLmZvbnRTaXplID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZm9udFNpemU7XG4gICAgdGhpcy5lbmFibGVEYXRhRXhwb3J0ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlRGF0YUV4cG9ydDtcbiAgICB0aGlzLmZpbGVGb3JtYXRzID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZmlsZUZvcm1hdHM7XG4gICAgdGhpcy5lbmFibGVRdWVzdGlvbk51bWJlcmluZyA9XG4gICAgICBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5lbmFibGVRdWVzdGlvbk51bWJlcmluZztcbiAgICB0aGlzLnF1ZXN0aW9uTnVtYmVyaW5nID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ucXVlc3Rpb25OdW1iZXJpbmc7XG4gICAgdGhpcy5lbmFibGVHb29nbGVSZWNhcHRjaGEgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZW5hYmxlR29vZ2xlUmVjYXB0Y2hhO1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhS2V5ID0gcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24uZ29vZ2xlUmVjYXB0Y2hhS2V5O1xuICAgIHRoaXMuZ29vZ2xlUmVjYXB0Y2hhU2VjcmV0ID1cbiAgICAgIHF1ZXN0aW9uLmZvcm1Db25maWd1cmF0aW9uLmdvb2dsZVJlY2FwdGNoYVNlY3JldDtcbiAgICB0aGlzLm5hdmlnYXRpb24gPSBxdWVzdGlvbi5mb3JtQ29uZmlndXJhdGlvbi5uYXZpZ2F0aW9uO1xuICAgIHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQgPVxuICAgICAgcXVlc3Rpb24uZm9ybUNvbmZpZ3VyYXRpb24ubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQ7XG4gICAgdGhpcy5hcGlDYWxsZWQuZW1pdCh0cnVlKTtcbiAgfVxuXG4gIG5hdmlnYXRlVG9OZXh0UGFnZSgpIHtcbiAgICBjb25zdCBuZXh0SW5kZXggPSB0aGlzLmN1cnJlbnRQYWdlSW5kZXggKyAxO1xuICAgIGlmIChuZXh0SW5kZXggPCB0aGlzLnBhZ2VEZXRhaWxzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMubWFya0FsbFF1ZXN0aW9uc0FzUmVxdWlyZWQpIHtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBjb25zdCB2YWxpZGF0aW9uUmVzcG9uc2UgPSB0aGlzLmZvcm1WYWxpZGF0aW9uU2VydmljZS52YWxpZGF0ZVJlcXVpcmVkUXVlc3Rpb25zKGN1cnJlbnRQYWdlRGF0YSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uUmVzcG9uc2UuaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIGlmKHRoaXMucGFnZXNbbmV4dEluZGV4XS5sZW5ndGggIT0gMCl7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tuZXh0SW5kZXhdO1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VycmVudFBhZ2UobmV4dEluZGV4KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbbmV4dEluZGV4ICsgMV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICBpZih0aGlzLnBhZ2VzW25leHRJbmRleF0ubGVuZ3RoICE9IDApe1xuICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW25leHRJbmRleF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4PW5leHRJbmRleDtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgdGhpcy5zZXRDdXJyZW50UGFnZShuZXh0SW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMubmV4dFBhZ2UgPSB0aGlzLnBhZ2VEZXRhaWxzW25leHRJbmRleCArIDFdO1xuICAgICAgfVxuICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBuYXZpZ2F0ZVRvUHJldmlvdXNQYWdlKCkge1xuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggPiAwKSB7XG4gICAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgICBjb25zdCBjdXJyZW50UGFnZURhdGEgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMuZm9ybVZhbGlkYXRpb25TZXJ2aWNlLnZhbGlkYXRlUmVxdWlyZWRRdWVzdGlvbnMoY3VycmVudFBhZ2VEYXRhKTtcbiAgICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXgtLTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5uZXh0UGFnZSA9IHRoaXMucGFnZURldGFpbHNbdGhpcy5jdXJyZW50UGFnZUluZGV4XTtcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4LS07XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VzW3RoaXMuY3VycmVudFBhZ2VJbmRleF07XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXggLSAxXTtcbiAgICAgIH1cbiAgICB9XG4gICAgICB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTogdm9pZCB7XG4gICAgdGhpcy5lbGlnaWJsZUZvclN1Ym1pc3Npb24gPSB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgc2V0Q3VycmVudFBhZ2UoaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChpbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIXRoaXMucGFnZXNbaW5kZXhdIHx8IHRoaXMucGFnZXNbaW5kZXhdLmxlbmd0aCAhPSAwKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5wYWdlTnVtYmVyID0gaW5kZXggKyAxO1xuICAgIGlmICh0aGlzLmVkaXQpIHtcbiAgICAgIHRoaXMuZm9ybVNlcnZpY2VcbiAgICAgICAgLmdldFN1Ym1pdHRlZEZvcm0oXG4gICAgICAgICAgdGhpcy5tb2R1bGVOYW1lLFxuICAgICAgICAgIHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICAgIHRoaXMucGFnZU51bWJlcixcbiAgICAgICAgICB0aGlzLnJvd1NldFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzcG9uc2U/LnJlc3VsdD8ucGFnZXMpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZXNbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnBhZ2VzWzBdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmZvcm1TZXJ2aWNlXG4gICAgICAgIC5nZXRRdWVzdGlvbnModGhpcy5tb2R1bGVOYW1lLCB0aGlzLnBhZ2VOdW1iZXIsIHRoaXMucm93U2V0LCB0cnVlKVxuICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHJlc3BvbnNlPy5yZXN1bHQ/LnBhZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XSA9IHJlc3BvbnNlLnJlc3VsdC5wYWdlc1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tYXJrQWxsUXVlc3Rpb25zQXNSZXF1aXJlZCkge1xuICAgICAgY29uc3QgY3VycmVudFBhZ2VEYXRhID0gdGhpcy5wYWdlc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXhdO1xuICAgICAgY29uc3QgdmFsaWRhdGlvblJlc3BvbnNlID0gdGhpcy5mb3JtVmFsaWRhdGlvblNlcnZpY2UudmFsaWRhdGVSZXF1aXJlZFF1ZXN0aW9ucyhjdXJyZW50UGFnZURhdGEpO1xuICAgICAgaWYgKHZhbGlkYXRpb25SZXNwb25zZS5pc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICB9XG4gICAgICB0aGlzLnZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpO1xuICB9XG5cbiAgbG9hZE1vcmVEYXRhKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICBsZXQgcm93Q291bnRMaW1pdCA9IHRoaXMucm93U2V0Q291bnRbaW5kZXhdO1xuICAgIGxldCBpID0gMDtcbiAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgbGV0IHJvd0NvdW50ID1pLzIwO1xuICAgIHJvd0NvdW50ID0gTWF0aC5jZWlsKHJvd0NvdW50KTtcblxuIGlmKHRoaXMudmlzaXRlZFJvd3MuaGFzKGluZGV4KSkge1xuICAgaWYodGhpcy52aXNpdGVkUm93cy5nZXQoaW5kZXgpPT09IHJvd0NvdW50KXtcbiAgICByZXR1cm47XG4gICB9XG4gfVxuXG5cbiAgICBpZiAocm93Q291bnQgKyAxID4gcm93Q291bnRMaW1pdCkge1xuICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnZpc2l0ZWRSb3dzLnNldChpbmRleCwgcm93Q291bnQpO1xuXG4gICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0U3VibWl0dGVkRm9ybShcbiAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSWQsXG4gICAgICAgICAgaW5kZXggKyAxLFxuICAgICAgICAgIHJvd0NvdW50XG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1Jvd3MgPSByZXNwb25zZT8ucmVzdWx0Py5wYWdlc1swXT8ucm93cyA/PyBbXTtcbiAgICAgICAgICB0aGlzLnBhZ2VzW2luZGV4XS5yb3dzID0gW1xuICAgICAgICAgICAgLi4uKHRoaXMucGFnZXNbaW5kZXhdPy5yb3dzID8/IFtdKSxcbiAgICAgICAgICAgIC4uLm5ld1Jvd3MsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBpbmRleDtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gdGhpcy5wYWdlc1tpbmRleF07XG4gICAgICAgICAgdGhpcy5yb3dTZXRDb3VudFtpbmRleF0gPSByZXNwb25zZS5yZXN1bHQudG90YWxOdW1iZXJSb3c7XG4gICAgICAgICAgdGhpcy5jaGVja1N1Ym1pc3Npb25FbGlnaWJpbGl0eSgpO1xuICAgICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb3JtU2VydmljZVxuICAgICAgICAuZ2V0UXVlc3Rpb25zKHRoaXMubW9kdWxlTmFtZSwgaW5kZXggKyAxLCByb3dDb3VudCApXG4gICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBuZXdSb3dzID0gcmVzcG9uc2U/LnJlc3VsdD8ucGFnZXNbMF0/LnJvd3MgPz8gW107XG4gICAgICAgICAgdGhpcy5wYWdlc1tpbmRleF0ucm93cyA9IFtcbiAgICAgICAgICAgIC4uLih0aGlzLnBhZ2VzW2luZGV4XT8ucm93cyA/PyBbXSksXG4gICAgICAgICAgICAuLi5uZXdSb3dzLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZUluZGV4ID0gaW5kZXg7XG4gICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHRoaXMucGFnZXNbaW5kZXhdO1xuICAgICAgICAgIHRoaXMucm93U2V0Q291bnRbaW5kZXhdID0gcmVzcG9uc2UucmVzdWx0LnRvdGFsTnVtYmVyUm93O1xuICAgICAgICAgIHRoaXMuY2hlY2tTdWJtaXNzaW9uRWxpZ2liaWxpdHkoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMudmFsaWRhdGVBbGxFbGVtZW50TG9hZGVkKCk7XG4gIH1cblxuICBnZW5lcmF0ZVF1ZXN0aW9uQW5zd2VycygpIHtcbiAgICBjb25zdCBleHRyYWN0UXVlc3Rpb25zID0gKFxuICAgICAgZm9ybUVsZW1lbnRzOiBhbnlbXSxcbiAgICAgIHBhcmVudEZvcm1JZDogc3RyaW5nIHwgbnVsbCA9IG51bGwsXG4gICAgICBpc0luU3ViRm9ybTogYm9vbGVhbiA9IGZhbHNlLFxuICAgICAgc3ViRm9ybUluZGV4OiBudW1iZXIgPSAwXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgZm9ybUVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmZvcm1FbGVtZW50LmVsZW1lbnRUeXBlID09PSAnRklMRV9QSUNLRVInKSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShlbGVtZW50LmVsZW1lbnQuYW5zd2VyKSkge1xuICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gaXNJblN1YkZvcm1cbiAgICAgICAgICAgICAgICA/IGAke3BhcmVudEZvcm1JZH1fJHtzdWJGb3JtSW5kZXh9XyR7ZWxlbWVudC5lbGVtZW50LmlkfWBcbiAgICAgICAgICAgICAgICA6IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgIGZpbGU6IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXIsXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBiYXNlUXVlc3Rpb24gPSB7XG4gICAgICAgICAgICAgIHF1ZXN0aW9uSWQ6IGVsZW1lbnQuZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgYW5zd2VyOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgIGFuc3dlcklkOiBlbGVtZW50LmVsZW1lbnQuYW5zd2VySWQgfHwgJycsXG4gICAgICAgICAgICAgIGRlbGV0ZUZpbGVzOiBlbGVtZW50LmVsZW1lbnQuZGVsZXRlRmlsZXMgfHwgW10sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goYmFzZVF1ZXN0aW9uKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHJvdyBvZiBsb2dpYy5yb3dzKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgICAgICByb3cuZ3JpZCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9ybUlkLFxuICAgICAgICAgICAgICAgICAgICBpc0luU3ViRm9ybSxcbiAgICAgICAgICAgICAgICAgICAgc3ViRm9ybUluZGV4XG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goLi4ucmVzdWx0LmFuc3dlcnMpO1xuICAgICAgICAgICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJykge1xuICAgICAgICAgIGNvbnN0IHN1YmZvcm1JZCA9IGVsZW1lbnQuZWxlbWVudC5pZDtcbiAgICAgICAgICBjb25zdCBzdWJtaXNzaW9uSWQgPSBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbklkO1xuXG4gICAgICAgICAgaWYgKGVsZW1lbnQuZWxlbWVudC5wcm9wZXJ0eS5zdWJGb3JtU3RydWN0dXJlID09PSAnc2luZ2xlJykge1xuICAgICAgICAgICAgbGV0IGFsbEFuc3dlcnM6IEFuc3dlcltdID0gW107XG5cbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGV4dHJhY3RlZCA9IGV4dHJhY3RRdWVzdGlvbnMoXG4gICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgc3ViZm9ybUlkLFxuICAgICAgICAgICAgICAgIHRydWUsXG4gICAgICAgICAgICAgICAgZm9ybXMubGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIGV4dHJhY3RlZC5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcikgPT4ge1xuICAgICAgICAgICAgICAgIGFsbEFuc3dlcnMucHVzaCh7IC4uLmFuc3dlciB9KTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgY29uc3Qgc3ViZm9ybTogRm9ybSA9IHtcbiAgICAgICAgICAgICAgZm9ybUlkOiBzdWJmb3JtSWQsXG4gICAgICAgICAgICAgIGRlbGV0ZWRTdWJtaXNzaW9uczogW10sXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgc3VibWlzc2lvbklkOiBzdWJtaXNzaW9uSWQsXG4gICAgICAgICAgICAgICAgICBhbnN3ZXJzOiBhbGxBbnN3ZXJzLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBmb3Jtcy5wdXNoKHN1YmZvcm0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbGVtZW50LnByb3BlcnR5LnN1YkZvcm1TdHJ1Y3R1cmUgPT09ICdtdWx0aXBsZScpIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm1BbnN3ZXJzOiBBbnN3ZXJbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IHN1YmZvcm1RdWVzdGlvbnM6IGFueSA9IHsgYW5zd2VyczogW10gfTtcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHN1YmZvcm1RdWVzdGlvbnMgPSBleHRyYWN0UXVlc3Rpb25zKFxuICAgICAgICAgICAgICAgIHJvdy5ncmlkLFxuICAgICAgICAgICAgICAgIHN1YmZvcm1JZCxcbiAgICAgICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgICAgIGZvcm1zLmxlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ1N1YmZvcm0gPSBmb3Jtcy5maW5kKFxuICAgICAgICAgICAgICAoZm9ybSkgPT4gZm9ybS5mb3JtSWQgPT09IHN1YmZvcm1JZFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuZW5hYmxlSW5saW5lRWRpdGluZyAmJiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zID0gdGhpcy5jbGVhckVtcHR5U3VibWlzc2lvbnMoXG4gICAgICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbGVtZW50LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5mb3JFYWNoKFxuICAgICAgICAgICAgICAoc3VibWlzc2lvbjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgc3VibWlzc2lvbi5hbnN3ZXJzLmZvckVhY2goKGFuc3dlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmh0bWxDb250ZW50O1xuICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYW5zd2VyLmZpbGVzKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBxdWVzdGlvbklkID0gYCR7c3ViZm9ybUlkfV8ke2luZGV4fV8ke2Fuc3dlci5xdWVzdGlvbklkfWA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogcXVlc3Rpb25JZCxcbiAgICAgICAgICAgICAgICAgICAgICBmaWxlOiBhbnN3ZXIuZmlsZXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgYW5zd2VyLmZpbGVzO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgZGVsZXRlIGFuc3dlci5hdHRhY2htZW50cztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YmZvcm06IEZvcm0gPSB7XG4gICAgICAgICAgICAgIGZvcm1JZDogc3ViZm9ybUlkLFxuICAgICAgICAgICAgICBkZWxldGVkU3VibWlzc2lvbnM6IGVsZW1lbnQuZWxlbWVudC5kZWxldGVkU3VibWlzc2lvbnMsXG4gICAgICAgICAgICAgIHN1Ym1pc3Npb25zOiBlbGVtZW50LmVsZW1lbnQuc3VibWlzc2lvbnMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9ybXMucHVzaChzdWJmb3JtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnKSB7XG4gICAgICAgICAgLy8gSGFuZGxlIFF1ZXN0aW9uIEdyb3VwIGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHJvd3NcbiAgICAgICAgICBlbGVtZW50LmVsZW1lbnQucm93cy5mb3JFYWNoKChyb3c6YW55KSA9PiB7XG4gICAgICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTphbnkpID0+IHtcblxuICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgICAgICAgIGxldCBiYXNlUXVlc3Rpb246IGFueTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JpZEl0ZW0uZWxlbWVudD8uZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgICAgICAgIGJhc2VRdWVzdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25JZDogZ3JpZEl0ZW0uZWxlbWVudC5pZCxcbiAgICAgICAgICAgICAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShncmlkSXRlbS5lbGVtZW50LmFuc3dlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcXVlc3Rpb25JZCA9IGlzSW5TdWJGb3JtXG4gICAgICAgICAgICAgICAgICAgICAgPyBgJHtwYXJlbnRGb3JtSWR9XyR7c3ViRm9ybUluZGV4fV8ke2dyaWRJdGVtLmVsZW1lbnQuaWR9YFxuICAgICAgICAgICAgICAgICAgICAgIDogZ3JpZEl0ZW0uZWxlbWVudC5pZDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWxlcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBxdWVzdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgIGZpbGU6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgYmFzZVF1ZXN0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgICBhbnN3ZXI6IGdyaWRJdGVtLmVsZW1lbnQuYW5zd2VyLFxuICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdCkge1xuICAgICAgICAgICAgICAgICAgcXVlc3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAuLi5iYXNlUXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgICAgIGFuc3dlcklkOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlcklkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVGaWxlczogZ3JpZEl0ZW0uZWxlbWVudC5kZWxldGVGaWxlcyB8fCBbXSxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaChiYXNlUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBncmlkSXRlbS5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZXh0cmFjdFF1ZXN0aW9ucyhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LmdyaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvcm1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgaXNJblN1YkZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHN1YkZvcm1JbmRleFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9ucy5wdXNoKC4uLnJlc3VsdC5hbnN3ZXJzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLnB1c2goLi4ucmVzdWx0LmZvcm1zKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ01VTFRJRklFTEQnKSB7XG4gICAgICAgICAgZWxlbWVudC5lbGVtZW50LnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICAgIHJvdy5ncmlkLmZvckVhY2goKGdyaWRJdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGdyaWRJdGVtLmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicpIHtcbiAgICAgICAgICAgICAgICBxdWVzdGlvbnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICBxdWVzdGlvbklkOiBncmlkSXRlbS5lbGVtZW50LmlkLFxuICAgICAgICAgICAgICAgICAgYW5zd2VyOiBncmlkSXRlbS5lbGVtZW50LmFuc3dlciB8fCAnJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgYW5zd2VyczogcXVlc3Rpb25zLCBmb3JtczogZm9ybXMgfTtcbiAgICB9O1xuXG4gICAgY29uc3QgcHJvY2Vzc1BhZ2VzID0gKFxuICAgICAgcGFnZXM6IGFueVtdXG4gICAgKTogeyBhbnN3ZXJzOiBBbnN3ZXJbXTsgZm9ybXM6IEZvcm1bXSB9ID0+IHtcbiAgICAgIGNvbnN0IHF1ZXN0aW9uczogQW5zd2VyW10gPSBbXTtcbiAgICAgIGNvbnN0IGZvcm1zOiBGb3JtW10gPSBbXTtcblxuICAgICAgcGFnZXMuZm9yRWFjaCgocGFnZSkgPT4ge1xuICAgICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBleHRyYWN0UXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgICBxdWVzdGlvbnMucHVzaCguLi5yZXN1bHQuYW5zd2Vycyk7XG4gICAgICAgICAgZm9ybXMucHVzaCguLi5yZXN1bHQuZm9ybXMpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4geyBhbnN3ZXJzOiBxdWVzdGlvbnMsIGZvcm1zOiBmb3JtcyB9O1xuICAgIH07XG5cbiAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzUGFnZXModGhpcy5wYWdlcyk7XG4gICAgdGhpcy5xdWVzdGlvbkFuc3dlcnMgPSB7XG4gICAgICBwYXJlbnRJZDogJycsXG4gICAgICBhbnN3ZXJzOiByZXN1bHQuYW5zd2VycyxcbiAgICAgIGZvcm1zOiByZXN1bHQuZm9ybXMsXG4gICAgfTtcbiAgfVxuXG4gIGNsZWFyRW1wdHlTdWJtaXNzaW9ucyhzdWJtaXNzaW9uczogYW55KSB7XG4gICAgY29uc3Qgbm9uRW1wdHlTdWJtaXNzaW9uczogU3VibWlzc2lvbltdID0gW107XG4gICAgY29uc3QgZW1wdHlTdWJtaXNzaW9uSWRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgc3VibWlzc2lvbnMuZm9yRWFjaCgoc3VibWlzc2lvbjogYW55KSA9PiB7XG4gICAgICBjb25zdCBoYXNWYWx1ZSA9IHN1Ym1pc3Npb24uYW5zd2Vycy5zb21lKFxuICAgICAgICAoYW5zd2VyOiBhbnkpID0+XG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gJycgJiZcbiAgICAgICAgICBhbnN3ZXIuYW5zd2VyICE9PSBudWxsICYmXG4gICAgICAgICAgYW5zd2VyLmFuc3dlciAhPT0gdW5kZWZpbmVkXG4gICAgICApO1xuICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgIG5vbkVtcHR5U3VibWlzc2lvbnMucHVzaChzdWJtaXNzaW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpIHtcbiAgICAgICAgZW1wdHlTdWJtaXNzaW9uSWRzLnB1c2goc3VibWlzc2lvbi5zdWJtaXNzaW9uSWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3VibWlzc2lvbnMgPSBub25FbXB0eVN1Ym1pc3Npb25zO1xuICAgIHJldHVybiBzdWJtaXNzaW9ucztcbiAgfVxuXG4gIHZhbGlkYXRlQWxsRWxlbWVudExvYWRlZCgpOiB7IHN0YXR1czogYm9vbGVhbjsgbWVzc2FnZTogc3RyaW5nIH0ge1xuICAgIGlmICh0aGlzLnBhZ2VzLmxlbmd0aCA8IHRoaXMucGFnZURldGFpbHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOlxuICAgICAgICAgICdQbGVhc2UgZW5zdXJlIGFsbCBwYWdlcyBhcmUgZnVsbHkgdmlzaWJsZSBiZWZvcmUgc3VibWl0dGluZyB0aGUgZm9ybS4nLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmNvbXBsZXRlUGFnZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICB0aGlzLnBhZ2VzLmZvckVhY2goKHA6IGFueSwgaTogbnVtYmVyKSA9PiB7XG4gICAgICBpZihwICYmIEFycmF5LmlzQXJyYXkocC5yb3dzKSl7XG4gICAgICBsZXQgaj0wO1xuICAgICAgcC5yb3dzLmZvckVhY2goKHJvdzogYW55KSA9PiB7XG4gICAgICAgICByb3cuZ3JpZC5mb3JFYWNoKChncmlkSXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgaisrO1xuICAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKFxuICAgICAgICAhcCB8fFxuICAgICAgICAhQXJyYXkuaXNBcnJheShwLnJvd3MpIHx8XG4gICAgICAgIE1hdGguY2VpbChqIC8gMjApIDwgdGhpcy5yb3dTZXRDb3VudFtpXVxuICAgICAgKSB7XG4gICAgICAgIGluY29tcGxldGVQYWdlcy5wdXNoKHRoaXMucGFnZURldGFpbHNbaV0ubmFtZSk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2V7XG4gICAgICBpbmNvbXBsZXRlUGFnZXMucHVzaCh0aGlzLnBhZ2VEZXRhaWxzW2ldLm5hbWUpO1xuICAgIH1cbiAgICB9KTtcblxuXG4gICAgaWYgKGluY29tcGxldGVQYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IGZhbHNlLFxuICAgICAgICBtZXNzYWdlOiBgU29tZSBzZWN0aW9ucyBhcmUgc3RpbGwgbG9hZGluZy4gUGxlYXNlIHNjcm9sbCB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgcGFnZXMgdG8gZW5zdXJlIGFsbCBxdWVzdGlvbnMgYXJlIGxvYWRlZDogJHtpbmNvbXBsZXRlUGFnZXMuam9pbihcbiAgICAgICAgICAnLCAnXG4gICAgICAgICl9LmAsXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHRydWUsXG4gICAgICBtZXNzYWdlOiAnR3JlYXQhIEFsbCBzZWN0aW9ucyBhcmUgY29tcGxldGUuIFlvdSBjYW4gbm93IHN1Ym1pdCB0aGUgZm9ybS4nLFxuICAgIH07XG4gIH1cblxuICBhc3luYyBzdWJtaXRGb3JtKCkge1xuICAgIGlmICghdGhpcy52YWxpZGF0ZUFsbEVsZW1lbnRMb2FkZWQoKS5zdGF0dXMpIHtcbiAgICAgIHRoaXMudG9hc3RyLndhcm5pbmcoJ1BsZWFzZSB3YWl0IGZvciBhbGwgZWxlbWVudHMgdG8gbG9hZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuY2xlYXIoKTtcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmNsZWFyQWxsKCk7XG4gICAgaWYgKHRoaXMuZW5hYmxlR29vZ2xlUmVjYXB0Y2hhKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLmdldFRva2VuKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgJ0Vycm9yIHdoaWxlIGdldHRpbmcgcmVDQVBUQ0hBIHRva2VuOicsXG4gICAgICAgICAgZXJyb3IuZXJyb3I/Lm1lc3NhZ2VcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoJ0ZhaWxlZCB0byB2ZXJpZnkgcmVDQVBUQ0hBLicpO1xuICAgICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXNwb25zZSA9IHRoaXMudmFsaWRhdGVGb3JtKHRoaXMucGFnZXMpO1xuICAgIGNvbnN0IGdldENpcmN1bGFyUmVwbGFjZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBzZWVuID0gbmV3IFdlYWtTZXQoKTtcbiAgICAgIHJldHVybiAoX2tleTogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICBpZiAoc2Vlbi5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzZWVuLmFkZCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9O1xuICAgIHRoaXMuZ2VuZXJhdGVRdWVzdGlvbkFuc3dlcnMoKTtcbiAgICBpZiAodmFsaWRhdGlvblJlc3BvbnNlLmlzVmFsaWQpIHtcbiAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICB0aGlzLnF1ZXN0aW9uQW5zd2Vycy5wYXJlbnRJZCA9IHRoaXMucGFyZW50U3VibWlzc2lvbklkO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKCdqc29uJywgSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVzdGlvbkFuc3dlcnMsIGdldENpcmN1bGFyUmVwbGFjZXIoKSkpO1xuICAgICAgZm9ybURhdGEuYXBwZW5kKFwid2ViaG9va1BheWxvYWRcIiwgSlNPTi5zdHJpbmdpZnkodGhpcy53ZWJob29rUGF5bG9hZEFycmF5KSk7XG4gICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHNlZW5RdWVzdGlvbklkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGNvbnN0IHVuaXF1ZUZpbGVzID0gdGhpcy5maWxlcy5maWx0ZXIoKGZpbGVJdGVtKSA9PiB7XG4gICAgICAgICAgaWYgKHNlZW5RdWVzdGlvbklkcy5oYXMoZmlsZUl0ZW0ucXVlc3Rpb25JZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgc2VlblF1ZXN0aW9uSWRzLmFkZChmaWxlSXRlbS5xdWVzdGlvbklkKTtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdW5pcXVlRmlsZXMuZm9yRWFjaCgoZmlsZUl0ZW0pID0+IHtcbiAgICAgICAgICBmaWxlSXRlbS5maWxlLmZvckVhY2goKGZpbGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpbGVJdGVtLnF1ZXN0aW9uSWQsIGZpbGUuX2ZpbGUpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZvcm1TZXJ2aWNlQ2FsbCA9XG4gICAgICAgIHRoaXMuZWRpdCAmJiB0aGlzLnN1Ym1pc3Npb25JZFxuICAgICAgICAgID8gdGhpcy5mb3JtU2VydmljZS51cGRhdGVGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIHRoaXMuc3VibWlzc2lvbklkLFxuICAgICAgICAgICAgICBmb3JtRGF0YSxcbiAgICAgICAgICAgICAgdGhpcy5yZWNhcHRjaGFUb2tlblxuICAgICAgICAgICAgKVxuICAgICAgICAgIDogdGhpcy5mb3JtU2VydmljZS5zdWJtaXRGb3JtKFxuICAgICAgICAgICAgICB0aGlzLm1vZHVsZU5hbWUsXG4gICAgICAgICAgICAgIGZvcm1EYXRhLFxuICAgICAgICAgICAgICB0aGlzLnJlY2FwdGNoYVRva2VuXG4gICAgICAgICAgICApO1xuXG4gICAgICBmb3JtU2VydmljZUNhbGwuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdHIuc3VjY2VzcyhcbiAgICAgICAgICAgIHRoaXMuZWRpdFxuICAgICAgICAgICAgICA/ICdGb3JtIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5J1xuICAgICAgICAgICAgICA6ICdGb3JtIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHknXG4gICAgICAgICAgKTtcbiAgICAgICAgICB0aGlzLnN1Ym1pdC5lbWl0KCdzdWNjZXNzJyk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5jbGVhckFsbCgpO1xuICAgICAgICAgIHRoaXMuZmluZFF1ZXN0aW9uUGFnZUluZGV4KHRoaXMucGFyc2VFcnJvcnNUb01hcChlcnJvci5lcnJvci5tZXNzYWdlKSk7XG4gICAgICAgICAgICAgIHRoaXMuY3VycmVudFBhZ2VJbmRleCA9IHRoaXMucGFnZXMubGVuZ3RoLTE7XG4gICAgICAgICAgICB0aGlzLm5hdmlnYXRlVG9GaXJzdEVycm9yKCk7XG4gICAgICAgICAgdGhpcy5zdWJtaXNzaW9uSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZUdvb2dsZVJlY2FwdGNoYSkge1xuICAgICAgICAgICAgdGhpcy5nZXRUb2tlbigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB0aGlzLnRvYXN0ci5lcnJvcih2YWxpZGF0aW9uUmVzcG9uc2UubWVzc2FnZSk7XG4gICAgICB0aGlzLnN1Ym1pc3Npb25JblByb2dyZXNzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiBwYXJzZUVycm9yc1RvTWFwKGVycm9yU3RyaW5nOiBzdHJpbmcpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBlcnJvck1hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgLy8gQ29udmVydCB0aGUgaW5jb3JyZWN0IGZvcm1hdCB0byBhIHZhbGlkIG9iamVjdCBzdHJ1Y3R1cmVcbiAgICBlcnJvclN0cmluZ1xuICAgICAgICAucmVwbGFjZSgvW3t9XS9nLCAnJykgLy8gUmVtb3ZlIGN1cmx5IGJyYWNlc1xuICAgICAgICAuc3BsaXQoJywgJykgLy8gU3BsaXQga2V5LXZhbHVlIHBhaXJzXG4gICAgICAgIC5mb3JFYWNoKHBhaXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgICAgICAgaWYgKGtleSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWFwLnNldChrZXkudHJpbSgpLCB2YWx1ZS50cmltKCkpOyAvLyBTdG9yZSBpbiBNYXBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gZXJyb3JNYXA7XG59XG4gIGFzeW5jIG5hdmlnYXRlVG9GaXJzdEVycm9yKCkge1xuICAgIGNvbnN0IGZpcnN0RXJyb3IgPSB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLmdldEZpcnN0SW52YWxpZCgpO1xuICAgIGlmICghZmlyc3RFcnJvcikgcmV0dXJuO1xuXG4gICAgY29uc3QgZWxlbWVudElkID0gYHF1ZXN0aW9uLSR7Zmlyc3RFcnJvci5pZH1gO1xuXG4gICAgdGhpcy5yZXRyeUNvdW50ID0gMDtcblxuICAgIC8vIENoYW5nZSBwYWdlIGlmIG5lZWRlZFxuICAgIGlmICh0aGlzLmN1cnJlbnRQYWdlSW5kZXggIT09IGZpcnN0RXJyb3IucGFnZUluZGV4KSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBmaXJzdEVycm9yLnBhZ2VJbmRleDtcbiAgICAgIGlmKHRoaXMuY3VycmVudFBhZ2VJbmRleCsxIDwgdGhpcy5wYWdlRGV0YWlscy5sZW5ndGgpe1xuICAgICAgICB0aGlzLm5leHRQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgrMV07XG4gICAgICB9XG4gICAgICBpZih0aGlzLmN1cnJlbnRQYWdlSW5kZXgtMT49MCl7XG4gICAgICAgIHRoaXMucHJldmlvdXNQYWdlID0gdGhpcy5wYWdlRGV0YWlsc1t0aGlzLmN1cnJlbnRQYWdlSW5kZXgtMV07XG4gICAgICB9XG5cbiAgICAgIHRoaXMuZGVib3VuY2UoKCkgPT4gdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCksIDEwMCk7XG4gICAgICBpZih0aGlzLm5hdmlnYXRpb24gPT09ICdUQUInKVxuICAgICAgdGhpcy5jaGlsZC50cmlnZ2VyRnVuY3Rpb24oZmlyc3RFcnJvci5wYWdlSW5kZXgpO1xuICAgIH1cblxuXG4gICAgYXdhaXQgdGhpcy5zY3JvbGxUb0VsZW1lbnRXaXRoUmV0cnkoZWxlbWVudElkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2Nyb2xsVG9FbGVtZW50V2l0aFJldHJ5KGVsZW1lbnRJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5yZXRyeUNvdW50Kys7XG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRJZCk7XG5cbiAgICBpZiAoZWxlbWVudCkge1xuICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHRoaXMuc2Nyb2xsQW5kRm9jdXMoZWxlbWVudCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJldHJ5Q291bnQgPCB0aGlzLm1heFJldHJpZXMpIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcbiAgICAgIHJldHVybiB0aGlzLnNjcm9sbFRvRWxlbWVudFdpdGhSZXRyeShlbGVtZW50SWQpO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoYEVsZW1lbnQgJHtlbGVtZW50SWR9IG5vdCBmb3VuZCBhZnRlciAke3RoaXMubWF4UmV0cmllc30gYXR0ZW1wdHNgKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy5mYWxsYmFja1Njcm9sbCgpKTtcbiAgfVxuXG4gIHByaXZhdGUgc2Nyb2xsQW5kRm9jdXMoZWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICBlbGVtZW50LnNjcm9sbEludG9WaWV3KHtcbiAgICAgIGJlaGF2aW9yOiAnc21vb3RoJyxcbiAgICAgIGJsb2NrOiAnY2VudGVyJyxcbiAgICAgIGlubGluZTogJ25lYXJlc3QnXG4gICAgfSk7XG5cbiAgICBjb25zdCBmb2N1c2FibGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIGJ1dHRvbiwgW3RhYmluZGV4XTpub3QoW3RhYmluZGV4PVwiLTFcIl0pJ1xuICAgICkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgZm9jdXNhYmxlPy5mb2N1cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBmYWxsYmFja1Njcm9sbCgpIHtcbiAgICBjb25zdCBwYWdlRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLSR7dGhpcy5jdXJyZW50UGFnZUluZGV4fWApO1xuICAgIHBhZ2VFbGVtZW50Py5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnYXV0bycgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlYm91bmNlKGZ1bmM6ICgpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVyKTtcbiAgICB0aGlzLmRlYm91bmNlVGltZXIgPSBzZXRUaW1lb3V0KGZ1bmMsIGRlbGF5KTtcbiAgfVxuLy8gICBleHRyYWN0SWQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4vLyAgICAgY29uc3QgbWF0Y2ggPSBtZXNzYWdlLm1hdGNoKC9bMC05YS1mQS1GLV17MzZ9Lyk7XG4vLyAgICAgcmV0dXJuIG1hdGNoID8gbWF0Y2hbMF0gOiBudWxsO1xuLy8gfVxuXG4vLyAgcmVtb3ZlSWQobWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbi8vICAgcmV0dXJuIG1lc3NhZ2UucmVwbGFjZSgvWzAtOWEtZkEtRi1dezM2fSQvLCBcIlwiKS50cmltKCk7XG4vLyB9XG5cblxuZmluZFF1ZXN0aW9uUGFnZUluZGV4KHF1ZXN0aW9uRXJyb3JzOiBNYXA8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gIGZvciAobGV0IHBhZ2VJbmRleCA9IDA7IHBhZ2VJbmRleCA8IHRoaXMucGFnZXMubGVuZ3RoOyBwYWdlSW5kZXgrKykge1xuICAgIGNvbnN0IHBhZ2UgPSB0aGlzLnBhZ2VzW3BhZ2VJbmRleF07XG5cbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGVsZW1lbnQsIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5wcml2YXRlIGNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGVsZW1lbnQ6IGFueSwgcXVlc3Rpb25FcnJvcnM6IE1hcDxzdHJpbmcsIHN0cmluZz4sIHBhZ2VJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gIGlmIChlbGVtZW50LmVsZW1lbnQuaWQgJiYgcXVlc3Rpb25FcnJvcnMuaGFzKGVsZW1lbnQuZWxlbWVudC5pZCkpIHtcbiAgICB0aGlzLnZhbGlkYXRpb25TZXJ2aWNlLnNldEludmFsaWQoZWxlbWVudC5lbGVtZW50LmlkLCBxdWVzdGlvbkVycm9ycy5nZXQoZWxlbWVudC5lbGVtZW50LmlkKSEsIHBhZ2VJbmRleCk7XG4gIH1cblxuICAvLyBIYW5kbGUgc3ViZm9ybXMgcmVjdXJzaXZlbHlcbiAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICYmIGVsZW1lbnQuZWxlbWVudC5yb3dzKSB7XG4gICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgdGhpcy5jaGVja0FuZFN0b3JlSW52YWxpZFF1ZXN0aW9ucyhncmlkSXRlbSwgcXVlc3Rpb25FcnJvcnMsIHBhZ2VJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnIHx8IGVsZW1lbnQuZW50aXR5VHlwZT09PSdNVUxUSUZJRUxEJykgJiYgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICBmb3IgKGNvbnN0IHJvdyBvZiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgZm9yIChjb25zdCBncmlkSXRlbSBvZiByb3cuZ3JpZCkge1xuICAgICAgICB0aGlzLmNoZWNrQW5kU3RvcmVJbnZhbGlkUXVlc3Rpb25zKGdyaWRJdGVtLCBxdWVzdGlvbkVycm9ycywgcGFnZUluZGV4KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBIYW5kbGUgbG9naWMtYmFzZWQgY29uZGl0aW9ucyByZWN1cnNpdmVseVxuICBpZiAoKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykgJiYgZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgZm9yIChjb25zdCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgIGlmIChsb2dpYy5zaG93TG9naWMpIHtcbiAgICAgICAgZm9yIChjb25zdCByb3cgb2YgbG9naWMucm93cykge1xuICAgICAgICAgIGZvciAoY29uc3QgZ3JpZEl0ZW0gb2Ygcm93LmdyaWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tBbmRTdG9yZUludmFsaWRRdWVzdGlvbnMoZ3JpZEl0ZW0sIHF1ZXN0aW9uRXJyb3JzLCBwYWdlSW5kZXgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mb2N1c1F1ZXN0aW9uRWxlbWVudChjb250YWluZXI6IEhUTUxFbGVtZW50KSB7XG4gIC8vIEZpbmQgZmlyc3QgZm9jdXNhYmxlIGVsZW1lbnQgd2l0aGluIHRoZSBxdWVzdGlvblxuICBjb25zdCBmb2N1c2FibGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEsIFt0YWJpbmRleF0nKTtcbiAgaWYgKGZvY3VzYWJsZSkge1xuICAgIChmb2N1c2FibGUgYXMgSFRNTEVsZW1lbnQpLmZvY3VzKCk7XG4gIH0gZWxzZSB7XG4gICAgY29udGFpbmVyLmZvY3VzKCk7XG4gIH1cbn1cbiAgdmFsaWRhdGVGb3JtKGpzb25EYXRhOiBhbnkpOiB7XG4gICAgaXNWYWxpZDogYm9vbGVhbjtcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgcGFnZUluZGV4OiBudW1iZXIgfCAwO1xuICB9IHtcbiAgICBjb25zdCB2YWxpZGF0ZVF1ZXN0aW9ucyA9IChcbiAgICAgIGZvcm1FbGVtZW50czogYW55W11cbiAgICApOiB7IGlzVmFsaWQ6IGJvb2xlYW47IG1lc3NhZ2U6IHN0cmluZzsgcGFnZUluZGV4OiBudW1iZXIgfCAwIH0gPT4ge1xuICAgICAgZm9yIChsZXQgZWxlbWVudCBvZiBmb3JtRWxlbWVudHMpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1FVRVNUSU9OJykge1xuICAgICAgICAgIGNvbnN0IHJlcXVpcmVkID0gZWxlbWVudC5lbGVtZW50LnJlcXVpcmVkO1xuICAgICAgICAgIGNvbnN0IGFuc3dlciA9IGVsZW1lbnQuZWxlbWVudC5hbnN3ZXI7XG4gICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IGVsZW1lbnQuZWxlbWVudC52YWxpZGF0aW9uO1xuICAgICAgICAgIGlmIChlbGVtZW50LmVsZW1lbnQuZm9ybUVsZW1lbnQuZWxlbWVudFR5cGUgPT09ICdGSUxFX1BJQ0tFUicpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBlbGVtZW50LmVsZW1lbnQuYXR0YWNobWVudHM7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCghYW5zd2VyIHx8IGFuc3dlcj8ubGVuZ3RoID09PSAwKSAmJiAoIWF0dGFjaG1lbnQgfHxhdHRhY2htZW50Py5sZW5ndGggPT0gMCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlJlcXVpcmVkIGZpbGUgcXVlc3Rpb24gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLlwiKTtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiBgRm9ybSBpcyBpbnZhbGlkIC0gUmVxdWlyZWQgZmlsZSBxdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaGFzIG5vIGZpbGVzIHVwbG9hZGVkLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAocmVxdWlyZWQpIHtcbiAgICAgICAgICAgICAgaWYgKCFhbnN3ZXIgfHwgT2JqZWN0LmtleXMoYW5zd2VyKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuc2V0KGVsZW1lbnQuZWxlbWVudC5pZCxcIlF1ZXN0aW9uIGlzIHJlcXVpcmVkIGJ1dCBubyBhbnN3ZXIgcHJvdmlkZWQuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgcmVxdWlyZWQgYnV0IG5vIGFuc3dlciBwcm92aWRlZC5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodmFsaWRhdGlvbj09PWZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJRdWVzdGlvbiBpcyByZXF1aXJlZCBidXQgdmFsaWRhdGlvbiBpcyBmYWxzZS5cIik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogYEZvcm0gaXMgaW52YWxpZCAtIFF1ZXN0aW9uICR7ZWxlbWVudC5lbGVtZW50LnF1ZXN0aW9uTnVtYmVyfSBpcyByZXF1aXJlZCBidXQgdmFsaWRhdGlvbiBpcyBmYWxzZS5gLFxuICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXJlcXVpcmVkICYmIGFuc3dlciAmJiBPYmplY3Qua2V5cyhhbnN3ZXIpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaWYgKHZhbGlkYXRpb24gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zLnNldChlbGVtZW50LmVsZW1lbnQuaWQsXCJRdWVzdGlvbiBpcyBub3QgcmVxdWlyZWQgYnV0IGFuc3dlciBwcm92aWRlZCB3aXRoIHZhbGlkYXRpb24gZmFsc2UuXCIpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGBGb3JtIGlzIGludmFsaWQgLSBRdWVzdGlvbiAke2VsZW1lbnQuZWxlbWVudC5xdWVzdGlvbk51bWJlcn0gaXMgbm90IHJlcXVpcmVkIGJ1dCBhbnN3ZXIgcHJvdmlkZWQgd2l0aCB2YWxpZGF0aW9uIGZhbHNlLmAsXG4gICAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBsb2dpYyBvZiBlbGVtZW50LmVsZW1lbnQuY2hpbGRMb2dpY3MpIHtcbiAgICAgICAgICAgICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUXVlc3Rpb25zKGxvZ2ljLnJvd3MpO1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gIGVsc2UgaWYgKGVsZW1lbnQuZW50aXR5VHlwZSA9PT0gJ1NVQkZPUk0nICkge1xuICAgICAgICAvLyAgIGlmIChlbGVtZW50LmVsZW1lbnQucHJvcGVydHkuc3ViRm9ybVN0cnVjdHVyZSA9PT0gJ211bHRpcGxlJykge1xuICAgICAgICAvLyAgICAgY29uc3QgZGF0YSA9IGVsZW1lbnQuZWxlbWVudC5yb3dzO1xuICAgICAgICAvLyAgICAgY29uc3QgcmVxdWlyZWRRdWVzdGlvbklkcyA9IGRhdGFcbiAgICAgICAgLy8gICAgICAgLmZsYXRNYXAoKHJvdzogYW55KSA9PiByb3cuZ3JpZCkgLy8gRXh0cmFjdGluZyBncmlkIGl0ZW1zIGZyb20gZWFjaCBvYmplY3RcbiAgICAgICAgLy8gICAgICAgLmZpbHRlcigoaXRlbTogYW55KSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIGl0ZW0uZWxlbWVudC5yZXF1aXJlZDsgLy8gRW5zdXJpbmcgdGhlIGZpbHRlciBwcm9wZXJseSBjaGVja3MgJ3JlcXVpcmVkJ1xuICAgICAgICAvLyAgICAgICB9KVxuICAgICAgICAvLyAgICAgICAubWFwKChpdGVtOiBhbnkpID0+IGl0ZW0uZWxlbWVudC5pZCk7XG5cbiAgICAgICAgLy8gICAgIGlmIChyZXF1aXJlZFF1ZXN0aW9uSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gICAgICAgaWYgKGVsZW1lbnQ/LmVsZW1lbnQ/LnN1Ym1pc3Npb25zPy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vICAgICAgICAgY29uc3QgYXJlUmVxdWlyZWRRdWVzdGlvbnNBbnN3ZXJlZCA9IHJlcXVpcmVkUXVlc3Rpb25JZHMuZXZlcnkoXG4gICAgICAgIC8vICAgICAgICAgICAocmVxdWlyZWRJZDogc3RyaW5nKSA9PiB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nQW5zd2VyID0gZWxlbWVudC5lbGVtZW50LnN1Ym1pc3Npb25zXG4gICAgICAgIC8vICAgICAgICAgICAgICAgLmZsYXRNYXAoKHN1YjogYW55KSA9PiBzdWIuYW5zd2VycylcbiAgICAgICAgLy8gICAgICAgICAgICAgICAuZmluZCgoYW5zOiBhbnkpID0+IGFucy5xdWVzdGlvbklkID09PSByZXF1aXJlZElkKTtcblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAoIW1hdGNoaW5nQW5zd2VyKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgY29uc3QgYSA9IG1hdGNoaW5nQW5zd2VyLmFuc3dlcjtcblxuICAgICAgICAvLyAgICAgICAgICAgICBpZiAodHlwZW9mIGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgcmV0dXJuIGEudHJpbSgpICE9PSAnJztcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgICAgcmV0dXJuIGEubGVuZ3RoID4gMDtcbiAgICAgICAgLy8gICAgICAgICAgICAgfVxuXG4gICAgICAgIC8vICAgICAgICAgICAgIGlmIChhICE9PSBudWxsICYmIHR5cGVvZiBhID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyAgICAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhKS5sZW5ndGggPiAwO1xuICAgICAgICAvLyAgICAgICAgICAgICB9XG5cbiAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIGEgIT09IG51bGwgJiYgYSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICAvLyAgICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICAgICk7XG5cbiAgICAgICAgLy8gICAgICAgICBpZiAoIWFyZVJlcXVpcmVkUXVlc3Rpb25zQW5zd2VyZWQpIHtcbiAgICAgICAgLy8gICAgICAgICAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IG5vIGFuc3dlciBwcm92aWRlZC5cIik7XG4gICAgICAgIC8vICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAvLyAgICAgICAgICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgICAgLy8gICAgICAgICAgICAgbWVzc2FnZTpcbiAgICAgICAgLy8gICAgICAgICAgICAgICAnRm9ybSBpcyBpbnZhbGlkIC0gUXVlc3Rpb24gaXMgcmVxdWlyZWQgYnV0IG5vIGFuc3dlciBwcm92aWRlZC4nLFxuICAgICAgICAvLyAgICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgIC8vICAgICAgICAgICB9O1xuICAgICAgICAvLyAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnJywgcGFnZUluZGV4OiAwIH07XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgICB9XG4gICAgICAgIC8vICAgICAgIC8vIGVsc2Uge1xuICAgICAgICAvLyAgICAgICAvLyAgIHRoaXMuaW5WYWxpZFF1ZXN0aW9ucy5zZXQoZWxlbWVudC5lbGVtZW50LmlkLFwiTm8gc3VibWlzc2lvbnMgcHJvdmlkZWQgZm9yIHJlcXVpcmVkIHF1ZXN0aW9ucy5cIik7XG4gICAgICAgIC8vICAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgICAgLy8gICAgICAgLy8gICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgICAvLyAgICAgbWVzc2FnZTpcbiAgICAgICAgLy8gICAgICAgLy8gICAgICAgJ0Zvcm0gaXMgaW52YWxpZCAtIE5vIHN1Ym1pc3Npb25zIHByb3ZpZGVkIGZvciByZXF1aXJlZCBxdWVzdGlvbnMuJyxcbiAgICAgICAgLy8gICAgICAgLy8gICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgLy8gICAgICAgLy8gICB9O1xuICAgICAgICAvLyAgICAgICAvLyB9XG4gICAgICAgIC8vICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAgICAgICByZXR1cm4geyBpc1ZhbGlkOiB0cnVlLCBtZXNzYWdlOiAnJywgcGFnZUluZGV4OiAwIH07XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIGlmIChlbGVtZW50LmVsZW1lbnQucm93cykge1xuICAgICAgICAvLyAgICAgICBjb25zdCByZXN1bHRzID0gZWxlbWVudC5lbGVtZW50LnJvd3MubWFwKChyb3c6IGFueSkgPT4ge1xuICAgICAgICAvLyAgICAgICAgIGNvbnN0IHZhbGlkYXRpb25SZXN1bHQgPSB2YWxpZGF0ZVF1ZXN0aW9ucyhyb3cuZ3JpZCk7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1bHQ7XG4gICAgICAgIC8vICAgICAgIH0pO1xuICAgICAgICAvLyAgICAgICBjb25zdCBpc1ZhbGlkID0gcmVzdWx0cy5ldmVyeSgocmVzOiBhbnkpID0+IHJlcy5pc1ZhbGlkKTtcbiAgICAgICAgLy8gICAgICAgaWYgKCFpc1ZhbGlkKSB7XG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIC8vICAgICAgIH1cbiAgICAgICAgLy8gICAgICAgLy8gY29uc3QgcmVzdWx0ID0gIGVsZW1lbnQuZWxlbWVudC5yb3dzLmZsYXRNYXAoKHJvdzogYW55KSA9PlxuICAgICAgICAvLyAgICAgICAvLyAgIHtcbiAgICAgICAgLy8gICAgICAgLy8gICAgIHZhbGlkYXRlUXVlc3Rpb25zKHJvdy5ncmlkKTtcbiAgICAgICAgLy8gICAgICAgLy8gICAgIGlmICghcmVzdWx0LmlzVmFsaWQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vICAgICAgIC8vIH0pXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vICAgfVxuICAgICAgICAvLyB9XG4gICAgICAgIGVsc2UgIGlmICgoZWxlbWVudC5lbnRpdHlUeXBlID09PSAnUVVFU1RJT05fR1JPVVAnIHx8IGVsZW1lbnQuZW50aXR5VHlwZT09PSdNVUxUSUZJRUxEJykmJiBlbGVtZW50LmVsZW1lbnQucm93cykge1xuXG4gICAgICAgICAgZm9yIChjb25zdCByb3cgb2YgZWxlbWVudC5lbGVtZW50LnJvd3MpIHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc1ZhbGlkICYmIGVsZW1lbnQuZW50aXR5VHlwZSE9J01VTFRJRklFTEQnKSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHsgaXNWYWxpZDogdHJ1ZSwgbWVzc2FnZTogJycsIHBhZ2VJbmRleDogMCB9O1xuICAgIH07XG5cbiAgICBmb3IgKGxldCBwYWdlSW5kZXggPSAwOyBwYWdlSW5kZXggPCBqc29uRGF0YS5sZW5ndGg7IHBhZ2VJbmRleCsrKSB7XG4gICAgICBjb25zdCBwYWdlID0ganNvbkRhdGFbcGFnZUluZGV4XTtcbiAgICAgIGZvciAobGV0IHJvdyBvZiBwYWdlLnJvd3MpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdmFsaWRhdGVRdWVzdGlvbnMocm93LmdyaWQpO1xuICAgICAgICB0aGlzLmluVmFsaWRRdWVzdGlvbnMuZm9yRWFjaCgobWVzc2FnZTogc3RyaW5nLCBpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uU2VydmljZS5zZXRJbnZhbGlkKGlkLG1lc3NhZ2UsIHBhZ2VJbmRleCk7XG59KTtcbiAgICAgICAgdGhpcy5pblZhbGlkUXVlc3Rpb25zPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICAvLyBpZiAoIXJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICAgIC8vICAgcmV0dXJuIHtcbiAgICAgICAgLy8gICAgIGlzVmFsaWQ6IGZhbHNlLFxuICAgICAgICAvLyAgICAgbWVzc2FnZTogYFBhZ2UgJHtwYWdlSW5kZXggKyAxfTogJHtyZXN1bHQubWVzc2FnZX1gLFxuICAgICAgICAvLyAgICAgcGFnZUluZGV4OiBwYWdlSW5kZXgsXG4gICAgICAgIC8vICAgfTtcbiAgICAgICAgLy8gfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmN1cnJlbnRQYWdlSW5kZXggPSBqc29uRGF0YS5sZW5ndGgtMTtcbiAgICBpZiAodGhpcy52YWxpZGF0aW9uU2VydmljZS5nZXRGaXJzdEludmFsaWQoKSkge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvRmlyc3RFcnJvcigpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaXNWYWxpZDogZmFsc2UsXG4gICAgICAgIG1lc3NhZ2U6IGBQYWdlYCxcbiAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzVmFsaWQ6IHRydWUsXG4gICAgICBtZXNzYWdlOiAnRm9ybSBpcyB2YWxpZC4nLFxuICAgICAgcGFnZUluZGV4OiAwLFxuICAgIH07XG4gIH1cblxuICB1cGRhdGVTdWJGb3JtV2l0aFN1Ym1pc3Npb25zKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnVwZGF0ZVN1YkZvcm0odGhpcy5wYWdlcywgZXZlbnQpO1xuICB9XG5cbiAgdXBkYXRlU3ViRm9ybSA9IChwYWdlczogYW55W10sIHVwZGF0ZWRTdWJGb3JtOiBhbnkpID0+IHtcbiAgICBwYWdlcy5mb3JFYWNoKChwYWdlKSA9PiB7XG4gICAgICBwYWdlLnJvd3MuZm9yRWFjaCgocm93OiBhbnkpID0+IHtcbiAgICAgICAgcm93LmdyaWQuZm9yRWFjaCgoZWxlbWVudDogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZWxlbWVudC5lbnRpdHlUeXBlID09PSAnU1VCRk9STScgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5pZCA9PT0gdXBkYXRlZFN1YkZvcm0uZm9ybUlkXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGV4aXN0aW5nIHN1YmZvcm0gd2l0aCB0aGUgbmV3IGRhdGFcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudCA9IHVwZGF0ZWRTdWJGb3JtO1xuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdTVUJGT1JNJyAmJlxuICAgICAgICAgICAgZWxlbWVudC5lbGVtZW50LmlkICE9PSB1cGRhdGVkU3ViRm9ybS5mb3JtSWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSBtdWx0aXBsZSBzdWJmb3JtcyBsb2dpYyBoZXJlIGlmIG5lZWRlZFxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBlbGVtZW50LmVudGl0eVR5cGUgPT09ICdRVUVTVElPTicgJiZcbiAgICAgICAgICAgIGVsZW1lbnQuZWxlbWVudC5jaGlsZExvZ2ljc1xuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVjdXJzaXZlbHkgdXBkYXRlIGNoaWxkIGxvZ2ljc1xuICAgICAgICAgICAgLy8gZWxlbWVudC5lbGVtZW50LmNoaWxkTG9naWNzLmZvckVhY2goKGxvZ2ljOiBhbnkpID0+IHtcbiAgICAgICAgICAgIC8vICAgaWYgKGxvZ2ljLnNob3dMb2dpYykge1xuICAgICAgICAgICAgLy8gICAgIHRoaXMudXBkYXRlU3ViRm9ybShsb2dpYy5yb3dzLCB1cGRhdGVkU3ViRm9ybSk7XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuXG4gZXh0cmFjdEdyb3VwZWRXZWJob29rRGF0YSh3ZWJob29rczogYW55W10pOiB7XG4gIGhlYWRlcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGF0aFZhcmlhYmxlczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcmVxdWVzdEJvZGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn0ge1xuICBjb25zdCByZXN1bHQ6IHtcbiAgICBoZWFkZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgICBwYXRoVmFyaWFibGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIHJlcXVlc3RCb2RpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIH0gPSB7XG4gICAgaGVhZGVyczoge30sXG4gICAgcGFyYW1zOiB7fSxcbiAgICBwYXRoVmFyaWFibGVzOiB7fSxcbiAgICByZXF1ZXN0Qm9kaWVzOiB7fVxuICB9O1xuXG4gIGZvciAoY29uc3Qgd2ViaG9vayBvZiB3ZWJob29rcyA/PyBbXSkge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5oZWFkZXJzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5oZWFkZXJzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucGFyYW1zID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wYXJhbXNbaXRlbS5rZXlOYW1lXSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgaXRlbSBvZiB3ZWJob29rPy5wYXRoVmFyaWFibGVzID8/IFtdKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVGcm9tU3RvcmFnZShpdGVtLnZhbHVlU291cmNlLCBpdGVtLmtleU5hbWUpO1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5wYXRoVmFyaWFibGVzW2l0ZW0ua2V5TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2ViaG9vaz8ucmVxdWVzdEJvZGllcyA/PyBbXSkge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmdldFZhbHVlRnJvbVN0b3JhZ2UoaXRlbS52YWx1ZVNvdXJjZSwgaXRlbS5rZXlOYW1lKTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXN1bHQucmVxdWVzdEJvZGllc1tpdGVtLmtleU5hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuXG5nZXRWYWx1ZUZyb21TdG9yYWdlKHNvdXJjZTogJ0xPQ0FMX1NUT1JBR0UnIHwgJ1NFU1NJT05fU1RPUkFHRScsIGtleTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG5cbiAgaWYgKHNvdXJjZSA9PT0gJ0xPQ0FMX1NUT1JBR0UnKSByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oa2V5KTtcbiAgaWYgKHNvdXJjZSA9PT0gJ1NFU1NJT05fU1RPUkFHRScpIHJldHVybiBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gIHJldHVybiBudWxsO1xufVxuXG5cblxufVxuIiwiPGRpdiBjbGFzcz1cIm91dGVyLWNvbnRhaW5lclwiPlxuICBcbiAgXG4gIDxkaXYgY2xhc3M9XCJoZWFkIGNvbnRhaW5lclwiICpuZ0lmPVwiIXNraXBNYXJnaW5cIj5cbiAgICA8bGliLWhlYWRlciBbbmFtZV09XCJuYW1lXCIgW3NraXBNYXJnaW5dPVwic2tpcE1hcmdpblwiPjwvbGliLWhlYWRlcj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJib2R5XCIgW25nQ2xhc3NdPVwieyAnc2tpcC1tYXJnaW4nOiBza2lwTWFyZ2luLGNvbnRhaW5lcjogIXNraXBNYXJnaW59XCI+XG4gICAgXG4gICAgPGxpYi1zdWJtaXNzaW9uLWNvbnRhaW5lciBbcGFyZW50UXVlc3Rpb25BbnN3ZXJzXT1cInBhcmVudFF1ZXN0aW9uQW5zd2Vyc1wiXG4gICAgKm5nSWY9XCJwYXJlbnRRdWVzdGlvbkFuc3dlcnNcIj48L2xpYi1zdWJtaXNzaW9uLWNvbnRhaW5lcj5cbiAgICBcbiAgICA8bGliLW5hdmlnYXRpb24tdGFic1xuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdUQUInXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW3BhZ2VzXT1cInBhZ2VzXCJcbiAgICAgIFtjdXJyZW50UGFnZUluZGV4XT1cImN1cnJlbnRQYWdlSW5kZXhcIlxuICAgICAgKHBhZ2VDaGFuZ2VkKT1cInNldEN1cnJlbnRQYWdlKCRldmVudClcIlxuICAgICAgKHN1Ym1pdEVtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgIFtwYWdlRGV0YWlsc109XCJwYWdlRGV0YWlsc1wiXG4gICAgICBbZWxpZ2libGVGb3JTdWJtaXNzaW9uXT1cImVsaWdpYmxlRm9yU3VibWlzc2lvblwiXG4gICAgICBbZWRpdF09XCJlZGl0XCJcbiAgICAgIFthY2NlcHRlZExhbmd1YWdlXSA9IFwiYWNjZXB0ZWRMYW5ndWFnZVwiXG4gICAgICBbcHJpbWFyeUNvbG9yXT1cInByaW1hcnlDb2xvclwiXG4gICAgICBbc2Vjb25kYXJ5Q29sb3JdPVwic2Vjb25kYXJ5Q29sb3JcIlxuICAgICAgW21hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXT1cIm1hcmtBbGxRdWVzdGlvbnNBc1JlcXVpcmVkXCJcbiAgICAgIChzdWJGb3JtQ2hhbmdlKT1cInVwZGF0ZVN1YkZvcm1XaXRoU3VibWlzc2lvbnMoJGV2ZW50KVwiXG4gICAgICAocm93U2V0SW5kZXgpPVwibG9hZE1vcmVEYXRhKCRldmVudClcIlxuICAgID48L2xpYi1uYXZpZ2F0aW9uLXRhYnM+XG4gICAgPGxpYi1uZXh0LXByZXYtbmF2aWdhdGlvblxuICAgICAgKm5nSWY9XCJuYXZpZ2F0aW9uID09ICdORVhUX0FORF9QUkVWSU9VU19CVVRUT04nXCJcbiAgICAgIFtza2lwTWFyZ2luXT1cInNraXBNYXJnaW5cIlxuICAgICAgW2N1cnJlbnRQYWdlSW5kZXhdPVwiY3VycmVudFBhZ2VJbmRleFwiXG4gICAgICBbcGFnZURldGFpbHNdPVwicGFnZURldGFpbHNcIlxuICAgICAgKHJvd1NldEluZGV4KT1cImxvYWRNb3JlRGF0YSgkZXZlbnQpXCJcbiAgICAgIFtwYWdlc109XCJwYWdlc1wiXG4gICAgICBbcHJldmlvdXNQYWdlXT1cInByZXZpb3VzUGFnZVwiXG4gICAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgW3ByaW1hcnlDb2xvcl09XCJwcmltYXJ5Q29sb3JcIlxuICAgICAgW3NlY29uZGFyeUNvbG9yXT1cInNlY29uZGFyeUNvbG9yXCJcbiAgICAgIFtuZXh0UGFnZV09XCJuZXh0UGFnZVwiXG4gICAgICAobmF2aWdhdGVOZXh0KT1cIm5hdmlnYXRlVG9OZXh0UGFnZSgpXCJcbiAgICAgIChuYXZpZ2F0ZVByZXZpb3VzKT1cIm5hdmlnYXRlVG9QcmV2aW91c1BhZ2UoKVwiXG4gICAgICBbYWNjZXB0ZWRMYW5ndWFnZV0gPSBcImFjY2VwdGVkTGFuZ3VhZ2VcIlxuICAgICAgKHN1Ym1pdEVtaXQpPVwic3VibWl0Rm9ybSgpXCJcbiAgICAgIFtlZGl0XT1cImVkaXRcIlxuICAgICAgKHN1YkZvcm1DaGFuZ2UpPVwidXBkYXRlU3ViRm9ybVdpdGhTdWJtaXNzaW9ucygkZXZlbnQpXCJcbiAgICA+PC9saWItbmV4dC1wcmV2LW5hdmlnYXRpb24+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|