@cqa-lib/cqa-ui 1.1.531 → 1.1.532
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/templates/modular-table-template/modular-table-template.component.mjs +6 -3
- package/fesm2015/cqa-lib-cqa-ui.mjs +6 -2
- package/fesm2015/cqa-lib-cqa-ui.mjs.map +1 -1
- package/fesm2020/cqa-lib-cqa-ui.mjs +5 -2
- package/fesm2020/cqa-lib-cqa-ui.mjs.map +1 -1
- package/lib/templates/modular-table-template/modular-table-template.component.d.ts +4 -1
- package/package.json +1 -1
|
@@ -851,11 +851,14 @@ export class ModularTableTemplateComponent {
|
|
|
851
851
|
return null;
|
|
852
852
|
return this.findFolder(this.folders, this.selectedFolderId);
|
|
853
853
|
}
|
|
854
|
-
/** Count of test cases directly under the currently-selected folder (excluding descendants).
|
|
854
|
+
/** Count of test cases directly under the currently-selected folder (excluding descendants).
|
|
855
|
+
* Reads `FolderNode.count` so the header badge matches the sidebar row count
|
|
856
|
+
* (folder-sidebar.component.html renders the same `row.node.count`). Using
|
|
857
|
+
* `filteredRows.length` here would only reflect the currently-rendered page. */
|
|
855
858
|
get currentFolderDirectCount() {
|
|
856
859
|
if (this.selectedFolderId == null)
|
|
857
860
|
return 0;
|
|
858
|
-
return this.
|
|
861
|
+
return this.currentFolderNode?.count ?? 0;
|
|
859
862
|
}
|
|
860
863
|
/**
|
|
861
864
|
* Renders the empty-state slot when the host explicitly opts in, OR when the
|
|
@@ -1474,4 +1477,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
1474
1477
|
}], columnVisibility: [{
|
|
1475
1478
|
type: Input
|
|
1476
1479
|
}] } });
|
|
1477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RlbXBsYXRlcy9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBS1osdUJBQXVCLEVBR3ZCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFLbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsc0JBQXNCLEdBaUJ2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkYsTUFBTSxPQUFPLDZCQUE2QjtJQXFVeEMsWUFBb0IsR0FBc0IsRUFBVSxhQUE0QjtRQUE1RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBcFVoRixvQkFBb0I7UUFDWCxzQkFBaUIsR0FBVyxtQkFBbUIsQ0FBQztRQUNoRCxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFT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QU07Z0JBTUUsaUJBQWlCO3NCQUF6QixLQUFLO2dCQU1HLGFBQWE7c0JBQXJCLEtBQUs7Z0JBRU8sYUFBYTtzQkFBekIsS0FBSztnQkFTSSxZQUFZO3NCQUFyQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBU0csV0FBVztzQkFBcEIsTUFBTTtnQkFrQkcsYUFBYTtzQkFBdEIsTUFBTTtnQkFRRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBUUcscUJBQXFCO3NCQUE5QixNQUFNO2dCQU9HLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFLRyxXQUFXO3NCQUFwQixNQUFNO2dCQU1HLHdCQUF3QjtzQkFBakMsTUFBTTtnQkFNRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxzQkFBc0I7c0JBQS9CLE1BQU07Z0JBQ0cseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUM0QixzQkFBc0I7c0JBQXhELFNBQVM7dUJBQUMsc0JBQXNCO2dCQTJCcEIsZ0JBQWdCO3NCQUE1QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEeW5hbWljRmlsdGVySXRlbSwgRHluYW1pY0ZpbHRlckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2ZpbHRlcnMvZHluYW1pYy1maWx0ZXIvZHluYW1pYy1maWx0ZXIuY29tcG9uZW50JztcbmltcG9ydCB7IER5bmFtaWNUYWJsZUNvbHVtbiB9IGZyb20gJy4uLy4uL3RhYmxlL2R5bmFtaWMtdGFibGUvZHluYW1pYy10YWJsZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB9IGZyb20gJy4uLy4uL2NvbHVtbi12aXNpYmlsaXR5L2NvbHVtbi12aXNpYmlsaXR5LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUYWJsZUFjdGlvbiB9IGZyb20gJy4uLy4uL3RhYmxlLWFjdGlvbi10b29sYmFyL3RhYmxlLWFjdGlvbi10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFbXB0eVN0YXRlQ29uZmlnIH0gZnJvbSAnLi4vLi4vZW1wdHktc3RhdGUvZW1wdHktc3RhdGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBFTVBUWV9TVEFURV9JTUFHRVMgfSBmcm9tICcuLi8uLi9hc3NldHMvaW1hZ2VzL2ltYWdlLWFzc2V0cy5jb25zdGFudHMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSB9IGZyb20gJy4uLy4uL2RpYWxvZy9kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQge1xuICBERUZBVUxUX01PRFVMQVJfQ09ORklHLFxuICBERUZBVUxUX01PRFVMQVJfTEFCRUxTLFxuICBERUZBVUxUX1JFT1JERVJfTEFCRUxTLFxuICBGb2xkZXJDcmVhdGVkUGF5bG9hZCxcbiAgRm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZCxcbiAgRm9sZGVyRGVsZXRlU3RyYXRlZ3ksXG4gIEZvbGRlckRlbGV0ZWRQYXlsb2FkLFxuICBGb2xkZXJJZEFjY2Vzc29yLFxuICBGb2xkZXJOb2RlLFxuICBGb2xkZXJSZW5hbWVkUGF5bG9hZCxcbiAgRm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQsXG4gIEZvbGRlck1vdmVkUGF5bG9hZCxcbiAgRm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkUGF5bG9hZCxcbiAgTW9kdWxhckNvbmZpZyxcbiAgTW9kdWxhckxhYmVscyxcbiAgUmVvcmRlckxhYmVscyxcbiAgUmVvcmRlclNhdmVQYXlsb2FkLFxuICBUZXN0c01vdmVkUGF5bG9hZCxcbiAgQnVsa0FjdGlvbkludm9rZWRQYXlsb2FkLFxufSBmcm9tICcuL21vZHVsYXItdGFibGUtdGVtcGxhdGUubW9kZWxzJztcbmltcG9ydCB7IE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9ncy9tb3ZlLXRvLWZvbGRlci1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IE5ld0ZvbGRlckRpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4vZGlhbG9ncy9uZXctZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGVsZXRlRm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL2RlbGV0ZS1mb2xkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1tb2R1bGFyLXRhYmxlLXRlbXBsYXRlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFtdLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1vZHVsYXJUYWJsZVRlbXBsYXRlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8vIFNlYXJjaCBiYXIgaW5wdXRzXG4gIEBJbnB1dCgpIHNlYXJjaFBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnU2VhcmNoIGNvbXBvbmVudHMnO1xuICBASW5wdXQoKSBzZWFyY2hWYWx1ZTogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIHNob3dDbGVhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dTZWFyY2hCYXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93RXhwb3J0QnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGlzRXhwb3J0aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8vIFNlYXJjaCBiYXIgb3V0cHV0c1xuICBAT3V0cHV0KCkgb25TZWFyY2hDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uRXhwb3J0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdOyBmcmFtZXdvcms/OiAnV0VCRFJJVkVSX0lPJyB8ICdTRUxFTklVTV9KQVZBJzsgc2VsZWN0ZWRJdGVtczogYW55W10gfSB8IHZvaWQ+KCk7XG4gIC8vIEZpbHRlciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvbkFwcGx5RmlsdGVyQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIG9uUmVzZXRGaWx0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQ2xlYXJBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVDaGlwID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLy8gRmlsdGVyIGlucHV0c1xuICBASW5wdXQoKSBmaWx0ZXJDb25maWc6IER5bmFtaWNGaWx0ZXJJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgZmlsdGVyTW9kZWw6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgQElucHV0KCkgc2hvd0ZpbHRlclBhbmVsOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHNob3dGaWx0ZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIE90aGVyIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJCdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIE90aGVyIGRyb3Bkb3duIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIGRyb3Bkb3duIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJEcm9wRG93bkJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gT3RoZXIgc2VsZWN0IGRyb3Bkb3duIGJ1dHRvbnMgaW5wdXQgKGFycmF5IG9mIHNlbGVjdCBkcm9wZG93biBidXR0b24gdGVtcGxhdGVzL2NvbXBvbmVudHMpXG4gIEBJbnB1dCgpIG90aGVyU2VsZWN0RHJvcERvd25CdXR0b25zOiBUZW1wbGF0ZVJlZjxhbnk+W10gPSBbXTtcbiAgXG4gIC8vIExlZ2FjeSBzaW5nbGUgYnV0dG9uIGlucHV0cyAoZGVwcmVjYXRlZCwga2VwdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSlcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBvdGhlckJ1dHRvbkxhYmVsOiBzdHJpbmcgPSAnT3RoZXIgQnV0dG9uJztcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBvdGhlckJ1dHRvblZhcmlhbnQ6ICdmaWxsZWQnIHwgJ291dGxpbmVkJyB8ICd0ZXh0JyB8ICdlbGV2YXRlZCcgfCAndG9uYWwnIHwgJ2dyZXktc29saWQnID0gJ2ZpbGxlZCc7XG4gIC8qKiBAZGVwcmVjYXRlZCBVc2Ugb3RoZXJCdXR0b25zIGFycmF5IGluc3RlYWQgKi9cbiAgQElucHV0KCkgc2hvd090aGVyQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgXG4gIC8vIEFjdGlvbiBtZW51IGJ1dHRvbiAodGhyZWUtZG90IG1lbnUgaW4gdGFibGUgcm93cylcbiAgQElucHV0KCkgc2hvd0FjdGlvbkJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gU2V0dGluZ3MgYW5kIHJlZnJlc2ggYnV0dG9uc1xuICBASW5wdXQoKSBzaG93U2V0dGluZ3NCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBzaG93QXV0b1JlZnJlc2hCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vIFZpZXctbW9kZSB0b2dnbGUgKExpc3QgfCBNb2R1bGFyKS4gSGlkZGVuIGJ5IGRlZmF1bHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gIEBJbnB1dCgpIHNob3dWaWV3TW9kZVRvZ2dsZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB2aWV3TW9kZTogJ2xpc3QnIHwgJ21vZHVsYXInID0gJ2xpc3QnO1xuICBASW5wdXQoKSB2aWV3TW9kZUxhYmVsczogeyBsaXN0OiBzdHJpbmc7IG1vZHVsYXI6IHN0cmluZyB9ID0geyBsaXN0OiAnTGlzdCcsIG1vZHVsYXI6ICdNb2R1bGFyJyB9O1xuICBAT3V0cHV0KCkgdmlld01vZGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPCdsaXN0JyB8ICdtb2R1bGFyJz4oKTtcblxuICBnZXQgdmlld01vZGVTZWdtZW50cygpOiBBcnJheTx7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmc7IGljb24/OiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiBbXG4gICAgICB7IGxhYmVsOiB0aGlzLnZpZXdNb2RlTGFiZWxzLmxpc3QsIHZhbHVlOiAnbGlzdCcsIGljb246ICd2aWV3X2xpc3QnIH0sXG4gICAgICB7IGxhYmVsOiB0aGlzLnZpZXdNb2RlTGFiZWxzLm1vZHVsYXIsIHZhbHVlOiAnbW9kdWxhcicsIGljb246ICdmb2xkZXInIH0sXG4gICAgXTtcbiAgfVxuXG4gIG9uVmlld01vZGVDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IG5leHQgPSB2YWx1ZSA9PT0gJ21vZHVsYXInID8gJ21vZHVsYXInIDogJ2xpc3QnO1xuICAgIGlmIChuZXh0ICE9PSB0aGlzLnZpZXdNb2RlKSB7XG4gICAgICB0aGlzLnZpZXdNb2RlID0gbmV4dDtcbiAgICAgIHRoaXMudmlld01vZGVDaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gIH1cblxuICAvLyBEYXRhIGlucHV0XG4gIEBJbnB1dCgpIGRhdGE6IGFueVtdID0gW107XG5cbiAgLy8gRW1wdHkgc3RhdGUgaW5wdXRzXG4gIEBJbnB1dCgpIGlzRW1wdHlTdGF0ZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlQ29uZmlnOiBFbXB0eVN0YXRlQ29uZmlnID0ge1xuICAgIHRpdGxlOiAnTm8gRGF0YSBBdmFpbGFibGUgWWV0JyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biBvciB1cGxvYWQgeW91ciBmaXJzdCB0ZXN0IHRvIHNlZSB5b3VyIGFuYWx5dGljcyBhbmQgdHJlbmRzIGhlcmUuIFdhdGNoIHlvdXIgcXVhbGl0eSBtZXRyaWNzIGNvbWUgdG8gbGlmZSB3aXRoIHJlYWwtdGltZSBpbnNpZ2h0cy4nLFxuICAgIGltYWdlVXJsOiBFTVBUWV9TVEFURV9JTUFHRVMuREFTSEJPQVJELFxuICAgIGFjdGlvbnM6IFt7IGxhYmVsOiAnUnVuIFRlc3QgU3VpdGUnLCB2YXJpYW50OiAnZmlsbGVkJyB9XSxcbiAgfTtcblxuICAvLyBBY3Rpb24gYmFyIGlucHV0c1xuICBASW5wdXQoKSBhY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW1xuICAgIHsgXG4gICAgICBpZDogJ2RlbGV0ZScsIFxuICAgICAgbGFiZWw6ICdEZWxldGUnLCBcbiAgICAgIGljb246ICdkZWxldGUnLCBcbiAgICAgIHRvb2x0aXA6ICdEZWxldGUgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0RlbGV0ZSBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ2VkaXQnLCBcbiAgICAgIGxhYmVsOiAnRWRpdCcsIFxuICAgICAgaWNvbjogJ2VkaXQnLCBcbiAgICAgIHRvb2x0aXA6ICdFZGl0IHNlbGVjdGVkJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdFZGl0IGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnYWRkLXRhZycsIFxuICAgICAgbGFiZWw6ICdBZGQgVGFnJywgXG4gICAgICBpY29uOiAnbG9jYWxfb2ZmZXInLCBcbiAgICAgIHRvb2x0aXA6ICdBZGQgdGFncycsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnQWRkIHRhZyBhY3Rpb24gY2xpY2tlZDonLCBjb250ZXh0KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHsgXG4gICAgICBpZDogJ3JlbW92ZS10YWcnLCBcbiAgICAgIGxhYmVsOiAnUmVtb3ZlIFRhZycsIFxuICAgICAgaWNvbjogJ2xhYmVsX29mZicsIFxuICAgICAgdG9vbHRpcDogJ1JlbW92ZSB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdSZW1vdmUgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gIF07XG5cbiAgLy8gQ2hpcHMgaW5wdXRzXG4gIEBJbnB1dCgpIGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gIEBJbnB1dCgpIGZpbHRlckFwcGxpZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZSBpbnB1dHNcbiAgQElucHV0KCkgY29sdW1uczogRHluYW1pY1RhYmxlQ29sdW1uW10gPSBbXTtcbiAgQElucHV0KCkgcm93U2VsZWN0YWJsZT86IChyb3c6IGFueSkgPT4gYm9vbGVhbjtcbiAgQElucHV0KCkgc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsOiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBwYWdlSW5kZXg6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgQElucHV0KCkgcGFnZVNpemVPcHRpb25zOiBudW1iZXJbXSA9IFsxMCwgMjAsIDQwLCA2MCwgODBdO1xuICBASW5wdXQoKSBwYWdlU2l6ZU1lbnVEaXJlY3Rpb246ICdhdXRvJyB8ICd1cCcgfCAnZG93bicgPSAnYXV0byc7XG4gIC8vIFNlcnZlci1zaWRlIHBhZ2luYXRpb24gY29udHJvbHNcbiAgQElucHV0KCkgc2VydmVyU2lkZVBhZ2luYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgdG90YWxFbGVtZW50czogbnVtYmVyID0gMDtcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfT4oKTtcbiAgLyoqXG4gICAqIFdoZW4gZmFsc2UsIGhlYWRlciBzb3J0IGRvZXMgbm90IHJlb3JkZXIgcm93cyBsb2NhbGx5ICh1c2Ugd2l0aCBzZXJ2ZXJTaWRlUGFnaW5hdGlvbiArIHNvcnRDaGFuZ2UpLlxuICAgKiBEZWZhdWx0IHRydWUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICBASW5wdXQoKSBlbmFibGVMb2NhbFNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICBAT3V0cHV0KCkgc29ydENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIGZpZWxkSWQ6IHN0cmluZztcbiAgICBmaWVsZFZhbHVlPzogc3RyaW5nO1xuICAgIGRpcmVjdGlvbjogJ2FzYycgfCAnZGVzYycgfCBudWxsO1xuICB9PigpO1xuICAvLyBMb2FkZXIgY29udHJvbHMgKHBhc3NlZCBkb3duIHRvIGR5bmFtaWMgdGFibGUpXG4gIEBJbnB1dCgpIGlzVGFibGVMb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNUYWJsZURhdGFMb2FkaW5nPzogYm9vbGVhbjtcbiAgLy8gQmFja3dhcmQtY29tcGF0aWJpbGl0eSBmbGFnOyBpZiBwcm92aWRlZCwgZHluYW1pYyB0YWJsZSB3aWxsIHVzZSBpdCB3aGVuIHNwZWNpZmljIGZsYWdzIGFyZSB1bmRlZmluZWRcblxuICAvLyBPcHRpb25hbCBnZXR0ZXIgZm9yIEpTT04gcGF0aCBwZXIgY2VsbC4gV2hlbiBwcm92aWRlZCwgZG91YmxlLWNsaWNraW5nIGEgY2VsbCBjb3BpZXMgdGhlIHBhdGguXG4gIEBJbnB1dCgpIGNlbGxKc29uUGF0aEdldHRlcj86IChyb3dJbmRleDogbnVtYmVyLCBjb2xJZDogc3RyaW5nLCByb3c6IGFueSkgPT4gc3RyaW5nO1xuXG4gIC8vIE9wdGlvbmFsIGhhbmRsZXIgY2FsbGVkIHdoZW4gYSBKU09OIHBhdGggaXMgY29waWVkIGZyb20gYSB0YWJsZSBjZWxsXG4gIEBJbnB1dCgpIG9uSnNvblBhdGhDb3BpZWRIYW5kbGVyPzogKGV2ZW50OiB7IHBhdGg6IHN0cmluZzsgc291cmNlOiBzdHJpbmcgfSkgPT4gdm9pZDtcblxuICAvLyBTZWxlY3RlZCBpdGVtcyAoZnVsbCBvYmplY3RzKSBmb3IgbWFpbnRhaW5pbmcgc2VsZWN0aW9uIGFjcm9zcyBwYWdpbmF0aW9uIChzZXJ2ZXItc2lkZSlcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogYW55W10gPSBbXTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgYWN0aW9uIHRvb2xiYXIgcmVuZGVycyB0aGUgXCJTZWxlY3QgYWxsXCIgYWZmb3JkYW5jZS4gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICogZm9yIG5vdyDigJQgaG9zdCBvcHRzIGluLiBNYXRjaGVzIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQgdG8gaGlkZSBTZWxlY3QgQWxsLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd1NlbGVjdEFsbEluVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogV2hlbiB0cnVlLCB0aGUgYWN0aW9uIHRvb2xiYXIgcmVuZGVycyB0aGUgZGlzbWlzcyAow5cpIGFmZm9yZGFuY2UuIERlZmF1bHRzIHRvIGZhbHNlXG4gICAqIGZvciBub3cg4oCUIGhvc3Qgb3B0cyBpbi4gTWF0Y2hlcyB0aGUgY3VycmVudCBwcm9kdWN0IHJlcXVpcmVtZW50IHRvIGhpZGUgQ2FuY2VsLlxuICAgKi9cbiAgQElucHV0KCkgc2hvd0Rpc21pc3NJblRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIEJvdW5kIHRvIHRoZSB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgY2hlY2tib3gg4oCUIGRyaXZlcyB0aGUgY2hlY2tlZCBzdGF0ZS4gKi9cbiAgQElucHV0KCkgYWxsU2VsZWN0ZWRJblRvb2xiYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZSBmb3IgY29sdW1uIHZpc2liaWxpdHlcbiAgcHJpdmF0ZSBfY29sdW1uVmlzaWJpbGl0eTogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyA9IHt9O1xuICBwcml2YXRlIF9jYWNoZWRWaXNpYmlsaXR5Q29sdW1uczogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+ID0gW107XG4gIGZpbHRlcmVkUm93czogYW55W10gPSBbXTtcbiAgcGFnZWRSb3dzOiBhbnlbXSA9IFtdO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBpbnB1dHNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICBASW5wdXQoKSBmb2xkZXJzOiBGb2xkZXJOb2RlW10gPSBbXTtcbiAgQElucHV0KCkgc2VsZWN0ZWRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIEBJbnB1dCgpIGV4cGFuZGVkRm9sZGVySWRzOiBudW1iZXJbXSA9IFtdO1xuICBASW5wdXQoKSB1bm9yZ2FuaXNlZENvdW50OiBudW1iZXIgPSAwO1xuICBASW5wdXQoKSBmb2xkZXJJZEFjY2Vzc29yOiBGb2xkZXJJZEFjY2Vzc29yID0gKHJvdzogYW55KSA9PiByb3c/LmZvbGRlcklkID8/IG51bGw7XG4gIEBJbnB1dCgpIG1vZHVsYXJDb25maWc6IE1vZHVsYXJDb25maWcgPSB7IC4uLkRFRkFVTFRfTU9EVUxBUl9DT05GSUcgfTtcbiAgQElucHV0KCkgbW9kdWxhckxhYmVsczogTW9kdWxhckxhYmVscyA9IHsgLi4uREVGQVVMVF9NT0RVTEFSX0xBQkVMUyB9O1xuICBASW5wdXQoKSBidWxrQWN0aW9uczogVGFibGVBY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBzaWRlYmFyQ29sbGFwc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gdHJ1ZSAoZGVmYXVsdCksIHRoZSBsaWJyYXJ5IG9wZW5zIGl0cyBvd24gTW92ZSBkaWFsb2cgZm9yIGNvbnZlbmllbmNlXG4gICAqIGR1cmluZyB0ZXN0aW5nLiBIb3N0cyB0YWtpbmcgb3ZlciBBUEkgKyBVWCBzaG91bGQgc2V0IHRoaXMgdG8gYGZhbHNlYCBhbmRcbiAgICogbGlzdGVuIG9uIGBtb3ZlUmVxdWVzdGVkYCB0byByZW5kZXIgdGhlaXIgb3duLlxuICAgKi9cbiAgQElucHV0KCkgdXNlSW50ZXJuYWxEaWFsb2dzOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIEZvbGRlciAvIG1vZHVsYXIgb3V0cHV0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEBPdXRwdXQoKSBmb2xkZXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyIHwgbnVsbD4oKTtcbiAgQE91dHB1dCgpIGZvbGRlckV4cGFuc2lvblRvZ2dsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IG51bWJlcjsgZXhwYW5kZWQ6IGJvb2xlYW4gfT4oKTtcbiAgQE91dHB1dCgpIGZvbGRlckNyZWF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckNyZWF0ZWRQYXlsb2FkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIisgTmV3IGZvbGRlclwiOyBob3N0IHNob3VsZCBvcGVuIGEgY3JlYXRpb24gbW9kYWwuICovXG4gIEBPdXRwdXQoKSBmb2xkZXJDcmVhdGVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgcGFyZW50SWQ6IG51bWJlciB8IG51bGwgfT4oKTtcbiAgQE91dHB1dCgpIGZvbGRlclJlbmFtZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlclJlbmFtZWRQYXlsb2FkPigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgdGhlIHVzZXIgY29uZmlybXMgZm9sZGVyIGRlbGV0aW9uIHZpYSB0aGUgaW50ZXJuYWwgZGlhbG9nIChvclxuICAgKiBpbW1lZGlhdGVseSwgd2hlbiBgdXNlSW50ZXJuYWxEaWFsb2dzYCBpcyBmYWxzZSBhbmQgdGhlIGhvc3QgZHJpdmVzIHRoZSBVWCkuXG4gICAqIFBheWxvYWQgbm93IGluY2x1ZGVzIHRoZSB1c2VyJ3MgY2hvc2VuIGBzdHJhdGVneWAgZm9yIHdoYXQgaGFwcGVucyB0byB0aGVcbiAgICogZm9sZGVyJ3MgdGVzdCBjYXNlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2xkZXJEZWxldGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEZWxldGVkUGF5bG9hZD4oKTtcbiAgQE91dHB1dCgpIHRlc3RzTW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFRlc3RzTW92ZWRQYXlsb2FkPigpO1xuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBCdWxrIGFjdGlvbiB0b29sYmFyIHN1cmZhY2Ug4oCUIG5hbWluZyBtaXJyb3JzIGNxYS10YWJsZS10ZW1wbGF0ZSBzbyBjb25zdW1lcnNcbiAgLy8gZ2V0IHRoZSBzYW1lIGV2ZW50cyBmcm9tIGVpdGhlciBjb21wb25lbnQgKHBsdXMgdGhlIGZvbGRlciBldmVudHMgYmVsb3cpLlxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKiogRmlyZXMgb24gcmF3IHRvb2xiYXIgYWN0aW9uIGNsaWNrIOKAlCAqYmVmb3JlKiBhbnkgaW50ZXJuYWwgZGlhbG9nIG9wZW5zLiAqL1xuICBAT3V0cHV0KCkgYnVsa0FjdGlvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx7IGlkOiBzdHJpbmc7IHNlbGVjdGVkOiBhbnlbXSB9PigpO1xuICAvKiogRmlyZXMgd2hlbiB0aGUgdG9vbGJhcidzIFwiU2VsZWN0IGFsbFwiIGlzIHRvZ2dsZWQuICovXG4gIEBPdXRwdXQoKSBidWxrU2VsZWN0QWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICAvKiogRmlyZXMgd2hlbiB0aGUgdG9vbGJhcidzIGRpc21pc3MgKMOXKSBpcyBjbGlja2VkLiAqL1xuICBAT3V0cHV0KCkgYnVsa0Rpc21pc3MgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzICphZnRlciogdGhlIGxpYnJhcnktaW50ZXJuYWwgbW92ZS10by1mb2xkZXIgZGlhbG9nIHJlc29sdmVzIHdpdGggYVxuICAgKiB1c2VyIGNvbmZpcm1hdGlvbiwgT1IgaW1tZWRpYXRlbHkgZm9yIG5vbi1kaWFsb2cgYnVsayBhY3Rpb25zIHN1cHBsaWVkIGJ5XG4gICAqIHRoZSBob3N0LiBIb3N0cyB3aXRoIHRoZWlyIG93biBVWCBzaG91bGQgbGlzdGVuIG9uIGBidWxrQWN0aW9uQ2xpY2tgICtcbiAgICogYG1vdmVSZXF1ZXN0ZWRgIGFuZCB0cmVhdCB0aGlzIGFzIHRoZSBcImNvbmZpcm1lZFwiIHNpZ25hbC5cbiAgICovXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uSW52b2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QnVsa0FjdGlvbkludm9rZWRQYXlsb2FkPigpO1xuXG4gIEBPdXRwdXQoKSBzaWRlYmFyQ29sbGFwc2VkQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUm93LXJlb3JkZXIgc3VyZmFjZVxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8qKiBXaGVuIHRydWUsIHJlbmRlcnMgYSBcIlJlb3JkZXJcIiBidXR0b24gaW4gdGhlIHRvb2xiYXIuIEhvc3QtZHJpdmVuLiAqL1xuICBASW5wdXQoKSBzaG93UmVvcmRlckJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKipcbiAgICogSG9zdCBmbGlwcyB0aGlzIHRydWUgd2hpbGUgaXRzIGJ1bGstdXBkYXRlIEFQSSBjYWxsIGlzIGluLWZsaWdodC4gVGhlXG4gICAqIGNvbXBvbmVudCBrZWVwcyB0aGUgcmVvcmRlciBVSSBwaW5uZWQgKFwiU2F2aW5nLi4uXCIpIHdoaWxlIHRydWUgYW5kIGV4aXRzXG4gICAqIHJlb3JkZXIgbW9kZSB3aGVuIGl0IGZsaXBzIGJhY2sgdG8gZmFsc2UgKHRoZSBcImZ1dHVyZSBBUEkgY2FsbFwiIGhvb2spLlxuICAgKi9cbiAgQElucHV0KCkgcmVvcmRlclNhdmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogUGFydGlhbCBvdmVycmlkZSBmb3IgdGhlIGRlZmF1bHQgcmVvcmRlciBsYWJlbHMgKFwiUmVvcmRlclwiLCBcIkRvbmVcIiwgZXRjLikuICovXG4gIEBJbnB1dCgpIHNldCByZW9yZGVyTGFiZWxzKHBhcnRpYWw6IFBhcnRpYWw8UmVvcmRlckxhYmVscz4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yZW9yZGVyTGFiZWxzID0geyAuLi5ERUZBVUxUX1JFT1JERVJfTEFCRUxTLCAuLi4ocGFydGlhbCB8fCB7fSkgfTtcbiAgfVxuICBnZXQgcmVvcmRlckxhYmVscygpOiBSZW9yZGVyTGFiZWxzIHtcbiAgICByZXR1cm4gdGhpcy5fcmVvcmRlckxhYmVscztcbiAgfVxuICBwcml2YXRlIF9yZW9yZGVyTGFiZWxzOiBSZW9yZGVyTGFiZWxzID0geyAuLi5ERUZBVUxUX1JFT1JERVJfTEFCRUxTIH07XG5cbiAgLyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiUmVvcmRlclwiIGFuZCB0aGUgY29tcG9uZW50IGVudGVycyByZW9yZGVyIG1vZGUuICovXG4gIEBPdXRwdXQoKSByZW9yZGVyU3RhcnQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIkNhbmNlbFwiIOKAlCB0aGUgb3JpZ2luYWwgb3JkZXIgaXMgYWxyZWFkeSByZXN0b3JlZC4gKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJDYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBcIkRvbmVcIi4gSG9zdCBzaG91bGQgdGFrZSBgb3JkZXJlZEl0ZW1zYCwgY2FsbCBpdHNcbiAgICogYnVsay11cGRhdGUgQVBJLCByZWZyZXNoIGBbZGF0YV1gLCBhbmQgZmxpcCBgcmVvcmRlclNhdmluZ2AgYmFjayB0byBgZmFsc2VgIOKAlFxuICAgKiB0aGUgY29tcG9uZW50IHdpbGwgdGhlbiBleGl0IHJlb3JkZXIgbW9kZS5cbiAgICpcbiAgICogTm90ZTogZm9yIHNlcnZlci1zaWRlIHBhZ2luYXRpb24sIGBvcmRlcmVkSXRlbXNgIGlzIHRoZSAqY3VycmVudCBwYWdlIHNsaWNlKixcbiAgICogbm90IHRoZSBmdWxsIGRhdGFzZXQg4oCUIHNhbWUgYXMgdGhlIGluLW1lbW9yeSB2aWV3IHRoZSB1c2VyIHdhcyBkcmFnZ2luZy5cbiAgICovXG4gIEBPdXRwdXQoKSByZW9yZGVyU2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8UmVvcmRlclNhdmVQYXlsb2FkPigpO1xuXG4gIC8qKiBJbnRlcm5hbCDigJQgdHJ1ZSB3aGlsZSB0aGUgdXNlciBpcyBpbiByZW9yZGVyIG1vZGUuICovXG4gIGlzUmVvcmRlcmluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogU25hcHNob3Qgb2YgYHBhZ2VkUm93c2AgdGFrZW4gb24gZW50ZXI7IHVzZWQgdG8gcmV2ZXJ0IG9uIGNhbmNlbC4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyU25hcHNob3Q6IGFueVtdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBEcmFmdCBvZiB0aGUgcmVvcmRlcmVkIHJvd3MgKGN1cnJlbnQgd29ya2luZyBzdGF0ZSkuICovXG4gIHByaXZhdGUgcmVvcmRlckRyYWZ0OiBhbnlbXSB8IG51bGwgPSBudWxsO1xuICAvKiogQXV0by1yZWZyZXNoIGludGVydmFsIGNhcHR1cmVkIG9uIGVudGVyLCBzbyB3ZSBjYW4gcmVzdG9yZSBvbiBjYW5jZWwvZG9uZS4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaDogbnVtYmVyID0gMDtcbiAgLyoqIFRydWUgYWZ0ZXIgRG9uZSBoYXMgYmVlbiBjbGlja2VkLCBhd2FpdGluZyB0aGUgaG9zdCdzIGByZW9yZGVyU2F2aW5nYCDihpIgZmFsc2UgZmxpcC4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyQXdhaXRpbmdTYXZlRmxpcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyB0aGUgXCJNb3ZlIHRvIGZvbGRlclwiIGJ1bGsgYWN0aW9uIOKAlCAqYmVmb3JlKiB0aGVcbiAgICogaW50ZXJuYWwgZGlhbG9nIG9wZW5zLiBIb3N0cyB0aGF0IHdhbnQgdG8gcmVuZGVyIHRoZWlyIG93biBtb2RhbCBzaG91bGRcbiAgICogc2V0IGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIGxpc3RlbiBoZXJlLlxuICAgKi9cbiAgQE91dHB1dCgpIG1vdmVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcbiAgICB0ZXN0SWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+O1xuICAgIHNlbGVjdGVkOiBhbnlbXTtcbiAgICBjdXJyZW50Rm9sZGVySWQ6IG51bWJlciB8IG51bGw7XG4gICAgZm9sZGVyczogRm9sZGVyTm9kZVtdO1xuICB9PigpO1xuXG4gIC8qKiBGaXJlcyB3aGVuZXZlciB0aGUgY29tcG9uZW50J3MgYHNlbGVjdGVkSXRlbXNgIGNoYW5nZXMgZnJvbSB3aXRoaW4gKFNlbGVjdCBBbGwgLyBEaXNtaXNzKS4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdGVkSXRlbXNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIGNsaWNrcyBhIGZvbGRlcidzIGRlbGV0ZSBhZmZvcmRhbmNlIOKAlCAqYmVmb3JlKiB0aGVcbiAgICogaW50ZXJuYWwgY29uZmlybWF0aW9uIGRpYWxvZyBvcGVucy4gSG9zdHMgb3duaW5nIHRoZSBVWCBsaXN0ZW4gaGVyZS5cbiAgICogUGF5bG9hZCBpbmNsdWRlcyBgdGVzdENvdW50YCArIGBoYXNQYXJlbnRgIHNvIGhvc3RzIGNhbiByZW5kZXIgdGhlIHJpZ2h0XG4gICAqIG9wdGlvbnMgaW4gdGhlaXIgb3duIG1vZGFsLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlckRlbGV0ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyRGVsZXRlUmVxdWVzdGVkUGF5bG9hZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgdXNlciBwaWNrcyBcIk1vdmUgZm9sZGVyXCIgZnJvbSBhIGZvbGRlciByb3cncyBjb250ZXh0IG1lbnUg4oCUXG4gICAqICpiZWZvcmUqIGFueSBkaWFsb2cgb3BlbnMuIEhvc3RzIG93bmluZyB0aGUgVVggbGlzdGVuIGhlcmUgd2l0aFxuICAgKiBgdXNlSW50ZXJuYWxEaWFsb2dzID0gZmFsc2VgIGFuZCBvcGVuIHRoZWlyIG93biBmb2xkZXIgcGlja2VyLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlck1vdmVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlck1vdmVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuICAvKipcbiAgICogRmlyZXMgYWZ0ZXIgdGhlIHVzZXIgY29uZmlybXMgYSBmb2xkZXIgbW92ZSB2aWEgdGhlIGludGVybmFsIHBpY2tlclxuICAgKiAob3IgaW1tZWRpYXRlbHkgd2hlbiBgdXNlSW50ZXJuYWxEaWFsb2dzID0gZmFsc2VgIGFuZCB0aGUgaG9zdCBkcml2ZXMgaXQpLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlck1vdmVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJNb3ZlZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIHBpY2tzIFwiRHVwbGljYXRlIGZvbGRlclwiIGZyb20gYSBmb2xkZXIgcm93J3MgY29udGV4dCBtZW51LlxuICAgKiBUaGUgbGlicmFyeSBkb2Vzbid0IG93biBwZXJzaXN0ZW5jZSwgc28gdGhlIGhvc3QgaXMgZXhwZWN0ZWQgdG8gY2xvbmUgdGhlXG4gICAqIGZvbGRlcidzIHN1YnRyZWUgc2VydmVyLXNpZGUgYW5kICpyZWZlcmVuY2UqIChub3QgY29weSkgdGhlIHRlc3QgY2FzZXMuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZiwgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBEaWFsb2dTZXJ2aWNlKSB7fVxuICBwcml2YXRlIHBlbmRpbmdGaWx0ZXJzOiBhbnk7XG4gIHByaXZhdGUgYXBwbGllZEZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhdXRvUmVmcmVzaFRpbWVyPzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBvbkF1dG9SZWZyZXNoQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5WaXNpYmlsaXR5Q29uZmlnPigpO1xuICBAT3V0cHV0KCkgYXV0b1JlZnJlc2hJbnRlcnZhbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuICBAVmlld0NoaWxkKER5bmFtaWNGaWx0ZXJDb21wb25lbnQpIGR5bmFtaWNGaWx0ZXJDb21wb25lbnQ/OiBEeW5hbWljRmlsdGVyQ29tcG9uZW50O1xuXG4gIC8vIERlcml2ZWQgY29sdW1ucyB3aXRoIHZpc2liaWxpdHkgYXBwbGllZC5cbiAgY29tcHV0ZWRDb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICAvLyBBdXRvLWdlbmVyYXRlZCB2aXNpYmlsaXR5IGNvbHVtbnMgZnJvbSBjb2x1bW5zIGlucHV0XG4gIHZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcblxuICBwcml2YXRlIHVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpOiB2b2lkIHtcbiAgICBjb25zdCB2aXNpYmlsaXR5ID0gdGhpcy5fY29sdW1uVmlzaWJpbGl0eSB8fCB7fTtcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgdGhpcy5jb21wdXRlZENvbHVtbnMgPSBzb3VyY2UubWFwKGNvbCA9PiB7XG4gICAgICBpZiAoWydjaGVja2JveCcsICdhY3Rpb25zJ10uaW5jbHVkZXMoY29sLmZpZWxkSWQpKSB7XG4gICAgICAgIHJldHVybiBjb2w7XG4gICAgICB9XG4gICAgICBjb25zdCBzaG93ID0gdmlzaWJpbGl0eVtjb2wuZmllbGRJZF07XG4gICAgICByZXR1cm4geyAuLi5jb2wsIGlzU2hvdzogc2hvdyAhPT0gZmFsc2UgfTtcbiAgICB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTogdm9pZCB7XG4gICAgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLm1hcFZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgdGhpcy52aXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLy8gQ29udHJvbGxlZCBjb2x1bW4gdmlzaWJpbGl0eTogcGFyZW50IGNhbiBzZWVkIGFuZCBwdXNoIHVwZGF0ZXMuXG4gIEBJbnB1dCgpIHNldCBjb2x1bW5WaXNpYmlsaXR5KGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyB8IHVuZGVmaW5lZCkge1xuICAgIGlmIChjZmcpIHtcbiAgICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuICBnZXQgY29sdW1uVmlzaWJpbGl0eSgpOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1uVmlzaWJpbGl0eTtcbiAgfVxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snZGF0YSddIHx8IGNoYW5nZXNbJ2lzRW1wdHlTdGF0ZSddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSkge1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3NlbGVjdGVkRm9sZGVySWQnXSAmJiAhY2hhbmdlc1snc2VsZWN0ZWRGb2xkZXJJZCddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBQZXIgdGhlIGFwcHJvdmVkIHBsYW46IGNsZWFyIHNlbGVjdGlvbiBhbmQgcmVzZXQgcGFnaW5hdGlvbiBvbiBmb2xkZXIgY2hhbmdlLlxuICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWyd2aWV3TW9kZSddICYmICFjaGFuZ2VzWyd2aWV3TW9kZSddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICAvLyBTd2l0Y2hpbmcgYmV0d2VlbiBsaXN0IGFuZCBtb2R1bGFyIGNoYW5nZXMgd2hldGhlciB0aGUgZm9sZGVyIGZpbHRlciBhcHBsaWVzLlxuICAgICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRJdGVtcyddIHx8IGNoYW5nZXNbJ2RhdGEnXSkge1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3Jlb3JkZXJTYXZpbmcnXSAmJiAhY2hhbmdlc1sncmVvcmRlclNhdmluZyddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICBjb25zdCBub3dTYXZpbmcgPSAhIWNoYW5nZXNbJ3Jlb3JkZXJTYXZpbmcnXS5jdXJyZW50VmFsdWU7XG4gICAgICAvLyBIb3N0IGZpbmlzaGVkIGl0cyBidWxrLXVwZGF0ZSBjYWxsIOKAlCBleGl0IHJlb3JkZXIgbW9kZS5cbiAgICAgIGlmICghbm93U2F2aW5nICYmIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXApIHtcbiAgICAgICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVDb21wb25lbnQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFtdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJbiBzZXJ2ZXItc2lkZSBtb2RlLCBhc3N1bWUgaW5jb21pbmcgZGF0YSBpcyBhbHJlYWR5IGEgcGFnZSBzbGljZVxuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cyA9IFsuLi50aGlzLmRhdGFdO1xuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTtcbiAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvblN0YXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgYGZpbHRlcmVkUm93c2AgZnJvbSBgZGF0YWAgYnkgYXBwbHlpbmcgKGEpIHRoZSBmaWVsZCBmaWx0ZXJzIChzdGF0dXMvcHJpb3JpdHkvZXRjLilcbiAgICogYW5kIChiKSB0aGUgZm9sZGVyIGZpbHRlciBkZXJpdmVkIGZyb20gYHNlbGVjdGVkRm9sZGVySWRgICsgYGZvbGRlcklkQWNjZXNzb3JgLlxuICAgKi9cbiAgcHJpdmF0ZSByZWJ1aWxkRmlsdGVyZWRSb3dzKCk6IHZvaWQge1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IHRoaXMuYXBwbGllZEZpbHRlcnMgPz8ge307XG4gICAgdGhpcy5maWx0ZXJlZFJvd3MgPSB0aGlzLmRhdGEuZmlsdGVyKHIgPT4gdGhpcy5wYXNzRmlsdGVycyhlZmZlY3RpdmUsIHIpICYmIHRoaXMucGFzc0ZvbGRlcihyKSk7XG4gIH1cblxuICBwcml2YXRlIHBhc3NGb2xkZXIocm93OiBhbnkpOiBib29sZWFuIHtcbiAgICAvLyBMaXN0IHZpZXcgaWdub3JlcyBmb2xkZXIgZmlsdGVyaW5nIGVudGlyZWx5IOKAlCBiZWhhdmVzIGxpa2UgdGhlIHRyYWRpdGlvbmFsIGZsYXQgdGFibGUuXG4gICAgaWYgKCF0aGlzLmlzTW9kdWxhclZpZXcpIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IGZvbGRlcklkID0gdGhpcy5mb2xkZXJJZEFjY2Vzc29yID8gdGhpcy5mb2xkZXJJZEFjY2Vzc29yKHJvdykgOiByb3c/LmZvbGRlcklkO1xuICAgIC8vIFJvb3Qgdmlldzogc2hvdyBvbmx5IHJvd3MgdGhhdCBkbyBub3QgYmVsb25nIHRvIGFueSBmb2xkZXIgKHRoZSBcIlVub3JnYW5pc2VkXCIgYnVja2V0KS5cbiAgICAvLyBGb2xkZXIgdGlsZXMgYWJvdmUgdGhlIHRhYmxlIGFyZSB0aGUgZW50cnkgcG9pbnQgdG8gcGVyLWZvbGRlciBjb250ZW50cy5cbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbGRlcklkID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmb2xkZXJJZCA9PSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZm9sZGVySWQgIT0gbnVsbCAmJiBTdHJpbmcoZm9sZGVySWQpID09PSBTdHJpbmcodGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIGNvbXBvbmVudCBzaG91bGQgcmVuZGVyIHRoZSBtb2R1bGFyIChmb2xkZXItYXdhcmUpIFVJLiAqL1xuICBnZXQgaXNNb2R1bGFyVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3TW9kZSA9PT0gJ21vZHVsYXInO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzZWxlY3RlZCBJRHMgZnJvbSBzZWxlY3RlZEl0ZW1zIChvYmplY3RzKVxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTZWxlY3RlZElkcygpOiBTZXQ8bnVtYmVyPiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIG5ldyBTZXQodGhpcy5zZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+IE51bWJlcihpdGVtLmlkKSkuZmlsdGVyKGlkID0+ICFpc05hTihpZCkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTZXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzdG9yZVNlbGVjdGlvblN0YXRlKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuXG4gICAgaWYgKHNlbGVjdGVkSWRzU2V0LnNpemUgPT09IDApIHtcbiAgICAgIC8vIElmIG5vIHNlbGVjdGVkIElEcywgY2xlYXIgYWxsIHNlbGVjdGlvbiBzdGF0ZXNcbiAgICAgIGlmICh0aGlzLnBhZ2VkUm93cykge1xuICAgICAgICB0aGlzLnBhZ2VkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFJlc3RvcmUgc2VsZWN0aW9uIHN0YXRlIGJhc2VkIG9uIHNlbGVjdGVkSXRlbXNcbiAgICBpZiAodGhpcy5wYWdlZFJvd3MpIHtcbiAgICAgIHRoaXMucGFnZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgaWYgKHJvdyAmJiByb3cuaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIChyb3cgYXMgYW55KS5pc1NlbGVjdGVkID0gc2VsZWN0ZWRJZHNTZXQuaGFzKE51bWJlcihyb3cuaWQpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWxzbyB1cGRhdGUgZmlsdGVyZWRSb3dzIGZvciBjb25zaXN0ZW5jeVxuICAgIGlmICh0aGlzLmZpbHRlcmVkUm93cykge1xuICAgICAgdGhpcy5maWx0ZXJlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZElkc1NldC5oYXMoTnVtYmVyKHJvdy5pZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbHVtblZpc2liaWxpdHkoKTogdm9pZCB7XG4gICAgLy8gQ2FjaGUgdmlzaWJpbGl0eSBjb2x1bW5zIHRvIGF2b2lkIGNyZWF0aW5nIG5ldyBhcnJheXMgb24gZXZlcnkgY2hhbmdlIGRldGVjdGlvblxuICAgIHRoaXMuX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5tYXBWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIC8vIFNlZWQgdmlzaWJpbGl0eSBzdGF0ZSBmcm9tIGVhY2ggY29sdW1uJ3MgaXNTaG93IChkZWZhdWx0IHRvIHRydWUpIHNvIGNvbnN1bWVyc1xuICAgIC8vIGNhbiBwcmUtYXBwbHkgcGVyc2lzdGVkIHByZWZlcmVuY2VzIHZpYSBjb2x1bW5zW2ldLmlzU2hvdy5cbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmNvbHVtbnMgfHwgW107XG4gICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLl9jb2x1bW5WaXNpYmlsaXR5W2NvbC5pZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCBzcmNDb2wgPSBzb3VyY2UuZmluZChjID0+IGMuZmllbGRJZCA9PT0gY29sLmlkKTtcbiAgICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eVtjb2wuaWRdID0gc3JjQ29sICYmIHNyY0NvbC5pc1Nob3cgPT09IGZhbHNlID8gZmFsc2UgOiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldCBhbnlSb3dTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDaGVjayBpZiB0aGVyZSBhcmUgYW55IHNlbGVjdGVkIGl0ZW1zIChlaXRoZXIgb24gY3VycmVudCBwYWdlIG9yIGFjcm9zcyBhbGwgcGFnZXMgdmlhIHNlbGVjdGVkSXRlbXMpXG4gICAgY29uc3QgaGFzU2VsZWN0ZWRPblBhZ2UgPSAhISh0aGlzLnBhZ2VkUm93cyAmJiB0aGlzLnBhZ2VkUm93cy5zb21lKHIgPT4gISEociBhcyBhbnkpLmlzU2VsZWN0ZWQpKTtcbiAgICBjb25zdCBzZWxlY3RlZElkc1NldCA9IHRoaXMuZ2V0U2VsZWN0ZWRJZHMoKTtcbiAgICBjb25zdCBoYXNTZWxlY3RlZEFjcm9zc1BhZ2VzID0gc2VsZWN0ZWRJZHNTZXQuc2l6ZSA+IDA7XG4gICAgcmV0dXJuIGhhc1NlbGVjdGVkT25QYWdlIHx8IGhhc1NlbGVjdGVkQWNyb3NzUGFnZXM7XG4gIH1cblxuICBnZXQgY3VycmVudFNlbGVjdGVkSXRlbXMoKTogYW55W10ge1xuICAgIC8vIElmIHNlbGVjdGVkSXRlbXMgKGZ1bGwgb2JqZWN0cykgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBkaXJlY3RseVxuICAgIC8vIFRoaXMgZW5zdXJlcyBhbGwgc2VsZWN0ZWQgaXRlbXMgYXJlIHJldHVybmVkLCBpbmNsdWRpbmcgdGhvc2UgZnJvbSBvdGhlciBwYWdlc1xuICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkSXRlbXM7XG4gICAgfVxuICAgIC8vIEZhbGxiYWNrOiBGb3IgY2xpZW50LXNpZGUgcGFnaW5hdGlvbiBvciB3aGVuIHNlbGVjdGVkSXRlbXMgaXMgbm90IHByb3ZpZGVkLFxuICAgIC8vIGZpbHRlciBwYWdlZFJvd3MgdG8gZ2V0IHNlbGVjdGVkIGl0ZW1zIGZyb20gY3VycmVudCBwYWdlIG9ubHlcbiAgICBpZiAoIXRoaXMucGFnZWRSb3dzIHx8IHRoaXMucGFnZWRSb3dzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuICAgIFxuICAgIC8vIEZpbHRlciByb3dzIHRoYXQgYXJlIHNlbGVjdGVkXG4gICAgcmV0dXJuIHRoaXMucGFnZWRSb3dzXG4gICAgICAuZmlsdGVyKHIgPT4ge1xuICAgICAgICBpZiAoIXIgfHwgci5pZCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNvbnN0IHJvd0lkID0gTnVtYmVyKHIuaWQpO1xuICAgICAgICAvLyBJbmNsdWRlIGlmIGVpdGhlcjpcbiAgICAgICAgLy8gMS4gVGhlIHJvdyBoYXMgaXNTZWxlY3RlZCA9IHRydWUgKGN1cnJlbnQgcGFnZSBzZWxlY3Rpb24pXG4gICAgICAgIC8vIDIuIFRoZSByb3cncyBJRCBpcyBpbiBzZWxlY3RlZEl0ZW1zIChzZWxlY3RlZCBvbiBvdGhlciBwYWdlcyBvciByZXN0b3JlZCBzZWxlY3Rpb24pXG4gICAgICAgIHJldHVybiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCB8fCBzZWxlY3RlZElkc1NldC5oYXMocm93SWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBhY3Rpb25DbGljayhkYXRhOiBhbnkpIHtcbiAgICBjb25zb2xlLmxvZygnYWN0aW9uIHRvb2xiYXInLCBkYXRhKTtcbiAgfVxuXG4gIHZpZXcoaWQ6IG51bWJlciB8IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdWaWV3JywgaWQpO1xuICB9XG5cbiAgZWRpdChyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdFZGl0Jywgcm93KTtcbiAgfVxuXG4gIGRlbGV0ZShyb3c6IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdEZWxldGUnLCByb3cpO1xuICB9XG5cbiAgdG9nZ2xlRmlsdGVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gIXRoaXMuc2hvd0ZpbHRlclBhbmVsO1xuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKGNmZzogQ29sdW1uVmlzaWJpbGl0eUNvbmZpZyk6IHZvaWQge1xuICAgIHRoaXMuX2NvbHVtblZpc2liaWxpdHkgPSB7IC4uLmNmZyB9O1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5jb2x1bW5WaXNpYmlsaXR5Q2hhbmdlLmVtaXQoeyAuLi5jZmcgfSk7XG4gIH1cblxuICBvbkF1dG9SZWZyZXNoQ2hhbmdlKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsID0gaW50ZXJ2YWxNcztcbiAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy5hdXRvUmVmcmVzaEludGVydmFsQ2hhbmdlLmVtaXQoaW50ZXJ2YWxNcyk7XG4gICAgdGhpcy50cmlnZ2VyUmVsb2FkKCk7XG4gIH1cblxuICB2YWx1ZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZhbHVlIGNoYW5nZWQnLCB2YWx1ZSk7XG4gICAgdGhpcy5vblNlYXJjaENoYW5nZS5lbWl0KHZhbHVlKTtcbiAgfVxuXG4gIHNlYXJjaCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1NlYXJjaCcsIHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyZWQoKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0NsZWFyZWQnKTtcbiAgfVxuXG4gIG9uRW1wdHlBY3Rpb24oYWN0aW9uOiBhbnkpIHtcbiAgICBpZiAoYWN0aW9uPy5sYWJlbCA9PT0gJ1Nob3cgZmlsdGVycycpIHtcbiAgICAgIHRoaXMudG9nZ2xlRmlsdGVyKCk7XG4gICAgfVxuICB9XG5cbiAgb25GaWx0ZXJzQ2hhbmdlZChjdXJyZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBEZWZlciBhcHBseWluZyBmaWx0ZXJzIGFuZCB1cGRhdGluZyBjaGlwcyB1bnRpbCBBcHBseSBGaWx0ZXIgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSBjdXJyZW50O1xuICB9XG5cbiAgb25GaWx0ZXJzQXBwbGllZChhcHBsaWVkOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dGaWx0ZXJQYW5lbCA9IGZhbHNlO1xuICAgIGNvbnN0IGVmZmVjdGl2ZSA9IGFwcGxpZWQgPz8gdGhpcy5wZW5kaW5nRmlsdGVycyA/PyB7fTtcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gZWZmZWN0aXZlO1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIGNvbnN0IGNoaXBzOiBBcnJheTx7IGtleT86IHN0cmluZzsgbGFiZWw/OiBzdHJpbmc7IHRleHQ6IHN0cmluZzsgZnVsbFRleHQ/OiBzdHJpbmc7IGhhc01vcmU/OiBib29sZWFuIH0+ID0gW107XG4gICAgaWYgKGVmZmVjdGl2ZSkge1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoZWZmZWN0aXZlKSkge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGVmZmVjdGl2ZVtrZXldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gJycgfHwgKEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkpIGNvbnRpbnVlO1xuICAgICAgICBcbiAgICAgICAgLy8gRmluZCB0aGUgZmlsdGVyIGNvbmZpZyBpdGVtIGZvciB0aGlzIGtleVxuICAgICAgICBjb25zdCBmaWx0ZXJDb25maWdJdGVtID0gdGhpcy5maWx0ZXJDb25maWc/LmZpbmQoYyA9PiBjLmtleSA9PT0ga2V5KTtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGZpbHRlckNvbmZpZ0l0ZW0/Lm9wdGlvbnMgfHwgW107XG4gICAgICAgIFxuICAgICAgICAvLyBIZWxwZXIgZnVuY3Rpb24gdG8gZmluZCBkaXNwbGF5IHRleHQgZnJvbSBvcHRpb25zXG4gICAgICAgIGNvbnN0IGdldERpc3BsYXlUZXh0ID0gKHZhbDogYW55KTogc3RyaW5nID0+IHtcbiAgICAgICAgICAvLyBJZiB2YWx1ZSBpcyBhbHJlYWR5IGFuIG9iamVjdCB3aXRoIG5hbWUvbGFiZWwsIHVzZSBpdFxuICAgICAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgKHZhbC5uYW1lIHx8IHZhbC5sYWJlbCB8fCB2YWwudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsLm5hbWUgPz8gdmFsLmxhYmVsID8/IFN0cmluZyh2YWwudmFsdWUgPz8gdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTG9vayB1cCB0aGUgb3B0aW9uIGluIHRoZSBjb25maWdcbiAgICAgICAgICBjb25zdCBvcHRpb24gPSBvcHRpb25zLmZpbmQoKG9wdDogYW55KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRJZCA9IG9wdC5pZCA/PyBvcHQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBvcHRWYWx1ZSA9IG9wdC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHZhbFN0ciA9IFN0cmluZyh2YWwpO1xuICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhvcHRJZCkgPT09IHZhbFN0ciB8fCBTdHJpbmcob3B0VmFsdWUpID09PSB2YWxTdHI7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgXG4gICAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5uYW1lID8/IG9wdGlvbi5sYWJlbCA/PyBTdHJpbmcob3B0aW9uLnZhbHVlID8/IHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIFxuICAgICAgICAgIC8vIEZhbGxiYWNrIHRvIHRoZSByYXcgdmFsdWVcbiAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7XG4gICAgICAgIH07XG4gICAgICAgIFxuICAgICAgICBsZXQgdGV4dCA9ICcnO1xuICAgICAgICBsZXQgbGFiZWwgPSBmaWx0ZXJDb25maWdJdGVtPy5sYWJlbDtcbiAgICAgICAgXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgIHRleHQgPSB2YWx1ZS5tYXAoKHY6IGFueSkgPT4gZ2V0RGlzcGxheVRleHQodikpLmpvaW4oJywgJyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGlmICgnc3RhcnQnIGluIHZhbHVlIHx8ICdlbmQnIGluIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzID0gdmFsdWUuc3RhcnQgPyBuZXcgRGF0ZSh2YWx1ZS5zdGFydCkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgIGNvbnN0IGUgPSB2YWx1ZS5lbmQgPyBuZXcgRGF0ZSh2YWx1ZS5lbmQpLnRvTG9jYWxlRGF0ZVN0cmluZygpIDogJyc7XG4gICAgICAgICAgICB0ZXh0ID0gW3MsIGVdLmZpbHRlcihCb29sZWFuKS5qb2luKCcgLSAnKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGV4dCA9IGdldERpc3BsYXlUZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjaGlwcy5wdXNoKHsga2V5LCBsYWJlbCwgdGV4dCwgZnVsbFRleHQ6IHRleHQsIGhhc01vcmU6IHRleHQubGVuZ3RoID4gMzAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2hpcHMgPSBjaGlwcztcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gIH1cblxuICBoYW5kbGVSZXNldEZpbHRlckNsaWNrKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIGNoaXBzIGFuZCByZXNldCBmaWx0ZXJlZCBkYXRhIHdoZW4gcmVzZXQgaXMgY2xpY2tlZFxuICAgIHRoaXMucGVuZGluZ0ZpbHRlcnMgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcHBsaWVkRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5vblJlc2V0RmlsdGVyQ2xpY2suZW1pdCgpO1xuICB9XG5cbiAgaGFuZGxlUmVmcmVzaENsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMub25BdXRvUmVmcmVzaENsaWNrLmVtaXQoKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJpZ2dlclJlbG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVsb2FkLmVtaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgICBpZiAoaW50ZXJ2YWxNcyAmJiBpbnRlcnZhbE1zID4gMCkge1xuICAgICAgdGhpcy5hdXRvUmVmcmVzaFRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgICAgIH0sIGludGVydmFsTXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJBdXRvUmVmcmVzaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hdXRvUmVmcmVzaFRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuYXV0b1JlZnJlc2hUaW1lcik7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5jbGVhckF1dG9SZWZyZXNoKCk7XG4gIH1cblxuICBvblBhZ2luYXRlKGU6IHsgcGFnZUluZGV4OiBudW1iZXI7IHBhZ2VTaXplOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIHRoaXMucGFnZUluZGV4ID0gZS5wYWdlSW5kZXg7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IGUucGFnZVNpemU7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMucGFnZUNoYW5nZS5lbWl0KHsgcGFnZUluZGV4OiB0aGlzLnBhZ2VJbmRleCwgcGFnZVNpemU6IHRoaXMucGFnZVNpemUgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHNpemU6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMucGFnZVNpemUgPSBzaXplO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUmVtb3ZlQ2hpcChjaGlwOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gdGhpcy5jaGlwcy5maWx0ZXIoYyA9PiBjICE9PSBjaGlwKTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA+IDA7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgY29tcG9uZW50IChzYW1lIHBhdHRlcm4gYXMgZXhlY3V0aW9uIHRhYilcbiAgICB0aGlzLnJlbW92ZUNoaXAuZW1pdChjaGlwKTtcbiAgfVxuXG4gIG9uQ2xlYXJBbGxDaGlwcygpOiB2b2lkIHtcbiAgICB0aGlzLmNoaXBzID0gW107XG4gICAgdGhpcy5maWx0ZXJBcHBsaWVkID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgdGhlIGR5bmFtaWMtZmlsdGVyIGNvbXBvbmVudCBmb3JtIHdoZW4gY2xlYXJpbmcgYWxsIGNoaXBzXG4gICAgaWYgKHRoaXMuZHluYW1pY0ZpbHRlckNvbXBvbmVudCkge1xuICAgICAgdGhpcy5keW5hbWljRmlsdGVyQ29tcG9uZW50LnJlc2V0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhcHBseVBhZ2luYXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIC8vIFNlcnZlciBtb2RlOiBwYXJlbnQgc3VwcGxpZXMgYWxyZWFkeS1wYWdpbmF0ZWQgZGF0YVxuICAgICAgdGhpcy5wYWdlZFJvd3MgPSBbLi4udGhpcy5maWx0ZXJlZFJvd3NdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydCA9IHRoaXMucGFnZUluZGV4ICogdGhpcy5wYWdlU2l6ZTtcbiAgICBjb25zdCBlbmQgPSBzdGFydCArIHRoaXMucGFnZVNpemU7XG4gICAgdGhpcy5wYWdlZFJvd3MgPSB0aGlzLmZpbHRlcmVkUm93cy5zbGljZShzdGFydCwgZW5kKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwVmlzaWJpbGl0eUNvbHVtbnMoKTogQXJyYXk8eyBpZDogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gKHRoaXMuY29sdW1ucyB8fCBbXSlcbiAgICAgIC5maWx0ZXIoYyA9PiBjLmlzRGVmYXVsdCA9PT0gZmFsc2UpXG4gICAgICAubWFwKGMgPT4gKHsgaWQ6IGMuZmllbGRJZCwgbGFiZWw6IGMuZmllbGROYW1lIHx8IGMuZmllbGRJZCB9KSk7XG4gIH1cblxuICBwcml2YXRlIG5vcm1hbGl6ZURhdGUoZDogYW55KTogbnVtYmVyIHwgbnVsbCB7XG4gICAgaWYgKCFkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCB0cyA9IERhdGUucGFyc2UoZCk7XG4gICAgcmV0dXJuIGlzTmFOKHRzKSA/IG51bGwgOiB0cztcbiAgfVxuXG4gIHByaXZhdGUgcGFzc0ZpbHRlcnMoZmlsdGVyczogYW55LCByb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghZmlsdGVycykgcmV0dXJuIHRydWU7XG4gICAgaWYgKGZpbHRlcnMuc3RhdHVzICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5zdGF0dXMpICYmIGZpbHRlcnMuc3RhdHVzLmxlbmd0aCkge1xuICAgICAgaWYgKCFmaWx0ZXJzLnN0YXR1cy5pbmNsdWRlcyhyb3cuc3RhdHVzKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5wcmlvcml0eSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMucHJpb3JpdHkpICYmIGZpbHRlcnMucHJpb3JpdHkubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMucHJpb3JpdHkuaW5jbHVkZXMocm93LnByaW9yaXR5TmFtZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcnMudGVzdFR5cGUgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnRlc3RUeXBlKSAmJiBmaWx0ZXJzLnRlc3RUeXBlLmxlbmd0aCkge1xuICAgICAgaWYgKCFmaWx0ZXJzLnRlc3RUeXBlLmluY2x1ZGVzKHJvdy50ZXN0VHlwZSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlICYmIChmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5zdGFydCB8fCBmaWx0ZXJzLmNyZWF0ZWRfZGF0ZS5lbmQpKSB7XG4gICAgICBjb25zdCBzdGFydFRzID0gdGhpcy5ub3JtYWxpemVEYXRlKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0KTtcbiAgICAgIGNvbnN0IGVuZFRzID0gdGhpcy5ub3JtYWxpemVEYXRlKGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCk7XG4gICAgICBjb25zdCByb3dUcyA9IHRoaXMubm9ybWFsaXplRGF0ZShyb3cuY3JlYXRlZEF0KTtcbiAgICAgIGlmIChyb3dUcyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChzdGFydFRzICE9IG51bGwgJiYgcm93VHMgPCBzdGFydFRzKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChlbmRUcyAhPSBudWxsICYmIHJvd1RzID4gZW5kVHMpIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cmFja0J5VGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tCeURyb3Bkb3duVGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgdHJhY2tCeVNlbGVjdERyb3Bkb3duVGVtcGxhdGVSZWYoaW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9XG5cbiAgLy8gRXhwb3J0IG1vZGFsIHN0YXRlXG4gIGlzRXhwb3J0TW9kYWxPcGVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgZXhwb3J0Q29kZUNsaWNrKCk6IHZvaWQge1xuICAgIC8vIEdldCBzZWxlY3RlZCBpdGVtc1xuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zO1xuICAgIGlmIChzZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZW4gbm8gaXRlbXMgYXJlIHNlbGVjdGVkXG4gICAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlRXhwb3J0TW9kYWwoKTogdm9pZCB7XG4gICAgdGhpcy5pc0V4cG9ydE1vZGFsT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgb25FeHBvcnRNb2RhbEV4cG9ydChyZXN1bHQ6IHsgdHlwZTogJ2xvY2FsJyB8ICdlbWFpbCc7IGVtYWlscz86IHN0cmluZ1tdOyBmcmFtZXdvcms6ICdXRUJEUklWRVJfSU8nIHwgJ1NFTEVOSVVNX0pBVkEnIH0pOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gICAgLy8gRW1pdCBldmVudCB0byBwYXJlbnQgd2l0aCBleHBvcnQgcmVzdWx0XG4gICAgdGhpcy5vbkV4cG9ydENsaWNrLmVtaXQoe1xuICAgICAgdHlwZTogcmVzdWx0LnR5cGUsXG4gICAgICBlbWFpbHM6IHJlc3VsdC5lbWFpbHMsXG4gICAgICBmcmFtZXdvcms6IHJlc3VsdC5mcmFtZXdvcmssXG4gICAgICBzZWxlY3RlZEl0ZW1zOiB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zXG4gICAgfSk7XG4gIH1cblxuICBnZXQgc2VsZWN0ZWRDYXNlc0ZvckV4cG9ydCgpOiBBcnJheTx7IGlkPzogbnVtYmVyOyBuYW1lPzogc3RyaW5nIH0+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0ZWRJdGVtcy5tYXAoaXRlbSA9PiAoe1xuICAgICAgaWQ6IGl0ZW0uaWQsXG4gICAgICBuYW1lOiBpdGVtLm5hbWUgfHwgaXRlbS50aXRsZSB8fCAnVW5uYW1lZCdcbiAgICB9KSk7XG4gIH1cbiAgZ2V0IGFycm93Q2xhc3NlcygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJhc2VDbGFzc2VzID0gW1xuICAgICAgJ2NxYS13LTQnLFxuICAgICAgJ2NxYS1oLTQnLFxuICAgICAgJ2NxYS1yZWxhdGl2ZScsXG4gICAgICAnY3FhLXRyYW5zaXRpb24tdHJhbnNmb3JtJ1xuICAgIF07XG5cbiAgICBpZiAodGhpcy5zaG93RmlsdGVyUGFuZWwpIHtcbiAgICAgIGJhc2VDbGFzc2VzLnB1c2goJ2NxYS1yb3RhdGUtMTgwJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VDbGFzc2VzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBoZWxwZXJzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogRmxhdCBsaXN0IG9mIHJvb3QtbGV2ZWwgZm9sZGVycyBmb3IgdGhlIFwiT3JnYW5pc2VkXCIgZ3JpZCBvbiB0aGUgcm9vdCB2aWV3LlxuICAgKi9cbiAgZ2V0IHJvb3RGb2xkZXJUaWxlcygpOiBGb2xkZXJOb2RlW10ge1xuICAgIHJldHVybiB0aGlzLmZvbGRlcnMgfHwgW107XG4gIH1cblxuICAvKipcbiAgICogU3ViZm9sZGVycyBvZiB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciAoZm9yIHRoZSBcIlN1YmZvbGRlcnMgaW4gLi4uXCIgZ3JpZCkuXG4gICAqL1xuICBnZXQgc3ViZm9sZGVyVGlsZXMoKTogRm9sZGVyTm9kZVtdIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEZvbGRlcklkID09IG51bGwpIHJldHVybiBbXTtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgdGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgICByZXR1cm4gbm9kZT8uY2hpbGRyZW4gPz8gW107XG4gIH1cblxuICAvKipcbiAgICogQnJlYWRjcnVtYiB0cmFpbCBmcm9tIFwiQWxsIGZvbGRlcnNcIiBkb3duIHRvIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyLlxuICAgKi9cbiAgZ2V0IGJyZWFkY3J1bWJUcmFpbCgpOiBGb2xkZXJOb2RlW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IHRyYWlsOiBGb2xkZXJOb2RlW10gPSBbXTtcbiAgICB0aGlzLmJ1aWxkVHJhaWwodGhpcy5mb2xkZXJzLCB0aGlzLnNlbGVjdGVkRm9sZGVySWQsIHRyYWlsKTtcbiAgICByZXR1cm4gdHJhaWw7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVHJhaWwobm9kZXM6IEZvbGRlck5vZGVbXSwgdGFyZ2V0SWQ6IG51bWJlciwgYWNjOiBGb2xkZXJOb2RlW10pOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMgfHwgW10pIHtcbiAgICAgIGFjYy5wdXNoKG4pO1xuICAgICAgLy8gVXNlIFN0cmluZygpIGNvZXJjaW9uIGZvciBzYWZldHkgaW4gY2FzZSBpZHMgYXJyaXZlIGFzIGVpdGhlciBudW1iZXIgb3JcbiAgICAgIC8vIHN0cmluZyBmcm9tIGRpZmZlcmVudCBBUEkvdGVzdCBkYXRhIHNoYXBlcyAoZS5nLiByYXcgSlNPTiBwYXJzZSByZXN1bHRzKS5cbiAgICAgIGlmIChTdHJpbmcobi5pZCkgPT09IFN0cmluZyh0YXJnZXRJZCkpIHJldHVybiB0cnVlO1xuICAgICAgaWYgKG4uY2hpbGRyZW4gJiYgdGhpcy5idWlsZFRyYWlsKG4uY2hpbGRyZW4sIHRhcmdldElkLCBhY2MpKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGFjYy5wb3AoKTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kRm9sZGVyKG5vZGVzOiBGb2xkZXJOb2RlW10sIHRhcmdldElkOiBudW1iZXIpOiBGb2xkZXJOb2RlIHwgbnVsbCB7XG4gICAgZm9yIChjb25zdCBuIG9mIG5vZGVzIHx8IFtdKSB7XG4gICAgICBpZiAoU3RyaW5nKG4uaWQpID09PSBTdHJpbmcodGFyZ2V0SWQpKSByZXR1cm4gbjtcbiAgICAgIGNvbnN0IGZvdW5kID0gbi5jaGlsZHJlbiA/IHRoaXMuZmluZEZvbGRlcihuLmNoaWxkcmVuLCB0YXJnZXRJZCkgOiBudWxsO1xuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gZm91bmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBpcyBpbiBcInJvb3RcIiB2aWV3IChubyBmb2xkZXIgc2VsZWN0ZWQpLiBDb250cm9scyB3aGljaFxuICAgKiBzZWN0aW9ucyByZW5kZXIgb24gdGhlIHJpZ2h0LWhhbmQgcGFuZS5cbiAgICovXG4gIGdldCBpc1Jvb3RWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbDtcbiAgfVxuXG4gIC8qKiBUaGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciBub2RlIChvciBudWxsIGF0IHJvb3QpLiAqL1xuICBnZXQgY3VycmVudEZvbGRlck5vZGUoKTogRm9sZGVyTm9kZSB8IG51bGwge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuZmluZEZvbGRlcih0aGlzLmZvbGRlcnMsIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCk7XG4gIH1cblxuICAvKiogQ291bnQgb2YgdGVzdCBjYXNlcyBkaXJlY3RseSB1bmRlciB0aGUgY3VycmVudGx5LXNlbGVjdGVkIGZvbGRlciAoZXhjbHVkaW5nIGRlc2NlbmRhbnRzKS4gKi9cbiAgZ2V0IGN1cnJlbnRGb2xkZXJEaXJlY3RDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyZWRSb3dzLmxlbmd0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBlbXB0eS1zdGF0ZSBzbG90IHdoZW4gdGhlIGhvc3QgZXhwbGljaXRseSBvcHRzIGluLCBPUiB3aGVuIHRoZVxuICAgKiB0YWJsZSB3b3VsZCBvdGhlcndpc2UgcmVuZGVyIGJsYW5rIChubyBsb2FkaW5nICsgbm8gcm93cykuIFVzaW5nIGEgZGVyaXZlZFxuICAgKiBmbGFnIGtlZXBzIHRoZSBob3N0IGNvbnRyYWN0IGlkZW50aWNhbCB0byBgY3FhLXRhYmxlLXRlbXBsYXRlYCB3aGlsZSBsZXR0aW5nXG4gICAqIHRoZSBtb2R1bGFyIHZpZXcgc2hvdyBcIk5vIFRlc3QgQ2FzZSBGb3VuZFwiIG91dCBvZiB0aGUgYm94IOKAlCB0aGUgZWFybGllciBhc2suXG4gICAqL1xuICBnZXQgZWZmZWN0aXZlSXNFbXB0eVN0YXRlKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLmlzRW1wdHlTdGF0ZSkgcmV0dXJuIHRydWU7XG4gICAgaWYgKHRoaXMuaXNUYWJsZUxvYWRpbmcgfHwgdGhpcy5pc1RhYmxlRGF0YUxvYWRpbmcpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gIXRoaXMucGFnZWRSb3dzIHx8IHRoaXMucGFnZWRSb3dzLmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaWNrcyB0aGUgaG9zdC1wcm92aWRlZCBgZW1wdHlTdGF0ZUNvbmZpZ2Agd2hlbiB0aGUgaG9zdCBmbGFnZ2VkIHRoZSBzdGF0ZVxuICAgKiBpdHNlbGY7IG90aGVyd2lzZSBmYWxscyBiYWNrIHRvIGEgbGlicmFyeS1vd25lZCBcIk5vIFRlc3QgQ2FzZSBGb3VuZFwiIGNvbmZpZ1xuICAgKiBkcml2ZW4gYnkgYG1vZHVsYXJMYWJlbHNgLlxuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcoKTogRW1wdHlTdGF0ZUNvbmZpZyB7XG4gICAgaWYgKHRoaXMuaXNFbXB0eVN0YXRlKSByZXR1cm4gdGhpcy5lbXB0eVN0YXRlQ29uZmlnO1xuICAgIHJldHVybiB7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLmVtcHR5Tm9UZXN0c0luRm9sZGVyVGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tb2R1bGFyTGFiZWxzLmVtcHR5Tm9UZXN0c0luRm9sZGVyRGVzY3JpcHRpb24sXG4gICAgICBpbWFnZVVybDogRU1QVFlfU1RBVEVfSU1BR0VTLlRFU1RfQ0FTRSxcbiAgICAgIGFjdGlvbnM6IFtdLFxuICAgIH07XG4gIH1cblxuICBvbkZvbGRlclNlbGVjdGVkKGlkOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEZvbGRlcklkID0gaWQ7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5mb2xkZXJTZWxlY3RlZC5lbWl0KGlkKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRm9sZGVyRXhwYW5zaW9uVG9nZ2xlZChldmVudDogeyBpZDogbnVtYmVyOyBleHBhbmRlZDogYm9vbGVhbiB9KTogdm9pZCB7XG4gICAgY29uc3Qgc2V0ID0gbmV3IFNldCh0aGlzLmV4cGFuZGVkRm9sZGVySWRzIHx8IFtdKTtcbiAgICBpZiAoZXZlbnQuZXhwYW5kZWQpIHtcbiAgICAgIHNldC5hZGQoZXZlbnQuaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXQuZGVsZXRlKGV2ZW50LmlkKTtcbiAgICB9XG4gICAgdGhpcy5leHBhbmRlZEZvbGRlcklkcyA9IEFycmF5LmZyb20oc2V0KTtcbiAgICB0aGlzLmZvbGRlckV4cGFuc2lvblRvZ2dsZWQuZW1pdChldmVudCk7XG4gIH1cblxuICBvbkZvbGRlckNyZWF0ZWQocGF5bG9hZDogRm9sZGVyQ3JlYXRlZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmZvbGRlckNyZWF0ZWQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIG9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKHBheWxvYWQ6IHsgcGFyZW50SWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIC8vIEVtaXQgdGhlIFwicmVxdWVzdGVkXCIgZXZlbnQgZmlyc3Qgc28gYSBob3N0IGNhbiBpbnRlcmNlcHQgd2hlbiBpdCBvd25zIHRoZSBVWC5cbiAgICB0aGlzLmZvbGRlckNyZWF0ZVJlcXVlc3RlZC5lbWl0KHBheWxvYWQpO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcbiAgICB0aGlzLm9wZW5DcmVhdGVGb2xkZXJEaWFsb2cocGF5bG9hZC5wYXJlbnRJZCk7XG4gIH1cblxuICBvbkZvbGRlclJlbmFtZWQocGF5bG9hZDogRm9sZGVyUmVuYW1lZFBheWxvYWQpOiB2b2lkIHtcbiAgICB0aGlzLmZvbGRlclJlbmFtZWQuZW1pdChwYXlsb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaXJlZCB0byB0aGUgc2lkZWJhcidzIGBmb2xkZXJEZWxldGVkYCBvdXRwdXQg4oCUIHdoaWNoIGZpcmVzIG9uIGRlbGV0ZS1pY29uXG4gICAqICpjbGljayosIG5vdCBvbiBjb25maXJtYXRpb24uIFdlIHJlLWVtaXQgYSBgZm9sZGVyRGVsZXRlUmVxdWVzdGVkYCBldmVudFxuICAgKiBmaXJzdCAoc28gaG9zdHMgY2FuIGludGVyY2VwdCkgYW5kLCB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3NgIGlzIGVuYWJsZWQsXG4gICAqIG9wZW4gdGhlIGNvbmZpcm1hdGlvbiBkaWFsb2cuIGBmb2xkZXJEZWxldGVkYCBub3cgb25seSBmaXJlcyBhZnRlciBjb25maXJtLlxuICAgKi9cbiAgb25Gb2xkZXJEZWxldGVkKHBheWxvYWQ6IHsgaWQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3QgY3R4ID0gdGhpcy5idWlsZERlbGV0ZUNvbnRleHQocGF5bG9hZC5pZCk7XG4gICAgdGhpcy5mb2xkZXJEZWxldGVSZXF1ZXN0ZWQuZW1pdChjdHgpO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcbiAgICB0aGlzLm9wZW5EZWxldGVGb2xkZXJEaWFsb2coY3R4KTtcbiAgfVxuXG4gIC8qKiBCdWlsZHMgdGhlIHsgaWQsIG5hbWUsIHRlc3RDb3VudCwgaGFzUGFyZW50IH0gcGF5bG9hZCB1c2VkIGJ5IGRlbGV0ZSBldmVudHMvZGlhbG9ncy4gKi9cbiAgcHJpdmF0ZSBidWlsZERlbGV0ZUNvbnRleHQoZm9sZGVySWQ6IG51bWJlcik6IEZvbGRlckRlbGV0ZVJlcXVlc3RlZFBheWxvYWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCBmb2xkZXJJZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBmb2xkZXJJZCxcbiAgICAgIG5hbWU6IG5vZGU/Lm5hbWUgPz8gJycsXG4gICAgICB0ZXN0Q291bnQ6IHRoaXMuY291bnRUZXN0c0luRm9sZGVyKGZvbGRlcklkKSxcbiAgICAgIGhhc1BhcmVudDogdGhpcy5mb2xkZXJIYXNQYXJlbnQoZm9sZGVySWQpLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvdW50VGVzdHNJbkZvbGRlcihmb2xkZXJJZDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBhY2Nlc3NvciA9IHRoaXMuZm9sZGVySWRBY2Nlc3NvciA/PyAoKHI6IGFueSkgPT4gcj8uZm9sZGVySWQpO1xuICAgIHJldHVybiAodGhpcy5kYXRhIHx8IFtdKS5maWx0ZXIociA9PiB7XG4gICAgICBjb25zdCBpZCA9IGFjY2Vzc29yKHIpO1xuICAgICAgcmV0dXJuIGlkICE9IG51bGwgJiYgTnVtYmVyKGlkKSA9PT0gTnVtYmVyKGZvbGRlcklkKTtcbiAgICB9KS5sZW5ndGg7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIHdoZW4gdGhlIGZvbGRlciBpcyBuZXN0ZWQgKGkuZS4gbm90IGEgcm9vdC1sZXZlbCBmb2xkZXIpLiAqL1xuICBwcml2YXRlIGZvbGRlckhhc1BhcmVudChmb2xkZXJJZDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodGhpcy5mb2xkZXJzIHx8IFtdKS5zb21lKG4gPT4gbi5pZCA9PT0gZm9sZGVySWQpO1xuICB9XG5cbiAgb25UZXN0c0Ryb3BwZWQoZXZlbnQ6IHsgdGVzdElkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPjsgdGFyZ2V0Rm9sZGVySWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wKSByZXR1cm47XG4gICAgdGhpcy50ZXN0c01vdmVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvbGRlci10by1mb2xkZXIgZHJhZy1kcm9wLiBUaGUgc2lkZWJhciBoYXMgYWxyZWFkeSB2YWxpZGF0ZWQgYWdhaW5zdCBzZWxmL2Rlc2NlbmRhbnRcbiAgICogY3ljbGVzLCBzbyB0aGUgZHJvcCBpcyBpdHMgb3duIGNvbmZpcm1hdGlvbiDigJQgd2UgZW1pdCBgZm9sZGVyTW92ZWRgIGRpcmVjdGx5IHdpdGhvdXRcbiAgICogb3BlbmluZyB0aGUgbW92ZSBkaWFsb2cuIEdhdGVkIG9uIGBhbGxvd1Rlc3REcmFnRHJvcGAgKHNhbWUgZmxhZyBhcyB0ZXN0IGRyYWctZHJvcCkuXG4gICAqL1xuICBvbkZvbGRlckRyb3BwZWQoZXZlbnQ6IHsgaWQ6IG51bWJlcjsgbmV3UGFyZW50SWQ6IG51bWJlciB8IG51bGwgfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5tb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wKSByZXR1cm47XG4gICAgdGhpcy5mb2xkZXJNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWRlYmFyIGVtaXR0ZWQgYGZvbGRlck1vdmVSZXF1ZXN0ZWRgICh1c2VyIHBpY2tlZCBcIk1vdmUgZm9sZGVyXCIgZnJvbSB0aGUgY29udGV4dCBtZW51KS5cbiAgICogV2UgcmUtZW1pdCBhIHJpY2hlciBwYXlsb2FkIGZvciBob3N0cywgYW5kIOKAlCB3aGVuIHJ1bm5pbmcgd2l0aCBpbnRlcm5hbCBkaWFsb2dzIOKAlFxuICAgKiBvcGVuIHRoZSBleGlzdGluZyBtb3ZlLXRvLWZvbGRlciBwaWNrZXIgY29uZmlndXJlZCBmb3IgYSBmb2xkZXItbW92ZSAoc2VsZiBhbmRcbiAgICogZGVzY2VuZGFudHMgYXJlIGRpc2FibGVkIHRvIHByZXZlbnQgY3ljbGVzKS5cbiAgICovXG4gIG9uRm9sZGVyTW92ZVJlcXVlc3RlZChwYXlsb2FkOiB7IGlkOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCBwYXlsb2FkLmlkKTtcbiAgICBjb25zdCBjdHg6IEZvbGRlck1vdmVSZXF1ZXN0ZWRQYXlsb2FkID0ge1xuICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICBuYW1lOiBub2RlPy5uYW1lID8/ICcnLFxuICAgICAgaGFzUGFyZW50OiB0aGlzLmZvbGRlckhhc1BhcmVudChwYXlsb2FkLmlkKSxcbiAgICB9O1xuICAgIHRoaXMuZm9sZGVyTW92ZVJlcXVlc3RlZC5lbWl0KGN0eCk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuICAgIHRoaXMub3Blbk1vdmVGb2xkZXJEaWFsb2coY3R4KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaWRlYmFyIGVtaXR0ZWQgYGZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZGAuIFRoZSBsaWJyYXJ5IGNhbid0IHBlcnNpc3Qg4oCUXG4gICAqIGVtaXQgdGhlIGhvc3QtbGV2ZWwgZXZlbnQgc28gdGhlIGhvc3QgY2xvbmVzIHRoZSBzdWJ0cmVlIHNlcnZlci1zaWRlLlxuICAgKiBUZXN0IGNhc2VzIHNob3VsZCBiZSAqcmVmZXJlbmNlZCogZnJvbSB0aGUgbmV3IGZvbGRlcnMsIG5vdCBkdXBsaWNhdGVkLlxuICAgKi9cbiAgb25Gb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQocGF5bG9hZDogeyBpZDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgcGF5bG9hZC5pZCk7XG4gICAgdGhpcy5mb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQuZW1pdCh7XG4gICAgICBpZDogcGF5bG9hZC5pZCxcbiAgICAgIG5hbWU6IG5vZGU/Lm5hbWUgPz8gJycsXG4gICAgfSk7XG4gIH1cblxuICBvblNpZGViYXJDb2xsYXBzZWRDaGFuZ2UoY29sbGFwc2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5zaWRlYmFyQ29sbGFwc2VkID0gY29sbGFwc2VkO1xuICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlZENoYW5nZS5lbWl0KGNvbGxhcHNlZCk7XG4gIH1cblxuICB0b2dnbGVTaWRlYmFyKCk6IHZvaWQge1xuICAgIHRoaXMub25TaWRlYmFyQ29sbGFwc2VkQ2hhbmdlKCF0aGlzLnNpZGViYXJDb2xsYXBzZWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgYnVsayBhY3Rpb25zIHNob3duIGluIHRoZSB0b29sYmFyIG1lcmdlZCB3aXRoIGFueSBob3N0LXN1cHBsaWVkXG4gICAqIGBidWxrQWN0aW9uc2AuIEN1cnJlbnRseSBvbmx5IFwiTW92ZSB0byBmb2xkZXJcIiBzaGlwcyBieSBkZWZhdWx0IOKAlFxuICAgKiBEZWxldGUgLyBBZGQgVGFnIGFyZSBvcHQtaW4gcGVyIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQuIEhvc3RzXG4gICAqIHRoYXQgd2FudCB0aGVtIGJhY2sgcGFzcyB0aGVtIHZpYSBgYnVsa0FjdGlvbnNgLlxuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUJ1bGtBY3Rpb25zKCk6IFRhYmxlQWN0aW9uW10ge1xuICAgIGNvbnN0IGRlZmF1bHRzOiBUYWJsZUFjdGlvbltdID0gW1xuICAgICAgeyBpZDogJ21vdmUnLCBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVUb0ZvbGRlciwgaWNvbjogJ2RyaXZlX2ZpbGVfbW92ZScsIHRvb2x0aXA6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlVG9Gb2xkZXIgfSxcbiAgICBdO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IG5ldyBNYXAoKHRoaXMuYnVsa0FjdGlvbnMgfHwgW10pLm1hcChhID0+IFthLmlkLCBhXSBhcyBjb25zdCkpO1xuICAgIGNvbnN0IG1lcmdlZCA9IGRlZmF1bHRzLm1hcChkID0+IG92ZXJyaWRlcy5nZXQoZC5pZCkgPz8gZCk7XG4gICAgZm9yIChjb25zdCBleHRyYSBvZiB0aGlzLmJ1bGtBY3Rpb25zIHx8IFtdKSB7XG4gICAgICBpZiAoIWRlZmF1bHRzLnNvbWUoZCA9PiBkLmlkID09PSBleHRyYS5pZCkpIHtcbiAgICAgICAgbWVyZ2VkLnB1c2goZXh0cmEpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VkO1xuICB9XG5cbiAgb25CdWxrQWN0aW9uKGV2ZW50OiB7IGlkOiBzdHJpbmc7IHNlbGVjdGVkOiBhbnlbXSB9KTogdm9pZCB7XG4gICAgLy8gQWx3YXlzIGVtaXQgdGhlIHJhdyBjbGljayBzbyBob3N0cyBvd25pbmcgdGhlIFVYIGNhbiBpbnRlcmNlcHQgZWFybHkuXG4gICAgdGhpcy5idWxrQWN0aW9uQ2xpY2suZW1pdCh7IGlkOiBldmVudC5pZCwgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkIH0pO1xuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHMgPSAoZXZlbnQuc2VsZWN0ZWQgfHwgW10pLm1hcChyID0+IHI/LmlkKS5maWx0ZXIodiA9PiB2ICE9IG51bGwpO1xuICAgIGlmIChldmVudC5pZCA9PT0gJ21vdmUnKSB7XG4gICAgICB0aGlzLm9wZW5Nb3ZlRGlhbG9nKHNlbGVjdGVkSWRzLCBldmVudC5zZWxlY3RlZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIEZvciBub24tZGlhbG9nIGFjdGlvbnMgKGN1c3RvbSBlbnRyaWVzIGZyb20gaG9zdC1zdXBwbGllZCBgYnVsa0FjdGlvbnNgKSwgaW52b2tlIGltbWVkaWF0ZWx5LlxuICAgIHRoaXMuYnVsa0FjdGlvbkludm9rZWQuZW1pdCh7IGlkOiBldmVudC5pZCwgc2VsZWN0ZWQ6IGV2ZW50LnNlbGVjdGVkIH0pO1xuICB9XG5cbiAgb25CdWxrU2VsZWN0QWxsKGNoZWNrZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAvLyBBcHBseSB0aGUgYWN0aW9uIGxvY2FsbHkgc28gdGhlIGFjdGlvbiB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgd29ya3Mgb3V0LW9mLXRoZS1ib3guXG4gICAgLy8gV2hlbiBjaGVja2VkLCBzZWxlY3QgZXZlcnkgcm93IGluIHRoZSAqY3VycmVudCogZmlsdGVyZWQgc2V0IChpLmUuIGFsbCB0ZXN0cyBpblxuICAgIC8vIHRoZSBzZWxlY3RlZCBmb2xkZXIpLiBXaGVuIHVuY2hlY2tlZCwgY2xlYXIgc2VsZWN0aW9uLlxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IGNoZWNrZWQgPyBbLi4udGhpcy5maWx0ZXJlZFJvd3NdIDogW107XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXNDaGFuZ2UuZW1pdChbLi4udGhpcy5zZWxlY3RlZEl0ZW1zXSk7XG4gICAgdGhpcy5idWxrU2VsZWN0QWxsQ2hhbmdlLmVtaXQoY2hlY2tlZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkJ1bGtEaXNtaXNzKCk6IHZvaWQge1xuICAgIC8vIENsZWFyIHNlbGVjdGlvbiBBTkQgdGhlIHBlci1yb3cgaXNTZWxlY3RlZCBmbGFncyBzbyB0aGUgYWN0aW9uIHRvb2xiYXIgY2xvc2VzXG4gICAgLy8gKGl0J3MgZ2F0ZWQgb24gYGFueVJvd1NlbGVjdGVkYCwgd2hpY2ggcmVhZHMgYm90aCBzZWxlY3RlZEl0ZW1zIGFuZCByb3cgZmxhZ3MpLlxuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvblN0YXRlKCk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoW10pO1xuICAgIHRoaXMuYnVsa0Rpc21pc3MuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuTW92ZURpYWxvZyh0ZXN0SWRzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+LCBzZWxlY3RlZDogYW55W10pOiB2b2lkIHtcbiAgICAvLyBGaXJlIHRoZSBcInJlcXVlc3RlZFwiIGV2ZW50IGZpcnN0IHNvIGEgaG9zdCBjYW4gaW50ZXJjZXB0IHdoZW4gaXQgb3ducyB0aGUgVVguXG4gICAgdGhpcy5tb3ZlUmVxdWVzdGVkLmVtaXQoe1xuICAgICAgdGVzdElkcyxcbiAgICAgIHNlbGVjdGVkLFxuICAgICAgY3VycmVudEZvbGRlcklkOiB0aGlzLnNlbGVjdGVkRm9sZGVySWQsXG4gICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgfSk7XG4gICAgaWYgKCF0aGlzLnVzZUludGVybmFsRGlhbG9ncykgcmV0dXJuO1xuXG4gICAgY29uc3QgY291bnQgPSB0ZXN0SWRzLmxlbmd0aDtcbiAgICBjb25zdCBkZXNjcmlwdGlvbiA9IChjb3VudCA9PT0gMVxuICAgICAgPyB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0Rlc2NyaXB0aW9uU2luZ3VsYXJcbiAgICAgIDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dEZXNjcmlwdGlvblBsdXJhbFxuICAgICkucmVwbGFjZSgne259JywgJycgKyBjb3VudCk7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW48YW55LCBudW1iZXIgfCBudWxsPih7XG4gICAgICB0aXRsZTogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dUaXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICBjb21wb25lbnQ6IE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgZm9sZGVyczogdGhpcy5mb2xkZXJzLFxuICAgICAgICAgIGxhYmVsczogdGhpcy5tb2R1bGFyTGFiZWxzLFxuICAgICAgICAgIGN1cnJlbnRGb2xkZXJJZDogdGhpcy5zZWxlY3RlZEZvbGRlcklkLFxuICAgICAgICAgIC8vIFdoZW4gbW92aW5nIEZST00gVW5vcmdhbmlzZWQsIGRpc2FibGUgdGhlIFVub3JnYW5pc2VkIGRlc3RpbmF0aW9uIHJvdy5cbiAgICAgICAgICByb290RGlzYWJsZWQ6IHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UodW5kZWZpbmVkIGFzIGFueSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByLmdldENvbXBvbmVudEluc3RhbmNlPE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIHIuY2xvc2UoaW5zdGFuY2UgPyBpbnN0YW5jZS5waWNrZWRGb2xkZXJJZCA6IG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh0YXJnZXRGb2xkZXJJZCA9PiB7XG4gICAgICBpZiAodGFyZ2V0Rm9sZGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBjYW5jZWxsZWRcbiAgICAgIHRoaXMudGVzdHNNb3ZlZC5lbWl0KHsgdGVzdElkcywgdGFyZ2V0Rm9sZGVySWQ6IHRhcmdldEZvbGRlcklkID8/IG51bGwgfSk7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25JbnZva2VkLmVtaXQoeyBpZDogJ21vdmUnLCBzZWxlY3RlZCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVucyB0aGUgZm9sZGVyLXBpY2tlciBkaWFsb2cgY29uZmlndXJlZCBmb3IgbW92aW5nIGEgZm9sZGVyIChyYXRoZXIgdGhhbiB0ZXN0cykuXG4gICAqIFRoZSBzb3VyY2UgZm9sZGVyIGl0c2VsZiBpcyBtYXJrZWQgYXMgdGhlIFwiY3VycmVudFwiIGZvbGRlciBzbyBpdCdzIHJlbmRlcmVkIGFzXG4gICAqIGRpc2FibGVkIGluIHRoZSBwaWNrZXIuIE9uIGNvbmZpcm0sIGVtaXRzIGBmb2xkZXJNb3ZlZGAgd2l0aCB0aGUgY2hvc2VuIHBhcmVudC5cbiAgICovXG4gIHByaXZhdGUgb3Blbk1vdmVGb2xkZXJEaWFsb2coY3R4OiBGb2xkZXJNb3ZlUmVxdWVzdGVkUGF5bG9hZCk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZD4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5mb2xkZXJNZW51TW92ZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBNb3ZlVG9Gb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlcnM6IHRoaXMuZm9sZGVycyxcbiAgICAgICAgICBsYWJlbHM6IHRoaXMubW9kdWxhckxhYmVscyxcbiAgICAgICAgICAvLyBSZXVzZSB0aGUgXCJkaXNhYmxlZFwiIHRyZWF0bWVudDogdGhlIGZvbGRlciBiZWluZyBtb3ZlZCBjYW4ndCBiZSBpdHMgb3duIGRlc3RpbmF0aW9uLlxuICAgICAgICAgIGN1cnJlbnRGb2xkZXJJZDogY3R4LmlkLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UodW5kZWZpbmVkIGFzIGFueSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZURpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSByLmdldENvbXBvbmVudEluc3RhbmNlPE1vdmVUb0ZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIHIuY2xvc2UoaW5zdGFuY2UgPyBpbnN0YW5jZS5waWNrZWRGb2xkZXJJZCA6IG51bGwpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZSh0YXJnZXRGb2xkZXJJZCA9PiB7XG4gICAgICBpZiAodGFyZ2V0Rm9sZGVySWQgPT09IHVuZGVmaW5lZCkgcmV0dXJuOyAvLyBjYW5jZWxsZWRcbiAgICAgIHRoaXMuZm9sZGVyTW92ZWQuZW1pdCh7IGlkOiBjdHguaWQsIG5ld1BhcmVudElkOiB0YXJnZXRGb2xkZXJJZCA/PyBudWxsIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBvcGVuQ3JlYXRlRm9sZGVyRGlhbG9nKGluaXRpYWxQYXJlbnRJZDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgeyBuYW1lOiBzdHJpbmc7IHBhcmVudElkOiBudW1iZXIgfCBudWxsOyBjb2xvcjogc3RyaW5nIH0gfCBmYWxzZT4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dUaXRsZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLm1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyRGlhbG9nRGVzY3JpcHRpb24sXG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIGNvbXBvbmVudDogTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgcGFyZW50SWQ6IGluaXRpYWxQYXJlbnRJZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UoZmFsc2UpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm5ld0ZvbGRlckRpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3ByaW1hcnknLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IHIuZ2V0Q29tcG9uZW50SW5zdGFuY2U8TmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50PigpO1xuICAgICAgICAgICAgaWYgKCFpbnN0IHx8ICFpbnN0LmlzVmFsaWQpIHJldHVybiBmYWxzZTsgLy8ga2VlcCB0aGUgZGlhbG9nIG9wZW4gb24gaW52YWxpZCBzdWJtaXRcbiAgICAgICAgICAgIHIuY2xvc2UoeyBuYW1lOiAoaW5zdC5uYW1lIHx8ICcnKS50cmltKCksIHBhcmVudElkOiBpbnN0LnBhcmVudElkLCBjb2xvcjogaW5zdC5jb2xvciB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJ1dHRvbkFsaWdubWVudDogJ3JpZ2h0JyxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgdGhpcy5mb2xkZXJDcmVhdGVkLmVtaXQoeyBwYXJlbnRJZDogcmVzdWx0LnBhcmVudElkLCBuYW1lOiByZXN1bHQubmFtZSwgY29sb3I6IHJlc3VsdC5jb2xvciB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkRlbGV0ZUZvbGRlckRpYWxvZyhjdHg6IEZvbGRlckRlbGV0ZVJlcXVlc3RlZFBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbjxhbnksIHsgc3RyYXRlZ3k6IEZvbGRlckRlbGV0ZVN0cmF0ZWd5IH0gfCBmYWxzZT4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5kZWxldGVGb2xkZXJEaWFsb2dUaXRsZSxcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlck5hbWU6IGN0eC5uYW1lLFxuICAgICAgICAgIHRlc3RDb3VudDogY3R4LnRlc3RDb3VudCxcbiAgICAgICAgICBoYXNQYXJlbnQ6IGN0eC5oYXNQYXJlbnQsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgc3RyYXRlZ3k6IGN0eC5oYXNQYXJlbnQgPyAnbW92ZS10by1wYXJlbnQnIDogJ21vdmUtdG8tdW5vcmdhbmlzZWQnLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGJ1dHRvbnM6IFtcbiAgICAgICAgeyBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLmRlbGV0ZUZvbGRlckRpYWxvZ0NhbmNlbCwgcm9sZTogJ3NlY29uZGFyeScsIGhhbmRsZXI6IHIgPT4gci5jbG9zZShmYWxzZSkgfSxcbiAgICAgICAge1xuICAgICAgICAgIGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMuZGVsZXRlRm9sZGVyRGlhbG9nQ29uZmlybSxcbiAgICAgICAgICByb2xlOiAnd2FybicsXG4gICAgICAgICAgaGFuZGxlcjogciA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnN0ID0gci5nZXRDb21wb25lbnRJbnN0YW5jZTxEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQ+KCk7XG4gICAgICAgICAgICByLmNsb3NlKGluc3QgPyB7IHN0cmF0ZWd5OiBpbnN0LnN0cmF0ZWd5IH0gOiBmYWxzZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBidXR0b25BbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgfSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZm9sZGVyRGVsZXRlZC5lbWl0KHsgaWQ6IGN0eC5pZCwgc3RyYXRlZ3k6IHJlc3VsdC5zdHJhdGVneSB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUm93LXJlb3JkZXIgaGFuZGxlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIHN0YXJ0UmVvcmRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1Jlb3JkZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnJlb3JkZXJTbmFwc2hvdCA9IFsuLi4odGhpcy5wYWdlZFJvd3MgfHwgW10pXTtcbiAgICB0aGlzLnJlb3JkZXJEcmFmdCA9IFsuLi4odGhpcy5wYWdlZFJvd3MgfHwgW10pXTtcbiAgICAvLyBQYXVzZSBhdXRvLXJlZnJlc2ggd2hpbGUgcmVvcmRlcmluZyDigJQgYXZvaWRzIHRoZSB0aW1lciBjbG9iYmVyaW5nIHRoZSBkcmFmdC5cbiAgICB0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID0gdGhpcy5zZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWw7XG4gICAgaWYgKHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2ggPiAwKSB7XG4gICAgICB0aGlzLnNldHVwQXV0b1JlZnJlc2goMCk7XG4gICAgfVxuICAgIHRoaXMuaXNSZW9yZGVyaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwID0gZmFsc2U7XG4gICAgdGhpcy5yZW9yZGVyU3RhcnQuZW1pdCgpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgY2FuY2VsUmVvcmRlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZW9yZGVyaW5nKSByZXR1cm47XG4gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgcGFnZSBvcmRlciBzbyB0aGUgdXNlciBzZWVzIHRoZSBwcmUtZHJhZyBzdGF0ZS5cbiAgICBpZiAodGhpcy5yZW9yZGVyU25hcHNob3QpIHtcbiAgICAgIHRoaXMucGFnZWRSb3dzID0gWy4uLnRoaXMucmVvcmRlclNuYXBzaG90XTtcbiAgICB9XG4gICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICB0aGlzLnJlb3JkZXJDYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgc2F2ZVJlb3JkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIGNvbnN0IG9yZGVyZWQgPSB0aGlzLnJlb3JkZXJEcmFmdCA/IFsuLi50aGlzLnJlb3JkZXJEcmFmdF0gOiBbLi4uKHRoaXMucGFnZWRSb3dzIHx8IFtdKV07XG4gICAgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCA9IHRydWU7XG4gICAgdGhpcy5yZW9yZGVyU2F2ZS5lbWl0KHsgb3JkZXJlZEl0ZW1zOiBvcmRlcmVkIH0pO1xuICAgIC8vIElmIHRoZSBob3N0IG5ldmVyIGZsaXBzIGByZW9yZGVyU2F2aW5nYCAoZS5nLiBzeW5jaHJvbm91cyBuby1vcCksIGV4aXRcbiAgICAvLyBpbW1lZGlhdGVseSBzbyB0aGUgVUkgZG9lc24ndCBnZXQgc3R1Y2sgaW4gXCJTYXZpbmcuLi5cIiBzdGF0ZS5cbiAgICBpZiAoIXRoaXMucmVvcmRlclNhdmluZykge1xuICAgICAgLy8gR2l2ZSB0aGUgaG9zdCBhIG1pY3JvdGFzayB0byBmbGlwIGByZW9yZGVyU2F2aW5nYCB0byB0cnVlIOKAlCBpZiBpdFxuICAgICAgLy8gaGFzbid0LCBhc3N1bWUgbm8gYXN5bmMgd29yayBhbmQgZXhpdC5cbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCAmJiAhdGhpcy5yZW9yZGVyU2F2aW5nKSB7XG4gICAgICAgICAgdGhpcy5leGl0UmVvcmRlck1vZGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgb25Sb3dSZW9yZGVyKGV2ZW50OiB7IHByZXZpb3VzSW5kZXg6IG51bWJlcjsgY3VycmVudEluZGV4OiBudW1iZXI7IG9yZGVyZWREYXRhOiBhbnlbXSB9KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIHRoaXMucmVvcmRlckRyYWZ0ID0gWy4uLmV2ZW50Lm9yZGVyZWREYXRhXTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMucmVvcmRlckRyYWZ0O1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBleGl0UmVvcmRlck1vZGUoKTogdm9pZCB7XG4gICAgdGhpcy5pc1Jlb3JkZXJpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlb3JkZXJTbmFwc2hvdCA9IG51bGw7XG4gICAgdGhpcy5yZW9yZGVyRHJhZnQgPSBudWxsO1xuICAgIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXAgPSBmYWxzZTtcbiAgICAvLyBSZXN0b3JlIHByZXZpb3VzbHktc2VsZWN0ZWQgYXV0by1yZWZyZXNoIGludGVydmFsIChpZiBhbnkpLlxuICAgIGlmICh0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID4gMCkge1xuICAgICAgdGhpcy5zZXR1cEF1dG9SZWZyZXNoKHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2gpO1xuICAgICAgdGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCA9IDA7XG4gICAgfVxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJvdy1kcmFnIHBheWxvYWQgYnVpbGRlciB1c2VkIGJ5IHRoZSBbY3FhUm93RHJhZ10gZGlyZWN0aXZlIHZpYSAoYnVpbGRQYXlsb2FkKS5cbiAgICovXG4gIGJ1aWxkUm93RHJhZ1BheWxvYWQgPSAocm93OiBhbnkpOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0+IHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgLy8gSWYgdGhlIGRyYWdnZWQgcm93IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgc2VsZWN0aW9uLCBkcmFnIHRoZSB3aG9sZSBzZWxlY3Rpb24uXG4gICAgY29uc3Qgcm93SWQgPSByb3c/LmlkO1xuICAgIGNvbnN0IGluU2VsZWN0aW9uID0gcm93SWQgIT0gbnVsbCAmJiBzZWxlY3RlZC5zb21lKHMgPT4gcz8uaWQgPT09IHJvd0lkKTtcbiAgICBjb25zdCBpZHMgPSAoaW5TZWxlY3Rpb24gPyBzZWxlY3RlZCA6IFtyb3ddKS5tYXAociA9PiByPy5pZCkuZmlsdGVyKHYgPT4gdiAhPSBudWxsKTtcbiAgICByZXR1cm4gaWRzO1xuICB9O1xufVxuIiwiPCEtLSBSZXVzYWJsZSBmb2xkZXItaWNvbiBjaGlwLiBSZW5kZXIgdmlhIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPi4gLS0+XG48bmctdGVtcGxhdGUgI2ZvbGRlckljb25DaGlwPlxuICA8c3BhbiBjbGFzcz1cImNxYS1pbmxpbmUtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtdy0xMCBjcWEtaC0xMCBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJnLW5ldXRyYWwtMTAwIGNxYS1zaHJpbmstMFwiPlxuICAgIDxzdmcgd2lkdGg9XCIxN1wiIGhlaWdodD1cIjE1XCIgdmlld0JveD1cIjAgMCAxNyAxNVwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgPHBhdGggZD1cIk0xNS42Mzc1IDEyLjYzNzdDMTUuNjM3NSAxMy4wMzU1IDE1LjQ3OTQgMTMuNDE3MSAxNS4xOTgxIDEzLjY5ODRDMTQuOTE2OCAxMy45Nzk3IDE0LjUzNTMgMTQuMTM3NyAxNC4xMzc1IDE0LjEzNzdIMi4xMzc0NUMxLjczOTYzIDE0LjEzNzcgMS4zNTgxIDEzLjk3OTcgMS4wNzY3OSAxMy42OTg0QzAuNzk1NDg2IDEzLjQxNzEgMC42Mzc0NTEgMTMuMDM1NSAwLjYzNzQ1MSAxMi42Mzc3VjIuMTM3N0MwLjYzNzQ1MSAxLjczOTg3IDAuNzk1NDg2IDEuMzU4MzQgMS4wNzY3OSAxLjA3NzA0QzEuMzU4MSAwLjc5NTczMSAxLjczOTYzIDAuNjM3Njk1IDIuMTM3NDUgMC42Mzc2OTVINS44ODc0NUw3LjM4NzQ1IDIuODg3N0gxNC4xMzc1QzE0LjUzNTMgMi44ODc3IDE0LjkxNjggMy4wNDU3MyAxNS4xOTgxIDMuMzI3MDRDMTUuNDc5NCAzLjYwODM0IDE1LjYzNzUgMy45ODk4NyAxNS42Mzc1IDQuMzg3N1YxMi42Mzc3WlwiIHN0cm9rZT1cIiM2RDZENzRcIiBzdHJva2Utd2lkdGg9XCIxLjI3NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICA8L3N2Zz5cbiAgPC9zcGFuPlxuPC9uZy10ZW1wbGF0ZT5cblxuPCEtLSBSZXVzYWJsZSBcIitcIiBjaGlwIHVzZWQgYnkgdGhlIFwiTmV3IGZvbGRlclwiIHRpbGUuIC0tPlxuPG5nLXRlbXBsYXRlICNhZGRJY29uQ2hpcD5cbiAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctMTAgY3FhLWgtMTAgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1iZy1uZXV0cmFsLTEwMCBjcWEtc2hyaW5rLTBcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxwYXRoIGQ9XCJNOCAzVjEzTTMgOEgxM1wiIHN0cm9rZT1cIiM2RDZENzRcIiBzdHJva2Utd2lkdGg9XCIxLjI3NVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjxkaXYgY2xhc3M9XCJjcWEtdWktcm9vdFwiPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLXJlbGF0aXZlXCI+XG4gICAgPGRpdiBbY2xhc3NdPVwiIXNob3dTZWFyY2hCYXIgPyAnY3FhLWp1c3RpZnktZW5kJyA6ICdjcWEtanVzdGlmeS1iZXR3ZWVuJ1wiIGNsYXNzPVwiY3FhLXctZnVsbCBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtZmxleC13cmFwIGNxYS1tYi0zXCI+XG4gICAgICA8Y3FhLXNlYXJjaC1iYXJcbiAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoQmFyXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlYXJjaFBsYWNlaG9sZGVyXCJcbiAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFZhbHVlXCJcbiAgICAgICAgW3Nob3dDbGVhcl09XCJzaG93Q2xlYXJcIlxuICAgICAgICAodmFsdWVDaGFuZ2UpPVwidmFsdWVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzZWFyY2gpPVwic2VhcmNoKCRldmVudClcIlxuICAgICAgICAoY2xlYXJlZCk9XCJjbGVhcmVkKClcIlxuICAgICAgPjwvY3FhLXNlYXJjaC1iYXI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLWZsZXgtd3JhcFwiPlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgIGljb249XCJvcGVuX2luX25ld1wiXG4gICAgICAgIFt0ZXh0XT1cImlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0J1wiXG4gICAgICAgIFtkaXNhYmxlZF09XCJpc0V4cG9ydGluZ1wiXG4gICAgICAgIChjbGlja2VkKT1cImV4cG9ydENvZGVDbGljaygpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW4+e3sgaXNFeHBvcnRpbmcgPyAnRXhwb3J0aW5nLi4uJyA6ICdFeHBvcnQnIH19PC9zcGFuPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgXG4gICAgICA8IS0tIEV4cG9ydCBDb2RlIE1vZGFsIC0tPlxuICAgICAgPGNxYS1leHBvcnQtY29kZS1tb2RhbFxuICAgICAgICAqbmdJZj1cInNob3dFeHBvcnRCdXR0b25cIlxuICAgICAgICBbaXNPcGVuXT1cImlzRXhwb3J0TW9kYWxPcGVuXCJcbiAgICAgICAgW2Nhc2VzXT1cInNlbGVjdGVkQ2FzZXNGb3JFeHBvcnRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZmFsc2VcIlxuICAgICAgICAoY2xvc2VNb2RhbCk9XCJjbG9zZUV4cG9ydE1vZGFsKClcIlxuICAgICAgICAoZXhwb3J0KT1cIm9uRXhwb3J0TW9kYWxFeHBvcnQoJGV2ZW50KVwiPlxuICAgICAgPC9jcWEtZXhwb3J0LWNvZGUtbW9kYWw+XG4gICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBkcm9wZG93blRlbXBsYXRlIG9mIG90aGVyRHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNlbGVjdERyb3Bkb3duVGVtcGxhdGUgb2Ygb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlTZWxlY3REcm9wZG93blRlbXBsYXRlUmVmXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInNlbGVjdERyb3Bkb3duVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIFxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0ZpbHRlckJ1dHRvblwiXG4gICAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICAgIGljb249XCJhZGRcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgIChjbGlja2VkKT1cInRvZ2dsZUZpbHRlcigpXCJcbiAgICAgICAgPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xXCI+XG4gICAgICAgICAgRmlsdGVyICAgICAgICAgIFxuICAgICAgICAgICA8ZGl2IFtjbGFzc109XCJhcnJvd0NsYXNzZXNcIj5cbiAgICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy0yIGNxYS1oLTEgY3FhLWFic29sdXRlIGNxYS1sZWZ0LVs0cHhdIGNxYS10b3AtWzZweF1cIlxuICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDggNFwiXG4gICAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgZD1cIk0wIDBMNCA0TDggMFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzBCMEIwQ1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLXdpZHRoPVwiMS4zM1wiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIlxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgICA8Y3FhLWNvbHVtbi12aXNpYmlsaXR5XG4gICAgICAgICAgKm5nSWY9XCJzaG93U2V0dGluZ3NCdXR0b25cIlxuICAgICAgICAgIFtjb2x1bW5zXT1cInZpc2liaWxpdHlDb2x1bW5zXCJcbiAgICAgICAgICBbY29sdW1uVmlzaWJpbGl0eV09XCJjb2x1bW5WaXNpYmlsaXR5XCJcbiAgICAgICAgICBbc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsXT1cInNlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbFwiXG4gICAgICAgICAgKGNvbHVtblZpc2liaWxpdHlDaGFuZ2UpPVwib25Db2x1bW5WaXNpYmlsaXR5Q2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIChhdXRvUmVmcmVzaENoYW5nZSk9XCJvbkF1dG9SZWZyZXNoQ2hhbmdlKCRldmVudClcIlxuICAgICAgICA+PC9jcWEtY29sdW1uLXZpc2liaWxpdHk+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93QXV0b1JlZnJlc2hCdXR0b25cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgICBpY29uPVwicmVmcmVzaFwiXG4gICAgICAgICAgKGNsaWNrZWQpPVwiaGFuZGxlUmVmcmVzaENsaWNrKClcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidSZWZyZXNoJ1wiXG4gICAgICAgICAgdG9vbHRpcFBvc2l0aW9uPVwiYmVsb3dcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBidXR0b25UZW1wbGF0ZSBvZiBvdGhlckJ1dHRvbnM7IHRyYWNrQnk6IHRyYWNrQnlUZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJidXR0b25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPGNxYS1zZWdtZW50LWNvbnRyb2xcbiAgICAgICAgICAqbmdJZj1cInNob3dWaWV3TW9kZVRvZ2dsZVwiXG4gICAgICAgICAgc2l6ZT1cImxnXCJcbiAgICAgICAgICBbc2VnbWVudHNdPVwidmlld01vZGVTZWdtZW50c1wiXG4gICAgICAgICAgW3ZhbHVlXT1cInZpZXdNb2RlXCJcbiAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WaWV3TW9kZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvY3FhLXNlZ21lbnQtY29udHJvbD5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dSZW9yZGVyQnV0dG9uICYmICFpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgaWNvbj1cImRyYWdfaW5kaWNhdG9yXCJcbiAgICAgICAgICBbdGV4dF09XCJyZW9yZGVyTGFiZWxzLnJlb3JkZXJCdXR0b25cIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCIhcGFnZWRSb3dzIHx8IHBhZ2VkUm93cy5sZW5ndGggPT09IDAgfHwgaXNUYWJsZUxvYWRpbmcgfHwgaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJzdGFydFJlb3JkZXIoKVwiXG4gICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93UmVvcmRlckJ1dHRvbiAmJiBpc1Jlb3JkZXJpbmdcIj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgICAgIFt0ZXh0XT1cInJlb3JkZXJMYWJlbHMuY2FuY2VsQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZW9yZGVyU2F2aW5nXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cImNhbmNlbFJlb3JkZXIoKVwiXG4gICAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICAgICAgICBbaWNvbl09XCJyZW9yZGVyU2F2aW5nID8gJ2hvdXJnbGFzc19lbXB0eScgOiAnJ1wiXG4gICAgICAgICAgICBbdGV4dF09XCJyZW9yZGVyU2F2aW5nID8gcmVvcmRlckxhYmVscy5zYXZpbmdCdXR0b24gOiByZW9yZGVyTGFiZWxzLmRvbmVCdXR0b25cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cInJlb3JkZXJTYXZpbmdcIlxuICAgICAgICAgICAgKGNsaWNrZWQpPVwic2F2ZVJlb3JkZXIoKVwiXG4gICAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gUmVvcmRlciBtb2RlIGJhbm5lciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiaXNSZW9yZGVyaW5nXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMyBjcWEtcHgtMyBjcWEtcHktMiBjcWEtcm91bmRlZC1tZCBjcWEtYmctWyNGRkZCRUJdIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0ZERTY4QV1cIj5cbiAgICAgIDxzdmcgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiMTNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjhcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiOFwiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIxM1wiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgPC9zdmc+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjOTI0MDBFXVwiPnt7IHJlb3JkZXJMYWJlbHMuYmFubmVyVGl0bGUgfX08L3NwYW4+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LVsjOTI0MDBFXVwiPnt7IHJlb3JkZXJMYWJlbHMuYmFubmVyRGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8Y3FhLXNlbGVjdGVkLWZpbHRlcnNcbiAgICAgIFtmaWx0ZXJBcHBsaWVkXT1cImZpbHRlckFwcGxpZWRcIlxuICAgICAgW2NoaXBzXT1cImNoaXBzXCJcbiAgICAgIChyZW1vdmVDaGlwKT1cIm9uUmVtb3ZlQ2hpcCgkZXZlbnQpXCJcbiAgICAgIChjbGVhckFsbCk9XCJvbkNsZWFyQWxsQ2hpcHMoKVwiXG4gICAgICAob25DbGVhckFsbCk9XCJvbkNsZWFyQWxsLmVtaXQoKVwiXG4gICAgPlxuICAgIDwvY3FhLXNlbGVjdGVkLWZpbHRlcnM+XG5cbiAgICA8Y3FhLWR5bmFtaWMtZmlsdGVyXG4gICAgICAqbmdJZj1cInNob3dGaWx0ZXJQYW5lbFwiXG4gICAgICBbY29uZmlnXT1cImZpbHRlckNvbmZpZ1wiXG4gICAgICBbbW9kZWxdPVwiZmlsdGVyTW9kZWxcIlxuICAgICAgW3Nob3dGaWx0ZXJQYW5lbF09XCJzaG93RmlsdGVyUGFuZWxcIlxuICAgICAgKGZpbHRlcnNDaGFuZ2VkKT1cIm9uRmlsdGVyc0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAoZmlsdGVyc0FwcGxpZWQpPVwib25GaWx0ZXJzQXBwbGllZCgkZXZlbnQpXCJcbiAgICAgIChvbkFwcGx5RmlsdGVyQ2xpY2spPVwib25BcHBseUZpbHRlckNsaWNrLmVtaXQoJGV2ZW50KVwiXG4gICAgICAob25SZXNldEZpbHRlckNsaWNrKT1cImhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKVwiXG4gICAgPlxuICAgIDwvY3FhLWR5bmFtaWMtZmlsdGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdHJldGNoIGNxYS1nYXAtMyBjcWEtbWluLWgtMFwiPlxuICAgICAgPCEtLSBTaWRlYmFyIChvbmx5IHNob3duIGluIG1vZHVsYXIgdmlldykgLS0+XG4gICAgICA8Y3FhLWZvbGRlci1zaWRlYmFyXG4gICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dTaWRlYmFyXCJcbiAgICAgICAgW2ZvbGRlcnNdPVwiZm9sZGVyc1wiXG4gICAgICAgIFtzZWxlY3RlZEZvbGRlcklkXT1cInNlbGVjdGVkRm9sZGVySWRcIlxuICAgICAgICBbZXhwYW5kZWRGb2xkZXJJZHNdPVwiZXhwYW5kZWRGb2xkZXJJZHNcIlxuICAgICAgICBbdW5vcmdhbmlzZWRDb3VudF09XCJ1bm9yZ2FuaXNlZENvdW50XCJcbiAgICAgICAgW2FsbG93Q3JlYXRlXT1cIm1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIlxuICAgICAgICBbYWxsb3dSZW5hbWVdPVwibW9kdWxhckNvbmZpZy5hbGxvd1JlbmFtZUZvbGRlclwiXG4gICAgICAgIFthbGxvd0RlbGV0ZV09XCJtb2R1bGFyQ29uZmlnLmFsbG93RGVsZXRlRm9sZGVyXCJcbiAgICAgICAgW2FsbG93RHJvcF09XCJtb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wXCJcbiAgICAgICAgW3Nob3dDb3VudHNdPVwibW9kdWxhckNvbmZpZy5zaG93Q291bnRzXCJcbiAgICAgICAgW2NvbGxhcHNlZF09XCJzaWRlYmFyQ29sbGFwc2VkXCJcbiAgICAgICAgW2xhYmVsc109XCJtb2R1bGFyTGFiZWxzXCJcbiAgICAgICAgKGZvbGRlclNlbGVjdGVkKT1cIm9uRm9sZGVyU2VsZWN0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJFeHBhbnNpb25Ub2dnbGVkKT1cIm9uRm9sZGVyRXhwYW5zaW9uVG9nZ2xlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckNyZWF0ZWQpPVwib25Gb2xkZXJDcmVhdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyQ3JlYXRlUmVxdWVzdGVkKT1cIm9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyUmVuYW1lZCk9XCJvbkZvbGRlclJlbmFtZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJEZWxldGVkKT1cIm9uRm9sZGVyRGVsZXRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlck1vdmVSZXF1ZXN0ZWQpPVwib25Gb2xkZXJNb3ZlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkKT1cIm9uRm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkKCRldmVudClcIlxuICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRHJvcHBlZCk9XCJvbkZvbGRlckRyb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgIChjb2xsYXBzZWRDaGFuZ2UpPVwib25TaWRlYmFyQ29sbGFwc2VkQ2hhbmdlKCRldmVudClcIlxuICAgICAgPjwvY3FhLWZvbGRlci1zaWRlYmFyPlxuXG4gICAgICA8IS0tIFJpZ2h0IHBhbmUgLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgPCEtLSBCcmVhZGNydW1iIChtb2R1bGFyIHZpZXcsIGZvbGRlciBkcmlsbGVkLWluKSAtLT5cbiAgICAgICAgPG5hdlxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dCcmVhZGNydW1iICYmICFpc1Jvb3RWaWV3XCJcbiAgICAgICAgICBhcmlhLWxhYmVsPVwiRm9sZGVyIHBhdGhcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC02MDAgY3FhLW1iLTNcIlxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJob3ZlcjpjcWEtdGV4dC1pbmRpZ28tNjAwXCIgKGNsaWNrKT1cIm9uRm9sZGVyU2VsZWN0ZWQobnVsbClcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS1hbGlnbi1taWRkbGVcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5mb2xkZXJfb3BlbjwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS1hbGlnbi1taWRkbGUgY3FhLW1sLTFcIj57eyBtb2R1bGFyTGFiZWxzLmFsbEZvbGRlcnMgfX08L3NwYW4+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY3J1bWIgb2YgYnJlYWRjcnVtYlRyYWlsOyBsZXQgbGFzdCA9IGxhc3RcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC00MDBcIj4vPC9zcGFuPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJob3ZlcjpjcWEtdGV4dC1pbmRpZ28tNjAwXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNxYS10ZXh0LW5ldXRyYWwtOTAwXT1cImxhc3RcIlxuICAgICAgICAgICAgICBbY2xhc3MuY3FhLWZvbnQtc2VtaWJvbGRdPVwibGFzdFwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiFsYXN0ICYmIG9uRm9sZGVyU2VsZWN0ZWQoY3J1bWIuaWQpXCJcbiAgICAgICAgICAgID57eyBjcnVtYi5uYW1lIH19PC9idXR0b24+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDwhLS0gRm9sZGVyIGdyaWQ6IG1vZHVsYXIgKyByb290IHZpZXcgLS0+XG4gICAgICAgIDxzZWN0aW9uXG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmIGlzUm9vdFZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93Rm9sZGVyR3JpZCAmJiByb290Rm9sZGVyVGlsZXMubGVuZ3RoXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1tYi00XCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWItMlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC02MDBcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5mb2xkZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC04MDBcIj57eyBtb2R1bGFyTGFiZWxzLm9yZ2FuaXNlZCB9fTwvaDM+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LW5ldXRyYWwtNTAwXCI+XG4gICAgICAgICAgICAgIHt7IHJvb3RGb2xkZXJUaWxlcy5sZW5ndGggPT09IDEgPyBtb2R1bGFyTGFiZWxzLmZvbGRlcnNDb3VudFNpbmd1bGFyIDogbW9kdWxhckxhYmVscy5mb2xkZXJzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyByb290Rm9sZGVyVGlsZXMubGVuZ3RoKSB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1ub3dyYXAgY3FhLWdhcC0zIGNxYS1vdmVyZmxvdy14LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1wYi0yXCI+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBmIG9mIHJvb3RGb2xkZXJUaWxlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbY3FhRm9sZGVyRHJvcF09XCJmLmlkXCJcbiAgICAgICAgICAgICAgW2Ryb3BFbmFibGVkXT1cIm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3BcIlxuICAgICAgICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChmLmlkKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy13aGl0ZSBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtc2hhZG93LXNtIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTkwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBmLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZHVsYXJDb25maWcuc2hvd0NvdW50c1wiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IChmLmNvdW50ID8/IDApID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyAoZi5jb3VudCA/PyAwKSkgfX08bmctY29udGFpbmVyICpuZ0lmPVwiZi5jaGlsZHJlbj8ubGVuZ3RoXCI+IMK3IHt7IGYuY2hpbGRyZW4hLmxlbmd0aCA9PT0gMSA/IG1vZHVsYXJMYWJlbHMub25lU3ViZm9sZGVyIDogbW9kdWxhckxhYmVscy5zdWJmb2xkZXJzQ291bnQucmVwbGFjZSgne259JywgJycgKyBmLmNoaWxkcmVuIS5sZW5ndGgpIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTQwMCBjcWEtc2hyaW5rLTBcIiBzdHlsZT1cImZvbnQtc2l6ZToyMHB4O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHhcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIFwiKyBOZXcgZm9sZGVyXCIgdGlsZSAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2R1bGFyQ29uZmlnLmFsbG93Q3JlYXRlRm9sZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlckNyZWF0ZVJlcXVlc3RlZCh7IHBhcmVudElkOiBudWxsIH0pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2hyaW5rLTAgY3FhLXctWzI0MHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy1uZXV0cmFsLTUwIGhvdmVyOmNxYS1ib3JkZXItWyNEOEQ5RkNdIGhvdmVyOmNxYS1iZy13aGl0ZSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkSWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTYwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBtb2R1bGFyTGFiZWxzLm5ld0ZvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNDAwXCI+e3sgbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcwJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIFN1YmZvbGRlciBzZWN0aW9uOiBtb2R1bGFyICsgZm9sZGVyIHZpZXcuIFNob3duIHdoZW5ldmVyIGRyaWxsZWQgaW4gKGV2ZW4gaWYgbm8gc3ViZm9sZGVycywgc28gdGhlIFwiKyBOZXcgZm9sZGVyXCIgdGlsZSByZW1haW5zIHJlYWNoYWJsZSkuIC0tPlxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiAhaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dTdWJmb2xkZXJTZWN0aW9uICYmIHN1YmZvbGRlclRpbGVzLmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtbWItNFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwic3ViZm9sZGVyVGlsZXMubGVuZ3RoIHx8IG1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS1tYi0yXCI+XG4gICAgICAgICAgICB7eyBtb2R1bGFyTGFiZWxzLnN1YmZvbGRlcnNJbiB9fSB7eyBicmVhZGNydW1iVHJhaWwubGVuZ3RoID8gYnJlYWRjcnVtYlRyYWlsW2JyZWFkY3J1bWJUcmFpbC5sZW5ndGggLSAxXS5uYW1lIDogJycgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtbm93cmFwIGNxYS1nYXAtMyBjcWEtb3ZlcmZsb3cteC1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtcGItMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiBzdWJmb2xkZXJUaWxlc1wiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICBbY3FhRm9sZGVyRHJvcF09XCJmLmlkXCJcbiAgICAgICAgICAgICAgW2Ryb3BFbmFibGVkXT1cIm1vZHVsYXJDb25maWcuYWxsb3dUZXN0RHJhZ0Ryb3BcIlxuICAgICAgICAgICAgICAodGVzdHNEcm9wcGVkKT1cIm9uVGVzdHNEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChmLmlkKVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy13aGl0ZSBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtc2hhZG93LXNtIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb2xkZXJJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTkwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBmLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIm1vZHVsYXJDb25maWcuc2hvd0NvdW50c1wiIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLXRydW5jYXRlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IChmLmNvdW50ID8/IDApID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyAoZi5jb3VudCA/PyAwKSkgfX1cbiAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNDAwIGNxYS1zaHJpbmstMFwiIHN0eWxlPVwiZm9udC1zaXplOjIwcHg7d2lkdGg6MjBweDtoZWlnaHQ6MjBweFwiPmNoZXZyb25fcmlnaHQ8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgICAgIDwhLS0gXCIrIE5ldyBmb2xkZXJcIiB0aWxlIC0tPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdJZj1cIm1vZHVsYXJDb25maWcuYWxsb3dDcmVhdGVGb2xkZXJcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyQ3JlYXRlUmVxdWVzdGVkKHsgcGFyZW50SWQ6IHNlbGVjdGVkRm9sZGVySWQgfSlcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zaHJpbmstMCBjcWEtdy1bMjQwcHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0zIGNxYS10ZXh0LWxlZnQgY3FhLXAtMyBjcWEtcm91bmRlZC1bMTBweF0gY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVswLjVweF0gY3FhLWJvcmRlci1bI0UyRTJFM10gY3FhLWJnLW5ldXRyYWwtNTAgaG92ZXI6Y3FhLWJvcmRlci1bI0Q4RDlGQ10gaG92ZXI6Y3FhLWJnLXdoaXRlIGNxYS10cmFuc2l0aW9uLWNvbG9yc1wiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJhZGRJY29uQ2hpcFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1iYXNlIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS10cnVuY2F0ZSBjcWEtbGVhZGluZy10aWdodFwiPnt7IG1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC00MDBcIj57eyBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJzAnKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9zZWN0aW9uPlxuXG4gICAgICAgIDwhLS0gRm9sZGVyIHBhbmVsIGhlYWRlciBhYm92ZSB0aGUgdGFibGU6IFwiSG90ZWwgU2VhcmNoICgzKVwiICsgQ2xlYXIgZmlsdGVyIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmICFpc1Jvb3RWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd1Vub3JnYW5pc2VkU2VjdGlvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtbWItMSBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXB4LTQgY3FhLXB5LTMgY3FhLXJvdW5kZWQtdC1sZyBjcWEtYmctaW5kaWdvLTUwIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1pbmRpZ28tMTAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtaW5kaWdvLTUwMFwiIHN0eWxlPVwiZm9udC1zaXplOjE4cHg7d2lkdGg6MThweDtoZWlnaHQ6MThweFwiPmZvbGRlcl9vcGVuPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtaW5kaWdvLTcwMFwiPlxuICAgICAgICAgICAgICB7eyBjdXJyZW50Rm9sZGVyTm9kZT8ubmFtZSB9fSAoe3sgY3VycmVudEZvbGRlckRpcmVjdENvdW50IH19KVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtcHgtMyBjcWEtcHktMSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtaW5kaWdvLTcwMCBjcWEtYmctd2hpdGUgY3FhLWJvcmRlciBjcWEtYm9yZGVyLWluZGlnby0yMDAgY3FhLXJvdW5kZWQgaG92ZXI6Y3FhLWJnLWluZGlnby01MFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJTZWxlY3RlZChudWxsKVwiXG4gICAgICAgICAgPnt7IG1vZHVsYXJMYWJlbHMuY2xlYXJGaWx0ZXIgfX08L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBVbm9yZ2FuaXNlZCBzZWN0aW9uIGhlYWRlciBhdCByb290IHZpZXcgLS0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dVbm9yZ2FuaXNlZFNlY3Rpb25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTIgY3FhLW10LTJcIlxuICAgICAgICA+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC02MDBcIiBzdHlsZT1cImZvbnQtc2l6ZToxNnB4O3dpZHRoOjE2cHg7aGVpZ2h0OjE2cHhcIj5pbmJveDwvbWF0LWljb24+XG4gICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC04MDBcIj57eyBtb2R1bGFyTGFiZWxzLnVub3JnYW5pc2VkIH19PC9oMz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LW5ldXRyYWwtNTAwXCI+XG4gICAgICAgICAgICB7eyB1bm9yZ2FuaXNlZENvdW50ID09PSAxID8gbW9kdWxhckxhYmVscy50ZXN0c0NvdW50U2luZ3VsYXIgOiBtb2R1bGFyTGFiZWxzLnRlc3RzQ291bnRQbHVyYWwucmVwbGFjZSgne259JywgJycgKyB1bm9yZ2FuaXNlZENvdW50KSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPCEtLSBUYWJsZSAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1yb3VuZGVkLVs3cHhdIGNxYS1vdmVyZmxvdy1oaWRkZW4gY3FhLWJvcmRlci10IGNxYS1ib3JkZXItbCBjcWEtYm9yZGVyLXIgY3FhLWJvcmRlci1ncmV5LTIwMCBjcWEtcmVsYXRpdmUgY3FhLW92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIoaXNUYWJsZUxvYWRpbmcgfHwgaXNUYWJsZURhdGFMb2FkaW5nKSB8fCAoIWVmZmVjdGl2ZUlzRW1wdHlTdGF0ZSAmJiBwYWdlZFJvd3MgJiYgcGFnZWRSb3dzLmxlbmd0aCA+IDApOyBlbHNlIHN0b3J5RW1wdHlUcGxcIj5cbiAgICAgICAgICAgIDxhcHAtZHluYW1pYy10YWJsZVxuICAgICAgICAgICAgICBbY29sdW1uc109XCJjb21wdXRlZENvbHVtbnNcIlxuICAgICAgICAgICAgICBbZGF0YV09XCJwYWdlZFJvd3NcIlxuICAgICAgICAgICAgICBbcm93U2VsZWN0YWJsZV09XCJyb3dTZWxlY3RhYmxlXCJcbiAgICAgICAgICAgICAgW2VuYWJsZUxvY2FsU29ydF09XCJlbmFibGVMb2NhbFNvcnQgJiYgIWlzUmVvcmRlcmluZ1wiXG4gICAgICAgICAgICAgIFtpc1RhYmxlTG9hZGluZ109XCJpc1RhYmxlTG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtpc1RhYmxlRGF0YUxvYWRpbmddPVwiaXNUYWJsZURhdGFMb2FkaW5nXCJcbiAgICAgICAgICAgICAgW2NlbGxKc29uUGF0aEdldHRlcl09XCJjZWxsSnNvblBhdGhHZXR0ZXJcIlxuICAgICAgICAgICAgICBbb25Kc29uUGF0aENvcGllZEhhbmRsZXJdPVwib25Kc29uUGF0aENvcGllZEhhbmRsZXJcIlxuICAgICAgICAgICAgICBbZW5hYmxlUm93UmVvcmRlcl09XCJpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgICAgICAocm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzb3J0Q2hhbmdlKT1cInNvcnRDaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZW1wdHlUYWJsZVRwbD5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1weS04XCI+XG4gICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cIi9hc3NldHMvaWxsdXN0cmF0aW9ucy9lbXB0eS1zdGF0ZS5zdmdcIiBhbHQ9XCJObyBkYXRhXCIgY2xhc3M9XCJjcWEtdy0zMiBjcWEtaC0zMiBjcWEtbWItNFwiIC8+XG4gICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjcWEtdGV4dC1sZyBjcWEtZm9udC1zZW1pYm9sZCBjcWEtbWItMlwiPk5vIHRlc3QgY2FzZXM8L2gzPlxuICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTUwMCBjcWEtbWItNFwiPlRyeSBhZGp1c3RpbmcgZmlsdGVycyBvciBjcmVhdGUgYSBuZXcgdGVzdCBjYXNlLjwvcD5cbiAgICAgICAgICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiPlNob3cgRmlsdGVyczwvY3FhLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvYXBwLWR5bmFtaWMtdGFibGU+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3N0b3J5RW1wdHlUcGw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXAtNiBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPGNxYS1lbXB0eS1zdGF0ZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiZWZmZWN0aXZlSXNFbXB0eVN0YXRlXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZy50aXRsZVwiXG4gICAgICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXT1cImVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgIFtpbWFnZVVybF09XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLmltYWdlVXJsXCJcbiAgICAgICAgICAgICAgICBbYWN0aW9uc109XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLmFjdGlvbnNcIlxuICAgICAgICAgICAgICAgIChhY3Rpb25DbGljayk9XCJvbkVtcHR5QWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvY3FhLWVtcHR5LXN0YXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGNxYS1wYWdpbmF0aW9uXG4gICAgICAgICAgW3RvdGFsRWxlbWVudHNdPVwic2VydmVyU2lkZVBhZ2luYXRpb24gPyB0b3RhbEVsZW1lbnRzIDogZmlsdGVyZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgICAgW3BhZ2VJbmRleF09XCJwYWdlSW5kZXhcIlxuICAgICAgICAgIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgW3BhZ2VTaXplT3B0aW9uc109XCJwYWdlU2l6ZU9wdGlvbnNcIlxuICAgICAgICAgIFtwYWdlU2l6ZU1lbnVEaXJlY3Rpb25dPVwicGFnZVNpemVNZW51RGlyZWN0aW9uXCJcbiAgICAgICAgICBbcGFnZUl0ZW1Db3VudF09XCJwYWdlZFJvd3MubGVuZ3RoXCJcbiAgICAgICAgICAocGFnaW5hdGUpPVwib25QYWdpbmF0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2NxYS1wYWdpbmF0aW9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJldXNlZCBidWxrIGFjdGlvbiB0b29sYmFyIC0tPlxuICAgIDxkaXYgKm5nSWY9XCJhbnlSb3dTZWxlY3RlZCAmJiBtb2R1bGFyQ29uZmlnLmFsbG93QnVsa1NlbGVjdGlvbiAmJiAhaXNSZW9yZGVyaW5nXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLWJvdHRvbS1bMTguNzVweF0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtdy1mdWxsIGxnOmNxYS1tYXgtdy1bNjglXSBjcWEtc206bWF4LXctWzc1JV0gY3FhLW1heC13LVs5MCVdIGNxYS16LVsxXVwiPlxuICAgICAgPGNxYS10YWJsZS1hY3Rpb24tdG9vbGJhclxuICAgICAgICBbc2VsZWN0ZWRJdGVtc109XCJzZWxlY3RlZEl0ZW1zICYmIHNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCA/IHNlbGVjdGVkSXRlbXMgOiBjdXJyZW50U2VsZWN0ZWRJdGVtc1wiXG4gICAgICAgIFthY3Rpb25zXT1cImVmZmVjdGl2ZUJ1bGtBY3Rpb25zXCJcbiAgICAgICAgW3Nob3dTZWxlY3RBbGxdPVwic2hvd1NlbGVjdEFsbEluVG9vbGJhclwiXG4gICAgICAgIFthbGxTZWxlY3RlZF09XCJhbGxTZWxlY3RlZEluVG9vbGJhclwiXG4gICAgICAgIFtzaG93RGlzbWlzc109XCJzaG93RGlzbWlzc0luVG9vbGJhclwiXG4gICAgICAgIChhY3Rpb25DbGljayk9XCJvbkJ1bGtBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgIChzZWxlY3RBbGxDaGFuZ2UpPVwib25CdWxrU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAoZGlzbWlzcyk9XCJvbkJ1bGtEaXNtaXNzKClcIlxuICAgICAgPjwvY3FhLXRhYmxlLWFjdGlvbi10b29sYmFyPlxuICAgIDwvZGl2PlxuXG4gIDwvZGl2PlxuPC9kaXY+XG5cbiJdfQ==
|
|
1480
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3RlbXBsYXRlcy9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlL21vZHVsYXItdGFibGUtdGVtcGxhdGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZW1wbGF0ZXMvbW9kdWxhci10YWJsZS10ZW1wbGF0ZS9tb2R1bGFyLXRhYmxlLXRlbXBsYXRlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBS1osdUJBQXVCLEVBR3ZCLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXFCLHNCQUFzQixFQUFFLE1BQU0sdURBQXVELENBQUM7QUFLbEgsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFaEYsT0FBTyxFQUNMLHNCQUFzQixFQUN0QixzQkFBc0IsRUFDdEIsc0JBQXNCLEdBaUJ2QixNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDJDQUEyQyxDQUFDO0FBQ3hGLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTdkYsTUFBTSxPQUFPLDZCQUE2QjtJQXFVeEMsWUFBb0IsR0FBc0IsRUFBVSxhQUE0QjtRQUE1RCxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQUFVLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBcFVoRixvQkFBb0I7UUFDWCxzQkFBaUIsR0FBVyxtQkFBbUIsQ0FBQztRQUNoRCxnQkFBVyxHQUFXLEVBQUUsQ0FBQztRQUN6QixjQUFT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QUFzQjtzQkFBL0IsTUFBTTtnQkFNRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBTUcsYUFBYTtzQkFBckIsS0FBSztnQkFFTyxhQUFhO3NCQUF6QixLQUFLO2dCQVNJLFlBQVk7c0JBQXJCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFTRyxXQUFXO3NCQUFwQixNQUFNO2dCQWtCRyxhQUFhO3NCQUF0QixNQUFNO2dCQVFHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFRRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBT0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUtHLFdBQVc7c0JBQXBCLE1BQU07Z0JBTUcsd0JBQXdCO3NCQUFqQyxNQUFNO2dCQU1HLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLHNCQUFzQjtzQkFBL0IsTUFBTTtnQkFDRyx5QkFBeUI7c0JBQWxDLE1BQU07Z0JBQzRCLHNCQUFzQjtzQkFBeEQsU0FBUzt1QkFBQyxzQkFBc0I7Z0JBMkJwQixnQkFBZ0I7c0JBQTVCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25DaGFuZ2VzLFxuICBPbkluaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IER5bmFtaWNGaWx0ZXJJdGVtLCBEeW5hbWljRmlsdGVyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vZmlsdGVycy9keW5hbWljLWZpbHRlci9keW5hbWljLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHluYW1pY1RhYmxlQ29sdW1uIH0gZnJvbSAnLi4vLi4vdGFibGUvZHluYW1pYy10YWJsZS9keW5hbWljLXRhYmxlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIH0gZnJvbSAnLi4vLi4vY29sdW1uLXZpc2liaWxpdHkvY29sdW1uLXZpc2liaWxpdHkuY29tcG9uZW50JztcbmltcG9ydCB7IFRhYmxlQWN0aW9uIH0gZnJvbSAnLi4vLi4vdGFibGUtYWN0aW9uLXRvb2xiYXIvdGFibGUtYWN0aW9uLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEVtcHR5U3RhdGVDb25maWcgfSBmcm9tICcuLi8uLi9lbXB0eS1zdGF0ZS9lbXB0eS1zdGF0ZS1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVNUFRZX1NUQVRFX0lNQUdFUyB9IGZyb20gJy4uLy4uL2Fzc2V0cy9pbWFnZXMvaW1hZ2UtYXNzZXRzLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZGlhbG9nL2RpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIERFRkFVTFRfTU9EVUxBUl9DT05GSUcsXG4gIERFRkFVTFRfTU9EVUxBUl9MQUJFTFMsXG4gIERFRkFVTFRfUkVPUkRFUl9MQUJFTFMsXG4gIEZvbGRlckNyZWF0ZWRQYXlsb2FkLFxuICBGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkLFxuICBGb2xkZXJEZWxldGVTdHJhdGVneSxcbiAgRm9sZGVyRGVsZXRlZFBheWxvYWQsXG4gIEZvbGRlcklkQWNjZXNzb3IsXG4gIEZvbGRlck5vZGUsXG4gIEZvbGRlclJlbmFtZWRQYXlsb2FkLFxuICBGb2xkZXJNb3ZlUmVxdWVzdGVkUGF5bG9hZCxcbiAgRm9sZGVyTW92ZWRQYXlsb2FkLFxuICBGb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWRQYXlsb2FkLFxuICBNb2R1bGFyQ29uZmlnLFxuICBNb2R1bGFyTGFiZWxzLFxuICBSZW9yZGVyTGFiZWxzLFxuICBSZW9yZGVyU2F2ZVBheWxvYWQsXG4gIFRlc3RzTW92ZWRQYXlsb2FkLFxuICBCdWxrQWN0aW9uSW52b2tlZFBheWxvYWQsXG59IGZyb20gJy4vbW9kdWxhci10YWJsZS10ZW1wbGF0ZS5tb2RlbHMnO1xuaW1wb3J0IHsgTW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL21vdmUtdG8tZm9sZGVyLWRpYWxvZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmV3Rm9sZGVyRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi9kaWFsb2dzL25ldy1mb2xkZXItZGlhbG9nLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEZWxldGVGb2xkZXJEaWFsb2dDb21wb25lbnQgfSBmcm9tICcuL2RpYWxvZ3MvZGVsZXRlLWZvbGRlci1kaWFsb2cuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLW1vZHVsYXItdGFibGUtdGVtcGxhdGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kdWxhci10YWJsZS10ZW1wbGF0ZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogW10sXG4gIGhvc3Q6IHsgY2xhc3M6ICdjcWEtdWktcm9vdCcgfSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTW9kdWxhclRhYmxlVGVtcGxhdGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLy8gU2VhcmNoIGJhciBpbnB1dHNcbiAgQElucHV0KCkgc2VhcmNoUGxhY2Vob2xkZXI6IHN0cmluZyA9ICdTZWFyY2ggY29tcG9uZW50cyc7XG4gIEBJbnB1dCgpIHNlYXJjaFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgc2hvd0NsZWFyOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1NlYXJjaEJhcjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dFeHBvcnRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgaXNFeHBvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLy8gU2VhcmNoIGJhciBvdXRwdXRzXG4gIEBPdXRwdXQoKSBvblNlYXJjaENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgb25FeHBvcnRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IGZyYW1ld29yaz86ICdXRUJEUklWRVJfSU8nIHwgJ1NFTEVOSVVNX0pBVkEnOyBzZWxlY3RlZEl0ZW1zOiBhbnlbXSB9IHwgdm9pZD4oKTtcbiAgLy8gRmlsdGVyIG91dHB1dHNcbiAgQE91dHB1dCgpIG9uQXBwbHlGaWx0ZXJDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgb25SZXNldEZpbHRlckNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgb25DbGVhckFsbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZUNoaXAgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvLyBGaWx0ZXIgaW5wdXRzXG4gIEBJbnB1dCgpIGZpbHRlckNvbmZpZzogRHluYW1pY0ZpbHRlckl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBmaWx0ZXJNb2RlbDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICBASW5wdXQoKSBzaG93RmlsdGVyUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KCkgc2hvd0ZpbHRlckJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gT3RoZXIgYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gT3RoZXIgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2YgZHJvcGRvd24gYnV0dG9uIHRlbXBsYXRlcy9jb21wb25lbnRzKVxuICBASW5wdXQoKSBvdGhlckRyb3BEb3duQnV0dG9uczogVGVtcGxhdGVSZWY8YW55PltdID0gW107XG4gIFxuICAvLyBPdGhlciBzZWxlY3QgZHJvcGRvd24gYnV0dG9ucyBpbnB1dCAoYXJyYXkgb2Ygc2VsZWN0IGRyb3Bkb3duIGJ1dHRvbiB0ZW1wbGF0ZXMvY29tcG9uZW50cylcbiAgQElucHV0KCkgb3RoZXJTZWxlY3REcm9wRG93bkJ1dHRvbnM6IFRlbXBsYXRlUmVmPGFueT5bXSA9IFtdO1xuICBcbiAgLy8gTGVnYWN5IHNpbmdsZSBidXR0b24gaW5wdXRzIChkZXByZWNhdGVkLCBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5KVxuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uTGFiZWw6IHN0cmluZyA9ICdPdGhlciBCdXR0b24nO1xuICAvKiogQGRlcHJlY2F0ZWQgVXNlIG90aGVyQnV0dG9ucyBhcnJheSBpbnN0ZWFkICovXG4gIEBJbnB1dCgpIG90aGVyQnV0dG9uVmFyaWFudDogJ2ZpbGxlZCcgfCAnb3V0bGluZWQnIHwgJ3RleHQnIHwgJ2VsZXZhdGVkJyB8ICd0b25hbCcgfCAnZ3JleS1zb2xpZCcgPSAnZmlsbGVkJztcbiAgLyoqIEBkZXByZWNhdGVkIFVzZSBvdGhlckJ1dHRvbnMgYXJyYXkgaW5zdGVhZCAqL1xuICBASW5wdXQoKSBzaG93T3RoZXJCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuICBcbiAgLy8gQWN0aW9uIG1lbnUgYnV0dG9uICh0aHJlZS1kb3QgbWVudSBpbiB0YWJsZSByb3dzKVxuICBASW5wdXQoKSBzaG93QWN0aW9uQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAvLyBTZXR0aW5ncyBhbmQgcmVmcmVzaCBidXR0b25zXG4gIEBJbnB1dCgpIHNob3dTZXR0aW5nc0J1dHRvbjogYm9vbGVhbiA9IHRydWU7XG4gIEBJbnB1dCgpIHNob3dBdXRvUmVmcmVzaEJ1dHRvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgLy8gVmlldy1tb2RlIHRvZ2dsZSAoTGlzdCB8IE1vZHVsYXIpLiBIaWRkZW4gYnkgZGVmYXVsdCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgQElucHV0KCkgc2hvd1ZpZXdNb2RlVG9nZ2xlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIHZpZXdNb2RlOiAnbGlzdCcgfCAnbW9kdWxhcicgPSAnbGlzdCc7XG4gIEBJbnB1dCgpIHZpZXdNb2RlTGFiZWxzOiB7IGxpc3Q6IHN0cmluZzsgbW9kdWxhcjogc3RyaW5nIH0gPSB7IGxpc3Q6ICdMaXN0JywgbW9kdWxhcjogJ01vZHVsYXInIH07XG4gIEBPdXRwdXQoKSB2aWV3TW9kZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8J2xpc3QnIHwgJ21vZHVsYXInPigpO1xuXG4gIGdldCB2aWV3TW9kZVNlZ21lbnRzKCk6IEFycmF5PHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZzsgaWNvbj86IHN0cmluZyB9PiB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgbGFiZWw6IHRoaXMudmlld01vZGVMYWJlbHMubGlzdCwgdmFsdWU6ICdsaXN0JywgaWNvbjogJ3ZpZXdfbGlzdCcgfSxcbiAgICAgIHsgbGFiZWw6IHRoaXMudmlld01vZGVMYWJlbHMubW9kdWxhciwgdmFsdWU6ICdtb2R1bGFyJywgaWNvbjogJ2ZvbGRlcicgfSxcbiAgICBdO1xuICB9XG5cbiAgb25WaWV3TW9kZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgbmV4dCA9IHZhbHVlID09PSAnbW9kdWxhcicgPyAnbW9kdWxhcicgOiAnbGlzdCc7XG4gICAgaWYgKG5leHQgIT09IHRoaXMudmlld01vZGUpIHtcbiAgICAgIHRoaXMudmlld01vZGUgPSBuZXh0O1xuICAgICAgdGhpcy52aWV3TW9kZUNoYW5nZS5lbWl0KG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIERhdGEgaW5wdXRcbiAgQElucHV0KCkgZGF0YTogYW55W10gPSBbXTtcblxuICAvLyBFbXB0eSBzdGF0ZSBpbnB1dHNcbiAgQElucHV0KCkgaXNFbXB0eVN0YXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVDb25maWc6IEVtcHR5U3RhdGVDb25maWcgPSB7XG4gICAgdGl0bGU6ICdObyBEYXRhIEF2YWlsYWJsZSBZZXQnLFxuICAgIGRlc2NyaXB0aW9uOiAnUnVuIG9yIHVwbG9hZCB5b3VyIGZpcnN0IHRlc3QgdG8gc2VlIHlvdXIgYW5hbHl0aWNzIGFuZCB0cmVuZHMgaGVyZS4gV2F0Y2ggeW91ciBxdWFsaXR5IG1ldHJpY3MgY29tZSB0byBsaWZlIHdpdGggcmVhbC10aW1lIGluc2lnaHRzLicsXG4gICAgaW1hZ2VVcmw6IEVNUFRZX1NUQVRFX0lNQUdFUy5EQVNIQk9BUkQsXG4gICAgYWN0aW9uczogW3sgbGFiZWw6ICdSdW4gVGVzdCBTdWl0ZScsIHZhcmlhbnQ6ICdmaWxsZWQnIH1dLFxuICB9O1xuXG4gIC8vIEFjdGlvbiBiYXIgaW5wdXRzXG4gIEBJbnB1dCgpIGFjdGlvbnM6IFRhYmxlQWN0aW9uW10gPSBbXG4gICAgeyBcbiAgICAgIGlkOiAnZGVsZXRlJywgXG4gICAgICBsYWJlbDogJ0RlbGV0ZScsIFxuICAgICAgaWNvbjogJ2RlbGV0ZScsIFxuICAgICAgdG9vbHRpcDogJ0RlbGV0ZSBzZWxlY3RlZCcsXG4gICAgICBvbkNsaWNrOiAoY29udGV4dCkgPT4ge1xuICAgICAgICBjb25zb2xlLmxvZygnRGVsZXRlIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAnZWRpdCcsIFxuICAgICAgbGFiZWw6ICdFZGl0JywgXG4gICAgICBpY29uOiAnZWRpdCcsIFxuICAgICAgdG9vbHRpcDogJ0VkaXQgc2VsZWN0ZWQnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ0VkaXQgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7IFxuICAgICAgaWQ6ICdhZGQtdGFnJywgXG4gICAgICBsYWJlbDogJ0FkZCBUYWcnLCBcbiAgICAgIGljb246ICdsb2NhbF9vZmZlcicsIFxuICAgICAgdG9vbHRpcDogJ0FkZCB0YWdzJyxcbiAgICAgIG9uQ2xpY2s6IChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdBZGQgdGFnIGFjdGlvbiBjbGlja2VkOicsIGNvbnRleHQpO1xuICAgICAgfVxuICAgIH0sXG4gICAgeyBcbiAgICAgIGlkOiAncmVtb3ZlLXRhZycsIFxuICAgICAgbGFiZWw6ICdSZW1vdmUgVGFnJywgXG4gICAgICBpY29uOiAnbGFiZWxfb2ZmJywgXG4gICAgICB0b29sdGlwOiAnUmVtb3ZlIHRhZ3MnLFxuICAgICAgb25DbGljazogKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbW92ZSB0YWcgYWN0aW9uIGNsaWNrZWQ6JywgY29udGV4dCk7XG4gICAgICB9XG4gICAgfSxcbiAgXTtcblxuICAvLyBDaGlwcyBpbnB1dHNcbiAgQElucHV0KCkgY2hpcHM6IEFycmF5PHsga2V5Pzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgdGV4dDogc3RyaW5nOyBmdWxsVGV4dD86IHN0cmluZzsgaGFzTW9yZT86IGJvb2xlYW4gfT4gPSBbXTtcbiAgQElucHV0KCkgZmlsdGVyQXBwbGllZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFRhYmxlIGlucHV0c1xuICBASW5wdXQoKSBjb2x1bW5zOiBEeW5hbWljVGFibGVDb2x1bW5bXSA9IFtdO1xuICBASW5wdXQoKSByb3dTZWxlY3RhYmxlPzogKHJvdzogYW55KSA9PiBib29sZWFuO1xuICBASW5wdXQoKSBzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWw6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIHBhZ2VJbmRleDogbnVtYmVyID0gMDtcbiAgQElucHV0KCkgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBASW5wdXQoKSBwYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzEwLCAyMCwgNDAsIDYwLCA4MF07XG4gIEBJbnB1dCgpIHBhZ2VTaXplTWVudURpcmVjdGlvbjogJ2F1dG8nIHwgJ3VwJyB8ICdkb3duJyA9ICdhdXRvJztcbiAgLy8gU2VydmVyLXNpZGUgcGFnaW5hdGlvbiBjb250cm9sc1xuICBASW5wdXQoKSBzZXJ2ZXJTaWRlUGFnaW5hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSB0b3RhbEVsZW1lbnRzOiBudW1iZXIgPSAwO1xuICBAT3V0cHV0KCkgcGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9PigpO1xuICAvKipcbiAgICogV2hlbiBmYWxzZSwgaGVhZGVyIHNvcnQgZG9lcyBub3QgcmVvcmRlciByb3dzIGxvY2FsbHkgKHVzZSB3aXRoIHNlcnZlclNpZGVQYWdpbmF0aW9uICsgc29ydENoYW5nZSkuXG4gICAqIERlZmF1bHQgdHJ1ZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIEBJbnB1dCgpIGVuYWJsZUxvY2FsU29ydDogYm9vbGVhbiA9IHRydWU7XG4gIEBPdXRwdXQoKSBzb3J0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7XG4gICAgZmllbGRJZDogc3RyaW5nO1xuICAgIGZpZWxkVmFsdWU/OiBzdHJpbmc7XG4gICAgZGlyZWN0aW9uOiAnYXNjJyB8ICdkZXNjJyB8IG51bGw7XG4gIH0+KCk7XG4gIC8vIExvYWRlciBjb250cm9scyAocGFzc2VkIGRvd24gdG8gZHluYW1pYyB0YWJsZSlcbiAgQElucHV0KCkgaXNUYWJsZUxvYWRpbmc/OiBib29sZWFuO1xuICBASW5wdXQoKSBpc1RhYmxlRGF0YUxvYWRpbmc/OiBib29sZWFuO1xuICAvLyBCYWNrd2FyZC1jb21wYXRpYmlsaXR5IGZsYWc7IGlmIHByb3ZpZGVkLCBkeW5hbWljIHRhYmxlIHdpbGwgdXNlIGl0IHdoZW4gc3BlY2lmaWMgZmxhZ3MgYXJlIHVuZGVmaW5lZFxuXG4gIC8vIE9wdGlvbmFsIGdldHRlciBmb3IgSlNPTiBwYXRoIHBlciBjZWxsLiBXaGVuIHByb3ZpZGVkLCBkb3VibGUtY2xpY2tpbmcgYSBjZWxsIGNvcGllcyB0aGUgcGF0aC5cbiAgQElucHV0KCkgY2VsbEpzb25QYXRoR2V0dGVyPzogKHJvd0luZGV4OiBudW1iZXIsIGNvbElkOiBzdHJpbmcsIHJvdzogYW55KSA9PiBzdHJpbmc7XG5cbiAgLy8gT3B0aW9uYWwgaGFuZGxlciBjYWxsZWQgd2hlbiBhIEpTT04gcGF0aCBpcyBjb3BpZWQgZnJvbSBhIHRhYmxlIGNlbGxcbiAgQElucHV0KCkgb25Kc29uUGF0aENvcGllZEhhbmRsZXI/OiAoZXZlbnQ6IHsgcGF0aDogc3RyaW5nOyBzb3VyY2U6IHN0cmluZyB9KSA9PiB2b2lkO1xuXG4gIC8vIFNlbGVjdGVkIGl0ZW1zIChmdWxsIG9iamVjdHMpIGZvciBtYWludGFpbmluZyBzZWxlY3Rpb24gYWNyb3NzIHBhZ2luYXRpb24gKHNlcnZlci1zaWRlKVxuICBASW5wdXQoKSBzZWxlY3RlZEl0ZW1zOiBhbnlbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBhY3Rpb24gdG9vbGJhciByZW5kZXJzIHRoZSBcIlNlbGVjdCBhbGxcIiBhZmZvcmRhbmNlLiBEZWZhdWx0cyB0byBmYWxzZVxuICAgKiBmb3Igbm93IOKAlCBob3N0IG9wdHMgaW4uIE1hdGNoZXMgdGhlIGN1cnJlbnQgcHJvZHVjdCByZXF1aXJlbWVudCB0byBoaWRlIFNlbGVjdCBBbGwuXG4gICAqL1xuICBASW5wdXQoKSBzaG93U2VsZWN0QWxsSW5Ub29sYmFyOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUsIHRoZSBhY3Rpb24gdG9vbGJhciByZW5kZXJzIHRoZSBkaXNtaXNzICjDlykgYWZmb3JkYW5jZS4gRGVmYXVsdHMgdG8gZmFsc2VcbiAgICogZm9yIG5vdyDigJQgaG9zdCBvcHRzIGluLiBNYXRjaGVzIHRoZSBjdXJyZW50IHByb2R1Y3QgcmVxdWlyZW1lbnQgdG8gaGlkZSBDYW5jZWwuXG4gICAqL1xuICBASW5wdXQoKSBzaG93RGlzbWlzc0luVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogQm91bmQgdG8gdGhlIHRvb2xiYXIncyBcIlNlbGVjdCBhbGxcIiBjaGVja2JveCDigJQgZHJpdmVzIHRoZSBjaGVja2VkIHN0YXRlLiAqL1xuICBASW5wdXQoKSBhbGxTZWxlY3RlZEluVG9vbGJhcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEludGVybmFsIHN0YXRlIGZvciBjb2x1bW4gdmlzaWJpbGl0eVxuICBwcml2YXRlIF9jb2x1bW5WaXNpYmlsaXR5OiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnID0ge307XG4gIHByaXZhdGUgX2NhY2hlZFZpc2liaWxpdHlDb2x1bW5zOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4gPSBbXTtcbiAgZmlsdGVyZWRSb3dzOiBhbnlbXSA9IFtdO1xuICBwYWdlZFJvd3M6IGFueVtdID0gW107XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGb2xkZXIgLyBtb2R1bGFyIGlucHV0c1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIEBJbnB1dCgpIGZvbGRlcnM6IEZvbGRlck5vZGVbXSA9IFtdO1xuICBASW5wdXQoKSBzZWxlY3RlZEZvbGRlcklkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgQElucHV0KCkgZXhwYW5kZWRGb2xkZXJJZHM6IG51bWJlcltdID0gW107XG4gIEBJbnB1dCgpIHVub3JnYW5pc2VkQ291bnQ6IG51bWJlciA9IDA7XG4gIEBJbnB1dCgpIGZvbGRlcklkQWNjZXNzb3I6IEZvbGRlcklkQWNjZXNzb3IgPSAocm93OiBhbnkpID0+IHJvdz8uZm9sZGVySWQgPz8gbnVsbDtcbiAgQElucHV0KCkgbW9kdWxhckNvbmZpZzogTW9kdWxhckNvbmZpZyA9IHsgLi4uREVGQVVMVF9NT0RVTEFSX0NPTkZJRyB9O1xuICBASW5wdXQoKSBtb2R1bGFyTGFiZWxzOiBNb2R1bGFyTGFiZWxzID0geyAuLi5ERUZBVUxUX01PRFVMQVJfTEFCRUxTIH07XG4gIEBJbnB1dCgpIGJ1bGtBY3Rpb25zOiBUYWJsZUFjdGlvbltdID0gW107XG4gIEBJbnB1dCgpIHNpZGViYXJDb2xsYXBzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hlbiB0cnVlIChkZWZhdWx0KSwgdGhlIGxpYnJhcnkgb3BlbnMgaXRzIG93biBNb3ZlIGRpYWxvZyBmb3IgY29udmVuaWVuY2VcbiAgICogZHVyaW5nIHRlc3RpbmcuIEhvc3RzIHRha2luZyBvdmVyIEFQSSArIFVYIHNob3VsZCBzZXQgdGhpcyB0byBgZmFsc2VgIGFuZFxuICAgKiBsaXN0ZW4gb24gYG1vdmVSZXF1ZXN0ZWRgIHRvIHJlbmRlciB0aGVpciBvd24uXG4gICAqL1xuICBASW5wdXQoKSB1c2VJbnRlcm5hbERpYWxvZ3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gRm9sZGVyIC8gbW9kdWxhciBvdXRwdXRzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgQE91dHB1dCgpIGZvbGRlclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXIgfCBudWxsPigpO1xuICBAT3V0cHV0KCkgZm9sZGVyRXhwYW5zaW9uVG9nZ2xlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBpZDogbnVtYmVyOyBleHBhbmRlZDogYm9vbGVhbiB9PigpO1xuICBAT3V0cHV0KCkgZm9sZGVyQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyQ3JlYXRlZFBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiKyBOZXcgZm9sZGVyXCI7IGhvc3Qgc2hvdWxkIG9wZW4gYSBjcmVhdGlvbiBtb2RhbC4gKi9cbiAgQE91dHB1dCgpIGZvbGRlckNyZWF0ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbCB9PigpO1xuICBAT3V0cHV0KCkgZm9sZGVyUmVuYW1lZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyUmVuYW1lZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciB0aGUgdXNlciBjb25maXJtcyBmb2xkZXIgZGVsZXRpb24gdmlhIHRoZSBpbnRlcm5hbCBkaWFsb2cgKG9yXG4gICAqIGltbWVkaWF0ZWx5LCB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3NgIGlzIGZhbHNlIGFuZCB0aGUgaG9zdCBkcml2ZXMgdGhlIFVYKS5cbiAgICogUGF5bG9hZCBub3cgaW5jbHVkZXMgdGhlIHVzZXIncyBjaG9zZW4gYHN0cmF0ZWd5YCBmb3Igd2hhdCBoYXBwZW5zIHRvIHRoZVxuICAgKiBmb2xkZXIncyB0ZXN0IGNhc2VzLlxuICAgKi9cbiAgQE91dHB1dCgpIGZvbGRlckRlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckRlbGV0ZWRQYXlsb2FkPigpO1xuICBAT3V0cHV0KCkgdGVzdHNNb3ZlZCA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdHNNb3ZlZFBheWxvYWQ+KCk7XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEJ1bGsgYWN0aW9uIHRvb2xiYXIgc3VyZmFjZSDigJQgbmFtaW5nIG1pcnJvcnMgY3FhLXRhYmxlLXRlbXBsYXRlIHNvIGNvbnN1bWVyc1xuICAvLyBnZXQgdGhlIHNhbWUgZXZlbnRzIGZyb20gZWl0aGVyIGNvbXBvbmVudCAocGx1cyB0aGUgZm9sZGVyIGV2ZW50cyBiZWxvdykuXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKiBGaXJlcyBvbiByYXcgdG9vbGJhciBhY3Rpb24gY2xpY2sg4oCUICpiZWZvcmUqIGFueSBpbnRlcm5hbCBkaWFsb2cgb3BlbnMuICovXG4gIEBPdXRwdXQoKSBidWxrQWN0aW9uQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPHsgaWQ6IHN0cmluZzsgc2VsZWN0ZWQ6IGFueVtdIH0+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB0b29sYmFyJ3MgXCJTZWxlY3QgYWxsXCIgaXMgdG9nZ2xlZC4gKi9cbiAgQE91dHB1dCgpIGJ1bGtTZWxlY3RBbGxDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8qKiBGaXJlcyB3aGVuIHRoZSB0b29sYmFyJ3MgZGlzbWlzcyAow5cpIGlzIGNsaWNrZWQuICovXG4gIEBPdXRwdXQoKSBidWxrRGlzbWlzcyA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgKmFmdGVyKiB0aGUgbGlicmFyeS1pbnRlcm5hbCBtb3ZlLXRvLWZvbGRlciBkaWFsb2cgcmVzb2x2ZXMgd2l0aCBhXG4gICAqIHVzZXIgY29uZmlybWF0aW9uLCBPUiBpbW1lZGlhdGVseSBmb3Igbm9uLWRpYWxvZyBidWxrIGFjdGlvbnMgc3VwcGxpZWQgYnlcbiAgICogdGhlIGhvc3QuIEhvc3RzIHdpdGggdGhlaXIgb3duIFVYIHNob3VsZCBsaXN0ZW4gb24gYGJ1bGtBY3Rpb25DbGlja2AgK1xuICAgKiBgbW92ZVJlcXVlc3RlZGAgYW5kIHRyZWF0IHRoaXMgYXMgdGhlIFwiY29uZmlybWVkXCIgc2lnbmFsLlxuICAgKi9cbiAgQE91dHB1dCgpIGJ1bGtBY3Rpb25JbnZva2VkID0gbmV3IEV2ZW50RW1pdHRlcjxCdWxrQWN0aW9uSW52b2tlZFBheWxvYWQ+KCk7XG5cbiAgQE91dHB1dCgpIHNpZGViYXJDb2xsYXBzZWRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBSb3ctcmVvcmRlciBzdXJmYWNlXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLyoqIFdoZW4gdHJ1ZSwgcmVuZGVycyBhIFwiUmVvcmRlclwiIGJ1dHRvbiBpbiB0aGUgdG9vbGJhci4gSG9zdC1kcml2ZW4uICovXG4gIEBJbnB1dCgpIHNob3dSZW9yZGVyQnV0dG9uOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKlxuICAgKiBIb3N0IGZsaXBzIHRoaXMgdHJ1ZSB3aGlsZSBpdHMgYnVsay11cGRhdGUgQVBJIGNhbGwgaXMgaW4tZmxpZ2h0LiBUaGVcbiAgICogY29tcG9uZW50IGtlZXBzIHRoZSByZW9yZGVyIFVJIHBpbm5lZCAoXCJTYXZpbmcuLi5cIikgd2hpbGUgdHJ1ZSBhbmQgZXhpdHNcbiAgICogcmVvcmRlciBtb2RlIHdoZW4gaXQgZmxpcHMgYmFjayB0byBmYWxzZSAodGhlIFwiZnV0dXJlIEFQSSBjYWxsXCIgaG9vaykuXG4gICAqL1xuICBASW5wdXQoKSByZW9yZGVyU2F2aW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBQYXJ0aWFsIG92ZXJyaWRlIGZvciB0aGUgZGVmYXVsdCByZW9yZGVyIGxhYmVscyAoXCJSZW9yZGVyXCIsIFwiRG9uZVwiLCBldGMuKS4gKi9cbiAgQElucHV0KCkgc2V0IHJlb3JkZXJMYWJlbHMocGFydGlhbDogUGFydGlhbDxSZW9yZGVyTGFiZWxzPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Jlb3JkZXJMYWJlbHMgPSB7IC4uLkRFRkFVTFRfUkVPUkRFUl9MQUJFTFMsIC4uLihwYXJ0aWFsIHx8IHt9KSB9O1xuICB9XG4gIGdldCByZW9yZGVyTGFiZWxzKCk6IFJlb3JkZXJMYWJlbHMge1xuICAgIHJldHVybiB0aGlzLl9yZW9yZGVyTGFiZWxzO1xuICB9XG4gIHByaXZhdGUgX3Jlb3JkZXJMYWJlbHM6IFJlb3JkZXJMYWJlbHMgPSB7IC4uLkRFRkFVTFRfUkVPUkRFUl9MQUJFTFMgfTtcblxuICAvKiogRmlyZXMgd2hlbiB0aGUgdXNlciBjbGlja3MgXCJSZW9yZGVyXCIgYW5kIHRoZSBjb21wb25lbnQgZW50ZXJzIHJlb3JkZXIgbW9kZS4gKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiQ2FuY2VsXCIg4oCUIHRoZSBvcmlnaW5hbCBvcmRlciBpcyBhbHJlYWR5IHJlc3RvcmVkLiAqL1xuICBAT3V0cHV0KCkgcmVvcmRlckNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiRG9uZVwiLiBIb3N0IHNob3VsZCB0YWtlIGBvcmRlcmVkSXRlbXNgLCBjYWxsIGl0c1xuICAgKiBidWxrLXVwZGF0ZSBBUEksIHJlZnJlc2ggYFtkYXRhXWAsIGFuZCBmbGlwIGByZW9yZGVyU2F2aW5nYCBiYWNrIHRvIGBmYWxzZWAg4oCUXG4gICAqIHRoZSBjb21wb25lbnQgd2lsbCB0aGVuIGV4aXQgcmVvcmRlciBtb2RlLlxuICAgKlxuICAgKiBOb3RlOiBmb3Igc2VydmVyLXNpZGUgcGFnaW5hdGlvbiwgYG9yZGVyZWRJdGVtc2AgaXMgdGhlICpjdXJyZW50IHBhZ2Ugc2xpY2UqLFxuICAgKiBub3QgdGhlIGZ1bGwgZGF0YXNldCDigJQgc2FtZSBhcyB0aGUgaW4tbWVtb3J5IHZpZXcgdGhlIHVzZXIgd2FzIGRyYWdnaW5nLlxuICAgKi9cbiAgQE91dHB1dCgpIHJlb3JkZXJTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxSZW9yZGVyU2F2ZVBheWxvYWQ+KCk7XG5cbiAgLyoqIEludGVybmFsIOKAlCB0cnVlIHdoaWxlIHRoZSB1c2VyIGlzIGluIHJlb3JkZXIgbW9kZS4gKi9cbiAgaXNSZW9yZGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBTbmFwc2hvdCBvZiBgcGFnZWRSb3dzYCB0YWtlbiBvbiBlbnRlcjsgdXNlZCB0byByZXZlcnQgb24gY2FuY2VsLiAqL1xuICBwcml2YXRlIHJlb3JkZXJTbmFwc2hvdDogYW55W10gfCBudWxsID0gbnVsbDtcbiAgLyoqIERyYWZ0IG9mIHRoZSByZW9yZGVyZWQgcm93cyAoY3VycmVudCB3b3JraW5nIHN0YXRlKS4gKi9cbiAgcHJpdmF0ZSByZW9yZGVyRHJhZnQ6IGFueVtdIHwgbnVsbCA9IG51bGw7XG4gIC8qKiBBdXRvLXJlZnJlc2ggaW50ZXJ2YWwgY2FwdHVyZWQgb24gZW50ZXIsIHNvIHdlIGNhbiByZXN0b3JlIG9uIGNhbmNlbC9kb25lLiAqL1xuICBwcml2YXRlIHJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoOiBudW1iZXIgPSAwO1xuICAvKiogVHJ1ZSBhZnRlciBEb25lIGhhcyBiZWVuIGNsaWNrZWQsIGF3YWl0aW5nIHRoZSBob3N0J3MgYHJlb3JkZXJTYXZpbmdgIOKGkiBmYWxzZSBmbGlwLiAqL1xuICBwcml2YXRlIHJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIHRoZSBcIk1vdmUgdG8gZm9sZGVyXCIgYnVsayBhY3Rpb24g4oCUICpiZWZvcmUqIHRoZVxuICAgKiBpbnRlcm5hbCBkaWFsb2cgb3BlbnMuIEhvc3RzIHRoYXQgd2FudCB0byByZW5kZXIgdGhlaXIgb3duIG1vZGFsIHNob3VsZFxuICAgKiBzZXQgYHVzZUludGVybmFsRGlhbG9ncyA9IGZhbHNlYCBhbmQgbGlzdGVuIGhlcmUuXG4gICAqL1xuICBAT3V0cHV0KCkgbW92ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8e1xuICAgIHRlc3RJZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47XG4gICAgc2VsZWN0ZWQ6IGFueVtdO1xuICAgIGN1cnJlbnRGb2xkZXJJZDogbnVtYmVyIHwgbnVsbDtcbiAgICBmb2xkZXJzOiBGb2xkZXJOb2RlW107XG4gIH0+KCk7XG5cbiAgLyoqIEZpcmVzIHdoZW5ldmVyIHRoZSBjb21wb25lbnQncyBgc2VsZWN0ZWRJdGVtc2AgY2hhbmdlcyBmcm9tIHdpdGhpbiAoU2VsZWN0IEFsbCAvIERpc21pc3MpLiAqL1xuICBAT3V0cHV0KCkgc2VsZWN0ZWRJdGVtc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgY2xpY2tzIGEgZm9sZGVyJ3MgZGVsZXRlIGFmZm9yZGFuY2Ug4oCUICpiZWZvcmUqIHRoZVxuICAgKiBpbnRlcm5hbCBjb25maXJtYXRpb24gZGlhbG9nIG9wZW5zLiBIb3N0cyBvd25pbmcgdGhlIFVYIGxpc3RlbiBoZXJlLlxuICAgKiBQYXlsb2FkIGluY2x1ZGVzIGB0ZXN0Q291bnRgICsgYGhhc1BhcmVudGAgc28gaG9zdHMgY2FuIHJlbmRlciB0aGUgcmlnaHRcbiAgICogb3B0aW9ucyBpbiB0aGVpciBvd24gbW9kYWwuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyRGVsZXRlUmVxdWVzdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkPigpO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB1c2VyIHBpY2tzIFwiTW92ZSBmb2xkZXJcIiBmcm9tIGEgZm9sZGVyIHJvdydzIGNvbnRleHQgbWVudSDigJRcbiAgICogKmJlZm9yZSogYW55IGRpYWxvZyBvcGVucy4gSG9zdHMgb3duaW5nIHRoZSBVWCBsaXN0ZW4gaGVyZSB3aXRoXG4gICAqIGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIG9wZW4gdGhlaXIgb3duIGZvbGRlciBwaWNrZXIuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyTW92ZVJlcXVlc3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQ+KCk7XG4gIC8qKlxuICAgKiBGaXJlcyBhZnRlciB0aGUgdXNlciBjb25maXJtcyBhIGZvbGRlciBtb3ZlIHZpYSB0aGUgaW50ZXJuYWwgcGlja2VyXG4gICAqIChvciBpbW1lZGlhdGVseSB3aGVuIGB1c2VJbnRlcm5hbERpYWxvZ3MgPSBmYWxzZWAgYW5kIHRoZSBob3N0IGRyaXZlcyBpdCkuXG4gICAqL1xuICBAT3V0cHV0KCkgZm9sZGVyTW92ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlck1vdmVkUGF5bG9hZD4oKTtcbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHVzZXIgcGlja3MgXCJEdXBsaWNhdGUgZm9sZGVyXCIgZnJvbSBhIGZvbGRlciByb3cncyBjb250ZXh0IG1lbnUuXG4gICAqIFRoZSBsaWJyYXJ5IGRvZXNuJ3Qgb3duIHBlcnNpc3RlbmNlLCBzbyB0aGUgaG9zdCBpcyBleHBlY3RlZCB0byBjbG9uZSB0aGVcbiAgICogZm9sZGVyJ3Mgc3VidHJlZSBzZXJ2ZXItc2lkZSBhbmQgKnJlZmVyZW5jZSogKG5vdCBjb3B5KSB0aGUgdGVzdCBjYXNlcy5cbiAgICovXG4gIEBPdXRwdXQoKSBmb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZFBheWxvYWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLCBwcml2YXRlIGRpYWxvZ1NlcnZpY2U6IERpYWxvZ1NlcnZpY2UpIHt9XG4gIHByaXZhdGUgcGVuZGluZ0ZpbHRlcnM6IGFueTtcbiAgcHJpdmF0ZSBhcHBsaWVkRmlsdGVyczogYW55O1xuICBwcml2YXRlIGF1dG9SZWZyZXNoVGltZXI/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRJbnRlcnZhbD47XG4gIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIG9uQXV0b1JlZnJlc2hDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNvbHVtblZpc2liaWxpdHlDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPENvbHVtblZpc2liaWxpdHlDb25maWc+KCk7XG4gIEBPdXRwdXQoKSBhdXRvUmVmcmVzaEludGVydmFsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBWaWV3Q2hpbGQoRHluYW1pY0ZpbHRlckNvbXBvbmVudCkgZHluYW1pY0ZpbHRlckNvbXBvbmVudD86IER5bmFtaWNGaWx0ZXJDb21wb25lbnQ7XG5cbiAgLy8gRGVyaXZlZCBjb2x1bW5zIHdpdGggdmlzaWJpbGl0eSBhcHBsaWVkLlxuICBjb21wdXRlZENvbHVtbnM6IER5bmFtaWNUYWJsZUNvbHVtbltdID0gW107XG4gIC8vIEF1dG8tZ2VuZXJhdGVkIHZpc2liaWxpdHkgY29sdW1ucyBmcm9tIGNvbHVtbnMgaW5wdXRcbiAgdmlzaWJpbGl0eUNvbHVtbnM6IEFycmF5PHsgaWQ6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9PiA9IFtdO1xuXG4gIHByaXZhdGUgdXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk6IHZvaWQge1xuICAgIGNvbnN0IHZpc2liaWxpdHkgPSB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5IHx8IHt9O1xuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICB0aGlzLmNvbXB1dGVkQ29sdW1ucyA9IHNvdXJjZS5tYXAoY29sID0+IHtcbiAgICAgIGlmIChbJ2NoZWNrYm94JywgJ2FjdGlvbnMnXS5pbmNsdWRlcyhjb2wuZmllbGRJZCkpIHtcbiAgICAgICAgcmV0dXJuIGNvbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3cgPSB2aXNpYmlsaXR5W2NvbC5maWVsZElkXTtcbiAgICAgIHJldHVybiB7IC4uLmNvbCwgaXNTaG93OiBzaG93ICE9PSBmYWxzZSB9O1xuICAgIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucyA9IHRoaXMubWFwVmlzaWJpbGl0eUNvbHVtbnMoKTtcbiAgICB0aGlzLnZpc2liaWxpdHlDb2x1bW5zID0gdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnM7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvLyBDb250cm9sbGVkIGNvbHVtbiB2aXNpYmlsaXR5OiBwYXJlbnQgY2FuIHNlZWQgYW5kIHB1c2ggdXBkYXRlcy5cbiAgQElucHV0KCkgc2V0IGNvbHVtblZpc2liaWxpdHkoY2ZnOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKGNmZykge1xuICAgICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eSA9IHsgLi4uY2ZnIH07XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG4gIGdldCBjb2x1bW5WaXNpYmlsaXR5KCk6IENvbHVtblZpc2liaWxpdHlDb25maWcge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5O1xuICB9XG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gfHwgY2hhbmdlc1snaXNFbXB0eVN0YXRlJ10pIHtcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvbXBvbmVudCgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snY29sdW1ucyddKSB7XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnVwZGF0ZUNvbXB1dGVkQ29sdW1ucygpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmlsaXR5Q29sdW1ucygpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snc2VsZWN0ZWRGb2xkZXJJZCddICYmICFjaGFuZ2VzWydzZWxlY3RlZEZvbGRlcklkJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIFBlciB0aGUgYXBwcm92ZWQgcGxhbjogY2xlYXIgc2VsZWN0aW9uIGFuZCByZXNldCBwYWdpbmF0aW9uIG9uIGZvbGRlciBjaGFuZ2UuXG4gICAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ZpZXdNb2RlJ10gJiYgIWNoYW5nZXNbJ3ZpZXdNb2RlJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIC8vIFN3aXRjaGluZyBiZXR3ZWVuIGxpc3QgYW5kIG1vZHVsYXIgY2hhbmdlcyB3aGV0aGVyIHRoZSBmb2xkZXIgZmlsdGVyIGFwcGxpZXMuXG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgfVxuICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW1zJ10gfHwgY2hhbmdlc1snZGF0YSddKSB7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIH1cbiAgICBpZiAoY2hhbmdlc1sncmVvcmRlclNhdmluZyddICYmICFjaGFuZ2VzWydyZW9yZGVyU2F2aW5nJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIGNvbnN0IG5vd1NhdmluZyA9ICEhY2hhbmdlc1sncmVvcmRlclNhdmluZyddLmN1cnJlbnRWYWx1ZTtcbiAgICAgIC8vIEhvc3QgZmluaXNoZWQgaXRzIGJ1bGstdXBkYXRlIGNhbGwg4oCUIGV4aXQgcmVvcmRlciBtb2RlLlxuICAgICAgaWYgKCFub3dTYXZpbmcgJiYgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCkge1xuICAgICAgICB0aGlzLmV4aXRSZW9yZGVyTW9kZSgpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5U3RhdGUpIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gW107XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEluIHNlcnZlci1zaWRlIG1vZGUsIGFzc3VtZSBpbmNvbWluZyBkYXRhIGlzIGFscmVhZHkgYSBwYWdlIHNsaWNlXG4gICAgaWYgKHRoaXMuc2VydmVyU2lkZVBhZ2luYXRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyZWRSb3dzID0gWy4uLnRoaXMuZGF0YV07XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICB0aGlzLmluaXRpYWxpemVDb2x1bW5WaXNpYmlsaXR5KCk7XG4gICAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgdGhpcy5pbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpO1xuICAgIHRoaXMudXBkYXRlQ29tcHV0ZWRDb2x1bW5zKCk7XG4gICAgdGhpcy5yZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBgZmlsdGVyZWRSb3dzYCBmcm9tIGBkYXRhYCBieSBhcHBseWluZyAoYSkgdGhlIGZpZWxkIGZpbHRlcnMgKHN0YXR1cy9wcmlvcml0eS9ldGMuKVxuICAgKiBhbmQgKGIpIHRoZSBmb2xkZXIgZmlsdGVyIGRlcml2ZWQgZnJvbSBgc2VsZWN0ZWRGb2xkZXJJZGAgKyBgZm9sZGVySWRBY2Nlc3NvcmAuXG4gICAqL1xuICBwcml2YXRlIHJlYnVpbGRGaWx0ZXJlZFJvd3MoKTogdm9pZCB7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gdGhpcy5hcHBsaWVkRmlsdGVycyA/PyB7fTtcbiAgICB0aGlzLmZpbHRlcmVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIociA9PiB0aGlzLnBhc3NGaWx0ZXJzKGVmZmVjdGl2ZSwgcikgJiYgdGhpcy5wYXNzRm9sZGVyKHIpKTtcbiAgfVxuXG4gIHByaXZhdGUgcGFzc0ZvbGRlcihyb3c6IGFueSk6IGJvb2xlYW4ge1xuICAgIC8vIExpc3QgdmlldyBpZ25vcmVzIGZvbGRlciBmaWx0ZXJpbmcgZW50aXJlbHkg4oCUIGJlaGF2ZXMgbGlrZSB0aGUgdHJhZGl0aW9uYWwgZmxhdCB0YWJsZS5cbiAgICBpZiAoIXRoaXMuaXNNb2R1bGFyVmlldykgcmV0dXJuIHRydWU7XG4gICAgY29uc3QgZm9sZGVySWQgPSB0aGlzLmZvbGRlcklkQWNjZXNzb3IgPyB0aGlzLmZvbGRlcklkQWNjZXNzb3Iocm93KSA6IHJvdz8uZm9sZGVySWQ7XG4gICAgLy8gUm9vdCB2aWV3OiBzaG93IG9ubHkgcm93cyB0aGF0IGRvIG5vdCBiZWxvbmcgdG8gYW55IGZvbGRlciAodGhlIFwiVW5vcmdhbmlzZWRcIiBidWNrZXQpLlxuICAgIC8vIEZvbGRlciB0aWxlcyBhYm92ZSB0aGUgdGFibGUgYXJlIHRoZSBlbnRyeSBwb2ludCB0byBwZXItZm9sZGVyIGNvbnRlbnRzLlxuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZvbGRlcklkID09IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmb2xkZXJJZCAhPSBudWxsICYmIFN0cmluZyhmb2xkZXJJZCkgPT09IFN0cmluZyh0aGlzLnNlbGVjdGVkRm9sZGVySWQpO1xuICB9XG5cbiAgLyoqIFRydWUgd2hlbiB0aGUgY29tcG9uZW50IHNob3VsZCByZW5kZXIgdGhlIG1vZHVsYXIgKGZvbGRlci1hd2FyZSkgVUkuICovXG4gIGdldCBpc01vZHVsYXJWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdNb2RlID09PSAnbW9kdWxhcic7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNlbGVjdGVkIElEcyBmcm9tIHNlbGVjdGVkSXRlbXMgKG9iamVjdHMpXG4gICAqL1xuICBwcml2YXRlIGdldFNlbGVjdGVkSWRzKCk6IFNldDxudW1iZXI+IHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1zICYmIHRoaXMuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IFNldCh0aGlzLnNlbGVjdGVkSXRlbXMubWFwKGl0ZW0gPT4gTnVtYmVyKGl0ZW0uaWQpKS5maWx0ZXIoaWQgPT4gIWlzTmFOKGlkKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFNldCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXN0b3JlU2VsZWN0aW9uU3RhdGUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG5cbiAgICBpZiAoc2VsZWN0ZWRJZHNTZXQuc2l6ZSA9PT0gMCkge1xuICAgICAgLy8gSWYgbm8gc2VsZWN0ZWQgSURzLCBjbGVhciBhbGwgc2VsZWN0aW9uIHN0YXRlc1xuICAgICAgaWYgKHRoaXMucGFnZWRSb3dzKSB7XG4gICAgICAgIHRoaXMucGFnZWRSb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICBpZiAocm93KSB7XG4gICAgICAgICAgICAocm93IGFzIGFueSkuaXNTZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gUmVzdG9yZSBzZWxlY3Rpb24gc3RhdGUgYmFzZWQgb24gc2VsZWN0ZWRJdGVtc1xuICAgIGlmICh0aGlzLnBhZ2VkUm93cykge1xuICAgICAgdGhpcy5wYWdlZFJvd3MuZm9yRWFjaChyb3cgPT4ge1xuICAgICAgICBpZiAocm93ICYmIHJvdy5pZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKHJvdyBhcyBhbnkpLmlzU2VsZWN0ZWQgPSBzZWxlY3RlZElkc1NldC5oYXMoTnVtYmVyKHJvdy5pZCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBbHNvIHVwZGF0ZSBmaWx0ZXJlZFJvd3MgZm9yIGNvbnNpc3RlbmN5XG4gICAgaWYgKHRoaXMuZmlsdGVyZWRSb3dzKSB7XG4gICAgICB0aGlzLmZpbHRlcmVkUm93cy5mb3JFYWNoKHJvdyA9PiB7XG4gICAgICAgIGlmIChyb3cgJiYgcm93LmlkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAocm93IGFzIGFueSkuaXNTZWxlY3RlZCA9IHNlbGVjdGVkSWRzU2V0LmhhcyhOdW1iZXIocm93LmlkKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplQ29sdW1uVmlzaWJpbGl0eSgpOiB2b2lkIHtcbiAgICAvLyBDYWNoZSB2aXNpYmlsaXR5IGNvbHVtbnMgdG8gYXZvaWQgY3JlYXRpbmcgbmV3IGFycmF5cyBvbiBldmVyeSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgdGhpcy5fY2FjaGVkVmlzaWJpbGl0eUNvbHVtbnMgPSB0aGlzLm1hcFZpc2liaWxpdHlDb2x1bW5zKCk7XG4gICAgLy8gU2VlZCB2aXNpYmlsaXR5IHN0YXRlIGZyb20gZWFjaCBjb2x1bW4ncyBpc1Nob3cgKGRlZmF1bHQgdG8gdHJ1ZSkgc28gY29uc3VtZXJzXG4gICAgLy8gY2FuIHByZS1hcHBseSBwZXJzaXN0ZWQgcHJlZmVyZW5jZXMgdmlhIGNvbHVtbnNbaV0uaXNTaG93LlxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuY29sdW1ucyB8fCBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiB0aGlzLl9jYWNoZWRWaXNpYmlsaXR5Q29sdW1ucykge1xuICAgICAgaWYgKHRoaXMuX2NvbHVtblZpc2liaWxpdHlbY29sLmlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHNyY0NvbCA9IHNvdXJjZS5maW5kKGMgPT4gYy5maWVsZElkID09PSBjb2wuaWQpO1xuICAgICAgICB0aGlzLl9jb2x1bW5WaXNpYmlsaXR5W2NvbC5pZF0gPSBzcmNDb2wgJiYgc3JjQ29sLmlzU2hvdyA9PT0gZmFsc2UgPyBmYWxzZSA6IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0IGFueVJvd1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENoZWNrIGlmIHRoZXJlIGFyZSBhbnkgc2VsZWN0ZWQgaXRlbXMgKGVpdGhlciBvbiBjdXJyZW50IHBhZ2Ugb3IgYWNyb3NzIGFsbCBwYWdlcyB2aWEgc2VsZWN0ZWRJdGVtcylcbiAgICBjb25zdCBoYXNTZWxlY3RlZE9uUGFnZSA9ICEhKHRoaXMucGFnZWRSb3dzICYmIHRoaXMucGFnZWRSb3dzLnNvbWUociA9PiAhIShyIGFzIGFueSkuaXNTZWxlY3RlZCkpO1xuICAgIGNvbnN0IHNlbGVjdGVkSWRzU2V0ID0gdGhpcy5nZXRTZWxlY3RlZElkcygpO1xuICAgIGNvbnN0IGhhc1NlbGVjdGVkQWNyb3NzUGFnZXMgPSBzZWxlY3RlZElkc1NldC5zaXplID4gMDtcbiAgICByZXR1cm4gaGFzU2VsZWN0ZWRPblBhZ2UgfHwgaGFzU2VsZWN0ZWRBY3Jvc3NQYWdlcztcbiAgfVxuXG4gIGdldCBjdXJyZW50U2VsZWN0ZWRJdGVtcygpOiBhbnlbXSB7XG4gICAgLy8gSWYgc2VsZWN0ZWRJdGVtcyAoZnVsbCBvYmplY3RzKSBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGRpcmVjdGx5XG4gICAgLy8gVGhpcyBlbnN1cmVzIGFsbCBzZWxlY3RlZCBpdGVtcyBhcmUgcmV0dXJuZWQsIGluY2x1ZGluZyB0aG9zZSBmcm9tIG90aGVyIHBhZ2VzXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtcyAmJiB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJdGVtcztcbiAgICB9XG4gICAgLy8gRmFsbGJhY2s6IEZvciBjbGllbnQtc2lkZSBwYWdpbmF0aW9uIG9yIHdoZW4gc2VsZWN0ZWRJdGVtcyBpcyBub3QgcHJvdmlkZWQsXG4gICAgLy8gZmlsdGVyIHBhZ2VkUm93cyB0byBnZXQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBjdXJyZW50IHBhZ2Ugb25seVxuICAgIGlmICghdGhpcy5wYWdlZFJvd3MgfHwgdGhpcy5wYWdlZFJvd3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuXG4gICAgY29uc3Qgc2VsZWN0ZWRJZHNTZXQgPSB0aGlzLmdldFNlbGVjdGVkSWRzKCk7XG4gICAgXG4gICAgLy8gRmlsdGVyIHJvd3MgdGhhdCBhcmUgc2VsZWN0ZWRcbiAgICByZXR1cm4gdGhpcy5wYWdlZFJvd3NcbiAgICAgIC5maWx0ZXIociA9PiB7XG4gICAgICAgIGlmICghciB8fCByLmlkID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcbiAgICAgICAgY29uc3Qgcm93SWQgPSBOdW1iZXIoci5pZCk7XG4gICAgICAgIC8vIEluY2x1ZGUgaWYgZWl0aGVyOlxuICAgICAgICAvLyAxLiBUaGUgcm93IGhhcyBpc1NlbGVjdGVkID0gdHJ1ZSAoY3VycmVudCBwYWdlIHNlbGVjdGlvbilcbiAgICAgICAgLy8gMi4gVGhlIHJvdydzIElEIGlzIGluIHNlbGVjdGVkSXRlbXMgKHNlbGVjdGVkIG9uIG90aGVyIHBhZ2VzIG9yIHJlc3RvcmVkIHNlbGVjdGlvbilcbiAgICAgICAgcmV0dXJuICEhKHIgYXMgYW55KS5pc1NlbGVjdGVkIHx8IHNlbGVjdGVkSWRzU2V0Lmhhcyhyb3dJZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIGFjdGlvbkNsaWNrKGRhdGE6IGFueSkge1xuICAgIGNvbnNvbGUubG9nKCdhY3Rpb24gdG9vbGJhcicsIGRhdGEpO1xuICB9XG5cbiAgdmlldyhpZDogbnVtYmVyIHwgc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ1ZpZXcnLCBpZCk7XG4gIH1cblxuICBlZGl0KHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0VkaXQnLCByb3cpO1xuICB9XG5cbiAgZGVsZXRlKHJvdzogYW55KTogdm9pZCB7XG4gICAgY29uc29sZS5sb2coJ0RlbGV0ZScsIHJvdyk7XG4gIH1cblxuICB0b2dnbGVGaWx0ZXIoKTogdm9pZCB7XG4gICAgdGhpcy5zaG93RmlsdGVyUGFuZWwgPSAhdGhpcy5zaG93RmlsdGVyUGFuZWw7XG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlDaGFuZ2UoY2ZnOiBDb2x1bW5WaXNpYmlsaXR5Q29uZmlnKTogdm9pZCB7XG4gICAgdGhpcy5fY29sdW1uVmlzaWJpbGl0eSA9IHsgLi4uY2ZnIH07XG4gICAgdGhpcy51cGRhdGVDb21wdXRlZENvbHVtbnMoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmNvbHVtblZpc2liaWxpdHlDaGFuZ2UuZW1pdCh7IC4uLmNmZyB9KTtcbiAgfVxuXG4gIG9uQXV0b1JlZnJlc2hDaGFuZ2UoaW50ZXJ2YWxNczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWwgPSBpbnRlcnZhbE1zO1xuICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaChpbnRlcnZhbE1zKTtcbiAgICB0aGlzLmF1dG9SZWZyZXNoSW50ZXJ2YWxDaGFuZ2UuZW1pdChpbnRlcnZhbE1zKTtcbiAgICB0aGlzLnRyaWdnZXJSZWxvYWQoKTtcbiAgfVxuXG4gIHZhbHVlQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnVmFsdWUgY2hhbmdlZCcsIHZhbHVlKTtcbiAgICB0aGlzLm9uU2VhcmNoQ2hhbmdlLmVtaXQodmFsdWUpO1xuICB9XG5cbiAgc2VhcmNoKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnU2VhcmNoJywgdmFsdWUpO1xuICB9XG5cbiAgY2xlYXJlZCgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnQ2xlYXJlZCcpO1xuICB9XG5cbiAgb25FbXB0eUFjdGlvbihhY3Rpb246IGFueSkge1xuICAgIGlmIChhY3Rpb24/LmxhYmVsID09PSAnU2hvdyBmaWx0ZXJzJykge1xuICAgICAgdGhpcy50b2dnbGVGaWx0ZXIoKTtcbiAgICB9XG4gIH1cblxuICBvbkZpbHRlcnNDaGFuZ2VkKGN1cnJlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIERlZmVyIGFwcGx5aW5nIGZpbHRlcnMgYW5kIHVwZGF0aW5nIGNoaXBzIHVudGlsIEFwcGx5IEZpbHRlciBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IGN1cnJlbnQ7XG4gIH1cblxuICBvbkZpbHRlcnNBcHBsaWVkKGFwcGxpZWQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc2hvd0ZpbHRlclBhbmVsID0gZmFsc2U7XG4gICAgY29uc3QgZWZmZWN0aXZlID0gYXBwbGllZCA/PyB0aGlzLnBlbmRpbmdGaWx0ZXJzID8/IHt9O1xuICAgIHRoaXMuYXBwbGllZEZpbHRlcnMgPSBlZmZlY3RpdmU7XG4gICAgdGhpcy5yZWJ1aWxkRmlsdGVyZWRSb3dzKCk7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIHRoaXMuYXBwbHlQYWdpbmF0aW9uKCk7XG4gICAgY29uc3QgY2hpcHM6IEFycmF5PHsga2V5Pzogc3RyaW5nOyBsYWJlbD86IHN0cmluZzsgdGV4dDogc3RyaW5nOyBmdWxsVGV4dD86IHN0cmluZzsgaGFzTW9yZT86IGJvb2xlYW4gfT4gPSBbXTtcbiAgICBpZiAoZWZmZWN0aXZlKSB7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhlZmZlY3RpdmUpKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gZWZmZWN0aXZlW2tleV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAnJyB8fCAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSkgY29udGludWU7XG4gICAgICAgIFxuICAgICAgICAvLyBGaW5kIHRoZSBmaWx0ZXIgY29uZmlnIGl0ZW0gZm9yIHRoaXMga2V5XG4gICAgICAgIGNvbnN0IGZpbHRlckNvbmZpZ0l0ZW0gPSB0aGlzLmZpbHRlckNvbmZpZz8uZmluZChjID0+IGMua2V5ID09PSBrZXkpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0gZmlsdGVyQ29uZmlnSXRlbT8ub3B0aW9ucyB8fCBbXTtcbiAgICAgICAgXG4gICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBmaW5kIGRpc3BsYXkgdGV4dCBmcm9tIG9wdGlvbnNcbiAgICAgICAgY29uc3QgZ2V0RGlzcGxheVRleHQgPSAodmFsOiBhbnkpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgIC8vIElmIHZhbHVlIGlzIGFscmVhZHkgYW4gb2JqZWN0IHdpdGggbmFtZS9sYWJlbCwgdXNlIGl0XG4gICAgICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAodmFsLm5hbWUgfHwgdmFsLmxhYmVsIHx8IHZhbC52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWwubmFtZSA/PyB2YWwubGFiZWwgPz8gU3RyaW5nKHZhbC52YWx1ZSA/PyB2YWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBcbiAgICAgICAgICAvLyBMb29rIHVwIHRoZSBvcHRpb24gaW4gdGhlIGNvbmZpZ1xuICAgICAgICAgIGNvbnN0IG9wdGlvbiA9IG9wdGlvbnMuZmluZCgob3B0OiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdElkID0gb3B0LmlkID8/IG9wdC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9wdFZhbHVlID0gb3B0LnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgdmFsU3RyID0gU3RyaW5nKHZhbCk7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKG9wdElkKSA9PT0gdmFsU3RyIHx8IFN0cmluZyhvcHRWYWx1ZSkgPT09IHZhbFN0cjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgICByZXR1cm4gb3B0aW9uLm5hbWUgPz8gb3B0aW9uLmxhYmVsID8/IFN0cmluZyhvcHRpb24udmFsdWUgPz8gdmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gRmFsbGJhY2sgdG8gdGhlIHJhdyB2YWx1ZVxuICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgXG4gICAgICAgIGxldCB0ZXh0ID0gJyc7XG4gICAgICAgIGxldCBsYWJlbCA9IGZpbHRlckNvbmZpZ0l0ZW0/LmxhYmVsO1xuICAgICAgICBcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdGV4dCA9IHZhbHVlLm1hcCgodjogYW55KSA9PiBnZXREaXNwbGF5VGV4dCh2KSkuam9pbignLCAnKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKCdzdGFydCcgaW4gdmFsdWUgfHwgJ2VuZCcgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHMgPSB2YWx1ZS5zdGFydCA/IG5ldyBEYXRlKHZhbHVlLnN0YXJ0KS50b0xvY2FsZURhdGVTdHJpbmcoKSA6ICcnO1xuICAgICAgICAgICAgY29uc3QgZSA9IHZhbHVlLmVuZCA/IG5ldyBEYXRlKHZhbHVlLmVuZCkudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOiAnJztcbiAgICAgICAgICAgIHRleHQgPSBbcywgZV0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAtICcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0ID0gZ2V0RGlzcGxheVRleHQodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gZ2V0RGlzcGxheVRleHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNoaXBzLnB1c2goeyBrZXksIGxhYmVsLCB0ZXh0LCBmdWxsVGV4dDogdGV4dCwgaGFzTW9yZTogdGV4dC5sZW5ndGggPiAzMCB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jaGlwcyA9IGNoaXBzO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgfVxuXG4gIGhhbmRsZVJlc2V0RmlsdGVyQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gQ2xlYXIgY2hpcHMgYW5kIHJlc2V0IGZpbHRlcmVkIGRhdGEgd2hlbiByZXNldCBpcyBjbGlja2VkXG4gICAgdGhpcy5wZW5kaW5nRmlsdGVycyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmFwcGxpZWRGaWx0ZXJzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLnBhZ2VJbmRleCA9IDA7XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgICB0aGlzLm9uUmVzZXRGaWx0ZXJDbGljay5lbWl0KCk7XG4gIH1cblxuICBoYW5kbGVSZWZyZXNoQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5vbkF1dG9SZWZyZXNoQ2xpY2suZW1pdCgpO1xuICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMucmVidWlsZEZpbHRlcmVkUm93cygpO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMub25SZWxvYWQuZW1pdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEF1dG9SZWZyZXNoKGludGVydmFsTXM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuY2xlYXJBdXRvUmVmcmVzaCgpO1xuICAgIGlmIChpbnRlcnZhbE1zICYmIGludGVydmFsTXMgPiAwKSB7XG4gICAgICB0aGlzLmF1dG9SZWZyZXNoVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICAgIHRoaXMudHJpZ2dlclJlbG9hZCgpO1xuICAgICAgfSwgaW50ZXJ2YWxNcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckF1dG9SZWZyZXNoKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmF1dG9SZWZyZXNoVGltZXIpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5hdXRvUmVmcmVzaFRpbWVyKTtcbiAgICAgIHRoaXMuYXV0b1JlZnJlc2hUaW1lciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmNsZWFyQXV0b1JlZnJlc2goKTtcbiAgfVxuXG4gIG9uUGFnaW5hdGUoZTogeyBwYWdlSW5kZXg6IG51bWJlcjsgcGFnZVNpemU6IG51bWJlciB9KTogdm9pZCB7XG4gICAgdGhpcy5wYWdlSW5kZXggPSBlLnBhZ2VJbmRleDtcbiAgICB0aGlzLnBhZ2VTaXplID0gZS5wYWdlU2l6ZTtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgdGhpcy5wYWdlQ2hhbmdlLmVtaXQoeyBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5hcHBseVBhZ2luYXRpb24oKTtcbiAgfVxuXG4gIG9uUGFnZVNpemVDaGFuZ2Uoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHNpemU7XG4gICAgdGhpcy5wYWdlSW5kZXggPSAwO1xuICAgIGlmICh0aGlzLnNlcnZlclNpZGVQYWdpbmF0aW9uKSB7XG4gICAgICB0aGlzLnBhZ2VDaGFuZ2UuZW1pdCh7IHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICB9XG5cbiAgb25SZW1vdmVDaGlwKGNoaXA6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSB0aGlzLmNoaXBzLmZpbHRlcihjID0+IGMgIT09IGNoaXApO1xuICAgIHRoaXMuZmlsdGVyQXBwbGllZCA9IHRoaXMuY2hpcHMubGVuZ3RoID4gMDtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCBjb21wb25lbnQgKHNhbWUgcGF0dGVybiBhcyBleGVjdXRpb24gdGFiKVxuICAgIHRoaXMucmVtb3ZlQ2hpcC5lbWl0KGNoaXApO1xuICB9XG5cbiAgb25DbGVhckFsbENoaXBzKCk6IHZvaWQge1xuICAgIHRoaXMuY2hpcHMgPSBbXTtcbiAgICB0aGlzLmZpbHRlckFwcGxpZWQgPSBmYWxzZTtcbiAgICAvLyBSZXNldCB0aGUgZHluYW1pYy1maWx0ZXIgY29tcG9uZW50IGZvcm0gd2hlbiBjbGVhcmluZyBhbGwgY2hpcHNcbiAgICBpZiAodGhpcy5keW5hbWljRmlsdGVyQ29tcG9uZW50KSB7XG4gICAgICB0aGlzLmR5bmFtaWNGaWx0ZXJDb21wb25lbnQucmVzZXQoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFwcGx5UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXJ2ZXJTaWRlUGFnaW5hdGlvbikge1xuICAgICAgLy8gU2VydmVyIG1vZGU6IHBhcmVudCBzdXBwbGllcyBhbHJlYWR5LXBhZ2luYXRlZCBkYXRhXG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLmZpbHRlcmVkUm93c107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gdGhpcy5wYWdlSW5kZXggKiB0aGlzLnBhZ2VTaXplO1xuICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZTtcbiAgICB0aGlzLnBhZ2VkUm93cyA9IHRoaXMuZmlsdGVyZWRSb3dzLnNsaWNlKHN0YXJ0LCBlbmQpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBWaXNpYmlsaXR5Q29sdW1ucygpOiBBcnJheTx7IGlkOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiAodGhpcy5jb2x1bW5zIHx8IFtdKVxuICAgICAgLmZpbHRlcihjID0+IGMuaXNEZWZhdWx0ID09PSBmYWxzZSlcbiAgICAgIC5tYXAoYyA9PiAoeyBpZDogYy5maWVsZElkLCBsYWJlbDogYy5maWVsZE5hbWUgfHwgYy5maWVsZElkIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplRGF0ZShkOiBhbnkpOiBudW1iZXIgfCBudWxsIHtcbiAgICBpZiAoIWQpIHJldHVybiBudWxsO1xuICAgIGNvbnN0IHRzID0gRGF0ZS5wYXJzZShkKTtcbiAgICByZXR1cm4gaXNOYU4odHMpID8gbnVsbCA6IHRzO1xuICB9XG5cbiAgcHJpdmF0ZSBwYXNzRmlsdGVycyhmaWx0ZXJzOiBhbnksIHJvdzogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKCFmaWx0ZXJzKSByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoZmlsdGVycy5zdGF0dXMgJiYgQXJyYXkuaXNBcnJheShmaWx0ZXJzLnN0YXR1cykgJiYgZmlsdGVycy5zdGF0dXMubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMuc3RhdHVzLmluY2x1ZGVzKHJvdy5zdGF0dXMpKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChmaWx0ZXJzLnByaW9yaXR5ICYmIEFycmF5LmlzQXJyYXkoZmlsdGVycy5wcmlvcml0eSkgJiYgZmlsdGVycy5wcmlvcml0eS5sZW5ndGgpIHtcbiAgICAgIGlmICghZmlsdGVycy5wcmlvcml0eS5pbmNsdWRlcyhyb3cucHJpb3JpdHlOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy50ZXN0VHlwZSAmJiBBcnJheS5pc0FycmF5KGZpbHRlcnMudGVzdFR5cGUpICYmIGZpbHRlcnMudGVzdFR5cGUubGVuZ3RoKSB7XG4gICAgICBpZiAoIWZpbHRlcnMudGVzdFR5cGUuaW5jbHVkZXMocm93LnRlc3RUeXBlKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoZmlsdGVycy5jcmVhdGVkX2RhdGUgJiYgKGZpbHRlcnMuY3JlYXRlZF9kYXRlLnN0YXJ0IHx8IGZpbHRlcnMuY3JlYXRlZF9kYXRlLmVuZCkpIHtcbiAgICAgIGNvbnN0IHN0YXJ0VHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuc3RhcnQpO1xuICAgICAgY29uc3QgZW5kVHMgPSB0aGlzLm5vcm1hbGl6ZURhdGUoZmlsdGVycy5jcmVhdGVkX2RhdGUuZW5kKTtcbiAgICAgIGNvbnN0IHJvd1RzID0gdGhpcy5ub3JtYWxpemVEYXRlKHJvdy5jcmVhdGVkQXQpO1xuICAgICAgaWYgKHJvd1RzICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHN0YXJ0VHMgIT0gbnVsbCAmJiByb3dUcyA8IHN0YXJ0VHMpIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKGVuZFRzICE9IG51bGwgJiYgcm93VHMgPiBlbmRUcykgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHRyYWNrQnlUZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZihpbmRleDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICAvLyBFeHBvcnQgbW9kYWwgc3RhdGVcbiAgaXNFeHBvcnRNb2RhbE9wZW46IGJvb2xlYW4gPSBmYWxzZTtcblxuICBleHBvcnRDb2RlQ2xpY2soKTogdm9pZCB7XG4gICAgLy8gR2V0IHNlbGVjdGVkIGl0ZW1zXG4gICAgY29uc3Qgc2VsZWN0ZWRJdGVtcyA9IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXM7XG4gICAgaWYgKHNlbGVjdGVkSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlbiBubyBpdGVtcyBhcmUgc2VsZWN0ZWRcbiAgICAgIHRoaXMub25FeHBvcnRDbGljay5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSB0cnVlO1xuICB9XG5cbiAgY2xvc2VFeHBvcnRNb2RhbCgpOiB2b2lkIHtcbiAgICB0aGlzLmlzRXhwb3J0TW9kYWxPcGVuID0gZmFsc2U7XG4gIH1cblxuICBvbkV4cG9ydE1vZGFsRXhwb3J0KHJlc3VsdDogeyB0eXBlOiAnbG9jYWwnIHwgJ2VtYWlsJzsgZW1haWxzPzogc3RyaW5nW107IGZyYW1ld29yazogJ1dFQkRSSVZFUl9JTycgfCAnU0VMRU5JVU1fSkFWQScgfSk6IHZvaWQge1xuICAgIHRoaXMuaXNFeHBvcnRNb2RhbE9wZW4gPSBmYWxzZTtcbiAgICAvLyBFbWl0IGV2ZW50IHRvIHBhcmVudCB3aXRoIGV4cG9ydCByZXN1bHRcbiAgICB0aGlzLm9uRXhwb3J0Q2xpY2suZW1pdCh7XG4gICAgICB0eXBlOiByZXN1bHQudHlwZSxcbiAgICAgIGVtYWlsczogcmVzdWx0LmVtYWlscyxcbiAgICAgIGZyYW1ld29yazogcmVzdWx0LmZyYW1ld29yayxcbiAgICAgIHNlbGVjdGVkSXRlbXM6IHRoaXMuY3VycmVudFNlbGVjdGVkSXRlbXNcbiAgICB9KTtcbiAgfVxuXG4gIGdldCBzZWxlY3RlZENhc2VzRm9yRXhwb3J0KCk6IEFycmF5PHsgaWQ/OiBudW1iZXI7IG5hbWU/OiBzdHJpbmcgfT4ge1xuICAgIHJldHVybiB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zLm1hcChpdGVtID0+ICh7XG4gICAgICBpZDogaXRlbS5pZCxcbiAgICAgIG5hbWU6IGl0ZW0ubmFtZSB8fCBpdGVtLnRpdGxlIHx8ICdVbm5hbWVkJ1xuICAgIH0pKTtcbiAgfVxuICBnZXQgYXJyb3dDbGFzc2VzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFzZUNsYXNzZXMgPSBbXG4gICAgICAnY3FhLXctNCcsXG4gICAgICAnY3FhLWgtNCcsXG4gICAgICAnY3FhLXJlbGF0aXZlJyxcbiAgICAgICdjcWEtdHJhbnNpdGlvbi10cmFuc2Zvcm0nXG4gICAgXTtcblxuICAgIGlmICh0aGlzLnNob3dGaWx0ZXJQYW5lbCkge1xuICAgICAgYmFzZUNsYXNzZXMucHVzaCgnY3FhLXJvdGF0ZS0xODAnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYmFzZUNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBGb2xkZXIgLyBtb2R1bGFyIGhlbHBlcnNcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBGbGF0IGxpc3Qgb2Ygcm9vdC1sZXZlbCBmb2xkZXJzIGZvciB0aGUgXCJPcmdhbmlzZWRcIiBncmlkIG9uIHRoZSByb290IHZpZXcuXG4gICAqL1xuICBnZXQgcm9vdEZvbGRlclRpbGVzKCk6IEZvbGRlck5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZm9sZGVycyB8fCBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJmb2xkZXJzIG9mIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIChmb3IgdGhlIFwiU3ViZm9sZGVycyBpbiAuLi5cIiBncmlkKS5cbiAgICovXG4gIGdldCBzdWJmb2xkZXJUaWxlcygpOiBGb2xkZXJOb2RlW10ge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG5vZGUgPSB0aGlzLmZpbmRGb2xkZXIodGhpcy5mb2xkZXJzLCB0aGlzLnNlbGVjdGVkRm9sZGVySWQpO1xuICAgIHJldHVybiBub2RlPy5jaGlsZHJlbiA/PyBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBCcmVhZGNydW1iIHRyYWlsIGZyb20gXCJBbGwgZm9sZGVyc1wiIGRvd24gdG8gdGhlIGN1cnJlbnRseS1zZWxlY3RlZCBmb2xkZXIuXG4gICAqL1xuICBnZXQgYnJlYWRjcnVtYlRyYWlsKCk6IEZvbGRlck5vZGVbXSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gW107XG4gICAgY29uc3QgdHJhaWw6IEZvbGRlck5vZGVbXSA9IFtdO1xuICAgIHRoaXMuYnVpbGRUcmFpbCh0aGlzLmZvbGRlcnMsIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCwgdHJhaWwpO1xuICAgIHJldHVybiB0cmFpbDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRUcmFpbChub2RlczogRm9sZGVyTm9kZVtdLCB0YXJnZXRJZDogbnVtYmVyLCBhY2M6IEZvbGRlck5vZGVbXSk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgbiBvZiBub2RlcyB8fCBbXSkge1xuICAgICAgYWNjLnB1c2gobik7XG4gICAgICAvLyBVc2UgU3RyaW5nKCkgY29lcmNpb24gZm9yIHNhZmV0eSBpbiBjYXNlIGlkcyBhcnJpdmUgYXMgZWl0aGVyIG51bWJlciBvclxuICAgICAgLy8gc3RyaW5nIGZyb20gZGlmZmVyZW50IEFQSS90ZXN0IGRhdGEgc2hhcGVzIChlLmcuIHJhdyBKU09OIHBhcnNlIHJlc3VsdHMpLlxuICAgICAgaWYgKFN0cmluZyhuLmlkKSA9PT0gU3RyaW5nKHRhcmdldElkKSkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAobi5jaGlsZHJlbiAmJiB0aGlzLmJ1aWxkVHJhaWwobi5jaGlsZHJlbiwgdGFyZ2V0SWQsIGFjYykpIHJldHVybiB0cnVlO1xuICAgICAgYWNjLnBvcCgpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIGZpbmRGb2xkZXIobm9kZXM6IEZvbGRlck5vZGVbXSwgdGFyZ2V0SWQ6IG51bWJlcik6IEZvbGRlck5vZGUgfCBudWxsIHtcbiAgICBmb3IgKGNvbnN0IG4gb2Ygbm9kZXMgfHwgW10pIHtcbiAgICAgIGlmIChTdHJpbmcobi5pZCkgPT09IFN0cmluZyh0YXJnZXRJZCkpIHJldHVybiBuO1xuICAgICAgY29uc3QgZm91bmQgPSBuLmNoaWxkcmVuID8gdGhpcy5maW5kRm9sZGVyKG4uY2hpbGRyZW4sIHRhcmdldElkKSA6IG51bGw7XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBmb3VuZDtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIFwicm9vdFwiIHZpZXcgKG5vIGZvbGRlciBzZWxlY3RlZCkuIENvbnRyb2xzIHdoaWNoXG4gICAqIHNlY3Rpb25zIHJlbmRlciBvbiB0aGUgcmlnaHQtaGFuZCBwYW5lLlxuICAgKi9cbiAgZ2V0IGlzUm9vdFZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsO1xuICB9XG5cbiAgLyoqIFRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIG5vZGUgKG9yIG51bGwgYXQgcm9vdCkuICovXG4gIGdldCBjdXJyZW50Rm9sZGVyTm9kZSgpOiBGb2xkZXJOb2RlIHwgbnVsbCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgdGhpcy5zZWxlY3RlZEZvbGRlcklkKTtcbiAgfVxuXG4gIC8qKiBDb3VudCBvZiB0ZXN0IGNhc2VzIGRpcmVjdGx5IHVuZGVyIHRoZSBjdXJyZW50bHktc2VsZWN0ZWQgZm9sZGVyIChleGNsdWRpbmcgZGVzY2VuZGFudHMpLlxuICAgKiAgUmVhZHMgYEZvbGRlck5vZGUuY291bnRgIHNvIHRoZSBoZWFkZXIgYmFkZ2UgbWF0Y2hlcyB0aGUgc2lkZWJhciByb3cgY291bnRcbiAgICogIChmb2xkZXItc2lkZWJhci5jb21wb25lbnQuaHRtbCByZW5kZXJzIHRoZSBzYW1lIGByb3cubm9kZS5jb3VudGApLiBVc2luZ1xuICAgKiAgYGZpbHRlcmVkUm93cy5sZW5ndGhgIGhlcmUgd291bGQgb25seSByZWZsZWN0IHRoZSBjdXJyZW50bHktcmVuZGVyZWQgcGFnZS4gKi9cbiAgZ2V0IGN1cnJlbnRGb2xkZXJEaXJlY3RDb3VudCgpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudEZvbGRlck5vZGU/LmNvdW50ID8/IDA7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgZW1wdHktc3RhdGUgc2xvdCB3aGVuIHRoZSBob3N0IGV4cGxpY2l0bHkgb3B0cyBpbiwgT1Igd2hlbiB0aGVcbiAgICogdGFibGUgd291bGQgb3RoZXJ3aXNlIHJlbmRlciBibGFuayAobm8gbG9hZGluZyArIG5vIHJvd3MpLiBVc2luZyBhIGRlcml2ZWRcbiAgICogZmxhZyBrZWVwcyB0aGUgaG9zdCBjb250cmFjdCBpZGVudGljYWwgdG8gYGNxYS10YWJsZS10ZW1wbGF0ZWAgd2hpbGUgbGV0dGluZ1xuICAgKiB0aGUgbW9kdWxhciB2aWV3IHNob3cgXCJObyBUZXN0IENhc2UgRm91bmRcIiBvdXQgb2YgdGhlIGJveCDigJQgdGhlIGVhcmxpZXIgYXNrLlxuICAgKi9cbiAgZ2V0IGVmZmVjdGl2ZUlzRW1wdHlTdGF0ZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5pc0VtcHR5U3RhdGUpIHJldHVybiB0cnVlO1xuICAgIGlmICh0aGlzLmlzVGFibGVMb2FkaW5nIHx8IHRoaXMuaXNUYWJsZURhdGFMb2FkaW5nKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICF0aGlzLnBhZ2VkUm93cyB8fCB0aGlzLnBhZ2VkUm93cy5sZW5ndGggPT09IDA7XG4gIH1cblxuICAvKipcbiAgICogUGlja3MgdGhlIGhvc3QtcHJvdmlkZWQgYGVtcHR5U3RhdGVDb25maWdgIHdoZW4gdGhlIGhvc3QgZmxhZ2dlZCB0aGUgc3RhdGVcbiAgICogaXRzZWxmOyBvdGhlcndpc2UgZmFsbHMgYmFjayB0byBhIGxpYnJhcnktb3duZWQgXCJObyBUZXN0IENhc2UgRm91bmRcIiBjb25maWdcbiAgICogZHJpdmVuIGJ5IGBtb2R1bGFyTGFiZWxzYC5cbiAgICovXG4gIGdldCBlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnKCk6IEVtcHR5U3RhdGVDb25maWcge1xuICAgIGlmICh0aGlzLmlzRW1wdHlTdGF0ZSkgcmV0dXJuIHRoaXMuZW1wdHlTdGF0ZUNvbmZpZztcbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5lbXB0eU5vVGVzdHNJbkZvbGRlclRpdGxlLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMubW9kdWxhckxhYmVscy5lbXB0eU5vVGVzdHNJbkZvbGRlckRlc2NyaXB0aW9uLFxuICAgICAgaW1hZ2VVcmw6IEVNUFRZX1NUQVRFX0lNQUdFUy5URVNUX0NBU0UsXG4gICAgICBhY3Rpb25zOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgb25Gb2xkZXJTZWxlY3RlZChpZDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCA9IGlkO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgIHRoaXMucGFnZUluZGV4ID0gMDtcbiAgICB0aGlzLnJlYnVpbGRGaWx0ZXJlZFJvd3MoKTtcbiAgICB0aGlzLmFwcGx5UGFnaW5hdGlvbigpO1xuICAgIHRoaXMuZm9sZGVyU2VsZWN0ZWQuZW1pdChpZCk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkZvbGRlckV4cGFuc2lvblRvZ2dsZWQoZXZlbnQ6IHsgaWQ6IG51bWJlcjsgZXhwYW5kZWQ6IGJvb2xlYW4gfSk6IHZvaWQge1xuICAgIGNvbnN0IHNldCA9IG5ldyBTZXQodGhpcy5leHBhbmRlZEZvbGRlcklkcyB8fCBbXSk7XG4gICAgaWYgKGV2ZW50LmV4cGFuZGVkKSB7XG4gICAgICBzZXQuYWRkKGV2ZW50LmlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0LmRlbGV0ZShldmVudC5pZCk7XG4gICAgfVxuICAgIHRoaXMuZXhwYW5kZWRGb2xkZXJJZHMgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgdGhpcy5mb2xkZXJFeHBhbnNpb25Ub2dnbGVkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25Gb2xkZXJDcmVhdGVkKHBheWxvYWQ6IEZvbGRlckNyZWF0ZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5mb2xkZXJDcmVhdGVkLmVtaXQocGF5bG9hZCk7XG4gIH1cblxuICBvbkZvbGRlckNyZWF0ZVJlcXVlc3RlZChwYXlsb2FkOiB7IHBhcmVudElkOiBudW1iZXIgfCBudWxsIH0pOiB2b2lkIHtcbiAgICAvLyBFbWl0IHRoZSBcInJlcXVlc3RlZFwiIGV2ZW50IGZpcnN0IHNvIGEgaG9zdCBjYW4gaW50ZXJjZXB0IHdoZW4gaXQgb3ducyB0aGUgVVguXG4gICAgdGhpcy5mb2xkZXJDcmVhdGVSZXF1ZXN0ZWQuZW1pdChwYXlsb2FkKTtcbiAgICBpZiAoIXRoaXMudXNlSW50ZXJuYWxEaWFsb2dzKSByZXR1cm47XG4gICAgdGhpcy5vcGVuQ3JlYXRlRm9sZGVyRGlhbG9nKHBheWxvYWQucGFyZW50SWQpO1xuICB9XG5cbiAgb25Gb2xkZXJSZW5hbWVkKHBheWxvYWQ6IEZvbGRlclJlbmFtZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgdGhpcy5mb2xkZXJSZW5hbWVkLmVtaXQocGF5bG9hZCk7XG4gIH1cblxuICAvKipcbiAgICogV2lyZWQgdG8gdGhlIHNpZGViYXIncyBgZm9sZGVyRGVsZXRlZGAgb3V0cHV0IOKAlCB3aGljaCBmaXJlcyBvbiBkZWxldGUtaWNvblxuICAgKiAqY2xpY2sqLCBub3Qgb24gY29uZmlybWF0aW9uLiBXZSByZS1lbWl0IGEgYGZvbGRlckRlbGV0ZVJlcXVlc3RlZGAgZXZlbnRcbiAgICogZmlyc3QgKHNvIGhvc3RzIGNhbiBpbnRlcmNlcHQpIGFuZCwgd2hlbiBgdXNlSW50ZXJuYWxEaWFsb2dzYCBpcyBlbmFibGVkLFxuICAgKiBvcGVuIHRoZSBjb25maXJtYXRpb24gZGlhbG9nLiBgZm9sZGVyRGVsZXRlZGAgbm93IG9ubHkgZmlyZXMgYWZ0ZXIgY29uZmlybS5cbiAgICovXG4gIG9uRm9sZGVyRGVsZXRlZChwYXlsb2FkOiB7IGlkOiBudW1iZXIgfSk6IHZvaWQge1xuICAgIGNvbnN0IGN0eCA9IHRoaXMuYnVpbGREZWxldGVDb250ZXh0KHBheWxvYWQuaWQpO1xuICAgIHRoaXMuZm9sZGVyRGVsZXRlUmVxdWVzdGVkLmVtaXQoY3R4KTtcbiAgICBpZiAoIXRoaXMudXNlSW50ZXJuYWxEaWFsb2dzKSByZXR1cm47XG4gICAgdGhpcy5vcGVuRGVsZXRlRm9sZGVyRGlhbG9nKGN0eCk7XG4gIH1cblxuICAvKiogQnVpbGRzIHRoZSB7IGlkLCBuYW1lLCB0ZXN0Q291bnQsIGhhc1BhcmVudCB9IHBheWxvYWQgdXNlZCBieSBkZWxldGUgZXZlbnRzL2RpYWxvZ3MuICovXG4gIHByaXZhdGUgYnVpbGREZWxldGVDb250ZXh0KGZvbGRlcklkOiBudW1iZXIpOiBGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgZm9sZGVySWQpO1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZm9sZGVySWQsXG4gICAgICBuYW1lOiBub2RlPy5uYW1lID8/ICcnLFxuICAgICAgdGVzdENvdW50OiB0aGlzLmNvdW50VGVzdHNJbkZvbGRlcihmb2xkZXJJZCksXG4gICAgICBoYXNQYXJlbnQ6IHRoaXMuZm9sZGVySGFzUGFyZW50KGZvbGRlcklkKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjb3VudFRlc3RzSW5Gb2xkZXIoZm9sZGVySWQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29uc3QgYWNjZXNzb3IgPSB0aGlzLmZvbGRlcklkQWNjZXNzb3IgPz8gKChyOiBhbnkpID0+IHI/LmZvbGRlcklkKTtcbiAgICByZXR1cm4gKHRoaXMuZGF0YSB8fCBbXSkuZmlsdGVyKHIgPT4ge1xuICAgICAgY29uc3QgaWQgPSBhY2Nlc3NvcihyKTtcbiAgICAgIHJldHVybiBpZCAhPSBudWxsICYmIE51bWJlcihpZCkgPT09IE51bWJlcihmb2xkZXJJZCk7XG4gICAgfSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBmb2xkZXIgaXMgbmVzdGVkIChpLmUuIG5vdCBhIHJvb3QtbGV2ZWwgZm9sZGVyKS4gKi9cbiAgcHJpdmF0ZSBmb2xkZXJIYXNQYXJlbnQoZm9sZGVySWQ6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHRoaXMuZm9sZGVycyB8fCBbXSkuc29tZShuID0+IG4uaWQgPT09IGZvbGRlcklkKTtcbiAgfVxuXG4gIG9uVGVzdHNEcm9wcGVkKGV2ZW50OiB7IHRlc3RJZHM6IEFycmF5PHN0cmluZyB8IG51bWJlcj47IHRhcmdldEZvbGRlcklkOiBudW1iZXIgfCBudWxsIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW9kdWxhckNvbmZpZy5hbGxvd1Rlc3REcmFnRHJvcCkgcmV0dXJuO1xuICAgIHRoaXMudGVzdHNNb3ZlZC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb2xkZXItdG8tZm9sZGVyIGRyYWctZHJvcC4gVGhlIHNpZGViYXIgaGFzIGFscmVhZHkgdmFsaWRhdGVkIGFnYWluc3Qgc2VsZi9kZXNjZW5kYW50XG4gICAqIGN5Y2xlcywgc28gdGhlIGRyb3AgaXMgaXRzIG93biBjb25maXJtYXRpb24g4oCUIHdlIGVtaXQgYGZvbGRlck1vdmVkYCBkaXJlY3RseSB3aXRob3V0XG4gICAqIG9wZW5pbmcgdGhlIG1vdmUgZGlhbG9nLiBHYXRlZCBvbiBgYWxsb3dUZXN0RHJhZ0Ryb3BgIChzYW1lIGZsYWcgYXMgdGVzdCBkcmFnLWRyb3ApLlxuICAgKi9cbiAgb25Gb2xkZXJEcm9wcGVkKGV2ZW50OiB7IGlkOiBudW1iZXI7IG5ld1BhcmVudElkOiBudW1iZXIgfCBudWxsIH0pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubW9kdWxhckNvbmZpZy5hbGxvd1Rlc3REcmFnRHJvcCkgcmV0dXJuO1xuICAgIHRoaXMuZm9sZGVyTW92ZWQuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogU2lkZWJhciBlbWl0dGVkIGBmb2xkZXJNb3ZlUmVxdWVzdGVkYCAodXNlciBwaWNrZWQgXCJNb3ZlIGZvbGRlclwiIGZyb20gdGhlIGNvbnRleHQgbWVudSkuXG4gICAqIFdlIHJlLWVtaXQgYSByaWNoZXIgcGF5bG9hZCBmb3IgaG9zdHMsIGFuZCDigJQgd2hlbiBydW5uaW5nIHdpdGggaW50ZXJuYWwgZGlhbG9ncyDigJRcbiAgICogb3BlbiB0aGUgZXhpc3RpbmcgbW92ZS10by1mb2xkZXIgcGlja2VyIGNvbmZpZ3VyZWQgZm9yIGEgZm9sZGVyLW1vdmUgKHNlbGYgYW5kXG4gICAqIGRlc2NlbmRhbnRzIGFyZSBkaXNhYmxlZCB0byBwcmV2ZW50IGN5Y2xlcykuXG4gICAqL1xuICBvbkZvbGRlck1vdmVSZXF1ZXN0ZWQocGF5bG9hZDogeyBpZDogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCBub2RlID0gdGhpcy5maW5kRm9sZGVyKHRoaXMuZm9sZGVycywgcGF5bG9hZC5pZCk7XG4gICAgY29uc3QgY3R4OiBGb2xkZXJNb3ZlUmVxdWVzdGVkUGF5bG9hZCA9IHtcbiAgICAgIGlkOiBwYXlsb2FkLmlkLFxuICAgICAgbmFtZTogbm9kZT8ubmFtZSA/PyAnJyxcbiAgICAgIGhhc1BhcmVudDogdGhpcy5mb2xkZXJIYXNQYXJlbnQocGF5bG9hZC5pZCksXG4gICAgfTtcbiAgICB0aGlzLmZvbGRlck1vdmVSZXF1ZXN0ZWQuZW1pdChjdHgpO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcbiAgICB0aGlzLm9wZW5Nb3ZlRm9sZGVyRGlhbG9nKGN0eCk7XG4gIH1cblxuICAvKipcbiAgICogU2lkZWJhciBlbWl0dGVkIGBmb2xkZXJEdXBsaWNhdGVSZXF1ZXN0ZWRgLiBUaGUgbGlicmFyeSBjYW4ndCBwZXJzaXN0IOKAlFxuICAgKiBlbWl0IHRoZSBob3N0LWxldmVsIGV2ZW50IHNvIHRoZSBob3N0IGNsb25lcyB0aGUgc3VidHJlZSBzZXJ2ZXItc2lkZS5cbiAgICogVGVzdCBjYXNlcyBzaG91bGQgYmUgKnJlZmVyZW5jZWQqIGZyb20gdGhlIG5ldyBmb2xkZXJzLCBub3QgZHVwbGljYXRlZC5cbiAgICovXG4gIG9uRm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkKHBheWxvYWQ6IHsgaWQ6IG51bWJlciB9KTogdm9pZCB7XG4gICAgY29uc3Qgbm9kZSA9IHRoaXMuZmluZEZvbGRlcih0aGlzLmZvbGRlcnMsIHBheWxvYWQuaWQpO1xuICAgIHRoaXMuZm9sZGVyRHVwbGljYXRlUmVxdWVzdGVkLmVtaXQoe1xuICAgICAgaWQ6IHBheWxvYWQuaWQsXG4gICAgICBuYW1lOiBub2RlPy5uYW1lID8/ICcnLFxuICAgIH0pO1xuICB9XG5cbiAgb25TaWRlYmFyQ29sbGFwc2VkQ2hhbmdlKGNvbGxhcHNlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuc2lkZWJhckNvbGxhcHNlZCA9IGNvbGxhcHNlZDtcbiAgICB0aGlzLnNpZGViYXJDb2xsYXBzZWRDaGFuZ2UuZW1pdChjb2xsYXBzZWQpO1xuICB9XG5cbiAgdG9nZ2xlU2lkZWJhcigpOiB2b2lkIHtcbiAgICB0aGlzLm9uU2lkZWJhckNvbGxhcHNlZENoYW5nZSghdGhpcy5zaWRlYmFyQ29sbGFwc2VkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IGJ1bGsgYWN0aW9ucyBzaG93biBpbiB0aGUgdG9vbGJhciBtZXJnZWQgd2l0aCBhbnkgaG9zdC1zdXBwbGllZFxuICAgKiBgYnVsa0FjdGlvbnNgLiBDdXJyZW50bHkgb25seSBcIk1vdmUgdG8gZm9sZGVyXCIgc2hpcHMgYnkgZGVmYXVsdCDigJRcbiAgICogRGVsZXRlIC8gQWRkIFRhZyBhcmUgb3B0LWluIHBlciB0aGUgY3VycmVudCBwcm9kdWN0IHJlcXVpcmVtZW50LiBIb3N0c1xuICAgKiB0aGF0IHdhbnQgdGhlbSBiYWNrIHBhc3MgdGhlbSB2aWEgYGJ1bGtBY3Rpb25zYC5cbiAgICovXG4gIGdldCBlZmZlY3RpdmVCdWxrQWN0aW9ucygpOiBUYWJsZUFjdGlvbltdIHtcbiAgICBjb25zdCBkZWZhdWx0czogVGFibGVBY3Rpb25bXSA9IFtcbiAgICAgIHsgaWQ6ICdtb3ZlJywgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlVG9Gb2xkZXIsIGljb246ICdkcml2ZV9maWxlX21vdmUnLCB0b29sdGlwOiB0aGlzLm1vZHVsYXJMYWJlbHMubW92ZVRvRm9sZGVyIH0sXG4gICAgXTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSBuZXcgTWFwKCh0aGlzLmJ1bGtBY3Rpb25zIHx8IFtdKS5tYXAoYSA9PiBbYS5pZCwgYV0gYXMgY29uc3QpKTtcbiAgICBjb25zdCBtZXJnZWQgPSBkZWZhdWx0cy5tYXAoZCA9PiBvdmVycmlkZXMuZ2V0KGQuaWQpID8/IGQpO1xuICAgIGZvciAoY29uc3QgZXh0cmEgb2YgdGhpcy5idWxrQWN0aW9ucyB8fCBbXSkge1xuICAgICAgaWYgKCFkZWZhdWx0cy5zb21lKGQgPT4gZC5pZCA9PT0gZXh0cmEuaWQpKSB7XG4gICAgICAgIG1lcmdlZC5wdXNoKGV4dHJhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIG9uQnVsa0FjdGlvbihldmVudDogeyBpZDogc3RyaW5nOyBzZWxlY3RlZDogYW55W10gfSk6IHZvaWQge1xuICAgIC8vIEFsd2F5cyBlbWl0IHRoZSByYXcgY2xpY2sgc28gaG9zdHMgb3duaW5nIHRoZSBVWCBjYW4gaW50ZXJjZXB0IGVhcmx5LlxuICAgIHRoaXMuYnVsa0FjdGlvbkNsaWNrLmVtaXQoeyBpZDogZXZlbnQuaWQsIHNlbGVjdGVkOiBldmVudC5zZWxlY3RlZCB9KTtcblxuICAgIGNvbnN0IHNlbGVjdGVkSWRzID0gKGV2ZW50LnNlbGVjdGVkIHx8IFtdKS5tYXAociA9PiByPy5pZCkuZmlsdGVyKHYgPT4gdiAhPSBudWxsKTtcbiAgICBpZiAoZXZlbnQuaWQgPT09ICdtb3ZlJykge1xuICAgICAgdGhpcy5vcGVuTW92ZURpYWxvZyhzZWxlY3RlZElkcywgZXZlbnQuc2VsZWN0ZWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBGb3Igbm9uLWRpYWxvZyBhY3Rpb25zIChjdXN0b20gZW50cmllcyBmcm9tIGhvc3Qtc3VwcGxpZWQgYGJ1bGtBY3Rpb25zYCksIGludm9rZSBpbW1lZGlhdGVseS5cbiAgICB0aGlzLmJ1bGtBY3Rpb25JbnZva2VkLmVtaXQoeyBpZDogZXZlbnQuaWQsIHNlbGVjdGVkOiBldmVudC5zZWxlY3RlZCB9KTtcbiAgfVxuXG4gIG9uQnVsa1NlbGVjdEFsbChjaGVja2VkOiBib29sZWFuKTogdm9pZCB7XG4gICAgLy8gQXBwbHkgdGhlIGFjdGlvbiBsb2NhbGx5IHNvIHRoZSBhY3Rpb24gdG9vbGJhcidzIFwiU2VsZWN0IGFsbFwiIHdvcmtzIG91dC1vZi10aGUtYm94LlxuICAgIC8vIFdoZW4gY2hlY2tlZCwgc2VsZWN0IGV2ZXJ5IHJvdyBpbiB0aGUgKmN1cnJlbnQqIGZpbHRlcmVkIHNldCAoaS5lLiBhbGwgdGVzdHMgaW5cbiAgICAvLyB0aGUgc2VsZWN0ZWQgZm9sZGVyKS4gV2hlbiB1bmNoZWNrZWQsIGNsZWFyIHNlbGVjdGlvbi5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBjaGVja2VkID8gWy4uLnRoaXMuZmlsdGVyZWRSb3dzXSA6IFtdO1xuICAgIHRoaXMucmVzdG9yZVNlbGVjdGlvblN0YXRlKCk7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zQ2hhbmdlLmVtaXQoWy4uLnRoaXMuc2VsZWN0ZWRJdGVtc10pO1xuICAgIHRoaXMuYnVsa1NlbGVjdEFsbENoYW5nZS5lbWl0KGNoZWNrZWQpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CdWxrRGlzbWlzcygpOiB2b2lkIHtcbiAgICAvLyBDbGVhciBzZWxlY3Rpb24gQU5EIHRoZSBwZXItcm93IGlzU2VsZWN0ZWQgZmxhZ3Mgc28gdGhlIGFjdGlvbiB0b29sYmFyIGNsb3Nlc1xuICAgIC8vIChpdCdzIGdhdGVkIG9uIGBhbnlSb3dTZWxlY3RlZGAsIHdoaWNoIHJlYWRzIGJvdGggc2VsZWN0ZWRJdGVtcyBhbmQgcm93IGZsYWdzKS5cbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICB0aGlzLnJlc3RvcmVTZWxlY3Rpb25TdGF0ZSgpO1xuICAgIHRoaXMuc2VsZWN0ZWRJdGVtc0NoYW5nZS5lbWl0KFtdKTtcbiAgICB0aGlzLmJ1bGtEaXNtaXNzLmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb3Blbk1vdmVEaWFsb2codGVzdElkczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiwgc2VsZWN0ZWQ6IGFueVtdKTogdm9pZCB7XG4gICAgLy8gRmlyZSB0aGUgXCJyZXF1ZXN0ZWRcIiBldmVudCBmaXJzdCBzbyBhIGhvc3QgY2FuIGludGVyY2VwdCB3aGVuIGl0IG93bnMgdGhlIFVYLlxuICAgIHRoaXMubW92ZVJlcXVlc3RlZC5lbWl0KHtcbiAgICAgIHRlc3RJZHMsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGN1cnJlbnRGb2xkZXJJZDogdGhpcy5zZWxlY3RlZEZvbGRlcklkLFxuICAgICAgZm9sZGVyczogdGhpcy5mb2xkZXJzLFxuICAgIH0pO1xuICAgIGlmICghdGhpcy51c2VJbnRlcm5hbERpYWxvZ3MpIHJldHVybjtcblxuICAgIGNvbnN0IGNvdW50ID0gdGVzdElkcy5sZW5ndGg7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSAoY291bnQgPT09IDFcbiAgICAgID8gdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dEZXNjcmlwdGlvblNpbmd1bGFyXG4gICAgICA6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nRGVzY3JpcHRpb25QbHVyYWxcbiAgICApLnJlcGxhY2UoJ3tufScsICcnICsgY291bnQpO1xuICAgIGNvbnN0IHJlZiA9IHRoaXMuZGlhbG9nU2VydmljZS5vcGVuPGFueSwgbnVtYmVyIHwgbnVsbD4oe1xuICAgICAgdGl0bGU6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nVGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIHdpZHRoOiAnNTAwcHgnLFxuICAgICAgY29udGVudDoge1xuICAgICAgICB0eXBlOiAnY29tcG9uZW50JyxcbiAgICAgICAgY29tcG9uZW50OiBNb3ZlVG9Gb2xkZXJEaWFsb2dDb21wb25lbnQsXG4gICAgICAgIGlucHV0czoge1xuICAgICAgICAgIGZvbGRlcnM6IHRoaXMuZm9sZGVycyxcbiAgICAgICAgICBsYWJlbHM6IHRoaXMubW9kdWxhckxhYmVscyxcbiAgICAgICAgICBjdXJyZW50Rm9sZGVySWQ6IHRoaXMuc2VsZWN0ZWRGb2xkZXJJZCxcbiAgICAgICAgICAvLyBXaGVuIG1vdmluZyBGUk9NIFVub3JnYW5pc2VkLCBkaXNhYmxlIHRoZSBVbm9yZ2FuaXNlZCBkZXN0aW5hdGlvbiByb3cuXG4gICAgICAgICAgcm9vdERpc2FibGVkOiB0aGlzLnNlbGVjdGVkRm9sZGVySWQgPT0gbnVsbCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nQ2FuY2VsLCByb2xlOiAnc2Vjb25kYXJ5JywgaGFuZGxlcjogciA9PiByLmNsb3NlKHVuZGVmaW5lZCBhcyBhbnkpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDb25maXJtLFxuICAgICAgICAgIHJvbGU6ICdwcmltYXJ5JyxcbiAgICAgICAgICBoYW5kbGVyOiByID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gci5nZXRDb21wb25lbnRJbnN0YW5jZTxNb3ZlVG9Gb2xkZXJEaWFsb2dDb21wb25lbnQ+KCk7XG4gICAgICAgICAgICByLmNsb3NlKGluc3RhbmNlID8gaW5zdGFuY2UucGlja2VkRm9sZGVySWQgOiBudWxsKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJ1dHRvbkFsaWdubWVudDogJ3JpZ2h0JyxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUodGFyZ2V0Rm9sZGVySWQgPT4ge1xuICAgICAgaWYgKHRhcmdldEZvbGRlcklkID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gY2FuY2VsbGVkXG4gICAgICB0aGlzLnRlc3RzTW92ZWQuZW1pdCh7IHRlc3RJZHMsIHRhcmdldEZvbGRlcklkOiB0YXJnZXRGb2xkZXJJZCA/PyBudWxsIH0pO1xuICAgICAgdGhpcy5idWxrQWN0aW9uSW52b2tlZC5lbWl0KHsgaWQ6ICdtb3ZlJywgc2VsZWN0ZWQgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbnMgdGhlIGZvbGRlci1waWNrZXIgZGlhbG9nIGNvbmZpZ3VyZWQgZm9yIG1vdmluZyBhIGZvbGRlciAocmF0aGVyIHRoYW4gdGVzdHMpLlxuICAgKiBUaGUgc291cmNlIGZvbGRlciBpdHNlbGYgaXMgbWFya2VkIGFzIHRoZSBcImN1cnJlbnRcIiBmb2xkZXIgc28gaXQncyByZW5kZXJlZCBhc1xuICAgKiBkaXNhYmxlZCBpbiB0aGUgcGlja2VyLiBPbiBjb25maXJtLCBlbWl0cyBgZm9sZGVyTW92ZWRgIHdpdGggdGhlIGNob3NlbiBwYXJlbnQuXG4gICAqL1xuICBwcml2YXRlIG9wZW5Nb3ZlRm9sZGVyRGlhbG9nKGN0eDogRm9sZGVyTW92ZVJlcXVlc3RlZFBheWxvYWQpOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbjxhbnksIG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQ+KHtcbiAgICAgIHRpdGxlOiB0aGlzLm1vZHVsYXJMYWJlbHMuZm9sZGVyTWVudU1vdmUsXG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIGNvbXBvbmVudDogTW92ZVRvRm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBmb2xkZXJzOiB0aGlzLmZvbGRlcnMsXG4gICAgICAgICAgbGFiZWxzOiB0aGlzLm1vZHVsYXJMYWJlbHMsXG4gICAgICAgICAgLy8gUmV1c2UgdGhlIFwiZGlzYWJsZWRcIiB0cmVhdG1lbnQ6IHRoZSBmb2xkZXIgYmVpbmcgbW92ZWQgY2FuJ3QgYmUgaXRzIG93biBkZXN0aW5hdGlvbi5cbiAgICAgICAgICBjdXJyZW50Rm9sZGVySWQ6IGN0eC5pZCxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5tb3ZlRGlhbG9nQ2FuY2VsLCByb2xlOiAnc2Vjb25kYXJ5JywgaGFuZGxlcjogciA9PiByLmNsb3NlKHVuZGVmaW5lZCBhcyBhbnkpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLm1vdmVEaWFsb2dDb25maXJtLFxuICAgICAgICAgIHJvbGU6ICdwcmltYXJ5JyxcbiAgICAgICAgICBoYW5kbGVyOiByID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gci5nZXRDb21wb25lbnRJbnN0YW5jZTxNb3ZlVG9Gb2xkZXJEaWFsb2dDb21wb25lbnQ+KCk7XG4gICAgICAgICAgICByLmNsb3NlKGluc3RhbmNlID8gaW5zdGFuY2UucGlja2VkRm9sZGVySWQgOiBudWxsKTtcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGJ1dHRvbkFsaWdubWVudDogJ3JpZ2h0JyxcbiAgICB9KTtcbiAgICByZWYuYWZ0ZXJDbG9zZWQoKS5zdWJzY3JpYmUodGFyZ2V0Rm9sZGVySWQgPT4ge1xuICAgICAgaWYgKHRhcmdldEZvbGRlcklkID09PSB1bmRlZmluZWQpIHJldHVybjsgLy8gY2FuY2VsbGVkXG4gICAgICB0aGlzLmZvbGRlck1vdmVkLmVtaXQoeyBpZDogY3R4LmlkLCBuZXdQYXJlbnRJZDogdGFyZ2V0Rm9sZGVySWQgPz8gbnVsbCB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbkNyZWF0ZUZvbGRlckRpYWxvZyhpbml0aWFsUGFyZW50SWQ6IG51bWJlciB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbjxhbnksIHsgbmFtZTogc3RyaW5nOyBwYXJlbnRJZDogbnVtYmVyIHwgbnVsbDsgY29sb3I6IHN0cmluZyB9IHwgZmFsc2U+KHtcbiAgICAgIHRpdGxlOiB0aGlzLm1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyRGlhbG9nVGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5tb2R1bGFyTGFiZWxzLm5ld0ZvbGRlckRpYWxvZ0Rlc2NyaXB0aW9uLFxuICAgICAgd2lkdGg6ICc1MDBweCcsXG4gICAgICBjb250ZW50OiB7XG4gICAgICAgIHR5cGU6ICdjb21wb25lbnQnLFxuICAgICAgICBjb21wb25lbnQ6IE5ld0ZvbGRlckRpYWxvZ0NvbXBvbmVudCxcbiAgICAgICAgaW5wdXRzOiB7XG4gICAgICAgICAgZm9sZGVyczogdGhpcy5mb2xkZXJzLFxuICAgICAgICAgIGxhYmVsczogdGhpcy5tb2R1bGFyTGFiZWxzLFxuICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgIHBhcmVudElkOiBpbml0aWFsUGFyZW50SWQsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnV0dG9uczogW1xuICAgICAgICB7IGxhYmVsOiB0aGlzLm1vZHVsYXJMYWJlbHMubmV3Rm9sZGVyRGlhbG9nQ2FuY2VsLCByb2xlOiAnc2Vjb25kYXJ5JywgaGFuZGxlcjogciA9PiByLmNsb3NlKGZhbHNlKSB9LFxuICAgICAgICB7XG4gICAgICAgICAgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5uZXdGb2xkZXJEaWFsb2dDb25maXJtLFxuICAgICAgICAgIHJvbGU6ICdwcmltYXJ5JyxcbiAgICAgICAgICBoYW5kbGVyOiByID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGluc3QgPSByLmdldENvbXBvbmVudEluc3RhbmNlPE5ld0ZvbGRlckRpYWxvZ0NvbXBvbmVudD4oKTtcbiAgICAgICAgICAgIGlmICghaW5zdCB8fCAhaW5zdC5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7IC8vIGtlZXAgdGhlIGRpYWxvZyBvcGVuIG9uIGludmFsaWQgc3VibWl0XG4gICAgICAgICAgICByLmNsb3NlKHsgbmFtZTogKGluc3QubmFtZSB8fCAnJykudHJpbSgpLCBwYXJlbnRJZDogaW5zdC5wYXJlbnRJZCwgY29sb3I6IGluc3QuY29sb3IgfSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICBidXR0b25BbGlnbm1lbnQ6ICdyaWdodCcsXG4gICAgfSk7XG4gICAgcmVmLmFmdGVyQ2xvc2VkKCkuc3Vic2NyaWJlKHJlc3VsdCA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIHRoaXMuZm9sZGVyQ3JlYXRlZC5lbWl0KHsgcGFyZW50SWQ6IHJlc3VsdC5wYXJlbnRJZCwgbmFtZTogcmVzdWx0Lm5hbWUsIGNvbG9yOiByZXN1bHQuY29sb3IgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW5EZWxldGVGb2xkZXJEaWFsb2coY3R4OiBGb2xkZXJEZWxldGVSZXF1ZXN0ZWRQYXlsb2FkKTogdm9pZCB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW48YW55LCB7IHN0cmF0ZWd5OiBGb2xkZXJEZWxldGVTdHJhdGVneSB9IHwgZmFsc2U+KHtcbiAgICAgIHRpdGxlOiB0aGlzLm1vZHVsYXJMYWJlbHMuZGVsZXRlRm9sZGVyRGlhbG9nVGl0bGUsXG4gICAgICB3aWR0aDogJzUwMHB4JyxcbiAgICAgIGNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2NvbXBvbmVudCcsXG4gICAgICAgIGNvbXBvbmVudDogRGVsZXRlRm9sZGVyRGlhbG9nQ29tcG9uZW50LFxuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBmb2xkZXJOYW1lOiBjdHgubmFtZSxcbiAgICAgICAgICB0ZXN0Q291bnQ6IGN0eC50ZXN0Q291bnQsXG4gICAgICAgICAgaGFzUGFyZW50OiBjdHguaGFzUGFyZW50LFxuICAgICAgICAgIGxhYmVsczogdGhpcy5tb2R1bGFyTGFiZWxzLFxuICAgICAgICAgIHN0cmF0ZWd5OiBjdHguaGFzUGFyZW50ID8gJ21vdmUtdG8tcGFyZW50JyA6ICdtb3ZlLXRvLXVub3JnYW5pc2VkJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBidXR0b25zOiBbXG4gICAgICAgIHsgbGFiZWw6IHRoaXMubW9kdWxhckxhYmVscy5kZWxldGVGb2xkZXJEaWFsb2dDYW5jZWwsIHJvbGU6ICdzZWNvbmRhcnknLCBoYW5kbGVyOiByID0+IHIuY2xvc2UoZmFsc2UpIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBsYWJlbDogdGhpcy5tb2R1bGFyTGFiZWxzLmRlbGV0ZUZvbGRlckRpYWxvZ0NvbmZpcm0sXG4gICAgICAgICAgcm9sZTogJ3dhcm4nLFxuICAgICAgICAgIGhhbmRsZXI6IHIgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5zdCA9IHIuZ2V0Q29tcG9uZW50SW5zdGFuY2U8RGVsZXRlRm9sZGVyRGlhbG9nQ29tcG9uZW50PigpO1xuICAgICAgICAgICAgci5jbG9zZShpbnN0ID8geyBzdHJhdGVneTogaW5zdC5zdHJhdGVneSB9IDogZmFsc2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgYnV0dG9uQWxpZ25tZW50OiAncmlnaHQnLFxuICAgIH0pO1xuICAgIHJlZi5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShyZXN1bHQgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICB0aGlzLmZvbGRlckRlbGV0ZWQuZW1pdCh7IGlkOiBjdHguaWQsIHN0cmF0ZWd5OiByZXN1bHQuc3RyYXRlZ3kgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFJvdy1yZW9yZGVyIGhhbmRsZXJzXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICBzdGFydFJlb3JkZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNSZW9yZGVyaW5nKSByZXR1cm47XG4gICAgdGhpcy5yZW9yZGVyU25hcHNob3QgPSBbLi4uKHRoaXMucGFnZWRSb3dzIHx8IFtdKV07XG4gICAgdGhpcy5yZW9yZGVyRHJhZnQgPSBbLi4uKHRoaXMucGFnZWRSb3dzIHx8IFtdKV07XG4gICAgLy8gUGF1c2UgYXV0by1yZWZyZXNoIHdoaWxlIHJlb3JkZXJpbmcg4oCUIGF2b2lkcyB0aGUgdGltZXIgY2xvYmJlcmluZyB0aGUgZHJhZnQuXG4gICAgdGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCA9IHRoaXMuc2VsZWN0ZWRBdXRvUmVmcmVzaEludGVydmFsO1xuICAgIGlmICh0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoID4gMCkge1xuICAgICAgdGhpcy5zZXR1cEF1dG9SZWZyZXNoKDApO1xuICAgIH1cbiAgICB0aGlzLmlzUmVvcmRlcmluZyA9IHRydWU7XG4gICAgdGhpcy5yZW9yZGVyQXdhaXRpbmdTYXZlRmxpcCA9IGZhbHNlO1xuICAgIHRoaXMucmVvcmRlclN0YXJ0LmVtaXQoKTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNhbmNlbFJlb3JkZXIoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVvcmRlcmluZykgcmV0dXJuO1xuICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIHBhZ2Ugb3JkZXIgc28gdGhlIHVzZXIgc2VlcyB0aGUgcHJlLWRyYWcgc3RhdGUuXG4gICAgaWYgKHRoaXMucmVvcmRlclNuYXBzaG90KSB7XG4gICAgICB0aGlzLnBhZ2VkUm93cyA9IFsuLi50aGlzLnJlb3JkZXJTbmFwc2hvdF07XG4gICAgfVxuICAgIHRoaXMuZXhpdFJlb3JkZXJNb2RlKCk7XG4gICAgdGhpcy5yZW9yZGVyQ2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIHNhdmVSZW9yZGVyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlb3JkZXJpbmcpIHJldHVybjtcbiAgICBjb25zdCBvcmRlcmVkID0gdGhpcy5yZW9yZGVyRHJhZnQgPyBbLi4udGhpcy5yZW9yZGVyRHJhZnRdIDogWy4uLih0aGlzLnBhZ2VkUm93cyB8fCBbXSldO1xuICAgIHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXAgPSB0cnVlO1xuICAgIHRoaXMucmVvcmRlclNhdmUuZW1pdCh7IG9yZGVyZWRJdGVtczogb3JkZXJlZCB9KTtcbiAgICAvLyBJZiB0aGUgaG9zdCBuZXZlciBmbGlwcyBgcmVvcmRlclNhdmluZ2AgKGUuZy4gc3luY2hyb25vdXMgbm8tb3ApLCBleGl0XG4gICAgLy8gaW1tZWRpYXRlbHkgc28gdGhlIFVJIGRvZXNuJ3QgZ2V0IHN0dWNrIGluIFwiU2F2aW5nLi4uXCIgc3RhdGUuXG4gICAgaWYgKCF0aGlzLnJlb3JkZXJTYXZpbmcpIHtcbiAgICAgIC8vIEdpdmUgdGhlIGhvc3QgYSBtaWNyb3Rhc2sgdG8gZmxpcCBgcmVvcmRlclNhdmluZ2AgdG8gdHJ1ZSDigJQgaWYgaXRcbiAgICAgIC8vIGhhc24ndCwgYXNzdW1lIG5vIGFzeW5jIHdvcmsgYW5kIGV4aXQuXG4gICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucmVvcmRlckF3YWl0aW5nU2F2ZUZsaXAgJiYgIXRoaXMucmVvcmRlclNhdmluZykge1xuICAgICAgICAgIHRoaXMuZXhpdFJlb3JkZXJNb2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uUm93UmVvcmRlcihldmVudDogeyBwcmV2aW91c0luZGV4OiBudW1iZXI7IGN1cnJlbnRJbmRleDogbnVtYmVyOyBvcmRlcmVkRGF0YTogYW55W10gfSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1Jlb3JkZXJpbmcpIHJldHVybjtcbiAgICB0aGlzLnJlb3JkZXJEcmFmdCA9IFsuLi5ldmVudC5vcmRlcmVkRGF0YV07XG4gICAgdGhpcy5wYWdlZFJvd3MgPSB0aGlzLnJlb3JkZXJEcmFmdDtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZXhpdFJlb3JkZXJNb2RlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNSZW9yZGVyaW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZW9yZGVyU25hcHNob3QgPSBudWxsO1xuICAgIHRoaXMucmVvcmRlckRyYWZ0ID0gbnVsbDtcbiAgICB0aGlzLnJlb3JkZXJBd2FpdGluZ1NhdmVGbGlwID0gZmFsc2U7XG4gICAgLy8gUmVzdG9yZSBwcmV2aW91c2x5LXNlbGVjdGVkIGF1dG8tcmVmcmVzaCBpbnRlcnZhbCAoaWYgYW55KS5cbiAgICBpZiAodGhpcy5yZW9yZGVyU2F2ZWRBdXRvUmVmcmVzaCA+IDApIHtcbiAgICAgIHRoaXMuc2V0dXBBdXRvUmVmcmVzaCh0aGlzLnJlb3JkZXJTYXZlZEF1dG9SZWZyZXNoKTtcbiAgICAgIHRoaXMucmVvcmRlclNhdmVkQXV0b1JlZnJlc2ggPSAwO1xuICAgIH1cbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSb3ctZHJhZyBwYXlsb2FkIGJ1aWxkZXIgdXNlZCBieSB0aGUgW2NxYVJvd0RyYWddIGRpcmVjdGl2ZSB2aWEgKGJ1aWxkUGF5bG9hZCkuXG4gICAqL1xuICBidWlsZFJvd0RyYWdQYXlsb2FkID0gKHJvdzogYW55KTogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmN1cnJlbnRTZWxlY3RlZEl0ZW1zO1xuICAgIC8vIElmIHRoZSBkcmFnZ2VkIHJvdyBpcyBwYXJ0IG9mIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgZHJhZyB0aGUgd2hvbGUgc2VsZWN0aW9uLlxuICAgIGNvbnN0IHJvd0lkID0gcm93Py5pZDtcbiAgICBjb25zdCBpblNlbGVjdGlvbiA9IHJvd0lkICE9IG51bGwgJiYgc2VsZWN0ZWQuc29tZShzID0+IHM/LmlkID09PSByb3dJZCk7XG4gICAgY29uc3QgaWRzID0gKGluU2VsZWN0aW9uID8gc2VsZWN0ZWQgOiBbcm93XSkubWFwKHIgPT4gcj8uaWQpLmZpbHRlcih2ID0+IHYgIT0gbnVsbCk7XG4gICAgcmV0dXJuIGlkcztcbiAgfTtcbn1cbiIsIjwhLS0gUmV1c2FibGUgZm9sZGVyLWljb24gY2hpcC4gUmVuZGVyIHZpYSA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9sZGVySWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj4uIC0tPlxuPG5nLXRlbXBsYXRlICNmb2xkZXJJY29uQ2hpcD5cbiAgPHNwYW4gY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctMTAgY3FhLWgtMTAgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1iZy1uZXV0cmFsLTEwMCBjcWEtc2hyaW5rLTBcIj5cbiAgICA8c3ZnIHdpZHRoPVwiMTdcIiBoZWlnaHQ9XCIxNVwiIHZpZXdCb3g9XCIwIDAgMTcgMTVcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgIDxwYXRoIGQ9XCJNMTUuNjM3NSAxMi42Mzc3QzE1LjYzNzUgMTMuMDM1NSAxNS40Nzk0IDEzLjQxNzEgMTUuMTk4MSAxMy42OTg0QzE0LjkxNjggMTMuOTc5NyAxNC41MzUzIDE0LjEzNzcgMTQuMTM3NSAxNC4xMzc3SDIuMTM3NDVDMS43Mzk2MyAxNC4xMzc3IDEuMzU4MSAxMy45Nzk3IDEuMDc2NzkgMTMuNjk4NEMwLjc5NTQ4NiAxMy40MTcxIDAuNjM3NDUxIDEzLjAzNTUgMC42Mzc0NTEgMTIuNjM3N1YyLjEzNzdDMC42Mzc0NTEgMS43Mzk4NyAwLjc5NTQ4NiAxLjM1ODM0IDEuMDc2NzkgMS4wNzcwNEMxLjM1ODEgMC43OTU3MzEgMS43Mzk2MyAwLjYzNzY5NSAyLjEzNzQ1IDAuNjM3Njk1SDUuODg3NDVMNy4zODc0NSAyLjg4NzdIMTQuMTM3NUMxNC41MzUzIDIuODg3NyAxNC45MTY4IDMuMDQ1NzMgMTUuMTk4MSAzLjMyNzA0QzE1LjQ3OTQgMy42MDgzNCAxNS42Mzc1IDMuOTg5ODcgMTUuNjM3NSA0LjM4NzdWMTIuNjM3N1pcIiBzdHJva2U9XCIjNkQ2RDc0XCIgc3Ryb2tlLXdpZHRoPVwiMS4yNzVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgPC9zdmc+XG4gIDwvc3Bhbj5cbjwvbmctdGVtcGxhdGU+XG5cbjwhLS0gUmV1c2FibGUgXCIrXCIgY2hpcCB1c2VkIGJ5IHRoZSBcIk5ldyBmb2xkZXJcIiB0aWxlLiAtLT5cbjxuZy10ZW1wbGF0ZSAjYWRkSWNvbkNoaXA+XG4gIDxzcGFuIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTEwIGNxYS1oLTEwIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYmctbmV1dHJhbC0xMDAgY3FhLXNocmluay0wXCI+XG4gICAgPHN2ZyB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICA8cGF0aCBkPVwiTTggM1YxM00zIDhIMTNcIiBzdHJva2U9XCIjNkQ2RDc0XCIgc3Ryb2tlLXdpZHRoPVwiMS4yNzVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIvPlxuICAgIDwvc3ZnPlxuICA8L3NwYW4+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2IGNsYXNzPVwiY3FhLXVpLXJvb3RcIj5cbiAgPGRpdiBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1yZWxhdGl2ZVwiPlxuICAgIDxkaXYgW2NsYXNzXT1cIiFzaG93U2VhcmNoQmFyID8gJ2NxYS1qdXN0aWZ5LWVuZCcgOiAnY3FhLWp1c3RpZnktYmV0d2VlbidcIiBjbGFzcz1cImNxYS13LWZ1bGwgY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLWZsZXgtd3JhcCBjcWEtbWItM1wiPlxuICAgICAgPGNxYS1zZWFyY2gtYmFyXG4gICAgICAgICpuZ0lmPVwic2hvd1NlYXJjaEJhclwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJzZWFyY2hQbGFjZWhvbGRlclwiXG4gICAgICAgIFt2YWx1ZV09XCJzZWFyY2hWYWx1ZVwiXG4gICAgICAgIFtzaG93Q2xlYXJdPVwic2hvd0NsZWFyXCJcbiAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInZhbHVlQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc2VhcmNoKT1cInNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgKGNsZWFyZWQpPVwiY2xlYXJlZCgpXCJcbiAgICAgID48L2NxYS1zZWFyY2gtYmFyPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1mbGV4LXdyYXBcIj5cbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCJcbiAgICAgICAgdmFyaWFudD1cImdyZXktc29saWRcIlxuICAgICAgICBpY29uPVwib3Blbl9pbl9uZXdcIlxuICAgICAgICBbdGV4dF09XCJpc0V4cG9ydGluZyA/ICdFeHBvcnRpbmcuLi4nIDogJ0V4cG9ydCdcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiaXNFeHBvcnRpbmdcIlxuICAgICAgICAoY2xpY2tlZCk9XCJleHBvcnRDb2RlQ2xpY2soKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuPnt7IGlzRXhwb3J0aW5nID8gJ0V4cG9ydGluZy4uLicgOiAnRXhwb3J0JyB9fTwvc3Bhbj5cbiAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgIFxuICAgICAgPCEtLSBFeHBvcnQgQ29kZSBNb2RhbCAtLT5cbiAgICAgIDxjcWEtZXhwb3J0LWNvZGUtbW9kYWxcbiAgICAgICAgKm5nSWY9XCJzaG93RXhwb3J0QnV0dG9uXCJcbiAgICAgICAgW2lzT3Blbl09XCJpc0V4cG9ydE1vZGFsT3BlblwiXG4gICAgICAgIFtjYXNlc109XCJzZWxlY3RlZENhc2VzRm9yRXhwb3J0XCJcbiAgICAgICAgW2Rpc2FibGVkXT1cImZhbHNlXCJcbiAgICAgICAgKGNsb3NlTW9kYWwpPVwiY2xvc2VFeHBvcnRNb2RhbCgpXCJcbiAgICAgICAgKGV4cG9ydCk9XCJvbkV4cG9ydE1vZGFsRXhwb3J0KCRldmVudClcIj5cbiAgICAgIDwvY3FhLWV4cG9ydC1jb2RlLW1vZGFsPlxuICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZHJvcGRvd25UZW1wbGF0ZSBvZiBvdGhlckRyb3BEb3duQnV0dG9uczsgdHJhY2tCeTogdHJhY2tCeURyb3Bkb3duVGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25UZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzZWxlY3REcm9wZG93blRlbXBsYXRlIG9mIG90aGVyU2VsZWN0RHJvcERvd25CdXR0b25zOyB0cmFja0J5OiB0cmFja0J5U2VsZWN0RHJvcGRvd25UZW1wbGF0ZVJlZlwiPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzZWxlY3REcm9wZG93blRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICBcbiAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAqbmdJZj1cInNob3dGaWx0ZXJCdXR0b25cIlxuICAgICAgICAgIHZhcmlhbnQ9XCJncmV5LXNvbGlkXCJcbiAgICAgICAgICBpY29uPVwiYWRkXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZW9yZGVyaW5nXCJcbiAgICAgICAgICAoY2xpY2tlZCk9XCJ0b2dnbGVGaWx0ZXIoKVwiXG4gICAgICAgID5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMVwiPlxuICAgICAgICAgIEZpbHRlciAgICAgICAgICBcbiAgICAgICAgICAgPGRpdiBbY2xhc3NdPVwiYXJyb3dDbGFzc2VzXCI+XG4gICAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctMiBjcWEtaC0xIGNxYS1hYnNvbHV0ZSBjcWEtbGVmdC1bNHB4XSBjcWEtdG9wLVs2cHhdXCJcbiAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCA4IDRcIlxuICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICAgIGQ9XCJNMCAwTDQgNEw4IDBcIlxuICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMwQjBCMENcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS13aWR0aD1cIjEuMzNcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxuICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPGNxYS1jb2x1bW4tdmlzaWJpbGl0eVxuICAgICAgICAgICpuZ0lmPVwic2hvd1NldHRpbmdzQnV0dG9uXCJcbiAgICAgICAgICBbY29sdW1uc109XCJ2aXNpYmlsaXR5Q29sdW1uc1wiXG4gICAgICAgICAgW2NvbHVtblZpc2liaWxpdHldPVwiY29sdW1uVmlzaWJpbGl0eVwiXG4gICAgICAgICAgW3NlbGVjdGVkQXV0b1JlZnJlc2hJbnRlcnZhbF09XCJzZWxlY3RlZEF1dG9SZWZyZXNoSW50ZXJ2YWxcIlxuICAgICAgICAgIChjb2x1bW5WaXNpYmlsaXR5Q2hhbmdlKT1cIm9uQ29sdW1uVmlzaWJpbGl0eUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAoYXV0b1JlZnJlc2hDaGFuZ2UpPVwib25BdXRvUmVmcmVzaENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgPjwvY3FhLWNvbHVtbi12aXNpYmlsaXR5PlxuICAgICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAgICpuZ0lmPVwic2hvd0F1dG9SZWZyZXNoQnV0dG9uXCJcbiAgICAgICAgICB2YXJpYW50PVwiZ3JleS1zb2xpZFwiXG4gICAgICAgICAgaWNvbj1cInJlZnJlc2hcIlxuICAgICAgICAgIChjbGlja2VkKT1cImhhbmRsZVJlZnJlc2hDbGljaygpXCJcbiAgICAgICAgICBbdG9vbHRpcF09XCInUmVmcmVzaCdcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJlbG93XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNSZW9yZGVyaW5nXCJcbiAgICAgICAgPjwvY3FhLWJ1dHRvbj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYnV0dG9uVGVtcGxhdGUgb2Ygb3RoZXJCdXR0b25zOyB0cmFja0J5OiB0cmFja0J5VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYnV0dG9uVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxjcWEtc2VnbWVudC1jb250cm9sXG4gICAgICAgICAgKm5nSWY9XCJzaG93Vmlld01vZGVUb2dnbGVcIlxuICAgICAgICAgIHNpemU9XCJsZ1wiXG4gICAgICAgICAgW3NlZ21lbnRzXT1cInZpZXdNb2RlU2VnbWVudHNcIlxuICAgICAgICAgIFt2YWx1ZV09XCJ2aWV3TW9kZVwiXG4gICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmlld01vZGVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID48L2NxYS1zZWdtZW50LWNvbnRyb2w+XG4gICAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJzaG93UmVvcmRlckJ1dHRvbiAmJiAhaXNSZW9yZGVyaW5nXCJcbiAgICAgICAgICB2YXJpYW50PVwib3V0bGluZWRcIlxuICAgICAgICAgIGljb249XCJkcmFnX2luZGljYXRvclwiXG4gICAgICAgICAgW3RleHRdPVwicmVvcmRlckxhYmVscy5yZW9yZGVyQnV0dG9uXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiIXBhZ2VkUm93cyB8fCBwYWdlZFJvd3MubGVuZ3RoID09PSAwIHx8IGlzVGFibGVMb2FkaW5nIHx8IGlzVGFibGVEYXRhTG9hZGluZ1wiXG4gICAgICAgICAgKGNsaWNrZWQpPVwic3RhcnRSZW9yZGVyKClcIlxuICAgICAgICA+PC9jcWEtYnV0dG9uPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1Jlb3JkZXJCdXR0b24gJiYgaXNSZW9yZGVyaW5nXCI+XG4gICAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgICAgICBbdGV4dF09XCJyZW9yZGVyTGFiZWxzLmNhbmNlbEJ1dHRvblwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicmVvcmRlclNhdmluZ1wiXG4gICAgICAgICAgICAoY2xpY2tlZCk9XCJjYW5jZWxSZW9yZGVyKClcIlxuICAgICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgICAgICAgW2ljb25dPVwicmVvcmRlclNhdmluZyA/ICdob3VyZ2xhc3NfZW1wdHknIDogJydcIlxuICAgICAgICAgICAgW3RleHRdPVwicmVvcmRlclNhdmluZyA/IHJlb3JkZXJMYWJlbHMuc2F2aW5nQnV0dG9uIDogcmVvcmRlckxhYmVscy5kb25lQnV0dG9uXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJyZW9yZGVyU2F2aW5nXCJcbiAgICAgICAgICAgIChjbGlja2VkKT1cInNhdmVSZW9yZGVyKClcIlxuICAgICAgICAgID48L2NxYS1idXR0b24+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIFJlb3JkZXIgbW9kZSBiYW5uZXIgLS0+XG4gICAgPGRpdiAqbmdJZj1cImlzUmVvcmRlcmluZ1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTMgY3FhLXB4LTMgY3FhLXB5LTIgY3FhLXJvdW5kZWQtbWQgY3FhLWJnLVsjRkZGQkVCXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNGREU2OEFdXCI+XG4gICAgICA8c3ZnIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjNcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjEzXCIgY3k9XCIzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIzXCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCI4XCIgY3k9XCI4XCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiOFwiIHI9XCIxLjVcIiBmaWxsPVwiIzkyNDAwRVwiPjwvY2lyY2xlPlxuICAgICAgICA8Y2lyY2xlIGN4PVwiM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgICAgPGNpcmNsZSBjeD1cIjhcIiBjeT1cIjEzXCIgcj1cIjEuNVwiIGZpbGw9XCIjOTI0MDBFXCI+PC9jaXJjbGU+XG4gICAgICAgIDxjaXJjbGUgY3g9XCIxM1wiIGN5PVwiMTNcIiByPVwiMS41XCIgZmlsbD1cIiM5MjQwMEVcIj48L2NpcmNsZT5cbiAgICAgIDwvc3ZnPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzkyNDAwRV1cIj57eyByZW9yZGVyTGFiZWxzLmJhbm5lclRpdGxlIH19PC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1bIzkyNDAwRV1cIj57eyByZW9yZGVyTGFiZWxzLmJhbm5lckRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuXG4gICAgPGNxYS1zZWxlY3RlZC1maWx0ZXJzXG4gICAgICBbZmlsdGVyQXBwbGllZF09XCJmaWx0ZXJBcHBsaWVkXCJcbiAgICAgIFtjaGlwc109XCJjaGlwc1wiXG4gICAgICAocmVtb3ZlQ2hpcCk9XCJvblJlbW92ZUNoaXAoJGV2ZW50KVwiXG4gICAgICAoY2xlYXJBbGwpPVwib25DbGVhckFsbENoaXBzKClcIlxuICAgICAgKG9uQ2xlYXJBbGwpPVwib25DbGVhckFsbC5lbWl0KClcIlxuICAgID5cbiAgICA8L2NxYS1zZWxlY3RlZC1maWx0ZXJzPlxuXG4gICAgPGNxYS1keW5hbWljLWZpbHRlclxuICAgICAgKm5nSWY9XCJzaG93RmlsdGVyUGFuZWxcIlxuICAgICAgW2NvbmZpZ109XCJmaWx0ZXJDb25maWdcIlxuICAgICAgW21vZGVsXT1cImZpbHRlck1vZGVsXCJcbiAgICAgIFtzaG93RmlsdGVyUGFuZWxdPVwic2hvd0ZpbHRlclBhbmVsXCJcbiAgICAgIChmaWx0ZXJzQ2hhbmdlZCk9XCJvbkZpbHRlcnNDaGFuZ2VkKCRldmVudClcIlxuICAgICAgKGZpbHRlcnNBcHBsaWVkKT1cIm9uRmlsdGVyc0FwcGxpZWQoJGV2ZW50KVwiXG4gICAgICAob25BcHBseUZpbHRlckNsaWNrKT1cIm9uQXBwbHlGaWx0ZXJDbGljay5lbWl0KCRldmVudClcIlxuICAgICAgKG9uUmVzZXRGaWx0ZXJDbGljayk9XCJoYW5kbGVSZXNldEZpbHRlckNsaWNrKClcIlxuICAgID5cbiAgICA8L2NxYS1keW5hbWljLWZpbHRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTMgY3FhLW1pbi1oLTBcIj5cbiAgICAgIDwhLS0gU2lkZWJhciAob25seSBzaG93biBpbiBtb2R1bGFyIHZpZXcpIC0tPlxuICAgICAgPGNxYS1mb2xkZXItc2lkZWJhclxuICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93U2lkZWJhclwiXG4gICAgICAgIFtmb2xkZXJzXT1cImZvbGRlcnNcIlxuICAgICAgICBbc2VsZWN0ZWRGb2xkZXJJZF09XCJzZWxlY3RlZEZvbGRlcklkXCJcbiAgICAgICAgW2V4cGFuZGVkRm9sZGVySWRzXT1cImV4cGFuZGVkRm9sZGVySWRzXCJcbiAgICAgICAgW3Vub3JnYW5pc2VkQ291bnRdPVwidW5vcmdhbmlzZWRDb3VudFwiXG4gICAgICAgIFthbGxvd0NyZWF0ZV09XCJtb2R1bGFyQ29uZmlnLmFsbG93Q3JlYXRlRm9sZGVyXCJcbiAgICAgICAgW2FsbG93UmVuYW1lXT1cIm1vZHVsYXJDb25maWcuYWxsb3dSZW5hbWVGb2xkZXJcIlxuICAgICAgICBbYWxsb3dEZWxldGVdPVwibW9kdWxhckNvbmZpZy5hbGxvd0RlbGV0ZUZvbGRlclwiXG4gICAgICAgIFthbGxvd0Ryb3BdPVwibW9kdWxhckNvbmZpZy5hbGxvd1Rlc3REcmFnRHJvcFwiXG4gICAgICAgIFtzaG93Q291bnRzXT1cIm1vZHVsYXJDb25maWcuc2hvd0NvdW50c1wiXG4gICAgICAgIFtjb2xsYXBzZWRdPVwic2lkZWJhckNvbGxhcHNlZFwiXG4gICAgICAgIFtsYWJlbHNdPVwibW9kdWxhckxhYmVsc1wiXG4gICAgICAgIChmb2xkZXJTZWxlY3RlZCk9XCJvbkZvbGRlclNlbGVjdGVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRXhwYW5zaW9uVG9nZ2xlZCk9XCJvbkZvbGRlckV4cGFuc2lvblRvZ2dsZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJDcmVhdGVkKT1cIm9uRm9sZGVyQ3JlYXRlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckNyZWF0ZVJlcXVlc3RlZCk9XCJvbkZvbGRlckNyZWF0ZVJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlclJlbmFtZWQpPVwib25Gb2xkZXJSZW5hbWVkKCRldmVudClcIlxuICAgICAgICAoZm9sZGVyRGVsZXRlZCk9XCJvbkZvbGRlckRlbGV0ZWQoJGV2ZW50KVwiXG4gICAgICAgIChmb2xkZXJNb3ZlUmVxdWVzdGVkKT1cIm9uRm9sZGVyTW92ZVJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZCk9XCJvbkZvbGRlckR1cGxpY2F0ZVJlcXVlc3RlZCgkZXZlbnQpXCJcbiAgICAgICAgKHRlc3RzRHJvcHBlZCk9XCJvblRlc3RzRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgKGZvbGRlckRyb3BwZWQpPVwib25Gb2xkZXJEcm9wcGVkKCRldmVudClcIlxuICAgICAgICAoY29sbGFwc2VkQ2hhbmdlKT1cIm9uU2lkZWJhckNvbGxhcHNlZENoYW5nZSgkZXZlbnQpXCJcbiAgICAgID48L2NxYS1mb2xkZXItc2lkZWJhcj5cblxuICAgICAgPCEtLSBSaWdodCBwYW5lIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgIDwhLS0gQnJlYWRjcnVtYiAobW9kdWxhciB2aWV3LCBmb2xkZXIgZHJpbGxlZC1pbikgLS0+XG4gICAgICAgIDxuYXZcbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93QnJlYWRjcnVtYiAmJiAhaXNSb290Vmlld1wiXG4gICAgICAgICAgYXJpYS1sYWJlbD1cIkZvbGRlciBwYXRoXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNjAwIGNxYS1tYi0zXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaG92ZXI6Y3FhLXRleHQtaW5kaWdvLTYwMFwiIChjbGljayk9XCJvbkZvbGRlclNlbGVjdGVkKG51bGwpXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtYWxpZ24tbWlkZGxlXCIgc3R5bGU9XCJmb250LXNpemU6MTZweDt3aWR0aDoxNnB4O2hlaWdodDoxNnB4XCI+Zm9sZGVyX29wZW48L21hdC1pY29uPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtYWxpZ24tbWlkZGxlIGNxYS1tbC0xXCI+e3sgbW9kdWxhckxhYmVscy5hbGxGb2xkZXJzIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNydW1iIG9mIGJyZWFkY3J1bWJUcmFpbDsgbGV0IGxhc3QgPSBsYXN0XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNDAwXCI+Lzwvc3Bhbj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaG92ZXI6Y3FhLXRleHQtaW5kaWdvLTYwMFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jcWEtdGV4dC1uZXV0cmFsLTkwMF09XCJsYXN0XCJcbiAgICAgICAgICAgICAgW2NsYXNzLmNxYS1mb250LXNlbWlib2xkXT1cImxhc3RcIlxuICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwibGFzdFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCIhbGFzdCAmJiBvbkZvbGRlclNlbGVjdGVkKGNydW1iLmlkKVwiXG4gICAgICAgICAgICA+e3sgY3J1bWIubmFtZSB9fTwvYnV0dG9uPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25hdj5cblxuICAgICAgICA8IS0tIEZvbGRlciBncmlkOiBtb2R1bGFyICsgcm9vdCB2aWV3IC0tPlxuICAgICAgICA8c2VjdGlvblxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiBpc1Jvb3RWaWV3ICYmIG1vZHVsYXJDb25maWcuc2hvd0ZvbGRlckdyaWQgJiYgcm9vdEZvbGRlclRpbGVzLmxlbmd0aFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtbWItNFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1iLTJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNjAwXCIgc3R5bGU9XCJmb250LXNpemU6MTZweDt3aWR0aDoxNnB4O2hlaWdodDoxNnB4XCI+Zm9sZGVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtODAwXCI+e3sgbW9kdWxhckxhYmVscy5vcmdhbmlzZWQgfX08L2gzPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1uZXV0cmFsLTUwMFwiPlxuICAgICAgICAgICAgICB7eyByb290Rm9sZGVyVGlsZXMubGVuZ3RoID09PSAxID8gbW9kdWxhckxhYmVscy5mb2xkZXJzQ291bnRTaW5ndWxhciA6IG1vZHVsYXJMYWJlbHMuZm9sZGVyc0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcnICsgcm9vdEZvbGRlclRpbGVzLmxlbmd0aCkgfX1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtbm93cmFwIGNxYS1nYXAtMyBjcWEtb3ZlcmZsb3cteC1hdXRvIGNxYS1zY3JvbGxiYXItdGhpbiBjcWEtcGItMlwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZiBvZiByb290Rm9sZGVyVGlsZXNcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2NxYUZvbGRlckRyb3BdPVwiZi5pZFwiXG4gICAgICAgICAgICAgIFtkcm9wRW5hYmxlZF09XCJtb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wXCJcbiAgICAgICAgICAgICAgKHRlc3RzRHJvcHBlZCk9XCJvblRlc3RzRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyU2VsZWN0ZWQoZi5pZClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zaHJpbmstMCBjcWEtdy1bMjQwcHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLXRleHQtbGVmdCBjcWEtcC0zIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWzAuNXB4XSBjcWEtYm9yZGVyLVsjRTJFMkUzXSBjcWEtYmctd2hpdGUgaG92ZXI6Y3FhLWJvcmRlci1bI0Q4RDlGQ10gaG92ZXI6Y3FhLXNoYWRvdy1zbSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9sZGVySWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWJhc2UgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC05MDAgY3FhLXRydW5jYXRlIGNxYS1sZWFkaW5nLXRpZ2h0XCI+e3sgZi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtb2R1bGFyQ29uZmlnLnNob3dDb3VudHNcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNTAwIGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoZi5jb3VudCA/PyAwKSA9PT0gMSA/IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFNpbmd1bGFyIDogbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcnICsgKGYuY291bnQgPz8gMCkpIH19PG5nLWNvbnRhaW5lciAqbmdJZj1cImYuY2hpbGRyZW4/Lmxlbmd0aFwiPiDCtyB7eyBmLmNoaWxkcmVuIS5sZW5ndGggPT09IDEgPyBtb2R1bGFyTGFiZWxzLm9uZVN1YmZvbGRlciA6IG1vZHVsYXJMYWJlbHMuc3ViZm9sZGVyc0NvdW50LnJlcGxhY2UoJ3tufScsICcnICsgZi5jaGlsZHJlbiEubGVuZ3RoKSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtbmV1dHJhbC00MDAgY3FhLXNocmluay0wXCIgc3R5bGU9XCJmb250LXNpemU6MjBweDt3aWR0aDoyMHB4O2hlaWdodDoyMHB4XCI+Y2hldnJvbl9yaWdodDwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPCEtLSBcIisgTmV3IGZvbGRlclwiIHRpbGUgLS0+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICpuZ0lmPVwibW9kdWxhckNvbmZpZy5hbGxvd0NyZWF0ZUZvbGRlclwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwib25Gb2xkZXJDcmVhdGVSZXF1ZXN0ZWQoeyBwYXJlbnRJZDogbnVsbCB9KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY3FhLXNocmluay0wIGNxYS13LVsyNDBweF0gY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLXRleHQtbGVmdCBjcWEtcC0zIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWzAuNXB4XSBjcWEtYm9yZGVyLVsjRTJFMkUzXSBjcWEtYmctbmV1dHJhbC01MCBob3ZlcjpjcWEtYm9yZGVyLVsjRDhEOUZDXSBob3ZlcjpjcWEtYmctd2hpdGUgY3FhLXRyYW5zaXRpb24tY29sb3JzXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImFkZEljb25DaGlwXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWJhc2UgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC02MDAgY3FhLXRydW5jYXRlIGNxYS1sZWFkaW5nLXRpZ2h0XCI+e3sgbW9kdWxhckxhYmVscy5uZXdGb2xkZXIgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTQwMFwiPnt7IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFBsdXJhbC5yZXBsYWNlKCd7bn0nLCAnMCcpIH19PC9zcGFuPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L3NlY3Rpb24+XG5cbiAgICAgICAgPCEtLSBTdWJmb2xkZXIgc2VjdGlvbjogbW9kdWxhciArIGZvbGRlciB2aWV3LiBTaG93biB3aGVuZXZlciBkcmlsbGVkIGluIChldmVuIGlmIG5vIHN1YmZvbGRlcnMsIHNvIHRoZSBcIisgTmV3IGZvbGRlclwiIHRpbGUgcmVtYWlucyByZWFjaGFibGUpLiAtLT5cbiAgICAgICAgPHNlY3Rpb25cbiAgICAgICAgICAqbmdJZj1cImlzTW9kdWxhclZpZXcgJiYgIWlzUm9vdFZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93U3ViZm9sZGVyU2VjdGlvbiAmJiBzdWJmb2xkZXJUaWxlcy5sZW5ndGhcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLW1iLTRcIlxuICAgICAgICA+XG4gICAgICAgICAgPGRpdiAqbmdJZj1cInN1YmZvbGRlclRpbGVzLmxlbmd0aCB8fCBtb2R1bGFyQ29uZmlnLmFsbG93Q3JlYXRlRm9sZGVyXCIgY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtdGV4dC1uZXV0cmFsLTYwMCBjcWEtbWItMlwiPlxuICAgICAgICAgICAge3sgbW9kdWxhckxhYmVscy5zdWJmb2xkZXJzSW4gfX0ge3sgYnJlYWRjcnVtYlRyYWlsLmxlbmd0aCA/IGJyZWFkY3J1bWJUcmFpbFticmVhZGNydW1iVHJhaWwubGVuZ3RoIC0gMV0ubmFtZSA6ICcnIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LW5vd3JhcCBjcWEtZ2FwLTMgY3FhLW92ZXJmbG93LXgtYXV0byBjcWEtc2Nyb2xsYmFyLXRoaW4gY3FhLXBiLTJcIj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGYgb2Ygc3ViZm9sZGVyVGlsZXNcIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgW2NxYUZvbGRlckRyb3BdPVwiZi5pZFwiXG4gICAgICAgICAgICAgIFtkcm9wRW5hYmxlZF09XCJtb2R1bGFyQ29uZmlnLmFsbG93VGVzdERyYWdEcm9wXCJcbiAgICAgICAgICAgICAgKHRlc3RzRHJvcHBlZCk9XCJvblRlc3RzRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyU2VsZWN0ZWQoZi5pZClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS1zaHJpbmstMCBjcWEtdy1bMjQwcHhdIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtZ2FwLTMgY3FhLXRleHQtbGVmdCBjcWEtcC0zIGNxYS1yb3VuZGVkLVsxMHB4XSBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWzAuNXB4XSBjcWEtYm9yZGVyLVsjRTJFMkUzXSBjcWEtYmctd2hpdGUgaG92ZXI6Y3FhLWJvcmRlci1bI0Q4RDlGQ10gaG92ZXI6Y3FhLXNoYWRvdy1zbSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTMgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9sZGVySWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LWJhc2UgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtbmV1dHJhbC05MDAgY3FhLXRydW5jYXRlIGNxYS1sZWFkaW5nLXRpZ2h0XCI+e3sgZi5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJtb2R1bGFyQ29uZmlnLnNob3dDb3VudHNcIiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNTAwIGNxYS10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyAoZi5jb3VudCA/PyAwKSA9PT0gMSA/IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFNpbmd1bGFyIDogbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcnICsgKGYuY291bnQgPz8gMCkpIH19XG4gICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1uZXV0cmFsLTQwMCBjcWEtc2hyaW5rLTBcIiBzdHlsZT1cImZvbnQtc2l6ZToyMHB4O3dpZHRoOjIwcHg7aGVpZ2h0OjIwcHhcIj5jaGV2cm9uX3JpZ2h0PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8IS0tIFwiKyBOZXcgZm9sZGVyXCIgdGlsZSAtLT5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgKm5nSWY9XCJtb2R1bGFyQ29uZmlnLmFsbG93Q3JlYXRlRm9sZGVyXCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvbkZvbGRlckNyZWF0ZVJlcXVlc3RlZCh7IHBhcmVudElkOiBzZWxlY3RlZEZvbGRlcklkIH0pXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtc2hyaW5rLTAgY3FhLXctWzI0MHB4XSBjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMyBjcWEtdGV4dC1sZWZ0IGNxYS1wLTMgY3FhLXJvdW5kZWQtWzEwcHhdIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bMC41cHhdIGNxYS1ib3JkZXItWyNFMkUyRTNdIGNxYS1iZy1uZXV0cmFsLTUwIGhvdmVyOmNxYS1ib3JkZXItWyNEOEQ5RkNdIGhvdmVyOmNxYS1iZy13aGl0ZSBjcWEtdHJhbnNpdGlvbi1jb2xvcnNcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiYWRkSWNvbkNoaXBcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtbWluLXctMFwiPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtYmFzZSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1uZXV0cmFsLTYwMCBjcWEtdHJ1bmNhdGUgY3FhLWxlYWRpbmctdGlnaHRcIj57eyBtb2R1bGFyTGFiZWxzLm5ld0ZvbGRlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS10ZXh0LW5ldXRyYWwtNDAwXCI+e3sgbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcwJykgfX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvc2VjdGlvbj5cblxuICAgICAgICA8IS0tIEZvbGRlciBwYW5lbCBoZWFkZXIgYWJvdmUgdGhlIHRhYmxlOiBcIkhvdGVsIFNlYXJjaCAoMylcIiArIENsZWFyIGZpbHRlciAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiaXNNb2R1bGFyVmlldyAmJiAhaXNSb290VmlldyAmJiBtb2R1bGFyQ29uZmlnLnNob3dVbm9yZ2FuaXNlZFNlY3Rpb25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLW1iLTEgY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS1weC00IGNxYS1weS0zIGNxYS1yb3VuZGVkLXQtbGcgY3FhLWJnLWluZGlnby01MCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItaW5kaWdvLTEwMFwiXG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LWluZGlnby01MDBcIiBzdHlsZT1cImZvbnQtc2l6ZToxOHB4O3dpZHRoOjE4cHg7aGVpZ2h0OjE4cHhcIj5mb2xkZXJfb3BlbjwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LWluZGlnby03MDBcIj5cbiAgICAgICAgICAgICAge3sgY3VycmVudEZvbGRlck5vZGU/Lm5hbWUgfX0gKHt7IGN1cnJlbnRGb2xkZXJEaXJlY3RDb3VudCB9fSlcbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXB4LTMgY3FhLXB5LTEgY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LWluZGlnby03MDAgY3FhLWJnLXdoaXRlIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1pbmRpZ28tMjAwIGNxYS1yb3VuZGVkIGhvdmVyOmNxYS1iZy1pbmRpZ28tNTBcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRm9sZGVyU2VsZWN0ZWQobnVsbClcIlxuICAgICAgICAgID57eyBtb2R1bGFyTGFiZWxzLmNsZWFyRmlsdGVyIH19PC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVW5vcmdhbmlzZWQgc2VjdGlvbiBoZWFkZXIgYXQgcm9vdCB2aWV3IC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgKm5nSWY9XCJpc01vZHVsYXJWaWV3ICYmIGlzUm9vdFZpZXcgJiYgbW9kdWxhckNvbmZpZy5zaG93VW5vcmdhbmlzZWRTZWN0aW9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1tYi0yIGNxYS1tdC0yXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LW5ldXRyYWwtNjAwXCIgc3R5bGU9XCJmb250LXNpemU6MTZweDt3aWR0aDoxNnB4O2hlaWdodDoxNnB4XCI+aW5ib3g8L21hdC1pY29uPlxuICAgICAgICAgIDxoMyBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LW5ldXRyYWwtODAwXCI+e3sgbW9kdWxhckxhYmVscy51bm9yZ2FuaXNlZCB9fTwvaDM+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1uZXV0cmFsLTUwMFwiPlxuICAgICAgICAgICAge3sgdW5vcmdhbmlzZWRDb3VudCA9PT0gMSA/IG1vZHVsYXJMYWJlbHMudGVzdHNDb3VudFNpbmd1bGFyIDogbW9kdWxhckxhYmVscy50ZXN0c0NvdW50UGx1cmFsLnJlcGxhY2UoJ3tufScsICcnICsgdW5vcmdhbmlzZWRDb3VudCkgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gVGFibGUgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtcm91bmRlZC1bN3B4XSBjcWEtb3ZlcmZsb3ctaGlkZGVuIGNxYS1ib3JkZXItdCBjcWEtYm9yZGVyLWwgY3FhLWJvcmRlci1yIGNxYS1ib3JkZXItZ3JleS0yMDAgY3FhLXJlbGF0aXZlIGNxYS1vdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKGlzVGFibGVMb2FkaW5nIHx8IGlzVGFibGVEYXRhTG9hZGluZykgfHwgKCFlZmZlY3RpdmVJc0VtcHR5U3RhdGUgJiYgcGFnZWRSb3dzICYmIHBhZ2VkUm93cy5sZW5ndGggPiAwKTsgZWxzZSBzdG9yeUVtcHR5VHBsXCI+XG4gICAgICAgICAgICA8YXBwLWR5bmFtaWMtdGFibGVcbiAgICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29tcHV0ZWRDb2x1bW5zXCJcbiAgICAgICAgICAgICAgW2RhdGFdPVwicGFnZWRSb3dzXCJcbiAgICAgICAgICAgICAgW3Jvd1NlbGVjdGFibGVdPVwicm93U2VsZWN0YWJsZVwiXG4gICAgICAgICAgICAgIFtlbmFibGVMb2NhbFNvcnRdPVwiZW5hYmxlTG9jYWxTb3J0ICYmICFpc1Jlb3JkZXJpbmdcIlxuICAgICAgICAgICAgICBbaXNUYWJsZUxvYWRpbmddPVwiaXNUYWJsZUxvYWRpbmdcIlxuICAgICAgICAgICAgICBbaXNUYWJsZURhdGFMb2FkaW5nXT1cImlzVGFibGVEYXRhTG9hZGluZ1wiXG4gICAgICAgICAgICAgIFtjZWxsSnNvblBhdGhHZXR0ZXJdPVwiY2VsbEpzb25QYXRoR2V0dGVyXCJcbiAgICAgICAgICAgICAgW29uSnNvblBhdGhDb3BpZWRIYW5kbGVyXT1cIm9uSnNvblBhdGhDb3BpZWRIYW5kbGVyXCJcbiAgICAgICAgICAgICAgW2VuYWJsZVJvd1Jlb3JkZXJdPVwiaXNSZW9yZGVyaW5nXCJcbiAgICAgICAgICAgICAgKHJvd1Jlb3JkZXIpPVwib25Sb3dSZW9yZGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAoc29ydENoYW5nZSk9XCJzb3J0Q2hhbmdlLmVtaXQoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5VGFibGVUcGw+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtcHktOFwiPlxuICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XCIvYXNzZXRzL2lsbHVzdHJhdGlvbnMvZW1wdHktc3RhdGUuc3ZnXCIgYWx0PVwiTm8gZGF0YVwiIGNsYXNzPVwiY3FhLXctMzIgY3FhLWgtMzIgY3FhLW1iLTRcIiAvPlxuICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY3FhLXRleHQtbGcgY3FhLWZvbnQtc2VtaWJvbGQgY3FhLW1iLTJcIj5ObyB0ZXN0IGNhc2VzPC9oMz5cbiAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLXRleHQtbmV1dHJhbC01MDAgY3FhLW1iLTRcIj5UcnkgYWRqdXN0aW5nIGZpbHRlcnMgb3IgY3JlYXRlIGEgbmV3IHRlc3QgY2FzZS48L3A+XG4gICAgICAgICAgICAgICAgICA8Y3FhLWJ1dHRvbiB2YXJpYW50PVwiZmlsbGVkXCIgKGNsaWNrZWQpPVwidG9nZ2xlRmlsdGVyKClcIj5TaG93IEZpbHRlcnM8L2NxYS1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2FwcC1keW5hbWljLXRhYmxlPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNzdG9yeUVtcHR5VHBsPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1wLTYgY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxjcWEtZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVmZmVjdGl2ZUlzRW1wdHlTdGF0ZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cImVmZmVjdGl2ZUVtcHR5U3RhdGVDb25maWcudGl0bGVcIlxuICAgICAgICAgICAgICAgIFtkZXNjcmlwdGlvbl09XCJlZmZlY3RpdmVFbXB0eVN0YXRlQ29uZmlnLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICBbaW1hZ2VVcmxdPVwiZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZy5pbWFnZVVybFwiXG4gICAgICAgICAgICAgICAgW2FjdGlvbnNdPVwiZWZmZWN0aXZlRW1wdHlTdGF0ZUNvbmZpZy5hY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25FbXB0eUFjdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L2NxYS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxjcWEtcGFnaW5hdGlvblxuICAgICAgICAgIFt0b3RhbEVsZW1lbnRzXT1cInNlcnZlclNpZGVQYWdpbmF0aW9uID8gdG90YWxFbGVtZW50cyA6IGZpbHRlcmVkUm93cy5sZW5ndGhcIlxuICAgICAgICAgIFtwYWdlSW5kZXhdPVwicGFnZUluZGV4XCJcbiAgICAgICAgICBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgIFtwYWdlU2l6ZU9wdGlvbnNdPVwicGFnZVNpemVPcHRpb25zXCJcbiAgICAgICAgICBbcGFnZVNpemVNZW51RGlyZWN0aW9uXT1cInBhZ2VTaXplTWVudURpcmVjdGlvblwiXG4gICAgICAgICAgW3BhZ2VJdGVtQ291bnRdPVwicGFnZWRSb3dzLmxlbmd0aFwiXG4gICAgICAgICAgKHBhZ2luYXRlKT1cIm9uUGFnaW5hdGUoJGV2ZW50KVwiXG4gICAgICAgICAgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgPC9jcWEtcGFnaW5hdGlvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBSZXVzZWQgYnVsayBhY3Rpb24gdG9vbGJhciAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiYW55Um93U2VsZWN0ZWQgJiYgbW9kdWxhckNvbmZpZy5hbGxvd0J1bGtTZWxlY3Rpb24gJiYgIWlzUmVvcmRlcmluZ1wiIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS1ib3R0b20tWzE4Ljc1cHhdIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXctZnVsbCBsZzpjcWEtbWF4LXctWzY4JV0gY3FhLXNtOm1heC13LVs3NSVdIGNxYS1tYXgtdy1bOTAlXSBjcWEtei1bMV1cIj5cbiAgICAgIDxjcWEtdGFibGUtYWN0aW9uLXRvb2xiYXJcbiAgICAgICAgW3NlbGVjdGVkSXRlbXNdPVwic2VsZWN0ZWRJdGVtcyAmJiBzZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDAgPyBzZWxlY3RlZEl0ZW1zIDogY3VycmVudFNlbGVjdGVkSXRlbXNcIlxuICAgICAgICBbYWN0aW9uc109XCJlZmZlY3RpdmVCdWxrQWN0aW9uc1wiXG4gICAgICAgIFtzaG93U2VsZWN0QWxsXT1cInNob3dTZWxlY3RBbGxJblRvb2xiYXJcIlxuICAgICAgICBbYWxsU2VsZWN0ZWRdPVwiYWxsU2VsZWN0ZWRJblRvb2xiYXJcIlxuICAgICAgICBbc2hvd0Rpc21pc3NdPVwic2hvd0Rpc21pc3NJblRvb2xiYXJcIlxuICAgICAgICAoYWN0aW9uQ2xpY2spPVwib25CdWxrQWN0aW9uKCRldmVudClcIlxuICAgICAgICAoc2VsZWN0QWxsQ2hhbmdlKT1cIm9uQnVsa1NlbGVjdEFsbCgkZXZlbnQpXCJcbiAgICAgICAgKGRpc21pc3MpPVwib25CdWxrRGlzbWlzcygpXCJcbiAgICAgID48L2NxYS10YWJsZS1hY3Rpb24tdG9vbGJhcj5cbiAgICA8L2Rpdj5cblxuICA8L2Rpdj5cbjwvZGl2PlxuXG4iXX0=
|