@theseam/ui-common 0.3.13-beta.1 → 0.3.14-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/theseam-ui-common-datatable.umd.js +28 -4
- package/bundles/theseam-ui-common-datatable.umd.js.map +1 -1
- package/datatable/datatable/datatable.component.d.ts +4 -0
- package/datatable/models/action-item-column-position.d.ts +8 -0
- package/datatable/services/columns-manager.service.d.ts +5 -0
- package/datatable/theseam-ui-common-datatable.metadata.json +1 -1
- package/datatable/utils/create-action-menu-column.d.ts +1 -1
- package/esm2015/datatable/datatable/datatable.component.js +7 -1
- package/esm2015/datatable/datatable-action-menu/datatable-action-menu.component.js +1 -1
- package/esm2015/datatable/models/action-item-column-position.js +2 -0
- package/esm2015/datatable/services/columns-manager.service.js +15 -2
- package/esm2015/datatable/utils/create-action-menu-column.js +4 -3
- package/fesm2015/theseam-ui-common-datatable.js +24 -4
- package/fesm2015/theseam-ui-common-datatable.js.map +1 -1
- package/package.json +1 -1
- package/styles/vendor/ngx-datatable/_ngx-datatable.scss +25 -8
- package/styles/vendor/ngx-datatable/_themes/bootstrap/_variables.scss +18 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { TheSeamDatatableColumn } from '../models/table-column';
|
|
2
2
|
export declare const ACTION_MENU_COLUMN_PROP = "$$__actionMenu__";
|
|
3
|
-
export declare function createActionMenuColumn(cellTemplate: any, headerTemplate: any): TheSeamDatatableColumn;
|
|
3
|
+
export declare function createActionMenuColumn(cellTemplate: any, headerTemplate: any, frozenLeft?: boolean, frozenRight?: boolean): TheSeamDatatableColumn;
|
|
@@ -222,6 +222,11 @@ export class DatatableComponent {
|
|
|
222
222
|
}
|
|
223
223
|
this._dataSourceSubject.next(value || undefined);
|
|
224
224
|
}
|
|
225
|
+
get actionItemColumnPosition() { return this._actionItemColumnPosition; }
|
|
226
|
+
set actionItemColumnPosition(value) {
|
|
227
|
+
this._actionItemColumnPosition = value;
|
|
228
|
+
this._columnsManager.setActionItemColumnPosition(this._actionItemColumnPosition);
|
|
229
|
+
}
|
|
225
230
|
set columnComponents(value) {
|
|
226
231
|
var _a;
|
|
227
232
|
this._columnsManager.setTemplateColumns(translateTemplateColumns((_a = value === null || value === void 0 ? void 0 : value.toArray()) !== null && _a !== void 0 ? _a : []));
|
|
@@ -483,6 +488,7 @@ DatatableComponent.propDecorators = {
|
|
|
483
488
|
scrollbarV: [{ type: Input }],
|
|
484
489
|
scrollbarH: [{ type: Input }],
|
|
485
490
|
dataSource: [{ type: Input }],
|
|
491
|
+
actionItemColumnPosition: [{ type: Input }],
|
|
486
492
|
scroll: [{ type: Output }],
|
|
487
493
|
activate: [{ type: Output }],
|
|
488
494
|
select: [{ type: Output }],
|
|
@@ -567,4 +573,4 @@ __decorate([
|
|
|
567
573
|
__decorate([
|
|
568
574
|
InputBoolean()
|
|
569
575
|
], DatatableComponent.prototype, "scrollbarH", void 0);
|
|
570
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzNDLDJCQUEyQixFQUMzQixRQUFRLEVBRVQsTUFBTSx1QkFBdUIsQ0FBQTtBQUc5QixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFN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QUFJdEM7SUFBZixZQUFZLEVBQUU7K0RBQXFDO0FBSXBDO0lBQWYsWUFBWSxFQUFFO3NEQUE0QjtBQUM1QjtJQUFkLFdBQVcsRUFBRTt5REFBMkI7QUFHekI7SUFBZixZQUFZLEVBQUU7MERBQStCO0FBRS9CO0lBQWQsV0FBVyxFQUFFO3dEQUEwQjtBQUN6QjtJQUFkLFdBQVcsRUFBRTtxREFBdUI7QUFDdEI7SUFBZCxXQUFXLEVBQUU7d0RBQTBCO0FBRXhCO0lBQWYsWUFBWSxFQUFFO3NEQUEyQjtBQUMxQjtJQUFmLFlBQVksRUFBRTtzREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDaGV2cm9uRG93biwgZmFDaGV2cm9uUmlnaHQsIGZhU3Bpbm5lciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7XG4gIENvbHVtbk1vZGUsXG4gIENvbnRleHRtZW51VHlwZSxcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBEYXRhdGFibGVDb21wb25lbnQgYXMgTmd4RGF0YXRhYmxlQ29tcG9uZW50LFxuICBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsXG4gIFNvcnRUeXBlLFxuICBUcmVlU3RhdHVzXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgY29tcG9zZURhdGFGaWx0ZXJzLCBjb21wb3NlRGF0YUZpbHRlclN0YXRlcywgRGF0YUZpbHRlciwgRGF0YUZpbHRlclN0YXRlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCwgd2FpdE9uQ29uZGl0aW9uQXN5bmMgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLWZvb3Rlci9kYXRhdGFibGUtZm9vdGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtbWVudS1iYXIvZGF0YXRhYmxlLW1lbnUtYmFyLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtcm93LWRldGFpbC9kYXRhdGFibGUtcm93LWRldGFpbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyBEYXRhdGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1kYXRhLXNvdXJjZSdcbmltcG9ydCB7IFRoZVNlYW1QYWdlSW5mbyB9IGZyb20gJy4uL21vZGVscy9wYWdlLWluZm8nXG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvc29ydC1ldmVudCdcbmltcG9ydCB7IFNvcnRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtaXRlbSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiB9IGZyb20gJy4uL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyByZW1vdmVVbnVzZWREaWZmcyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZS11bnVzZWQtZGlmZnMnXG5pbXBvcnQgeyB0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMgfSBmcm9tICcuLi91dGlscy90cmFuc2xhdGUtdGVtcGxhdGVzJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLWFsdGVyYXRpb25zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb2x1bW5zLWFsdGVyYXRpb25zLXN0YXRlcydcbmltcG9ydCB7IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy93aWR0aC5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbiwgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvb3JkZXIuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgU29ydENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvc29ydC5jb2x1bW5zLWFsdGVyYXRpb24nXG5cbi8qKlxuICogTk9URTogVGhpcyBpcyBzdGlsbCBiZWluZyB3b3JrZWQgb24uIEkgYW0gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhpcyBtb2RlbFxuICogYmVjYXVzZSBgbmd4LWRhdGF0YWJsZWAganVzdCB1c2VzIGFuIHVudHlwZWQgb2JqZWN0IGFuZCBzZXRzIHByb3BlcnRpZXMgaW5cbiAqIG11bHRpcGxlIHBsYWNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2VsbENvbnRleHQge1xuICBhbGxSb3dzU2VsZWN0ZWQ6IGZhbHNlXG5cbiAgc2VsZWN0Rm46ICgpID0+IGFueVxuICBzb3J0RGlyPzogJ2FzYycgfCAnZGVzYydcbiAgc29ydEZuOiAoKSA9PiBhbnlcblxuICBleHBhbmRlZD86IGJvb2xlYW5cblxuICBvbkNoZWNrYm94Q2hhbmdlRm4/OiBhbnlcbiAgYWN0aXZhdGVGbj86IGFueVxuICByb3c/OiBhbnlcbiAgZ3JvdXA/OiBhbnlcbiAgdmFsdWU/OiBhbnlcbiAgY29sdW1uPzogVGhlU2VhbURhdGF0YWJsZUNvbHVtblxuICByb3dIZWlnaHQ/OiBudW1iZXJcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW5cbiAgcm93SW5kZXg/OiBudW1iZXJcbiAgdHJlZVN0YXR1cz86IFRyZWVTdGF0dXNcbiAgb25UcmVlQWN0aW9uPzogYW55XG59XG5cbi8qKlxuICogSW50ZW5kZWQgZm9yIGludGVybmFsIGNsYXNzZXMgZGVjbGFyZWQgYnkgdGhlIGBUaGVTZWFtRGF0YXRhYmxlTW9kdWxlYC5cbiAqL1xuZXhwb3J0IGNvbnN0IFRIRVNFQU1fREFUQVRBQkxFID0gbmV3IEluamVjdGlvblRva2VuPERhdGFGaWx0ZXI+KCdMaWJEYXRhdGFibGUnKVxuXG5leHBvcnQgY29uc3QgX1RIRVNFQU1fREFUQVRBQkxFOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fREFUQVRBQkxFLFxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tdXNlLWJlZm9yZS1kZWNsYXJlXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IERhdGF0YWJsZUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUjogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUixcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NlYW0tZGF0YXRhYmxlJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGF0YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2RhdGF0YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgYW5pbWF0aW9uczogW1xuICAgIHRyaWdnZXIoJ3NsaWRlRG93bicsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKC0yMCUpJywgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICd0cmFuc2xhdGVZKDApJywgb3BhY2l0eTogJzEnIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcycsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSksXG4gICAgICBdKVxuICAgIF0pXG4gIF0sXG4gIHByb3ZpZGVyczogW1xuICAgIF9USEVTRUFNX0RBVEFUQUJMRSxcbiAgICBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gICAgQ29sdW1uc01hbmFnZXJTZXJ2aWNlLFxuICAgIENvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXJTZXJ2aWNlLFxuICBdXG59KVxuZXhwb3J0IGNsYXNzIERhdGF0YWJsZUNvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBUaGVTZWFtRGF0YXRhYmxlQWNjZXNzb3IsIENvbGxlY3Rpb25WaWV3ZXIge1xuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxQYWdpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZXh0ZXJuYWxTb3J0aW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsRmlsdGVyaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmdJbmRpY2F0b3I6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfcmVvcmRlcmFibGU6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3dhcENvbHVtbnM6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZ3JvdXBFeHBhbnNpb25EZWZhdWx0OiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3NlbGVjdEFsbFJvd3NPblBhZ2U6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc3VtbWFyeVJvdzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV92aXJ0dWFsaXphdGlvbjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJWOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Njcm9sbGJhckg6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGltaXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb3VudDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX29mZnNldDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hlYWRlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jvd0hlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Zvb3RlckhlaWdodDogTnVtYmVySW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQgfCBudWxsXG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zb3J0czogU29ydEl0ZW1bXSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICByZWFkb25seSBfZmFDaGV2cm9uRG93biA9IGZhQ2hldnJvbkRvd25cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvblJpZ2h0ID0gZmFDaGV2cm9uUmlnaHRcbiAgcmVhZG9ubHkgX2ZhU3Bpbm5lciA9IGZhU3Bpbm5lclxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdCgpXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZpbHRlcnNTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxEYXRhRmlsdGVyW10+KFtdKVxuICBwcml2YXRlIHJlYWRvbmx5IF9kYXRhU291cmNlU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZClcblxuICBwcml2YXRlIF9yZXNpemluZzogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgZmlsdGVyU3RhdGVzOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJTdGF0ZVtdPlxuXG4gIGdldCBmaWx0ZXJzKCk6IERhdGFGaWx0ZXJbXSB7IHJldHVybiB0aGlzLl9maWx0ZXJzU3ViamVjdC52YWx1ZSB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlcnMkOiBPYnNlcnZhYmxlPERhdGFGaWx0ZXJbXT5cblxuICBASW5wdXQoKVxuICBnZXQgcHJlZmVyZW5jZXNLZXkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9wcmVmZXJlbmNlc0tleS52YWx1ZSB9XG4gIHNldCBwcmVmZXJlbmNlc0tleSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkgeyB0aGlzLl9wcmVmZXJlbmNlc0tleS5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZCkgfVxuICBwcml2YXRlIF9wcmVmZXJlbmNlc0tleSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbD4odW5kZWZpbmVkKVxuXG4gIEBJbnB1dCgpIHRhcmdldE1hcmtlclRlbXBsYXRlOiBhbnlcblxuICBASW5wdXQoKVxuICBzZXQgY29sdW1ucyh2YWx1ZTogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0SW5wdXRDb2x1bW5zKEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbXSlcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIGdldCByb3dzKCk6IGFueVtdIHsgcmV0dXJuIHRoaXMuX3Jvd3MudmFsdWUgfVxuICBzZXQgcm93cyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLl9yb3dzLm5leHQodmFsdWUgfHwgW10pXG4gIH1cbiAgcHJpdmF0ZSBfcm93cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKVxuXG4gIHB1YmxpYyByb3dzJDogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICBASW5wdXQoKSBjb2x1bW5Nb2RlOiBDb2x1bW5Nb2RlIHwgdW5kZWZpbmVkIHwgbnVsbCA9IENvbHVtbk1vZGUuZm9yY2VcblxuICBASW5wdXQoKSBncm91cFJvd3NCeTogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBncm91cGVkUm93czogYW55W10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgc2VsZWN0ZWQ6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbCA9IFtdXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsUGFnaW5nOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGV4dGVybmFsU29ydGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbEZpbHRlcmluZzogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGltaXQ6IG51bWJlciB8IHVuZGVmaW5lZFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoMCkgY291bnQ6IG51bWJlciA9IDBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIG9mZnNldDogbnVtYmVyID0gMFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBsb2FkaW5nSW5kaWNhdG9yOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0aW9uVHlwZSgpOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkIHwgbnVsbCB7IHJldHVybiB0aGlzLl9jb2x1bW5zTWFuYWdlci5nZXRTZWxlY3Rpb25UeXBlKCkgfVxuICBzZXQgc2VsZWN0aW9uVHlwZSh2YWx1ZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRTZWxlY3Rpb25UeXBlKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSByZW9yZGVyYWJsZTogYm9vbGVhbiA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN3YXBDb2x1bW5zOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBnZXQgc29ydFR5cGUoKTogU29ydFR5cGUgeyByZXR1cm4gdGhpcy5fc29ydFR5cGUgfVxuICBzZXQgc29ydFR5cGUodmFsdWU6IFNvcnRUeXBlKSB7XG4gICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlID09PSBTb3J0VHlwZS5zaW5nbGUgfHwgdmFsdWUgPT0gU29ydFR5cGUubXVsdGkpKSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IHZhbHVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3NvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG4gICAgfVxuICB9XG4gIF9zb3J0VHlwZTogU29ydFR5cGUgPSBTb3J0VHlwZS5zaW5nbGVcblxuICBASW5wdXQoKVxuICBnZXQgc29ydHMoKTogU29ydEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlID8gdGhpcy5uZ3hEYXRhdGFibGUuc29ydHMgOiB0aGlzLl9zb3J0c1xuICB9XG4gIHNldCBzb3J0cyh2YWx1ZTogU29ydEl0ZW1bXSkge1xuICAgIHRoaXMuX3NvcnRzID0gbm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IGNvZXJjZUFycmF5KHZhbHVlKSA6IFtdXG4gIH1cbiAgX3NvcnRzOiBTb3J0SXRlbVtdID0gW11cblxuICBASW5wdXQoKSBjc3NDbGFzc2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIHNvcnRBc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi11cCcsXG4gICAgc29ydERlc2NlbmRpbmc6ICdkYXRhdGFibGUtaWNvbi1kb3duJyxcbiAgICBwYWdlckxlZnRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLWxlZnQnLFxuICAgIHBhZ2VyUmlnaHRBcnJvdzogJ2RhdGF0YWJsZS1pY29uLXJpZ2h0JyxcbiAgICBwYWdlclByZXZpb3VzOiAnZGF0YXRhYmxlLWljb24tcHJldicsXG4gICAgcGFnZXJOZXh0OiAnZGF0YXRhYmxlLWljb24tc2tpcCdcbiAgfVxuXG4gIEBJbnB1dCgpIG1lc3NhZ2VzOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsID0ge1xuICAgIC8vIE1lc3NhZ2UgdG8gc2hvdyB3aGVuIGFycmF5IGlzIHByZXNlbnRlZFxuICAgIC8vIGJ1dCBjb250YWlucyBubyB2YWx1ZXNcbiAgICBlbXB0eU1lc3NhZ2U6ICdObyByZWNvcmRzIGZvdW5kJyxcblxuICAgIC8vIEZvb3RlciB0b3RhbCBtZXNzYWdlXG4gICAgdG90YWxNZXNzYWdlOiAndG90YWwnLFxuXG4gICAgLy8gRm9vdGVyIHNlbGVjdGVkIG1lc3NhZ2VcbiAgICBzZWxlY3RlZE1lc3NhZ2U6ICdzZWxlY3RlZCdcbiAgfVxuXG4gIEBJbnB1dCgpIHJvd0lkZW50aXR5OiAoKHg6IGFueSkgPT4gYW55KSB8IHVuZGVmaW5lZCB8IG51bGwgPSAoKHg6IGFueSkgPT4geClcblxuICBASW5wdXQoKSByb3dDbGFzczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdENoZWNrOiBhbnkgfCB1bmRlZmluZWQgfCBudWxsXG4gIEBJbnB1dCgpIGRpc3BsYXlDaGVjazogKChyb3c6IGFueSwgY29sdW1uPzogYW55LCB2YWx1ZT86IGFueSkgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGdyb3VwRXhwYW5zaW9uRGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJhY2tCeVByb3A6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2VsZWN0QWxsUm93c09uUGFnZTogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KCkgdHJlZUZyb21SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSB0cmVlVG9SZWxhdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc3VtbWFyeVJvdzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHN1bW1hcnlIZWlnaHQ6IG51bWJlciA9IDMwXG4gIEBJbnB1dCgpIHN1bW1hcnlQb3NpdGlvbjogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCA9ICd0b3AnXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHZpcnR1YWxpemF0aW9uOiBib29sZWFuID0gdHJ1ZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGhlYWRlckhlaWdodDogbnVtYmVyID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgcm93SGVpZ2h0OiBudW1iZXIgPSA1MFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBmb290ZXJIZWlnaHQ6IG51bWJlciA9IDQwXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNjcm9sbGJhclY6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJIOiBib29sZWFuID0gdHJ1ZVxuXG4gIEBJbnB1dCgpXG4gIHNldCBkYXRhU291cmNlKHZhbHVlOiBEYXRhU291cmNlPGFueT4gfCBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhdGFibGVEYXRhU291cmNlKSB7XG4gICAgICB2YWx1ZS5zZXREYXRhdGFibGVBY2Nlc3Nvcih0aGlzKVxuICAgIH1cbiAgICB0aGlzLl9kYXRhU291cmNlU3ViamVjdC5uZXh0KHZhbHVlIHx8IHVuZGVmaW5lZClcbiAgfVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBzY3JvbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNvcnQgPSBuZXcgRXZlbnRFbWl0dGVyPFNvcnRFdmVudD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcGFnZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGhlU2VhbVBhZ2VJbmZvPigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZW9yZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHJlc2l6ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0YWJsZUNvbnRleHRtZW51ID0gbmV3IEV2ZW50RW1pdHRlcjx7IGV2ZW50OiBNb3VzZUV2ZW50LCB0eXBlOiBDb250ZXh0bWVudVR5cGUsIGNvbnRlbnQ6IGFueSB9PihmYWxzZSlcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHRyZWVBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBhY3Rpb25SZWZyZXNoUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgaGlkZGVuQ29sdW1uc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KClcblxuICBAQ29udGVudENoaWxkcmVuKERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudClcbiAgc2V0IGNvbHVtbkNvbXBvbmVudHModmFsdWU6IFF1ZXJ5TGlzdDxEYXRhdGFibGVDb2x1bW5Db21wb25lbnQ+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0VGVtcGxhdGVDb2x1bW5zKHRyYW5zbGF0ZVRlbXBsYXRlQ29sdW1ucyh2YWx1ZT8udG9BcnJheSgpID8/IFtdKSlcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlQWN0aW9uTWVudUNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgYWN0aW9uTWVudT86IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnRcbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgcm93QWN0aW9uSXRlbSgpOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3Jvd0FjdGlvbkl0ZW0gfVxuICBzZXQgcm93QWN0aW9uSXRlbSh2YWx1ZTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3Jvd0FjdGlvbkl0ZW0gPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFJvd0FjdGlvbkl0ZW0obm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3Jvd0FjdGlvbkl0ZW06IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWRcblxuICBAQ29udGVudENoaWxkKFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0RldGFpbD86IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmVcbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI/OiBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlXG5cbiAgQENvbnRlbnRDaGlsZChEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50KVxuICBnZXQgbWVudUJhckNvbXBvbmVudCgpOiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX21lbnVCYXJDb21wb25lbnQgfVxuICBzZXQgbWVudUJhckNvbXBvbmVudCh2YWx1ZTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21lbnVCYXJDb21wb25lbnQgPSB2YWx1ZVxuXG4gICAgaWYgKHRoaXMuX21lbnVCYXJTdWIpIHsgdGhpcy5fbWVudUJhclN1Yi51bnN1YnNjcmliZSgpIH1cblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc2V0TWVudUJhckZpbHRlcnModmFsdWUuZmlsdGVycygpKVxuXG4gICAgICB0aGlzLl9tZW51QmFyU3ViID0gdGhpcy5fbWVudUJhckNvbXBvbmVudD8uZmlsdGVyc0NoYW5nZWRcbiAgICAgICAgLnN1YnNjcmliZSh2ID0+IHsgdGhpcy5fc2V0TWVudUJhckZpbHRlcnModmFsdWUuZmlsdGVycygpKSB9KVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9tZW51QmFyQ29tcG9uZW50OiBEYXRhdGFibGVNZW51QmFyQ29tcG9uZW50IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX21lbnVCYXJTdWI6IFN1YnNjcmlwdGlvbiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50KSBuZ3hEYXRhdGFibGU/OiBOZ3hEYXRhdGFibGVDb21wb25lbnRcbiAgQFZpZXdDaGlsZChOZ3hEYXRhdGFibGVDb21wb25lbnQsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuZ3hEYXRhdGFibGVFbGVtZW50PzogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZSkgbmd4Um93RGV0YWlsPzogRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG5cbiAgQFZpZXdDaGlsZCgnYWN0aW9uTWVudUNlbGxUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYWN0aW9uTWVudUNlbGxUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCB9XG4gIHNldCBhY3Rpb25NZW51Q2VsbFRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRBY3Rpb25NZW51Q2VsbFRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYWN0aW9uTWVudUNlbGxUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCd0cmVlVG9nZ2xlVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHRyZWVUb2dnbGVUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX3RyZWVUb2dnbGVUcGwgfVxuICBzZXQgdHJlZVRvZ2dsZVRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fdHJlZVRvZ2dsZVRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0VHJlZVRvZ2dsZVRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfdHJlZVRvZ2dsZVRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnaGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGhlYWRlclRwbCgpOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2hlYWRlclRwbCB9XG4gIHNldCBoZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9oZWFkZXJUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEhlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfaGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnYmxhbmtIZWFkZXJUcGwnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBnZXQgYmxhbmtIZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9ibGFua0hlYWRlclRwbCB9XG4gIHNldCBibGFua0hlYWRlclRwbCh2YWx1ZTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2JsYW5rSGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRCbGFua0hlYWRlclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfYmxhbmtIZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKCdjZWxsVHlwZVNlbGVjdG9yVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsIH1cbiAgc2V0IGNlbGxUeXBlU2VsZWN0b3JUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRDZWxsVHlwZVNlbGVjdG9yVHBsKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9jZWxsVHlwZVNlbGVjdG9yVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgcHVibGljIGNvbHVtbkNvbXBvbmVudHMkPzogT2JzZXJ2YWJsZTxEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXT5cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc0lucDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cbiAgcHJpdmF0ZSBfY29sRGlmZmVyc1RwbDogeyBbcHJvcE5hbWU6IHN0cmluZ106IEtleVZhbHVlRGlmZmVyPGFueSwgYW55PiB9ID0ge31cblxuICBwdWJsaWMgcmVhZG9ubHkgY29sdW1ucyQ6IE9ic2VydmFibGU8VGhlU2VhbURhdGF0YWJsZUNvbHVtbltdPlxuICBwdWJsaWMgcmVhZG9ubHkgZGlzcGxheUNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cblxuICB2aWV3Q2hhbmdlOiBPYnNlcnZhYmxlPExpc3RSYW5nZT5cblxuICBwcml2YXRlIF9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24gPSBTdWJzY3JpcHRpb24uRU1QVFlcblxuICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBET00tZGVwZW5kZW50IGNvZGUgd2hlbiBhIHdheSB0byBwcm9wZXJ0eSBsaXN0ZW4gZm9yXG4gIC8vIGRibGNsaWNrIG9uIHRoZSBoZWFkZXIgcmVhc2l6ZSBoYW5kbGVzLlxuICBASG9zdExpc3RlbmVyKCdkYmxjbGljaycsIFsgJyRldmVudCcgXSlcbiAgX2RibENsaWNrKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpc0hhbmRsZSA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZS1oYW5kbGUnKVxuICAgIGlmIChpc0hhbmRsZSkge1xuICAgICAgY29uc3QgaXNSZXNpemVhYmxlID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLnBhcmVudEVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygncmVzaXplYWJsZScpXG4gICAgICBpZiAoaXNSZXNpemVhYmxlKSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgIGNvbnN0IGlkID0gKDxIVE1MRWxlbWVudD5ldmVudC50YXJnZXQpLnBhcmVudEVsZW1lbnRcbiAgICAgICAgICA/LnF1ZXJ5U2VsZWN0b3IoJy5kYXRhdGFibGUtY29sdW1uLWhlYWRlci1zZXBhcmF0b3InKVxuICAgICAgICAgID8uZ2V0QXR0cmlidXRlKCdkYXRhLWNvbHVtbi1pZCcpXG4gICAgICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgKS5zdWJzY3JpYmUoY29sdW1ucyA9PiB7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucy5maW5kKGMgPT4gYy4kJGlkID09PSBpZClcbiAgICAgICAgICBpZiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Qcm9wID0gZ2V0Q29sdW1uUHJvcChjb2x1bW4pXG4gICAgICAgICAgICBpZiAoY29sdW1uUHJvcCkgIHtcbiAgICAgICAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHsgY29sdW1uUHJvcCwgY2FuQXV0b1Jlc2l6ZTogdHJ1ZSB9LCBmYWxzZSlcbiAgICAgICAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3ByZWZlcmVuY2VzOiBEYXRhdGFibGVQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc01hbmFnZXI6IENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyOiBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5fcHJlZmVyZW5jZXNLZXkucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBzd2l0Y2hNYXAoa2V5ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoa2V5KSB8fCBrZXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcm9tKHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmxvYWRlZCkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9wcmVmZXJlbmNlcy5zZXRBbHRlcmF0aW9ucyhrZXksIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApKVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKSxcbiAgICApLnN1YnNjcmliZSgpXG5cbiAgICBjb25zdCBhcHBseVByZWZzID0gKGNvbHM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkgPT4gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5jaGFuZ2VzLnBpcGUoXG4gICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYXBwbHkoY29scywgdGhpcylcbiAgICAgICAgcmV0dXJuIGNvbHNcbiAgICAgIH0pLFxuICAgIClcblxuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKHByZWZzS2V5ID0+IHtcbiAgICAgICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQocHJlZnNLZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXMucHJlZmVyZW5jZXMocHJlZnNLZXkpLnBpcGUoXG4gICAgICAgICAgc3dpdGNoTWFwKGFzeW5jIChwcmVmZXJlbmNlcykgPT4ge1xuICAgICAgICAgICAgYXdhaXQgd2FpdE9uQ29uZGl0aW9uQXN5bmMoKCkgPT4gdGhpcy5fcHJlZmVyZW5jZXMubG9hZGVkKVxuICAgICAgICAgICAgcmV0dXJuIHByZWZlcmVuY2VzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAocHJlZmVyZW5jZXMgPT4ge1xuICAgICAgICAgICAgbGV0IGFsdGVyYXRpb25zOiBDb2x1bW5zQWx0ZXJhdGlvbltdID0gW11cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGFsdGVyYXRpb25zID0gbWFwQ29sdW1uc0FsdGVyYXRpb25zU3RhdGVzKHByZWZlcmVuY2VzLmFsdGVyYXRpb25zKVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ1VuYWJsZSB0byBtYXAgY29sdW1ucyBhbHRlcmF0aW9ucyBzdGF0ZXMnKVxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKGFsdGVyYXRpb25zKVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5jb2x1bW5zJCA9IHRoaXMuX2NvbHVtbnNNYW5hZ2VyLmNvbHVtbnMkXG5cbiAgICB0aGlzLmRpc3BsYXlDb2x1bW5zJCA9IHRoaXMuY29sdW1ucyQucGlwZShcbiAgICAgIHN3aXRjaE1hcChjb2xzID0+IGFwcGx5UHJlZnMoY29scykpLFxuICAgICAgbWFwKGNvbHMgPT4gY29scy5maWx0ZXIoYyA9PiAhYy5oaWRkZW4pKSxcbiAgICAgIHRhcCh2ID0+IHJlbW92ZVVudXNlZERpZmZzKHYsIHRoaXMuX2NvbERpZmZlcnNJbnAsIHRoaXMuX2NvbERpZmZlcnNUcGwpKSxcbiAgICApXG5cbiAgICB0aGlzLmZpbHRlcnMkID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKClcblxuICAgIHRoaXMuZmlsdGVyU3RhdGVzID0gdGhpcy5fZmlsdGVyc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIHN3aXRjaE1hcChmaWx0ZXJzID0+IGNvbXBvc2VEYXRhRmlsdGVyU3RhdGVzKGZpbHRlcnMpKVxuICAgIClcblxuICAgIHRoaXMucm93cyQgPSB0aGlzLl9kYXRhU291cmNlU3ViamVjdC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGRhdGFTb3VyY2UgPT4ge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnZGF0YVNvdXJjZScsIGRhdGFTb3VyY2UpXG4gICAgICAgIGxldCBkYXRhU3RyZWFtOiBPYnNlcnZhYmxlPGFueVtdPlxuXG4gICAgICAgIGlmIChpc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnfmRhdGFzb3VyY2UnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU291cmNlLmNvbm5lY3QodGhpcykgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYnNlcnZhYmxlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35vYnNlcnZhYmxlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZSBhcyBhbnlcbiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35hcnJheScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IG9mKGRhdGFTb3VyY2UpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35yb3dzIGZhbGxiYWNrJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gdGhpcy5fcm93cy5hc09ic2VydmFibGUoKVxuICAgICAgICAgICAgLy8gLnBpcGUodGFwKHYgPT4gY29uc29sZS5sb2coJ3Jvd3N+JywgdikpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmV4dGVybmFsRmlsdGVyaW5nKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ25vdCB1c2luZyBleHRlcm5hbEZpbHRlcmluZycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTdHJlYW0ucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcChyb3dzID0+IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdmaWx0ZXJzJywgdikpLFxuICAgICAgICAgICAgICBjb25jYXRNYXAoZmlsdGVycyA9PiBvZihyb3dzKS5waXBlKGNvbXBvc2VEYXRhRmlsdGVycyhmaWx0ZXJzKSkpLFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICkpXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgLy8gZGF0YVN0cmVhbSA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LnBpcGUoXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyAgIGNvbmNhdE1hcChmaWx0ZXJzID0+IGRhdGFTdHJlYW0ucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAvLyAgIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdjb21wb3NlZCBmaWx0ZXJzJywgdikpLFxuICAgICAgICAgIC8vIClcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ3N0cmVhbScsIHYpKSxcbiAgICAgICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICApXG5cbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQgdmlld0NoYW5nZSBmb3IgQ29sbGVjdGlvblZpZXdlci5cbiAgICB0aGlzLnZpZXdDaGFuZ2UgPSB0aGlzLnBhZ2UucGlwZShtYXAocCA9PiAoeyBzdGFydDogMCwgZW5kOiBwLmNvdW50IH0pKSlcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLnJvd0RldGFpbCkge1xuICAgICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gdGhpcy5yb3dEZXRhaWwuX3RvZ2dsZS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5uZ3hSb3dEZXRhaWwpIHtcbiAgICAgICAgICB0aGlzLm5neFJvd0RldGFpbC50b2dnbGUuZW1pdChldmVudClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9yb3dEZXRhaWxUb2dnbGVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TWVudUJhckZpbHRlcnMoZmlsdGVyczogRGF0YUZpbHRlcltdKSB7XG4gICAgdGhpcy5fZmlsdGVyc1N1YmplY3QubmV4dChmaWx0ZXJzIHx8IFtdKVxuICB9XG5cbiAgcHVibGljIGdldENvbHVtbkNvbXBvbmVudChwcm9wTmFtZTogc3RyaW5nKTogRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IHwgbnVsbCB7XG4gICAgaWYgKCF0aGlzLmNvbHVtbkNvbXBvbmVudHMgfHwgdGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCB0cGwgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMuZmluZCh0ID0+IHQucHJvcCA9PT0gcHJvcE5hbWUpXG4gICAgaWYgKHRwbCkge1xuICAgICAgcmV0dXJuIHRwbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBfY29sdW1uRGF0YShjb2w6IGFueSk6IHsgY29sOiBhbnksIGNvbXA6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwgfSB7XG4gICAgY29uc3QgY29tcCA9IHRoaXMuZ2V0Q29sdW1uQ29tcG9uZW50KGNvbC5wcm9wKVxuICAgIHJldHVybiB7IGNvbCwgY29tcCB9XG4gIH1cblxuICBfZ2V0Um93RXhwYW5kZWQocm93OiBhbnkpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGUuYm9keUNvbXBvbmVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQuZ2V0Um93RXhwYW5kZWQocm93KVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHB1YmxpYyB0cmFja0J5Rm5Db2x1bW4oaW5kZXg6IG51bWJlciwgaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIGl0ZW0ucHJvcFxuICB9XG5cbiAgcHVibGljIG9uRGF0YXRhYmxlUmVzaXplKGV2ZW50OiBJRWxlbWVudFJlc2l6ZWRFdmVudCkge1xuICAgIGlmICh0aGlzLm5neERhdGF0YWJsZSAmJiB0aGlzLm5neERhdGF0YWJsZUVsZW1lbnQgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIC8vIFRPRE86IENvbnNpZGVyIGludGVncmF0aW5nIHRoaXMgaW50byB0aGUgbmd4LWRhdGF0YWJsZSBsaWJyYXJ5IHRvIGF2b2lkXG4gICAgICAvLyBtdWx0aXBsZSByZXNpemUgY2FsbHMgd2hlbiB0aGUgdGFibGUgcmVzaXplcyBpdHNlbGYuXG4gICAgICB0aGlzLm5neERhdGF0YWJsZS5yZWNhbGN1bGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgX29uUmVzaXplKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLnJlc2l6ZS5lbWl0KGV2ZW50KVxuXG4gICAgaWYgKCFub3ROdWxsT3JVbmRlZmluZWQoZXZlbnQuY29sdW1uKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBsZXQgYWRkQWx0ZXJhdGlvbiA9IGZhbHNlXG5cbiAgICAgIGlmICghdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0pIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSB0cnVlXG4gICAgICAgIGFkZEFsdGVyYXRpb24gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC5pc0RvbmUpIHtcbiAgICAgICAgdGhpcy5fcmVzaXppbmdbY29sdW1uUHJvcF0gPSBmYWxzZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRkQWx0ZXJhdGlvbikge1xuICAgICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24oe1xuICAgICAgICAgIGNvbHVtblByb3AsXG4gICAgICAgICAgd2lkdGg6IGV2ZW50LmNvbHVtbi53aWR0aCxcbiAgICAgICAgICBjYW5BdXRvUmVzaXplOiBmYWxzZVxuICAgICAgICB9LCB0cnVlKVxuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgfVxuXG4gIF9vblJlb3JkZXIoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMucmVvcmRlci5lbWl0KGV2ZW50KVxuXG4gICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoZXZlbnQuY29sdW1uKVxuICAgIGlmIChjb2x1bW5Qcm9wKSB7XG4gICAgICBjb25zdCBjdXJyZW50T3JkZXJBbHRlcmF0aW9uID0gdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5nZXQoKS5maW5kKHggPT4geC50eXBlID09PSAnb3JkZXInKVxuICAgICAgY29uc3Qgc3RhdGU6IE9yZGVyQ29sdW1uc0FsdGVyYXRpb25TdGF0ZSA9IHtcbiAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgIC4uLihjdXJyZW50T3JkZXJBbHRlcmF0aW9uPy5zdGF0ZS5jb2x1bW5zIHx8IFtdKSxcbiAgICAgICAgICB7IGNvbHVtblByb3AsIGluZGV4OiBldmVudC5uZXdWYWx1ZSB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbihzdGF0ZSwgdHJ1ZSlcbiAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgIH1cbiAgfVxuXG4gIF9vblNvcnQoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuc29ydC5lbWl0KGV2ZW50KVxuXG4gICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBTb3J0Q29sdW1uc0FsdGVyYXRpb24oeyBzb3J0czogZXZlbnQuc29ydHMgfSwgdHJ1ZSlcbiAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgfVxuXG4gIF9vblRyZWVBY3Rpb24oZXZlbnQ6IGFueSkge1xuICAgIGNvbnN0IGluZGV4ID0gZXZlbnQucm93SW5kZXhcbiAgICBjb25zdCByb3cgPSBldmVudC5yb3dcbiAgICBpZiAocm93LnRyZWVTdGF0dXMgPT09ICdjb2xsYXBzZWQnKSB7XG4gICAgICByb3cudHJlZVN0YXR1cyA9ICdleHBhbmRlZCdcbiAgICB9IGVsc2Uge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnY29sbGFwc2VkJ1xuICAgIH1cbiAgICB0aGlzLnJvd3MgPSBbIC4uLnRoaXMucm93cyBdXG4gIH1cblxuICBwdWJsaWMgdHJpZ2dlckFjdGlvblJlZnJlc2hSZXF1ZXN0KCkge1xuICAgIHRoaXMuYWN0aW9uUmVmcmVzaFJlcXVlc3QuZW1pdCh1bmRlZmluZWQpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcGFnZSBpbmZvIGZyb20gdGhlIHdyYXBwZWQgTmd4RGF0YXRhYmxlIGluc3RhbmNlIG9yIGRlZmF1bHRzLlxuICAgKi9cbiAgcHVibGljIGdldCBwYWdlSW5mbygpOiBUaGVTZWFtUGFnZUluZm8ge1xuICAgIHJldHVybiB7XG4gICAgICBvZmZzZXQ6IHRoaXMubmd4RGF0YXRhYmxlPy5vZmZzZXQgPz8gMCxcbiAgICAgIHBhZ2VTaXplOiB0aGlzLm5neERhdGF0YWJsZT8ucGFnZVNpemUgPz8gMCxcbiAgICAgIGxpbWl0OiB0aGlzLm5neERhdGF0YWJsZT8ubGltaXQsXG4gICAgICBjb3VudDogdGhpcy5uZ3hEYXRhdGFibGU/LmNvdW50ID8/IDBcbiAgICB9XG4gIH1cblxufVxuIl19
|
|
576
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvZGF0YXRhYmxlL2RhdGF0YWJsZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RSxPQUFPLEVBQWdCLFdBQVcsRUFBZSxNQUFNLHVCQUF1QixDQUFBO0FBQzlFLE9BQU8sRUFBZ0MsWUFBWSxFQUFhLE1BQU0sMEJBQTBCLENBQUE7QUFDaEcsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osY0FBYyxFQUNkLEtBQUssRUFDTCxTQUFTLEVBSVQsTUFBTSxFQUdOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDakcsT0FBTyxFQUFFLFNBQVMsRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBRWpILE9BQU8sRUFBRSxhQUFhLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzVGLE9BQU8sRUFDTCxVQUFVLEVBS1Ysa0JBQWtCLElBQUkscUJBQXFCLEVBQzNDLDJCQUEyQixFQUMzQixRQUFRLEVBRVQsTUFBTSx1QkFBdUIsQ0FBQTtBQUc5QixPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFN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QUVuQztJQUFkLFdBQVcsRUFBRTtpREFBMEI7QUFDeEI7SUFBZixXQUFXLENBQUMsQ0FBQyxDQUFDO2lEQUFrQjtBQUNqQjtJQUFmLFdBQVcsQ0FBQyxDQUFDLENBQUM7a0RBQW1CO0FBRWxCO0lBQWYsWUFBWSxFQUFFOzREQUFrQztBQVFqQztJQUFmLFlBQVksRUFBRTt1REFBNEI7QUFDM0I7SUFBZixZQUFZLEVBQUU7dURBQTZCO0FBa0Q1QjtJQUFmLFlBQVksRUFBRTtpRUFBdUM7QUFJdEM7SUFBZixZQUFZLEVBQUU7K0RBQXFDO0FBSXBDO0lBQWYsWUFBWSxFQUFFO3NEQUE0QjtBQUM1QjtJQUFkLFdBQVcsRUFBRTt5REFBMkI7QUFHekI7SUFBZixZQUFZLEVBQUU7MERBQStCO0FBRS9CO0lBQWQsV0FBVyxFQUFFO3dEQUEwQjtBQUN6QjtJQUFkLFdBQVcsRUFBRTtxREFBdUI7QUFDdEI7SUFBZCxXQUFXLEVBQUU7d0RBQTBCO0FBRXhCO0lBQWYsWUFBWSxFQUFFO3NEQUEyQjtBQUMxQjtJQUFmLFlBQVksRUFBRTtzREFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnXG5pbXBvcnQgeyBCb29sZWFuSW5wdXQsIGNvZXJjZUFycmF5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbGxlY3Rpb25WaWV3ZXIsIERhdGFTb3VyY2UsIGlzRGF0YVNvdXJjZSwgTGlzdFJhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJ1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSG9zdExpc3RlbmVyLFxuICBJbmplY3Rpb25Ub2tlbixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgS2V5VmFsdWVEaWZmZXIsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBmcm9tLCBpc09ic2VydmFibGUsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgZmFDaGV2cm9uRG93biwgZmFDaGV2cm9uUmlnaHQsIGZhU3Bpbm5lciB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7XG4gIENvbHVtbk1vZGUsXG4gIENvbnRleHRtZW51VHlwZSxcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBEYXRhdGFibGVDb21wb25lbnQgYXMgTmd4RGF0YXRhYmxlQ29tcG9uZW50LFxuICBEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUsXG4gIFNvcnRUeXBlLFxuICBUcmVlU3RhdHVzXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcbmltcG9ydCB0eXBlIHsgU2VsZWN0aW9uVHlwZSB9IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgSW5wdXRCb29sZWFuLCBJbnB1dE51bWJlciB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgY29tcG9zZURhdGFGaWx0ZXJzLCBjb21wb3NlRGF0YUZpbHRlclN0YXRlcywgRGF0YUZpbHRlciwgRGF0YUZpbHRlclN0YXRlIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2RhdGEtZmlsdGVycydcbmltcG9ydCB7IElFbGVtZW50UmVzaXplZEV2ZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL3NoYXJlZCdcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCwgd2FpdE9uQ29uZGl0aW9uQXN5bmMgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtYWN0aW9uLW1lbnUvZGF0YXRhYmxlLWFjdGlvbi1tZW51LmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtRGF0YXRhYmxlRm9vdGVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGF0YXRhYmxlLWZvb3Rlci9kYXRhdGFibGUtZm9vdGVyLmRpcmVjdGl2ZSdcbmltcG9ydCB7IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfSBmcm9tICcuLi9kYXRhdGFibGUtbWVudS1iYXIvZGF0YXRhYmxlLW1lbnUtYmFyLmNvbXBvbmVudCdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUgfSBmcm9tICcuLi9kYXRhdGFibGUtcm93LWRldGFpbC9kYXRhdGFibGUtcm93LWRldGFpbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVBY2Nlc3NvciB9IGZyb20gJy4uL21vZGVscy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyBEYXRhdGFibGVEYXRhU291cmNlIH0gZnJvbSAnLi4vbW9kZWxzL2RhdGF0YWJsZS1kYXRhLXNvdXJjZSdcbmltcG9ydCB7IFRoZVNlYW1QYWdlSW5mbyB9IGZyb20gJy4uL21vZGVscy9wYWdlLWluZm8nXG5pbXBvcnQgeyBTb3J0RXZlbnQgfSBmcm9tICcuLi9tb2RlbHMvc29ydC1ldmVudCdcbmltcG9ydCB7IFNvcnRJdGVtIH0gZnJvbSAnLi4vbW9kZWxzL3NvcnQtaXRlbSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UnXG5pbXBvcnQgeyBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvZGF0YXRhYmxlLXByZWZlcmVuY2VzLnNlcnZpY2UnXG5pbXBvcnQgeyBUSEVTRUFNX0RBVEFUQUJMRV9BQ0NFU1NPUiB9IGZyb20gJy4uL3Rva2Vucy9kYXRhdGFibGUtYWNjZXNzb3InXG5pbXBvcnQgeyByZW1vdmVVbnVzZWREaWZmcyB9IGZyb20gJy4uL3V0aWxzL3JlbW92ZS11bnVzZWQtZGlmZnMnXG5pbXBvcnQgeyB0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMgfSBmcm9tICcuLi91dGlscy90cmFuc2xhdGUtdGVtcGxhdGVzJ1xuaW1wb3J0IHsgQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9jb2x1bW5zLWFsdGVyYXRpb25zLW1hbmFnZXIuc2VydmljZSdcbmltcG9ydCB7IENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbidcbmltcG9ydCB7IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyB9IGZyb20gJy4uL3V0aWxzL21hcC1jb2x1bW5zLWFsdGVyYXRpb25zLXN0YXRlcydcbmltcG9ydCB7IFdpZHRoQ29sdW1uc0FsdGVyYXRpb24gfSBmcm9tICcuLi9tb2RlbHMvY29sdW1ucy1hbHRlcmF0aW9ucy93aWR0aC5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvbiwgT3JkZXJDb2x1bW5zQWx0ZXJhdGlvblN0YXRlIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvb3JkZXIuY29sdW1ucy1hbHRlcmF0aW9uJ1xuaW1wb3J0IHsgU29ydENvbHVtbnNBbHRlcmF0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbnMtYWx0ZXJhdGlvbnMvc29ydC5jb2x1bW5zLWFsdGVyYXRpb24nXG5pbXBvcnQgeyBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfSBmcm9tICcuLi9tb2RlbHMvYWN0aW9uLWl0ZW0tY29sdW1uLXBvc2l0aW9uJ1xuXG4vKipcbiAqIE5PVEU6IFRoaXMgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLiBJIGFtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoaXMgbW9kZWxcbiAqIGJlY2F1c2UgYG5neC1kYXRhdGFibGVgIGp1c3QgdXNlcyBhbiB1bnR5cGVkIG9iamVjdCBhbmQgc2V0cyBwcm9wZXJ0aWVzIGluXG4gKiBtdWx0aXBsZSBwbGFjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNlbGxDb250ZXh0IHtcbiAgYWxsUm93c1NlbGVjdGVkOiBmYWxzZVxuXG4gIHNlbGVjdEZuOiAoKSA9PiBhbnlcbiAgc29ydERpcj86ICdhc2MnIHwgJ2Rlc2MnXG4gIHNvcnRGbjogKCkgPT4gYW55XG5cbiAgZXhwYW5kZWQ/OiBib29sZWFuXG5cbiAgb25DaGVja2JveENoYW5nZUZuPzogYW55XG4gIGFjdGl2YXRlRm4/OiBhbnlcbiAgcm93PzogYW55XG4gIGdyb3VwPzogYW55XG4gIHZhbHVlPzogYW55XG4gIGNvbHVtbj86IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5cbiAgcm93SGVpZ2h0PzogbnVtYmVyXG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuXG4gIHJvd0luZGV4PzogbnVtYmVyXG4gIHRyZWVTdGF0dXM/OiBUcmVlU3RhdHVzXG4gIG9uVHJlZUFjdGlvbj86IGFueVxufVxuXG4vKipcbiAqIEludGVuZGVkIGZvciBpbnRlcm5hbCBjbGFzc2VzIGRlY2xhcmVkIGJ5IHRoZSBgVGhlU2VhbURhdGF0YWJsZU1vZHVsZWAuXG4gKi9cbmV4cG9ydCBjb25zdCBUSEVTRUFNX0RBVEFUQUJMRSA9IG5ldyBJbmplY3Rpb25Ub2tlbjxEYXRhRmlsdGVyPignTGliRGF0YXRhYmxlJylcblxuZXhwb3J0IGNvbnN0IF9USEVTRUFNX0RBVEFUQUJMRTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX0RBVEFUQUJMRSxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBEYXRhdGFibGVDb21wb25lbnQpXG59XG5cbmV4cG9ydCBjb25zdCBfVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1I6IGFueSA9IHtcbiAgcHJvdmlkZTogVEhFU0VBTV9EQVRBVEFCTEVfQUNDRVNTT1IsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gRGF0YXRhYmxlQ29tcG9uZW50KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLWRhdGF0YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kYXRhdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgtMjAlKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoMCknLCBvcGFjaXR5OiAnMScgfSkpLFxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLCBbXG4gICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlWSgwKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjUwbXMnLCBzdHlsZSh7IHRyYW5zZm9ybTogJ3RyYW5zbGF0ZVkoLTIwJSknLCBvcGFjaXR5OiAnMCcgfSkpLFxuICAgICAgXSlcbiAgICBdKVxuICBdLFxuICBwcm92aWRlcnM6IFtcbiAgICBfVEhFU0VBTV9EQVRBVEFCTEUsXG4gICAgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UsXG4gICAgX1RIRVNFQU1fREFUQVRBQkxFX0FDQ0VTU09SLFxuICAgIENvbHVtbnNNYW5hZ2VyU2VydmljZSxcbiAgICBDb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyU2VydmljZSxcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBEYXRhdGFibGVDb21wb25lbnRcbiAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgVGhlU2VhbURhdGF0YWJsZUFjY2Vzc29yLCBDb2xsZWN0aW9uVmlld2VyIHtcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsUGFnaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2V4dGVybmFsU29ydGluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9leHRlcm5hbEZpbHRlcmluZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nSW5kaWNhdG9yOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3Jlb3JkZXJhYmxlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N3YXBDb2x1bW5zOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2dyb3VwRXhwYW5zaW9uRGVmYXVsdDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zZWxlY3RBbGxSb3dzT25QYWdlOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX3N1bW1hcnlSb3c6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfdmlydHVhbGl6YXRpb246IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc2Nyb2xsYmFyVjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zY3JvbGxiYXJIOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xpbWl0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY291bnQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9vZmZzZXQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9oZWFkZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yb3dIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9mb290ZXJIZWlnaHQ6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdW1tYXJ5SGVpZ2h0OiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdIHwgdW5kZWZpbmVkIHwgbnVsbFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfc29ydHM6IFNvcnRJdGVtW10gfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgcmVhZG9ubHkgX2ZhQ2hldnJvbkRvd24gPSBmYUNoZXZyb25Eb3duXG4gIHJlYWRvbmx5IF9mYUNoZXZyb25SaWdodCA9IGZhQ2hldnJvblJpZ2h0XG4gIHJlYWRvbmx5IF9mYVNwaW5uZXIgPSBmYVNwaW5uZXJcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3QoKVxuICBwcml2YXRlIHJlYWRvbmx5IF9maWx0ZXJzU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YUZpbHRlcltdPihbXSlcbiAgcHJpdmF0ZSByZWFkb25seSBfZGF0YVNvdXJjZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PERhdGFTb3VyY2U8YW55PiB8IGFueVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgcHJpdmF0ZSBfcmVzaXppbmc6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGZpbHRlclN0YXRlczogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyU3RhdGVbXT5cblxuICBnZXQgZmlsdGVycygpOiBEYXRhRmlsdGVyW10geyByZXR1cm4gdGhpcy5fZmlsdGVyc1N1YmplY3QudmFsdWUgfVxuXG4gIHB1YmxpYyByZWFkb25seSBmaWx0ZXJzJDogT2JzZXJ2YWJsZTxEYXRhRmlsdGVyW10+XG5cbiAgQElucHV0KClcbiAgZ2V0IHByZWZlcmVuY2VzS2V5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fcHJlZmVyZW5jZXNLZXkudmFsdWUgfVxuICBzZXQgcHJlZmVyZW5jZXNLZXkodmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwpIHsgdGhpcy5fcHJlZmVyZW5jZXNLZXkubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpIH1cbiAgcHJpdmF0ZSBfcHJlZmVyZW5jZXNLZXkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcblxuICBASW5wdXQoKSB0YXJnZXRNYXJrZXJUZW1wbGF0ZTogYW55XG5cbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModmFsdWU6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldElucHV0Q29sdW1ucyhBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW10pXG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgcm93cygpOiBhbnlbXSB7IHJldHVybiB0aGlzLl9yb3dzLnZhbHVlIH1cbiAgc2V0IHJvd3ModmFsdWU6IGFueVtdKSB7XG4gICAgdGhpcy5fcm93cy5uZXh0KHZhbHVlIHx8IFtdKVxuICB9XG4gIHByaXZhdGUgX3Jvd3MgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSlcblxuICBwdWJsaWMgcm93cyQ6IE9ic2VydmFibGU8YW55W10+XG5cbiAgQElucHV0KCkgY29sdW1uTW9kZTogQ29sdW1uTW9kZSB8IHVuZGVmaW5lZCB8IG51bGwgPSBDb2x1bW5Nb2RlLmZvcmNlXG5cbiAgQElucHV0KCkgZ3JvdXBSb3dzQnk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgZ3JvdXBlZFJvd3M6IGFueVtdIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIHNlbGVjdGVkOiBhbnlbXSB8IHVuZGVmaW5lZCB8IG51bGwgPSBbXVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFBhZ2luZzogYm9vbGVhbiA9IGZhbHNlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBleHRlcm5hbFNvcnRpbmc6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZXh0ZXJuYWxGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIGxpbWl0OiBudW1iZXIgfCB1bmRlZmluZWRcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKDApIGNvdW50OiBudW1iZXIgPSAwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigwKSBvZmZzZXQ6IG51bWJlciA9IDBcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZ0luZGljYXRvcjogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNlbGVjdGlvblR5cGUoKTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZCB8IG51bGwgeyByZXR1cm4gdGhpcy5fY29sdW1uc01hbmFnZXIuZ2V0U2VsZWN0aW9uVHlwZSgpIH1cbiAgc2V0IHNlbGVjdGlvblR5cGUodmFsdWU6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0U2VsZWN0aW9uVHlwZShub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgcmVvcmRlcmFibGU6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzd2FwQ29sdW1uczogYm9vbGVhbiA9IGZhbHNlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRUeXBlKCk6IFNvcnRUeXBlIHsgcmV0dXJuIHRoaXMuX3NvcnRUeXBlIH1cbiAgc2V0IHNvcnRUeXBlKHZhbHVlOiBTb3J0VHlwZSkge1xuICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpICYmICh2YWx1ZSA9PT0gU29ydFR5cGUuc2luZ2xlIHx8IHZhbHVlID09IFNvcnRUeXBlLm11bHRpKSkge1xuICAgICAgdGhpcy5fc29ydFR5cGUgPSB2YWx1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zb3J0VHlwZSA9IFNvcnRUeXBlLnNpbmdsZVxuICAgIH1cbiAgfVxuICBfc29ydFR5cGU6IFNvcnRUeXBlID0gU29ydFR5cGUuc2luZ2xlXG5cbiAgQElucHV0KClcbiAgZ2V0IHNvcnRzKCk6IFNvcnRJdGVtW10ge1xuICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZSA/IHRoaXMubmd4RGF0YXRhYmxlLnNvcnRzIDogdGhpcy5fc29ydHNcbiAgfVxuICBzZXQgc29ydHModmFsdWU6IFNvcnRJdGVtW10pIHtcbiAgICB0aGlzLl9zb3J0cyA9IG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyBjb2VyY2VBcnJheSh2YWx1ZSkgOiBbXVxuICB9XG4gIF9zb3J0czogU29ydEl0ZW1bXSA9IFtdXG5cbiAgQElucHV0KCkgY3NzQ2xhc3NlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICBzb3J0QXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tdXAnLFxuICAgIHNvcnREZXNjZW5kaW5nOiAnZGF0YXRhYmxlLWljb24tZG93bicsXG4gICAgcGFnZXJMZWZ0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1sZWZ0JyxcbiAgICBwYWdlclJpZ2h0QXJyb3c6ICdkYXRhdGFibGUtaWNvbi1yaWdodCcsXG4gICAgcGFnZXJQcmV2aW91czogJ2RhdGF0YWJsZS1pY29uLXByZXYnLFxuICAgIHBhZ2VyTmV4dDogJ2RhdGF0YWJsZS1pY29uLXNraXAnXG4gIH1cblxuICBASW5wdXQoKSBtZXNzYWdlczogYW55IHwgdW5kZWZpbmVkIHwgbnVsbCA9IHtcbiAgICAvLyBNZXNzYWdlIHRvIHNob3cgd2hlbiBhcnJheSBpcyBwcmVzZW50ZWRcbiAgICAvLyBidXQgY29udGFpbnMgbm8gdmFsdWVzXG4gICAgZW1wdHlNZXNzYWdlOiAnTm8gcmVjb3JkcyBmb3VuZCcsXG5cbiAgICAvLyBGb290ZXIgdG90YWwgbWVzc2FnZVxuICAgIHRvdGFsTWVzc2FnZTogJ3RvdGFsJyxcblxuICAgIC8vIEZvb3RlciBzZWxlY3RlZCBtZXNzYWdlXG4gICAgc2VsZWN0ZWRNZXNzYWdlOiAnc2VsZWN0ZWQnXG4gIH1cblxuICBASW5wdXQoKSByb3dJZGVudGl0eTogKCh4OiBhbnkpID0+IGFueSkgfCB1bmRlZmluZWQgfCBudWxsID0gKCh4OiBhbnkpID0+IHgpXG5cbiAgQElucHV0KCkgcm93Q2xhc3M6IGFueSB8IHVuZGVmaW5lZCB8IG51bGxcblxuICBASW5wdXQoKSBzZWxlY3RDaGVjazogYW55IHwgdW5kZWZpbmVkIHwgbnVsbFxuICBASW5wdXQoKSBkaXNwbGF5Q2hlY2s6ICgocm93OiBhbnksIGNvbHVtbj86IGFueSwgdmFsdWU/OiBhbnkpID0+IGJvb2xlYW4pIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBncm91cEV4cGFuc2lvbkRlZmF1bHQ6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyYWNrQnlQcm9wOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHNlbGVjdEFsbFJvd3NPblBhZ2U6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIHRyZWVGcm9tUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgdHJlZVRvUmVsYXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHN1bW1hcnlSb3c6IGJvb2xlYW4gPSBmYWxzZVxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBzdW1tYXJ5SGVpZ2h0OiBudW1iZXIgPSAzMFxuICBASW5wdXQoKSBzdW1tYXJ5UG9zaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgPSAndG9wJ1xuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSB2aXJ0dWFsaXphdGlvbjogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBoZWFkZXJIZWlnaHQ6IG51bWJlciA9IDUwXG4gIEBJbnB1dCgpIEBJbnB1dE51bWJlcigpIHJvd0hlaWdodDogbnVtYmVyID0gNTBcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgZm9vdGVySGVpZ2h0OiBudW1iZXIgPSA0MFxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzY3JvbGxiYXJWOiBib29sZWFuID0gdHJ1ZVxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgc2Nyb2xsYmFySDogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKVxuICBzZXQgZGF0YVNvdXJjZSh2YWx1ZTogRGF0YVNvdXJjZTxhbnk+IHwgYW55W10gfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRGF0YXRhYmxlRGF0YVNvdXJjZSkge1xuICAgICAgdmFsdWUuc2V0RGF0YXRhYmxlQWNjZXNzb3IodGhpcylcbiAgICB9XG4gICAgdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QubmV4dCh2YWx1ZSB8fCB1bmRlZmluZWQpXG4gIH1cblxuICBASW5wdXQoKVxuICBnZXQgYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKCk6IEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfVxuICBzZXQgYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uKHZhbHVlOiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbih0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24pXG4gIH1cbiAgcHJpdmF0ZSBfYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uOiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfCB1bmRlZmluZWRcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgc2Nyb2xsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2YXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSBzb3J0ID0gbmV3IEV2ZW50RW1pdHRlcjxTb3J0RXZlbnQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IHBhZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFRoZVNlYW1QYWdlSW5mbz4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgcmVvcmRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSByZWFkb25seSByZXNpemUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgcmVhZG9ubHkgdGFibGVDb250ZXh0bWVudSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudCwgdHlwZTogQ29udGV4dG1lbnVUeXBlLCBjb250ZW50OiBhbnkgfT4oZmFsc2UpXG4gIEBPdXRwdXQoKSByZWFkb25seSB0cmVlQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcblxuICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aW9uUmVmcmVzaFJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcbiAgQE91dHB1dCgpIHJlYWRvbmx5IGhpZGRlbkNvbHVtbnNDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpXG5cbiAgQENvbnRlbnRDaGlsZHJlbihEYXRhdGFibGVDb2x1bW5Db21wb25lbnQpXG4gIHNldCBjb2x1bW5Db21wb25lbnRzKHZhbHVlOiBRdWVyeUxpc3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50PiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRlbXBsYXRlQ29sdW1ucyh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnModmFsdWU/LnRvQXJyYXkoKSA/PyBbXSkpXG4gIH1cblxuICBAQ29udGVudENoaWxkKERhdGF0YWJsZUFjdGlvbk1lbnVDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIGFjdGlvbk1lbnU/OiBEYXRhdGFibGVBY3Rpb25NZW51Q29tcG9uZW50XG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IHJvd0FjdGlvbkl0ZW0oKTogRGF0YXRhYmxlUm93QWN0aW9uSXRlbURpcmVjdGl2ZSB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9yb3dBY3Rpb25JdGVtIH1cbiAgc2V0IHJvd0FjdGlvbkl0ZW0odmFsdWU6IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRSb3dBY3Rpb25JdGVtKG5vdE51bGxPclVuZGVmaW5lZCh2YWx1ZSkgPyB2YWx1ZSA6IHVuZGVmaW5lZClcbiAgfVxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG5cbiAgQENvbnRlbnRDaGlsZChUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dEZXRhaWw/OiBUaGVTZWFtRGF0YXRhYmxlUm93RGV0YWlsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyPzogVGhlU2VhbURhdGF0YWJsZUZvb3RlckRpcmVjdGl2ZVxuXG4gIEBDb250ZW50Q2hpbGQoRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudClcbiAgZ2V0IG1lbnVCYXJDb21wb25lbnQoKTogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9tZW51QmFyQ29tcG9uZW50IH1cbiAgc2V0IG1lbnVCYXJDb21wb25lbnQodmFsdWU6IERhdGF0YWJsZU1lbnVCYXJDb21wb25lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9tZW51QmFyQ29tcG9uZW50ID0gdmFsdWVcblxuICAgIGlmICh0aGlzLl9tZW51QmFyU3ViKSB7IHRoaXMuX21lbnVCYXJTdWIudW5zdWJzY3JpYmUoKSB9XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSlcblxuICAgICAgdGhpcy5fbWVudUJhclN1YiA9IHRoaXMuX21lbnVCYXJDb21wb25lbnQ/LmZpbHRlcnNDaGFuZ2VkXG4gICAgICAgIC5zdWJzY3JpYmUodiA9PiB7IHRoaXMuX3NldE1lbnVCYXJGaWx0ZXJzKHZhbHVlLmZpbHRlcnMoKSkgfSlcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBfbWVudUJhckNvbXBvbmVudDogRGF0YXRhYmxlTWVudUJhckNvbXBvbmVudCB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9tZW51QmFyU3ViOiBTdWJzY3JpcHRpb24gfCB1bmRlZmluZWRcblxuICBAVmlld0NoaWxkKE5neERhdGF0YWJsZUNvbXBvbmVudCkgbmd4RGF0YXRhYmxlPzogTmd4RGF0YXRhYmxlQ29tcG9uZW50XG4gIEBWaWV3Q2hpbGQoTmd4RGF0YXRhYmxlQ29tcG9uZW50LCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmd4RGF0YXRhYmxlRWxlbWVudD86IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZChEYXRhdGFibGVSb3dEZXRhaWxEaXJlY3RpdmUpIG5neFJvd0RldGFpbD86IERhdGF0YWJsZVJvd0RldGFpbERpcmVjdGl2ZVxuXG4gIEBWaWV3Q2hpbGQoJ2FjdGlvbk1lbnVDZWxsVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGFjdGlvbk1lbnVDZWxsVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgfVxuICBzZXQgYWN0aW9uTWVudUNlbGxUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QWN0aW9uTWVudUNlbGxUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgndHJlZVRvZ2dsZVRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCB0cmVlVG9nZ2xlVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl90cmVlVG9nZ2xlVHBsIH1cbiAgc2V0IHRyZWVUb2dnbGVUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB2YWx1ZVxuICAgIHRoaXMuX2NvbHVtbnNNYW5hZ2VyLnNldFRyZWVUb2dnbGVUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2hlYWRlclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBoZWFkZXJUcGwoKTogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCB7IHJldHVybiB0aGlzLl9oZWFkZXJUcGwgfVxuICBzZXQgaGVhZGVyVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5faGVhZGVyVHBsID0gdmFsdWVcbiAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5zZXRIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoJ2JsYW5rSGVhZGVyVHBsJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgZ2V0IGJsYW5rSGVhZGVyVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fYmxhbmtIZWFkZXJUcGwgfVxuICBzZXQgYmxhbmtIZWFkZXJUcGwodmFsdWU6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ibGFua0hlYWRlclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0QmxhbmtIZWFkZXJUcGwobm90TnVsbE9yVW5kZWZpbmVkKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkKVxuICB9XG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG5cbiAgQFZpZXdDaGlsZCgnY2VsbFR5cGVTZWxlY3RvclRwbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGdldCBjZWxsVHlwZVNlbGVjdG9yVHBsKCk6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCB9XG4gIHNldCBjZWxsVHlwZVNlbGVjdG9yVHBsKHZhbHVlOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCA9IHZhbHVlXG4gICAgdGhpcy5fY29sdW1uc01hbmFnZXIuc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChub3ROdWxsT3JVbmRlZmluZWQodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQpXG4gIH1cbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIHB1YmxpYyBjb2x1bW5Db21wb25lbnRzJD86IE9ic2VydmFibGU8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+XG4gIHByaXZhdGUgX2NvbERpZmZlcnNJbnA6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG4gIHByaXZhdGUgX2NvbERpZmZlcnNUcGw6IHsgW3Byb3BOYW1lOiBzdHJpbmddOiBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4gfSA9IHt9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNvbHVtbnMkOiBPYnNlcnZhYmxlPFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT5cbiAgcHVibGljIHJlYWRvbmx5IGRpc3BsYXlDb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgdmlld0NoYW5nZTogT2JzZXJ2YWJsZTxMaXN0UmFuZ2U+XG5cbiAgcHJpdmF0ZSBfcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZXG5cbiAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgRE9NLWRlcGVuZGVudCBjb2RlIHdoZW4gYSB3YXkgdG8gcHJvcGVydHkgbGlzdGVuIGZvclxuICAvLyBkYmxjbGljayBvbiB0aGUgaGVhZGVyIHJlYXNpemUgaGFuZGxlcy5cbiAgQEhvc3RMaXN0ZW5lcignZGJsY2xpY2snLCBbICckZXZlbnQnIF0pXG4gIF9kYmxDbGljayhldmVudDogYW55KSB7XG4gICAgY29uc3QgaXNIYW5kbGUgPSAoPEhUTUxFbGVtZW50PmV2ZW50LnRhcmdldCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdyZXNpemUtaGFuZGxlJylcbiAgICBpZiAoaXNIYW5kbGUpIHtcbiAgICAgIGNvbnN0IGlzUmVzaXplYWJsZSA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50Py5jbGFzc0xpc3QuY29udGFpbnMoJ3Jlc2l6ZWFibGUnKVxuICAgICAgaWYgKGlzUmVzaXplYWJsZSkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICBjb25zdCBpZCA9ICg8SFRNTEVsZW1lbnQ+ZXZlbnQudGFyZ2V0KS5wYXJlbnRFbGVtZW50XG4gICAgICAgICAgPy5xdWVyeVNlbGVjdG9yKCcuZGF0YXRhYmxlLWNvbHVtbi1oZWFkZXItc2VwYXJhdG9yJylcbiAgICAgICAgICA/LmdldEF0dHJpYnV0ZSgnZGF0YS1jb2x1bW4taWQnKVxuICAgICAgICB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJC5waXBlKFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICkuc3Vic2NyaWJlKGNvbHVtbnMgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHVtbiA9IGNvbHVtbnMuZmluZChjID0+IGMuJCRpZCA9PT0gaWQpXG4gICAgICAgICAgaWYgKGNvbHVtbikge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uUHJvcCA9IGdldENvbHVtblByb3AoY29sdW1uKVxuICAgICAgICAgICAgaWYgKGNvbHVtblByb3ApICB7XG4gICAgICAgICAgICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgV2lkdGhDb2x1bW5zQWx0ZXJhdGlvbih7IGNvbHVtblByb3AsIGNhbkF1dG9SZXNpemU6IHRydWUgfSwgZmFsc2UpXG4gICAgICAgICAgICAgIHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuYWRkKFsgYWx0ZXJhdGlvbiBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmZXJlbmNlczogRGF0YXRhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbnNNYW5hZ2VyOiBDb2x1bW5zTWFuYWdlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlcjogQ29sdW1uc0FsdGVyYXRpb25zTWFuYWdlclNlcnZpY2UsXG4gICkge1xuICAgIHRoaXMuX3ByZWZlcmVuY2VzS2V5LnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgc3dpdGNoTWFwKGtleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGtleSkgfHwga2V5Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJvbSh3YWl0T25Db25kaXRpb25Bc3luYygoKSA9PiB0aGlzLl9wcmVmZXJlbmNlcy5sb2FkZWQpKS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmNoYW5nZXMucGlwZShcbiAgICAgICAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fcHJlZmVyZW5jZXMuc2V0QWx0ZXJhdGlvbnMoa2V5LCB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmdldCgpKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSlcbiAgICAgICAgKVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgY29uc3QgYXBwbHlQcmVmcyA9IChjb2xzOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pID0+IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuY2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICBtYXAoKCkgPT4ge1xuICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFwcGx5KGNvbHMsIHRoaXMpXG4gICAgICAgIHJldHVybiBjb2xzXG4gICAgICB9KSxcbiAgICApXG5cbiAgICB0aGlzLl9wcmVmZXJlbmNlc0tleS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIHN3aXRjaE1hcChwcmVmc0tleSA9PiB7XG4gICAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByZWZzS2V5KSkge1xuICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByZWZlcmVuY2VzLnByZWZlcmVuY2VzKHByZWZzS2V5KS5waXBlKFxuICAgICAgICAgIHN3aXRjaE1hcChhc3luYyAocHJlZmVyZW5jZXMpID0+IHtcbiAgICAgICAgICAgIGF3YWl0IHdhaXRPbkNvbmRpdGlvbkFzeW5jKCgpID0+IHRoaXMuX3ByZWZlcmVuY2VzLmxvYWRlZClcbiAgICAgICAgICAgIHJldHVybiBwcmVmZXJlbmNlc1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgbWFwKHByZWZlcmVuY2VzID0+IHtcbiAgICAgICAgICAgIGxldCBhbHRlcmF0aW9uczogQ29sdW1uc0FsdGVyYXRpb25bXSA9IFtdXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBhbHRlcmF0aW9ucyA9IG1hcENvbHVtbnNBbHRlcmF0aW9uc1N0YXRlcyhwcmVmZXJlbmNlcy5hbHRlcmF0aW9ucylcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdVbmFibGUgdG8gbWFwIGNvbHVtbnMgYWx0ZXJhdGlvbnMgc3RhdGVzJylcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oZSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChhbHRlcmF0aW9ucylcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuY29sdW1ucyQgPSB0aGlzLl9jb2x1bW5zTWFuYWdlci5jb2x1bW5zJFxuXG4gICAgdGhpcy5kaXNwbGF5Q29sdW1ucyQgPSB0aGlzLmNvbHVtbnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoY29scyA9PiBhcHBseVByZWZzKGNvbHMpKSxcbiAgICAgIG1hcChjb2xzID0+IGNvbHMuZmlsdGVyKGMgPT4gIWMuaGlkZGVuKSksXG4gICAgICB0YXAodiA9PiByZW1vdmVVbnVzZWREaWZmcyh2LCB0aGlzLl9jb2xEaWZmZXJzSW5wLCB0aGlzLl9jb2xEaWZmZXJzVHBsKSksXG4gICAgKVxuXG4gICAgdGhpcy5maWx0ZXJzJCA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICB0aGlzLmZpbHRlclN0YXRlcyA9IHRoaXMuX2ZpbHRlcnNTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoZmlsdGVycyA9PiBjb21wb3NlRGF0YUZpbHRlclN0YXRlcyhmaWx0ZXJzKSlcbiAgICApXG5cbiAgICB0aGlzLnJvd3MkID0gdGhpcy5fZGF0YVNvdXJjZVN1YmplY3QucGlwZShcbiAgICAgIHN3aXRjaE1hcChkYXRhU291cmNlID0+IHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2RhdGFTb3VyY2UnLCBkYXRhU291cmNlKVxuICAgICAgICBsZXQgZGF0YVN0cmVhbTogT2JzZXJ2YWJsZTxhbnlbXT5cblxuICAgICAgICBpZiAoaXNEYXRhU291cmNlKGRhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ35kYXRhc291cmNlJylcbiAgICAgICAgICBkYXRhU3RyZWFtID0gZGF0YVNvdXJjZS5jb25uZWN0KHRoaXMpIGFzIGFueVxuICAgICAgICB9IGVsc2UgaWYgKGlzT2JzZXJ2YWJsZShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+b2JzZXJ2YWJsZScpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IGRhdGFTb3VyY2UgYXMgYW55XG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShkYXRhU291cmNlKSkge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+YXJyYXknKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBvZihkYXRhU291cmNlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCd+cm93cyBmYWxsYmFjaycpXG4gICAgICAgICAgZGF0YVN0cmVhbSA9IHRoaXMuX3Jvd3MuYXNPYnNlcnZhYmxlKClcbiAgICAgICAgICAgIC8vIC5waXBlKHRhcCh2ID0+IGNvbnNvbGUubG9nKCdyb3dzficsIHYpKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5leHRlcm5hbEZpbHRlcmluZykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdub3QgdXNpbmcgZXh0ZXJuYWxGaWx0ZXJpbmcnKVxuICAgICAgICAgIGRhdGFTdHJlYW0gPSBkYXRhU3RyZWFtLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAocm93cyA9PiB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgICAgICAvLyB0YXAodiA9PiBjb25zb2xlLmxvZygnZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAgICAgY29uY2F0TWFwKGZpbHRlcnMgPT4gb2Yocm93cykucGlwZShjb21wb3NlRGF0YUZpbHRlcnMoZmlsdGVycykpKSxcbiAgICAgICAgICAgICAgLy8gdGFwKHYgPT4gY29uc29sZS5sb2coJ2NvbXBvc2VkIGZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgICApKVxuICAgICAgICAgIClcblxuICAgICAgICAgIC8vIGRhdGFTdHJlYW0gPSB0aGlzLl9maWx0ZXJzU3ViamVjdC5waXBlKFxuICAgICAgICAgIC8vICAgdGFwKHYgPT4gY29uc29sZS5sb2coJ2ZpbHRlcnMnLCB2KSksXG4gICAgICAgICAgLy8gICBjb25jYXRNYXAoZmlsdGVycyA9PiBkYXRhU3RyZWFtLnBpcGUoY29tcG9zZURhdGFGaWx0ZXJzKGZpbHRlcnMpKSksXG4gICAgICAgICAgLy8gICB0YXAodiA9PiBjb25zb2xlLmxvZygnY29tcG9zZWQgZmlsdGVycycsIHYpKSxcbiAgICAgICAgICAvLyApXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0YVN0cmVhbS5waXBlKFxuICAgICAgICAgIC8vIHRhcCh2ID0+IGNvbnNvbGUubG9nKCdzdHJlYW0nLCB2KSksXG4gICAgICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgLy8gVE9ETzogSW1wbGVtZW50IHZpZXdDaGFuZ2UgZm9yIENvbGxlY3Rpb25WaWV3ZXIuXG4gICAgdGhpcy52aWV3Q2hhbmdlID0gdGhpcy5wYWdlLnBpcGUobWFwKHAgPT4gKHsgc3RhcnQ6IDAsIGVuZDogcC5jb3VudCB9KSkpXG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5yb3dEZXRhaWwpIHtcbiAgICAgIHRoaXMuX3Jvd0RldGFpbFRvZ2dsZVN1YnNjcmlwdGlvbiA9IHRoaXMucm93RGV0YWlsLl90b2dnbGUuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHRoaXMubmd4Um93RGV0YWlsKSB7XG4gICAgICAgICAgdGhpcy5uZ3hSb3dEZXRhaWwudG9nZ2xlLmVtaXQoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fcm93RGV0YWlsVG9nZ2xlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgfVxuXG4gIHByaXZhdGUgX3NldE1lbnVCYXJGaWx0ZXJzKGZpbHRlcnM6IERhdGFGaWx0ZXJbXSkge1xuICAgIHRoaXMuX2ZpbHRlcnNTdWJqZWN0Lm5leHQoZmlsdGVycyB8fCBbXSlcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb2x1bW5Db21wb25lbnQocHJvcE5hbWU6IHN0cmluZyk6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB8IG51bGwge1xuICAgIGlmICghdGhpcy5jb2x1bW5Db21wb25lbnRzIHx8IHRoaXMuY29sdW1uQ29tcG9uZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgdHBsID0gdGhpcy5jb2x1bW5Db21wb25lbnRzLmZpbmQodCA9PiB0LnByb3AgPT09IHByb3BOYW1lKVxuICAgIGlmICh0cGwpIHtcbiAgICAgIHJldHVybiB0cGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgX2NvbHVtbkRhdGEoY29sOiBhbnkpOiB7IGNvbDogYW55LCBjb21wOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQgfCBudWxsIH0ge1xuICAgIGNvbnN0IGNvbXAgPSB0aGlzLmdldENvbHVtbkNvbXBvbmVudChjb2wucHJvcClcbiAgICByZXR1cm4geyBjb2wsIGNvbXAgfVxuICB9XG5cbiAgX2dldFJvd0V4cGFuZGVkKHJvdzogYW55KSB7XG4gICAgaWYgKHRoaXMubmd4RGF0YXRhYmxlICYmIHRoaXMubmd4RGF0YXRhYmxlLmJvZHlDb21wb25lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLm5neERhdGF0YWJsZS5ib2R5Q29tcG9uZW50LmdldFJvd0V4cGFuZGVkKHJvdylcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBwdWJsaWMgdHJhY2tCeUZuQ29sdW1uKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIHJldHVybiBpdGVtLnByb3BcbiAgfVxuXG4gIHB1YmxpYyBvbkRhdGF0YWJsZVJlc2l6ZShldmVudDogSUVsZW1lbnRSZXNpemVkRXZlbnQpIHtcbiAgICBpZiAodGhpcy5uZ3hEYXRhdGFibGUgJiYgdGhpcy5uZ3hEYXRhdGFibGVFbGVtZW50ICYmIHRoaXMubmd4RGF0YXRhYmxlRWxlbWVudC5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAvLyBUT0RPOiBDb25zaWRlciBpbnRlZ3JhdGluZyB0aGlzIGludG8gdGhlIG5neC1kYXRhdGFibGUgbGlicmFyeSB0byBhdm9pZFxuICAgICAgLy8gbXVsdGlwbGUgcmVzaXplIGNhbGxzIHdoZW4gdGhlIHRhYmxlIHJlc2l6ZXMgaXRzZWxmLlxuICAgICAgdGhpcy5uZ3hEYXRhdGFibGUucmVjYWxjdWxhdGUoKVxuICAgIH1cbiAgfVxuXG4gIF9vblJlc2l6ZShldmVudDogYW55KSB7XG4gICAgdGhpcy5yZXNpemUuZW1pdChldmVudClcblxuICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKGV2ZW50LmNvbHVtbikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgbGV0IGFkZEFsdGVyYXRpb24gPSBmYWxzZVxuXG4gICAgICBpZiAoIXRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gdHJ1ZVxuICAgICAgICBhZGRBbHRlcmF0aW9uID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoZXZlbnQuaXNEb25lKSB7XG4gICAgICAgIHRoaXMuX3Jlc2l6aW5nW2NvbHVtblByb3BdID0gZmFsc2VcbiAgICAgICAgYWRkQWx0ZXJhdGlvbiA9IHRydWVcbiAgICAgIH1cblxuICAgICAgaWYgKGFkZEFsdGVyYXRpb24pIHtcbiAgICAgICAgY29uc3QgYWx0ZXJhdGlvbiA9IG5ldyBXaWR0aENvbHVtbnNBbHRlcmF0aW9uKHtcbiAgICAgICAgICBjb2x1bW5Qcm9wLFxuICAgICAgICAgIHdpZHRoOiBldmVudC5jb2x1bW4ud2lkdGgsXG4gICAgICAgICAgY2FuQXV0b1Jlc2l6ZTogZmFsc2VcbiAgICAgICAgfSwgdHJ1ZSlcbiAgICAgICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gICAgICB9XG4gICAgfVxuXG4gIH1cblxuICBfb25SZW9yZGVyKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnJlb3JkZXIuZW1pdChldmVudClcblxuICAgIGNvbnN0IGNvbHVtblByb3AgPSBnZXRDb2x1bW5Qcm9wKGV2ZW50LmNvbHVtbilcbiAgICBpZiAoY29sdW1uUHJvcCkge1xuICAgICAgY29uc3QgY3VycmVudE9yZGVyQWx0ZXJhdGlvbiA9IHRoaXMuX2NvbHVtbnNBbHRlcmF0aW9uc01hbmFnZXIuZ2V0KCkuZmluZCh4ID0+IHgudHlwZSA9PT0gJ29yZGVyJylcbiAgICAgIGNvbnN0IHN0YXRlOiBPcmRlckNvbHVtbnNBbHRlcmF0aW9uU3RhdGUgPSB7XG4gICAgICAgIGNvbHVtbnM6IFtcbiAgICAgICAgICAuLi4oY3VycmVudE9yZGVyQWx0ZXJhdGlvbj8uc3RhdGUuY29sdW1ucyB8fCBbXSksXG4gICAgICAgICAgeyBjb2x1bW5Qcm9wLCBpbmRleDogZXZlbnQubmV3VmFsdWUgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgICBjb25zdCBhbHRlcmF0aW9uID0gbmV3IE9yZGVyQ29sdW1uc0FsdGVyYXRpb24oc3RhdGUsIHRydWUpXG4gICAgICB0aGlzLl9jb2x1bW5zQWx0ZXJhdGlvbnNNYW5hZ2VyLmFkZChbIGFsdGVyYXRpb24gXSlcbiAgICB9XG4gIH1cblxuICBfb25Tb3J0KGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLnNvcnQuZW1pdChldmVudClcblxuICAgIGNvbnN0IGFsdGVyYXRpb24gPSBuZXcgU29ydENvbHVtbnNBbHRlcmF0aW9uKHsgc29ydHM6IGV2ZW50LnNvcnRzIH0sIHRydWUpXG4gICAgdGhpcy5fY29sdW1uc0FsdGVyYXRpb25zTWFuYWdlci5hZGQoWyBhbHRlcmF0aW9uIF0pXG4gIH1cblxuICBfb25UcmVlQWN0aW9uKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBpbmRleCA9IGV2ZW50LnJvd0luZGV4XG4gICAgY29uc3Qgcm93ID0gZXZlbnQucm93XG4gICAgaWYgKHJvdy50cmVlU3RhdHVzID09PSAnY29sbGFwc2VkJykge1xuICAgICAgcm93LnRyZWVTdGF0dXMgPSAnZXhwYW5kZWQnXG4gICAgfSBlbHNlIHtcbiAgICAgIHJvdy50cmVlU3RhdHVzID0gJ2NvbGxhcHNlZCdcbiAgICB9XG4gICAgdGhpcy5yb3dzID0gWyAuLi50aGlzLnJvd3MgXVxuICB9XG5cbiAgcHVibGljIHRyaWdnZXJBY3Rpb25SZWZyZXNoUmVxdWVzdCgpIHtcbiAgICB0aGlzLmFjdGlvblJlZnJlc2hSZXF1ZXN0LmVtaXQodW5kZWZpbmVkKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHBhZ2UgaW5mbyBmcm9tIHRoZSB3cmFwcGVkIE5neERhdGF0YWJsZSBpbnN0YW5jZSBvciBkZWZhdWx0cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgcGFnZUluZm8oKTogVGhlU2VhbVBhZ2VJbmZvIHtcbiAgICByZXR1cm4ge1xuICAgICAgb2Zmc2V0OiB0aGlzLm5neERhdGF0YWJsZT8ub2Zmc2V0ID8/IDAsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5uZ3hEYXRhdGFibGU/LnBhZ2VTaXplID8/IDAsXG4gICAgICBsaW1pdDogdGhpcy5uZ3hEYXRhdGFibGU/LmxpbWl0LFxuICAgICAgY291bnQ6IHRoaXMubmd4RGF0YXRhYmxlPy5jb3VudCA/PyAwXG4gICAgfVxuICB9XG5cbn1cbiJdfQ==
|
|
@@ -88,7 +88,7 @@ DatatableActionMenuComponent.decorators = [
|
|
|
88
88
|
{ type: Component, args: [{
|
|
89
89
|
selector: 'seam-datatable-action-menu',
|
|
90
90
|
template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let item of items\">\n <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"$any(item.fragment)\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"$any(item.preserveFragment)\"\n [skipLocationChange]=\"$any(item.skipLocationChange)\"\n [replaceUrl]=\"$any(item.replaceUrl)\"\n [state]=\"$any(item.state)\"\n [routerLink]=\"item.routerLink\"\n [target]=\"$any(item.target)\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n [disabled]=\"item.disabled\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container>\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"_actionMenuPositions || []\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n",
|
|
91
|
-
styles: [":host{display:block;position:relative}.datatable-action-button
|
|
91
|
+
styles: [":host{display:block;position:relative}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"]
|
|
92
92
|
},] }
|
|
93
93
|
];
|
|
94
94
|
DatatableActionMenuComponent.ctorParameters = () => [
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLWl0ZW0tY29sdW1uLXBvc2l0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2RhdGF0YWJsZS9tb2RlbHMvYWN0aW9uLWl0ZW0tY29sdW1uLXBvc2l0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogSWYgYGZyb3plbkxlZnRgLCBhY3Rpb24gaXRlbSBjb2x1bW4gd2lsbCBiZSBmaXhlZCB0byB0aGUgbGVmdCBzaWRlIG9mIHRoZSB0YWJsZS5cclxuICpcclxuICogSWYgYGZyb3plblJpZ2h0YCwgYWN0aW9uIGl0ZW0gY29sdW1uIHdpbGwgYmUgZml4ZWQgdG8gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIHRhYmxlLlxyXG4gKlxyXG4gKiBJZiBsZWZ0IGB1bmRlZmluZWRgLCBhY3Rpb24gaXRlbSB3aWxsIGtlZXAgaXRzIHN0YXRpYyBwb3NpdGlvbiBhdCB0aGUgZmFyIHJpZ2h0IHNpZGUgb2YgdGhlIGRhdGF0YWJsZS5cclxuICovXHJcbmV4cG9ydCB0eXBlIEFjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbiA9ICdmcm96ZW5MZWZ0JyB8ICdmcm96ZW5SaWdodCdcclxuIl19
|
|
@@ -77,6 +77,13 @@ export class ColumnsManagerService {
|
|
|
77
77
|
this._updateColumns.next(undefined);
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
+
setActionItemColumnPosition(actionItemColumnPosition) {
|
|
81
|
+
const changed = this._actionItemColumnPosition !== actionItemColumnPosition;
|
|
82
|
+
this._actionItemColumnPosition = actionItemColumnPosition;
|
|
83
|
+
if (changed) {
|
|
84
|
+
this._updateColumns.next(undefined);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
80
87
|
setActionMenuCellTpl(actionMenuCellTpl) {
|
|
81
88
|
const changed = this._actionMenuCellTpl !== actionMenuCellTpl;
|
|
82
89
|
this._actionMenuCellTpl = actionMenuCellTpl;
|
|
@@ -150,7 +157,7 @@ export class ColumnsManagerService {
|
|
|
150
157
|
cols.push(_col);
|
|
151
158
|
}
|
|
152
159
|
if (this._shouldAddRowActionColumn()) {
|
|
153
|
-
cols.push(createActionMenuColumn(this._actionMenuCellTpl, this._blankHeaderTpl));
|
|
160
|
+
cols.push(createActionMenuColumn(this._actionMenuCellTpl, this._blankHeaderTpl, this._rowActionColumnIsFrozenLeft(), this._rowActionColumnIsFrozenRight()));
|
|
154
161
|
}
|
|
155
162
|
// Make sure the default for any missing props are set.
|
|
156
163
|
// TODO: Determine if this should be done earlier, because I don't like
|
|
@@ -236,6 +243,12 @@ export class ColumnsManagerService {
|
|
|
236
243
|
_shouldAddRowActionColumn() {
|
|
237
244
|
return this._rowActionItem !== undefined;
|
|
238
245
|
}
|
|
246
|
+
_rowActionColumnIsFrozenLeft() {
|
|
247
|
+
return this._actionItemColumnPosition === 'frozenLeft';
|
|
248
|
+
}
|
|
249
|
+
_rowActionColumnIsFrozenRight() {
|
|
250
|
+
return this._actionItemColumnPosition === 'frozenRight';
|
|
251
|
+
}
|
|
239
252
|
_shouldAddTreeToggleColumn(column) {
|
|
240
253
|
return column.isTreeColumn !== undefined && column.isTreeColumn &&
|
|
241
254
|
(!hasProperty(column, 'treeToggleTemplate') || !notNullOrUndefined(column.treeToggleTemplate));
|
|
@@ -254,4 +267,4 @@ ColumnsManagerService.ctorParameters = () => [
|
|
|
254
267
|
{ type: KeyValueDiffers },
|
|
255
268
|
{ type: DatatableColumnChangesService }
|
|
256
269
|
];
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLGVBQWUsRUFBZSxNQUFNLGVBQWUsQ0FBQTtBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVsRixPQUFPLEVBSUwsYUFBYSxHQUdkLE1BQU0sdUJBQXVCLENBQUE7QUFFOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBSzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUVsRixJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpREFBSyxDQUFBO0lBQ0wsdURBQVEsQ0FBQTtJQUNSLG1EQUFNLENBQUE7QUFDUixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFLRCxNQUFNLE9B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QUE7WUFDM0QsSUFBSSxTQUFTLEVBQUU7Z0JBQ2Isb0VBQW9FO2dCQUNwRSxVQUFVLEdBQUcsSUFBSSxDQUFBO2FBQ2xCO1NBQ0Y7UUFDRCxPQUFPLFVBQVUsQ0FBQTtJQUNuQixDQUFDO0lBRU8sd0JBQXdCO1FBQzlCLE9BQU8sSUFBSSxDQUFDLGNBQWMsS0FBSyxhQUFhLENBQUMsUUFBUSxDQUFBO0lBQ3ZELENBQUM7SUFFTyx5QkFBeUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsY0FBYyxLQUFLLFNBQVMsQ0FBQTtJQUMxQyxDQUFDO0lBRU8sMEJBQTBCLENBQUMsTUFBOEI7UUFDL0QsT0FBTyxNQUFNLENBQUMsWUFBWSxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsWUFBWTtZQUM3RCxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtJQUNsRyxDQUFDO0lBRU8sd0JBQXdCLENBQUMsTUFBOEI7UUFDN0QsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBRU8sNkJBQTZCLENBQUMsTUFBOEI7UUFDbEUsT0FBTyxXQUFXLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7OztZQXRVRixVQUFVOzs7WUFqQzJDLGVBQWU7WUF1QjVELDZCQUE2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIEtleVZhbHVlQ2hhbmdlcywgS2V5VmFsdWVEaWZmZXIsIEtleVZhbHVlRGlmZmVycywgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBkZWZlciwgRU1QVFksIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGF1ZGl0VGltZSwgbWFwLCBzaGFyZVJlcGxheSwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHtcbiAgRGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGUsXG4gIERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZSxcbiAgRGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlLFxuICBTZWxlY3Rpb25UeXBlLFxuICBUYWJsZUNvbHVtbixcbiAgVGFibGVDb2x1bW5Qcm9wLFxufSBmcm9tICdAbWFya2xiL25neC1kYXRhdGFibGUnXG5cbmltcG9ydCB7IGhhc1Byb3BlcnR5LCBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vdXRpbHMnXG5cbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4uL2RhdGF0YWJsZS1jb2x1bW4vZGF0YXRhYmxlLWNvbHVtbi5jb21wb25lbnQnXG5pbXBvcnQgeyBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9kYXRhdGFibGUtcm93LWFjdGlvbi1pdGVtLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuaW1wb3J0IHsgY3JlYXRlQWN0aW9uTWVudUNvbHVtbiB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZS1hY3Rpb24tbWVudS1jb2x1bW4nXG5pbXBvcnQgeyBjcmVhdGVDaGVja2JveENvbHVtbiB9IGZyb20gJy4uL3V0aWxzL2NyZWF0ZS1jaGVja2JveC1jb2x1bW4nXG5pbXBvcnQgeyBnZXRDb2x1bW5Qcm9wIH0gZnJvbSAnLi4vdXRpbHMvZ2V0LWNvbHVtbi1wcm9wJ1xuaW1wb3J0IHsgc2V0Q29sdW1uRGVmYXVsdHMgfSBmcm9tICcuLi91dGlscy9zZXQtY29sdW1uLWRlZmF1bHRzJ1xuaW1wb3J0IHsgdHJhbnNsYXRlVGVtcGxhdGVDb2x1bW5zIH0gZnJvbSAnLi4vdXRpbHMvdHJhbnNsYXRlLXRlbXBsYXRlcydcbmltcG9ydCB7IERhdGF0YWJsZUNvbHVtbkNoYW5nZXNTZXJ2aWNlIH0gZnJvbSAnLi9kYXRhdGFibGUtY29sdW1uLWNoYW5nZXMuc2VydmljZSdcblxuZW51bSBDb2x1bW5zVHlwZXMge1xuICBJbnB1dCxcbiAgVGVtcGxhdGUsXG4gIFJlc3VsdCxcbn1cblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gKCkgPT4gVGFibGVDb2x1bW5bXVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlQ29sdW1ucyA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dENvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbXBsYXRlQ29sdW1ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+KFtdKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RwbENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3VsdENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgX2NvbFByb3BzRGlmZmVyPzogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+XG5cbiAgcHJpdmF0ZSBfaW50ZXJuYWxDb2x1bW5zR2V0dGVyPzogSW50ZXJuYWxDb2x1bW5zR2V0dGVyXG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uVHlwZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIGEgY29sdW1ucyBjaGFuZ2VkIG9iZXJ2YWJsZSwgdG8gbWFrZSBjaGFuZ2VzIG1vcmUgcHJlZGljdGFibGUuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkNoYW5nZXNTZXJ2aWNlOiBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgKSB7XG4gICAgY29uc3QgdGVtcGxhdGVDb2x1bW5zJCA9IHRoaXMuX2NvbHVtbkNoYW5nZXNTZXJ2aWNlLmNvbHVtbklucHV0Q2hhbmdlcyQucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKG1hcCh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMpKVxuICAgICAgfSlcbiAgICApXG5cbiAgICB0aGlzLmNvbHVtbnMkID0gZGVmZXIoKCkgPT4ge1xuICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2lucHV0Q29sdW1ucy5hc09ic2VydmFibGUoKSxcbiAgICAgICAgdGVtcGxhdGVDb2x1bW5zJCxcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKGF1ZGl0VGltZSgwKSwgc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKFsgaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMgXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLl9tZXJnZUNvbHVtbnMoaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMpXG5cbiAgICAgICAgICBjb25zdCBoYXNDb2x1bW5zQ2hhbmdlZCA9IHRoaXMuX2hhc0NvbHVtbnNDaGFuZ2VkKGNvbHMpXG5cbiAgICAgICAgICAvLyBUT0RPOiBMb29rIGZvciBjb2x1bW5zIGFkZGVkL3JlbW92ZWQgYW5kIHJlbW92ZSB0aGUgcmVtb3ZlZCBjb2x1bW5zXG4gICAgICAgICAgLy8gZGlmZmVycywgbm90IGp1c3QgY2hhbmdlcyB0byBjb2x1bW5zLlxuICAgICAgICAgIGNvbnN0IGhhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyA9IHRoaXMuX2hhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyhjb2xzKVxuXG4gICAgICAgICAgLy8gTk9URTogQm90aCBjaGVja3MgbmVlZCB0byBiZSBydW4sIGV2ZW4gdGhvdWdoIG9ubHkgb25lIG5lZWRzIHRvIGJlXG4gICAgICAgICAgLy8gdHJ1ZSwgYmVjYXVzZSB0aGVpciBkaWZmZXJzIG5lZWQgdG8gYmUgY2FsbGVkLlxuICAgICAgICAgIGlmIChoYXNDb2x1bW5zQ2hhbmdlZCB8fCBoYXNBZGRlZE9yUmVtb3ZlZENvbHVtbnMgfHwgaXNGaXJzdCkge1xuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gb2YoY29scylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSkucGlwZShcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDb2x1bW5zKGNvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0Q29sdW1ucy5uZXh0KGNvbHVtbnMpXG4gIH1cblxuICBwdWJsaWMgc2V0VGVtcGxhdGVDb2x1bW5zKGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgdGhpcy5fdGVtcGxhdGVDb2x1bW5zLm5leHQoY29sdW1ucylcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnRlcm5hbENvbHVtbnNHZXR0ZXIoZ2V0dGVyOiBJbnRlcm5hbENvbHVtbnNHZXR0ZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gZ2V0dGVyIHx8IHVuZGVmaW5lZFxuICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uVHlwZShzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3NlbGVjdGlvblR5cGUgIT09IHNlbGVjdGlvblR5cGVcbiAgICB0aGlzLl9zZWxlY3Rpb25UeXBlID0gc2VsZWN0aW9uVHlwZVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlXG4gIH1cblxuICBwdWJsaWMgc2V0Um93QWN0aW9uSXRlbShyb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3Jvd0FjdGlvbkl0ZW0gIT09IHJvd0FjdGlvbkl0ZW1cbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gcm93QWN0aW9uSXRlbVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25NZW51Q2VsbFRwbChhY3Rpb25NZW51Q2VsbFRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCAhPT0gYWN0aW9uTWVudUNlbGxUcGxcbiAgICB0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCA9IGFjdGlvbk1lbnVDZWxsVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEJsYW5rSGVhZGVyVHBsKGJsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2JsYW5rSGVhZGVyVHBsICE9PSBibGFua0hlYWRlclRwbFxuICAgIHRoaXMuX2JsYW5rSGVhZGVyVHBsID0gYmxhbmtIZWFkZXJUcGxcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0VHJlZVRvZ2dsZVRwbCh0cmVlVG9nZ2xlVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fdHJlZVRvZ2dsZVRwbCAhPT0gdHJlZVRvZ2dsZVRwbFxuICAgIHRoaXMuX3RyZWVUb2dnbGVUcGwgPSB0cmVlVG9nZ2xlVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldEhlYWRlclRwbChoZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5faGVhZGVyVHBsICE9PSBoZWFkZXJUcGxcbiAgICB0aGlzLl9oZWFkZXJUcGwgPSBoZWFkZXJUcGxcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0Q2VsbFR5cGVTZWxlY3RvclRwbChjZWxsVHlwZVNlbGVjdG9yVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGwgIT09IGNlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsID0gY2VsbFR5cGVTZWxlY3RvclRwbFxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21lcmdlQ29sdW1ucyhcbiAgICBpbnB1dENvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSxcbiAgICB0ZW1wbGF0ZUNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdXG4gICk6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSB7XG4gICAgY29uc3QgY29sczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdID0gW11cblxuICAgIC8vIEFkZCB0aGUgZmlyc3QgY29sdW1uIGNoZWNrYm94IGlmICdjaGVja2JveCcgc2VsZWN0aW9uIGlzIGVuYWJsZWQuXG4gICAgaWYgKHRoaXMuX3Nob3VsZEFkZENoZWNrYm94Q29sdW1uKCkpIHtcbiAgICAgIGNvbHMucHVzaChjcmVhdGVDaGVja2JveENvbHVtbigpKVxuICAgIH1cblxuICAgIC8vIENvbHVtbiBuZWVkcyB0byBiZSBwcm92aWRlZCBpbiB0aGUgaW5wdXRDb2x1bW5zLCBzbyBpdGVyYXRlIHRoZVxuICAgIC8vIGlucHV0Q29sdW1ucy5cbiAgICBmb3IgKGNvbnN0IGlucENvbCBvZiBpbnB1dENvbHVtbnMpIHtcbiAgICAgIGNvbnN0IHByb3AgPSBnZXRDb2x1bW5Qcm9wKGlucENvbClcbiAgICAgIGlmICghbm90TnVsbE9yVW5kZWZpbmVkKHByb3ApKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBDb2x1bW4gbWF5IGhhdmUgJ3Byb3AnIG9yICduYW1lJyBkZWZpbmVkLmApXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGludGVybmFsQ29sID0gdGhpcy5fZ2V0SW50ZXJuYWxDb2x1bW4ocHJvcClcblxuICAgICAgY29uc3QgaW5wQ29sRGlmID0gdGhpcy5fZ2V0Q29sRGlmKGlucENvbCwgQ29sdW1uc1R5cGVzLklucHV0KVxuICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZChpbnBDb2xEaWYpKSB7XG4gICAgICAgIHRoaXMuX3VwZGF0ZUNvbERpZihpbnBDb2xEaWYsIGludGVybmFsQ29sLCBpbnBDb2wpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRwbENvbCA9IHRoaXMuX2ZpbmRDb2x1bW5CeVByb3AocHJvcCwgdGVtcGxhdGVDb2x1bW5zKVxuICAgICAgaWYgKHRwbENvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHRwbENvbERpZiA9IHRoaXMuX2dldENvbERpZih0cGxDb2wsIENvbHVtbnNUeXBlcy5UZW1wbGF0ZSlcbiAgICAgICAgaWYgKG5vdE51bGxPclVuZGVmaW5lZCh0cGxDb2xEaWYpKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlQ29sRGlmKHRwbENvbERpZiwgaW50ZXJuYWxDb2wsIHRwbENvbClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBfY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uID0ge1xuICAgICAgICAuLi4oaW50ZXJuYWxDb2wgfHwge30pLFxuICAgICAgICAuLi5pbnBDb2wsXG4gICAgICAgIC8vIFRPRE86IFJldGhpbmsgdGhpcywgYmVjYXVzZSBJIGRvbid0IGtub3cgaWYgdGhpcyBpcyBjb3JyZWN0LlxuICAgICAgICAuLi4odHBsQ29sIGFzIGFueSB8fCB7fSlcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nob3VsZEFkZFRyZWVUb2dnbGVDb2x1bW4oX2NvbCkpIHtcbiAgICAgICAgX2NvbC50cmVlVG9nZ2xlVGVtcGxhdGUgPSB0aGlzLl90cmVlVG9nZ2xlVHBsXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zaG91bGRBZGRIZWFkZXJUZW1wbGF0ZShfY29sKSkge1xuICAgICAgICBfY29sLmhlYWRlclRlbXBsYXRlID0gdGhpcy5faGVhZGVyVHBsXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zaG91bGRBZGRDZWxsVHlwZVNlbGVjdG9yVHBsKF9jb2wpKSB7XG4gICAgICAgIF9jb2wuY2VsbFRlbXBsYXRlID0gdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbFxuICAgICAgfVxuXG4gICAgICBjb2xzLnB1c2goX2NvbClcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc2hvdWxkQWRkUm93QWN0aW9uQ29sdW1uKCkpIHtcbiAgICAgIGNvbHMucHVzaChjcmVhdGVBY3Rpb25NZW51Q29sdW1uKHRoaXMuX2FjdGlvbk1lbnVDZWxsVHBsLCB0aGlzLl9ibGFua0hlYWRlclRwbCkpXG4gICAgfVxuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBkZWZhdWx0IGZvciBhbnkgbWlzc2luZyBwcm9wcyBhcmUgc2V0LlxuICAgIC8vIFRPRE86IERldGVybWluZSBpZiB0aGlzIHNob3VsZCBiZSBkb25lIGVhcmxpZXIsIGJlY2F1c2UgSSBkb24ndCBsaWtlXG4gICAgLy8gaG93IHRoaXMgaXMgZG9uZSBhZnRlciBkaWYgY2hlY2tzLlxuICAgIHNldENvbHVtbkRlZmF1bHRzKGNvbHMpXG5cbiAgICByZXR1cm4gY29sc1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW50ZXJuYWxDb2x1bW5zKCk6IFRhYmxlQ29sdW1uW10gfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLl9pbnRlcm5hbENvbHVtbnNHZXR0ZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9pbnRlcm5hbENvbHVtbnNHZXR0ZXIoKVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0SW50ZXJuYWxDb2x1bW4ocHJvcDogVGFibGVDb2x1bW5Qcm9wKTogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGludGVybmFsQ29scyA9IHRoaXMuX2dldEludGVybmFsQ29sdW1ucygpXG5cbiAgICBpZiAoaW50ZXJuYWxDb2xzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gaW50ZXJuYWxDb2xzLmZpbmQoYyA9PiBnZXRDb2x1bW5Qcm9wKGMpID09PSBwcm9wKVxuICB9XG5cbiAgcHJpdmF0ZSBfZmluZENvbHVtbkJ5UHJvcDxUIGV4dGVuZHMgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB8IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudD4oXG4gICAgcHJvcDogVGFibGVDb2x1bW5Qcm9wLFxuICAgIGNvbHVtbnM6IFRbXVxuICApOiBUIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gY29sdW1ucy5maW5kKGMgPT4gZ2V0Q29sdW1uUHJvcChjKSA9PT0gcHJvcClcbiAgfVxuXG4gIHByaXZhdGUgX2dldERpZk1hcEZvckNvbHVtbnNUeXBlKGNvbHVtbnNUeXBlOiBDb2x1bW5zVHlwZXMpOiBNYXA8VGFibGVDb2x1bW5Qcm9wLCBLZXlWYWx1ZURpZmZlcjxhbnksIGFueT4+ICB7XG4gICAgc3dpdGNoIChjb2x1bW5zVHlwZSkge1xuICAgICAgY2FzZSBDb2x1bW5zVHlwZXMuSW5wdXQ6IHJldHVybiB0aGlzLl9pbnBDb2xEaWZmZXJzTWFwXG4gICAgICBjYXNlIENvbHVtbnNUeXBlcy5UZW1wbGF0ZTogcmV0dXJuIHRoaXMuX3RwbENvbERpZmZlcnNNYXBcbiAgICAgIGNhc2UgQ29sdW1uc1R5cGVzLlJlc3VsdDogcmV0dXJuIHRoaXMuX3Jlc3VsdENvbERpZmZlcnNNYXBcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2x1bW5EaWZmZXIocHJvcDogVGFibGVDb2x1bW5Qcm9wLCBjb2xzVHlwZTogQ29sdW1uc1R5cGVzKTogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBhbnk+IHtcbiAgICBjb25zdCBkaWZNYXAgPSB0aGlzLl9nZXREaWZNYXBGb3JDb2x1bW5zVHlwZShjb2xzVHlwZSlcbiAgICBpZiAoZGlmTWFwID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcihgSW52YWxpZCBjb2x1bW5zIHR5cGUuYClcbiAgICB9XG5cbiAgICBpZiAoIWRpZk1hcC5oYXMocHJvcCkpIHtcbiAgICAgIGRpZk1hcC5zZXQocHJvcCwgdGhpcy5fZGlmZmVycy5maW5kKHt9KS5jcmVhdGUoKSlcbiAgICB9XG5cbiAgICBjb25zdCBkaWZmZXIgPSBkaWZNYXAuZ2V0KHByb3ApXG4gICAgaWYgKGRpZmZlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcihgRGlmZmVyIG5vdCBmb3VuZC4gTmV3IGRpZmZlciBzaG91bGQgaGF2ZSBiZWVuIGNyZWF0ZWQuYClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlmZmVyXG4gIH1cblxuICBwcml2YXRlIF9nZXRDb2xEaWYoXG4gICAgY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIHwgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50LFxuICAgIGNvbHNUeXBlOiBDb2x1bW5zVHlwZXNcbiAgKTogS2V5VmFsdWVDaGFuZ2VzPHN0cmluZywgYW55PiB8IG51bGwge1xuICAgIGNvbnN0IHByb3AgPSBnZXRDb2x1bW5Qcm9wKGNvbClcbiAgICBpZiAocHJvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBFcnJvcihgQ29sdW1uIHByb3Agbm90IGZvdW5kLmApXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2dldENvbHVtbkRpZmZlcihwcm9wLCBjb2xzVHlwZSkuZGlmZihjb2wpXG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVDb2xEaWYoXG4gICAgY29sRGlmOiBLZXlWYWx1ZUNoYW5nZXM8c3RyaW5nLCBhbnk+LFxuICAgIGludGVybmFsQ29sdW1uOiBUYWJsZUNvbHVtbiB8IHVuZGVmaW5lZCxcbiAgICBjb2w6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfCBEYXRhdGFibGVDb2x1bW5Db21wb25lbnRcbiAgKTogdm9pZCB7XG4gICAgY29sRGlmLmZvckVhY2hSZW1vdmVkSXRlbShyID0+IHtcbiAgICAgIGlmIChpbnRlcm5hbENvbHVtbiAmJiBpbnRlcm5hbENvbHVtbi5oYXNPd25Qcm9wZXJ0eShyLmtleSkpIHtcbiAgICAgICAgY29uc3QgayA9IHIua2V5IGFzIGtleW9mIFRhYmxlQ29sdW1uXG4gICAgICAgIGRlbGV0ZSBpbnRlcm5hbENvbHVtbltrXVxuICAgICAgfVxuICAgIH0pXG4gICAgY29sRGlmLmZvckVhY2hBZGRlZEl0ZW0ociA9PiAoY29sIGFzIGFueSlbci5rZXldID0gci5jdXJyZW50VmFsdWUpXG4gICAgY29sRGlmLmZvckVhY2hDaGFuZ2VkSXRlbShyID0+IChjb2wgYXMgYW55KVtyLmtleV0gPSByLmN1cnJlbnRWYWx1ZSlcbiAgfVxuXG4gIHByaXZhdGUgX2hhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyhjb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX2NvbFByb3BzRGlmZmVyKSB7XG4gICAgICB0aGlzLl9jb2xQcm9wc0RpZmZlciA9IHRoaXMuX2RpZmZlcnMuZmluZChbXSkuY3JlYXRlKClcbiAgICB9XG5cbiAgICBjb25zdCBwcm9wcyA9IGNvbHVtbnMubWFwKGMgPT4gZ2V0Q29sdW1uUHJvcChjKSlcbiAgICByZXR1cm4gdGhpcy5fY29sUHJvcHNEaWZmZXIuZGlmZihwcm9wcykgIT09IG51bGxcbiAgfVxuXG4gIHByaXZhdGUgX2hhc0NvbHVtbnNDaGFuZ2VkKGNvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSk6IGJvb2xlYW4ge1xuICAgIGxldCBjb2xDaGFuZ2VkID0gZmFsc2VcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2x1bW5zKSB7XG4gICAgICBjb25zdCByZXN1bHREaWYgPSB0aGlzLl9nZXRDb2xEaWYoY29sLCBDb2x1bW5zVHlwZXMuUmVzdWx0KVxuICAgICAgaWYgKHJlc3VsdERpZikge1xuICAgICAgICAvLyBOT1RFOiBDYW4ndCByZXR1cm4gZWFybHksIGJlY2F1c2UgdGhlIGRpZmZlcnMgbmVlZCB0byBiZSB1cGRhdGVkLlxuICAgICAgICBjb2xDaGFuZ2VkID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29sQ2hhbmdlZFxuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkQWRkQ2hlY2tib3hDb2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvblR5cGUgPT09IFNlbGVjdGlvblR5cGUuY2hlY2tib3hcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3VsZEFkZFJvd0FjdGlvbkNvbHVtbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcm93QWN0aW9uSXRlbSAhPT0gdW5kZWZpbmVkXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRUcmVlVG9nZ2xlQ29sdW1uKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4uaXNUcmVlQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmlzVHJlZUNvbHVtbiAmJlxuICAgICAgKCFoYXNQcm9wZXJ0eShjb2x1bW4sICd0cmVlVG9nZ2xlVGVtcGxhdGUnKSB8fCAhbm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbi50cmVlVG9nZ2xlVGVtcGxhdGUpKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkQWRkSGVhZGVyVGVtcGxhdGUoY29sdW1uOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFoYXNQcm9wZXJ0eShjb2x1bW4sICdoZWFkZXJUZW1wbGF0ZScpXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRDZWxsVHlwZVNlbGVjdG9yVHBsKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXNQcm9wZXJ0eShjb2x1bW4sICdjZWxsVHlwZScpXG4gIH1cblxufVxuIl19
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1ucy1tYW5hZ2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZGF0YXRhYmxlL3NlcnZpY2VzL2NvbHVtbnMtbWFuYWdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQW1DLGVBQWUsRUFBZSxNQUFNLGVBQWUsQ0FBQTtBQUN6RyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFDNUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUVsRixPQUFPLEVBSUwsYUFBYSxHQUdkLE1BQU0sdUJBQXVCLENBQUE7QUFFOUIsT0FBTyxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDBCQUEwQixDQUFBO0FBSzFFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFBO0FBQzNFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUN2RSxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQTtBQUdsRixJQUFLLFlBSUo7QUFKRCxXQUFLLFlBQVk7SUFDZixpREFBSyxDQUFBO0lBQ0wsdURBQVEsQ0FBQTtJQUNSLG1EQUFNLENBQUE7QUFDUixDQUFDLEVBSkksWUFBWSxLQUFaLFlBQVksUUFJaEI7QUFLRCxNQUFNLE9B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QUFBO0lBQy9DLENBQUM7SUFFTyw2QkFBNkIsQ0FBQyxNQUE4QjtRQUNsRSxPQUFPLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDeEMsQ0FBQzs7O1lBdlZGLFVBQVU7OztZQWxDMkMsZUFBZTtZQXVCNUQsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgS2V5VmFsdWVDaGFuZ2VzLCBLZXlWYWx1ZURpZmZlciwgS2V5VmFsdWVEaWZmZXJzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlZmVyLCBFTVBUWSwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgYXVkaXRUaW1lLCBtYXAsIHNoYXJlUmVwbGF5LCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQge1xuICBEYXRhVGFibGVDb2x1bW5DZWxsVHJlZVRvZ2dsZSxcbiAgRGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlLFxuICBEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmUsXG4gIFNlbGVjdGlvblR5cGUsXG4gIFRhYmxlQ29sdW1uLFxuICBUYWJsZUNvbHVtblByb3AsXG59IGZyb20gJ0BtYXJrbGIvbmd4LWRhdGF0YWJsZSdcblxuaW1wb3J0IHsgaGFzUHJvcGVydHksIG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi91dGlscydcblxuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi4vZGF0YXRhYmxlLWNvbHVtbi9kYXRhdGFibGUtY29sdW1uLmNvbXBvbmVudCdcbmltcG9ydCB7IERhdGF0YWJsZVJvd0FjdGlvbkl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL2RhdGF0YWJsZS1yb3ctYWN0aW9uLWl0ZW0uZGlyZWN0aXZlJ1xuaW1wb3J0IHsgVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB9IGZyb20gJy4uL21vZGVscy90YWJsZS1jb2x1bW4nXG5pbXBvcnQgeyBjcmVhdGVBY3Rpb25NZW51Q29sdW1uIH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlLWFjdGlvbi1tZW51LWNvbHVtbidcbmltcG9ydCB7IGNyZWF0ZUNoZWNrYm94Q29sdW1uIH0gZnJvbSAnLi4vdXRpbHMvY3JlYXRlLWNoZWNrYm94LWNvbHVtbidcbmltcG9ydCB7IGdldENvbHVtblByb3AgfSBmcm9tICcuLi91dGlscy9nZXQtY29sdW1uLXByb3AnXG5pbXBvcnQgeyBzZXRDb2x1bW5EZWZhdWx0cyB9IGZyb20gJy4uL3V0aWxzL3NldC1jb2x1bW4tZGVmYXVsdHMnXG5pbXBvcnQgeyB0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMgfSBmcm9tICcuLi91dGlscy90cmFuc2xhdGUtdGVtcGxhdGVzJ1xuaW1wb3J0IHsgRGF0YXRhYmxlQ29sdW1uQ2hhbmdlc1NlcnZpY2UgfSBmcm9tICcuL2RhdGF0YWJsZS1jb2x1bW4tY2hhbmdlcy5zZXJ2aWNlJ1xuaW1wb3J0IHsgQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uIH0gZnJvbSAnLi4vbW9kZWxzL2FjdGlvbi1pdGVtLWNvbHVtbi1wb3NpdGlvbidcblxuZW51bSBDb2x1bW5zVHlwZXMge1xuICBJbnB1dCxcbiAgVGVtcGxhdGUsXG4gIFJlc3VsdCxcbn1cblxuZXhwb3J0IHR5cGUgSW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gKCkgPT4gVGFibGVDb2x1bW5bXVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29sdW1uc01hbmFnZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdXBkYXRlQ29sdW1ucyA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwcml2YXRlIHJlYWRvbmx5IF9pbnB1dENvbHVtbnMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXT4oW10pXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RlbXBsYXRlQ29sdW1ucyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8RGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50W10+KFtdKVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lucENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3RwbENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jlc3VsdENvbERpZmZlcnNNYXAgPSBuZXcgTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PigpXG4gIHByaXZhdGUgX2NvbFByb3BzRGlmZmVyPzogS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+XG5cbiAgcHJpdmF0ZSBfaW50ZXJuYWxDb2x1bW5zR2V0dGVyPzogSW50ZXJuYWxDb2x1bW5zR2V0dGVyXG5cbiAgcHJpdmF0ZSBfc2VsZWN0aW9uVHlwZTogU2VsZWN0aW9uVHlwZSB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9yb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2FjdGlvbk1lbnVDZWxsVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5EaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2FjdGlvbkl0ZW1Db2x1bW5Qb3NpdGlvbjogQWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uIHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX2JsYW5rSGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgX3RyZWVUb2dnbGVUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkNlbGxUcmVlVG9nZ2xlPiB8IHVuZGVmaW5lZFxuICBwcml2YXRlIF9oZWFkZXJUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkhlYWRlckRpcmVjdGl2ZT4gfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBfY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZFxuXG4gIC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIGEgY29sdW1ucyBjaGFuZ2VkIG9iZXJ2YWJsZSwgdG8gbWFrZSBjaGFuZ2VzIG1vcmUgcHJlZGljdGFibGUuXG4gIHB1YmxpYyByZWFkb25seSBjb2x1bW5zJDogT2JzZXJ2YWJsZTxUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZGlmZmVyczogS2V5VmFsdWVEaWZmZXJzLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbHVtbkNoYW5nZXNTZXJ2aWNlOiBEYXRhdGFibGVDb2x1bW5DaGFuZ2VzU2VydmljZSxcbiAgKSB7XG4gICAgY29uc3QgdGVtcGxhdGVDb2x1bW5zJCA9IHRoaXMuX2NvbHVtbkNoYW5nZXNTZXJ2aWNlLmNvbHVtbklucHV0Q2hhbmdlcyQucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh1bmRlZmluZWQpLFxuICAgICAgc3dpdGNoTWFwKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKG1hcCh0cmFuc2xhdGVUZW1wbGF0ZUNvbHVtbnMpKVxuICAgICAgfSlcbiAgICApXG5cbiAgICB0aGlzLmNvbHVtbnMkID0gZGVmZXIoKCkgPT4ge1xuICAgICAgbGV0IGlzRmlyc3QgPSB0cnVlXG4gICAgICByZXR1cm4gY29tYmluZUxhdGVzdChbXG4gICAgICAgIHRoaXMuX2lucHV0Q29sdW1ucy5hc09ic2VydmFibGUoKSxcbiAgICAgICAgdGVtcGxhdGVDb2x1bW5zJCxcbiAgICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5hc09ic2VydmFibGUoKS5waXBlKGF1ZGl0VGltZSgwKSwgc3RhcnRXaXRoKHVuZGVmaW5lZCkpXG4gICAgICBdKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKFsgaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMgXSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbHMgPSB0aGlzLl9tZXJnZUNvbHVtbnMoaW5wdXRDb2x1bW5zLCB0ZW1wbGF0ZUNvbHVtbnMpXG5cbiAgICAgICAgICBjb25zdCBoYXNDb2x1bW5zQ2hhbmdlZCA9IHRoaXMuX2hhc0NvbHVtbnNDaGFuZ2VkKGNvbHMpXG5cbiAgICAgICAgICAvLyBUT0RPOiBMb29rIGZvciBjb2x1bW5zIGFkZGVkL3JlbW92ZWQgYW5kIHJlbW92ZSB0aGUgcmVtb3ZlZCBjb2x1bW5zXG4gICAgICAgICAgLy8gZGlmZmVycywgbm90IGp1c3QgY2hhbmdlcyB0byBjb2x1bW5zLlxuICAgICAgICAgIGNvbnN0IGhhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyA9IHRoaXMuX2hhc0FkZGVkT3JSZW1vdmVkQ29sdW1ucyhjb2xzKVxuXG4gICAgICAgICAgLy8gTk9URTogQm90aCBjaGVja3MgbmVlZCB0byBiZSBydW4sIGV2ZW4gdGhvdWdoIG9ubHkgb25lIG5lZWRzIHRvIGJlXG4gICAgICAgICAgLy8gdHJ1ZSwgYmVjYXVzZSB0aGVpciBkaWZmZXJzIG5lZWQgdG8gYmUgY2FsbGVkLlxuICAgICAgICAgIGlmIChoYXNDb2x1bW5zQ2hhbmdlZCB8fCBoYXNBZGRlZE9yUmVtb3ZlZENvbHVtbnMgfHwgaXNGaXJzdCkge1xuICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICByZXR1cm4gb2YoY29scylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSksXG4gICAgICApXG4gICAgfSkucGlwZShcbiAgICAgIHNoYXJlUmVwbGF5KHsgcmVmQ291bnQ6IHRydWUsIGJ1ZmZlclNpemU6IDEgfSlcbiAgICApXG4gIH1cblxuICBwdWJsaWMgc2V0SW5wdXRDb2x1bW5zKGNvbHVtbnM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSk6IHZvaWQge1xuICAgIHRoaXMuX2lucHV0Q29sdW1ucy5uZXh0KGNvbHVtbnMpXG4gIH1cblxuICBwdWJsaWMgc2V0VGVtcGxhdGVDb2x1bW5zKGNvbHVtbnM6IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudFtdKTogdm9pZCB7XG4gICAgdGhpcy5fdGVtcGxhdGVDb2x1bW5zLm5leHQoY29sdW1ucylcbiAgfVxuXG4gIHB1YmxpYyBzZXRJbnRlcm5hbENvbHVtbnNHZXR0ZXIoZ2V0dGVyOiBJbnRlcm5hbENvbHVtbnNHZXR0ZXIgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5faW50ZXJuYWxDb2x1bW5zR2V0dGVyID0gZ2V0dGVyIHx8IHVuZGVmaW5lZFxuICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gIH1cblxuICBwdWJsaWMgc2V0U2VsZWN0aW9uVHlwZShzZWxlY3Rpb25UeXBlOiBTZWxlY3Rpb25UeXBlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3NlbGVjdGlvblR5cGUgIT09IHNlbGVjdGlvblR5cGVcbiAgICB0aGlzLl9zZWxlY3Rpb25UeXBlID0gc2VsZWN0aW9uVHlwZVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXRTZWxlY3Rpb25UeXBlKCk6IFNlbGVjdGlvblR5cGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlXG4gIH1cblxuICBwdWJsaWMgc2V0Um93QWN0aW9uSXRlbShyb3dBY3Rpb25JdGVtOiBEYXRhdGFibGVSb3dBY3Rpb25JdGVtRGlyZWN0aXZlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3Jvd0FjdGlvbkl0ZW0gIT09IHJvd0FjdGlvbkl0ZW1cbiAgICB0aGlzLl9yb3dBY3Rpb25JdGVtID0gcm93QWN0aW9uSXRlbVxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24oYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uOiBBY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uICE9PSBhY3Rpb25JdGVtQ29sdW1uUG9zaXRpb25cbiAgICB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gPSBhY3Rpb25JdGVtQ29sdW1uUG9zaXRpb25cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2V0QWN0aW9uTWVudUNlbGxUcGwoYWN0aW9uTWVudUNlbGxUcGw6IFRlbXBsYXRlUmVmPERhdGFUYWJsZUNvbHVtbkRpcmVjdGl2ZT4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgIT09IGFjdGlvbk1lbnVDZWxsVHBsXG4gICAgdGhpcy5fYWN0aW9uTWVudUNlbGxUcGwgPSBhY3Rpb25NZW51Q2VsbFRwbFxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRCbGFua0hlYWRlclRwbChibGFua0hlYWRlclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uSGVhZGVyRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9ibGFua0hlYWRlclRwbCAhPT0gYmxhbmtIZWFkZXJUcGxcbiAgICB0aGlzLl9ibGFua0hlYWRlclRwbCA9IGJsYW5rSGVhZGVyVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldFRyZWVUb2dnbGVUcGwodHJlZVRvZ2dsZVRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uQ2VsbFRyZWVUb2dnbGU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX3RyZWVUb2dnbGVUcGwgIT09IHRyZWVUb2dnbGVUcGxcbiAgICB0aGlzLl90cmVlVG9nZ2xlVHBsID0gdHJlZVRvZ2dsZVRwbFxuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVDb2x1bW5zLm5leHQodW5kZWZpbmVkKVxuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZXRIZWFkZXJUcGwoaGVhZGVyVHBsOiBUZW1wbGF0ZVJlZjxEYXRhVGFibGVDb2x1bW5IZWFkZXJEaXJlY3RpdmU+IHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlZCA9IHRoaXMuX2hlYWRlclRwbCAhPT0gaGVhZGVyVHBsXG4gICAgdGhpcy5faGVhZGVyVHBsID0gaGVhZGVyVHBsXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUNvbHVtbnMubmV4dCh1bmRlZmluZWQpXG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNldENlbGxUeXBlU2VsZWN0b3JUcGwoY2VsbFR5cGVTZWxlY3RvclRwbDogVGVtcGxhdGVSZWY8RGF0YVRhYmxlQ29sdW1uRGlyZWN0aXZlPiB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLl9jZWxsVHlwZVNlbGVjdG9yVHBsICE9PSBjZWxsVHlwZVNlbGVjdG9yVHBsXG4gICAgdGhpcy5fY2VsbFR5cGVTZWxlY3RvclRwbCA9IGNlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fdXBkYXRlQ29sdW1ucy5uZXh0KHVuZGVmaW5lZClcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9tZXJnZUNvbHVtbnMoXG4gICAgaW5wdXRDb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10sXG4gICAgdGVtcGxhdGVDb2x1bW5zOiBEYXRhdGFibGVDb2x1bW5Db21wb25lbnRbXVxuICApOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10ge1xuICAgIGNvbnN0IGNvbHM6IFRoZVNlYW1EYXRhdGFibGVDb2x1bW5bXSA9IFtdXG5cbiAgICAvLyBBZGQgdGhlIGZpcnN0IGNvbHVtbiBjaGVja2JveCBpZiAnY2hlY2tib3gnIHNlbGVjdGlvbiBpcyBlbmFibGVkLlxuICAgIGlmICh0aGlzLl9zaG91bGRBZGRDaGVja2JveENvbHVtbigpKSB7XG4gICAgICBjb2xzLnB1c2goY3JlYXRlQ2hlY2tib3hDb2x1bW4oKSlcbiAgICB9XG5cbiAgICAvLyBDb2x1bW4gbmVlZHMgdG8gYmUgcHJvdmlkZWQgaW4gdGhlIGlucHV0Q29sdW1ucywgc28gaXRlcmF0ZSB0aGVcbiAgICAvLyBpbnB1dENvbHVtbnMuXG4gICAgZm9yIChjb25zdCBpbnBDb2wgb2YgaW5wdXRDb2x1bW5zKSB7XG4gICAgICBjb25zdCBwcm9wID0gZ2V0Q29sdW1uUHJvcChpbnBDb2wpXG4gICAgICBpZiAoIW5vdE51bGxPclVuZGVmaW5lZChwcm9wKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgQ29sdW1uIG1heSBoYXZlICdwcm9wJyBvciAnbmFtZScgZGVmaW5lZC5gKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBpbnRlcm5hbENvbCA9IHRoaXMuX2dldEludGVybmFsQ29sdW1uKHByb3ApXG5cbiAgICAgIGNvbnN0IGlucENvbERpZiA9IHRoaXMuX2dldENvbERpZihpbnBDb2wsIENvbHVtbnNUeXBlcy5JbnB1dClcbiAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQoaW5wQ29sRGlmKSkge1xuICAgICAgICB0aGlzLl91cGRhdGVDb2xEaWYoaW5wQ29sRGlmLCBpbnRlcm5hbENvbCwgaW5wQ29sKVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0cGxDb2wgPSB0aGlzLl9maW5kQ29sdW1uQnlQcm9wKHByb3AsIHRlbXBsYXRlQ29sdW1ucylcbiAgICAgIGlmICh0cGxDb2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb25zdCB0cGxDb2xEaWYgPSB0aGlzLl9nZXRDb2xEaWYodHBsQ29sLCBDb2x1bW5zVHlwZXMuVGVtcGxhdGUpXG4gICAgICAgIGlmIChub3ROdWxsT3JVbmRlZmluZWQodHBsQ29sRGlmKSkge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbERpZih0cGxDb2xEaWYsIGludGVybmFsQ29sLCB0cGxDb2wpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29uc3QgX2NvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiA9IHtcbiAgICAgICAgLi4uKGludGVybmFsQ29sIHx8IHt9KSxcbiAgICAgICAgLi4uaW5wQ29sLFxuICAgICAgICAvLyBUT0RPOiBSZXRoaW5rIHRoaXMsIGJlY2F1c2UgSSBkb24ndCBrbm93IGlmIHRoaXMgaXMgY29ycmVjdC5cbiAgICAgICAgLi4uKHRwbENvbCBhcyBhbnkgfHwge30pXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zaG91bGRBZGRUcmVlVG9nZ2xlQ29sdW1uKF9jb2wpKSB7XG4gICAgICAgIF9jb2wudHJlZVRvZ2dsZVRlbXBsYXRlID0gdGhpcy5fdHJlZVRvZ2dsZVRwbFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2hvdWxkQWRkSGVhZGVyVGVtcGxhdGUoX2NvbCkpIHtcbiAgICAgICAgX2NvbC5oZWFkZXJUZW1wbGF0ZSA9IHRoaXMuX2hlYWRlclRwbFxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2hvdWxkQWRkQ2VsbFR5cGVTZWxlY3RvclRwbChfY29sKSkge1xuICAgICAgICBfY29sLmNlbGxUZW1wbGF0ZSA9IHRoaXMuX2NlbGxUeXBlU2VsZWN0b3JUcGxcbiAgICAgIH1cblxuICAgICAgY29scy5wdXNoKF9jb2wpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Nob3VsZEFkZFJvd0FjdGlvbkNvbHVtbigpKSB7XG4gICAgICBjb2xzLnB1c2goY3JlYXRlQWN0aW9uTWVudUNvbHVtbih0aGlzLl9hY3Rpb25NZW51Q2VsbFRwbCwgdGhpcy5fYmxhbmtIZWFkZXJUcGwsIHRoaXMuX3Jvd0FjdGlvbkNvbHVtbklzRnJvemVuTGVmdCgpLCB0aGlzLl9yb3dBY3Rpb25Db2x1bW5Jc0Zyb3plblJpZ2h0KCkpKVxuICAgIH1cblxuICAgIC8vIE1ha2Ugc3VyZSB0aGUgZGVmYXVsdCBmb3IgYW55IG1pc3NpbmcgcHJvcHMgYXJlIHNldC5cbiAgICAvLyBUT0RPOiBEZXRlcm1pbmUgaWYgdGhpcyBzaG91bGQgYmUgZG9uZSBlYXJsaWVyLCBiZWNhdXNlIEkgZG9uJ3QgbGlrZVxuICAgIC8vIGhvdyB0aGlzIGlzIGRvbmUgYWZ0ZXIgZGlmIGNoZWNrcy5cbiAgICBzZXRDb2x1bW5EZWZhdWx0cyhjb2xzKVxuXG4gICAgcmV0dXJuIGNvbHNcbiAgfVxuXG4gIHByaXZhdGUgX2dldEludGVybmFsQ29sdW1ucygpOiBUYWJsZUNvbHVtbltdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5faW50ZXJuYWxDb2x1bW5zR2V0dGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5faW50ZXJuYWxDb2x1bW5zR2V0dGVyKClcbiAgfVxuXG4gIHByaXZhdGUgX2dldEludGVybmFsQ29sdW1uKHByb3A6IFRhYmxlQ29sdW1uUHJvcCk6IFRhYmxlQ29sdW1uIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpbnRlcm5hbENvbHMgPSB0aGlzLl9nZXRJbnRlcm5hbENvbHVtbnMoKVxuXG4gICAgaWYgKGludGVybmFsQ29scyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuXG4gICAgcmV0dXJuIGludGVybmFsQ29scy5maW5kKGMgPT4gZ2V0Q29sdW1uUHJvcChjKSA9PT0gcHJvcClcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmRDb2x1bW5CeVByb3A8VCBleHRlbmRzIFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfCBEYXRhdGFibGVDb2x1bW5Db21wb25lbnQ+KFxuICAgIHByb3A6IFRhYmxlQ29sdW1uUHJvcCxcbiAgICBjb2x1bW5zOiBUW11cbiAgKTogVCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGNvbHVtbnMuZmluZChjID0+IGdldENvbHVtblByb3AoYykgPT09IHByb3ApXG4gIH1cblxuICBwcml2YXRlIF9nZXREaWZNYXBGb3JDb2x1bW5zVHlwZShjb2x1bW5zVHlwZTogQ29sdW1uc1R5cGVzKTogTWFwPFRhYmxlQ29sdW1uUHJvcCwgS2V5VmFsdWVEaWZmZXI8YW55LCBhbnk+PiAge1xuICAgIHN3aXRjaCAoY29sdW1uc1R5cGUpIHtcbiAgICAgIGNhc2UgQ29sdW1uc1R5cGVzLklucHV0OiByZXR1cm4gdGhpcy5faW5wQ29sRGlmZmVyc01hcFxuICAgICAgY2FzZSBDb2x1bW5zVHlwZXMuVGVtcGxhdGU6IHJldHVybiB0aGlzLl90cGxDb2xEaWZmZXJzTWFwXG4gICAgICBjYXNlIENvbHVtbnNUeXBlcy5SZXN1bHQ6IHJldHVybiB0aGlzLl9yZXN1bHRDb2xEaWZmZXJzTWFwXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29sdW1uRGlmZmVyKHByb3A6IFRhYmxlQ29sdW1uUHJvcCwgY29sc1R5cGU6IENvbHVtbnNUeXBlcyk6IEtleVZhbHVlRGlmZmVyPHN0cmluZywgYW55PiB7XG4gICAgY29uc3QgZGlmTWFwID0gdGhpcy5fZ2V0RGlmTWFwRm9yQ29sdW1uc1R5cGUoY29sc1R5cGUpXG4gICAgaWYgKGRpZk1hcCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYEludmFsaWQgY29sdW1ucyB0eXBlLmApXG4gICAgfVxuXG4gICAgaWYgKCFkaWZNYXAuaGFzKHByb3ApKSB7XG4gICAgICBkaWZNYXAuc2V0KHByb3AsIHRoaXMuX2RpZmZlcnMuZmluZCh7fSkuY3JlYXRlKCkpXG4gICAgfVxuXG4gICAgY29uc3QgZGlmZmVyID0gZGlmTWFwLmdldChwcm9wKVxuICAgIGlmIChkaWZmZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYERpZmZlciBub3QgZm91bmQuIE5ldyBkaWZmZXIgc2hvdWxkIGhhdmUgYmVlbiBjcmVhdGVkLmApXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZmZlclxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Q29sRGlmKFxuICAgIGNvbDogVGhlU2VhbURhdGF0YWJsZUNvbHVtbiB8IERhdGF0YWJsZUNvbHVtbkNvbXBvbmVudCxcbiAgICBjb2xzVHlwZTogQ29sdW1uc1R5cGVzXG4gICk6IEtleVZhbHVlQ2hhbmdlczxzdHJpbmcsIGFueT4gfCBudWxsIHtcbiAgICBjb25zdCBwcm9wID0gZ2V0Q29sdW1uUHJvcChjb2wpXG4gICAgaWYgKHByb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgRXJyb3IoYENvbHVtbiBwcm9wIG5vdCBmb3VuZC5gKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9nZXRDb2x1bW5EaWZmZXIocHJvcCwgY29sc1R5cGUpLmRpZmYoY29sKVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlQ29sRGlmKFxuICAgIGNvbERpZjogS2V5VmFsdWVDaGFuZ2VzPHN0cmluZywgYW55PixcbiAgICBpbnRlcm5hbENvbHVtbjogVGFibGVDb2x1bW4gfCB1bmRlZmluZWQsXG4gICAgY29sOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIHwgRGF0YXRhYmxlQ29sdW1uQ29tcG9uZW50XG4gICk6IHZvaWQge1xuICAgIGNvbERpZi5mb3JFYWNoUmVtb3ZlZEl0ZW0ociA9PiB7XG4gICAgICBpZiAoaW50ZXJuYWxDb2x1bW4gJiYgaW50ZXJuYWxDb2x1bW4uaGFzT3duUHJvcGVydHkoci5rZXkpKSB7XG4gICAgICAgIGNvbnN0IGsgPSByLmtleSBhcyBrZXlvZiBUYWJsZUNvbHVtblxuICAgICAgICBkZWxldGUgaW50ZXJuYWxDb2x1bW5ba11cbiAgICAgIH1cbiAgICB9KVxuICAgIGNvbERpZi5mb3JFYWNoQWRkZWRJdGVtKHIgPT4gKGNvbCBhcyBhbnkpW3Iua2V5XSA9IHIuY3VycmVudFZhbHVlKVxuICAgIGNvbERpZi5mb3JFYWNoQ2hhbmdlZEl0ZW0ociA9PiAoY29sIGFzIGFueSlbci5rZXldID0gci5jdXJyZW50VmFsdWUpXG4gIH1cblxuICBwcml2YXRlIF9oYXNBZGRlZE9yUmVtb3ZlZENvbHVtbnMoY29sdW1uczogVGhlU2VhbURhdGF0YWJsZUNvbHVtbltdKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9jb2xQcm9wc0RpZmZlcikge1xuICAgICAgdGhpcy5fY29sUHJvcHNEaWZmZXIgPSB0aGlzLl9kaWZmZXJzLmZpbmQoW10pLmNyZWF0ZSgpXG4gICAgfVxuXG4gICAgY29uc3QgcHJvcHMgPSBjb2x1bW5zLm1hcChjID0+IGdldENvbHVtblByb3AoYykpXG4gICAgcmV0dXJuIHRoaXMuX2NvbFByb3BzRGlmZmVyLmRpZmYocHJvcHMpICE9PSBudWxsXG4gIH1cblxuICBwcml2YXRlIF9oYXNDb2x1bW5zQ2hhbmdlZChjb2x1bW5zOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uW10pOiBib29sZWFuIHtcbiAgICBsZXQgY29sQ2hhbmdlZCA9IGZhbHNlXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgY29uc3QgcmVzdWx0RGlmID0gdGhpcy5fZ2V0Q29sRGlmKGNvbCwgQ29sdW1uc1R5cGVzLlJlc3VsdClcbiAgICAgIGlmIChyZXN1bHREaWYpIHtcbiAgICAgICAgLy8gTk9URTogQ2FuJ3QgcmV0dXJuIGVhcmx5LCBiZWNhdXNlIHRoZSBkaWZmZXJzIG5lZWQgdG8gYmUgdXBkYXRlZC5cbiAgICAgICAgY29sQ2hhbmdlZCA9IHRydWVcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNvbENoYW5nZWRcbiAgfVxuXG4gIHByaXZhdGUgX3Nob3VsZEFkZENoZWNrYm94Q29sdW1uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3Rpb25UeXBlID09PSBTZWxlY3Rpb25UeXBlLmNoZWNrYm94XG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRSb3dBY3Rpb25Db2x1bW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3Jvd0FjdGlvbkl0ZW0gIT09IHVuZGVmaW5lZFxuICB9XG5cbiAgcHJpdmF0ZSBfcm93QWN0aW9uQ29sdW1uSXNGcm96ZW5MZWZ0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25JdGVtQ29sdW1uUG9zaXRpb24gPT09ICdmcm96ZW5MZWZ0J1xuICB9XG5cbiAgcHJpdmF0ZSBfcm93QWN0aW9uQ29sdW1uSXNGcm96ZW5SaWdodCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fYWN0aW9uSXRlbUNvbHVtblBvc2l0aW9uID09PSAnZnJvemVuUmlnaHQnXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRUcmVlVG9nZ2xlQ29sdW1uKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb2x1bW4uaXNUcmVlQ29sdW1uICE9PSB1bmRlZmluZWQgJiYgY29sdW1uLmlzVHJlZUNvbHVtbiAmJlxuICAgICAgKCFoYXNQcm9wZXJ0eShjb2x1bW4sICd0cmVlVG9nZ2xlVGVtcGxhdGUnKSB8fCAhbm90TnVsbE9yVW5kZWZpbmVkKGNvbHVtbi50cmVlVG9nZ2xlVGVtcGxhdGUpKVxuICB9XG5cbiAgcHJpdmF0ZSBfc2hvdWxkQWRkSGVhZGVyVGVtcGxhdGUoY29sdW1uOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICFoYXNQcm9wZXJ0eShjb2x1bW4sICdoZWFkZXJUZW1wbGF0ZScpXG4gIH1cblxuICBwcml2YXRlIF9zaG91bGRBZGRDZWxsVHlwZVNlbGVjdG9yVHBsKGNvbHVtbjogVGhlU2VhbURhdGF0YWJsZUNvbHVtbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBoYXNQcm9wZXJ0eShjb2x1bW4sICdjZWxsVHlwZScpXG4gIH1cblxufVxuIl19
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export const ACTION_MENU_COLUMN_PROP = '$$__actionMenu__';
|
|
2
|
-
export function createActionMenuColumn(cellTemplate, headerTemplate) {
|
|
2
|
+
export function createActionMenuColumn(cellTemplate, headerTemplate, frozenLeft, frozenRight) {
|
|
3
3
|
return {
|
|
4
4
|
prop: ACTION_MENU_COLUMN_PROP,
|
|
5
5
|
name: '',
|
|
@@ -10,9 +10,10 @@ export function createActionMenuColumn(cellTemplate, headerTemplate) {
|
|
|
10
10
|
sortable: false,
|
|
11
11
|
draggable: false,
|
|
12
12
|
// TODO: Fix column auto sizing with fixed column and cell overlay before enabling.
|
|
13
|
-
|
|
13
|
+
frozenLeft: frozenLeft,
|
|
14
|
+
frozenRight: frozenRight,
|
|
14
15
|
cellTemplate,
|
|
15
16
|
headerTemplate,
|
|
16
17
|
};
|
|
17
18
|
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWFjdGlvbi1tZW51LWNvbHVtbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9kYXRhdGFibGUvdXRpbHMvY3JlYXRlLWFjdGlvbi1tZW51LWNvbHVtbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRyxrQkFBa0IsQ0FBQTtBQUV6RCxNQUFNLFVBQVUsc0JBQXNCLENBQ3BDLFlBQWlCLEVBQ2pCLGNBQW1CLEVBQ25CLFVBQW9CLEVBQ3BCLFdBQXFCO0lBRXJCLE9BQU87UUFDTCxJQUFJLEVBQUUsdUJBQXVCO1FBQzdCLElBQUksRUFBRSxFQUFFO1FBQ1IsS0FBSyxFQUFFLEVBQUU7UUFDVCxRQUFRLEVBQUUsRUFBRTtRQUNaLFFBQVEsRUFBRSxFQUFFO1FBQ1osVUFBVSxFQUFFLEtBQUs7UUFDakIsUUFBUSxFQUFFLEtBQUs7UUFDZixTQUFTLEVBQUUsS0FBSztRQUNoQixtRkFBbUY7UUFDbkYsVUFBVSxFQUFFLFVBQVU7UUFDdEIsV0FBVyxFQUFFLFdBQVc7UUFDeEIsWUFBWTtRQUNaLGNBQWM7S0FDZixDQUFBO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRoZVNlYW1EYXRhdGFibGVDb2x1bW4gfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtY29sdW1uJ1xuXG5leHBvcnQgY29uc3QgQUNUSU9OX01FTlVfQ09MVU1OX1BST1AgPSAnJCRfX2FjdGlvbk1lbnVfXydcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFjdGlvbk1lbnVDb2x1bW4oXG4gIGNlbGxUZW1wbGF0ZTogYW55LFxuICBoZWFkZXJUZW1wbGF0ZTogYW55LFxuICBmcm96ZW5MZWZ0PzogYm9vbGVhbixcbiAgZnJvemVuUmlnaHQ/OiBib29sZWFuXG4pOiBUaGVTZWFtRGF0YXRhYmxlQ29sdW1uIHtcbiAgcmV0dXJuIHtcbiAgICBwcm9wOiBBQ1RJT05fTUVOVV9DT0xVTU5fUFJPUCxcbiAgICBuYW1lOiAnJyxcbiAgICB3aWR0aDogNTAsXG4gICAgbWluV2lkdGg6IDUwLFxuICAgIG1heFdpZHRoOiA1MCxcbiAgICByZXNpemVhYmxlOiBmYWxzZSxcbiAgICBzb3J0YWJsZTogZmFsc2UsXG4gICAgZHJhZ2dhYmxlOiBmYWxzZSxcbiAgICAvLyBUT0RPOiBGaXggY29sdW1uIGF1dG8gc2l6aW5nIHdpdGggZml4ZWQgY29sdW1uIGFuZCBjZWxsIG92ZXJsYXkgYmVmb3JlIGVuYWJsaW5nLlxuICAgIGZyb3plbkxlZnQ6IGZyb3plbkxlZnQsXG4gICAgZnJvemVuUmlnaHQ6IGZyb3plblJpZ2h0LFxuICAgIGNlbGxUZW1wbGF0ZSxcbiAgICBoZWFkZXJUZW1wbGF0ZSxcbiAgfVxufVxuIl19
|