@eo-sdk/client 11.14.28 → 11.14.30
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/app/eo-framework/app-shell/app-bar/app-search/app-search.component.d.ts.map +1 -1
- package/app/eo-framework/result-list/result-list.component.d.ts.map +1 -1
- package/esm2022/app/eo-client/about-state/about-state.component.mjs +3 -3
- package/esm2022/app/eo-framework/app-shell/app-bar/app-search/app-search.component.mjs +13 -2
- package/esm2022/app/eo-framework/object-form/object-form-helper.service.mjs +2 -2
- package/esm2022/app/eo-framework/result-list/result-list.component.mjs +6 -2
- package/fesm2022/eo-sdk-client.mjs +20 -5
- package/fesm2022/eo-sdk-client.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -504,7 +504,18 @@ let AppSearchComponent = class AppSearchComponent {
|
|
|
504
504
|
this.appSearchService
|
|
505
505
|
.autocomplete(evt)
|
|
506
506
|
.pipe(switchMap(res => observableFrom(res).pipe(pluck('value'))))
|
|
507
|
-
.subscribe(res => v.push(res), () => { }, () =>
|
|
507
|
+
.subscribe(res => v.push(res), () => { }, () => {
|
|
508
|
+
this.autocompleteResults = v;
|
|
509
|
+
// The yvc-autocomplete component sets selectedIndex=0 whenever new suggestions
|
|
510
|
+
// arrive, causing Enter to implicitly accept the first suggestion even without
|
|
511
|
+
// explicit keyboard/mouse selection. Reset to -1 so that Enter uses the actual
|
|
512
|
+
// typed text unless the user explicitly navigates suggestions with arrow keys.
|
|
513
|
+
setTimeout(() => {
|
|
514
|
+
if (this.searchInput) {
|
|
515
|
+
this.searchInput.selectedIndex = -1;
|
|
516
|
+
}
|
|
517
|
+
});
|
|
518
|
+
});
|
|
508
519
|
}
|
|
509
520
|
}
|
|
510
521
|
expertTermChanged() {
|
|
@@ -839,4 +850,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.0", ngImpor
|
|
|
839
850
|
}], onExecuteSearch: [{
|
|
840
851
|
type: Output
|
|
841
852
|
}] } });
|
|
842
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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Uzt1QkFBQyxhQUFhO2dCQUNGLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUFsQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQWlEYixlQUFlO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBmcm9tIGFzIG9ic2VydmFibGVGcm9tLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHBsdWNrLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVN0YXR1c0NoYW5nZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhcGFiaWxpdGllcyxcbiAgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgTG9nZ2VyLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgT2JqZWN0VHlwZSxcbiAgUXVlcnlTY29wZSxcbiAgUmFuZ2VWYWx1ZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU2VhcmNoU3RhdGUsXG4gIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICBTdG9yZWRRdWVyeSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0NvbnRleHRUeXBlLCBJZHhTZWFyY2h9IGZyb20gJy4vYXBwLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIHRvZG86IGFwcGx5IG9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIChhZ2cgc2VhcmNoIHJlc3VsdCByaWdodCBub3cgZG9lc24ndCB1cGRhdGUpXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgUEFSQU1TID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVM7XG4gIE9QRVJBVE9SID0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SO1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RwbFNlYXJjaCcsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIHRwbFNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogQXV0b0NvbXBsZXRlO1xuICBAVmlld0NoaWxkKCd4cGlucHV0JykgZXhwZXJ0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lkeGZvcm0nKSBpbmRleGRhdGFGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjdHhmb3JtJykgY29udGV4dEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG4gIHByaXZhdGUgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHF1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgcXVlcnlTdGF0ZTogU2VhcmNoU3RhdGU7XG4gIGNhcGFiaWxpdGllczogQ2FwYWJpbGl0aWVzO1xuICBhY3RpdmVUYWJJZD86IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBpc1N0b3JlZFF1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5ID0gZmFsc2U7XG4gIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgdHlwZUdyb3VwVHJlZSA9IFtdO1xuICBhdXRvY29tcGxldGVSZXN1bHRzOiBzdHJpbmdbXTtcblxuICBpZHhTZWFyY2g6IElkeFNlYXJjaDtcbiAgY3VycmVudENvbnRleHRGb2xkZXJOYW1lO1xuXG4gIGV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIGV4cGVydE1vZGVTdXBwb3J0ID0ge1xuICAgIGJhc2VQYXJhbXM6IFtdLFxuICAgIHNlbGVjdGVkR3JvdXA6IG51bGwsXG4gICAgc2VsZWN0ZWRUeXBlOiBudWxsXG4gIH07XG5cbiAgZmlsdGVyc01vZGVsID0ge307XG4gIGFnZ3JlZ2F0aW9uc01vZGVsID0ge307XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgc3lzUm9vdENvbnRleHQgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgbmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCxcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWRkLnRpdGxlLmxvY2F0aW9uLmNvbW1vbicpLFxuICAgIHNpdHVhdGlvbjogJ1NFQVJDSCcsXG4gICAgbW9kZTogJ0NPTlRFWFQnLFxuICAgIGNvbnRleHRGb3JtT3B0aW9uczoge1xuICAgICAgZm9ybU1vZGVsOiB7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdGVkOiBudW1iZXIgPSBudWxsO1xuXG4gIG9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5ID0gJ2VvLmFwcC5zZWFyY2gub2JqZWN0LnR5cGUuZ3JvdXAuc29ydGVkTGlzdCc7XG4gIHRlcm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgdGVybTogW11cbiAgfSk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4ZWN1dGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNldCBzZWxlY3RlZChpbmRleCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIGdldCBzdG9yZWRRdWVyeSgpOiBTdG9yZWRRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkgYXMgU3RvcmVkUXVlcnk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFNlYXJjaFNlcnZpY2U6IEFwcFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBZdmNPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdHlTZXJ2aWNlOiBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICApIHtcblxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcblxuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtcyA9IE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5tYXAoayA9PiB7XG4gICAgICBsZXQgZGF0YSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmdsb2JhbC5iYXNlcGFyYW0uJyArIGRhdGEpLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS4nICsgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTW2tdXG4gICAgICB9O1xuICAgIH0pLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cuZmlsZXNpemUuJyArIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblRhYkNoYW5nZSh0YWJJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkO1xuICAgIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0VHlwZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RDcmVhdGVkJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgY3JlYXRlZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdE1vZGlmaWNhdGlvbicpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1vZGlmaWVkOiB7fVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0RmlsZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1pbWV0eXBlZ3JvdXA6IHt9LFxuICAgICAgICBmaWxlc2l6ZToge31cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeShxdWVyeTogU2VhcmNoUXVlcnkpIHtcbiAgICAvLyBJTVBPUlRBTlQ6IG5ldmVyIGNoYW5nZSB0aGUgbG9jYWwgcXVlcnkgZGlyZWN0bHlcbiAgICAvLyB1c2Ugc2VhcmNoU2VydmljZSwgc28gZXZlcnkgY29tcG9uZW50cyBzdWJzY3JpYmVkIHRvIHRoZSBxdWVyeVxuICAgIC8vIHdpbGwgZ2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcbiAgICAgID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuaXNTdG9yZWRRdWVyeSA9IHF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnk7XG5cbiAgICBpZiAodGhpcy5pc1N0b3JlZFF1ZXJ5KSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy5pc093blF1ZXJ5ID1cbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS51c2VyLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4gdGhpcy5wcm9jZXNzRmlsdGVycyhrKSk7XG4gICAgLy8gaWYgd2UgaGF2ZSBhbiBpbmRleGRhdGEgc2VhcmNoIHVzaW5nIGEgY29udGV4dCBidXQgdGhlIGNvbnRleHQgd2FzIHJlbW92ZWRcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmXG4gICAgICB0aGlzLmlkeFNlYXJjaCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXG4gICAgKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgPSBudWxsO1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBzZXR1cCBhbiBpbmRleGRhdGEgc2VhcmNoXG4gICAgY29uc3QgYWN0aXZhdGVJbmRleGRhdGFTZWFyY2ggPSB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPT09IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UWVBFU19TRVRcbiAgICAgIHx8IHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9PT0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkNPTlRFWFRfRk9MREVSX1NFVDtcbiAgICBpZiAoYWN0aXZhdGVJbmRleGRhdGFTZWFyY2gpIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgYSBjb250ZXh0IHR5cGUgc2V0dXAgbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKFxuICAgICAgICB0aGlzLnF1ZXJ5LnR5cGVzWzBdLFxuICAgICAgICB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggPiAwID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0gOiBudWxsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKHRoaXMucXVlcnkpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgaW5kZXhkYXRhIGZpbHRlcnMgYWxzbyBtZWFucywgdGhhdCB3ZSBhcmUgdXNpbmcgaW5kZXhkYXRhIHNlYXJjaFxuICAgICAgdGhpcy5pbmRleGRhdGFTZWFyY2godGhpcy5xdWVyeS50eXBlc1swXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIHJlc2V0IGluZGV4ZGF0YSBzZWFyY2ggb3RoZXJ3aXNlLCBiZWNhdXNlIHRoZSBjdXJyZW50IHF1ZXJ5IG1heSBiZSByZXNldCBmcm9tIG91dCBzaWRlIChlLmcuIGJ5IGEgc3RvcmVkIHF1ZXJ5KVxuICAgICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMucXVlcnlTY29wZSA9IHF1ZXJ5LnNjb3BlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9iamVjdFR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIC8qKiBzZXQgdXAgdGhlIHJpZ2h0IHR5cGUgZmlsdGVyIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi9cbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoID1cbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgIT09IHR5cGUubmFtZTtcbiAgICBpZiAocXVlcnlUeXBlc0xlbmd0aCB8fCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSkge1xuICAgICAgLy8gc2V0dGluZyBvYmplY3QgdHlwZXMgd2lsbCBlbWl0IGEgbmV3IHF1ZXJ5LiBUaGlzIHdpbGwgdGhlbiB0YWtlIGNhcmUgb2ZcbiAgICAgIC8vIHNldHRpbmcgdXAgdGhlIGluZGV4ZGF0YSBmb3JtXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0UXVlcnlUeXBlcyhbdHlwZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGluZGV4ZGF0YSBzZWFyY2ggZm9yIGEgZ2l2ZW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIHR5cGUgLSBhbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gY29udGV4dEZvbGRlclR5cGUgLSBjb250ZXh0IGZvbGRlciB0eXBlXG4gICAqL1xuICBwdWJsaWMgaW5kZXhkYXRhU2VhcmNoKHR5cGU6IE9iamVjdFR5cGUsIGNvbnRleHRGb2xkZXJUeXBlPzogT2JqZWN0VHlwZSkge1xuICAgIGlmICghdHlwZSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmIHRoaXMucXVlcnkudHlwZXNbMF0ubmFtZSA9PT0gdHlwZS5uYW1lKSB7XG4gICAgICAvKiogZXZlbiBpZiB3ZSBzZWxlY3QgYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSBzZWxlY3RlZCwgd2UgbmVlZCB0byBjYWxsIGFnZ3JlZ2F0ZSBhcyB0aGVyZSBtYXkgYmUgY29udGV4dCB0eXBlcyBpbnZvbHZlZCAqL1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgc3ViOiB7XG4gICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcml2ZWRUeXBlcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlcygpLmZpbHRlcih0ID0+IHQuc3VwZXJ0eXBlcy5pbmNsdWRlcyh0eXBlLnFuYW1lKSk7XG4gICAgY29uc3QgaXNSb290VHlwZSA9ICEhZGVyaXZlZFR5cGVzLmZpbmQodCA9PiB0LnBhcmVudHR5cGVzLmluY2x1ZGVzKCdzeXNyb290JykpIHx8ICEhdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdC5maW5kKHJUID0+IHJULnFuYW1lID09PSB0eXBlLnFuYW1lKTtcblxuICAgIHRoaXMuaWR4U2VhcmNoID0ge1xuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRGb2xkZXJUeXBlLFxuICAgICAgY29udGV4dE1vZGVsczogaXNSb290VHlwZSA/IFt0aGlzLnN5c1Jvb3RDb250ZXh0XSA6IFtdLFxuICAgICAgZm9ybU9wdGlvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgLyoqIGZldGNoIGNvbnRleHQgdHlwZSBtb2RlbHMgKi9cbiAgICBpZiAodHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdG9GZXRjaCA9IFtdO1xuICAgICAgdHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmZvckVhY2goY29udGV4dFR5cGUgPT4ge1xuICAgICAgICBjb25zdCBvYmpUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dFR5cGUubmFtZSk7XG4gICAgICAgIGlmIChvYmpUeXBlKSB7XG4gICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGVGb3JtKFxuICAgICAgICAgICAgICBjb250ZXh0VHlwZS5uYW1lLFxuICAgICAgICAgICAgICAnU0VBUkNIJyxcbiAgICAgICAgICAgICAgJ0NPTlRFWFQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodG9GZXRjaC5sZW5ndGgpIHtcbiAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRvRmV0Y2gpLnN1YnNjcmliZShmb3JtTW9kZWxzID0+IHtcbiAgICAgICAgICAvKiogYWJzdHJhY3QgY29udGV4dCB0eXBlcyBzaG91bGQgbm90IGJlIHVzZWQgKi9cbiAgICAgICAgICB0aGlzLmFkZENvbnRleHRNb2RlbChmb3JtTW9kZWxzKTtcbiAgICAgICAgICAvKiogaWYgdGhlcmUgd2FzIGEgY29udGV4dCB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBxdWVyeSwgd2UnbGwgc2V0dXAgdGhlIHJpZ2h0IG1vZGVsIGFzIHdlbGwgKi9cbiAgICAgICAgICBpZiAoY29udGV4dEZvbGRlclR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5maW5kKFxuICAgICAgICAgICAgICBtID0+IG0ubmFtZSA9PT0gY29udGV4dEZvbGRlclR5cGUubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dChtb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRGb2xkZXJUeXBlLm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KHRoaXMuc3lzUm9vdENvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLyoqIHRoZSBwcm92aWRlZCBjb250ZXh0IHR5cGUgZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHNvIGp1c3QgcmVtb3ZlIGl0ICovXG4gICAgICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtRGF0YTtcbiAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gc2V0IHVwIGZvcm0gZGF0YSBmcm9tIGluZGV4ZGF0YSBxdWVyeSBmaWx0ZXJzXG4gICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHR5cGUubmFtZSk7XG4gICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZVxuICAgICAgICAuZ2V0T2JqZWN0VHlwZUZvcm0odHlwZS5uYW1lLCAnU0VBUkNIJylcbiAgICAgICAgLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmb3JtTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgZGF0YTogZm9ybURhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5xdWVyeVN0YXRlID0gcXVlcnlTdGF0ZTtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICAgIGlmIChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zaXplKSB7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB0aGlzLmJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBhZ2dyZWdhdGlvbnMgdmFsdWVzXG4gICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdIHx8ICF0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCB8fCBxdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gPSBuZXcgTWFwKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkUsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gIH1cblxuICBidWlsZENvbnRleHRBZ2dyZWdhdGlvbnMoY29udGV4dFR5cGUpIHtcbiAgICBsZXQgY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgIGNvbnRleHRUeXBlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGNvbnRleHRBZ2dyZWdhdGlvbnNba2V5XSA9IHZhbHVlKTtcbiAgICByZXR1cm4gY29udGV4dEFnZ3JlZ2F0aW9ucztcbiAgfVxuXG4gIHByb2Nlc3NGaWx0ZXJzKGs6IHN0cmluZykge1xuICAgIGxldCBmOiBTZWFyY2hGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba10pO1xuICAgIGlmICghZikge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba11dID0ge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbXVsdGlWYWx1ZTogW10sXG4gICAgICAgIGlubmVyVmFsdWU6IFtdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gfHxcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciAhPT0gZlxuICAgICkge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciA9IGY7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9XG4gICAgICAgIHR5cGVvZiBmLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGYuZmlyc3RWYWx1ZSlcbiAgICAgICAgICA6IHR5cGVvZiBmLmZpcnN0VmFsdWUgIT09ICdib29sZWFuJyA/IFtmLmZpcnN0VmFsdWVdIDogZi5maXJzdFZhbHVlO1xuICAgICAgaWYgKGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSkge1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZSA9XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbCA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZS5mb3JFYWNoKCh2OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRPUiB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVSXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG9ic2VydmFibGVPZihcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmlsdGVyKGYsIHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3luY0FnZ3JlZ2F0aW9ucyhuYW1lLCBvcGVyYXRvcikge1xuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbbmFtZV0uZm9yRWFjaChhZ2cgPT4ge1xuICAgICAgbGV0IGEgPSB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zW25hbWVdLmZpbmQoYWEgPT4gYWEua2V5ID09PSBhZ2cua2V5KTtcbiAgICAgIGlmIChhICYmIGEudmFsdWUgIT09IGFnZy52YWx1ZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSBhLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICghYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gbmFtZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGFnZy5zZWxlY3RlZCA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUobmFtZSwgb3BlcmF0b3IsIGFnZy5rZXkpO1xuICAgICAgYWdnLnNhdmVkID0gIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgPT09IG5hbWU7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldKSB7XG4gICAgICBsZXQgYWdnID0gdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldLmZpbmQoYSA9PiBhLmtleSA9PT0gdmFsdWUpO1xuICAgICAgcmV0dXJuIGFnZy5sYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFOlxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgZW8uc2VhcmNoLmFnZy50aW1lLiR7ZmlsdGVyLmZpcnN0VmFsdWV9YCk7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTDpcbiAgICAgICAgcmV0dXJuIGA9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEg6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX0gLSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5zZWNvbmRWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnNpbmNlJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi51bnRpbCcpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCgke2ZpbHRlci5vcGVyYXRvcn0pICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlTGFiZWwobW9kZWw6IGFueSwgdmFsdWU6IGFueVtdKSB7XG4gICAgbW9kZWwubGFiZWwuZm9yRWFjaCgobCwgaSkgPT4gbC5uZXh0KHZhbHVlW2ldLnRpdGxlKSk7XG4gIH1cblxuICByZXNvbHZlU2VsZWN0aW9uKGFnZ3M6IGFueVtdLCBrZXk6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWdnc1xuICAgICAgLmZpbHRlcihhID0+IHNlbGVjdGVkID8gYS5rZXkgIT09IGtleSAmJiBhLnNlbGVjdGVkIDogYS5rZXkgPT09IGtleSB8fCBhLnNlbGVjdGVkKVxuICAgICAgLm1hcChhID0+IGEua2V5KTtcbiAgfVxuXG4gIHJlc2V0RXhwZXJ0TW9kZUlucHV0KCkge1xuICAgIHRoaXMucXVlcnkudGVybSA9ICcnO1xuICAgIHRoaXMudGVybUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICB0ZXJtOiAnJ1xuICAgIH0pO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xuICAgIGlmICh0aGlzLnR5cGVHcm91cFRyZWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVFeHBlcnRNb2RlKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVNjb3BlKHNjb3BlKTtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdEdyb3VwKGdyb3VwKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIHhwQWRkVG9UZXJtKHN0cikge1xuICAgIGxldCB0ZXJtO1xuICAgIGlmICghdGhpcy5xdWVyeS50ZXJtKSB7XG4gICAgICB0ZXJtID0gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtID0gdGhpcy5xdWVyeS50ZXJtICsgJyAnICsgc3RyO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtICsgJzonO1xuICAgIHRoaXMuZXhwZXJ0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVR5cGUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvLyBkbyBub3QgZGlyZWN0bHkgdG9nZ2xlIF90eXBlIG9uIHRoZSBxdWVyeSwgaW5zdGVhZCB1c2UgdGhlXG4gICAgLy8gc2VhcmNoU2VydmljZSB0byB1cGRhdGUgdGhlIHF1ZXJ5IHN0b3JlXG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5VHlwZShfdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgaXNUeXBlQWN0aXZlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVyeS50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gX3R5cGUuaWQpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25Db3VudChfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUuZ2V0KF90eXBlLm5hbWUpIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCBrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChrZXkgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBrZXkub3BlcmF0b3IsIGtleS5maXJzdFZhbHVlLCBrZXkuc2Vjb25kVmFsdWUsIHt0aW1lOiBrZXkub3BlcmF0b3IgIT09IHRoaXMuT1BFUkFUT1IuRVFVQUwsIHRpbWV6b25lOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBmaXJzdFZhbHVlID0ga2V5LFxuICAgICAgICBzZWNvbmRWYWx1ZSA9IG51bGwsXG4gICAgICAgIHRyYW5zZm9ybURhdGUgPSBudWxsLFxuICAgICAgICB1c2VOb3QgPSBudWxsLFxuICAgICAgICBhY3R1YWxPcGVyYXRvciA9IG51bGxcbiAgICAgIH0gPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyA/IGtleSA6IHt9O1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlLCB0cmFuc2Zvcm1EYXRlLCB1c2VOb3QsIGFjdHVhbE9wZXJhdG9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIGZvcm0/OiBOZ0Zvcm0pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBsZXQgZW1wdHkgPSB0aGlzLmlzRW1wdHkoZmlsdGVyKTtcbiAgICBsZXQgYWN0aXZlRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgbGV0IGR1cGxpY2F0ZSA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG5cbiAgICBpZiAoZW1wdHkgJiYgYWN0aXZlRmlsdGVyICYmIGFjdGl2ZUZpbHRlci5vcGVyYXRvciAhPT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKCFlbXB0eSAmJiAhZHVwbGljYXRlKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IHRoaXMuUEFSQU1TLkZJTEVTSVpFKSB7XG4gICAgICBsZXQgZm9sZGVyRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcignZm9sZGVyJywgJ2VxJywgZmFsc2UpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVycyhbZmlsdGVyLCBmb2xkZXJGaWx0ZXJdLCAhc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXIoZmlsdGVyLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZWFyY2hGaWx0ZXIpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5maXJzdFZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuc2Vjb25kVmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIGxldCBmID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5tYXRjaChmLnByb3BlcnR5LCBmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlcihtb2RlbDogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG1vZGVsLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbC5pbm5lclZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKG1vZGVsLmZpbHRlci5wcm9wZXJ0eSwgbW9kZWwuZmlsdGVyLm9wZXJhdG9yLCBtb2RlbC5pbm5lclZhbHVlLmZpbHRlcihmID0+IGYgIT09IHZhbHVlKSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKG1vZGVsLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWdnZXN0KGV2dD8pIHtcbiAgICBsZXQgdiA9IFtdO1xuICAgIC8vIGFsc28gdHJpZ2dlciBhZ2dyZWdhdGlvbnMgc2VhcmNoXG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmF1dG9jb21wbGV0ZShldnQpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gb2JzZXJ2YWJsZUZyb20ocmVzKS5waXBlKHBsdWNrKCd2YWx1ZScpKSkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHYucHVzaChyZXMpLCAoKSA9PiB7IH0sICgpID0+ICh0aGlzLmF1dG9jb21wbGV0ZVJlc3VsdHMgPSB2KVxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGV4cGVydFRlcm1DaGFuZ2VkKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVTZWxlY3QoKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICB9XG5cbiAgYXV0b2NvbXBsZXRlUGFzdGUoZSkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5xdWVyeS50ZXJtID0gZS50YXJnZXQudmFsdWU7XG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlbGVjdCgpO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHVibGljIGV4ZWN1dGVTZWFyY2goKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIC8vIGluIGV4cGVydCBzZWFyY2ggbW9kZSB3ZSBwcmUtZmV0Y2ggcmVzdWx0cyBiZWZvcmUgZXhlY3V0aW5nIHRoZSBhY3R1YWwgc2VhcmNoXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0U2VhcmNoU3RhdGUoe2FnZ3M6IHt0eXBlOiB7fX0sIC4uLnRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCl9KS5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB7XG4gICAgICAgIC8vIG9ubHkgZXhlY3V0ZSB0aGUgYWN0dWFsIHF1ZXJ5IHdoZW4gd2UndmUgZm91bmQgc29tZXRoaW5nXG4gICAgICAgIGlmICghcXVlcnlTdGF0ZS5pc0VtcHR5KSB7XG4gICAgICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0sIFV0aWxzLnRocm93KCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIHNlYXJjaCByZXN1bHQnKTtcbiAgICAgICAgdGhpcy5leHBlcnRNb2RlUXVlcnlFbXB0eSA9IHRydWU7XG4gICAgICB9KVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50cmlnZ2VyU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXhlY3V0ZSB0aGUgYWN0dWFsIHNlYXJjaCBieSByb3V0aW5nIHRvIHRoZSByZXN1bHQgc3RhdGUgd2hpY2ggdGhlbiB3aWxsIGV4ZWN1dGUgdGhlXG4gIC8vIHF1ZXJ5IGFuZCBkaXNwbGF5IHRoZSByZXN1bHRzXG4gIHByaXZhdGUgdHJpZ2dlclNlYXJjaCgpIHtcbiAgICB0aGlzLnF1ZXJ5LnJlc29sdmVSZWZlcmVuY2UgPSB0cnVlO1xuICAgIGNvbnN0IHVyaVBhcmFtID0gZW5jb2RlVVJJQ29tcG9uZW50KFV0aWxzLmZvcm1EYXRhU3RyaW5naWZ5KHRoaXMucXVlcnkuZ2V0UXVlcnlKc29uKCkpKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLmNsb3NlKCk7XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0pLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgdXJpUGFyYW1RdWVyeTogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtczoge3F1ZXJ5OiB1cmlQYXJhbX19O1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycvcmVzdWx0J10sIHVyaVBhcmFtUXVlcnkpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZVRlcm0oKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldFRlcm0oJycpO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUeXBlKHR5cGU6IE9iamVjdFR5cGUpIHtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlUeXBlKHR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVDb250ZXh0VHlwZSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRmlsdGVyKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKGZpbHRlcik7XG5cbiAgICAvLyBpZiB3ZSBhcmUgaW4gaW5kZXNkYXRhIHNlYXJjaCBtb2RlLCByZW1vdmluZyBhIGZpbHRlciB0aGF0IGlzIG5vIGJhc2VwYXJhbSBmaWx0ZXJcbiAgICAvLyByZXF1aXJlcyB0aGUgZnJvbSBtb2RlbCB0byBiZSB1cGRhdGVkXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoICYmICF0aGlzLmFwcFNlYXJjaFNlcnZpY2UuaXNCYXNlUGFyYW1GaWx0ZXIoZmlsdGVyKSkge1xuICAgICAgLy8gdG9kbzogdXBkYXRlIGZvcm0gbW9kZWwvZGF0YVxuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBzZXQgdXAgZm9ybSBkYXRhIGZyb20gaW5kZXhkYXRhIHF1ZXJ5IGZpbHRlcnNcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICAgIHRoaXMuaW5kZXhkYXRhRm9ybS5zZXRGb3JtRGF0YShpZHhGaWx0ZXJzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGlmIG5vIGZpbHRlcnMgYXJlIHByZXNlbnQgcmVzZXQgdGhlIGZvcm1cbiAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMuZGF0YSA9IHt9O1xuICAgICAgICB0aGlzLmluZGV4ZGF0YUZvcm0ucmVzZXRGb3JtKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWRkQ29udGV4dE1vZGVsKGZvcm1Nb2RlbHMpOiB2b2lkIHtcbiAgICBsZXQgbW9kZWxzID0gWy4uLmZvcm1Nb2RlbHNdO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMucHVzaCguLi5tb2RlbHMpO1xuICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRNb2RlbHMuc29ydChVdGlscy5zb3J0VmFsdWVzKCdsYWJlbCcpKTtcbiAgfVxuXG4gIHB1YmxpYyBleGl0SW5kZXhkYXRhU2VhcmNoKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICB9XG5cbiAgc2V0Q29udGV4dChjb250ZXh0Rm9sZGVyTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lICYmIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjb250ZXh0Rm9sZGVyTmFtZSkge1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBjb250ZXh0Rm9sZGVyTmFtZTtcbiAgICAgIGNvbnN0IGNvbnRleHRUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dEZvbGRlck5hbWUpO1xuICAgICAgaWYgKGNvbnRleHRGb2xkZXJOYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZSh7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCwgbGFiZWw6IENvbnRleHRUeXBlLnN5c3Jvb3R9IGFzIE9iamVjdFR5cGUpO1xuICAgICAgfSBlbHNlIGlmIChjb250ZXh0VHlwZSkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dFR5cGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5sb2dnZXIuZXJyb3IoYENvbnRleHQgdHlwZSAnJHtjb250ZXh0Rm9sZGVyTmFtZX0nIG5vdCBmb3VuZC5gKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICAgICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGEgY29udGV4dCB0eXBlIGZvciB0aGUgY3VycmVudCBzZWFyY2hcbiAgICogQHBhcmFtIGN0eCBUaGUgY29udGV4dCBmb3JtIG1vZGVsXG4gICAqL1xuICBwcml2YXRlIHNlbGVjdENvbnRleHQoY3R4KSB7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyAmJiB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMuZm9ybU1vZGVsLm5hbWUgPT09IGN0eC5uYW1lKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBjb250ZXh0O1xuICAgICAgaWYgKGN0eC5uYW1lID09PSBDb250ZXh0VHlwZS5zeXNyb290KSB7XG4gICAgICAgIGNvbnRleHQgPSBjdHg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0ID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY3R4Lm5hbWUpO1xuICAgICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9sZGVyVHlwZSA9IGNvbnRleHQ7XG4gICAgICB9XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoY29udGV4dCk7XG5cbiAgICAgIGxldCBmb3JtRGF0YSA9IHt9O1xuICAgICAgbGV0IGlkeEZpbHRlcnMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZ2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoKTtcbiAgICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyA9IHtmb3JtTW9kZWw6IGN0eCwgZGF0YTogZm9ybURhdGF9O1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvbkluZGV4RGF0YUNoYW5nZWQoZXZlbnQ6IEZvcm1TdGF0dXNDaGFuZ2VkRXZlbnQpIHtcbiAgICAvLyBvbmx5IHRyaWdnZXIgd2hlbiB2YWx1ZXMgYXJlIGNoYW5nZWQgYXMgY2hhbmdlcyBtYXkgYWxzbyBhcHBlYXIgd2hlbiBzY3JpcHRzXG4gICAgLy8gY2hhbmdlIG90aGVyIGZvcm0gZWxlbWVudCBwcm9wZXJ0aWVzIChlZy4gcmVhZG9ubHksIHJlcXVpcmVkIGZsYWcpXG4gICAgaWYgKGV2ZW50LmluZGV4ZGF0YUNoYW5nZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTZWFyY2hGaWx0ZXJGcm9tRm9ybURhdGEoKSB7XG4gICAgaWYgKCF0aGlzLmluZGV4ZGF0YUZvcm0pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBhZGQgbWV0YWRhdGEgZmlsdGVycyBmb3IgZWFjaCBmb3JtIGRhdGEgZW50cnlcbiAgICBsZXQgaWR4RmlsdGVyczogU2VhcmNoRmlsdGVyW10gPSBbXTtcbiAgICBsZXQgZm9ybURhdGEgPSB0aGlzLmluZGV4ZGF0YUZvcm0uZ2V0Rm9ybURhdGEoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0Rm9ybSkge1xuICAgICAgZm9ybURhdGEgPSBPYmplY3QuYXNzaWduKGZvcm1EYXRhLCB0aGlzLmNvbnRleHRGb3JtLmdldEZvcm1EYXRhKCkpO1xuICAgIH1cblxuICAgIGZvciAobGV0IGtleSBvZiBPYmplY3Qua2V5cyhmb3JtRGF0YSkpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gdGhpcy5zZWFyY2hTZXJ2aWNlLmdldFNlYXJjaEZpbHRlcih0aGlzLnF1ZXJ5LnR5cGVzLCBrZXksIGZvcm1EYXRhW2tleV0pLm1hcChmaWx0ZXIgPT4ge1xuICAgICAgICAvLyB0aGUgc2VhcmNoIHNlcnZpY2UgZG9lcyBub3QgbGlrZSBuZXdsaW5lIGNoYXJzIGluIGNhc2Ugb2YgbXVsdGlsaW5lIGZpZWxkc1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIuZmlyc3RWYWx1ZSkpIHtcbiAgICAgICAgICBpZiAoZmlsdGVyLmZpcnN0VmFsdWU/Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUubWFwKHZhbHVlID0+IHZhbHVlLnJlcGxhY2UoL1xcbi9nLCAnICcpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZmlsdGVyLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgZmlsdGVyLmZpcnN0VmFsdWUgPSBmaWx0ZXIuZmlyc3RWYWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmlsdGVyO1xuICAgICAgfSk7XG4gICAgICBmaWx0ZXJzLmZvckVhY2goZiA9PiBpZHhGaWx0ZXJzLnB1c2goZikpO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0SW5kZXhTZWFyY2hRdWVyeUZpbHRlcnMoaWR4RmlsdGVycyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgb2JqZWN0IHR5cGUgZWxlbWVudCBmb3IgYSBmaWx0ZXIsIHRvIGJlIGFibGUgdG8gc2hvdyB0aGVcbiAgICogbGFiZWwgZm9yIGEgZmlsdGVyIGluIHRoZSBzZWFyY2ggc3VtbWFyeS5cbiAgICpcbiAgICogQHBhcmFtIGZpbHRlciAtIHRoZSBmaWx0ZXIgdG8gZmV0Y2ggb2JqZWN0IHR5cGUgZWxlbWVudCBmb3JcbiAgICovXG4gIHB1YmxpYyBnZXRPYmplY3RUeXBlRWxlbWVudExhYmVsKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgbGV0IG90ID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFRhcmdldFR5cGVFbGVtZW50QnlOYW1lKGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgcmV0dXJuIG90ID8gb3QubGFiZWwgOiBmaWx0ZXIucHJvcGVydHkgKyAnIC0gJyArIGZpbHRlci5maXJzdFZhbHVlO1xuICB9XG5cbiAgcHVibGljIHNhdmVRdWVyeSgpIHtcbiAgICAvLyBjb25zdCBxdWVyeVBhcmFtczogTmF2aWdhdGlvbkV4dHJhcyA9IHtxdWVyeVBhcmFtc0hhbmRsaW5nIDogJ3ByZXNlcnZlJ307XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgIHRoaXMucm91dGVyXG4gICAgICAubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSlcbiAgICAgIC50aGVuKCgpID0+IHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3N0b3JlZC1xdWVyaWVzJ10sIHtxdWVyeVBhcmFtczoge2NyZWF0ZTogdHJ1ZX19KSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlU3RvcmVkUXVlcnkoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkgaW5zdGFuY2VvZiBTdG9yZWRRdWVyeSkge1xuICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3tvdXRsZXRzOiB7bW9kYWw6IG51bGx9fV0sIHtyZXBsYWNlVXJsOiB0cnVlfSk7XG4gICAgICB0aGlzLnN0b3JlZFF1ZXJpZXNTZXJ2aWNlLnNhdmVTdG9yZWRRdWVyeSh0aGlzLnF1ZXJ5KS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbnMuc3VjY2Vzcyh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guc3RvcmVkcXVlcnkuc2F2ZS5zdWNjZXNzJykpO1xuICAgICAgfSwgVXRpbHMudGhyb3cobnVsbCwgdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuZXJyb3InKSkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyByZXNldFF1ZXJ5KCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZXNldCgpO1xuICAgIHRoaXMuaXNPd25RdWVyeSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZXNldEV4cGVydE1vZGVJbnB1dCgpO1xuXG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB9XG4gIH1cblxuICBjbG9zZVNlYXJjaE1lbnUoKSB7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICB9XG5cbiAgbW92ZU9iamVjdFR5cGVHcm91cChncm91cExhYmVsOiBzdHJpbmcsIGRpcmVjdGlvbjogc3RyaW5nKSB7XG4gICAgbGV0IGluZGV4ID0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmZpbmRJbmRleChncm91cCA9PiBncm91cExhYmVsID09PSBncm91cC5sYWJlbCk7XG4gICAgbGV0IG5ld0luZGV4O1xuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICBuZXdJbmRleCA9IGluZGV4IC0gMTtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgbmV3SW5kZXggPSBpbmRleCArIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdmaXJzdCcpIHtcbiAgICAgIG5ld0luZGV4ID0gMDtcbiAgICB9IGVsc2UgaWYgKGRpcmVjdGlvbiA9PT0gJ2xhc3QnKSB7XG4gICAgICBuZXdJbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxO1xuICAgICAgaWYgKGluZGV4ID09PSBuZXdJbmRleCkgcmV0dXJuO1xuICAgIH1cblxuICAgIHdoaWxlIChpbmRleCA8IDApIHtcbiAgICAgIGluZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIHdoaWxlIChuZXdJbmRleCA8IDApIHtcbiAgICAgIG5ld0luZGV4ICs9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGg7XG4gICAgfVxuICAgIGlmIChuZXdJbmRleCA+PSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoKSB7XG4gICAgICBsZXQgayA9IG5ld0luZGV4IC0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCArIDE7XG4gICAgICB3aGlsZSAoay0tKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UobmV3SW5kZXgsIDAsIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5zcGxpY2UoaW5kZXgsIDEpWzBdKTtcbiAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldEl0ZW0odGhpcy5vYmplY3RUeXBlR3JvdXBzU3RvcmFnZUtleSwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLm1hcChncm91cCA9PiBncm91cC5sYWJlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c1NlYXJjaElucHV0KCkge1xuICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG5cbiAgICAgIC8vIFRPRE86IHRoaXMuc2VhcmNoSW5wdXQuaW5wdXRFTC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNoYW5nZVNlYXJjaElucHV0Rm9jdXMoKSB7XG4gICAgaWYgKHRoaXMucXVlcnkuZXhwZXJ0TW9kZSkge1xuICAgICAgdGhpcy5yZW5kZXJlci5zZWxlY3RSb290RWxlbWVudCgnLmV4cGVydC1zZWFyY2hfX2lucHV0JykuZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5mb2N1c1NlYXJjaElucHV0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jYXBhYmlsaXRpZXMgPSB0aGlzLmNhcGFiaWxpdHlTZXJ2aWNlLmdldENhcGFiaWxpdGllcygpO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5vYmplY3RUeXBlR3JvdXBzO1xuICAgIHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcyA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1swXS50eXBlcy5maWx0ZXIodHlwZSA9PiB0eXBlLnFuYW1lICE9PSAnc3lzZm9sZGVyJyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzZG9jdW1lbnQnICYmIHR5cGUucW5hbWUgIT09ICdzeXNvYmplY3QnKTtcbiAgICBsZXQgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXkpO1xuICAgIGxldCBzeW5jZWQgPSB0cnVlO1xuICAgIGlmIChzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMgJiYgc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmxlbmd0aCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuZmluZChncm91cCA9PiBncm91cCA9PT0gdGhpcy5vYmplY3RUeXBlR3JvdXBzW2ldLmxhYmVsKSkge1xuICAgICAgICAgIHN5bmNlZCA9IGZhbHNlO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3luY2VkKSB7XG4gICAgICAgIHRoaXMub2JqZWN0VHlwZUdyb3VwcyA9IFsuLi50aGlzLm9iamVjdFR5cGVHcm91cHNdLnNvcnQoXG4gICAgICAgICAgKGEsIGIpID0+IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGEubGFiZWwpIC0gc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmluZGV4T2YoYi5sYWJlbClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeSQuc3Vic2NyaWJlKFxuICAgICAgKHF1ZXJ5OiBTZWFyY2hRdWVyeSkgPT4gdGhpcy5wcm9jZXNzUXVlcnkocXVlcnkpKTtcbiAgICAvLyBzdWJzY3JpYmUgdG8gcXVlcnkgc3RhdGUgYXMgd2VsbCB0byBmZXRjaCByZXN1bHQgY291bnQgYW5kIGFnZ3JlZ2F0aW9ucyBhcyB0aGV5IGNoYW5nZVxuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5xdWVyeVN0YXRlJC5zdWJzY3JpYmUoKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSA9PiB0aGlzLnByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGUpKTtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG5cbiAgICB0aGlzLnRlcm1Gb3JtLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgdGFwKHJlcyA9PiB7XG4gICAgICAgIHRoaXMucXVlcnkudGVybSA9IHJlcy50ZXJtO1xuICAgICAgfSksIGRlYm91bmNlVGltZSgxMDAwKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICBpZiAodGhpcy5xdWVyeS50ZXJtPy5zdGFydHNXaXRoKCdcXFwiJykgJiYgIXRoaXMucXVlcnkudGVybT8uZW5kc1dpdGgoJ1xcXCInKSkge1xuICAgICAgICAgIHRoaXMucXVlcnkudGVybSArPSBcIlxcXCJcIjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVN1Z2dlc3QodGhpcy5xdWVyeS50ZXJtKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zZWFyY2hJbnB1dC5mb2N1c0lucHV0KCk7XG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5vcGVuKHRoaXMudHBsU2VhcmNoLCBudWxsLCB7XG4gICAgICBjZW50ZXJlZDogZmFsc2UsXG4gICAgICBvdmVybGF5Q2xhc3M6ICdzZWFyY2gtb3ZlcmxheSdcbiAgICB9KTtcbiAgICB0aGlzLnRlcm1Gb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgdGVybTogdGhpcy5xdWVyeS50ZXJtXG4gICAgfSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5hZnRlckNsb3NlZCQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZzogJ3ByZXNlcnZlJ307XG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCBxdWVyeVBhcmFtcyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXRBZ2dzKCk7XG4gICAgdGhpcy5xdWVyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMucXVlcnlTdGF0ZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG59XG4iLCI8IS0tIDxlby1kaWFsb2cgW3Zpc2libGVdPVwidHJ1ZVwiIFtzdHlsZUNsYXNzXT1cIidlby1hcHAtc2VhcmNoLWRpYWxvZydcIiBbYWxpZ25dPVwiJ3N0YXJ0J1wiIFttaW5XaWR0aF09XCInODB2dydcIlxuICBbbWluSGVpZ2h0XT1cIicxMDB2aCdcIiAoaGlkZSk9XCJjbG9zZVNlYXJjaE1lbnUoJGV2ZW50KVwiPiAtLT5cbjwhLS0gPHl2Yy1kaWFsb2cgW29wdGlvbnNdPVwie2xpZ2h0RGlzbWlzczogdHJ1ZX1cIiBbdGVtcGxhdGVdPVwidHBsU2VhcmNoXCIgKGNsb3NlZCk9XCJjbG9zZVNlYXJjaE1lbnUoKVwiPjwveXZjLWRpYWxvZz4gLS0+XG48bmctdGVtcGxhdGUgI3RwbFNlYXJjaD5cblxuICA8ZGl2IGNsYXNzPVwiZW8tYXBwLXNlYXJjaFwiIFtuZ0NsYXNzXT1cIntleHBlcnQ6IHF1ZXJ5LmV4cGVydE1vZGV9XCIgZW9SdGxBd2FyZT1cImZ1bGxcIiAqbmdJZj1cInF1ZXJ5XCI+XG5cbiAgICA8ZGl2IGNsYXNzPVwiaGVhZFwiPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoXCI+XG4gICAgICAgIDxmb3JtIChzdWJtaXQpPVwiZXhlY3V0ZVNlYXJjaCgpXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaDwvZGl2PlxuXG4gICAgICAgICAgPGVvLXF1ZXJ5LXNjb3BlLXNlbGVjdCBbc2VsZWN0aW9uXT1cInF1ZXJ5U2NvcGVcIiAoc2VsZWN0KT1cInNldFF1ZXJ5U2NvcGUoJGV2ZW50KVwiPjwvZW8tcXVlcnktc2NvcGUtc2VsZWN0PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1ib3hcIiBbZm9ybUdyb3VwXT1cInRlcm1Gb3JtXCI+XG5cbiAgICAgICAgICAgIDx5dmMtYXV0b2NvbXBsZXRlICpuZ0lmPVwiIXF1ZXJ5LmV4cGVydE1vZGU7IGVsc2UgZXhwZXJ0SW5wdXRcIiAjc2VhcmNoSW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwidGVybVwiIFthdXRvY29tcGxldGVWYWx1ZXNdPVwiYXV0b2NvbXBsZXRlUmVzdWx0c1wiXG4gICAgICAgICAgICAgIChzdWdnZXN0aW9uU2VsZWN0KT1cImF1dG9jb21wbGV0ZVNlbGVjdCgpXCIgKGtleWRvd24uZW50ZXIpPVwiZXhlY3V0ZVNlYXJjaCgpXCIgKHBhc3RlKT1cImF1dG9jb21wbGV0ZVBhc3RlKCRldmVudClcIj5cbiAgICAgICAgICAgIDwveXZjLWF1dG9jb21wbGV0ZT5cblxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNleHBlcnRJbnB1dD5cbiAgICAgICAgICAgICAgPGlucHV0IGF1dG9mb2N1cz1cImF1dG9mb2N1c1wiIGNsYXNzPVwiZXhwZXJ0LXNlYXJjaF9faW5wdXRcIiAjeHBpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiZXhwZXJ0VGVybUNoYW5nZWQoKVwiIFsobmdNb2RlbCldPVwicXVlcnkudGVybVwiIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gZXhwZXJ0LW1vZGVcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInRvZ2dsZUV4cGVydE1vZGUoKVwiPlxuICAgICAgICAgICAgICA8IS0tPHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj4tLT5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXhwZXJ0LXNlYXJjaC5zdmcnXCJcbiAgICAgICAgICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLm1vZGUuZXhwZXJ0JyB8IHRyYW5zbGF0ZSlcIiAqbmdJZj1cIiFxdWVyeT8uZXhwZXJ0TW9kZTsgZWxzZSBjbG9zZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjbG9zZT5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19leHBlcnQtc2VhcmNoLnN2ZydcIlxuICAgICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5tb2RlLmV4cGVydC5jbG9zZScgfCB0cmFuc2xhdGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGV4cGVydC1tb2RlIGV4cGVydC1tb2RlX19yZXNldFwiIFtuZ0NsYXNzXT1cInthY3RpdmU6IHF1ZXJ5LnRlcm19XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInJlc2V0RXhwZXJ0TW9kZUlucHV0KClcIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5jbGVhci5zZWFyY2gnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0XCIgdHlwZT1cInN1Ym1pdFwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Zvcm0+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInJlc3VsdFwiICpuZ0lmPVwiIWxvYWRpbmc7IGVsc2Ugc3Bpbm5lclwiPnt7cXVlcnlTdGF0ZS50b3RhbENvdW50IHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI3NwaW5uZXI+XG4gICAgICAgIDxlby1sb2FkaW5nLXNwaW5uZXIgY2xhc3M9XCJzZWFyY2gtYWdncmVnYXRvcl9fbG9hZGVyXCIgW3NpemVdPVwiJ21lZGl1bSdcIiBbbW9kZV09XCInZGFyaydcIj48L2VvLWxvYWRpbmctc3Bpbm5lcj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8ZW8taWNvbiBjbGFzcz1cImJ1dHRvbiB3aGl0ZSBjbG9zZVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIlxuICAgICAgICBbaWNvblRpdGxlXT1cIignZW8uc2VhcmNoLmNsb3NlJyB8IHRyYW5zbGF0ZSlcIiAoY2xpY2spPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L2VvLWljb24+XG5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJib2R5XCIgKm5nSWY9XCIhcXVlcnkuZXhwZXJ0TW9kZTsgZWxzZSBleHBlcnRcIj5cblxuICAgICAgPHl2Yy10YWJzICh0YWJDaGFuZ2UpPVwib25UYWJDaGFuZ2UoJGV2ZW50KVwiIGxheW91dFNldHRpbmdzSUQ9XCJlby5zZWFyY2guZGlhbG9nLnRhYnNcIj5cblxuICAgICAgICA8IS0tIG9iamVjdCB0eXBlIHNlbGVjdCAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFt5dmNUYWJdPVwie2lkOiAncmVzdHJpY3RUeXBlJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QudHlwZScgfCB0cmFuc2xhdGV9XCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwib2JqZWN0LXR5cGVzIHJlc3QtYm94LWNvbnRhaW5lclwiIFtuZ0NsYXNzXT1cIntpZHhlbmFibGVkOiBxdWVyeS50eXBlcy5sZW5ndGggPCAxfVwiXG4gICAgICAgICAgICAqbmdJZj1cIm9iamVjdFR5cGVHcm91cHMgJiYgIWlkeFNlYXJjaFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIHJlc3QtYm94XCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIG9iamVjdFR5cGVHcm91cHM7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLWhlYWRlclwiPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2gzPlxuICAgICAgICAgICAgICAgIDxoMyAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIiB0cmFuc2xhdGU+e3snZW8uc2VhcmNoLmdyb3VwLmdlbmVyYWwnfX08L2gzPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb3ZlLWljb25zXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IDBcIiBjbGFzcz1cIm1vdmUtbGVmdC1maXJzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnZmlyc3QnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xhc3Quc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gMFwiIGNsYXNzPVwibW92ZS1sZWZ0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2xlZnQnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xlZnQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gb2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJtb3ZlLXJpZ2h0LWljb25cIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ3JpZ2h0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19yaWdodC5zdmcnXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSBvYmplY3RUeXBlR3JvdXBzLmxlbmd0aCAtIDFcIiBjbGFzcz1cIm1vdmUtcmlnaHQtbGFzdFwiIChjbGljayk9XCJtb3ZlT2JqZWN0VHlwZUdyb3VwKGdyb3VwLmxhYmVsLCAnbGFzdCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfbGFzdC5zdmcnXCI+PC9lby1pY29uPlxuXG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidHlwZVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGdyb3VwLnR5cGVzXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7Y29udGV4dDogdHlwZS5pc0NvbnRleHRGb2xkZXIsIGZvbGRlcjogdHlwZS5pc0ZvbGRlciwgYWJzdHJhY3Q6IHR5cGUuaXNBYnN0cmFjdCwgc2VsZWN0ZWQ6IGlzVHlwZUFjdGl2ZSh0eXBlKX1cIj5cblxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjaGVja2JveFwiIChjbGljayk9XCJ0b2dnbGVUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAoY2xpY2spPVwic2VsZWN0T2JqZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gW29iamVjdFR5cGVdPVwidHlwZVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19IHt7dHlwZS5pc0Fic3RyYWN0ID8gJygnKyAoJ2VvLnNlYXJjaC50eXBlLmFic3RyYWN0JyB8IHRyYW5zbGF0ZSkgK1xuICAgICAgICAgICAgICAgICAgICAnKScgOiAnJ319PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2dldEFnZ3JlZ2F0aW9uQ291bnQodHlwZSkgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmRleGRhdGEtc2VhcmNoXCIgKm5nSWY9XCJpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b25cIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19iYWNrLnN2ZydcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJleGl0SW5kZXhkYXRhU2VhcmNoKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDxzcGFuIHRyYW5zbGF0ZSBbdHJhbnNsYXRlUGFyYW1zXT1cInt0eXBlOiBpZHhTZWFyY2gudHlwZS5sYWJlbH1cIj5lby5zZWFyY2gub2JqZWN0dHlwZS5mb3JtPC9zcGFuPlxuICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbnRleHRcIiAqbmdJZj1cImlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLmxlbmd0aFwiPlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0LXNlbGVjdFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgdHJhbnNsYXRlPmVvLnNlYXJjaC5vYmplY3R0eXBlLmZvcm0uY29udGV4dDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cblxuICAgICAgICAgICAgICAgIDxlby1jb250ZXh0LXNlYXJjaCAqbmdGb3I9XCJsZXQgY3R4IG9mIGlkeFNlYXJjaC5jb250ZXh0TW9kZWxzOyBpbmRleCBhcyBpXCIgW2N0eF09XCJjdHhcIiBbcXVlcnldPVwicXVlcnlcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkXT1cImN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSA9PT0gY3R4Lm5hbWVcIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIihjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgJiYgY3VycmVudENvbnRleHRGb2xkZXJOYW1lICE9PSBjdHgubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgW2lkeFNlYXJjaF09XCJpZHhTZWFyY2hcIiAoc2V0Q29udGV4dCk9XCJzZXRDb250ZXh0KCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8L2VvLWNvbnRleHQtc2VhcmNoPlxuICAgICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cImNvbnRleHQgZm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSBjbGFzcz1cImRhcmtcIiAjY3R4Zm9ybVxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zICYmIGlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnM/LmZvcm1Nb2RlbD8uZWxlbWVudHM/Lmxlbmd0aFwiXG4gICAgICAgICAgICAgICAgICBbZm9ybU9wdGlvbnNdPVwiaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9uc1wiIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgICAgPC9zZWN0aW9uPlxuICAgICAgICAgICAgPC9kaXY+XG5cblxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJvYmplY3QtdHlwZSBmb3JtXCIgKm5nSWY9XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgPGVvLW9iamVjdC1mb3JtICNpZHhmb3JtIFtmb3JtT3B0aW9uc109XCJpZHhTZWFyY2guZm9ybU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgIChzdGF0dXNDaGFuZ2VkKT1cIm9uSW5kZXhEYXRhQ2hhbmdlZCgkZXZlbnQpXCIgKG9uRm9ybVJlYWR5KT1cImlkeGZvcm0uZm9jdXNGb3JtKClcIj5cbiAgICAgICAgICAgICAgPC9lby1vYmplY3QtZm9ybT5cbiAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8IS0tIGNyZWF0ZWQgdGFiIC0tPlxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdENyZWF0ZWQnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbicgfCB0cmFuc2xhdGUgfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcmVhdGVkIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC10aW1lc3BhblwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLkNSRUFURURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5DUkVBVEVELCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW4tY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uY3VzdG9tPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2NyZWF0ZWRGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLnRpbWUuc3BhbicgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1kYXRldGltZS1yYW5nZSAjY3JlYXRlZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZVwiIG5hbWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRvcl09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLnZhbHVlID8gZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cImNyZWF0ZWRGaWVsZC5zZWFyY2hPcHRpb24gJiYgY3JlYXRlZEZpZWxkLnNlYXJjaE9wdGlvbiAhPT0gT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkNSRUFURUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGNyZWF0ZWRGb3JtKVwiIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tZGF0ZXRpbWUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1jcmVhdG9yXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy5jcmVhdG9yPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2NyZWF0b3JGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLmNyZWF0ZWRieScgfCB0cmFuc2xhdGVcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1vcmdhbml6YXRpb24gW211bHRpc2VsZWN0XT1cInRydWVcIiBbKG5nTW9kZWwpXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0udmFsdWVcIiBuYW1lPVwiY3JlYXRvclwiXG4gICAgICAgICAgICAgICAgICAgIChvblZhbHVlUmVzb2x2ZWQpPVwicmVzb2x2ZUxhYmVsKGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0sICRldmVudClcIiBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKFBBUkFNUy5DUkVBVE9SLCBPUEVSQVRPUi5JTiwgJGV2ZW50LCBjcmVhdG9yRm9ybSlcIj48L2VvLW9yZ2FuaXphdGlvbj5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFt5dmNUYWJdPVwie2lkOiAncmVzdHJpY3RNb2RpZmljYXRpb24nLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5tb2RpZmljYXRpb24nIHwgdHJhbnNsYXRlfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RpZmllZCByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW5cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3BhbjwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5NT0RJRklFRF1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLk1PRElGSUVELCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW4tY3VzdG9tXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4uY3VzdG9tPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI21vZGlmaWVkRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tZGF0ZXRpbWUtcmFuZ2UgI21vZGlmaWVkRmllbGQgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZVwiIG5hbWU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIFtvcGVyYXRvcl09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZSA/IGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLnZhbHVlLm9wZXJhdG9yIDogT1BFUkFUT1IuRVFVQUxcIlxuICAgICAgICAgICAgICAgICAgICBbd2l0aFRpbWVdPVwibW9kaWZpZWRGaWVsZC5zZWFyY2hPcHRpb24gJiYgbW9kaWZpZWRGaWVsZC5zZWFyY2hPcHRpb24gIT09IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKFBBUkFNUy5NT0RJRklFRCwgT1BFUkFUT1IuRVFVQUwsICRldmVudCwgbW9kaWZpZWRGb3JtKVwiIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIj5cbiAgICAgICAgICAgICAgICAgIDwvZW8tZGF0ZXRpbWUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1tb2RpZmllclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cubW9kaWZpZXI8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjbW9kaWZpZXJGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2guYWdnLm1vZGlmaWVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS52YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIG5hbWU9XCJtb2RpZmllclwiIChvblZhbHVlUmVzb2x2ZWQpPVwicmVzb2x2ZUxhYmVsKGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRVJdLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRVIsIE9QRVJBVE9SLklOLCAkZXZlbnQsIG1vZGlmaWVyRm9ybSlcIj48L2VvLW9yZ2FuaXphdGlvbj5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0RmlsZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGUnIHwgdHJhbnNsYXRlfVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlIHJlc3QtYm94LWNvbnRhaW5lclwiICpuZ0lmPVwicXVlcnlTdGF0ZS5hZ2dyZWdhdGlvbnNcIj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1taW1ldHlwZS1ncm91cFwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5taW1ldHlwZWdyb3VwPC9oMz5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtaXRlbVwiICpuZ0Zvcj1cImxldCBhZ2cgb2YgYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0RmlsdGVyKFBBUkFNUy5NSU1FVFlQRUdST1VQLCBPUEVSQVRPUi5JTiwgcmVzb2x2ZVNlbGVjdGlvbihhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0sIGFnZy5rZXksIGFnZy5zZWxlY3RlZCkpXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGFnZy5zZWxlY3RlZCwgc2F2ZWQ6IGFnZy5zYXZlZH1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIj5cbiAgICAgICAgICAgICAgICAgIDxzdmcgZmlsbD1cIiNmZmZmZmZcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkgMTYuMTdMNC44MyAxMmwtMS40MiAxLjQxTDkgMTkgMjEgN2wtMS40MS0xLjQxelwiIC8+XG4gICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2FnZy5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3thZ2cudmFsdWUgfCBsb2NhbGVEZWNpbWFsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc3QtYm94IGJveC1maWxlc2l6ZVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5maWxlc2l6ZTwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5GSUxFU0laRV1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVGaWx0ZXIoUEFSQU1TLkZJTEVTSVpFLCBPUEVSQVRPUi5SQU5HRSwgYWdnLmtleSwgYWdnLnNlbGVjdGVkKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZW5hbWVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWU8L2gzPlxuICAgICAgICAgICAgICA8Zm9ybSAjZmlsZW5hbWVGb3JtPVwibmdGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGVvLWZvcm0taW5wdXQgW2xhYmVsXT1cIidlby5zZWFyY2gucmVzdHJpY3QuZmlsZW5hbWUnIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tc3RyaW5nIFthdXRvY29tcGxldGVdPVwidHJ1ZVwiIFtxbmFtZV09XCInZmlsZW5hbWUnXCJcbiAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVOQU1FXS52YWx1ZVwiIG5hbWU9XCJmaWxlbmFtZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuRklMRU5BTUUsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIGZpbGVuYW1lRm9ybSlcIj48L2VvLXN0cmluZz5cbiAgICAgICAgICAgICAgICA8L2VvLWZvcm0taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC95dmMtdGFicz5cblxuICAgICAgPCEtLSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBmaWx0ZXJzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cInN1bW1hcnktcGFuZWxcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiaGVhZGxpbmUgc3RvcmVkLXF1ZXJ5XCIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2hlYWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VJbmJldHdlblwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNhdmVkU2VhcmNoSWNvblwiPlxuICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19zYXZlZF9zZWFyY2guc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuc3RvcmVkcXVlcnk8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0b3JlZC1xdWVyeS1uYW1lXCI+e3tzdG9yZWRRdWVyeS5uYW1lfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI3JlZ2hlYWQ+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5PC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJxdWVyeS10eXBlc1wiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tc2VhcmNodGVybVwiICpuZ0lmPVwicXVlcnkudGVybVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnRlcm08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3txdWVyeS50ZXJtfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUZXJtKClcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY29udGV4dHR5cGVcIiAqbmdJZj1cInF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS5jb250ZXh0Zm9sZGVydHlwZXM8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVDb250ZXh0VHlwZSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW9iamVjdHR5cGVcIiAqbmdJZj1cInF1ZXJ5LnR5cGVzLmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkudHlwZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZW1vdmVUeXBlKHR5cGUpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI2ZpbHRlclRlbXBsYXRlIGxldC1maWx0ZXIgbGV0LXRyYW5zbGF0ZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJmaWx0ZXIuaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB2YWwgb2YgZmlsdGVyLmlubmVyVmFsdWU7IGluZGV4IGFzIGlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e2ZpbHRlci5sYWJlbFtpXSB8IGFzeW5jfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZW8taWNvbiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCIgKGNsaWNrKT1cInJlc2V0RmlsdGVyKGZpbHRlciwgdmFsKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1jcmVhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0uaW5uZXJWYWx1ZT8ubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmNyZWF0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRPUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1vZGlmaWNhdGlvblwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXS5pbm5lclZhbHVlPy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uPC9kaXY+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tbWltZXR5cGVncm91cFwiXG4gICAgICAgICAgICAqbmdJZj1cImZpbHRlcnNNb2RlbFtQQVJBTVMuTUlNRVRZUEVHUk9VUF0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0uaW5uZXJWYWx1ZS5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0uaW5uZXJWYWx1ZS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZTwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkZJTEVTSVpFXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWN0aW9uc1wiICpuZ0lmPVwicXVlcnkudGVybSB8fCBxdWVyeS5maWx0ZXJzLmxlbmd0aCB8fCBxdWVyeS50eXBlcy5sZW5ndGg7IGVsc2UgZW1wdHlTZWFyY2hcIj5cblxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1N0b3JlZFF1ZXJ5OyBlbHNlIHJlZ2FjdGlvbnNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzZWNvbmRhcnkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkuY2xvc2U8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXVwZGF0ZVwiIChjbGljayk9XCJ1cGRhdGVTdG9yZWRRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiBpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdG9yZWRxdWVyeS51cGRhdGU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdhY3Rpb25zPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tcmVzZXRcIiAoY2xpY2spPVwicmVzZXRRdWVyeSgpXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXNldDwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgZ3JleSBidG4tc2F2ZVwiIChjbGljayk9XCJzYXZlUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgIWlzT3duUXVlcnlcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnNhdmU8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGJ0bi1zdWJtaXRcIiAoY2xpY2spPVwiZXhlY3V0ZVNlYXJjaCgpXCIgW2Rpc2FibGVkXT1cInF1ZXJ5U3RhdGUuaXNFbXB0eVwiXG4gICAgICAgICAgICAgIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VibWl0PC9idXR0b24+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlTZWFyY2g+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5LXNlYXJjaFwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3VtbWFyeS5lbXB0eTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICA8L2Rpdj5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIGV4cGVydCBtb2RlIGJvZHkgcGFuZWwgY29udGFpbmluZyBleHBsYW5hdGlvbnMgLS0+XG4gICAgPG5nLXRlbXBsYXRlICNleHBlcnQ+XG4gICAgICA8ZGl2IGNsYXNzPVwiYm9keSBleHBlcnRcIj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZW1wdHlcIiAqbmdJZj1cImV4cGVydE1vZGVRdWVyeUVtcHR5XCI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5yZXN1bHQuZW1wdHk8L3NwYW4+PC9kaXY+XG5cbiAgICAgICAgPCEtLVxuICAgICAgICA8aDI+PHNwYW4gdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydDwvc3Bhbj48L2gyPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiaW50cm9cIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LmludHJvPC9kaXY+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImJhc2UtcGFyYW1zIGZpZWxkc1wiPlxuICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuYmFzZXBhcmFtczwvaDI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5iYXNlUGFyYW1zXCIgKGNsaWNrKT1cInhwQWRkVG9UZXJtKGVsLmRhdGEpXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzeXN0ZW0tdHlwZXMgZmllbGRzXCI+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi1ncm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC5ncm91cDwvaDI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZ3JvdXAgb2YgdHlwZUdyb3VwVHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwICYmIGdyb3VwLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0R3JvdXAoZ3JvdXApXCI+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsICE9PSAnMCdcIj57e2dyb3VwLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZ3JvdXAubGFiZWwgPT09ICcwJ1wiPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJyB8IHRyYW5zbGF0ZX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sdW1uIGNvbHVtbi10eXBlXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LnR5cGU8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC50cmVlXCJcbiAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZSAmJiB0eXBlLmlkID09PSBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuaWR9XCJcbiAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwieHBTZWxlY3RUeXBlKHR5cGUpXCI+XG4gICAgICAgICAgICAgICAgPGRpdj57e3R5cGUubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBzZWN0aW9uLWZpZWxkXCIgKm5nSWY9XCJleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGVcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZmllbGQ8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGVsIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkVHlwZS5jaGlsZHJlblwiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPjxzcGFuPnt7ZWwubGFiZWx9fTwvc3Bhbj48c3BhbiBjbGFzcz1cInR5cGVcIj57e2VsLnR5cGV9fTwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF0YVwiPnt7ZWwuZGF0YX19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L2Rpdj5cbiAgPCEtLSA8L2VvLWRpYWxvZz4gLS0+XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
853
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL2VvLWZyYW1ld29yay9hcHAtc2hlbGwvYXBwLWJhci9hcHAtc2VhcmNoL2FwcC1zZWFyY2guY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9lby1mcmFtZXdvcmsvYXBwLXNoZWxsL2FwcC1iYXIvYXBwLXNlYXJjaC9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxJQUFJLGtCQUFrQixFQUM5QixJQUFJLElBQUksY0FBYyxFQUN0QixFQUFFLElBQUksWUFBWSxFQUNsQixPQUFPLEVBRVAsR0FBRyxFQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUQsT0FBTyxFQUdMLFNBQVMsRUFFVCxZQUFZLEVBR1osTUFBTSxFQUVOLFdBQVcsRUFDWCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2xCLE1BQU0sZUFBZSxDQUFDO0FBT3ZCLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxzREFBc0QsQ0FBQztBQUVwRixPQUFPLEVBUUwsVUFBVSxFQUNWLFlBQVksRUFDWixXQUFXLEVBSVgsV0FBVyxFQUlYLEtBQUssRUFDTixNQUFNLGNBQWMsQ0FBQztBQUV0QixPQUFPLEVBQUMsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFFOUQsT0FBTyxFQUFDLFlBQVksRUFBRSxjQUFjLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQVc1RCxJQUFNLGtCQUFrQixHQUF4QixNQUFNLGtCQUFrQjtJQTJEN0IsSUFBSSxRQUFRLENBQUMsS0FBSztRQUNoQixJQUFJLENBQUMsU0FB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NUMsbXd1QkFrYkE7O0FEalhhLGtCQUFrQjtJQVQ5QixZQUFZLEVBQUU7R0FTRixrQkFBa0IsQ0FtNkI5Qjs7MkZBbjZCWSxrQkFBa0I7a0JBUjlCLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJOzRlQVNRLFNBQVM7c0JBQXJELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUMsSUFBSSxFQUFFLFdBQVcsRUFBQztnQkFDakIsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhO2dCQUNGLFdBQVc7c0JBQWhDLFNBQVM7dUJBQUMsU0FBUztnQkFDRSxhQUFhO3NCQUFsQyxTQUFTO3VCQUFDLFNBQVM7Z0JBQ0UsV0FBVztzQkFBaEMsU0FBUzt1QkFBQyxTQUFTO2dCQWlEYixlQUFlO3NCQURyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgZm9ya0pvaW4gYXMgb2JzZXJ2YWJsZUZvcmtKb2luLFxuICBmcm9tIGFzIG9ic2VydmFibGVGcm9tLFxuICBvZiBhcyBvYnNlcnZhYmxlT2YsXG4gIFN1YmplY3QsXG4gIFN1YnNjcmlwdGlvbixcbiAgdGFwXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWUsIHBsdWNrLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUmVuZGVyZXIyLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmF2aWdhdGlvbkV4dHJhcywgUm91dGVyfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtPYmplY3RGb3JtQ29tcG9uZW50fSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS9vYmplY3QtZm9ybS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgRm9ybVN0YXR1c0NoYW5nZWRFdmVudFxufSBmcm9tICcuLi8uLi8uLi9vYmplY3QtZm9ybS9pbmRleCc7XG5pbXBvcnQge0Zvcm1CdWlsZGVyLCBOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7TG9jYWxlRGF0ZVBpcGV9IGZyb20gJy4uLy4uLy4uLy4uL2VvLWZyYW1ld29yay1jb3JlL3BpcGVzL2xvY2FsZS1kYXRlLnBpcGUnO1xuaW1wb3J0IHtBcHBTZWFyY2hTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi8uLi9lby1mcmFtZXdvcmstY29yZS9zZWFyY2gvYXBwLXNlYXJjaC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIENhcGFiaWxpdGllcyxcbiAgQ2FwYWJpbGl0aWVzU2VydmljZSxcbiAgTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgTG9nZ2VyLFxuICBOb3RpZmljYXRpb25zU2VydmljZSxcbiAgT2JqZWN0VHlwZSxcbiAgUXVlcnlTY29wZSxcbiAgUmFuZ2VWYWx1ZSxcbiAgU2VhcmNoRmlsdGVyLFxuICBTZWFyY2hRdWVyeSxcbiAgU2VhcmNoU2VydmljZSxcbiAgU2VhcmNoU3RhdGUsXG4gIFN0b3JlZFF1ZXJpZXNTZXJ2aWNlLFxuICBTdG9yZWRRdWVyeSxcbiAgU3lzdGVtU2VydmljZSxcbiAgVHJhbnNsYXRlU2VydmljZSxcbiAgVXNlclNlcnZpY2UsXG4gIFV0aWxzXG59IGZyb20gJ0Blby1zZGsvY29yZSc7XG5pbXBvcnQge0F1dG9Db21wbGV0ZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQge0NvbnRleHRUeXBlLCBJZHhTZWFyY2h9IGZyb20gJy4vYXBwLXNlYXJjaC5pbnRlcmZhY2UnO1xuaW1wb3J0IHtZdmNPdmVybGF5UmVmLCBZdmNPdmVybGF5U2VydmljZX0gZnJvbSAnQHl1dXZpcy9jb21wb25lbnRzL292ZXJsYXknO1xuaW1wb3J0IHtVbnRpbERlc3Ryb3ksIHVudGlsRGVzdHJveWVkfSBmcm9tIFwiQG5nbmVhdC91bnRpbC1kZXN0cm95XCI7XG5cbkBVbnRpbERlc3Ryb3koKVxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZW8tYXBwLXNlYXJjaCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcHAtc2VhcmNoLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vYXBwLXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG4gIC8vIHRvZG86IGFwcGx5IG9uUHVzaCBjaGFuZ2UgZGV0ZWN0aW9uIChhZ2cgc2VhcmNoIHJlc3VsdCByaWdodCBub3cgZG9lc24ndCB1cGRhdGUpXG4gIC8vIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFwcFNlYXJjaENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgUEFSQU1TID0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVM7XG4gIE9QRVJBVE9SID0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SO1xuICBxdWVyeVNjb3BlOiBRdWVyeVNjb3BlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RwbFNlYXJjaCcsIHtyZWFkOiBUZW1wbGF0ZVJlZn0pIHRwbFNlYXJjaDogVGVtcGxhdGVSZWY8YW55PjtcbiAgQFZpZXdDaGlsZCgnc2VhcmNoSW5wdXQnKSBzZWFyY2hJbnB1dDogQXV0b0NvbXBsZXRlO1xuICBAVmlld0NoaWxkKCd4cGlucHV0JykgZXhwZXJ0SW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lkeGZvcm0nKSBpbmRleGRhdGFGb3JtOiBPYmplY3RGb3JtQ29tcG9uZW50O1xuICBAVmlld0NoaWxkKCdjdHhmb3JtJykgY29udGV4dEZvcm06IE9iamVjdEZvcm1Db21wb25lbnQ7XG5cbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZj86IFl2Y092ZXJsYXlSZWY7XG4gIHByaXZhdGUgcXVlcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcbiAgcHJpdmF0ZSBxdWVyeVN0YXRlU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHF1ZXJ5OiBTZWFyY2hRdWVyeTtcbiAgcXVlcnlTdGF0ZTogU2VhcmNoU3RhdGU7XG4gIGNhcGFiaWxpdGllczogQ2FwYWJpbGl0aWVzO1xuICBhY3RpdmVUYWJJZD86IHN0cmluZztcbiAgbG9hZGluZzogYm9vbGVhbjtcblxuICBpc1N0b3JlZFF1ZXJ5OiBib29sZWFuO1xuICBpc093blF1ZXJ5ID0gZmFsc2U7XG4gIG9iamVjdFR5cGVHcm91cHMgPSBbXTtcbiAgdHlwZUdyb3VwVHJlZSA9IFtdO1xuICBhdXRvY29tcGxldGVSZXN1bHRzOiBzdHJpbmdbXTtcblxuICBpZHhTZWFyY2g6IElkeFNlYXJjaDtcbiAgY3VycmVudENvbnRleHRGb2xkZXJOYW1lO1xuXG4gIGV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIGV4cGVydE1vZGVTdXBwb3J0ID0ge1xuICAgIGJhc2VQYXJhbXM6IFtdLFxuICAgIHNlbGVjdGVkR3JvdXA6IG51bGwsXG4gICAgc2VsZWN0ZWRUeXBlOiBudWxsXG4gIH07XG5cbiAgZmlsdGVyc01vZGVsID0ge307XG4gIGFnZ3JlZ2F0aW9uc01vZGVsID0ge307XG4gIGRhdGVQaXBlOiBMb2NhbGVEYXRlUGlwZTtcbiAgc3lzUm9vdENvbnRleHQgPSB7XG4gICAgaWQ6IG51bGwsXG4gICAgbmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdCxcbiAgICBsYWJlbDogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uYWRkLnRpdGxlLmxvY2F0aW9uLmNvbW1vbicpLFxuICAgIHNpdHVhdGlvbjogJ1NFQVJDSCcsXG4gICAgbW9kZTogJ0NPTlRFWFQnLFxuICAgIGNvbnRleHRGb3JtT3B0aW9uczoge1xuICAgICAgZm9ybU1vZGVsOiB7bmFtZTogQ29udGV4dFR5cGUuc3lzcm9vdH1cbiAgICB9XG4gIH07XG5cbiAgX3NlbGVjdGVkOiBudW1iZXIgPSBudWxsO1xuXG4gIG9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5ID0gJ2VvLmFwcC5zZWFyY2gub2JqZWN0LnR5cGUuZ3JvdXAuc29ydGVkTGlzdCc7XG4gIHRlcm1Gb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gICAgdGVybTogW11cbiAgfSk7XG5cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBvbkV4ZWN1dGVTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHNldCBzZWxlY3RlZChpbmRleCkge1xuICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPT09IGluZGV4ID8gbnVsbCA6IGluZGV4O1xuICB9XG5cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgfVxuXG4gIGdldCBzdG9yZWRRdWVyeSgpOiBTdG9yZWRRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnkgYXMgU3RvcmVkUXVlcnk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFNlYXJjaFNlcnZpY2U6IEFwcFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBZdmNPdmVybGF5U2VydmljZSxcbiAgICBwcml2YXRlIHNlYXJjaFNlcnZpY2U6IFNlYXJjaFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzeXN0ZW1TZXJ2aWNlOiBTeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgbm90aWZpY2F0aW9uczogTm90aWZpY2F0aW9uc1NlcnZpY2UsXG4gICAgcHVibGljIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHN0b3JlZFF1ZXJpZXNTZXJ2aWNlOiBTdG9yZWRRdWVyaWVzU2VydmljZSxcbiAgICBwcml2YXRlIGNhcGFiaWxpdHlTZXJ2aWNlOiBDYXBhYmlsaXRpZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyOiBMb2dnZXIsXG4gICAgcHJpdmF0ZSBzdG9yYWdlU2VydmljZTogTG9jYWxTdG9yYWdlU2VydmljZSxcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlclxuICApIHtcblxuICAgIHRoaXMuZGF0ZVBpcGUgPSBuZXcgTG9jYWxlRGF0ZVBpcGUodHJhbnNsYXRlKTtcblxuICAgIHRoaXMuZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtcyA9IE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5tYXAoayA9PiB7XG4gICAgICBsZXQgZGF0YSA9IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TW2tdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLmdsb2JhbC5iYXNlcGFyYW0uJyArIGRhdGEpLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1xuICAgICkubWFwKGsgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAga2V5OiBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTW2tdLFxuICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgIGxhYmVsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdlby5zZWFyY2guYWdnLnRpbWUuJyArIFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba11cbiAgICAgICAgKVxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURdID0gT2JqZWN0LmtleXMoXG4gICAgICBTZWFyY2hRdWVyeS5USU1FX1BFUklPRF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5LlRJTUVfUEVSSU9EX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cudGltZS4nICsgU2VhcmNoUXVlcnkuVElNRV9QRVJJT0RfQlVDS0VUU1trXVxuICAgICAgICApXG4gICAgICB9O1xuICAgIH0pO1xuXG4gICAgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NSU1FVFlQRUdST1VQXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTXG4gICAgKS5tYXAoayA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBrZXk6IFNlYXJjaFF1ZXJ5Lk1JTUVUWVBFR1JPVVBfQlVDS0VUU1trXSxcbiAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICBsYWJlbDogU2VhcmNoUXVlcnkuTUlNRVRZUEVHUk9VUF9CVUNLRVRTW2tdXG4gICAgICB9O1xuICAgIH0pLnNvcnQoKGEsIGIpID0+IGEubGFiZWwubG9jYWxlQ29tcGFyZShiLmxhYmVsKSk7XG5cbiAgICB0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLkZJTEVTSVpFXSA9IE9iamVjdC5rZXlzKFxuICAgICAgU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNcbiAgICApLm1hcChrID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogU2VhcmNoUXVlcnkuRklMRV9TSVpFX0JVQ0tFVFNba10sXG4gICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgbGFiZWw6IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2VvLnNlYXJjaC5hZ2cuZmlsZXNpemUuJyArIFNlYXJjaFF1ZXJ5LkZJTEVfU0laRV9CVUNLRVRTW2tdXG4gICAgICAgIClcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBvblRhYkNoYW5nZSh0YWJJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5hY3RpdmVUYWJJZCA9IHRhYklkO1xuICAgIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0VHlwZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge1xuICAgICAgICAgIHN1Yjoge1xuICAgICAgICAgICAgY29udGV4dGZvbGRlcnR5cGU6IHt9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRhYklkID09PSAncmVzdHJpY3RDcmVhdGVkJykge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7fSxcbiAgICAgICAgY3JlYXRlZDoge31cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGFiSWQgPT09ICdyZXN0cmljdE1vZGlmaWNhdGlvbicpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1vZGlmaWVkOiB7fVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0YWJJZCA9PT0gJ3Jlc3RyaWN0RmlsZScpIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRBZ2dzKHtcbiAgICAgICAgdHlwZToge30sXG4gICAgICAgIG1pbWV0eXBlZ3JvdXA6IHt9LFxuICAgICAgICBmaWxlc2l6ZToge31cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWdncmVnYXRlKCk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeShxdWVyeTogU2VhcmNoUXVlcnkpIHtcbiAgICAvLyBJTVBPUlRBTlQ6IG5ldmVyIGNoYW5nZSB0aGUgbG9jYWwgcXVlcnkgZGlyZWN0bHlcbiAgICAvLyB1c2Ugc2VhcmNoU2VydmljZSwgc28gZXZlcnkgY29tcG9uZW50cyBzdWJzY3JpYmVkIHRvIHRoZSBxdWVyeVxuICAgIC8vIHdpbGwgZ2V0IHRoZSBuZXcgdmFsdWVcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5jdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPSB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGhcbiAgICAgID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0ubmFtZVxuICAgICAgOiBudWxsO1xuICAgIHRoaXMuaXNTdG9yZWRRdWVyeSA9IHF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnk7XG5cbiAgICBpZiAodGhpcy5pc1N0b3JlZFF1ZXJ5KSB7XG4gICAgICBjb25zdCB1c2VyID0gdGhpcy51c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgdGhpcy5pc093blF1ZXJ5ID1cbiAgICAgICAgdGhpcy5zdG9yZWRRdWVyeS51c2VyLnRvTG93ZXJDYXNlKCkgPT09IHVzZXIubmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TKS5mb3JFYWNoKGsgPT4gdGhpcy5wcm9jZXNzRmlsdGVycyhrKSk7XG4gICAgLy8gaWYgd2UgaGF2ZSBhbiBpbmRleGRhdGEgc2VhcmNoIHVzaW5nIGEgY29udGV4dCBidXQgdGhlIGNvbnRleHQgd2FzIHJlbW92ZWRcbiAgICBpZiAoXG4gICAgICAhdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoICYmXG4gICAgICB0aGlzLmlkeFNlYXJjaCAmJlxuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zXG4gICAgKSB7XG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgPSBudWxsO1xuICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBudWxsO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cblxuICAgIC8vIGRlY2lkZSB3aGV0aGVyIG9yIG5vdCB0byBzZXR1cCBhbiBpbmRleGRhdGEgc2VhcmNoXG4gICAgY29uc3QgYWN0aXZhdGVJbmRleGRhdGFTZWFyY2ggPSB0aGlzLnF1ZXJ5Ll9fdXBkYXRlQ2F1c2UgPT09IFNlYXJjaFF1ZXJ5LlVQREFURV9DQVVTRS5UWVBFU19TRVRcbiAgICAgIHx8IHRoaXMucXVlcnkuX191cGRhdGVDYXVzZSA9PT0gU2VhcmNoUXVlcnkuVVBEQVRFX0NBVVNFLkNPTlRFWFRfRk9MREVSX1NFVDtcbiAgICBpZiAoYWN0aXZhdGVJbmRleGRhdGFTZWFyY2gpIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgYSBjb250ZXh0IHR5cGUgc2V0dXAgbWVhbnMsIHRoYXQgd2UgYXJlIHVzaW5nIGluZGV4ZGF0YSBzZWFyY2hcbiAgICAgIHRoaXMuaW5kZXhkYXRhU2VhcmNoKFxuICAgICAgICB0aGlzLnF1ZXJ5LnR5cGVzWzBdLFxuICAgICAgICB0aGlzLnF1ZXJ5LmNvbnRleHRGb2xkZXJUeXBlcy5sZW5ndGggPiAwID8gdGhpcy5xdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXNbMF0gOiBudWxsXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJlxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKHRoaXMucXVlcnkpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgIC8vIGhhdmluZyBqdXN0IG9uZSB0YXJnZXQgdHlwZSBhbmQgaW5kZXhkYXRhIGZpbHRlcnMgYWxzbyBtZWFucywgdGhhdCB3ZSBhcmUgdXNpbmcgaW5kZXhkYXRhIHNlYXJjaFxuICAgICAgdGhpcy5pbmRleGRhdGFTZWFyY2godGhpcy5xdWVyeS50eXBlc1swXSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIC8vIHJlc2V0IGluZGV4ZGF0YSBzZWFyY2ggb3RoZXJ3aXNlLCBiZWNhdXNlIHRoZSBjdXJyZW50IHF1ZXJ5IG1heSBiZSByZXNldCBmcm9tIG91dCBzaWRlIChlLmcuIGJ5IGEgc3RvcmVkIHF1ZXJ5KVxuICAgICAgdGhpcy5pZHhTZWFyY2ggPSBudWxsO1xuICAgIH1cblxuICAgIGlmIChxdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMucXVlcnlTY29wZSA9IHF1ZXJ5LnNjb3BlO1xuICB9XG5cbiAgcHVibGljIHNlbGVjdE9iamVjdFR5cGUodHlwZTogT2JqZWN0VHlwZSkge1xuICAgIC8qKiBzZXQgdXAgdGhlIHJpZ2h0IHR5cGUgZmlsdGVyIGlmIG5vdCBhbHJlYWR5IGRvbmUgKi9cbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoID1cbiAgICAgIHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID4gMSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMDtcbiAgICBjb25zdCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSA9XG4gICAgICB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLnF1ZXJ5LnR5cGVzWzBdLm5hbWUgIT09IHR5cGUubmFtZTtcbiAgICBpZiAocXVlcnlUeXBlc0xlbmd0aCB8fCBxdWVyeVR5cGVzTGVuZ3RoQW5kTmFtZSkge1xuICAgICAgLy8gc2V0dGluZyBvYmplY3QgdHlwZXMgd2lsbCBlbWl0IGEgbmV3IHF1ZXJ5LiBUaGlzIHdpbGwgdGhlbiB0YWtlIGNhcmUgb2ZcbiAgICAgIC8vIHNldHRpbmcgdXAgdGhlIGluZGV4ZGF0YSBmb3JtXG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0UXVlcnlUeXBlcyhbdHlwZV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIGluZGV4ZGF0YSBzZWFyY2ggZm9yIGEgZ2l2ZW4gb2JqZWN0IHR5cGVcbiAgICogQHBhcmFtIHR5cGUgLSBhbiBvYmplY3QgdHlwZVxuICAgKiBAcGFyYW0gY29udGV4dEZvbGRlclR5cGUgLSBjb250ZXh0IGZvbGRlciB0eXBlXG4gICAqL1xuICBwdWJsaWMgaW5kZXhkYXRhU2VhcmNoKHR5cGU6IE9iamVjdFR5cGUsIGNvbnRleHRGb2xkZXJUeXBlPzogT2JqZWN0VHlwZSkge1xuICAgIGlmICghdHlwZSB8fCB0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucXVlcnkudHlwZXMubGVuZ3RoID09PSAxICYmIHRoaXMucXVlcnkudHlwZXNbMF0ubmFtZSA9PT0gdHlwZS5uYW1lKSB7XG4gICAgICAvKiogZXZlbiBpZiB3ZSBzZWxlY3QgYSB0eXBlIHRoYXQgaXMgYWxyZWFkeSBzZWxlY3RlZCwgd2UgbmVlZCB0byBjYWxsIGFnZ3JlZ2F0ZSBhcyB0aGVyZSBtYXkgYmUgY29udGV4dCB0eXBlcyBpbnZvbHZlZCAqL1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEFnZ3Moe1xuICAgICAgICB0eXBlOiB7XG4gICAgICAgICAgc3ViOiB7XG4gICAgICAgICAgICBjb250ZXh0Zm9sZGVydHlwZToge31cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIHRydWUpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcml2ZWRUeXBlcyA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlcygpLmZpbHRlcih0ID0+IHQuc3VwZXJ0eXBlcy5pbmNsdWRlcyh0eXBlLnFuYW1lKSk7XG4gICAgY29uc3QgaXNSb290VHlwZSA9ICEhZGVyaXZlZFR5cGVzLmZpbmQodCA9PiB0LnBhcmVudHR5cGVzLmluY2x1ZGVzKCdzeXNyb290JykpIHx8ICEhdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnR5cGVzQWxsb3dlZFVuZGVyU3lzcm9vdC5maW5kKHJUID0+IHJULnFuYW1lID09PSB0eXBlLnFuYW1lKTtcblxuICAgIHRoaXMuaWR4U2VhcmNoID0ge1xuICAgICAgdHlwZSxcbiAgICAgIGNvbnRleHRGb2xkZXJUeXBlLFxuICAgICAgY29udGV4dE1vZGVsczogaXNSb290VHlwZSA/IFt0aGlzLnN5c1Jvb3RDb250ZXh0XSA6IFtdLFxuICAgICAgZm9ybU9wdGlvbnM6IG51bGxcbiAgICB9O1xuXG4gICAgLyoqIGZldGNoIGNvbnRleHQgdHlwZSBtb2RlbHMgKi9cbiAgICBpZiAodHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmxlbmd0aCkge1xuICAgICAgY29uc3QgdG9GZXRjaCA9IFtdO1xuICAgICAgdHlwZS5hbGxvd2VkY29udGV4dHR5cGVzLmZvckVhY2goY29udGV4dFR5cGUgPT4ge1xuICAgICAgICBjb25zdCBvYmpUeXBlID0gdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGUoY29udGV4dFR5cGUubmFtZSk7XG4gICAgICAgIGlmIChvYmpUeXBlKSB7XG4gICAgICAgICAgdG9GZXRjaC5wdXNoKFxuICAgICAgICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmdldE9iamVjdFR5cGVGb3JtKFxuICAgICAgICAgICAgICBjb250ZXh0VHlwZS5uYW1lLFxuICAgICAgICAgICAgICAnU0VBUkNIJyxcbiAgICAgICAgICAgICAgJ0NPTlRFWFQnXG4gICAgICAgICAgICApXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAodG9GZXRjaC5sZW5ndGgpIHtcbiAgICAgICAgb2JzZXJ2YWJsZUZvcmtKb2luKHRvRmV0Y2gpLnN1YnNjcmliZShmb3JtTW9kZWxzID0+IHtcbiAgICAgICAgICAvKiogYWJzdHJhY3QgY29udGV4dCB0eXBlcyBzaG91bGQgbm90IGJlIHVzZWQgKi9cbiAgICAgICAgICB0aGlzLmFkZENvbnRleHRNb2RlbChmb3JtTW9kZWxzKTtcbiAgICAgICAgICAvKiogaWYgdGhlcmUgd2FzIGEgY29udGV4dCB0eXBlIHByb3ZpZGVkIGJ5IHRoZSBxdWVyeSwgd2UnbGwgc2V0dXAgdGhlIHJpZ2h0IG1vZGVsIGFzIHdlbGwgKi9cbiAgICAgICAgICBpZiAoY29udGV4dEZvbGRlclR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsID0gdGhpcy5pZHhTZWFyY2guY29udGV4dE1vZGVscy5maW5kKFxuICAgICAgICAgICAgICBtID0+IG0ubmFtZSA9PT0gY29udGV4dEZvbGRlclR5cGUubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgaWYgKG1vZGVsKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0Q29udGV4dChtb2RlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbnRleHRGb2xkZXJUeXBlLm5hbWUgPT09IENvbnRleHRUeXBlLnN5c3Jvb3QpIHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3RDb250ZXh0KHRoaXMuc3lzUm9vdENvbnRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLyoqIHRoZSBwcm92aWRlZCBjb250ZXh0IHR5cGUgZG9lcyBub3QgZXhpc3QgYW55IG1vcmUsIHNvIGp1c3QgcmVtb3ZlIGl0ICovXG4gICAgICAgICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRGb2xkZXJUeXBlID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBmb3JtRGF0YTtcbiAgICBsZXQgaWR4RmlsdGVycyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRJbmRleFNlYXJjaFF1ZXJ5RmlsdGVycygpO1xuICAgIGlmIChpZHhGaWx0ZXJzICYmIGlkeEZpbHRlcnMubGVuZ3RoID4gMCkge1xuICAgICAgLy8gc2V0IHVwIGZvcm0gZGF0YSBmcm9tIGluZGV4ZGF0YSBxdWVyeSBmaWx0ZXJzXG4gICAgICBmb3JtRGF0YSA9IGlkeEZpbHRlcnM7XG4gICAgfVxuXG4gICAgY29uc3Qgb2JqZWN0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKHR5cGUubmFtZSk7XG4gICAgaWYgKG9iamVjdFR5cGUpIHtcbiAgICAgIHRoaXMuc3lzdGVtU2VydmljZVxuICAgICAgICAuZ2V0T2JqZWN0VHlwZUZvcm0odHlwZS5uYW1lLCAnU0VBUkNIJylcbiAgICAgICAgLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICAgICAgdGhpcy5pZHhTZWFyY2guZm9ybU9wdGlvbnMgPSB7XG4gICAgICAgICAgICBmb3JtTW9kZWw6IG1vZGVsLFxuICAgICAgICAgICAgZGF0YTogZm9ybURhdGFcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NRdWVyeVN0YXRlKHF1ZXJ5U3RhdGU6IFNlYXJjaFN0YXRlKSB7XG4gICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5xdWVyeVN0YXRlID0gcXVlcnlTdGF0ZTtcbiAgICBpZiAodGhpcy5pZHhTZWFyY2gpIHtcbiAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB7fTtcbiAgICAgIGlmIChxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZS5zaXplKSB7XG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmNvbnRleHRBZ2dyZWdhdGlvbnMgPSB0aGlzLmJ1aWxkQ29udGV4dEFnZ3JlZ2F0aW9ucyhxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9ucy5jb250ZXh0VHlwZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2F2ZSBhZ2dyZWdhdGlvbnMgdmFsdWVzXG4gICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uc01vZGVsW1NlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEVdIHx8ICF0aGlzLnF1ZXJ5LnR5cGVzLmxlbmd0aCB8fCBxdWVyeVN0YXRlLmxhc3RDaGFuZ2UgIT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLlRZUEUpIHtcbiAgICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuVFlQRV0gPSBuZXcgTWFwKHF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUpO1xuICAgIH1cblxuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVELCBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuUkFOR0UpO1xuICAgIHRoaXMuc3luY0FnZ3JlZ2F0aW9ucyhTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5NT0RJRklFRCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTUlNRVRZUEVHUk9VUCwgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOKTtcbiAgICB0aGlzLnN5bmNBZ2dyZWdhdGlvbnMoU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuRklMRVNJWkUsIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSk7XG4gIH1cblxuICBidWlsZENvbnRleHRBZ2dyZWdhdGlvbnMoY29udGV4dFR5cGUpIHtcbiAgICBsZXQgY29udGV4dEFnZ3JlZ2F0aW9ucyA9IHt9O1xuICAgIGNvbnRleHRUeXBlLmZvckVhY2goKHZhbHVlLCBrZXkpID0+IGNvbnRleHRBZ2dyZWdhdGlvbnNba2V5XSA9IHZhbHVlKTtcbiAgICByZXR1cm4gY29udGV4dEFnZ3JlZ2F0aW9ucztcbiAgfVxuXG4gIHByb2Nlc3NGaWx0ZXJzKGs6IHN0cmluZykge1xuICAgIGxldCBmOiBTZWFyY2hGaWx0ZXIgPSB0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba10pO1xuICAgIGlmICghZikge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVNba11dID0ge1xuICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgbXVsdGlWYWx1ZTogW10sXG4gICAgICAgIGlubmVyVmFsdWU6IFtdXG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICAhdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gfHxcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciAhPT0gZlxuICAgICkge1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0gPSB7fTtcbiAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmZpbHRlciA9IGY7XG4gICAgICBsZXQgdmFsdWU6IGFueSA9XG4gICAgICAgIHR5cGVvZiBmLmZpcnN0VmFsdWUgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgZi5vcGVyYXRvciA9PT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLklOXG4gICAgICAgICAgPyBKU09OLnBhcnNlKGYuZmlyc3RWYWx1ZSlcbiAgICAgICAgICA6IHR5cGVvZiBmLmZpcnN0VmFsdWUgIT09ICdib29sZWFuJyA/IFtmLmZpcnN0VmFsdWVdIDogZi5maXJzdFZhbHVlO1xuICAgICAgaWYgKGYub3BlcmF0b3IgPT09IFNlYXJjaEZpbHRlci5PUEVSQVRPUi5SQU5HRSkge1xuICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5tdWx0aVZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gbnVsbDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmLnByb3BlcnR5ID09PSBTZWFyY2hRdWVyeS5CQVNFX1BBUkFNUy5DUkVBVEVEIHx8XG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuTU9ESUZJRURcbiAgICAgICAgKSB7XG4gICAgICAgICAgdmFsdWUgPSBuZXcgUmFuZ2VWYWx1ZShmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLm11bHRpVmFsdWUgPSBudWxsO1xuICAgICAgfVxuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZSA9XG4gICAgICAgIHZhbHVlIGluc3RhbmNlb2YgQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbCA9IFtdO1xuICAgICAgdGhpcy5maWx0ZXJzTW9kZWxbZi5wcm9wZXJ0eV0uaW5uZXJWYWx1ZS5mb3JFYWNoKCh2OiBhbnksIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgZi5wcm9wZXJ0eSA9PT0gU2VhcmNoUXVlcnkuQkFTRV9QQVJBTVMuQ1JFQVRPUiB8fFxuICAgICAgICAgIGYucHJvcGVydHkgPT09IFNlYXJjaFF1ZXJ5LkJBU0VfUEFSQU1TLk1PRElGSUVSXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuZmlsdGVyc01vZGVsW2YucHJvcGVydHldLmxhYmVsW2ldID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpbHRlcnNNb2RlbFtmLnByb3BlcnR5XS5sYWJlbFtpXSA9IG9ic2VydmFibGVPZihcbiAgICAgICAgICAgIHRoaXMucmVuZGVyRmlsdGVyKGYsIHYpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3luY0FnZ3JlZ2F0aW9ucyhuYW1lLCBvcGVyYXRvcikge1xuICAgIHRoaXMuYWdncmVnYXRpb25zTW9kZWxbbmFtZV0uZm9yRWFjaChhZ2cgPT4ge1xuICAgICAgbGV0IGEgPSB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zW25hbWVdLmZpbmQoYWEgPT4gYWEua2V5ID09PSBhZ2cua2V5KTtcbiAgICAgIGlmIChhICYmIGEudmFsdWUgIT09IGFnZy52YWx1ZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSBhLnZhbHVlO1xuICAgICAgfSBlbHNlIGlmICghYSAmJiB0aGlzLnF1ZXJ5U3RhdGUubGFzdENoYW5nZSAhPT0gbmFtZSkge1xuICAgICAgICBhZ2cudmFsdWUgPSAnJztcbiAgICAgIH1cbiAgICAgIGFnZy5zZWxlY3RlZCA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUobmFtZSwgb3BlcmF0b3IsIGFnZy5rZXkpO1xuICAgICAgYWdnLnNhdmVkID0gIWEgJiYgdGhpcy5xdWVyeVN0YXRlLmxhc3RDaGFuZ2UgPT09IG5hbWU7XG4gICAgfSk7XG4gIH1cblxuICByZW5kZXJGaWx0ZXIoZmlsdGVyOiBTZWFyY2hGaWx0ZXIsIHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gdGhpcy5jcmVhdGVEYXRlUmVzdHJpY3Rpb24oZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldKSB7XG4gICAgICBsZXQgYWdnID0gdGhpcy5hZ2dyZWdhdGlvbnNNb2RlbFtmaWx0ZXIucHJvcGVydHldLmZpbmQoYSA9PiBhLmtleSA9PT0gdmFsdWUpO1xuICAgICAgcmV0dXJuIGFnZy5sYWJlbDtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgY3JlYXRlRGF0ZVJlc3RyaWN0aW9uKGZpbHRlcjogU2VhcmNoRmlsdGVyKSB7XG4gICAgc3dpdGNoIChmaWx0ZXIub3BlcmF0b3IpIHtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFOlxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChgZW8uc2VhcmNoLmFnZy50aW1lLiR7ZmlsdGVyLmZpcnN0VmFsdWV9YCk7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5FUVVBTDpcbiAgICAgICAgcmV0dXJuIGA9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0RGF0ZScpfWA7XG4gICAgICBjYXNlIFNlYXJjaEZpbHRlci5PUEVSQVRPUi5JTlRFUlZBTF9JTkNMVURFX0JPVEg6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShmaWx0ZXIuZmlyc3RWYWx1ZSwgJ2VvU2hvcnQnKX0gLSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5zZWNvbmRWYWx1ZSwgJ2VvU2hvcnQnKX1gO1xuICAgICAgY2FzZSBTZWFyY2hGaWx0ZXIuT1BFUkFUT1IuR1JFQVRFUl9PUl9FUVVBTDpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuLnNpbmNlJyl9ICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICAgIGNhc2UgU2VhcmNoRmlsdGVyLk9QRVJBVE9SLkxFU1NfT1JfRVFVQUw6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdlby5zZWFyY2guYWdnLnRpbWUuc3Bhbi51bnRpbCcpfSAke3RoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGZpbHRlci5maXJzdFZhbHVlLCAnZW9TaG9ydCcpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gYCgke2ZpbHRlci5vcGVyYXRvcn0pICR7dGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oZmlsdGVyLmZpcnN0VmFsdWUsICdlb1Nob3J0Jyl9YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlTGFiZWwobW9kZWw6IGFueSwgdmFsdWU6IGFueVtdKSB7XG4gICAgbW9kZWwubGFiZWwuZm9yRWFjaCgobCwgaSkgPT4gbC5uZXh0KHZhbHVlW2ldLnRpdGxlKSk7XG4gIH1cblxuICByZXNvbHZlU2VsZWN0aW9uKGFnZ3M6IGFueVtdLCBrZXk6IHN0cmluZywgc2VsZWN0ZWQ6IGJvb2xlYW4pIHtcbiAgICByZXR1cm4gYWdnc1xuICAgICAgLmZpbHRlcihhID0+IHNlbGVjdGVkID8gYS5rZXkgIT09IGtleSAmJiBhLnNlbGVjdGVkIDogYS5rZXkgPT09IGtleSB8fCBhLnNlbGVjdGVkKVxuICAgICAgLm1hcChhID0+IGEua2V5KTtcbiAgfVxuXG4gIHJlc2V0RXhwZXJ0TW9kZUlucHV0KCkge1xuICAgIHRoaXMucXVlcnkudGVybSA9ICcnO1xuICAgIHRoaXMudGVybUZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICB0ZXJtOiAnJ1xuICAgIH0pO1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyB0b2dnbGVFeHBlcnRNb2RlKCkge1xuICAgIGlmICh0aGlzLnR5cGVHcm91cFRyZWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnR5cGVHcm91cFRyZWUgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYnVpbGRUeXBlR3JvdXBUcmVlKCk7XG4gICAgfVxuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS50b2dnbGVFeHBlcnRNb2RlKCk7XG4gICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5jaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCk7XG4gIH1cblxuICBwdWJsaWMgc2V0UXVlcnlTY29wZShzY29wZTogUXVlcnlTY29wZSkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRRdWVyeVNjb3BlKHNjb3BlKTtcbiAgfVxuXG4gIHB1YmxpYyB4cFNlbGVjdEdyb3VwKGdyb3VwKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZEdyb3VwID0gZ3JvdXA7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSBudWxsO1xuICB9XG5cbiAgcHVibGljIHhwU2VsZWN0VHlwZSh0eXBlKSB7XG4gICAgdGhpcy5leHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIHhwQWRkVG9UZXJtKHN0cikge1xuICAgIGxldCB0ZXJtO1xuICAgIGlmICghdGhpcy5xdWVyeS50ZXJtKSB7XG4gICAgICB0ZXJtID0gc3RyO1xuICAgIH0gZWxzZSB7XG4gICAgICB0ZXJtID0gdGhpcy5xdWVyeS50ZXJtICsgJyAnICsgc3RyO1xuICAgIH1cbiAgICB0aGlzLnF1ZXJ5LnRlcm0gPSB0ZXJtICsgJzonO1xuICAgIHRoaXMuZXhwZXJ0SW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgcHVibGljIHRvZ2dsZVR5cGUoX3R5cGU6IE9iamVjdFR5cGUpIHtcbiAgICAvLyBkbyBub3QgZGlyZWN0bHkgdG9nZ2xlIF90eXBlIG9uIHRoZSBxdWVyeSwgaW5zdGVhZCB1c2UgdGhlXG4gICAgLy8gc2VhcmNoU2VydmljZSB0byB1cGRhdGUgdGhlIHF1ZXJ5IHN0b3JlXG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5VHlwZShfdHlwZSk7XG4gIH1cblxuICBwdWJsaWMgaXNUeXBlQWN0aXZlKF90eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgcmV0dXJuICEhdGhpcy5xdWVyeS50eXBlcy5maW5kKHQgPT4gdC5pZCA9PT0gX3R5cGUuaWQpO1xuICB9XG5cbiAgZ2V0QWdncmVnYXRpb25Db3VudChfdHlwZTogT2JqZWN0VHlwZSkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zLnR5cGUuZ2V0KF90eXBlLm5hbWUpIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KSB7XG4gICAgaWYgKGtleSA9PT0gbnVsbCB8fCBrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChrZXkgaW5zdGFuY2VvZiBSYW5nZVZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IFNlYXJjaEZpbHRlcihmaWx0ZXJUeXBlLCBrZXkub3BlcmF0b3IsIGtleS5maXJzdFZhbHVlLCBrZXkuc2Vjb25kVmFsdWUsIHt0aW1lOiBrZXkub3BlcmF0b3IgIT09IHRoaXMuT1BFUkFUT1IuRVFVQUwsIHRpbWV6b25lOiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHZhbHVlOiBmaXJzdFZhbHVlID0ga2V5LFxuICAgICAgICBzZWNvbmRWYWx1ZSA9IG51bGwsXG4gICAgICAgIHRyYW5zZm9ybURhdGUgPSBudWxsLFxuICAgICAgICB1c2VOb3QgPSBudWxsLFxuICAgICAgICBhY3R1YWxPcGVyYXRvciA9IG51bGxcbiAgICAgIH0gPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyA/IGtleSA6IHt9O1xuICAgICAgcmV0dXJuIG5ldyBTZWFyY2hGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGZpcnN0VmFsdWUsIHNlY29uZFZhbHVlLCB0cmFuc2Zvcm1EYXRlLCB1c2VOb3QsIGFjdHVhbE9wZXJhdG9yKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0RmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIGZvcm0/OiBOZ0Zvcm0pIHtcbiAgICBsZXQgZmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICBsZXQgZW1wdHkgPSB0aGlzLmlzRW1wdHkoZmlsdGVyKTtcbiAgICBsZXQgYWN0aXZlRmlsdGVyID0gdGhpcy5xdWVyeS5maWx0ZXJzLmZpbmQoZmYgPT4gZmYucHJvcGVydHkgPT09IGZpbHRlci5wcm9wZXJ0eSk7XG4gICAgbGV0IGR1cGxpY2F0ZSA9IHRoaXMuaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG5cbiAgICBpZiAoZW1wdHkgJiYgYWN0aXZlRmlsdGVyICYmIGFjdGl2ZUZpbHRlci5vcGVyYXRvciAhPT0gU2VhcmNoRmlsdGVyLk9QRVJBVE9SLlJBTkdFKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVtb3ZlUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2UgaWYgKCFlbXB0eSAmJiAhZHVwbGljYXRlKSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlRmlsdGVyKGZpbHRlclR5cGU6IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZywga2V5OiBhbnksIHNlbGVjdGVkOiBib29sZWFuKSB7XG4gICAgbGV0IGZpbHRlciA9IHRoaXMuYnVpbGRGaWx0ZXIoZmlsdGVyVHlwZSwgb3BlcmF0b3IsIGtleSk7XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IHRoaXMuUEFSQU1TLkZJTEVTSVpFKSB7XG4gICAgICBsZXQgZm9sZGVyRmlsdGVyID0gdGhpcy5idWlsZEZpbHRlcignZm9sZGVyJywgJ2VxJywgZmFsc2UpO1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5RmlsdGVycyhbZmlsdGVyLCBmb2xkZXJGaWx0ZXJdLCAhc2VsZWN0ZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UudG9nZ2xlUXVlcnlGaWx0ZXIoZmlsdGVyLCAhc2VsZWN0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc0VtcHR5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKFxuICAgICAgKCh2YWx1ZSBpbnN0YW5jZW9mIFJhbmdlVmFsdWUgfHwgdmFsdWUgaW5zdGFuY2VvZiBTZWFyY2hGaWx0ZXIpICYmXG4gICAgICAgIHRoaXMuaXNFbXB0eSh2YWx1ZS5maXJzdFZhbHVlKSAmJlxuICAgICAgICB0aGlzLmlzRW1wdHkodmFsdWUuc2Vjb25kVmFsdWUpKSB8fFxuICAgICAgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgaXNGaWx0ZXJBY3RpdmUoZmlsdGVyVHlwZTogc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nLCBrZXk6IGFueSkge1xuICAgIGxldCBmID0gdGhpcy5idWlsZEZpbHRlcihmaWx0ZXJUeXBlLCBvcGVyYXRvciwga2V5KTtcbiAgICByZXR1cm4gISF0aGlzLnF1ZXJ5LmZpbHRlcnMuZmluZChmZiA9PiBmZi5tYXRjaChmLnByb3BlcnR5LCBmLm9wZXJhdG9yLCBmLmZpcnN0VmFsdWUsIGYuc2Vjb25kVmFsdWUpKTtcbiAgfVxuXG4gIHB1YmxpYyByZXNldEZpbHRlcihtb2RlbDogYW55LCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKG1vZGVsLmlubmVyVmFsdWUgaW5zdGFuY2VvZiBBcnJheSAmJiBtb2RlbC5pbm5lclZhbHVlLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBmaWx0ZXIgPSB0aGlzLmJ1aWxkRmlsdGVyKG1vZGVsLmZpbHRlci5wcm9wZXJ0eSwgbW9kZWwuZmlsdGVyLm9wZXJhdG9yLCBtb2RlbC5pbm5lclZhbHVlLmZpbHRlcihmID0+IGYgIT09IHZhbHVlKSk7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuYWRkUXVlcnlGaWx0ZXIoZmlsdGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlbW92ZVF1ZXJ5RmlsdGVyKG1vZGVsLmZpbHRlcik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhdXRvY29tcGxldGVTdWdnZXN0KGV2dD8pIHtcbiAgICBsZXQgdiA9IFtdO1xuICAgIC8vIGFsc28gdHJpZ2dlciBhZ2dyZWdhdGlvbnMgc2VhcmNoXG4gICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICBpZiAoZXZ0KSB7XG4gICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2VcbiAgICAgICAgLmF1dG9jb21wbGV0ZShldnQpXG4gICAgICAgIC5waXBlKHN3aXRjaE1hcChyZXMgPT4gb2JzZXJ2YWJsZUZyb20ocmVzKS5waXBlKHBsdWNrKCd2YWx1ZScpKSkpXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHYucHVzaChyZXMpLCAoKSA9PiB7IH0sICgpID0+IHtcbiAgICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVJlc3VsdHMgPSB2O1xuICAgICAgICAgIC8vIFRoZSB5dmMtYXV0b2NvbXBsZXRlIGNvbXBvbmVudCBzZXRzIHNlbGVjdGVkSW5kZXg9MCB3aGVuZXZlciBuZXcgc3VnZ2VzdGlvbnNcbiAgICAgICAgICAvLyBhcnJpdmUsIGNhdXNpbmcgRW50ZXIgdG8gaW1wbGljaXRseSBhY2NlcHQgdGhlIGZpcnN0IHN1Z2dlc3Rpb24gZXZlbiB3aXRob3V0XG4gICAgICAgICAgLy8gZXhwbGljaXQga2V5Ym9hcmQvbW91c2Ugc2VsZWN0aW9uLiBSZXNldCB0byAtMSBzbyB0aGF0IEVudGVyIHVzZXMgdGhlIGFjdHVhbFxuICAgICAgICAgIC8vIHR5cGVkIHRleHQgdW5sZXNzIHRoZSB1c2VyIGV4cGxpY2l0bHkgbmF2aWdhdGVzIHN1Z2dlc3Rpb25zIHdpdGggYXJyb3cga2V5cy5cbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNlYXJjaElucHV0KSB7XG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoSW5wdXQuc2VsZWN0ZWRJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBleHBlcnRUZXJtQ2hhbmdlZCgpIHtcbiAgICB0aGlzLmV4cGVydE1vZGVRdWVyeUVtcHR5ID0gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlU2VsZWN0KCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5hZ2dyZWdhdGUoKTtcbiAgfVxuXG4gIGF1dG9jb21wbGV0ZVBhc3RlKGUpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucXVlcnkudGVybSA9IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVTZWxlY3QoKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHB1YmxpYyBleGVjdXRlU2VhcmNoKCkge1xuICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSBmYWxzZTtcbiAgICBpZiAodGhpcy5xdWVyeS5leHBlcnRNb2RlKSB7XG4gICAgICAvLyBpbiBleHBlcnQgc2VhcmNoIG1vZGUgd2UgcHJlLWZldGNoIHJlc3VsdHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0dWFsIHNlYXJjaFxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldFNlYXJjaFN0YXRlKHthZ2dzOiB7dHlwZToge319LCAuLi50aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpfSkuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4ge1xuICAgICAgICAvLyBvbmx5IGV4ZWN1dGUgdGhlIGFjdHVhbCBxdWVyeSB3aGVuIHdlJ3ZlIGZvdW5kIHNvbWV0aGluZ1xuICAgICAgICBpZiAoIXF1ZXJ5U3RhdGUuaXNFbXB0eSkge1xuICAgICAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9LCBVdGlscy50aHJvdygoKSA9PiB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKCdFcnJvciBmZXRjaGluZyBzZWFyY2ggcmVzdWx0Jyk7XG4gICAgICAgIHRoaXMuZXhwZXJ0TW9kZVF1ZXJ5RW1wdHkgPSB0cnVlO1xuICAgICAgfSlcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHJpZ2dlclNlYXJjaCgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGV4ZWN1dGUgdGhlIGFjdHVhbCBzZWFyY2ggYnkgcm91dGluZyB0byB0aGUgcmVzdWx0IHN0YXRlIHdoaWNoIHRoZW4gd2lsbCBleGVjdXRlIHRoZVxuICAvLyBxdWVyeSBhbmQgZGlzcGxheSB0aGUgcmVzdWx0c1xuICBwcml2YXRlIHRyaWdnZXJTZWFyY2goKSB7XG4gICAgdGhpcy5xdWVyeS5yZXNvbHZlUmVmZXJlbmNlID0gdHJ1ZTtcbiAgICBjb25zdCB1cmlQYXJhbSA9IGVuY29kZVVSSUNvbXBvbmVudChVdGlscy5mb3JtRGF0YVN0cmluZ2lmeSh0aGlzLnF1ZXJ5LmdldFF1ZXJ5SnNvbigpKSk7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5jbG9zZSgpO1xuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dKS50aGVuKCgpID0+IHtcbiAgICAgIGNvbnN0IHVyaVBhcmFtUXVlcnk6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXM6IHtxdWVyeTogdXJpUGFyYW19fTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFsnL3Jlc3VsdCddLCB1cmlQYXJhbVF1ZXJ5KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmVUZXJtKCkge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRUZXJtKCcnKTtcbiAgICB0aGlzLnJlc2V0RXhwZXJ0TW9kZUlucHV0KCk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlVHlwZSh0eXBlOiBPYmplY3RUeXBlKSB7XG4gICAgaWYgKHRoaXMuaWR4U2VhcmNoKSB7XG4gICAgICB0aGlzLmV4aXRJbmRleGRhdGFTZWFyY2goKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnRvZ2dsZVF1ZXJ5VHlwZSh0eXBlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ29udGV4dFR5cGUoKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUZpbHRlcihmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5yZW1vdmVRdWVyeUZpbHRlcihmaWx0ZXIpO1xuXG4gICAgLy8gaWYgd2UgYXJlIGluIGluZGVzZGF0YSBzZWFyY2ggbW9kZSwgcmVtb3ZpbmcgYSBmaWx0ZXIgdGhhdCBpcyBubyBiYXNlcGFyYW0gZmlsdGVyXG4gICAgLy8gcmVxdWlyZXMgdGhlIGZyb20gbW9kZWwgdG8gYmUgdXBkYXRlZFxuICAgIGlmICh0aGlzLmlkeFNlYXJjaCAmJiAhdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmlzQmFzZVBhcmFtRmlsdGVyKGZpbHRlcikpIHtcbiAgICAgIC8vIHRvZG86IHVwZGF0ZSBmb3JtIG1vZGVsL2RhdGFcbiAgICAgIGxldCBpZHhGaWx0ZXJzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKCk7XG4gICAgICBpZiAoaWR4RmlsdGVycyAmJiBpZHhGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gc2V0IHVwIGZvcm0gZGF0YSBmcm9tIGluZGV4ZGF0YSBxdWVyeSBmaWx0ZXJzXG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmZvcm1PcHRpb25zLmRhdGEgPSBpZHhGaWx0ZXJzO1xuICAgICAgICB0aGlzLmluZGV4ZGF0YUZvcm0uc2V0Rm9ybURhdGEoaWR4RmlsdGVycyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBubyBmaWx0ZXJzIGFyZSBwcmVzZW50IHJlc2V0IHRoZSBmb3JtXG4gICAgICAgIHRoaXMuaWR4U2VhcmNoLmZvcm1PcHRpb25zLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy5pbmRleGRhdGFGb3JtLnJlc2V0Rm9ybSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFkZENvbnRleHRNb2RlbChmb3JtTW9kZWxzKTogdm9pZCB7XG4gICAgbGV0IG1vZGVscyA9IFsuLi5mb3JtTW9kZWxzXTtcbiAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLnB1c2goLi4ubW9kZWxzKTtcbiAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0TW9kZWxzLnNvcnQoVXRpbHMuc29ydFZhbHVlcygnbGFiZWwnKSk7XG4gIH1cblxuICBwdWJsaWMgZXhpdEluZGV4ZGF0YVNlYXJjaCgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UuZXhpdEluZGV4ZGF0YVNlYXJjaCgpO1xuICAgIHRoaXMuaWR4U2VhcmNoID0gbnVsbDtcbiAgfVxuXG4gIHNldENvbnRleHQoY29udGV4dEZvbGRlck5hbWU6IHN0cmluZykge1xuICAgIGlmIChjb250ZXh0Rm9sZGVyTmFtZSAmJiB0aGlzLmN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSAhPT0gY29udGV4dEZvbGRlck5hbWUpIHtcbiAgICAgIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lID0gY29udGV4dEZvbGRlck5hbWU7XG4gICAgICBjb25zdCBjb250ZXh0VHlwZSA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGNvbnRleHRGb2xkZXJOYW1lKTtcbiAgICAgIGlmIChjb250ZXh0Rm9sZGVyTmFtZSA9PT0gQ29udGV4dFR5cGUuc3lzcm9vdCkge1xuICAgICAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uuc2V0Q29udGV4dFR5cGUoe25hbWU6IENvbnRleHRUeXBlLnN5c3Jvb3QsIGxhYmVsOiBDb250ZXh0VHlwZS5zeXNyb290fSBhcyBPYmplY3RUeXBlKTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dFR5cGUpIHtcbiAgICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKGNvbnRleHRUeXBlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGBDb250ZXh0IHR5cGUgJyR7Y29udGV4dEZvbGRlck5hbWV9JyBub3QgZm91bmQuYCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYXBwU2VhcmNoU2VydmljZS5zZXRDb250ZXh0VHlwZShudWxsKTtcbiAgICAgIHRoaXMuY3VycmVudENvbnRleHRGb2xkZXJOYW1lID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyBhIGNvbnRleHQgdHlwZSBmb3IgdGhlIGN1cnJlbnQgc2VhcmNoXG4gICAqIEBwYXJhbSBjdHggVGhlIGNvbnRleHQgZm9ybSBtb2RlbFxuICAgKi9cbiAgcHJpdmF0ZSBzZWxlY3RDb250ZXh0KGN0eCkge1xuICAgIGlmICh0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgJiYgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zLmZvcm1Nb2RlbC5uYW1lID09PSBjdHgubmFtZSkge1xuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgY29udGV4dDtcbiAgICAgIGlmIChjdHgubmFtZSA9PT0gQ29udGV4dFR5cGUuc3lzcm9vdCkge1xuICAgICAgICBjb250ZXh0ID0gY3R4O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dCA9IHRoaXMuc3lzdGVtU2VydmljZS5nZXRPYmplY3RUeXBlKGN0eC5uYW1lKTtcbiAgICAgICAgdGhpcy5pZHhTZWFyY2guY29udGV4dEZvbGRlclR5cGUgPSBjb250ZXh0O1xuICAgICAgfVxuICAgICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldENvbnRleHRUeXBlKGNvbnRleHQpO1xuXG4gICAgICBsZXQgZm9ybURhdGEgPSB7fTtcbiAgICAgIGxldCBpZHhGaWx0ZXJzID0gdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmdldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKCk7XG4gICAgICBpZiAoaWR4RmlsdGVycyAmJiBpZHhGaWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9ybURhdGEgPSBpZHhGaWx0ZXJzO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnMgPSB7Zm9ybU1vZGVsOiBjdHgsIGRhdGE6IGZvcm1EYXRhfTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25JbmRleERhdGFDaGFuZ2VkKGV2ZW50OiBGb3JtU3RhdHVzQ2hhbmdlZEV2ZW50KSB7XG4gICAgLy8gb25seSB0cmlnZ2VyIHdoZW4gdmFsdWVzIGFyZSBjaGFuZ2VkIGFzIGNoYW5nZXMgbWF5IGFsc28gYXBwZWFyIHdoZW4gc2NyaXB0c1xuICAgIC8vIGNoYW5nZSBvdGhlciBmb3JtIGVsZW1lbnQgcHJvcGVydGllcyAoZWcuIHJlYWRvbmx5LCByZXF1aXJlZCBmbGFnKVxuICAgIGlmIChldmVudC5pbmRleGRhdGFDaGFuZ2VkKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNlYXJjaEZpbHRlckZyb21Gb3JtRGF0YSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU2VhcmNoRmlsdGVyRnJvbUZvcm1EYXRhKCkge1xuICAgIGlmICghdGhpcy5pbmRleGRhdGFGb3JtKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYWRkIG1ldGFkYXRhIGZpbHRlcnMgZm9yIGVhY2ggZm9ybSBkYXRhIGVudHJ5XG4gICAgbGV0IGlkeEZpbHRlcnM6IFNlYXJjaEZpbHRlcltdID0gW107XG4gICAgbGV0IGZvcm1EYXRhID0gdGhpcy5pbmRleGRhdGFGb3JtLmdldEZvcm1EYXRhKCk7XG4gICAgaWYgKHRoaXMuY29udGV4dEZvcm0pIHtcbiAgICAgIGZvcm1EYXRhID0gT2JqZWN0LmFzc2lnbihmb3JtRGF0YSwgdGhpcy5jb250ZXh0Rm9ybS5nZXRGb3JtRGF0YSgpKTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCBrZXkgb2YgT2JqZWN0LmtleXMoZm9ybURhdGEpKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzOiBTZWFyY2hGaWx0ZXJbXSA9IHRoaXMuc2VhcmNoU2VydmljZS5nZXRTZWFyY2hGaWx0ZXIodGhpcy5xdWVyeS50eXBlcywga2V5LCBmb3JtRGF0YVtrZXldKS5tYXAoZmlsdGVyID0+IHtcbiAgICAgICAgLy8gdGhlIHNlYXJjaCBzZXJ2aWNlIGRvZXMgbm90IGxpa2UgbmV3bGluZSBjaGFycyBpbiBjYXNlIG9mIG11bHRpbGluZSBmaWVsZHNcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyLmZpcnN0VmFsdWUpKSB7XG4gICAgICAgICAgaWYgKGZpbHRlci5maXJzdFZhbHVlPy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBmaWx0ZXIuZmlyc3RWYWx1ZSA9IGZpbHRlci5maXJzdFZhbHVlLm1hcCh2YWx1ZSA9PiB2YWx1ZS5yZXBsYWNlKC9cXG4vZywgJyAnKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZpbHRlci5maXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIGZpbHRlci5maXJzdFZhbHVlID0gZmlsdGVyLmZpcnN0VmFsdWUucmVwbGFjZSgvXFxuL2csICcgJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZpbHRlcjtcbiAgICAgIH0pO1xuICAgICAgZmlsdGVycy5mb3JFYWNoKGYgPT4gaWR4RmlsdGVycy5wdXNoKGYpKTtcbiAgICB9XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnNldEluZGV4U2VhcmNoUXVlcnlGaWx0ZXJzKGlkeEZpbHRlcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yIGEgZmlsdGVyLCB0byBiZSBhYmxlIHRvIHNob3cgdGhlXG4gICAqIGxhYmVsIGZvciBhIGZpbHRlciBpbiB0aGUgc2VhcmNoIHN1bW1hcnkuXG4gICAqXG4gICAqIEBwYXJhbSBmaWx0ZXIgLSB0aGUgZmlsdGVyIHRvIGZldGNoIG9iamVjdCB0eXBlIGVsZW1lbnQgZm9yXG4gICAqL1xuICBwdWJsaWMgZ2V0T2JqZWN0VHlwZUVsZW1lbnRMYWJlbChmaWx0ZXI6IFNlYXJjaEZpbHRlcikge1xuICAgIGxldCBvdCA9IHRoaXMuYXBwU2VhcmNoU2VydmljZS5nZXRUYXJnZXRUeXBlRWxlbWVudEJ5TmFtZShmaWx0ZXIucHJvcGVydHkpO1xuICAgIHJldHVybiBvdCA/IG90LmxhYmVsIDogZmlsdGVyLnByb3BlcnR5ICsgJyAtICcgKyBmaWx0ZXIuZmlyc3RWYWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlUXVlcnkoKSB7XG4gICAgLy8gY29uc3QgcXVlcnlQYXJhbXM6IE5hdmlnYXRpb25FeHRyYXMgPSB7cXVlcnlQYXJhbXNIYW5kbGluZyA6ICdwcmVzZXJ2ZSd9O1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICB0aGlzLnJvdXRlclxuICAgICAgLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy9zdG9yZWQtcXVlcmllcyddLCB7cXVlcnlQYXJhbXM6IHtjcmVhdGU6IHRydWV9fSkpO1xuICB9XG5cbiAgcHVibGljIHVwZGF0ZVN0b3JlZFF1ZXJ5KCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5IGluc3RhbmNlb2YgU3RvcmVkUXVlcnkpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt7b3V0bGV0czoge21vZGFsOiBudWxsfX1dLCB7cmVwbGFjZVVybDogdHJ1ZX0pO1xuICAgICAgdGhpcy5zdG9yZWRRdWVyaWVzU2VydmljZS5zYXZlU3RvcmVkUXVlcnkodGhpcy5xdWVyeSkuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb25zLnN1Y2Nlc3ModGhpcy50cmFuc2xhdGUuaW5zdGFudCgnZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LnNhdmUuc3VjY2VzcycpKTtcbiAgICAgIH0sIFV0aWxzLnRocm93KG51bGwsIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ2VvLnNlYXJjaC5zdG9yZWRxdWVyeS5zYXZlLmVycm9yJykpKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgcmVzZXRRdWVyeSgpIHtcbiAgICB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucmVzZXQoKTtcbiAgICB0aGlzLmlzT3duUXVlcnkgPSBmYWxzZTtcbiAgICB0aGlzLmFjdGl2ZVRhYklkID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVzZXRFeHBlcnRNb2RlSW5wdXQoKTtcblxuICAgIGlmICh0aGlzLmlkeFNlYXJjaCkge1xuICAgICAgdGhpcy5leGl0SW5kZXhkYXRhU2VhcmNoKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VTZWFyY2hNZW51KCkge1xuICAgIHRoaXMuX292ZXJsYXlSZWYuY2xvc2UoKTtcbiAgfVxuXG4gIG1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXBMYWJlbDogc3RyaW5nLCBkaXJlY3Rpb246IHN0cmluZykge1xuICAgIGxldCBpbmRleCA9IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5maW5kSW5kZXgoZ3JvdXAgPT4gZ3JvdXBMYWJlbCA9PT0gZ3JvdXAubGFiZWwpO1xuICAgIGxldCBuZXdJbmRleDtcblxuICAgIGlmIChkaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgbmV3SW5kZXggPSBpbmRleCAtIDE7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgICAgIG5ld0luZGV4ID0gaW5kZXggKyAxO1xuICAgIH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnZmlyc3QnKSB7XG4gICAgICBuZXdJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdsYXN0Jykge1xuICAgICAgbmV3SW5kZXggPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMTtcbiAgICAgIGlmIChpbmRleCA9PT0gbmV3SW5kZXgpIHJldHVybjtcbiAgICB9XG5cbiAgICB3aGlsZSAoaW5kZXggPCAwKSB7XG4gICAgICBpbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICB3aGlsZSAobmV3SW5kZXggPCAwKSB7XG4gICAgICBuZXdJbmRleCArPSB0aGlzLm9iamVjdFR5cGVHcm91cHMubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobmV3SW5kZXggPj0gdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aCkge1xuICAgICAgbGV0IGsgPSBuZXdJbmRleCAtIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggKyAxO1xuICAgICAgd2hpbGUgKGstLSkge1xuICAgICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMucHVzaCh1bmRlZmluZWQpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKG5ld0luZGV4LCAwLCB0aGlzLm9iamVjdFR5cGVHcm91cHMuc3BsaWNlKGluZGV4LCAxKVswXSk7XG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXRJdGVtKHRoaXMub2JqZWN0VHlwZUdyb3Vwc1N0b3JhZ2VLZXksIHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5tYXAoZ3JvdXAgPT4gZ3JvdXAubGFiZWwpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNTZWFyY2hJbnB1dCgpIHtcbiAgICBpZiAodGhpcy5zZWFyY2hJbnB1dCkge1xuXG4gICAgICAvLyBUT0RPOiB0aGlzLnNlYXJjaElucHV0LmlucHV0RUwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGFuZ2VTZWFyY2hJbnB1dEZvY3VzKCkge1xuICAgIGlmICh0aGlzLnF1ZXJ5LmV4cGVydE1vZGUpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2VsZWN0Um9vdEVsZW1lbnQoJy5leHBlcnQtc2VhcmNoX19pbnB1dCcpLmZvY3VzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZm9jdXNTZWFyY2hJbnB1dCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuY2FwYWJpbGl0aWVzID0gdGhpcy5jYXBhYmlsaXR5U2VydmljZS5nZXRDYXBhYmlsaXRpZXMoKTtcbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2Uub2JqZWN0VHlwZUdyb3VwcztcbiAgICB0aGlzLm9iamVjdFR5cGVHcm91cHNbMF0udHlwZXMgPSB0aGlzLm9iamVjdFR5cGVHcm91cHNbMF0udHlwZXMuZmlsdGVyKHR5cGUgPT4gdHlwZS5xbmFtZSAhPT0gJ3N5c2ZvbGRlcicgJiYgdHlwZS5xbmFtZSAhPT0gJ3N5c2RvY3VtZW50JyAmJiB0eXBlLnFuYW1lICE9PSAnc3lzb2JqZWN0Jyk7XG4gICAgbGV0IHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscyA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbSh0aGlzLm9iamVjdFR5cGVHcm91cHNTdG9yYWdlS2V5KTtcbiAgICBsZXQgc3luY2VkID0gdHJ1ZTtcbiAgICBpZiAoc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzICYmIHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5sZW5ndGggPT09IHRoaXMub2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vYmplY3RUeXBlR3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghc29ydGVkT2JqZWN0VHlwZUdyb3VwTGFiZWxzLmZpbmQoZ3JvdXAgPT4gZ3JvdXAgPT09IHRoaXMub2JqZWN0VHlwZUdyb3Vwc1tpXS5sYWJlbCkpIHtcbiAgICAgICAgICBzeW5jZWQgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHN5bmNlZCkge1xuICAgICAgICB0aGlzLm9iamVjdFR5cGVHcm91cHMgPSBbLi4udGhpcy5vYmplY3RUeXBlR3JvdXBzXS5zb3J0KFxuICAgICAgICAgIChhLCBiKSA9PiBzb3J0ZWRPYmplY3RUeXBlR3JvdXBMYWJlbHMuaW5kZXhPZihhLmxhYmVsKSAtIHNvcnRlZE9iamVjdFR5cGVHcm91cExhYmVscy5pbmRleE9mKGIubGFiZWwpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnkkLnN1YnNjcmliZShcbiAgICAgIChxdWVyeTogU2VhcmNoUXVlcnkpID0+IHRoaXMucHJvY2Vzc1F1ZXJ5KHF1ZXJ5KSk7XG4gICAgLy8gc3Vic2NyaWJlIHRvIHF1ZXJ5IHN0YXRlIGFzIHdlbGwgdG8gZmV0Y2ggcmVzdWx0IGNvdW50IGFuZCBhZ2dyZWdhdGlvbnMgYXMgdGhleSBjaGFuZ2VcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlYXJjaFNlcnZpY2UucXVlcnlTdGF0ZSQuc3Vic2NyaWJlKChxdWVyeVN0YXRlOiBTZWFyY2hTdGF0ZSkgPT4gdGhpcy5wcm9jZXNzUXVlcnlTdGF0ZShxdWVyeVN0YXRlKSk7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLmFnZ3JlZ2F0ZSgpO1xuXG4gICAgdGhpcy50ZXJtRm9ybS52YWx1ZUNoYW5nZXMucGlwZShcbiAgICAgIHRhcChyZXMgPT4ge1xuICAgICAgICB0aGlzLnF1ZXJ5LnRlcm0gPSByZXMudGVybTtcbiAgICAgIH0pLCBkZWJvdW5jZVRpbWUoMTAwMCksIHVudGlsRGVzdHJveWVkKHRoaXMpKS5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgaWYgKHRoaXMucXVlcnkudGVybT8uc3RhcnRzV2l0aCgnXFxcIicpICYmICF0aGlzLnF1ZXJ5LnRlcm0/LmVuZHNXaXRoKCdcXFwiJykpIHtcbiAgICAgICAgICB0aGlzLnF1ZXJ5LnRlcm0gKz0gXCJcXFwiXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hdXRvY29tcGxldGVTdWdnZXN0KHRoaXMucXVlcnkudGVybSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2VhcmNoSW5wdXQuZm9jdXNJbnB1dCgpO1xuICAgIH0pO1xuICAgIHRoaXMuX292ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkub3Blbih0aGlzLnRwbFNlYXJjaCwgbnVsbCwge1xuICAgICAgY2VudGVyZWQ6IGZhbHNlLFxuICAgICAgb3ZlcmxheUNsYXNzOiAnc2VhcmNoLW92ZXJsYXknXG4gICAgfSk7XG4gICAgdGhpcy50ZXJtRm9ybS5wYXRjaFZhbHVlKHtcbiAgICAgIHRlcm06IHRoaXMucXVlcnkudGVybVxuICAgIH0pO1xuICAgIHRoaXMuX292ZXJsYXlSZWYuYWZ0ZXJDbG9zZWQkLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zOiBOYXZpZ2F0aW9uRXh0cmFzID0ge3F1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdwcmVzZXJ2ZSd9O1xuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbe291dGxldHM6IHttb2RhbDogbnVsbH19XSwgcXVlcnlQYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5hcHBTZWFyY2hTZXJ2aWNlLnJlc2V0QWdncygpO1xuICAgIHRoaXMucXVlcnlTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLnF1ZXJ5U3RhdGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxufVxuIiwiPCEtLSA8ZW8tZGlhbG9nIFt2aXNpYmxlXT1cInRydWVcIiBbc3R5bGVDbGFzc109XCInZW8tYXBwLXNlYXJjaC1kaWFsb2cnXCIgW2FsaWduXT1cIidzdGFydCdcIiBbbWluV2lkdGhdPVwiJzgwdncnXCJcbiAgW21pbkhlaWdodF09XCInMTAwdmgnXCIgKGhpZGUpPVwiY2xvc2VTZWFyY2hNZW51KCRldmVudClcIj4gLS0+XG48IS0tIDx5dmMtZGlhbG9nIFtvcHRpb25zXT1cIntsaWdodERpc21pc3M6IHRydWV9XCIgW3RlbXBsYXRlXT1cInRwbFNlYXJjaFwiIChjbG9zZWQpPVwiY2xvc2VTZWFyY2hNZW51KClcIj48L3l2Yy1kaWFsb2c+IC0tPlxuPG5nLXRlbXBsYXRlICN0cGxTZWFyY2g+XG5cbiAgPGRpdiBjbGFzcz1cImVvLWFwcC1zZWFyY2hcIiBbbmdDbGFzc109XCJ7ZXhwZXJ0OiBxdWVyeS5leHBlcnRNb2RlfVwiIGVvUnRsQXdhcmU9XCJmdWxsXCIgKm5nSWY9XCJxdWVyeVwiPlxuXG4gICAgPGRpdiBjbGFzcz1cImhlYWRcIj5cblxuICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaFwiPlxuICAgICAgICA8Zm9ybSAoc3VibWl0KT1cImV4ZWN1dGVTZWFyY2goKVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2g8L2Rpdj5cblxuICAgICAgICAgIDxlby1xdWVyeS1zY29wZS1zZWxlY3QgW3NlbGVjdGlvbl09XCJxdWVyeVNjb3BlXCIgKHNlbGVjdCk9XCJzZXRRdWVyeVNjb3BlKCRldmVudClcIj48L2VvLXF1ZXJ5LXNjb3BlLXNlbGVjdD5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWFyY2gtYm94XCIgW2Zvcm1Hcm91cF09XCJ0ZXJtRm9ybVwiPlxuXG4gICAgICAgICAgICA8eXZjLWF1dG9jb21wbGV0ZSAqbmdJZj1cIiFxdWVyeS5leHBlcnRNb2RlOyBlbHNlIGV4cGVydElucHV0XCIgI3NlYXJjaElucHV0IGZvcm1Db250cm9sTmFtZT1cInRlcm1cIiBbYXV0b2NvbXBsZXRlVmFsdWVzXT1cImF1dG9jb21wbGV0ZVJlc3VsdHNcIlxuICAgICAgICAgICAgICAoc3VnZ2VzdGlvblNlbGVjdCk9XCJhdXRvY29tcGxldGVTZWxlY3QoKVwiIChrZXlkb3duLmVudGVyKT1cImV4ZWN1dGVTZWFyY2goKVwiIChwYXN0ZSk9XCJhdXRvY29tcGxldGVQYXN0ZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8L3l2Yy1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZXhwZXJ0SW5wdXQ+XG4gICAgICAgICAgICAgIDxpbnB1dCBhdXRvZm9jdXM9XCJhdXRvZm9jdXNcIiBjbGFzcz1cImV4cGVydC1zZWFyY2hfX2lucHV0XCIgI3hwaW5wdXQgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImV4cGVydFRlcm1DaGFuZ2VkKClcIiBbKG5nTW9kZWwpXT1cInF1ZXJ5LnRlcm1cIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGV4cGVydC1tb2RlXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVFeHBlcnRNb2RlKClcIj5cbiAgICAgICAgICAgICAgPCEtLTxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQ8L3NwYW4+LS0+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2V4cGVydC1zZWFyY2guc3ZnJ1wiXG4gICAgICAgICAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5tb2RlLmV4cGVydCcgfCB0cmFuc2xhdGUpXCIgKm5nSWY9XCIhcXVlcnk/LmV4cGVydE1vZGU7IGVsc2UgY2xvc2VcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xvc2U+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfZXhwZXJ0LXNlYXJjaC5zdmcnXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2gubW9kZS5leHBlcnQuY2xvc2UnIHwgdHJhbnNsYXRlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBleHBlcnQtbW9kZSBleHBlcnQtbW9kZV9fcmVzZXRcIiBbbmdDbGFzc109XCJ7YWN0aXZlOiBxdWVyeS50ZXJtfVwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJyZXNldEV4cGVydE1vZGVJbnB1dCgpXCI+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIlxuICAgICAgICAgICAgICAgIFtpY29uVGl0bGVdPVwiKCdlby5zZWFyY2guY2xlYXIuc2VhcmNoJyB8IHRyYW5zbGF0ZSlcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdFwiIHR5cGU9XCJzdWJtaXRcIiBbZGlzYWJsZWRdPVwicXVlcnlTdGF0ZS5pc0VtcHR5XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9mb3JtPlxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJyZXN1bHRcIiAqbmdJZj1cIiFsb2FkaW5nOyBlbHNlIHNwaW5uZXJcIj57e3F1ZXJ5U3RhdGUudG90YWxDb3VudCB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgPG5nLXRlbXBsYXRlICNzcGlubmVyPlxuICAgICAgICA8ZW8tbG9hZGluZy1zcGlubmVyIGNsYXNzPVwic2VhcmNoLWFnZ3JlZ2F0b3JfX2xvYWRlclwiIFtzaXplXT1cIidtZWRpdW0nXCIgW21vZGVdPVwiJ2RhcmsnXCI+PC9lby1sb2FkaW5nLXNwaW5uZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGVvLWljb24gY2xhc3M9XCJidXR0b24gd2hpdGUgY2xvc2VcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19jbGVhci5zdmcnXCJcbiAgICAgICAgW2ljb25UaXRsZV09XCIoJ2VvLnNlYXJjaC5jbG9zZScgfCB0cmFuc2xhdGUpXCIgKGNsaWNrKT1cImNsb3NlU2VhcmNoTWVudSgpXCI+PC9lby1pY29uPlxuXG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYm9keVwiICpuZ0lmPVwiIXF1ZXJ5LmV4cGVydE1vZGU7IGVsc2UgZXhwZXJ0XCI+XG5cbiAgICAgIDx5dmMtdGFicyAodGFiQ2hhbmdlKT1cIm9uVGFiQ2hhbmdlKCRldmVudClcIiBsYXlvdXRTZXR0aW5nc0lEPVwiZW8uc2VhcmNoLmRpYWxvZy50YWJzXCI+XG5cbiAgICAgICAgPCEtLSBvYmplY3QgdHlwZSBzZWxlY3QgLS0+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0VHlwZScsIGxhYmVsOiAnZW8uc2VhcmNoLnJlc3RyaWN0LnR5cGUnIHwgdHJhbnNsYXRlfVwiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm9iamVjdC10eXBlcyByZXN0LWJveC1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7aWR4ZW5hYmxlZDogcXVlcnkudHlwZXMubGVuZ3RoIDwgMX1cIlxuICAgICAgICAgICAgKm5nSWY9XCJvYmplY3RUeXBlR3JvdXBzICYmICFpZHhTZWFyY2hcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cCByZXN0LWJveFwiICpuZ0Zvcj1cImxldCBncm91cCBvZiBvYmplY3RUeXBlR3JvdXBzOyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9oMz5cbiAgICAgICAgICAgICAgICA8aDMgKm5nSWY9XCJncm91cC5sYWJlbCA9PT0gJzAnXCIgdHJhbnNsYXRlPnt7J2VvLnNlYXJjaC5ncm91cC5nZW5lcmFsJ319PC9oMz5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW92ZS1pY29uc1wiPlxuICAgICAgICAgICAgICAgICAgPGVvLWljb24gKm5nSWY9XCJpICE9PSAwXCIgY2xhc3M9XCJtb3ZlLWxlZnQtZmlyc3RcIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2ZpcnN0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19sYXN0LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IDBcIiBjbGFzcz1cIm1vdmUtbGVmdC1pY29uXCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdsZWZ0JylcIiBbaWNvblNyY109XCInYXNzZXRzL19kZWZhdWx0L3N2Zy9pY19hcnJvd19sZWZ0LnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZW8taWNvbiAqbmdJZj1cImkgIT09IG9iamVjdFR5cGVHcm91cHMubGVuZ3RoIC0gMVwiIGNsYXNzPVwibW92ZS1yaWdodC1pY29uXCIgKGNsaWNrKT1cIm1vdmVPYmplY3RUeXBlR3JvdXAoZ3JvdXAubGFiZWwsICdyaWdodCcpXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfcmlnaHQuc3ZnJ1wiPjwvZW8taWNvbj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uICpuZ0lmPVwiaSAhPT0gb2JqZWN0VHlwZUdyb3Vwcy5sZW5ndGggLSAxXCIgY2xhc3M9XCJtb3ZlLXJpZ2h0LWxhc3RcIiAoY2xpY2spPVwibW92ZU9iamVjdFR5cGVHcm91cChncm91cC5sYWJlbCwgJ2xhc3QnKVwiIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2Fycm93X2xhc3Quc3ZnJ1wiPjwvZW8taWNvbj5cblxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInR5cGVcIiAqbmdGb3I9XCJsZXQgdHlwZSBvZiBncm91cC50eXBlc1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie2NvbnRleHQ6IHR5cGUuaXNDb250ZXh0Rm9sZGVyLCBmb2xkZXI6IHR5cGUuaXNGb2xkZXIsIGFic3RyYWN0OiB0eXBlLmlzQWJzdHJhY3QsIHNlbGVjdGVkOiBpc1R5cGVBY3RpdmUodHlwZSl9XCI+XG5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2hlY2tib3hcIiAoY2xpY2spPVwidG9nZ2xlVHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgICAgPHN2ZyBmaWxsPVwiI2ZmZmZmZlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOSAxNi4xN0w0LjgzIDEybC0xLjQyIDEuNDFMOSAxOSAyMSA3bC0xLjQxLTEuNDF6XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKGNsaWNrKT1cInNlbGVjdE9iamVjdFR5cGUodHlwZSlcIj5cbiAgICAgICAgICAgICAgICAgIDxlby1pY29uIFtvYmplY3RUeXBlXT1cInR5cGVcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj57e3R5cGUubGFiZWx9fSB7e3R5cGUuaXNBYnN0cmFjdCA/ICcoJysgKCdlby5zZWFyY2gudHlwZS5hYnN0cmFjdCcgfCB0cmFuc2xhdGUpICtcbiAgICAgICAgICAgICAgICAgICAgJyknIDogJyd9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50XCI+e3tnZXRBZ2dyZWdhdGlvbkNvdW50KHR5cGUpIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5kZXhkYXRhLXNlYXJjaFwiICpuZ0lmPVwiaWR4U2VhcmNoXCI+XG4gICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgIDxlby1pY29uIGNsYXNzPVwiYnV0dG9uXCIgW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfYXJyb3dfYmFjay5zdmcnXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhpdEluZGV4ZGF0YVNlYXJjaCgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgICA8c3BhbiB0cmFuc2xhdGUgW3RyYW5zbGF0ZVBhcmFtc109XCJ7dHlwZTogaWR4U2VhcmNoLnR5cGUubGFiZWx9XCI+ZW8uc2VhcmNoLm9iamVjdHR5cGUuZm9ybTwvc3Bhbj5cbiAgICAgICAgICAgIDwvaDI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb250ZXh0XCIgKm5nSWY9XCJpZHhTZWFyY2guY29udGV4dE1vZGVscy5sZW5ndGhcIj5cblxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29udGV4dC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IHRyYW5zbGF0ZT5lby5zZWFyY2gub2JqZWN0dHlwZS5mb3JtLmNvbnRleHQ8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2VyXCI+PC9kaXY+XG5cbiAgICAgICAgICAgICAgICA8ZW8tY29udGV4dC1zZWFyY2ggKm5nRm9yPVwibGV0IGN0eCBvZiBpZHhTZWFyY2guY29udGV4dE1vZGVsczsgaW5kZXggYXMgaVwiIFtjdHhdPVwiY3R4XCIgW3F1ZXJ5XT1cInF1ZXJ5XCJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZF09XCJjdXJyZW50Q29udGV4dEZvbGRlck5hbWUgPT09IGN0eC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIoY3VycmVudENvbnRleHRGb2xkZXJOYW1lICYmIGN1cnJlbnRDb250ZXh0Rm9sZGVyTmFtZSAhPT0gY3R4Lm5hbWUpXCJcbiAgICAgICAgICAgICAgICAgIFtpZHhTZWFyY2hdPVwiaWR4U2VhcmNoXCIgKHNldENvbnRleHQpPVwic2V0Q29udGV4dCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9lby1jb250ZXh0LXNlYXJjaD5cbiAgICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XCJjb250ZXh0IGZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tb2JqZWN0LWZvcm0gY2xhc3M9XCJkYXJrXCIgI2N0eGZvcm1cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwiaWR4U2VhcmNoLmNvbnRleHRGb3JtT3B0aW9ucyAmJiBpZHhTZWFyY2guY29udGV4dEZvcm1PcHRpb25zPy5mb3JtTW9kZWw/LmVsZW1lbnRzPy5sZW5ndGhcIlxuICAgICAgICAgICAgICAgICAgW2Zvcm1PcHRpb25zXT1cImlkeFNlYXJjaC5jb250ZXh0Rm9ybU9wdGlvbnNcIiAoc3RhdHVzQ2hhbmdlZCk9XCJvbkluZGV4RGF0YUNoYW5nZWQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvZW8tb2JqZWN0LWZvcm0+XG4gICAgICAgICAgICAgIDwvc2VjdGlvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG5cbiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVwib2JqZWN0LXR5cGUgZm9ybVwiICpuZ0lmPVwiaWR4U2VhcmNoLmZvcm1PcHRpb25zXCI+XG4gICAgICAgICAgICAgIDxlby1vYmplY3QtZm9ybSAjaWR4Zm9ybSBbZm9ybU9wdGlvbnNdPVwiaWR4U2VhcmNoLmZvcm1PcHRpb25zXCJcbiAgICAgICAgICAgICAgICAoc3RhdHVzQ2hhbmdlZCk9XCJvbkluZGV4RGF0YUNoYW5nZWQoJGV2ZW50KVwiIChvbkZvcm1SZWFkeSk9XCJpZHhmb3JtLmZvY3VzRm9ybSgpXCI+XG4gICAgICAgICAgICAgIDwvZW8tb2JqZWN0LWZvcm0+XG4gICAgICAgICAgICA8L3NlY3Rpb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPCEtLSBjcmVhdGVkIHRhYiAtLT5cbiAgICAgICAgPG5nLXRlbXBsYXRlIFt5dmNUYWJdPVwie2lkOiAncmVzdHJpY3RDcmVhdGVkJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QuY3JlYXRpb24nIHwgdHJhbnNsYXRlIH1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3JlYXRlZCByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtdGltZXNwYW5cIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLnRpbWUuc3BhbjwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5DUkVBVEVEXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZpbHRlcihQQVJBTVMuQ1JFQVRFRCwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuLWN1c3RvbVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuLmN1c3RvbTwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNjcmVhdGVkRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy50aW1lLnNwYW4nIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tZGF0ZXRpbWUtcmFuZ2UgI2NyZWF0ZWRGaWVsZCBbKG5nTW9kZWwpXT1cImZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0udmFsdWVcIiBuYW1lPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0b3JdPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5DUkVBVEVEXS52YWx1ZSA/IGZpbHRlcnNNb2RlbFtQQVJBTVMuQ1JFQVRFRF0udmFsdWUub3BlcmF0b3IgOiBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIFt3aXRoVGltZV09XCJjcmVhdGVkRmllbGQuc2VhcmNoT3B0aW9uICYmIGNyZWF0ZWRGaWVsZC5zZWFyY2hPcHRpb24gIT09IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2V0RmlsdGVyKFBBUkFNUy5DUkVBVEVELCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBjcmVhdGVkRm9ybSlcIiBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtY3JlYXRvclwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cuY3JlYXRvcjwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNjcmVhdG9yRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5jcmVhdGVkYnknIHwgdHJhbnNsYXRlXCI+XG4gICAgICAgICAgICAgICAgICA8ZW8tb3JnYW5pemF0aW9uIFttdWx0aXNlbGVjdF09XCJ0cnVlXCIgWyhuZ01vZGVsKV09XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLnZhbHVlXCIgbmFtZT1cImNyZWF0b3JcIlxuICAgICAgICAgICAgICAgICAgICAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLCAkZXZlbnQpXCIgW3NpdHVhdGlvbl09XCInU0VBUkNIJ1wiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuQ1JFQVRPUiwgT1BFUkFUT1IuSU4sICRldmVudCwgY3JlYXRvckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBbeXZjVGFiXT1cIntpZDogJ3Jlc3RyaWN0TW9kaWZpY2F0aW9uJywgbGFiZWw6ICdlby5zZWFyY2gucmVzdHJpY3QubW9kaWZpY2F0aW9uJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kaWZpZWQgcmVzdC1ib3gtY29udGFpbmVyXCIgKm5nSWY9XCJxdWVyeVN0YXRlLmFnZ3JlZ2F0aW9uc1wiPlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFnZy50aW1lLnNwYW48L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuTU9ESUZJRURdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5NT0RJRklFRCwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LXRpbWVzcGFuLWN1c3RvbVwiPlxuICAgICAgICAgICAgICA8aDMgdHJhbnNsYXRlPmVvLnNlYXJjaC5hZ2cudGltZS5zcGFuLmN1c3RvbTwvaDM+XG4gICAgICAgICAgICAgIDxmb3JtICNtb2RpZmllZEZvcm09XCJuZ0Zvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZW8tZm9ybS1pbnB1dCBbbGFiZWxdPVwiJ2VvLnNlYXJjaC5hZ2cudGltZS5zcGFuJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLWRhdGV0aW1lLXJhbmdlICNtb2RpZmllZEZpZWxkIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWVcIiBuYW1lPVwicmFuZ2VcIlxuICAgICAgICAgICAgICAgICAgICBbb3BlcmF0b3JdPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFRF0udmFsdWUgPyBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS52YWx1ZS5vcGVyYXRvciA6IE9QRVJBVE9SLkVRVUFMXCJcbiAgICAgICAgICAgICAgICAgICAgW3dpdGhUaW1lXT1cIm1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICYmIG1vZGlmaWVkRmllbGQuc2VhcmNoT3B0aW9uICE9PSBPUEVSQVRPUi5FUVVBTFwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNldEZpbHRlcihQQVJBTVMuTU9ESUZJRUQsIE9QRVJBVE9SLkVRVUFMLCAkZXZlbnQsIG1vZGlmaWVkRm9ybSlcIiBbc2l0dWF0aW9uXT1cIidTRUFSQ0gnXCI+XG4gICAgICAgICAgICAgICAgICA8L2VvLWRhdGV0aW1lLXJhbmdlPlxuICAgICAgICAgICAgICAgIDwvZW8tZm9ybS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9mb3JtPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbW9kaWZpZXJcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2guYWdnLm1vZGlmaWVyPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI21vZGlmaWVyRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLmFnZy5tb2RpZmllZGJ5JyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLW9yZ2FuaXphdGlvbiBbbXVsdGlzZWxlY3RdPVwidHJ1ZVwiIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0udmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICBuYW1lPVwibW9kaWZpZXJcIiAob25WYWx1ZVJlc29sdmVkKT1cInJlc29sdmVMYWJlbChmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVSXSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaXR1YXRpb25dPVwiJ1NFQVJDSCdcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLk1PRElGSUVSLCBPUEVSQVRPUi5JTiwgJGV2ZW50LCBtb2RpZmllckZvcm0pXCI+PC9lby1vcmdhbml6YXRpb24+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICA8bmctdGVtcGxhdGUgW3l2Y1RhYl09XCJ7aWQ6ICdyZXN0cmljdEZpbGUnLCBsYWJlbDogJ2VvLnNlYXJjaC5yZXN0cmljdC5maWxlJyB8IHRyYW5zbGF0ZX1cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsZSByZXN0LWJveC1jb250YWluZXJcIiAqbmdJZj1cInF1ZXJ5U3RhdGUuYWdncmVnYXRpb25zXCI+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtbWltZXR5cGUtZ3JvdXBcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QubWltZXR5cGVncm91cDwvaDM+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWl0ZW1cIiAqbmdGb3I9XCJsZXQgYWdnIG9mIGFnZ3JlZ2F0aW9uc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNldEZpbHRlcihQQVJBTVMuTUlNRVRZUEVHUk9VUCwgT1BFUkFUT1IuSU4sIHJlc29sdmVTZWxlY3Rpb24oYWdncmVnYXRpb25zTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLCBhZ2cua2V5LCBhZ2cuc2VsZWN0ZWQpKVwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBhZ2cuc2VsZWN0ZWQsIHNhdmVkOiBhZ2cuc2F2ZWR9XCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNoZWNrYm94XCI+XG4gICAgICAgICAgICAgICAgICA8c3ZnIGZpbGw9XCIjZmZmZmZmXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDE2LjE3TDQuODMgMTJsLTEuNDIgMS40MUw5IDE5IDIxIDdsLTEuNDEtMS40MXpcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3thZ2cubGFiZWx9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudFwiPnt7YWdnLnZhbHVlIHwgbG9jYWxlRGVjaW1hbH19PC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXN0LWJveCBib3gtZmlsZXNpemVcIj5cbiAgICAgICAgICAgICAgPGgzIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzdHJpY3QuZmlsZXNpemU8L2gzPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1pdGVtXCIgKm5nRm9yPVwibGV0IGFnZyBvZiBhZ2dyZWdhdGlvbnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRmlsdGVyKFBBUkFNUy5GSUxFU0laRSwgT1BFUkFUT1IuUkFOR0UsIGFnZy5rZXksIGFnZy5zZWxlY3RlZClcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogYWdnLnNlbGVjdGVkLCBzYXZlZDogYWdnLnNhdmVkfVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7YWdnLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY291bnRcIj57e2FnZy52YWx1ZSB8IGxvY2FsZURlY2ltYWx9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzdC1ib3ggYm94LWZpbGVuYW1lXCI+XG4gICAgICAgICAgICAgIDxoMyB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lPC9oMz5cbiAgICAgICAgICAgICAgPGZvcm0gI2ZpbGVuYW1lRm9ybT1cIm5nRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxlby1mb3JtLWlucHV0IFtsYWJlbF09XCInZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGVuYW1lJyB8IHRyYW5zbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgPGVvLXN0cmluZyBbYXV0b2NvbXBsZXRlXT1cInRydWVcIiBbcW5hbWVdPVwiJ2ZpbGVuYW1lJ1wiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFTkFNRV0udmFsdWVcIiBuYW1lPVwiZmlsZW5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJzZXRGaWx0ZXIoUEFSQU1TLkZJTEVOQU1FLCBPUEVSQVRPUi5FUVVBTCwgJGV2ZW50LCBmaWxlbmFtZUZvcm0pXCI+PC9lby1zdHJpbmc+XG4gICAgICAgICAgICAgICAgPC9lby1mb3JtLWlucHV0PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwveXZjLXRhYnM+XG5cbiAgICAgIDwhLS0gc3VtbWFyeSBvZiB0aGUgY3VycmVudCBzZWFyY2ggZmlsdGVycyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzdW1tYXJ5LXBhbmVsXCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRsaW5lIHN0b3JlZC1xdWVyeVwiICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdoZWFkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNwYWNlSW5iZXR3ZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYXZlZFNlYXJjaEljb25cIj5cbiAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfc2F2ZWRfc2VhcmNoLnN2ZydcIj48L2VvLWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHJlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5hc2lkZS5zdW1tYXJ5LnN0b3JlZHF1ZXJ5PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdG9yZWQtcXVlcnktbmFtZVwiPnt7c3RvcmVkUXVlcnkubmFtZX19PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNyZWdoZWFkPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkbGluZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeTwvZGl2PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxzZWN0aW9uIGNsYXNzPVwicXVlcnktdHlwZXNcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLXNlYXJjaHRlcm1cIiAqbmdJZj1cInF1ZXJ5LnRlcm1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50ZXJtPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7cXVlcnkudGVybX19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVGVybSgpXCI+PC9lby1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLWNvbnRleHR0eXBlXCIgKm5nSWY9XCJxdWVyeS5jb250ZXh0Rm9sZGVyVHlwZXMubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLmFzaWRlLnN1bW1hcnkuY29udGV4dGZvbGRlcnR5cGVzPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyXCIgKm5nRm9yPVwibGV0IHR5cGUgb2YgcXVlcnkuY29udGV4dEZvbGRlclR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlQ29udGV4dFR5cGUoKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1vYmplY3R0eXBlXCIgKm5nSWY9XCJxdWVyeS50eXBlcy5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guYXNpZGUuc3VtbWFyeS50eXBlczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZpbHRlclwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIHF1ZXJ5LnR5cGVzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbFwiPnt7dHlwZS5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgIDxlby1pY29uIFtpY29uU3JjXT1cIidhc3NldHMvX2RlZmF1bHQvc3ZnL2ljX2NsZWFyLnN2ZydcIiAoY2xpY2spPVwicmVtb3ZlVHlwZSh0eXBlKVwiPjwvZW8taWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNmaWx0ZXJUZW1wbGF0ZSBsZXQtZmlsdGVyIGxldC10cmFuc2xhdGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZmlsdGVyLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXJcIiAqbmdGb3I9XCJsZXQgdmFsIG9mIGZpbHRlci5pbm5lclZhbHVlOyBpbmRleCBhcyBpXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+e3tmaWx0ZXIubGFiZWxbaV0gfCBhc3luY319PC9kaXY+XG4gICAgICAgICAgICAgICAgPGVvLWljb24gW2ljb25TcmNdPVwiJ2Fzc2V0cy9fZGVmYXVsdC9zdmcvaWNfY2xlYXIuc3ZnJ1wiIChjbGljayk9XCJyZXNldEZpbHRlcihmaWx0ZXIsIHZhbClcIj48L2VvLWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uIHNlY3Rpb24tY3JlYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdLmlubmVyVmFsdWU/Lmxlbmd0aCB8fCBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdLmlubmVyVmFsdWU/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpdGxlXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5yZXN0cmljdC5jcmVhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFURURdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLkNSRUFUT1JdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNlY3Rpb24gc2VjdGlvbi1tb2RpZmljYXRpb25cIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXS5pbm5lclZhbHVlPy5sZW5ndGggfHwgZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0uaW5uZXJWYWx1ZT8ubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0Lm1vZGlmaWNhdGlvbjwvZGl2PlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImZpbHRlclRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBmaWx0ZXJzTW9kZWxbUEFSQU1TLk1PRElGSUVEXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NT0RJRklFUl0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VjdGlvbiBzZWN0aW9uLW1pbWV0eXBlZ3JvdXBcIlxuICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJzTW9kZWxbUEFSQU1TLk1JTUVUWVBFR1JPVVBdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRVNJWkVdLmlubmVyVmFsdWUubGVuZ3RoIHx8IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdLmlubmVyVmFsdWUubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGl0bGVcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnJlc3RyaWN0LmZpbGU8L2Rpdj5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5NSU1FVFlQRUdST1VQXSB9XCI+PC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJmaWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogZmlsdGVyc01vZGVsW1BBUkFNUy5GSUxFU0laRV0gfVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGZpbHRlcnNNb2RlbFtQQVJBTVMuRklMRU5BTUVdIH1cIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFjdGlvbnNcIiAqbmdJZj1cInF1ZXJ5LnRlcm0gfHwgcXVlcnkuZmlsdGVycy5sZW5ndGggfHwgcXVlcnkudHlwZXMubGVuZ3RoOyBlbHNlIGVtcHR5U2VhcmNoXCI+XG5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNTdG9yZWRRdWVyeTsgZWxzZSByZWdhY3Rpb25zXCI+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2Vjb25kYXJ5IGJ0bi1yZXNldFwiIChjbGljayk9XCJyZXNldFF1ZXJ5KClcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN0b3JlZHF1ZXJ5LmNsb3NlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi11cGRhdGVcIiAoY2xpY2spPVwidXBkYXRlU3RvcmVkUXVlcnkoKVwiXG4gICAgICAgICAgICAgICpuZ0lmPVwiY2FwYWJpbGl0aWVzLnN0b3JlZHF1ZXJpZXMgJiYgaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc3RvcmVkcXVlcnkudXBkYXRlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBncmV5IGJ0bi1zYXZlXCIgKGNsaWNrKT1cInNhdmVRdWVyeSgpXCJcbiAgICAgICAgICAgICAgKm5nSWY9XCJjYXBhYmlsaXRpZXMuc3RvcmVkcXVlcmllcyAmJiAhaXNPd25RdWVyeVwiIHRyYW5zbGF0ZT5lby5zZWFyY2guc2F2ZTwvYnV0dG9uPlxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInByaW1hcnkgYnRuLXN1Ym1pdFwiIChjbGljayk9XCJleGVjdXRlU2VhcmNoKClcIiBbZGlzYWJsZWRdPVwicXVlcnlTdGF0ZS5pc0VtcHR5XCJcbiAgICAgICAgICAgICAgdHJhbnNsYXRlPmVvLnNlYXJjaC5zdWJtaXQ8L2J1dHRvbj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcmVnYWN0aW9ucz5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXJlc2V0XCIgKGNsaWNrKT1cInJlc2V0UXVlcnkoKVwiIHRyYW5zbGF0ZT5lby5zZWFyY2gucmVzZXQ8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJwcmltYXJ5IGdyZXkgYnRuLXNhdmVcIiAoY2xpY2spPVwic2F2ZVF1ZXJ5KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cImNhcGFiaWxpdGllcy5zdG9yZWRxdWVyaWVzICYmICFpc093blF1ZXJ5XCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5zYXZlPC9idXR0b24+XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwicHJpbWFyeSBidG4tc3VibWl0XCIgKGNsaWNrKT1cImV4ZWN1dGVTZWFyY2goKVwiIFtkaXNhYmxlZF09XCJxdWVyeVN0YXRlLmlzRW1wdHlcIlxuICAgICAgICAgICAgICB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1Ym1pdDwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cblxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5U2VhcmNoPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbXB0eS1zZWFyY2hcIiB0cmFuc2xhdGU+ZW8uc2VhcmNoLnN1bW1hcnkuZW1wdHk8L2Rpdj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgPC9kaXY+XG5cblxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBleHBlcnQgbW9kZSBib2R5IHBhbmVsIGNvbnRhaW5pbmcgZXhwbGFuYXRpb25zIC0tPlxuICAgIDxuZy10ZW1wbGF0ZSAjZXhwZXJ0PlxuICAgICAgPGRpdiBjbGFzcz1cImJvZHkgZXhwZXJ0XCI+XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImVtcHR5XCIgKm5nSWY9XCJleHBlcnRNb2RlUXVlcnlFbXB0eVwiPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQucmVzdWx0LmVtcHR5PC9zcGFuPjwvZGl2PlxuXG4gICAgICAgIDwhLS1cbiAgICAgICAgPGgyPjxzcGFuIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQ8L3NwYW4+PC9oMj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImludHJvXCIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5pbnRybzwvZGl2PlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYXNlLXBhcmFtcyBmaWVsZHNcIj5cbiAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmJhc2VwYXJhbXM8L2gyPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1cIiAqbmdGb3I9XCJsZXQgZWwgb2YgZXhwZXJ0TW9kZVN1cHBvcnQuYmFzZVBhcmFtc1wiIChjbGljayk9XCJ4cEFkZFRvVGVybShlbC5kYXRhKVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXRhXCI+e3tlbC5kYXRhfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwic3lzdGVtLXR5cGVzIGZpZWxkc1wiPlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tZ3JvdXBcIj5cbiAgICAgICAgICAgIDxoMiB0cmFuc2xhdGU+ZW8uc2VhcmNoLm1vZGUuZXhwZXJ0LnN1cHBvcnQuZ3JvdXA8L2gyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIml0ZW1zXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtXCIgKm5nRm9yPVwibGV0IGdyb3VwIG9mIHR5cGVHcm91cFRyZWVcIlxuICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntzZWxlY3RlZDogZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cCAmJiBncm91cC5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cC5pZH1cIlxuICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ4cFNlbGVjdEdyb3VwKGdyb3VwKVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJncm91cC5sYWJlbCAhPT0gJzAnXCI+e3tncm91cC5sYWJlbH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImdyb3VwLmxhYmVsID09PSAnMCdcIj57eydlby5zZWFyY2guZ3JvdXAuZ2VuZXJhbCcgfCB0cmFuc2xhdGV9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNvbHVtbiBjb2x1bW4tdHlwZVwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRHcm91cFwiPlxuICAgICAgICAgICAgPGgyIHRyYW5zbGF0ZT5lby5zZWFyY2gubW9kZS5leHBlcnQuc3VwcG9ydC50eXBlPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCB0eXBlIG9mIGV4cGVydE1vZGVTdXBwb3J0LnNlbGVjdGVkR3JvdXAudHJlZVwiXG4gICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUgJiYgdHlwZS5pZCA9PT0gZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlLmlkfVwiXG4gICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInhwU2VsZWN0VHlwZSh0eXBlKVwiPlxuICAgICAgICAgICAgICAgIDxkaXY+e3t0eXBlLmxhYmVsfX08L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2x1bW4gc2VjdGlvbi1maWVsZFwiICpuZ0lmPVwiZXhwZXJ0TW9kZVN1cHBvcnQuc2VsZWN0ZWRUeXBlXCI+XG4gICAgICAgICAgICA8aDIgdHJhbnNsYXRlPmVvLnNlYXJjaC5tb2RlLmV4cGVydC5zdXBwb3J0LmZpZWxkPC9oMj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpdGVtc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaXRlbVwiICpuZ0Zvcj1cImxldCBlbCBvZiBleHBlcnRNb2RlU3VwcG9ydC5zZWxlY3RlZFR5cGUuY2hpbGRyZW5cIiAoY2xpY2spPVwieHBBZGRUb1Rlcm0oZWwuZGF0YSlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj48c3Bhbj57e2VsLmxhYmVsfX08L3NwYW4+PHNwYW4gY2xhc3M9XCJ0eXBlXCI+e3tlbC50eXBlfX08L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGFcIj57e2VsLmRhdGF9fTwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIC0tPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDwhLS0gPC9lby1kaWFsb2c+IC0tPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|