@worktile/theia 13.0.10 → 13.0.13
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/components/column-resize/overlay-handle.component.d.ts +2 -2
- package/components/inline-toolbar/inline-toolbar.component.scss +1 -0
- package/components/toolbar/toolbar.component.d.ts +1 -0
- package/components/toolbar-item/toolbar-item.component.d.ts +2 -1
- package/esm2020/components/column-resize/overlay-handle.component.mjs +7 -2
- package/esm2020/components/toolbar/toolbar.component.mjs +6 -3
- package/esm2020/components/toolbar-dropdown/toolbar-dropdown.component.mjs +2 -1
- package/esm2020/components/toolbar-group/toolbar-group.component.mjs +3 -2
- package/esm2020/components/toolbar-item/toolbar-item.component.mjs +10 -9
- package/esm2020/core/toolbar-item/base-toolbar-item.mjs +1 -1
- package/esm2020/plugins/table/components/td/td.component.mjs +2 -1
- package/esm2020/plugins/table/table.store.mjs +3 -3
- package/esm2020/services/table-contextmenu.service.mjs +2 -2
- package/fesm2015/worktile-theia.mjs +25 -14
- package/fesm2015/worktile-theia.mjs.map +1 -1
- package/fesm2020/worktile-theia.mjs +25 -13
- package/fesm2020/worktile-theia.mjs.map +1 -1
- package/package.json +1 -1
- package/styles/variables.scss +1 -1
|
@@ -457,6 +457,7 @@ export class TheTdComponent extends TheBaseElementComponent {
|
|
|
457
457
|
// Always position the overlay based on left-indexed coordinates.
|
|
458
458
|
disposeOnNavigation: true,
|
|
459
459
|
positionStrategy: this.createPositionStrategy(),
|
|
460
|
+
scrollStrategy: this.overlay.scrollStrategies.close(),
|
|
460
461
|
...overlayOption
|
|
461
462
|
});
|
|
462
463
|
}
|
|
@@ -688,4 +689,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
|
|
|
688
689
|
type: ViewChild,
|
|
689
690
|
args: ['cellInner', { static: true }]
|
|
690
691
|
}] } });
|
|
691
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3RkL3RkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBTVQsV0FBVyxFQUtYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSw2REFBNkQsQ0FBQztBQUUzSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7Ozs7O0FBRW5FLE1BQU0sb0JBQW9CLEdBQUcsb0NBQW9DLENBQUM7QUFDbEUsTUFBTSxpQkFBaUIsR0FBRyxFQUFFLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUF5QztJQUM5RCxHQUFHLEVBQUU7UUFDRCxPQUFPLEVBQUUsT0FBTztRQUNoQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxPQUFPO1FBQ2pCLFFBQVEsRUFBRSxRQUFRO0tBQ3JCO0lBQ0QsTUFBTSxFQUFFO1FBQ0osT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTyxFQUFFLFFBQVE7UUFDakIsUUFBUSxFQUFFLE9BQU87UUFDakIsUUFBUSxFQUFFLFFBQVE7S0FDckI7SUFDRCxLQUFLLEVBQUU7UUFDSCxPQUFPLEVBQUUsS0FBSztRQUNkLE9BQU8sRUFBRSxLQUFLO1FBQ2QsUUFBUSxFQUFFLFFBQVE7UUFDbEIsUUFBUSxFQUFFLEtBQUs7S0FDbEI7SUFDRCxJQUFJLEVBQUU7UUFDRixPQUFPLEVBQUUsT0FBTztRQUNoQixPQUFPLEVBQUUsS0FBSztRQUNkLFFBQVEsRUFBRSxRQUFRO1FBQ2xCLFFBQVEsRUFBRSxLQUFLO0tBQ2xCO0NBQ0osQ0FBQztBQU9GLE1BQU0sT0FBTyxjQUFlLFNBQVEsdUJBQWlEO0lBOEVqRixZQUNXLFVBQXNCLEVBQ3RCLEdBQXNCLEVBQ3JCLFFBQW1CLEVBQ25CLGdCQUFrQyxFQUNsQyxNQUFjLEVBQ2YsUUFBa0IsRUFDbEIsT0FBZ0IsRUFDaEIsYUFBa0MsRUFDbEMsZ0JBQWtDO1FBRXpDLEtBQUssQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFWaEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUNyQixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ25CLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNmLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixrQkFBYSxHQUFiLGFBQWEsQ0FBcUI7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQXRGN0MsYUFBUSxHQUFpQixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBS2hDLGlCQUFZLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEQsdUJBQWtCLEdBQVcsSUFBSSxDQUFDO0lBbUZ6QyxDQUFDO0lBakZELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUM7SUFDMUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUM7SUFDNUMsQ0FBQztJQUVELElBQUksZUFBZTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksY0FBYztRQUNkLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUM7SUFDOUMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDO0lBQzdELENBQUM7SUFFRCxJQUFJLG9CQUFvQjtRQUNwQixNQUFNLGFBQWEsR0FBZ0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDNUYsSUFBSSxhQUFhLEVBQUU7WUFDZixPQUFPLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNwRDtRQUNELE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUNyQixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDckUsQ0FBQztJQUVELElBQUksWUFBWTtRQUNaLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7SUFFRCxJQUFJLGNBQWM7UUFDZCxPQUFPO1lBQ0gsNkJBQTZCO1lBQzdCLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1NBQ3pILENBQUM7SUFDTixDQUFDO0lBaUJELElBQUksc0JBQXNCO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUM7SUFDeEMsQ0FBQztJQUVELGVBQWU7UUFDWCxLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztTQUNuQjtJQUNMLENBQUM7SUFnQkQsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNoQixlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFFRCxlQUFlO1FBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7WUFDckMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0IscURBQXFEO1lBQ3JELDZCQUE2QjtRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsY0FBYyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBc0IsQ0FBQztJQUNsRyxDQUFDO0lBRUQsNEJBQTRCO1FBQ3hCLElBQUksQ0FBQyxVQUFVO2FBQ1YsbUJBQW1CLEVBQUU7YUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZUFBZSxDQUFDLENBQUM7YUFDN0U7aUJBQU07Z0JBQ0gsTUFBTSxjQUFjLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDekIsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksR0FBRyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxFQUFFLENBQzVHLENBQUM7Z0JBQ0YsSUFBSSxjQUFjLEVBQUU7b0JBQ2hCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxDQUFDO2lCQUMxRTtxQkFBTTtvQkFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxlQUFlLENBQUMsQ0FBQztpQkFDN0U7YUFDSjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsNkJBQTZCO1FBQ3pCLElBQUksQ0FBQyxVQUFVO2FBQ1Ysb0JBQW9CLEVBQUU7YUFDdEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ1gsSUFBSSxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQzthQUM5RTtpQkFBTTtnQkFDSCxNQUFNLGNBQWMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUN6QixDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsSUFBSSxHQUFHLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLEVBQUUsQ0FDNUcsQ0FBQztnQkFDRixJQUFJLGNBQWMsRUFBRTtvQkFDaEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztpQkFDM0U7cUJBQU07b0JBQ0gsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztpQkFDOUU7YUFDSjtZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDN0IsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsb0JBQW9CO1FBQ2hCLElBQUksQ0FBQyxVQUFVO2FBQ1YsV0FBVyxFQUFFO2FBQ2IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7YUFDOUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3hCLHFEQUFxRDtZQUNyRCw2QkFBNkI7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDZixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELGdCQUFnQjtRQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzRCxrQ0FBa0M7UUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRUQsYUFBYTtRQUNULElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEtBQUssSUFBSSxDQUFDLGVBQWUsRUFBRTtZQUN2RCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBeUIsQ0FBQztTQUNqRTtJQUNMLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO1NBQ3ZDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQ3RCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbEQsSUFBSSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUMvRSxLQUFLLElBQUksS0FBSyxHQUFHLFFBQVEsRUFBRSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsUUFBUSxFQUFFLEtBQUssRUFBRSxFQUFFO29CQUN6RSxNQUFNLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO2lCQUM1QjtnQkFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLGdCQUFnQixDQUFDO2dCQUNuQyxPQUFPLE1BQU0sQ0FBQzthQUNqQjtTQUNKO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDckIsQ0FBQztJQUVELHFCQUFxQjtRQUNqQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ2xELE1BQU0sWUFBWSxHQUFhLEVBQUUsQ0FBQztRQUNsQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUN2QyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsRUFBRTtZQUN0QyxJQUFJLFNBQVMsR0FBRyxRQUFRLElBQUksU0FBUyxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtnQkFDdEUsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQy9FLElBQUksVUFBVSxFQUFFO29CQUNaLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ2hDO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELFFBQVE7UUFDSixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsY0FBYyxDQUFDLENBQUM7U0FDekU7YUFBTTtZQUNILElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxTQUFpQjtRQUMxQixJQUFJLElBQUksQ0FBQyxrQkFBa0IsS0FBSyxTQUFTLEVBQUU7WUFDdkMsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUNwQyxpQ0FBaUM7UUFDakMsb0ZBQW9GO1FBQ3BGLFdBQVc7UUFDWCxzRUFBc0U7UUFDdEUsSUFBSTtJQUNSLENBQUM7SUFFRCxxQkFBcUI7SUFDckIsc0JBQXNCO1FBQ2xCLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQy9CLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYyxDQUFDO1lBQy9DLFNBQVMsQ0FBYSxPQUFPLEVBQUUsV0FBVyxDQUFDO2lCQUN0QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsTUFBTSxDQUFDLENBQUMsQ0FBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUN6QyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ1IsTUFBTSxJQUFJLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzVFLE9BQU8sSUFBSSxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxFQUNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FDekI7aUJBQ0EsU0FBUyxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO2dCQUN0QyxJQUFJLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUNuRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7aUJBQzVCO2dCQUNELElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pDLENBQUMsQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUJBQXFCO1FBQ2pCLE1BQU0sbUJBQW1CLEdBQUcsU0FBUyxDQUFhLFFBQVEsRUFBRSxXQUFXLENBQUM7YUFDbkUsSUFBSSxDQUNELFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQ3hCLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNSLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUN2QixNQUFNLElBQUksR0FBSSxLQUFLLENBQUMsTUFBc0IsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUM1RSxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsRUFDRixNQUFNLENBQUMsQ0FBQyxJQUEwQixFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQ2pEO2FBQ0EsU0FBUyxDQUFDLENBQUMsSUFBMEIsRUFBRSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztRQUNQLFNBQVMsQ0FBYSxRQUFRLEVBQUUsU0FBUyxDQUFDO2FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzNDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRTtvQkFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDbkYsQ0FBQyxDQUFDLENBQUM7YUFDTjtZQUNELG1CQUFtQixDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELG1CQUFtQjtJQUNYLHdCQUF3QjtRQUM1QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWMsQ0FBQztRQUMvQyxJQUFJLENBQUMsZUFBZTthQUNmLGdDQUFnQyxDQUFDLE9BQU8sQ0FBQzthQUN6QyxJQUFJLENBQ0QsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ1IsVUFBVTtZQUNWLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssUUFBUSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDeEYsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELFVBQVU7WUFDVixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsUUFBUSxLQUFLLFFBQVEsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUU7Z0JBQ3BGLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FDTDthQUNBLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUN6QixJQUFJLGVBQWUsSUFBSSxlQUFlLENBQUMsUUFBUSxFQUFFO2dCQUM3QyxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQyxRQUFRLENBQUM7YUFDbkQ7aUJBQU07Z0JBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDL0I7WUFDRCxJQUFJLGVBQWUsRUFBRTtnQkFDakIsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDO2dCQUNoRCxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxFQUFFLEVBQUU7b0JBQ3BELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7b0JBQ2pELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2lCQUM3QjtxQkFBTTtvQkFDSCxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO29CQUMzRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztpQkFDM0M7YUFDSjtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDNUI7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTyxxQkFBcUI7UUFDekIsTUFBTSxrQkFBa0IsR0FBRyxTQUFTLENBQW1CLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0RSxLQUFLLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7YUFDdkUsSUFBSSxDQUNELGtCQUFrQixFQUNsQixNQUFNLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQy9FO2FBQ0EsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLG1CQUFtQixFQUFFLEVBQUUsRUFBRTtZQUM1RCxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMzRixNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxHQUFHLEtBQW1CLENBQUM7WUFDakQsSUFBSSxrQkFBa0IsR0FBRyxLQUFLLENBQUM7WUFDL0Isb0RBQW9EO1lBQ3BELElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztnQkFDckUsa0JBQWtCLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsU0FBUyxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDeEU7aUJBQU07Z0JBQ0gsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDdEUsa0JBQWtCLEdBQUcsU0FBUyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsVUFBVSxHQUFHLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDeEU7WUFDRCxJQUFJLGtCQUFrQixFQUFFO2dCQUNwQixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFDbkUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDeEMsSUFBSSxtQkFBbUIsRUFBRTtnQkFDckIsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7YUFDbkM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVQLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQzthQUN6RSxJQUFJLENBQUMsa0JBQWtCLENBQUM7YUFDeEIsU0FBUyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVPLHdCQUF3QjtRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUU7WUFDakIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDO2dCQUNyQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhO2FBQzNDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLG1CQUFtQixDQUFDLFVBQTRCO1FBQ3BELElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU8sbUJBQW1CO1FBQ3ZCLE1BQU0sWUFBWSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FDMUIsSUFBSSxDQUFDLFVBQVUsRUFDZixJQUFJLENBQUMsVUFBVyxFQUNoQixJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFDNUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUM3QixJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFDN0IsR0FBRyxFQUFFO1lBQ0QsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7UUFDNUMsQ0FBQyxDQUNKLENBQUM7UUFDRixZQUFZLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDakUsWUFBWSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztRQUNqRSxPQUFPLElBQUksZUFBZSxDQUFDLHFDQUFxQyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxVQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDckYsSUFBSSxDQUFDLGdDQUFnQyxFQUFFLENBQUM7SUFDNUMsQ0FBQztJQUVPLGdDQUFnQztRQUNwQyxJQUFJLENBQUMsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUMsZ0NBQWdDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUM5RixJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDN0YsSUFBSSxDQUFDLFVBQVUsRUFBRSxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTyw2QkFBNkI7UUFDakMsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUN0RSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDN0MsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLGVBQWUsQ0FBQyxDQUFDO1NBQzNGO2FBQU07WUFDSCxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUM7U0FDM0M7UUFDRCxJQUFJLENBQUMsVUFBVyxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyxVQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLDBCQUEwQjtRQUM5QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsQ0FBQztRQUN2RCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsYUFBYSxDQUFDLHlCQUF5QixDQUFnQixDQUFDO1FBQ3hGLElBQUksZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLFVBQVUsRUFBRTtZQUNaLGVBQWUsR0FBRyxVQUFVLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxLQUFLLENBQUM7U0FDOUQ7UUFDRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsV0FBVyxHQUFHLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLFVBQVcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxVQUFXLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDdEUsQ0FBQztJQUVPLFNBQVMsQ0FBQyxTQUFpQixFQUFFLFlBQXFCO1FBQ3RELG1DQUFtQztRQUNuQyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNuQzthQUFNO1lBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUNoQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUNwQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0lBRU8sdUJBQXVCO1FBQzNCLDRFQUE0RTtRQUM1RSxzRUFBc0U7UUFDdEUsNkRBQTZEO1FBQzdELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZO1lBQ25DLENBQUMsQ0FBQztnQkFDSSxLQUFLLEVBQUUsaUJBQWlCLEdBQUcsSUFBSTtnQkFDL0IsVUFBVSxFQUFFLGdDQUFnQzthQUMvQztZQUNILENBQUMsQ0FBQztnQkFDSSxNQUFNLEVBQUUsaUJBQWlCLEdBQUcsSUFBSTtnQkFDaEMsVUFBVSxFQUFFLElBQUksQ0FBQyxjQUFjO2FBQ2xDLENBQUM7UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3ZCLGlFQUFpRTtZQUNqRSxtQkFBbUIsRUFBRSxJQUFJO1lBQ3pCLGdCQUFnQixFQUFFLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUMvQyxHQUFHLGFBQWE7U0FDbkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLHNCQUFzQjtRQUMxQixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsQ0FBQztRQUNuRCxNQUFNLFFBQVEsR0FBc0IsSUFBSSxDQUFDLFlBQVk7WUFDakQsQ0FBQyxDQUFDLEVBQUUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLE9BQU8sRUFBRTtZQUNwRCxDQUFDLENBQUMsRUFBRSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsT0FBTzthQUNkLFFBQVEsRUFBRTthQUNWLG1CQUFtQixDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO2FBQ2xELHNCQUFzQixDQUFDLEtBQUssQ0FBQzthQUM3QixpQkFBaUIsQ0FBQyxLQUFLLENBQUM7YUFDeEIsUUFBUSxDQUFDLEtBQUssQ0FBQzthQUNmLGFBQWEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbkMsQ0FBQztJQUVPLDZCQUE2QjtRQUNqQyxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixFQUFFLENBQUMsR0FBRyxDQUFDO1FBQ3RFLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRTtZQUM3QyxPQUFPLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQztTQUNoRzthQUFNO1lBQ0gsT0FBTyxlQUFlLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxHQUFHLENBQUM7U0FDdEY7SUFDTCxDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLENBQUMsSUFBSSxDQUFDO1FBQ25GLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLElBQUksQ0FBQztRQUN4RSxPQUFPLGdCQUFnQixHQUFHLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDM0UsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFjO1FBQzFCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQTBCLENBQUM7UUFDaEcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDO1FBQ3hELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxNQUFNLEVBQUU7WUFDakMsU0FBUyxHQUFHLFNBQVMsR0FBRyxDQUFDLENBQUM7U0FDN0I7UUFDRCxNQUFNLE9BQU8sR0FBSSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQTZCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RixTQUFTLEdBQUcsU0FBUyxHQUFJLE9BQWtCLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNwRCxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN2RDtZQUNELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDWixJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDO2FBQ3JIO1NBQ0o7YUFBTTtZQUNILE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsSUFBSSxPQUFPLEVBQUU7Z0JBQ1QsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDM0QsSUFBSSxNQUFNLEtBQUssTUFBTSxFQUFFO29CQUNuQixpQkFBaUI7b0JBQ2pCLE9BQU87aUJBQ1Y7Z0JBQ0QsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7Z0JBQ3pCLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3hDLElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTt3QkFDaEIsVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBQ2hFO29CQUNELElBQUksVUFBVSxHQUFHLENBQUMsRUFBRTt3QkFDaEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztxQkFDOUY7aUJBQ0o7cUJBQU07b0JBQ0gsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztpQkFDMUY7YUFDSjtpQkFBTTtnQkFDSCxNQUFNLFdBQVcsR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQy9GLElBQUksV0FBVyxHQUFHLENBQUMsRUFBRTtvQkFDakIsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTt3QkFDaEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFDO3FCQUMvQzt5QkFBTTt3QkFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQztxQkFDckQ7aUJBQ0o7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUEyQixFQUFFLE1BQWMsRUFBRSxRQUFnQjtRQUN2RSxPQUFPLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sWUFBWSxHQUFHLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUNyRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRTtnQkFDN0MsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDdkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQkFDaEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDbEYsTUFBTSxHQUFHLENBQUMsQ0FBQztpQkFDZDtxQkFBTTtvQkFDSCxNQUFNLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDO29CQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUNsRjthQUNKO1lBQ0QsUUFBUSxFQUFFLENBQUM7U0FDZDtRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxjQUFjLENBQUMsSUFBMkIsRUFBRSxNQUFjLEVBQUUsUUFBZ0I7UUFDeEUsT0FBTyxNQUFNLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNqQyxNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDckQsSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUU7Z0JBQzdDLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3ZDLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO2dCQUNELElBQUksWUFBWSxHQUFHLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRTtvQkFDdEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsbUJBQW1CLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxDQUFDO29CQUN4RSxNQUFNLEdBQUcsQ0FBQyxDQUFDO2lCQUNkO3FCQUFNO29CQUNILE1BQU0sSUFBSSxZQUFZLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUM7b0JBQ3RELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUM7aUJBQ2xGO2FBQ0o7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFjO1FBQ3ZCLE1BQU0sSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQTBCLENBQUM7UUFDN0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzVELElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsc0JBQXNCO1FBQy9GLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3ZDLFFBQVEsR0FBRyxRQUFRLEdBQUcsQ0FBQyxDQUFDO1NBQzNCO1FBQ0QsTUFBTSxPQUFPLEdBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFzQyxDQUFDLE9BQU8sQ0FBQztRQUNoRixNQUFNLGNBQWMsR0FBRyxRQUFRLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNaLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztZQUNuRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNELE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUN0RDtZQUNELElBQUksTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDWixJQUFJLFVBQVUsR0FBRyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxDQUFDO2FBQzFFO1NBQ0o7YUFBTTtZQUNILElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pELElBQUksTUFBTSxLQUFLLE1BQU0sRUFBRTtnQkFDbkIsaUJBQWlCO2dCQUNqQixPQUFPO2FBQ1Y7WUFDRCxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztZQUN6QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7Z0JBQzNELElBQUksU0FBUyxHQUFHLENBQUMsRUFBRTtvQkFDZixNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDekQ7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUEyQixFQUFFLE1BQWMsRUFBRSxRQUFnQjtRQUN0RSxPQUFPLE1BQU0sR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ2pDLE1BQU0sZUFBZSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUU7b0JBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZEO2dCQUNELElBQUksZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7b0JBQ3BFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3RGLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU07b0JBQ0gsTUFBTSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDcEY7YUFDSjtZQUNELFFBQVEsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsZUFBZSxDQUFDLElBQTJCLEVBQUUsTUFBYyxFQUFFLFFBQWdCO1FBQ3pFLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakMsTUFBTSxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pELElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtvQkFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztpQkFDdkQ7Z0JBQ0QsSUFBSSxlQUFlLEdBQUcsTUFBTSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFO29CQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxtQkFBbUIsQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFDLENBQUM7b0JBQzVFLE1BQU0sR0FBRyxDQUFDLENBQUM7aUJBQ2Q7cUJBQU07b0JBQ0gsTUFBTSxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQztpQkFDcEY7YUFDSjtZQUNELFFBQVEsRUFBRSxDQUFDO1NBQ2Q7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsU0FBUztJQUVULFdBQVc7UUFDUCxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDcEIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDNUI7UUFDRCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQzs7NEdBeHJCUSxjQUFjO2dHQUFkLGNBQWMsZ05BRlosQ0FBQyxtQkFBbUIsQ0FBQyx1S0NwRXBDLHVKQUdBOzRGRG1FYSxjQUFjO2tCQUwxQixTQUFTOytCQUNJLFdBQVcsYUFFVixDQUFDLG1CQUFtQixDQUFDOzJUQTBETSxlQUFlO3NCQUFwRCxXQUFXO3VCQUFDLHVCQUF1QjtnQkFFUCxPQUFPO3NCQUFuQyxXQUFXO3VCQUFDLGNBQWM7Z0JBRUUsT0FBTztzQkFBbkMsV0FBVzt1QkFBQyxjQUFjO2dCQUVHLE9BQU87c0JBQXBDLFdBQVc7dUJBQUMsZUFBZTtnQkFHNUIsU0FBUztzQkFEUixTQUFTO3VCQUFDLFdBQVcsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBPbkluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBPbkRlc3Ryb3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgTmdab25lLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgSW5qZWN0b3IsXG4gICAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBtYXAsIHRha2UsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEVkaXRvciB9IGZyb20gJ3NsYXRlJztcbmltcG9ydCB7IEVMRU1FTlRfVE9fQ09NUE9ORU5UIH0gZnJvbSAnc2xhdGUtYW5ndWxhcic7XG5pbXBvcnQgeyBTTEFfVEFCTEVfQ0VMTF9TRUxFQ1RPUiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbnN0YW50cy9zZWxlY3Rvcic7XG5pbXBvcnQgeyBUaGVUYWJsZUNvbXBvbmVudCB9IGZyb20gJy4uL3RhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZVBvc2l0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGFibGUtcG9zaXRpb24nO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBtZXJnZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29sdW1uUmVzaXppbmdTdG9yZSB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9yZXNpemluZy5zdG9yZSc7XG5pbXBvcnQgeyBQb3NpdGlvbiwgVGFibGVDZWxsRXZlbnREaXNwYXRjaGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL2V2ZW50LWRpc3BhdGNoZXInO1xuaW1wb3J0IHsgQ29sdW1uUmVzaXplTm90aWZpZXJTb3VyY2UsIENvbHVtblNpemVBY3Rpb24gfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvY29sdW1uLXJlc2l6ZS1ub3RpZmllcic7XG5pbXBvcnQgeyBDb25uZWN0ZWRQb3NpdGlvbiwgT3ZlcmxheSwgT3ZlcmxheVJlZiwgU2Nyb2xsRGlzcGF0Y2hlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IENvbXBvbmVudFBvcnRhbCwgUG9ydGFsSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcbmltcG9ydCB7IFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvb3ZlcmxheS1oYW5kbGUuY29tcG9uZW50JztcbmltcG9ydCB7IFJlc2l6ZVJlZiB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9yZXNpemUtcmVmJztcbmltcG9ydCB7IGNvZXJjZUNzc1BpeGVsVmFsdWUgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlLCBnZXRFbGVtZW50SGVpZ2h0LCBnZXRFbGVtZW50V2lkdGgsIHVzZUVsZW1lbnRTdHlsZSB9IGZyb20gJy4uLy4uLy4uLy4uL3V0aWxzL2RvbSc7XG5pbXBvcnQgeyBUaGVCYXNlRWxlbWVudENvbXBvbmVudCB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvdmlldy1iYXNlJztcbmltcG9ydCB7IEJBU0VfRklMTF9IRUlHSFQsIFRhYmxlT3B0aW9ucyB9IGZyb20gJy4uLy4uL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IFRoZUVkaXRvciB9IGZyb20gJy4uLy4uLy4uLy4uL2ludGVyZmFjZXMvZWRpdG9yJztcbmltcG9ydCB7IFRhYmxlQ2VsbEVsZW1lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9jdXN0b20tdHlwZXMnO1xuaW1wb3J0IHsgZ2V0QmFzZUhlaWdodEZvclJvd3MgfSBmcm9tICcuLi8uLi91dGlscy9nZXQtYmFzZS1oZWlnaHQnO1xuXG5jb25zdCBPVkVSTEFZX0FDVElWRV9DTEFTUyA9ICd0aGUtcmVzaXphYmxlLW92ZXJsYXktdGh1bWItYWN0aXZlJztcbmNvbnN0IE9WRVJMQVlfSU5JVF9TSVpFID0gMTY7XG5leHBvcnQgY29uc3QgUE9TSVRJT05fTUFQOiB7IFtrZXk6IHN0cmluZ106IENvbm5lY3RlZFBvc2l0aW9uIH0gPSB7XG4gICAgdG9wOiB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICdjZW50ZXInXG4gICAgfSxcbiAgICBib3R0b206IHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICBvdmVybGF5WTogJ2NlbnRlcidcbiAgICB9LFxuICAgIHJpZ2h0OiB7XG4gICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdjZW50ZXInLFxuICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICB9LFxuICAgIGxlZnQ6IHtcbiAgICAgICAgb3JpZ2luWDogJ3N0YXJ0JyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd0ZFt0aGVUZF0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90ZC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbQ29sdW1uUmVzaXppbmdTdG9yZV1cbn0pXG5leHBvcnQgY2xhc3MgVGhlVGRDb21wb25lbnQgZXh0ZW5kcyBUaGVCYXNlRWxlbWVudENvbXBvbmVudDxUYWJsZUNlbGxFbGVtZW50LCBFZGl0b3I+IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIGRlc3Ryb3kkOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xuICAgIHB1YmxpYyB0YWJsZVBvc2l0aW9uOiBUYWJsZVBvc2l0aW9uO1xuICAgIHB1YmxpYyB0YWJsZUNvbXBvbmVudDogVGhlVGFibGVDb21wb25lbnQ7XG4gICAgcHJvdGVjdGVkIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICAgIHB1YmxpYyBob3ZlcmREaXJlY3Rpb246IFBvc2l0aW9uIHwgbnVsbDtcbiAgICBwdWJsaWMgdGFibGVPcHRpb25zOiBUYWJsZU9wdGlvbnMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgcHVibGljIGNlbGxJbm5lck1pbkhlaWdodDogbnVtYmVyID0gbnVsbDtcblxuICAgIGdldCB0YWJsZVN0b3JlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVN0b3JlO1xuICAgIH1cblxuICAgIGdldCB0YWJsZVNlcnZpY2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlU2VydmljZTtcbiAgICB9XG5cbiAgICBnZXQgZXZlbnREaXNwYXRjaGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC5ldmVudERpc3BhdGNoZXI7XG4gICAgfVxuXG4gICAgZ2V0IHJlc2l6ZU5vdGlmaWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC5yZXNpemVOb3RpZmllcjtcbiAgICB9XG5cbiAgICBnZXQgdGFibGVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQudGhlVGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgZ2V0IHNjcm9sbGFibGVFbGVtZW50VG9wKCkge1xuICAgICAgICBjb25zdCBjZGtzY3JvbGxhYmxlOiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJ1tjZGtzY3JvbGxhYmxlXScpO1xuICAgICAgICBpZiAoY2Rrc2Nyb2xsYWJsZSkge1xuICAgICAgICAgICAgcmV0dXJuIGNka3Njcm9sbGFibGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtd2luZG93LnNjcm9sbFk7XG4gICAgfVxuXG4gICAgZ2V0IHNjcm9sbGFibGVFbGVtZW50TGVmdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQudGFibGVXcmFwcGVyLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICB9XG5cbiAgICBnZXQgaXNYQXhpc0hvdmVyKCkge1xuICAgICAgICByZXR1cm4gW1Bvc2l0aW9uLmxlZnQsIFBvc2l0aW9uLnJpZ2h0XS5pbmNsdWRlcyh0aGlzLmhvdmVyZERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgZ2V0IHJvd1Jlc2l6ZUNsYXNzKCkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgJ3RoZS1yb3ctcmVzaXplLWhhbmRsZS1wYW5lbCcsXG4gICAgICAgICAgICB0aGlzLnRhYmxlUG9zaXRpb24udGFibGUgJiYgdGhpcy50YWJsZVBvc2l0aW9uLnRhYmxlLm9wdGlvbnM/Lm51bWJlcmVkQ29sdW1uID8gJ3RoZS1udW1iZXJlZC1yZXNpemUtaGFuZGxlLXBhbmVsJyA6ICcnXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgcHVibGljIGRvdFdyYXBwZXJIb3ZlcmVkOiBib29sZWFuO1xuXG4gICAgcHVibGljIHJlc2l6ZVJlZjogUmVzaXplUmVmO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5iYWNrZ3JvdW5kQ29sb3InKSBiYWNrZ3JvdW5kQ29sb3I6IHN0cmluZztcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5jb2xzcGFuJykgY29sc3BhbjogbnVtYmVyO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLnJvd3NwYW4nKSByb3dzcGFuOiBudW1iZXI7XG5cbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLmRpc3BsYXknKSBkaXNwbGF5OiBzdHJpbmc7XG5cbiAgICBAVmlld0NoaWxkKCdjZWxsSW5uZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGNlbGxJbm5lcjogRWxlbWVudFJlZjtcblxuICAgIGdldCBjZWxsSW5uZXJOYXRpdmVFbGVtZW50KCk6IEhUTUxFbGVtZW50IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2VsbElubmVyLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgb25Db250ZXh0Q2hhbmdlKCkge1xuICAgICAgICBzdXBlci5vbkNvbnRleHRDaGFuZ2UoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXNlU3RhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHVibGljIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxuICAgICAgICBwdWJsaWMgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBwdWJsaWMgb3ZlcmxheTogT3ZlcmxheSxcbiAgICAgICAgcHVibGljIHJlc2l6aW5nU3RvcmU6IENvbHVtblJlc2l6aW5nU3RvcmUsXG4gICAgICAgIHB1YmxpYyBzY3JvbGxEaXNwYXRjaGVyOiBTY3JvbGxEaXNwYXRjaGVyXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGVsZW1lbnRSZWYsIGNkcik7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMudXNlQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLnVzZVNwYW4oKTtcbiAgICAgICAgdGhpcy51c2VEaXNwbGF5KCk7XG4gICAgICAgIHRoaXMudXNlRm9jdXMoKTtcbiAgICAgICAgdXNlRWxlbWVudFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUub25TdGFibGUucGlwZSh0YWtlKDEpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51c2VUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICB0aGlzLmdldEluamVjdGlvblNlcnZpY2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlU2VsZWN0ZWRDZWxsc0NoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVEYW5nZXJvdXNDZWxsc0NoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVUYWJsZUNoYW5nZSgpO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5DZWxsU2VsZWN0RXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLmxpc3RlbkZvckNlbGxIb3ZlckV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Gb3JSZXNpemVFdmVudHMoKTtcbiAgICAgICAgICAgIC8vIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FsY3VsYXRlQ2VsbElubmVyTWluSGVpZ2h0KCk7XG4gICAgICAgICAgICAvLyB0aGlzLnVzZU1pbkhlaWdodChoZWlnaHQpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRJbmplY3Rpb25TZXJ2aWNlKCkge1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50ID0gRUxFTUVOVF9UT19DT01QT05FTlQuZ2V0KHRoaXMudGFibGVQb3NpdGlvbi50YWJsZSkgYXMgVGhlVGFibGVDb21wb25lbnQ7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlU2VsZWN0ZWRDZWxsc0NoYW5nZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZVN0b3JlXG4gICAgICAgICAgICAuc2VsZWN0ZWRDZWxsc0NoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0ZWQtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRDZWxsID0geC5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHsgcm93LCBjb2wgfSkgPT4gcm93ID09PSB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSAmJiBjb2wgPT09IHRoaXMudGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGVkLWNlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZC1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlRGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLmRhbmdlcm91c0NlbGxzQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzU2VsZWN0ZWRDZWxsID0geC5zb21lKFxuICAgICAgICAgICAgICAgICAgICAgICAgKHsgcm93LCBjb2wgfSkgPT4gcm93ID09PSB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKSAmJiBjb2wgPT09IHRoaXMudGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1NlbGVjdGVkQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rhbmdlcm91cy1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGFuZ2Vyb3VzLWNlbGwnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVUYWJsZUNoYW5nZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZVN0b3JlXG4gICAgICAgICAgICAudGFibGVDaGFuZ2UoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VUYWJsZVBvc2l0aW9uKCk7XG4gICAgICAgICAgICAgICAgLy8gY29uc3QgaGVpZ2h0ID0gdGhpcy5jYWxjdWxhdGVDZWxsSW5uZXJNaW5IZWlnaHQoKTtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLnVzZU1pbkhlaWdodChoZWlnaHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXNlU3RhdGUoKSB7XG4gICAgICAgIHRoaXMudXNlQmFja2dyb3VuZCgpO1xuICAgICAgICB0aGlzLnVzZVNwYW4oKTtcbiAgICAgICAgdGhpcy51c2VEaXNwbGF5KCk7XG4gICAgICAgIHRoaXMudXNlRm9jdXMoKTtcbiAgICAgICAgdXNlRWxlbWVudFN0eWxlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB0aGlzLmVsZW1lbnQpO1xuICAgIH1cblxuICAgIHVzZVRhYmxlUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBuZXcgVGFibGVPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBUaGVFZGl0b3IuZmluZFBhdGgodGhpcy5lZGl0b3IsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgIC8vIG11c3QgYmUgcGF0aCBvZiBjZWxsJ3MgY2hpbGRyZW5cbiAgICAgICAgdGhpcy50YWJsZVBvc2l0aW9uID0gVGFibGVQb3NpdGlvbi5jcmVhdGUob3B0cywgdGhpcy5lZGl0b3IsIHBhdGguY29uY2F0KDApKTtcbiAgICB9XG5cbiAgICB1c2VCYWNrZ3JvdW5kKCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmJhY2tncm91bmRDb2xvciAhPT0gdGhpcy5iYWNrZ3JvdW5kQ29sb3IpIHtcbiAgICAgICAgICAgIHRoaXMuYmFja2dyb3VuZENvbG9yID0gdGhpcy5lbGVtZW50LmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VTcGFuKCkge1xuICAgICAgICB0aGlzLmNvbHNwYW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMucm93c3BhbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5jb2xzcGFuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbHNwYW4gPSB0aGlzLmVsZW1lbnQuY29sc3BhbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5lbGVtZW50LnJvd3NwYW4pIHtcbiAgICAgICAgICAgIHRoaXMucm93c3BhbiA9IHRoaXMuZWxlbWVudC5yb3dzcGFuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2FsY3VsYXRlQ2VsbElubmVyTWluSGVpZ2h0KCkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50LmNvbHNwYW4pIHtcbiAgICAgICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy50YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCk7XG4gICAgICAgICAgICBpZiAodGhpcy5jYWxjdWxhdGVDb21iaW5lZFJvd3MoKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVpZ2h0cyA9IGdldEJhc2VIZWlnaHRGb3JSb3dzKHRoaXMuZWRpdG9yLCB0aGlzLnRhYmxlQ29tcG9uZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGluZGV4ID0gcm93SW5kZXg7IGluZGV4IDwgdGhpcy5lbGVtZW50LnJvd3NwYW4gKyByb3dJbmRleDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgICAgICBoZWlnaHQgKz0gaGVpZ2h0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhlaWdodCA9IGhlaWdodCAtIEJBU0VfRklMTF9IRUlHSFQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNvbWJpbmVkUm93cygpIHtcbiAgICAgICAgY29uc3Qgcm93SW5kZXggPSB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Um93SW5kZXgoKTtcbiAgICAgICAgY29uc3QgY29tYmluZWRSb3dzOiBudW1iZXJbXSA9IFtdO1xuICAgICAgICBjb25zdCB0YWJsZSA9IHRoaXMudGFibGVQb3NpdGlvbi50YWJsZTtcbiAgICAgICAgdGFibGUuY2hpbGRyZW4uZm9yRWFjaCgocm93LCBfcm93SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChfcm93SW5kZXggPiByb3dJbmRleCAmJiBfcm93SW5kZXggPD0gcm93SW5kZXggKyB0aGlzLmVsZW1lbnQucm93c3Bhbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ29tYmluZWQgPSByb3cuY2hpbGRyZW4uZXZlcnkoY2VsbCA9PiBjZWxsLmhpZGRlbiB8fCBjZWxsLnJvd3NwYW4gPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21iaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZFJvd3MucHVzaChfcm93SW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBjb21iaW5lZFJvd3M7XG4gICAgfVxuXG4gICAgdXNlRGlzcGxheSgpIHtcbiAgICAgICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5lbGVtZW50LmhpZGRlbiA/ICdub25lJyA6ICcnO1xuICAgIH1cblxuICAgIHVzZUZvY3VzKCkge1xuICAgICAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzZWQtY2VsbCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2ZvY3VzZWQtY2VsbCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXNlTWluSGVpZ2h0KG1pbkhlaWdodDogbnVtYmVyKSB7XG4gICAgICAgIGlmICh0aGlzLmNlbGxJbm5lck1pbkhlaWdodCA9PT0gbWluSGVpZ2h0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZWxsSW5uZXJNaW5IZWlnaHQgPSBtaW5IZWlnaHQ7XG4gICAgICAgIC8vIGlmICh0aGlzLmNlbGxJbm5lck1pbkhlaWdodCkge1xuICAgICAgICAvLyAgICAgdGhpcy5jZWxsSW5uZXJOYXRpdmVFbGVtZW50LnN0eWxlLm1pbkhlaWdodCA9IGAke3RoaXMuY2VsbElubmVyTWluSGVpZ2h0fXB4YDtcbiAgICAgICAgLy8gfSBlbHNlIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2VsbElubmVyTmF0aXZlRWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnbWluLWhlaWdodCcpO1xuICAgICAgICAvLyB9XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIGNlbGwtc2VsZWN0XG4gICAgbGlzdGVuQ2VsbFNlbGVjdEV2ZW50cygpIHtcbiAgICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50ITtcbiAgICAgICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50PihlbGVtZW50LCAnbW91c2Vkb3duJylcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKGU6IE1vdXNlRXZlbnQpID0+IGUuYnV0dG9uICE9PSAyKSxcbiAgICAgICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjZWxsO1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKGNlbGwgPT4gISFjZWxsKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbFN0YXJ0KGNlbGwsIHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuQ2VsbE1vdXNlRXZlbnRzKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGxpc3RlbkNlbGxNb3VzZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgbW91c2VvdmVyT2JzZXJ2YWJsZSA9IGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlb3ZlcicpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgbWFwKGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbCA9IChldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3QoU0xBX1RBQkxFX0NFTExfU0VMRUNUT1IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoKGNlbGw6IEhUTUxUYWJsZUNlbGxFbGVtZW50KSA9PiAhIWNlbGwpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5zZWxlY3RDZWxsT25nb2luZyhjZWxsLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgZnJvbUV2ZW50PE1vdXNlRXZlbnQ+KGRvY3VtZW50LCAnbW91c2V1cCcpXG4gICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNlbGVjdENlbGxFbmQodGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlU3RvcmUuaXNDZWxsU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlU2VydmljZS5vcGVuVG9vbGJhcih0aGlzLnRhYmxlU3RvcmUuZm9jdXNDZWxsRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBtb3VzZW92ZXJPYnNlcnZhYmxlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyNyZWdpb24gcmVzaXphYmxlXG4gICAgcHJpdmF0ZSBsaXN0ZW5Gb3JDZWxsSG92ZXJFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCE7XG4gICAgICAgIHRoaXMuZXZlbnREaXNwYXRjaGVyXG4gICAgICAgICAgICAucmVzaXplT3ZlcmxheVZpc2libGVGb3JUYWJsZUNlbGwoZWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICBtYXAodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAvLyDnpoHmraLnrKzkuIDliJflt6bkvqdcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnBvc2l0aW9uID09PSBQb3NpdGlvbi5sZWZ0ICYmIHRoaXMudGFibGVQb3NpdGlvbi5nZXRDb2x1bW5JbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyDnpoHmraLnrKzkuIDooYzpobbpg6hcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnBvc2l0aW9uID09PSBQb3NpdGlvbi50b3AgJiYgdGhpcy50YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZShob3ZlcmVkQ2VsbEluZm8gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChob3ZlcmVkQ2VsbEluZm8gJiYgaG92ZXJlZENlbGxJbmZvLnBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJkRGlyZWN0aW9uID0gaG92ZXJlZENlbGxJbmZvLnBvc2l0aW9uO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaG92ZXJkRGlyZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhvdmVyZWRDZWxsSW5mbykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZERpcmVjdGlvbiA9IGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYgfHwgIXRoaXMub3ZlcmxheVJlZi5oYXNBdHRhY2hlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLl9jcmVhdGVPdmVybGF5Rm9ySGFuZGxlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zaG93SGFuZGxlT3ZlcmxheSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0RGlyZWN0aW9uKHRoaXMuaXNYQXhpc0hvdmVyID8gJ1gnIDogJ1knKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGxpc3RlbkZvclJlc2l6ZUV2ZW50cygpIHtcbiAgICAgICAgY29uc3QgdGFrZVVudGlsRGVzdHJveWVkID0gdGFrZVVudGlsPENvbHVtblNpemVBY3Rpb24+KHRoaXMuZGVzdHJveSQpO1xuXG4gICAgICAgIG1lcmdlKHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ2FuY2VsZWQsIHRoaXMucmVzaXplTm90aWZpZXIudHJpZ2dlclJlc2l6ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCxcbiAgICAgICAgICAgICAgICBmaWx0ZXIoY29sdW1uU2l6ZSA9PiBjb2x1bW5TaXplLnRhYmxlQ2VsbCA9PT0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IGRlbHRhU2l6ZSwgcHJldmlvdXNTaXplLCBjb21wbGV0ZUltbWVkaWF0ZWx5IH0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBjbGllbnRZLCBjbGllbnRYIH0gPSBldmVudCBhcyBNb3VzZUV2ZW50O1xuICAgICAgICAgICAgICAgIGxldCBpc1ByZXZlbnRBcHBseVNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAvLyDlkJHkuIvvvIzmiJbogIXlkJHlj7Pnp7vliqgoZGVsdGFTaXplID4gMCnvvIzpvKDmoIfkvY3nva7kuI3lnKjlvZPliY3ljZXlhYPmoLzmi5bmi73nur/kuIrvvIzpmLvmraLlupTnlKjmi5bmi73lsLrlr7hcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1hBeGlzSG92ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2VsbFdpZHRoID0gdGhpcy5ob3ZlcmREaXJlY3Rpb24gPT09IFBvc2l0aW9uLmxlZnQgPyAwIDogd2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmVudEFwcGx5U2l6ZSA9IGRlbHRhU2l6ZSA+IDAgJiYgbGVmdCArIGNlbGxXaWR0aCAtIGNsaWVudFggPiAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxIZWlnaHQgPSB0aGlzLmhvdmVyZERpcmVjdGlvbiA9PT0gUG9zaXRpb24udG9wID8gMCA6IGhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgaXNQcmV2ZW50QXBwbHlTaXplID0gZGVsdGFTaXplID4gMCAmJiB0b3AgKyBjZWxsSGVpZ2h0IC0gY2xpZW50WSA+IDA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1ByZXZlbnRBcHBseVNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCEuY2xhc3NMaXN0LmFkZChPVkVSTEFZX0FDVElWRV9DTEFTUyk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVNpemUoZGVsdGFTaXplLCBwcmV2aW91c1NpemUpO1xuICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZUltbWVkaWF0ZWx5KSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBsZXRlUmVzaXplT3BlcmF0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbWVyZ2UodGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDYW5jZWxlZCwgdGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDb21wbGV0ZWQpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGNvbHVtblNpemUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NsZWFuVXBBZnRlclJlc2l6ZShjb2x1bW5TaXplKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuY2xlYW5SZXNpemluZygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY29tcGxldGVSZXNpemVPcGVyYXRpb24oKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU5vdGlmaWVyLnJlc2l6ZUNvbXBsZXRlZC5uZXh0KHtcbiAgICAgICAgICAgICAgICB0YWJsZUNlbGw6IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2xlYW5VcEFmdGVyUmVzaXplKGNvbHVtblNpemU6IENvbHVtblNpemVBY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhLmNsYXNzTGlzdC5yZW1vdmUoT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZUhhbmRsZVBvcnRhbCgpOiBDb21wb25lbnRQb3J0YWw8VGhlQ29sdW1uUmVzaXplT3ZlcmxheUhhbmRsZUNvbXBvbmVudD4ge1xuICAgICAgICBjb25zdCBjdXN0b21Ub2tlbnMgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZiA9IG5ldyBSZXNpemVSZWYoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYsXG4gICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLFxuICAgICAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1heFdpZHRoUHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1heEhlaWdodFB4LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChSZXNpemVSZWYsIHRoaXMucmVzaXplUmVmKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChUYWJsZUNlbGxFdmVudERpc3BhdGNoZXIsIHRoaXMuZXZlbnREaXNwYXRjaGVyKTtcbiAgICAgICAgY3VzdG9tVG9rZW5zLnNldChDb2x1bW5SZXNpemVOb3RpZmllclNvdXJjZSwgdGhpcy5yZXNpemVOb3RpZmllcik7XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gbmV3IFBvcnRhbEluamVjdG9yKHRoaXMuaW5qZWN0b3IsIGN1c3RvbVRva2Vucyk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9uZW50UG9ydGFsKFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQsIHRoaXMudmlld0NvbnRhaW5lclJlZiwgaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Nob3dIYW5kbGVPdmVybGF5KCk6IHZvaWQge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmF0dGFjaCh0aGlzLl9jcmVhdGVIYW5kbGVQb3J0YWwoKSkuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVNpemVBbmRPZmZzZXQoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCkge1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LnJlbW92ZVBhbmVsQ2xhc3MoWyd0aGUtY29sdW1uLXJlc2l6ZS1oYW5kbGUtcGFuZWwnLCAuLi50aGlzLnJvd1Jlc2l6ZUNsYXNzXSk7XG4gICAgICAgIHRoaXMuaXNYQXhpc0hvdmVyID8gdGhpcy51cGRhdGVPdmVybGF5SGFuZGxlQ29sdW1uU2l6ZSgpIDogdGhpcy51cGRhdGVPdmVybGF5SGFuZGxlUm93U2l6ZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWY/LnVwZGF0ZVBvc2l0aW9uU3RyYXRlZ3kodGhpcy5jcmVhdGVQb3NpdGlvblN0cmF0ZWd5KCkpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZi5zZXREaXJlY3Rpb24odGhpcy5pc1hBeGlzSG92ZXIgPyAnWCcgOiAnWScpO1xuICAgICAgICB0aGlzLnJlc2l6ZVJlZi5zZXRQb3NpdGlvbih0aGlzLmhvdmVyZERpcmVjdGlvbik7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdmVybGF5SGFuZGxlQ29sdW1uU2l6ZSgpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlbWVudFRvcCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgaWYgKHRhYmxlRWxlbWVudFRvcCA8IHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3ApIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMudGFibGVFbGVtZW50Lm9mZnNldEhlaWdodCAtICh0aGlzLnNjcm9sbGFibGVFbGVtZW50VG9wIC0gdGFibGVFbGVtZW50VG9wKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhlaWdodCA9IHRoaXMudGFibGVFbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmFkZFBhbmVsQ2xhc3MoJ3RoZS1jb2x1bW4tcmVzaXplLWhhbmRsZS1wYW5lbCcpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLnVwZGF0ZVNpemUoeyBoZWlnaHQsIHdpZHRoOiBPVkVSTEFZX0lOSVRfU0laRSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZU92ZXJsYXlIYW5kbGVSb3dTaXplKCkge1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnQgPSB0aGlzLnRhYmxlQ29tcG9uZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHJvd0NvbnRyb2wgPSB0YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcignLnRoZS10YWJsZS1yb3ctY29udHJvbHMnKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgbGV0IHJvd0NvbnRyb2xXaWR0aCA9IDExO1xuICAgICAgICBpZiAocm93Q29udHJvbCkge1xuICAgICAgICAgICAgcm93Q29udHJvbFdpZHRoID0gcm93Q29udHJvbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMudGFibGVDb21wb25lbnQudGFibGVXcmFwcGVyLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggKyByb3dDb250cm9sV2lkdGggLSAyO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLmFkZFBhbmVsQ2xhc3ModGhpcy5yb3dSZXNpemVDbGFzcyk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiEudXBkYXRlU2l6ZSh7IHdpZHRoLCBoZWlnaHQ6IE9WRVJMQVlfSU5JVF9TSVpFIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlTaXplKGRlbHRhU2l6ZTogbnVtYmVyLCBwcmV2aW91c1NpemU/OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgLy8gdXBkYXRlIGNvbCB3aWR0aCBhbmQgdGFibGUgd2lkdGhcbiAgICAgICAgaWYgKHRoaXMuaXNYQXhpc0hvdmVyKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Q29sdW1uU2l6ZShkZWx0YVNpemUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hcHBseVJvd1NpemUoZGVsdGFTaXplKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50LnVzZVJvd0NvbnRyb2xzKCk7XG4gICAgICAgIHRoaXMudGFibGVDb21wb25lbnQuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY3JlYXRlT3ZlcmxheUZvckhhbmRsZSgpOiBPdmVybGF5UmVmIHtcbiAgICAgICAgLy8gVXNlIG9mIG92ZXJsYXlzIGFsbG93cyB1cyB0byBwcm9wZXJseSBjYXB0dXJlIGNsaWNrIGV2ZW50cyBzcGFubmluZyBwYXJ0c1xuICAgICAgICAvLyBvZiB0d28gdGFibGUgY2VsbHMgYW5kIGlzIGFsc28gdXNlZnVsIGZvciBkaXNwbGF5aW5nIGEgcmVzaXplIHRodW1iXG4gICAgICAgIC8vIG92ZXIgYm90aCBjZWxscyBhbmQgZXh0ZW5kaW5nIGl0IGRvd24gdGhlIHRhYmxlIGFzIG5lZWRlZC5cbiAgICAgICAgY29uc3Qgb3ZlcmxheU9wdGlvbiA9IHRoaXMuaXNYQXhpc0hvdmVyXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBPVkVSTEFZX0lOSVRfU0laRSArICdweCcsXG4gICAgICAgICAgICAgICAgICBwYW5lbENsYXNzOiAndGhlLWNvbHVtbi1yZXNpemUtaGFuZGxlLXBhbmVsJ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogT1ZFUkxBWV9JTklUX1NJWkUgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogdGhpcy5yb3dSZXNpemVDbGFzc1xuICAgICAgICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5vdmVybGF5LmNyZWF0ZSh7XG4gICAgICAgICAgICAvLyBBbHdheXMgcG9zaXRpb24gdGhlIG92ZXJsYXkgYmFzZWQgb24gbGVmdC1pbmRleGVkIGNvb3JkaW5hdGVzLlxuICAgICAgICAgICAgZGlzcG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpLFxuICAgICAgICAgICAgLi4ub3ZlcmxheU9wdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSB7XG4gICAgICAgIGxldCBvZmZzZXRZID0gdGhpcy5jYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WSgpO1xuICAgICAgICBsZXQgb2Zmc2V0WCA9IHRoaXMuY2FsY3VsYXRlT3ZlcmxheUhhbmRsZU9mZnNldFgoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uID0gdGhpcy5pc1hBeGlzSG92ZXJcbiAgICAgICAgICAgID8geyAuLi5QT1NJVElPTl9NQVBbdGhpcy5ob3ZlcmREaXJlY3Rpb25dLCBvZmZzZXRZIH1cbiAgICAgICAgICAgIDogeyAuLi5QT1NJVElPTl9NQVBbdGhpcy5ob3ZlcmREaXJlY3Rpb25dLCBvZmZzZXRYIH07XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW3Bvc2l0aW9uXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WSgpIHtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50VG9wID0gdGhpcy50YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBpZiAodGFibGVFbGVtZW50VG9wIDwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVFbGVtZW50VG9wIC0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WCgpIHtcbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnRMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50TGVmdCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUVsZW1lbnRMZWZ0IC0gY2VsbEVsZW1lbnRMZWZ0ICsgdGhpcy5zY3JvbGxhYmxlRWxlbWVudExlZnQ7XG4gICAgfVxuXG4gICAgYXBwbHlDb2x1bW5TaXplKGRlbHRhWDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcignY29sZ3JvdXAnKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlQ29sRWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZVdpZHRoKGNvbHMpO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuaW5pdERpcmVjdGlvbihkZWx0YVgpO1xuICAgICAgICBsZXQgY2VsbEluZGV4ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2VsbEluZGV4O1xuICAgICAgICBpZiAodGhpcy5ob3ZlcmREaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY2VsbEluZGV4ID0gY2VsbEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzcGFuID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAxO1xuICAgICAgICBjZWxsSW5kZXggPSBjZWxsSW5kZXggKyAoY29sc3BhbiBhcyBudW1iZXIpIC8gMSAtIDE7XG4gICAgICAgIGlmIChkZWx0YVggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmlnaHRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzdG9yaW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZUxlZnRDb2xzKGRlbHRhWCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGFYID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlKGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCkgKyBkZWx0YVgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbCA9IGNvbHNbY2VsbEluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAobmV4dENvbCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0RGVsdGFYID0gdGhpcy5yZXNpemluZ1N0b3JlLmdldFNjcm9sbFdpZHRoKGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX2RlbHRhID0gdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoX2RlbHRhID09PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCByZXNpemVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWx0YVggPSBkZWx0YVggLSBfZGVsdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdERlbHRhWCA9IHRoaXMucmVzaXppbmdTdG9yZS5yZXN0b3JlUmlnaHRDb2xzKGxlZnREZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMobGVmdERlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMoZGVsdGFYKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGdldEVsZW1lbnRXaWR0aCh0aGlzLnRhYmxlRWxlbWVudCkgLSB0aGlzLnRhYmxlQ29tcG9uZW50LmdldFdyYXBwZXJXaWR0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gTWF0aC5hYnMoZGVsdGFYKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlMZWZ0Q29scyhjb2xzLCAtc2Nyb2xsV2lkdGgsIGNlbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseUxlZnRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB3aGlsZSAoZGVsdGFYIDwgMCAmJiBjb2xzW2NvbEluZGV4XSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0RWxlbWVudFdpZHRoKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50V2lkdGggPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc2l6aW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlUmVzaXppbmdDb2woY29sc1tjb2xJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCArIE1hdGguYWJzKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIE1hdGguYWJzKGRlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCArPSBjdXJyZW50V2lkdGggLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4O1xuICAgICAgICAgICAgICAgICAgICBjb2xzW2NvbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFYO1xuICAgIH1cblxuICAgIGFwcGx5UmlnaHRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgd2hpbGUgKGRlbHRhWCA+IDAgJiYgY29sc1tjb2xJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2xzW2NvbEluZGV4XSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nQ29sKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IGRlbHRhWCArIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYIC09IGN1cnJlbnRXaWR0aCAtIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNbY29sSW5kZXhdLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVg7XG4gICAgfVxuXG4gICAgYXBwbHlSb3dTaXplKGRlbHRhWTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGJvZHknKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlUm93RWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZUhlaWdodChyb3dzKTtcbiAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLmluaXREaXJlY3Rpb24oZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3Zlcik7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucm93SW5kZXggLSAxOyAvLyBzdWJ0cmFjdCB0aGVhZCdzIHRyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZERpcmVjdGlvbiA9PT0gUG9zaXRpb24udG9wKSB7XG4gICAgICAgICAgICByb3dJbmRleCA9IHJvd0luZGV4IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dTcGFuID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50KS5yb3dTcGFuO1xuICAgICAgICBjb25zdCBib3R0b21Sb3dJbmRleCA9IHJvd0luZGV4ICsgKHJvd1NwYW4gLSAxKSArIDE7XG4gICAgICAgIGlmIChkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Qm90dG9tUm93cyhyb3dzLCBkZWx0YVksIGJvdHRvbVJvd0luZGV4KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXN0b3JpbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZVRvcFJvd3MoZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluaXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGluaXRIZWlnaHQgKyBkZWx0YVkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGFkZERlbHRhWSA9IHRoaXMucmVzaXppbmdTdG9yZS5nZXRBZGRUYWJsZUhlaWdodChkZWx0YVkpO1xuICAgICAgICAgICAgY29uc3QgX2RlbHRhID0gdGhpcy5hcHBseVRvcFJvd3Mocm93cywgZGVsdGFZLCByb3dJbmRleCk7XG4gICAgICAgICAgICBpZiAoX2RlbHRhID09PSBkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW4gbm90IHJlc2l6ZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbHRhWSA9IGRlbHRhWSAtIF9kZWx0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXN0b3JpbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkRGVsdGFZIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZUJvdHRvbVJvd3MoZGVsdGFZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVRvcFJvd3Mocm93czogSFRNTFRhYmxlUm93RWxlbWVudFtdLCBkZWx0YVk6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHdoaWxlIChkZWx0YVkgPCAwICYmIHJvd3Nbcm93SW5kZXhdKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPZmZzZXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVSZXNpemluZ1Jvdyhyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCArIE1hdGguYWJzKGRlbHRhWSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShyb3dPZmZzZXRIZWlnaHQgLSBNYXRoLmFicyhkZWx0YVkpKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgKz0gcm93T2Zmc2V0SGVpZ2h0IC0gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHg7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0luZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbHRhWTtcbiAgICB9XG5cbiAgICBhcHBseUJvdHRvbVJvd3Mocm93czogSFRNTFRhYmxlUm93RWxlbWVudFtdLCBkZWx0YVk6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHdoaWxlIChyb3dzW3Jvd0luZGV4XSAmJiBkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPZmZzZXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVSZXNpemluZ1Jvdyhyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiBkZWx0YVkgKyB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHJvd09mZnNldEhlaWdodCAtIGRlbHRhWSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZIC09IHJvd09mZnNldEhlaWdodCAtIHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4O1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY2VsbElubmVyPlxuICAgIDxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuPC9kaXY+XG4iXX0=
|
|
692
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3JjL3BsdWdpbnMvdGFibGUvY29tcG9uZW50cy90ZC90ZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zcmMvcGx1Z2lucy90YWJsZS9jb21wb25lbnRzL3RkL3RkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBTVQsV0FBVyxFQUtYLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBRXpFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDMUYsT0FBTyxFQUFFLFFBQVEsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSwwQkFBMEIsRUFBb0IsTUFBTSw2REFBNkQsQ0FBQztBQUUzSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3RILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQUM1RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx1QkFB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O29CQUNILE1BQU0sSUFBSSxlQUFlLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUM7b0JBQzFELElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7aUJBQ3BGO2FBQ0o7WUFDRCxRQUFRLEVBQUUsQ0FBQztTQUNkO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFNBQVM7SUFFVCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNqQixJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7OzRHQXpyQlEsY0FBYztnR0FBZCxjQUFjLGdOQUZaLENBQUMsbUJBQW1CLENBQUMsdUtDcEVwQyx1SkFHQTs0RkRtRWEsY0FBYztrQkFMMUIsU0FBUzsrQkFDSSxXQUFXLGFBRVYsQ0FBQyxtQkFBbUIsQ0FBQzsyVEEwRE0sZUFBZTtzQkFBcEQsV0FBVzt1QkFBQyx1QkFBdUI7Z0JBRVAsT0FBTztzQkFBbkMsV0FBVzt1QkFBQyxjQUFjO2dCQUVFLE9BQU87c0JBQW5DLFdBQVc7dUJBQUMsY0FBYztnQkFFRyxPQUFPO3NCQUFwQyxXQUFXO3VCQUFDLGVBQWU7Z0JBRzVCLFNBQVM7c0JBRFIsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgT25Jbml0LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25EZXN0cm95LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIE5nWm9uZSxcbiAgICBIb3N0QmluZGluZyxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIEluamVjdG9yLFxuICAgIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBFZGl0b3IgfSBmcm9tICdzbGF0ZSc7XG5pbXBvcnQgeyBFTEVNRU5UX1RPX0NPTVBPTkVOVCB9IGZyb20gJ3NsYXRlLWFuZ3VsYXInO1xuaW1wb3J0IHsgU0xBX1RBQkxFX0NFTExfU0VMRUNUT1IgfSBmcm9tICcuLi8uLi8uLi8uLi9jb25zdGFudHMvc2VsZWN0b3InO1xuaW1wb3J0IHsgVGhlVGFibGVDb21wb25lbnQgfSBmcm9tICcuLi90YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgVGFibGVQb3NpdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxzL3RhYmxlLXBvc2l0aW9uJztcbmltcG9ydCB7IGZyb21FdmVudCwgbWVyZ2UsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbHVtblJlc2l6aW5nU3RvcmUgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvcmVzaXppbmcuc3RvcmUnO1xuaW1wb3J0IHsgUG9zaXRpb24sIFRhYmxlQ2VsbEV2ZW50RGlzcGF0Y2hlciB9IGZyb20gJy4uLy4uLy4uLy4uL2NvbXBvbmVudHMvY29sdW1uLXJlc2l6ZS9ldmVudC1kaXNwYXRjaGVyJztcbmltcG9ydCB7IENvbHVtblJlc2l6ZU5vdGlmaWVyU291cmNlLCBDb2x1bW5TaXplQWN0aW9uIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL2NvbHVtbi1yZXNpemUtbm90aWZpZXInO1xuaW1wb3J0IHsgQ29ubmVjdGVkUG9zaXRpb24sIE92ZXJsYXksIE92ZXJsYXlSZWYsIFNjcm9sbERpc3BhdGNoZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBDb21wb25lbnRQb3J0YWwsIFBvcnRhbEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgeyBUaGVDb2x1bW5SZXNpemVPdmVybGF5SGFuZGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY29tcG9uZW50cy9jb2x1bW4tcmVzaXplL292ZXJsYXktaGFuZGxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSZXNpemVSZWYgfSBmcm9tICcuLi8uLi8uLi8uLi9jb21wb25lbnRzL2NvbHVtbi1yZXNpemUvcmVzaXplLXJlZic7XG5pbXBvcnQgeyBjb2VyY2VDc3NQaXhlbFZhbHVlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7IGNvZXJjZVBpeGVsc0Zyb21Dc3NWYWx1ZSwgZ2V0RWxlbWVudEhlaWdodCwgZ2V0RWxlbWVudFdpZHRoLCB1c2VFbGVtZW50U3R5bGUgfSBmcm9tICcuLi8uLi8uLi8uLi91dGlscy9kb20nO1xuaW1wb3J0IHsgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL3ZpZXctYmFzZSc7XG5pbXBvcnQgeyBCQVNFX0ZJTExfSEVJR0hULCBUYWJsZU9wdGlvbnMgfSBmcm9tICcuLi8uLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBUaGVFZGl0b3IgfSBmcm9tICcuLi8uLi8uLi8uLi9pbnRlcmZhY2VzL2VkaXRvcic7XG5pbXBvcnQgeyBUYWJsZUNlbGxFbGVtZW50IH0gZnJvbSAnLi4vLi4vLi4vLi4vY3VzdG9tLXR5cGVzJztcbmltcG9ydCB7IGdldEJhc2VIZWlnaHRGb3JSb3dzIH0gZnJvbSAnLi4vLi4vdXRpbHMvZ2V0LWJhc2UtaGVpZ2h0JztcblxuY29uc3QgT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MgPSAndGhlLXJlc2l6YWJsZS1vdmVybGF5LXRodW1iLWFjdGl2ZSc7XG5jb25zdCBPVkVSTEFZX0lOSVRfU0laRSA9IDE2O1xuZXhwb3J0IGNvbnN0IFBPU0lUSU9OX01BUDogeyBba2V5OiBzdHJpbmddOiBDb25uZWN0ZWRQb3NpdGlvbiB9ID0ge1xuICAgIHRvcDoge1xuICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICBvcmlnaW5ZOiAndG9wJyxcbiAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgIG92ZXJsYXlZOiAnY2VudGVyJ1xuICAgIH0sXG4gICAgYm90dG9tOiB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICdib3R0b20nLFxuICAgICAgICBvdmVybGF5WDogJ3N0YXJ0JyxcbiAgICAgICAgb3ZlcmxheVk6ICdjZW50ZXInXG4gICAgfSxcbiAgICByaWdodDoge1xuICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgb3JpZ2luWTogJ3RvcCcsXG4gICAgICAgIG92ZXJsYXlYOiAnY2VudGVyJyxcbiAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgfSxcbiAgICBsZWZ0OiB7XG4gICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICBvdmVybGF5WDogJ2NlbnRlcicsXG4gICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAndGRbdGhlVGRdJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW0NvbHVtblJlc2l6aW5nU3RvcmVdXG59KVxuZXhwb3J0IGNsYXNzIFRoZVRkQ29tcG9uZW50IGV4dGVuZHMgVGhlQmFzZUVsZW1lbnRDb21wb25lbnQ8VGFibGVDZWxsRWxlbWVudCwgRWRpdG9yPiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBkZXN0cm95JDogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcbiAgICBwdWJsaWMgdGFibGVQb3NpdGlvbjogVGFibGVQb3NpdGlvbjtcbiAgICBwdWJsaWMgdGFibGVDb21wb25lbnQ6IFRoZVRhYmxlQ29tcG9uZW50O1xuICAgIHByb3RlY3RlZCBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcbiAgICBwdWJsaWMgaG92ZXJkRGlyZWN0aW9uOiBQb3NpdGlvbiB8IG51bGw7XG4gICAgcHVibGljIHRhYmxlT3B0aW9uczogVGFibGVPcHRpb25zID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgIHB1YmxpYyBjZWxsSW5uZXJNaW5IZWlnaHQ6IG51bWJlciA9IG51bGw7XG5cbiAgICBnZXQgdGFibGVTdG9yZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQudGFibGVTdG9yZTtcbiAgICB9XG5cbiAgICBnZXQgdGFibGVTZXJ2aWNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2U7XG4gICAgfVxuXG4gICAgZ2V0IGV2ZW50RGlzcGF0Y2hlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQuZXZlbnREaXNwYXRjaGVyO1xuICAgIH1cblxuICAgIGdldCByZXNpemVOb3RpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVDb21wb25lbnQucmVzaXplTm90aWZpZXI7XG4gICAgfVxuXG4gICAgZ2V0IHRhYmxlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29tcG9uZW50LnRoZVRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIGdldCBzY3JvbGxhYmxlRWxlbWVudFRvcCgpIHtcbiAgICAgICAgY29uc3QgY2Rrc2Nyb2xsYWJsZTogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5jbG9zZXN0KCdbY2Rrc2Nyb2xsYWJsZV0nKTtcbiAgICAgICAgaWYgKGNka3Njcm9sbGFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjZGtzY3JvbGxhYmxlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gLXdpbmRvdy5zY3JvbGxZO1xuICAgIH1cblxuICAgIGdldCBzY3JvbGxhYmxlRWxlbWVudExlZnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlV3JhcHBlci5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgfVxuXG4gICAgZ2V0IGlzWEF4aXNIb3ZlcigpIHtcbiAgICAgICAgcmV0dXJuIFtQb3NpdGlvbi5sZWZ0LCBQb3NpdGlvbi5yaWdodF0uaW5jbHVkZXModGhpcy5ob3ZlcmREaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIGdldCByb3dSZXNpemVDbGFzcygpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICd0aGUtcm93LXJlc2l6ZS1oYW5kbGUtcGFuZWwnLFxuICAgICAgICAgICAgdGhpcy50YWJsZVBvc2l0aW9uLnRhYmxlICYmIHRoaXMudGFibGVQb3NpdGlvbi50YWJsZS5vcHRpb25zPy5udW1iZXJlZENvbHVtbiA/ICd0aGUtbnVtYmVyZWQtcmVzaXplLWhhbmRsZS1wYW5lbCcgOiAnJ1xuICAgICAgICBdO1xuICAgIH1cblxuICAgIHB1YmxpYyBkb3RXcmFwcGVySG92ZXJlZDogYm9vbGVhbjtcblxuICAgIHB1YmxpYyByZXNpemVSZWY6IFJlc2l6ZVJlZjtcblxuICAgIEBIb3N0QmluZGluZygnc3R5bGUuYmFja2dyb3VuZENvbG9yJykgYmFja2dyb3VuZENvbG9yOiBzdHJpbmc7XG5cbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuY29sc3BhbicpIGNvbHNwYW46IG51bWJlcjtcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5yb3dzcGFuJykgcm93c3BhbjogbnVtYmVyO1xuXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5kaXNwbGF5JykgZGlzcGxheTogc3RyaW5nO1xuXG4gICAgQFZpZXdDaGlsZCgnY2VsbElubmVyJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBjZWxsSW5uZXI6IEVsZW1lbnRSZWY7XG5cbiAgICBnZXQgY2VsbElubmVyTmF0aXZlRWxlbWVudCgpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIHJldHVybiB0aGlzLmNlbGxJbm5lci5uYXRpdmVFbGVtZW50O1xuICAgIH1cblxuICAgIG9uQ29udGV4dENoYW5nZSgpIHtcbiAgICAgICAgc3VwZXIub25Db250ZXh0Q2hhbmdlKCk7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICB0aGlzLnVzZVN0YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHB1YmxpYyBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcbiAgICAgICAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgcHVibGljIG92ZXJsYXk6IE92ZXJsYXksXG4gICAgICAgIHB1YmxpYyByZXNpemluZ1N0b3JlOiBDb2x1bW5SZXNpemluZ1N0b3JlLFxuICAgICAgICBwdWJsaWMgc2Nyb2xsRGlzcGF0Y2hlcjogU2Nyb2xsRGlzcGF0Y2hlclxuICAgICkge1xuICAgICAgICBzdXBlcihlbGVtZW50UmVmLCBjZHIpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuICAgICAgICB0aGlzLnVzZUJhY2tncm91bmQoKTtcbiAgICAgICAgdGhpcy51c2VTcGFuKCk7XG4gICAgICAgIHRoaXMudXNlRGlzcGxheSgpO1xuICAgICAgICB0aGlzLnVzZUZvY3VzKCk7XG4gICAgICAgIHVzZUVsZW1lbnRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgICAgIHRoaXMubmdab25lLm9uU3RhYmxlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudXNlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgdGhpcy5nZXRJbmplY3Rpb25TZXJ2aWNlKCk7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZVNlbGVjdGVkQ2VsbHNDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlRGFuZ2Vyb3VzQ2VsbHNDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVGFibGVDaGFuZ2UoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuQ2VsbFNlbGVjdEV2ZW50cygpO1xuICAgICAgICAgICAgdGhpcy5saXN0ZW5Gb3JDZWxsSG92ZXJFdmVudHMoKTtcbiAgICAgICAgICAgIHRoaXMubGlzdGVuRm9yUmVzaXplRXZlbnRzKCk7XG4gICAgICAgICAgICAvLyBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbGN1bGF0ZUNlbGxJbm5lck1pbkhlaWdodCgpO1xuICAgICAgICAgICAgLy8gdGhpcy51c2VNaW5IZWlnaHQoaGVpZ2h0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SW5qZWN0aW9uU2VydmljZSgpIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudCA9IEVMRU1FTlRfVE9fQ09NUE9ORU5ULmdldCh0aGlzLnRhYmxlUG9zaXRpb24udGFibGUpIGFzIFRoZVRhYmxlQ29tcG9uZW50O1xuICAgIH1cblxuICAgIHN1YnNjcmliZVNlbGVjdGVkQ2VsbHNDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLnNlbGVjdGVkQ2VsbHNDaGFuZ2UoKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh4ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoeC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ3NlbGVjdGVkLWNlbGwnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkQ2VsbCA9IHguc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICh7IHJvdywgY29sIH0pID0+IHJvdyA9PT0gdGhpcy50YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCkgJiYgY29sID09PSB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdzZWxlY3RlZC1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnc2VsZWN0ZWQtY2VsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN1YnNjcmliZURhbmdlcm91c0NlbGxzQ2hhbmdlKCkge1xuICAgICAgICB0aGlzLnRhYmxlU3RvcmVcbiAgICAgICAgICAgIC5kYW5nZXJvdXNDZWxsc0NoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHggPT4ge1xuICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGFuZ2Vyb3VzLWNlbGwnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc1NlbGVjdGVkQ2VsbCA9IHguc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICh7IHJvdywgY29sIH0pID0+IHJvdyA9PT0gdGhpcy50YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCkgJiYgY29sID09PSB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNTZWxlY3RlZENlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdkYW5nZXJvdXMtY2VsbCcpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2Rhbmdlcm91cy1jZWxsJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlVGFibGVDaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMudGFibGVTdG9yZVxuICAgICAgICAgICAgLnRhYmxlQ2hhbmdlKClcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlVGFibGVQb3NpdGlvbigpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FsY3VsYXRlQ2VsbElubmVyTWluSGVpZ2h0KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy51c2VNaW5IZWlnaHQoaGVpZ2h0KTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHVzZVN0YXRlKCkge1xuICAgICAgICB0aGlzLnVzZUJhY2tncm91bmQoKTtcbiAgICAgICAgdGhpcy51c2VTcGFuKCk7XG4gICAgICAgIHRoaXMudXNlRGlzcGxheSgpO1xuICAgICAgICB0aGlzLnVzZUZvY3VzKCk7XG4gICAgICAgIHVzZUVsZW1lbnRTdHlsZSh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgdGhpcy5lbGVtZW50KTtcbiAgICB9XG5cbiAgICB1c2VUYWJsZVBvc2l0aW9uKCkge1xuICAgICAgICBjb25zdCBvcHRzID0gbmV3IFRhYmxlT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBwYXRoID0gVGhlRWRpdG9yLmZpbmRQYXRoKHRoaXMuZWRpdG9yLCB0aGlzLmVsZW1lbnQpO1xuICAgICAgICAvLyBtdXN0IGJlIHBhdGggb2YgY2VsbCdzIGNoaWxkcmVuXG4gICAgICAgIHRoaXMudGFibGVQb3NpdGlvbiA9IFRhYmxlUG9zaXRpb24uY3JlYXRlKG9wdHMsIHRoaXMuZWRpdG9yLCBwYXRoLmNvbmNhdCgwKSk7XG4gICAgfVxuXG4gICAgdXNlQmFja2dyb3VuZCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5iYWNrZ3JvdW5kQ29sb3IgIT09IHRoaXMuYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICAgICAgICB0aGlzLmJhY2tncm91bmRDb2xvciA9IHRoaXMuZWxlbWVudC5iYWNrZ3JvdW5kQ29sb3IgYXMgc3RyaW5nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdXNlU3BhbigpIHtcbiAgICAgICAgdGhpcy5jb2xzcGFuID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJvd3NwYW4gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmVsZW1lbnQuY29sc3Bhbikge1xuICAgICAgICAgICAgdGhpcy5jb2xzcGFuID0gdGhpcy5lbGVtZW50LmNvbHNwYW47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5yb3dzcGFuKSB7XG4gICAgICAgICAgICB0aGlzLnJvd3NwYW4gPSB0aGlzLmVsZW1lbnQucm93c3BhbjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNhbGN1bGF0ZUNlbGxJbm5lck1pbkhlaWdodCgpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5jb2xzcGFuKSB7XG4gICAgICAgICAgICBjb25zdCByb3dJbmRleCA9IHRoaXMudGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuY2FsY3VsYXRlQ29tYmluZWRSb3dzKCkubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlaWdodHMgPSBnZXRCYXNlSGVpZ2h0Rm9yUm93cyh0aGlzLmVkaXRvciwgdGhpcy50YWJsZUNvbXBvbmVudC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmRleCA9IHJvd0luZGV4OyBpbmRleCA8IHRoaXMuZWxlbWVudC5yb3dzcGFuICsgcm93SW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0ICs9IGhlaWdodHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoZWlnaHQgPSBoZWlnaHQgLSBCQVNFX0ZJTExfSEVJR0hUO1xuICAgICAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjYWxjdWxhdGVDb21iaW5lZFJvd3MoKSB7XG4gICAgICAgIGNvbnN0IHJvd0luZGV4ID0gdGhpcy50YWJsZVBvc2l0aW9uLmdldFJvd0luZGV4KCk7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkUm93czogbnVtYmVyW10gPSBbXTtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlUG9zaXRpb24udGFibGU7XG4gICAgICAgIHRhYmxlLmNoaWxkcmVuLmZvckVhY2goKHJvdywgX3Jvd0luZGV4KSA9PiB7XG4gICAgICAgICAgICBpZiAoX3Jvd0luZGV4ID4gcm93SW5kZXggJiYgX3Jvd0luZGV4IDw9IHJvd0luZGV4ICsgdGhpcy5lbGVtZW50LnJvd3NwYW4pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NvbWJpbmVkID0gcm93LmNoaWxkcmVuLmV2ZXJ5KGNlbGwgPT4gY2VsbC5oaWRkZW4gfHwgY2VsbC5yb3dzcGFuID4gMSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tYmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tYmluZWRSb3dzLnB1c2goX3Jvd0luZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29tYmluZWRSb3dzO1xuICAgIH1cblxuICAgIHVzZURpc3BsYXkoKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheSA9IHRoaXMuZWxlbWVudC5oaWRkZW4gPyAnbm9uZScgOiAnJztcbiAgICB9XG5cbiAgICB1c2VGb2N1cygpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdmb2N1c2VkLWNlbGwnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVzZU1pbkhlaWdodChtaW5IZWlnaHQ6IG51bWJlcikge1xuICAgICAgICBpZiAodGhpcy5jZWxsSW5uZXJNaW5IZWlnaHQgPT09IG1pbkhlaWdodCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2VsbElubmVyTWluSGVpZ2h0ID0gbWluSGVpZ2h0O1xuICAgICAgICAvLyBpZiAodGhpcy5jZWxsSW5uZXJNaW5IZWlnaHQpIHtcbiAgICAgICAgLy8gICAgIHRoaXMuY2VsbElubmVyTmF0aXZlRWxlbWVudC5zdHlsZS5taW5IZWlnaHQgPSBgJHt0aGlzLmNlbGxJbm5lck1pbkhlaWdodH1weGA7XG4gICAgICAgIC8vIH0gZWxzZSB7XG4gICAgICAgIC8vICAgICB0aGlzLmNlbGxJbm5lck5hdGl2ZUVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoJ21pbi1oZWlnaHQnKTtcbiAgICAgICAgLy8gfVxuICAgIH1cblxuICAgIC8vI3JlZ2lvbiBjZWxsLXNlbGVjdFxuICAgIGxpc3RlbkNlbGxTZWxlY3RFdmVudHMoKSB7XG4gICAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCE7XG4gICAgICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZWxlbWVudCwgJ21vdXNlZG93bicpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyKChlOiBNb3VzZUV2ZW50KSA9PiBlLmJ1dHRvbiAhPT0gMiksXG4gICAgICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuY2xvc2VzdChTTEFfVEFCTEVfQ0VMTF9TRUxFQ1RPUik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2VsbDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcihjZWxsID0+ICEhY2VsbClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZVN0b3JlLnNlbGVjdENlbGxTdGFydChjZWxsLCB0aGlzLmVkaXRvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXRhY2goKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxpc3RlbkNlbGxNb3VzZUV2ZW50cygpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBsaXN0ZW5DZWxsTW91c2VFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IG1vdXNlb3Zlck9ic2VydmFibGUgPSBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZW92ZXInKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpLFxuICAgICAgICAgICAgICAgIG1hcChldmVudCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGwgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5jbG9zZXN0KFNMQV9UQUJMRV9DRUxMX1NFTEVDVE9SKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNlbGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgZmlsdGVyKChjZWxsOiBIVE1MVGFibGVDZWxsRWxlbWVudCkgPT4gISFjZWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoY2VsbDogSFRNTFRhYmxlQ2VsbEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlU3RvcmUuc2VsZWN0Q2VsbE9uZ29pbmcoY2VsbCwgdGhpcy5lZGl0b3IpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNldXAnKVxuICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudGFibGVTdG9yZS5zZWxlY3RDZWxsRW5kKHRoaXMuZWRpdG9yKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy50YWJsZVN0b3JlLmlzQ2VsbFNlbGVjdGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC50YWJsZVNlcnZpY2Uub3BlblRvb2xiYXIodGhpcy50YWJsZVN0b3JlLmZvY3VzQ2VsbEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbW91c2VvdmVyT2JzZXJ2YWJsZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uIHJlc2l6YWJsZVxuICAgIHByaXZhdGUgbGlzdGVuRm9yQ2VsbEhvdmVyRXZlbnRzKCkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhO1xuICAgICAgICB0aGlzLmV2ZW50RGlzcGF0Y2hlclxuICAgICAgICAgICAgLnJlc2l6ZU92ZXJsYXlWaXNpYmxlRm9yVGFibGVDZWxsKGVsZW1lbnQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCksXG4gICAgICAgICAgICAgICAgbWFwKHZhbHVlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i56ys5LiA5YiX5bem5L6nXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wb3NpdGlvbiA9PT0gUG9zaXRpb24ubGVmdCAmJiB0aGlzLnRhYmxlUG9zaXRpb24uZ2V0Q29sdW1uSW5kZXgoKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8g56aB5q2i56ys5LiA6KGM6aG26YOoXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5wb3NpdGlvbiA9PT0gUG9zaXRpb24udG9wICYmIHRoaXMudGFibGVQb3NpdGlvbi5nZXRSb3dJbmRleCgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoaG92ZXJlZENlbGxJbmZvID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaG92ZXJlZENlbGxJbmZvICYmIGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZERpcmVjdGlvbiA9IGhvdmVyZWRDZWxsSW5mby5wb3NpdGlvbjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhvdmVyZERpcmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChob3ZlcmVkQ2VsbEluZm8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ob3ZlcmREaXJlY3Rpb24gPSBob3ZlcmVkQ2VsbEluZm8ucG9zaXRpb247XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5vdmVybGF5UmVmIHx8ICF0aGlzLm92ZXJsYXlSZWYuaGFzQXR0YWNoZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5fY3JlYXRlT3ZlcmxheUZvckhhbmRsZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2hvd0hhbmRsZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXplUmVmLnNldERpcmVjdGlvbih0aGlzLmlzWEF4aXNIb3ZlciA/ICdYJyA6ICdZJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuZGV0YWNoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsaXN0ZW5Gb3JSZXNpemVFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHRha2VVbnRpbERlc3Ryb3llZCA9IHRha2VVbnRpbDxDb2x1bW5TaXplQWN0aW9uPih0aGlzLmRlc3Ryb3kkKTtcblxuICAgICAgICBtZXJnZSh0aGlzLnJlc2l6ZU5vdGlmaWVyLnJlc2l6ZUNhbmNlbGVkLCB0aGlzLnJlc2l6ZU5vdGlmaWVyLnRyaWdnZXJSZXNpemUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQsXG4gICAgICAgICAgICAgICAgZmlsdGVyKGNvbHVtblNpemUgPT4gY29sdW1uU2l6ZS50YWJsZUNlbGwgPT09IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBkZWx0YVNpemUsIHByZXZpb3VzU2l6ZSwgY29tcGxldGVJbW1lZGlhdGVseSB9KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyB0b3AsIGxlZnQsIGhlaWdodCwgd2lkdGggfSA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xpZW50WSwgY2xpZW50WCB9ID0gZXZlbnQgYXMgTW91c2VFdmVudDtcbiAgICAgICAgICAgICAgICBsZXQgaXNQcmV2ZW50QXBwbHlTaXplID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgLy8g5ZCR5LiL77yM5oiW6ICF5ZCR5Y+z56e75YqoKGRlbHRhU2l6ZSA+IDAp77yM6byg5qCH5L2N572u5LiN5Zyo5b2T5YmN5Y2V5YWD5qC85ouW5ou957q/5LiK77yM6Zi75q2i5bqU55So5ouW5ou95bC65a+4XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNYQXhpc0hvdmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNlbGxXaWR0aCA9IHRoaXMuaG92ZXJkRGlyZWN0aW9uID09PSBQb3NpdGlvbi5sZWZ0ID8gMCA6IHdpZHRoO1xuICAgICAgICAgICAgICAgICAgICBpc1ByZXZlbnRBcHBseVNpemUgPSBkZWx0YVNpemUgPiAwICYmIGxlZnQgKyBjZWxsV2lkdGggLSBjbGllbnRYID4gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gdGhpcy5ob3ZlcmREaXJlY3Rpb24gPT09IFBvc2l0aW9uLnRvcCA/IDAgOiBoZWlnaHQ7XG4gICAgICAgICAgICAgICAgICAgIGlzUHJldmVudEFwcGx5U2l6ZSA9IGRlbHRhU2l6ZSA+IDAgJiYgdG9wICsgY2VsbEhlaWdodCAtIGNsaWVudFkgPiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXNQcmV2ZW50QXBwbHlTaXplKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQhLmNsYXNzTGlzdC5hZGQoT1ZFUkxBWV9BQ1RJVkVfQ0xBU1MpO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlTaXplKGRlbHRhU2l6ZSwgcHJldmlvdXNTaXplKTtcbiAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVJbW1lZGlhdGVseSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jb21wbGV0ZVJlc2l6ZU9wZXJhdGlvbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIG1lcmdlKHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ2FuY2VsZWQsIHRoaXMucmVzaXplTm90aWZpZXIucmVzaXplQ29tcGxldGVkKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKVxuICAgICAgICAgICAgLnN1YnNjcmliZShjb2x1bW5TaXplID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jbGVhblVwQWZ0ZXJSZXNpemUoY29sdW1uU2l6ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLmNsZWFuUmVzaXppbmcoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NvbXBsZXRlUmVzaXplT3BlcmF0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5yZXNpemVOb3RpZmllci5yZXNpemVDb21wbGV0ZWQubmV4dCh7XG4gICAgICAgICAgICAgICAgdGFibGVDZWxsOiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NsZWFuVXBBZnRlclJlc2l6ZShjb2x1bW5TaXplOiBDb2x1bW5TaXplQWN0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IS5jbGFzc0xpc3QucmVtb3ZlKE9WRVJMQVlfQUNUSVZFX0NMQVNTKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVIYW5kbGVQb3J0YWwoKTogQ29tcG9uZW50UG9ydGFsPFRoZUNvbHVtblJlc2l6ZU92ZXJsYXlIYW5kbGVDb21wb25lbnQ+IHtcbiAgICAgICAgY29uc3QgY3VzdG9tVG9rZW5zID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYgPSBuZXcgUmVzaXplUmVmKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50UmVmLFxuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmISxcbiAgICAgICAgICAgIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5tYXhXaWR0aFB4LFxuICAgICAgICAgICAgdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgsXG4gICAgICAgICAgICB0aGlzLnRhYmxlT3B0aW9ucy5tYXhIZWlnaHRQeCxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoUmVzaXplUmVmLCB0aGlzLnJlc2l6ZVJlZik7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoVGFibGVDZWxsRXZlbnREaXNwYXRjaGVyLCB0aGlzLmV2ZW50RGlzcGF0Y2hlcik7XG4gICAgICAgIGN1c3RvbVRva2Vucy5zZXQoQ29sdW1uUmVzaXplTm90aWZpZXJTb3VyY2UsIHRoaXMucmVzaXplTm90aWZpZXIpO1xuICAgICAgICBjb25zdCBpbmplY3RvciA9IG5ldyBQb3J0YWxJbmplY3Rvcih0aGlzLmluamVjdG9yLCBjdXN0b21Ub2tlbnMpO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBvbmVudFBvcnRhbChUaGVDb2x1bW5SZXNpemVPdmVybGF5SGFuZGxlQ29tcG9uZW50LCB0aGlzLnZpZXdDb250YWluZXJSZWYsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9zaG93SGFuZGxlT3ZlcmxheSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5hdHRhY2godGhpcy5fY3JlYXRlSGFuZGxlUG9ydGFsKCkpLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlIYW5kbGVTaXplQW5kT2Zmc2V0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdmVybGF5SGFuZGxlU2l6ZUFuZE9mZnNldCgpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy5yZW1vdmVQYW5lbENsYXNzKFsndGhlLWNvbHVtbi1yZXNpemUtaGFuZGxlLXBhbmVsJywgLi4udGhpcy5yb3dSZXNpemVDbGFzc10pO1xuICAgICAgICB0aGlzLmlzWEF4aXNIb3ZlciA/IHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZUNvbHVtblNpemUoKSA6IHRoaXMudXBkYXRlT3ZlcmxheUhhbmRsZVJvd1NpemUoKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmPy51cGRhdGVQb3NpdGlvblN0cmF0ZWd5KHRoaXMuY3JlYXRlUG9zaXRpb25TdHJhdGVneSgpKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0RGlyZWN0aW9uKHRoaXMuaXNYQXhpc0hvdmVyID8gJ1gnIDogJ1knKTtcbiAgICAgICAgdGhpcy5yZXNpemVSZWYuc2V0UG9zaXRpb24odGhpcy5ob3ZlcmREaXJlY3Rpb24pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlT3ZlcmxheUhhbmRsZUNvbHVtblNpemUoKSB7XG4gICAgICAgIGxldCBoZWlnaHQgPSAwO1xuICAgICAgICBjb25zdCB0YWJsZUVsZW1lbnRUb3AgPSB0aGlzLnRhYmxlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIGlmICh0YWJsZUVsZW1lbnRUb3AgPCB0aGlzLnNjcm9sbGFibGVFbGVtZW50VG9wKSB7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnRhYmxlRWxlbWVudC5vZmZzZXRIZWlnaHQgLSAodGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCAtIHRhYmxlRWxlbWVudFRvcCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoZWlnaHQgPSB0aGlzLnRhYmxlRWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5hZGRQYW5lbENsYXNzKCd0aGUtY29sdW1uLXJlc2l6ZS1oYW5kbGUtcGFuZWwnKTtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS51cGRhdGVTaXplKHsgaGVpZ2h0LCB3aWR0aDogT1ZFUkxBWV9JTklUX1NJWkUgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVPdmVybGF5SGFuZGxlUm93U2l6ZSgpIHtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50ID0gdGhpcy50YWJsZUNvbXBvbmVudC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCByb3dDb250cm9sID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aGUtdGFibGUtcm93LWNvbnRyb2xzJykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGxldCByb3dDb250cm9sV2lkdGggPSAxMTtcbiAgICAgICAgaWYgKHJvd0NvbnRyb2wpIHtcbiAgICAgICAgICAgIHJvd0NvbnRyb2xXaWR0aCA9IHJvd0NvbnRyb2wuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLnRhYmxlQ29tcG9uZW50LnRhYmxlV3JhcHBlci5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoICsgcm93Q29udHJvbFdpZHRoIC0gMjtcbiAgICAgICAgdGhpcy5vdmVybGF5UmVmIS5hZGRQYW5lbENsYXNzKHRoaXMucm93UmVzaXplQ2xhc3MpO1xuICAgICAgICB0aGlzLm92ZXJsYXlSZWYhLnVwZGF0ZVNpemUoeyB3aWR0aCwgaGVpZ2h0OiBPVkVSTEFZX0lOSVRfU0laRSB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFwcGx5U2l6ZShkZWx0YVNpemU6IG51bWJlciwgcHJldmlvdXNTaXplPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIHVwZGF0ZSBjb2wgd2lkdGggYW5kIHRhYmxlIHdpZHRoXG4gICAgICAgIGlmICh0aGlzLmlzWEF4aXNIb3Zlcikge1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbHVtblNpemUoZGVsdGFTaXplKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlSb3dTaXplKGRlbHRhU2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50YWJsZUNvbXBvbmVudC51c2VSb3dDb250cm9scygpO1xuICAgICAgICB0aGlzLnRhYmxlQ29tcG9uZW50LmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5SGFuZGxlU2l6ZUFuZE9mZnNldCgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZU92ZXJsYXlGb3JIYW5kbGUoKTogT3ZlcmxheVJlZiB7XG4gICAgICAgIC8vIFVzZSBvZiBvdmVybGF5cyBhbGxvd3MgdXMgdG8gcHJvcGVybHkgY2FwdHVyZSBjbGljayBldmVudHMgc3Bhbm5pbmcgcGFydHNcbiAgICAgICAgLy8gb2YgdHdvIHRhYmxlIGNlbGxzIGFuZCBpcyBhbHNvIHVzZWZ1bCBmb3IgZGlzcGxheWluZyBhIHJlc2l6ZSB0aHVtYlxuICAgICAgICAvLyBvdmVyIGJvdGggY2VsbHMgYW5kIGV4dGVuZGluZyBpdCBkb3duIHRoZSB0YWJsZSBhcyBuZWVkZWQuXG4gICAgICAgIGNvbnN0IG92ZXJsYXlPcHRpb24gPSB0aGlzLmlzWEF4aXNIb3ZlclxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICB3aWR0aDogT1ZFUkxBWV9JTklUX1NJWkUgKyAncHgnLFxuICAgICAgICAgICAgICAgICAgcGFuZWxDbGFzczogJ3RoZS1jb2x1bW4tcmVzaXplLWhhbmRsZS1wYW5lbCdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICBoZWlnaHQ6IE9WRVJMQVlfSU5JVF9TSVpFICsgJ3B4JyxcbiAgICAgICAgICAgICAgICAgIHBhbmVsQ2xhc3M6IHRoaXMucm93UmVzaXplQ2xhc3NcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMub3ZlcmxheS5jcmVhdGUoe1xuICAgICAgICAgICAgLy8gQWx3YXlzIHBvc2l0aW9uIHRoZSBvdmVybGF5IGJhc2VkIG9uIGxlZnQtaW5kZXhlZCBjb29yZGluYXRlcy5cbiAgICAgICAgICAgIGRpc3Bvc2VPbk5hdmlnYXRpb246IHRydWUsXG4gICAgICAgICAgICBwb3NpdGlvblN0cmF0ZWd5OiB0aGlzLmNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgICAgIHNjcm9sbFN0cmF0ZWd5OiB0aGlzLm92ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5jbG9zZSgpLFxuICAgICAgICAgICAgLi4ub3ZlcmxheU9wdGlvblxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVBvc2l0aW9uU3RyYXRlZ3koKSB7XG4gICAgICAgIGxldCBvZmZzZXRZID0gdGhpcy5jYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WSgpO1xuICAgICAgICBsZXQgb2Zmc2V0WCA9IHRoaXMuY2FsY3VsYXRlT3ZlcmxheUhhbmRsZU9mZnNldFgoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb246IENvbm5lY3RlZFBvc2l0aW9uID0gdGhpcy5pc1hBeGlzSG92ZXJcbiAgICAgICAgICAgID8geyAuLi5QT1NJVElPTl9NQVBbdGhpcy5ob3ZlcmREaXJlY3Rpb25dLCBvZmZzZXRZIH1cbiAgICAgICAgICAgIDogeyAuLi5QT1NJVElPTl9NQVBbdGhpcy5ob3ZlcmREaXJlY3Rpb25dLCBvZmZzZXRYIH07XG4gICAgICAgIHJldHVybiB0aGlzLm92ZXJsYXlcbiAgICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC53aXRoRmxleGlibGVEaW1lbnNpb25zKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhHcm93QWZ0ZXJPcGVuKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQdXNoKGZhbHNlKVxuICAgICAgICAgICAgLndpdGhQb3NpdGlvbnMoW3Bvc2l0aW9uXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WSgpIHtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50VG9wID0gdGhpcy50YWJsZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICBpZiAodGFibGVFbGVtZW50VG9wIDwgdGhpcy5zY3JvbGxhYmxlRWxlbWVudFRvcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2Nyb2xsYWJsZUVsZW1lbnRUb3AgLSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3A7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGFibGVFbGVtZW50VG9wIC0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVPdmVybGF5SGFuZGxlT2Zmc2V0WCgpIHtcbiAgICAgICAgY29uc3QgY2VsbEVsZW1lbnRMZWZ0ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgY29uc3QgdGFibGVFbGVtZW50TGVmdCA9IHRoaXMudGFibGVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgICAgIHJldHVybiB0YWJsZUVsZW1lbnRMZWZ0IC0gY2VsbEVsZW1lbnRMZWZ0ICsgdGhpcy5zY3JvbGxhYmxlRWxlbWVudExlZnQ7XG4gICAgfVxuXG4gICAgYXBwbHlDb2x1bW5TaXplKGRlbHRhWDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcignY29sZ3JvdXAnKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlQ29sRWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZVdpZHRoKGNvbHMpO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuaW5pdERpcmVjdGlvbihkZWx0YVgpO1xuICAgICAgICBsZXQgY2VsbEluZGV4ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuY2VsbEluZGV4O1xuICAgICAgICBpZiAodGhpcy5ob3ZlcmREaXJlY3Rpb24gPT09ICdsZWZ0Jykge1xuICAgICAgICAgICAgY2VsbEluZGV4ID0gY2VsbEluZGV4IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb2xzcGFuID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5nZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nKSB8fCAxO1xuICAgICAgICBjZWxsSW5kZXggPSBjZWxsSW5kZXggKyAoY29sc3BhbiBhcyBudW1iZXIpIC8gMSAtIDE7XG4gICAgICAgIGlmIChkZWx0YVggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UmlnaHRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4ICsgMSk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXNpemluZ1N0b3JlLmlzUmVzdG9yaW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVggPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZUxlZnRDb2xzKGRlbHRhWCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGVsdGFYID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoY29lcmNlUGl4ZWxzRnJvbUNzc1ZhbHVlKGNvbHNbY2VsbEluZGV4XS5zdHlsZS53aWR0aCkgKyBkZWx0YVgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV4dENvbCA9IGNvbHNbY2VsbEluZGV4ICsgMV07XG4gICAgICAgICAgICBpZiAobmV4dENvbCkge1xuICAgICAgICAgICAgICAgIGxldCBsZWZ0RGVsdGFYID0gdGhpcy5yZXNpemluZ1N0b3JlLmdldFNjcm9sbFdpZHRoKGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX2RlbHRhID0gdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoX2RlbHRhID09PSBkZWx0YVgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY2FuIG5vdCByZXNpemVcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWx0YVggPSBkZWx0YVggLSBfZGVsdGE7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc3RvcmluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdERlbHRhWCA9IHRoaXMucmVzaXppbmdTdG9yZS5yZXN0b3JlUmlnaHRDb2xzKGxlZnREZWx0YVgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0RGVsdGFYIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMobGVmdERlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENvbC5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUoZ2V0RWxlbWVudFdpZHRoKG5leHRDb2wpICsgTWF0aC5hYnMoZGVsdGFYKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBzY3JvbGxXaWR0aCA9IGdldEVsZW1lbnRXaWR0aCh0aGlzLnRhYmxlRWxlbWVudCkgLSB0aGlzLnRhYmxlQ29tcG9uZW50LmdldFdyYXBwZXJXaWR0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChzY3JvbGxXaWR0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbFdpZHRoID4gTWF0aC5hYnMoZGVsdGFYKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBseUxlZnRDb2xzKGNvbHMsIGRlbHRhWCwgY2VsbEluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlMZWZ0Q29scyhjb2xzLCAtc2Nyb2xsV2lkdGgsIGNlbGxJbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseUxlZnRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICB3aGlsZSAoZGVsdGFYIDwgMCAmJiBjb2xzW2NvbEluZGV4XSkge1xuICAgICAgICAgICAgY29uc3QgY3VycmVudFdpZHRoID0gZ2V0RWxlbWVudFdpZHRoKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50V2lkdGggPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVzaXppbmdTdG9yZS5pc1Jlc2l6aW5nKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLnN0b3JlUmVzaXppbmdDb2woY29sc1tjb2xJbmRleF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCArIE1hdGguYWJzKGRlbHRhWCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIE1hdGguYWJzKGRlbHRhWCkpO1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVggPSAwO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCArPSBjdXJyZW50V2lkdGggLSB0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4O1xuICAgICAgICAgICAgICAgICAgICBjb2xzW2NvbEluZGV4XS5zdHlsZS53aWR0aCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sSW5kZXgtLTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVsdGFYO1xuICAgIH1cblxuICAgIGFwcGx5UmlnaHRDb2xzKGNvbHM6IEhUTUxUYWJsZUNvbEVsZW1lbnRbXSwgZGVsdGFYOiBudW1iZXIsIGNvbEluZGV4OiBudW1iZXIpIHtcbiAgICAgICAgd2hpbGUgKGRlbHRhWCA+IDAgJiYgY29sc1tjb2xJbmRleF0pIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRXaWR0aCA9IGdldEVsZW1lbnRXaWR0aChjb2xzW2NvbEluZGV4XSk7XG4gICAgICAgICAgICBpZiAoY3VycmVudFdpZHRoID4gdGhpcy50YWJsZU9wdGlvbnMubWluV2lkdGhQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzaXppbmdTdG9yZS5zdG9yZVJlc2l6aW5nQ29sKGNvbHNbY29sSW5kZXhdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRXaWR0aCA+IGRlbHRhWCArIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29sc1tjb2xJbmRleF0uc3R5bGUud2lkdGggPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGN1cnJlbnRXaWR0aCAtIGRlbHRhWCk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWCA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFYIC09IGN1cnJlbnRXaWR0aCAtIHRoaXMudGFibGVPcHRpb25zLm1pbldpZHRoUHg7XG4gICAgICAgICAgICAgICAgICAgIGNvbHNbY29sSW5kZXhdLnN0eWxlLndpZHRoID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZSh0aGlzLnRhYmxlT3B0aW9ucy5taW5XaWR0aFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVg7XG4gICAgfVxuXG4gICAgYXBwbHlSb3dTaXplKGRlbHRhWTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJvd3MgPSBbLi4udGhpcy50YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGJvZHknKS5jaGlsZHJlbl0gYXMgSFRNTFRhYmxlUm93RWxlbWVudFtdO1xuICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVUYWJsZUhlaWdodChyb3dzKTtcbiAgICAgICAgdGhpcy5yZXNpemluZ1N0b3JlLmluaXREaXJlY3Rpb24oZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3Zlcik7XG4gICAgICAgIGxldCByb3dJbmRleCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQucm93SW5kZXggLSAxOyAvLyBzdWJ0cmFjdCB0aGVhZCdzIHRyXG4gICAgICAgIGlmICh0aGlzLmhvdmVyZERpcmVjdGlvbiA9PT0gUG9zaXRpb24udG9wKSB7XG4gICAgICAgICAgICByb3dJbmRleCA9IHJvd0luZGV4IC0gMTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByb3dTcGFuID0gKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxUYWJsZUNlbGxFbGVtZW50KS5yb3dTcGFuO1xuICAgICAgICBjb25zdCBib3R0b21Sb3dJbmRleCA9IHJvd0luZGV4ICsgKHJvd1NwYW4gLSAxKSArIDE7XG4gICAgICAgIGlmIChkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5Qm90dG9tUm93cyhyb3dzLCBkZWx0YVksIGJvdHRvbVJvd0luZGV4KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXN0b3JpbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICBkZWx0YVkgPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZVRvcFJvd3MoZGVsdGFZKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IGluaXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKGluaXRIZWlnaHQgKyBkZWx0YVkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGFkZERlbHRhWSA9IHRoaXMucmVzaXppbmdTdG9yZS5nZXRBZGRUYWJsZUhlaWdodChkZWx0YVkpO1xuICAgICAgICAgICAgY29uc3QgX2RlbHRhID0gdGhpcy5hcHBseVRvcFJvd3Mocm93cywgZGVsdGFZLCByb3dJbmRleCk7XG4gICAgICAgICAgICBpZiAoX2RlbHRhID09PSBkZWx0YVkpIHtcbiAgICAgICAgICAgICAgICAvLyBjYW4gbm90IHJlc2l6ZVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlbHRhWSA9IGRlbHRhWSAtIF9kZWx0YTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXN0b3JpbmcoZGVsdGFZLCB0aGlzLmlzWEF4aXNIb3ZlcikpIHtcbiAgICAgICAgICAgICAgICBpZiAoYWRkRGVsdGFZIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgPSB0aGlzLnJlc2l6aW5nU3RvcmUucmVzdG9yZUJvdHRvbVJvd3MoZGVsdGFZKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBhcHBseVRvcFJvd3Mocm93czogSFRNTFRhYmxlUm93RWxlbWVudFtdLCBkZWx0YVk6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHdoaWxlIChkZWx0YVkgPCAwICYmIHJvd3Nbcm93SW5kZXhdKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPZmZzZXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVSZXNpemluZ1Jvdyhyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCArIE1hdGguYWJzKGRlbHRhWSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93c1tyb3dJbmRleF0uc3R5bGUuaGVpZ2h0ID0gY29lcmNlQ3NzUGl4ZWxWYWx1ZShyb3dPZmZzZXRIZWlnaHQgLSBNYXRoLmFicyhkZWx0YVkpKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZID0gMDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWx0YVkgKz0gcm93T2Zmc2V0SGVpZ2h0IC0gdGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHg7XG4gICAgICAgICAgICAgICAgICAgIHJvd3Nbcm93SW5kZXhdLnN0eWxlLmhlaWdodCA9IGNvZXJjZUNzc1BpeGVsVmFsdWUodGhpcy50YWJsZU9wdGlvbnMubWluSGVpZ2h0UHgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJvd0luZGV4LS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRlbHRhWTtcbiAgICB9XG5cbiAgICBhcHBseUJvdHRvbVJvd3Mocm93czogSFRNTFRhYmxlUm93RWxlbWVudFtdLCBkZWx0YVk6IG51bWJlciwgcm93SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIHdoaWxlIChyb3dzW3Jvd0luZGV4XSAmJiBkZWx0YVkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCByb3dPZmZzZXRIZWlnaHQgPSBnZXRFbGVtZW50SGVpZ2h0KHJvd3Nbcm93SW5kZXhdKTtcbiAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlc2l6aW5nU3RvcmUuaXNSZXNpemluZyhkZWx0YVksIHRoaXMuaXNYQXhpc0hvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc2l6aW5nU3RvcmUuc3RvcmVSZXNpemluZ1Jvdyhyb3dzW3Jvd0luZGV4XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyb3dPZmZzZXRIZWlnaHQgPiBkZWx0YVkgKyB0aGlzLnRhYmxlT3B0aW9ucy5taW5IZWlnaHRQeCkge1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHJvd09mZnNldEhlaWdodCAtIGRlbHRhWSk7XG4gICAgICAgICAgICAgICAgICAgIGRlbHRhWSA9IDA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsdGFZIC09IHJvd09mZnNldEhlaWdodCAtIHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4O1xuICAgICAgICAgICAgICAgICAgICByb3dzW3Jvd0luZGV4XS5zdHlsZS5oZWlnaHQgPSBjb2VyY2VDc3NQaXhlbFZhbHVlKHRoaXMudGFibGVPcHRpb25zLm1pbkhlaWdodFB4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByb3dJbmRleCsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWx0YVk7XG4gICAgfVxuXG4gICAgLy8jcmVnaW9uXG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheVJlZikge1xuICAgICAgICAgICAgdGhpcy5vdmVybGF5UmVmLmRldGFjaCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIiwiPGRpdiAjY2VsbElubmVyPlxuICAgIDxzbGF0ZS1jaGlsZHJlbiBbY2hpbGRyZW5dPVwiY2hpbGRyZW5cIiBbY29udGV4dF09XCJjaGlsZHJlbkNvbnRleHRcIiBbdmlld0NvbnRleHRdPVwidmlld0NvbnRleHRcIj48L3NsYXRlLWNoaWxkcmVuPlxuPC9kaXY+XG4iXX0=
|