@skyux/grids 13.0.0-beta.0 → 13.0.0-beta.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"skyux-grids.mjs","sources":["../tmp-esm2022/lib/modules/grid/grid-column.model.js","../tmp-esm2022/lib/modules/shared/sky-grids-resources.module.js","../tmp-esm2022/lib/modules/grid/grid-cell.component.js","../tmp-esm2022/lib/modules/grid/grid-column.component.js","../tmp-esm2022/lib/modules/grid/grid-adapter.service.js","../tmp-esm2022/lib/modules/grid/types/grid-message-type.js","../tmp-esm2022/lib/modules/grid/types/grid-selected-rows-source.js","../tmp-esm2022/lib/modules/grid/grid.component.js","../tmp-esm2022/lib/modules/grid/grid.module.js","../tmp-esm2022/skyux-grids.js"],"sourcesContent":["/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n constructor(template, data) {\n this.isSortable = true;\n this.template = template;\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1jb2x1bW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBcUI3QixZQUFZLFFBQThCLEVBQUUsSUFBVTtRQVYvQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBV3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztZQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWFsaWdubWVudCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbHVtbk1vZGVsIHtcbiAgcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgaW5saW5lSGVscFBvcG92ZXI6IGFueTtcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NrZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgaXNTb3J0YWJsZSA9IHRydWU7XG4gIHB1YmxpYyBleGNsdWRlRnJvbUhpZ2hsaWdodGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW4ncyBkYXRhIGFuZCBoZWFkZXIuXG4gICAqL1xuICBwdWJsaWMgYWxpZ25tZW50OiBTa3lHcmlkQ29sdW1uQWxpZ25tZW50O1xuXG4gIHB1YmxpYyBzZWFyY2hGdW5jdGlvbjogKGRhdGE6IGFueSwgc2VhcmNoVGV4dDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgZGF0YT86IGFueSkge1xuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLmlkID0gZGF0YS5pZCB8fCBkYXRhLmZpZWxkO1xuICAgICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgICAgdGhpcy5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgICB0aGlzLmhlYWRpbmcgPSBkYXRhLmhlYWRpbmc7XG4gICAgICB0aGlzLmlubGluZUhlbHBQb3BvdmVyID0gZGF0YS5pbmxpbmVIZWxwUG9wb3ZlcjtcbiAgICAgIHRoaXMud2lkdGggPSBkYXRhLndpZHRoID8gTnVtYmVyKGRhdGEud2lkdGgpIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5oaWRkZW4gPSBkYXRhLmhpZGRlbjtcbiAgICAgIHRoaXMubG9ja2VkID0gZGF0YS5sb2NrZWQ7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgIHRoaXMuc2VhcmNoRnVuY3Rpb24gPSBkYXRhLnNlYXJjaEZ1bmN0aW9uO1xuICAgICAgdGhpcy5pc1NvcnRhYmxlID0gZGF0YS5pc1NvcnRhYmxlO1xuICAgICAgdGhpcy5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA9IGRhdGEuZXhjbHVkZUZyb21IaWdobGlnaHRpbmc7XG4gICAgICB0aGlzLmFsaWdubWVudCA9IGRhdGEuYWxpZ25tZW50O1xuICAgIH1cbiAgfVxufVxuIl19","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-grids' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\n 'EN-US': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\n },\n};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyGridsResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridsResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridsResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridsResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridsResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWdyaWRzLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMtcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFLEVBQUUsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7SUFDekUsT0FBTyxFQUFFO1FBQ1AsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7S0FDekU7Q0FDRixDQUFDO0FBRUYsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLHVCQUF1Qjs4R0FBdkIsdUJBQXVCOytHQUF2Qix1QkFBdUIsWUFGeEIsYUFBYTsrR0FFWix1QkFBdUIsWUFGeEIsYUFBYTs7MkZBRVosdUJBQXVCO2tCQUhuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBOT1RJQ0U6IERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIVxuICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5XG4gKiB0aGUgJ25nIGdlbmVyYXRlIEBza3l1eC9pMThuOmxpYi1yZXNvdXJjZXMtbW9kdWxlIGxpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMnIHNjaGVtYXRpYy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUsIHNpbXBseSByZXJ1biB0aGUgY29tbWFuZC5cbiAqL1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreUkxOG5Nb2R1bGUsXG4gIFNreUxpYlJlc291cmNlcyxcbiAgU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5jb25zdCBSRVNPVVJDRVM6IFJlY29yZDxzdHJpbmcsIFNreUxpYlJlc291cmNlcz4gPSB7XG4gICdFTi1VUyc6IHsgc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93OiB7IG1lc3NhZ2U6ICdTZWxlY3Qgcm93JyB9IH0sXG4gICdGUi1DQSc6IHtcbiAgICBza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3c6IHsgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdW5lIGxpZ25lJyB9LFxuICB9LFxufTtcblxuU2t5TGliUmVzb3VyY2VzU2VydmljZS5hZGRSZXNvdXJjZXMoUkVTT1VSQ0VTKTtcblxuLyoqXG4gKiBJbXBvcnQgaW50byBhbnkgY29tcG9uZW50IGxpYnJhcnkgbW9kdWxlIHRoYXQgbmVlZHMgdG8gdXNlIHJlc291cmNlIHN0cmluZ3MuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTa3lJMThuTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZHNSZXNvdXJjZXNNb2R1bGUge31cbiJdfQ==","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewContainerRef, } from '@angular/core';\nimport { getData } from '@skyux/list-builder-common';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridCellComponent {\n ngOnInit() {\n this.container.createEmbeddedView(this.template, this);\n }\n get row() {\n return this.item.data;\n }\n get value() {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.5\", type: SkyGridCellComponent, isStandalone: false, selector: \"sky-grid-cell\", inputs: { item: \"item\", columnId: \"columnId\", template: \"template\", fieldSelector: \"fieldSelector\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"cell\"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<ng-template #cell />', isInline: true, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridCellComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid-cell', template: '<ng-template #cell />', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"] }]\n }], propDecorators: { item: [{\n type: Input\n }], columnId: [{\n type: Input\n }], template: [{\n type: Input\n }], fieldSelector: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['cell', {\n read: ViewContainerRef,\n static: true,\n }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC9ncmlkLWNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRXBFOzs7R0FHRztBQVFILE1BQU0sT0FBTyxvQkFBb0I7SUFtQnhCLFFBQVE7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzhHQWpDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw4UEFjdkIsZ0JBQWdCLDJDQW5CZCx1QkFBdUI7OzJGQUt0QixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsZUFBZSxZQUNmLHVCQUF1QixtQkFFaEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLOzhCQUlWLElBQUk7c0JBRFYsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0UsU0FBUztzQkFKaEIsU0FBUzt1QkFBQyxNQUFNLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxnQkFBZ0I7d0JBQ3RCLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaXN0SXRlbU1vZGVsLCBnZXREYXRhIH0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZ3JpZC1jZWxsJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI2NlbGwgLz4nLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtOiBMaXN0SXRlbU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2x1bW5JZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpZWxkU2VsZWN0b3I6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdjZWxsJywge1xuICAgIHJlYWQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUsIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3coKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXRlbS5kYXRhICYmICh0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCkpIHtcbiAgICAgIHJldHVybiBnZXREYXRhKHRoaXMuaXRlbS5kYXRhLCB0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, TemplateRef, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnComponent {\n constructor() {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n this.alignment = 'left';\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n this.isSortable = true;\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n this.searchFunction = this.search;\n this.descriptionChanges = new EventEmitter();\n this.descriptionModelChanges = new EventEmitter();\n this.headingChanges = new EventEmitter();\n this.headingModelChanges = new EventEmitter();\n this.inlineHelpPopoverModelChanges = new EventEmitter();\n }\n ngOnChanges(changes) {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['description'] &&\n changes['description'].firstChange === false) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n get template() {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n return this.templateInput;\n }\n search(value, searchText) {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.5\", type: SkyGridColumnComponent, isStandalone: false, selector: \"sky-grid-column\", inputs: { alignment: \"alignment\", description: \"description\", excludeFromHighlighting: \"excludeFromHighlighting\", field: \"field\", heading: \"heading\", hidden: \"hidden\", id: \"id\", inlineHelpPopover: \"inlineHelpPopover\", isSortable: \"isSortable\", locked: \"locked\", searchFunction: [\"search\", \"searchFunction\"], type: \"type\", templateInput: [\"template\", \"templateInput\"], width: \"width\" }, queries: [{ propertyName: \"templates\", predicate: TemplateRef }], usesOnChanges: true, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridColumnComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n }]\n }], propDecorators: { alignment: [{\n type: Input\n }], description: [{\n type: Input\n }], excludeFromHighlighting: [{\n type: Input\n }], field: [{\n type: Input\n }], heading: [{\n type: Input\n }], hidden: [{\n type: Input\n }], id: [{\n type: Input\n }], inlineHelpPopover: [{\n type: Input\n }], isSortable: [{\n type: Input\n }], locked: [{\n type: Input\n }], searchFunction: [{\n type: Input,\n args: ['search']\n }], type: [{\n type: Input\n }], templateInput: [{\n type: Input,\n args: ['template']\n }], width: [{\n type: Input\n }], templates: [{\n type: ContentChildren,\n args: [TemplateRef]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2dyaWRzL3NyYy9saWIvbW9kdWxlcy9ncmlkL2dyaWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFJTCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7O0FBT3ZCOzs7R0FHRztBQU9ILE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPRTs7OztXQUlHO1FBRUksY0FBUyxHQUEyQixNQUFNLENBQUM7UUFtRGxEOzs7V0FHRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFXekI7Ozs7V0FJRztRQUNILDJEQUEyRDtRQUVwRCxtQkFBYyxHQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBMEJQLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXRFLDRCQUF1QixHQUM1QixJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUVuRCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxFLHdCQUFtQixHQUN4QixJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUUvQyxrQ0FBNkIsR0FDbEMsSUFBSSxZQUFZLEVBQTZDLENBQUM7S0FvRGpFO0lBL0NRLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQ0UsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFDRSxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDbEQsQ0FBQztZQUNELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUM3QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBVSxFQUFFLFVBQWtCO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBMUtVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdlQXlIaEIsV0FBVyxrREE3SGxCLGdCQUFnQjs7MkZBSWYsc0JBQXNCO2tCQU5sQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsS0FBSztpQkFDbEI7OEJBUVEsU0FBUztzQkFEZixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBUUMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVDLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBUUMsTUFBTTtzQkFEWixLQUFLO2dCQVNDLEVBQUU7c0JBRFIsS0FBSztnQkFPQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsS0FBSztnQkFVQyxNQUFNO3NCQURaLEtBQUs7Z0JBVUMsY0FBYztzQkFEcEIsS0FBSzt1QkFBQyxRQUFRO2dCQVFSLElBQUk7c0JBRFYsS0FBSztnQkFZQyxhQUFhO3NCQURuQixLQUFLO3VCQUFDLFVBQVU7Z0JBUVYsS0FBSztzQkFEWCxLQUFLO2dCQWlCRSxTQUFTO3NCQURoQixlQUFlO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWFsaWdubWVudCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24uXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkLWNvbHVtbicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQgLz4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW4ncyBkYXRhIGFuZCBoZWFkZXIuXG4gICAqIE9wdGlvbnMgaW5jbHVkZTogYFwibGVmdFwiYCwgYFwiY2VudGVyXCJgLCBhbmQgYFwicmlnaHRcImAuXG4gICAqIEBkZWZhdWx0IFwibGVmdFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxpZ25tZW50OiBTa3lHcmlkQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBoaWdobGlnaHRpbmcgb2Ygc2VhcmNoIHRleHQgaW4gdGhlIGNvbHVtbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBleGNsdWRlRnJvbUhpZ2hsaWdodGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIGNlbGwgaW5mb3JtYXRpb24gZnJvbSBhbiBlbnRyeSBvbiB0aGUgZ3JpZCBgZGF0YWAgYXJyYXkuXG4gICAqIFlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydHkgZm9yIGV2ZXJ5IGNvbHVtbixcbiAgICogYnV0IGRvIG5vdCBwcm92aWRlIGJvdGguIElmIGBpZGAgZG9lcyBub3QgZXhpc3Qgb24gYSBjb2x1bW4sIHRoZW4gYGZpZWxkYCBpcyB0aGUgZW50cnlcbiAgICogZm9yIHRoZSBncmlkIGBzZWxlY3RlZENvbHVtbklkc2AgYXJyYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGV4dCB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4gaGVhZGVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29sdW1uIGlzIGluaXRpYWxseSBoaWRkZW4gd2hlbiBncmlkIGBzZWxlY3RlZENvbHVtbklkc2AgYXJlIG5vdCBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgZm9yIHRoZSBjb2x1bW4uIFlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydHlcbiAgICogZm9yIGV2ZXJ5IGNvbHVtbiwgYnV0IGRvIG5vdCBwcm92aWRlIGJvdGguIElmIGBmaWVsZGAgZG9lcyBub3QgZXhpc3Qgb24gYSBjb2x1bW4sXG4gICAqIHRoZW4gdGhlIGBpZGAgcHJvcGVydHkgcmV0cmlldmVzIGNlbGwgaW5mb3JtYXRpb24gZnJvbSBhbiBlbnRyeSBvbiB0aGUgZ3JpZCBgZGF0YWAgYXJyYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIGRpc3BsYXkgaW5zaWRlIGFuIGlubGluZSBoZWxwIHBvcHVwIGZvciB0aGlzIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmxpbmVIZWxwUG9wb3ZlcjogYW55O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gc29ydHMgdGhlIGdyaWQgd2hlbiB1c2VycyBjbGljayB0aGUgY29sdW1uIGhlYWRlci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzU29ydGFibGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgbG9ja2VkLiBUaGUgaW50ZW50IGlzIHRvIGRpc3BsYXkgbG9ja2VkIGNvbHVtbnMgZmlyc3RcbiAgICogb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ3JpZC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlbiB1c2VycyBjYW5ub3QgZHJhZyB0aGUgY29sdW1uXG4gICAqIHRvIGFub3RoZXIgcG9zaXRpb24gYW5kIG9yIGRyYWcgb3RoZXIgY29sdW1ucyBiZWZvcmUgdGhlIGxvY2tlZCBjb2x1bW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbG9ja2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIGZ1bmN0aW9uIHRvIGFwcGx5IGZvciB0aGUgc3BlY2lmaWMgY29sdW1uLiBCeSBkZWZhdWx0LFxuICAgKiB0aGUgY29sdW1uIGV4ZWN1dGVzIGEgc3RyaW5nIGNvbXBhcmUgb24gdGhlIGNvbHVtbiBkYXRhLlxuICAgKiBAZGVmYXVsdCAodmFsdWUsIHNlYXJjaFRleHQpID0+IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpICE9PSAtMVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzZWFyY2gnKVxuICBwdWJsaWMgc2VhcmNoRnVuY3Rpb246ICh2YWx1ZTogYW55LCBzZWFyY2hUZXh0OiBzdHJpbmcpID0+IGJvb2xlYW4gPVxuICAgIHRoaXMuc2VhcmNoO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgYSBjb2x1bW4uIFRoaXMgY2FuIGJlIGFzc2lnbmVkIGFzIGEgcmVmZXJlbmNlXG4gICAqIHRvIHRoZSBgdGVtcGxhdGVgIGF0dHJpYnV0ZSwgb3IgaXQgY2FuIGJlIGFzc2lnbmVkIGFzIGEgY2hpbGQgb2YgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudFxuICAgKiBpbnNpZGUgdGhlIGBza3ktZ3JpZC1jb2x1bW5gIGNvbXBvbmVudC4gVGhlIHRlbXBsYXRlIGhhcyBhY2Nlc3MgdG8gdGhlIGB2YWx1ZWAgdmFyaWFibGUsXG4gICAqIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhlIGNvbHVtbiwgYW5kIHRoZSBgcm93YCB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnNcbiAgICogdGhlIGVudGlyZSByb3cgZGF0YS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgndGVtcGxhdGUnKVxuICBwdWJsaWMgdGVtcGxhdGVJbnB1dDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGluIHBpeGVscy5cbiAgICogSWYgdW5kZWZpbmVkLCB0aGUgY29sdW1uIHdpZHRoIGlzIGV2ZW5seSBkaXN0cmlidXRlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xuXG4gIHB1YmxpYyBkZXNjcmlwdGlvbkNoYW5nZXM6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBoZWFkaW5nQ2hhbmdlczogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgaGVhZGluZ01vZGVsQ2hhbmdlcyA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBpbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlcyA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKVxuICBwcml2YXRlIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPHVua25vd24+PjtcblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoZWFkaW5nJ10gJiYgY2hhbmdlc1snaGVhZGluZyddLmZpcnN0Q2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5oZWFkaW5nQ2hhbmdlcy5lbWl0KHRoaXMuaGVhZGluZyk7XG4gICAgICB0aGlzLmhlYWRpbmdNb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmhlYWRpbmcsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydkZXNjcmlwdGlvbiddICYmXG4gICAgICBjaGFuZ2VzWydkZXNjcmlwdGlvbiddLmZpcnN0Q2hhbmdlID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbkNoYW5nZXMuZW1pdCh0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Nb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snaW5saW5lSGVscFBvcG92ZXInXSAmJlxuICAgICAgY2hhbmdlc1snaW5saW5lSGVscFBvcG92ZXInXS5maXJzdENoYW5nZSA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmlubGluZUhlbHBQb3BvdmVyLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPHVua25vd24+IHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLmZpcnN0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlSW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaCh2YWx1ZTogYW55LCBzZWFyY2hUZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpICE9PSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==","import { Injectable, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nconst GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';\nconst GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';\nconst GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';\nconst GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';\nconst GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';\n/**\n * @internal\n */\nexport class SkyGridAdapterService {\n constructor(rendererFactory) {\n this.rendererFactory = rendererFactory;\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n initializeDragAndDrop(dragulaGroupName, dragulaService, dropCallback) {\n dragulaService\n .drag(dragulaGroupName)\n .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));\n dragulaService\n .dragend(dragulaGroupName)\n .subscribe((args) => args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS));\n dragulaService.drop(dragulaGroupName).subscribe((args) => {\n const columnIds = [];\n const nodes = Array.from(args.target.querySelectorAll(`th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`));\n for (const el of nodes) {\n const id = el.getAttribute('sky-cmp-id');\n columnIds.push(id);\n }\n dropCallback(columnIds);\n });\n dragulaService.createGroup(dragulaGroupName, {\n moves: (el, container, handle) => {\n const columns = container.querySelectorAll('th div');\n const isLeftOfLocked = this.isLeftOfLocked(handle, columns);\n return (!el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&\n handle !== undefined &&\n !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !handle.matches(GRID_MULTISELECT_SELECTOR) &&\n !handle.matches(GRID_ROW_DELETE_SELECTOR) &&\n !isLeftOfLocked);\n },\n accepts: (el, target, source, sibling) => {\n if (sibling === undefined || !sibling) {\n return true;\n }\n const columns = source.querySelectorAll('th div');\n const siblingDiv = sibling.querySelector('div');\n const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);\n return (!sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&\n !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !isLeftOfLocked);\n },\n });\n }\n getRowHeight(el, index) {\n return (el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px');\n }\n setStyle(el, style, value) {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n isLeftOfLocked(handle, columns) {\n let sourceColumn = handle;\n for (const column of Array.from(columns)) {\n if (column.contains(handle)) {\n sourceColumn = column;\n }\n }\n for (let i = columns.length - 1; i >= 0; i--) {\n if (columns[i].classList.contains('sky-grid-header-locked')) {\n return true;\n }\n if (columns[i] === sourceColumn) {\n break;\n }\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridAdapterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.RendererFactory2 }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLGVBQWUsQ0FBQzs7QUFJdkIsTUFBTSwwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztBQUM5RCxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0seUJBQXlCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRSxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDO0FBRS9EOztHQUVHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFvQixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixnQkFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBOEM7UUFFOUMsY0FBYzthQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUN0QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFFMUUsY0FBYzthQUNYLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMs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SSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0E3R1UscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEcmFndWxhU2VydmljZSB9IGZyb20gJ25nMi1kcmFndWxhJztcblxuY29uc3QgR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MgPSAnc2t5LWdyaWQtaGVhZGVyLWRyYWdnaW5nJztcbmNvbnN0IEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCc7XG5jb25zdCBHUklEX0hFQURFUl9SRVNJWkVfSEFORExFID0gJy5za3ktZ3JpZC1yZXNpemUtaGFuZGxlJztcbmNvbnN0IEdSSURfUk9XX0RFTEVURV9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtcm93LWRlbGV0ZS1oZWFkaW5nJztcbmNvbnN0IEdSSURfTVVMVElTRUxFQ1RfU0VMRUNUT1IgPSAnLnNreS1ncmlkLW11bHRpc2VsZWN0LWNlbGwnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplRHJhZ0FuZERyb3AoXG4gICAgZHJhZ3VsYUdyb3VwTmFtZTogc3RyaW5nLFxuICAgIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcbiAgICBkcm9wQ2FsbGJhY2s6IChuZXdDb2x1bW5JZHM6IHN0cmluZ1tdKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWcoZHJhZ3VsYUdyb3VwTmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKGFyZ3MpID0+IGFyZ3MuZWwuY2xhc3NMaXN0LmFkZChHUklEX0hFQURFUl9EUkFHR0lOR19DTEFTUykpO1xuXG4gICAgZHJhZ3VsYVNlcnZpY2VcbiAgICAgIC5kcmFnZW5kKGRyYWd1bGFHcm91cE5hbWUpXG4gICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PlxuICAgICAgICBhcmdzLmVsLmNsYXNzTGlzdC5yZW1vdmUoR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MpLFxuICAgICAgKTtcblxuICAgIGRyYWd1bGFTZXJ2aWNlLmRyb3AoZHJhZ3VsYUdyb3VwTmFtZSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KFxuICAgICAgICBhcmdzLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIGB0aDpub3QoJHtHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SfSk6bm90KCR7R1JJRF9ST1dfREVMRVRFX1NFTEVDVE9SfSlgLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZWwgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaWQnKTtcbiAgICAgICAgY29sdW1uSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgICAgZHJvcENhbGxiYWNrKGNvbHVtbklkcyk7XG4gICAgfSk7XG5cbiAgICBkcmFndWxhU2VydmljZS5jcmVhdGVHcm91cChkcmFndWxhR3JvdXBOYW1lLCB7XG4gICAgICBtb3ZlczogKGVsOiBIVE1MRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCwgaGFuZGxlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PiA9XG4gICAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoIGRpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoaGFuZGxlLCBjb2x1bW5zKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFlbC5xdWVyeVNlbGVjdG9yKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICBoYW5kbGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX0hFQURFUl9SRVNJWkVfSEFORExFKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX1JPV19ERUxFVEVfU0VMRUNUT1IpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWNjZXB0czogKFxuICAgICAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHRhcmdldDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNvdXJjZTogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNpYmxpbmc6IEhUTUxFbGVtZW50LFxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmIChzaWJsaW5nID09PSB1bmRlZmluZWQgfHwgIXNpYmxpbmcpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+ID1cbiAgICAgICAgICBzb3VyY2UucXVlcnlTZWxlY3RvckFsbCgndGggZGl2Jyk7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdEaXYgPSBzaWJsaW5nLnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoc2libGluZ0RpdiwgY29sdW1ucyk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX1JFU0laRV9IQU5ETEUpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0hlaWdodChlbDogRWxlbWVudFJlZiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGJvZHkgdHInKVtpbmRleF0uc2Nyb2xsSGVpZ2h0ICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGUoZWw6IEVsZW1lbnRSZWYsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwubmF0aXZlRWxlbWVudCwgc3R5bGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTGVmdE9mTG9ja2VkKFxuICAgIGhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICAgY29sdW1uczogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBzb3VyY2VDb2x1bW4gPSBoYW5kbGU7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgQXJyYXkuZnJvbShjb2x1bW5zKSkge1xuICAgICAgaWYgKGNvbHVtbi5jb250YWlucyhoYW5kbGUpKSB7XG4gICAgICAgIHNvdXJjZUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gY29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGNvbHVtbnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktZ3JpZC1oZWFkZXItbG9ja2VkJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW5zW2ldID09PSBzb3VyY2VDb2x1bW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridMessageType;\n(function (SkyGridMessageType) {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"SelectAll\"] = 0] = \"SelectAll\";\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"ClearAll\"] = 1] = \"ClearAll\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"PromptDeleteRow\"] = 2] = \"PromptDeleteRow\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"AbortDeleteRow\"] = 3] = \"AbortDeleteRow\";\n})(SkyGridMessageType || (SkyGridMessageType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tZXNzYWdlLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvdHlwZXMvZ3JpZC1tZXNzYWdlLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFvQlg7QUFwQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCxxRUFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxtRUFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCxpRkFBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILCtFQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFwQlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQW9CN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZE1lc3NhZ2VUeXBlIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIG11bHRpc2VsZWN0IGNoZWNrYm94ZXMgZm9yIGFsbCByb3dzIGluIHRoZSBncmlkLlxuICAgKi9cbiAgU2VsZWN0QWxsID0gMCxcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBtdWx0aXNlbGVjdCBjaGVja2JveGVzIGZvciBhbGwgcm93cyBpbiB0aGUgZ3JpZC5cbiAgICovXG4gIENsZWFyQWxsID0gMSxcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBQcm9tcHREZWxldGVSb3cgPSAyLFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEFib3J0RGVsZXRlUm93ID0gMyxcbn1cbiJdfQ==","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridSelectedRowsSource;\n(function (SkyGridSelectedRowsSource) {\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"CheckboxChange\"] = 0] = \"CheckboxChange\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"ClearAll\"] = 1] = \"ClearAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"RowClick\"] = 2] = \"RowClick\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectAll\"] = 3] = \"SelectAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectedRowIdsChange\"] = 4] = \"SelectedRowIdsChange\";\n})(SkyGridSelectedRowsSource || (SkyGridSelectedRowsSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZWxlY3RlZC1yb3dzLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBTixJQUFZLHlCQU1YO0FBTkQsV0FBWSx5QkFBeUI7SUFDbkMsNkZBQWMsQ0FBQTtJQUNkLGlGQUFRLENBQUE7SUFDUixpRkFBUSxDQUFBO0lBQ1IsbUZBQVMsQ0FBQTtJQUNULHlHQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFOVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBTXBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZSB7XG4gIENoZWNrYm94Q2hhbmdlLFxuICBDbGVhckFsbCxcbiAgUm93Q2xpY2ssXG4gIFNlbGVjdEFsbCxcbiAgU2VsZWN0ZWRSb3dJZHNDaGFuZ2UsXG59XG4iXX0=","import { ChangeDetectionStrategy, Component, ContentChildren, EnvironmentInjector, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild, ViewChildren, inject, } from '@angular/core';\nimport { SkyAffixAutoFitContext, } from '@skyux/core';\nimport { ListItemModel, } from '@skyux/list-builder-common';\nimport { DragulaService } from 'ng2-dragula';\nimport { BehaviorSubject, Subject, fromEvent, merge, } from 'rxjs';\nimport { distinctUntilChanged, map, take, takeUntil, takeWhile, } from 'rxjs/operators';\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/core\";\nimport * as i2 from \"ng2-dragula\";\nimport * as i3 from \"./grid-adapter.service\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@angular/forms\";\nimport * as i6 from \"@skyux/forms\";\nimport * as i7 from \"@skyux/help-inline\";\nimport * as i8 from \"@skyux/icon\";\nimport * as i9 from \"@skyux/layout\";\nimport * as i10 from \"@skyux/popovers\";\nimport * as i11 from \"@skyux/indicators\";\nimport * as i12 from \"./grid-cell.component\";\nimport * as i13 from \"@skyux/i18n\";\nlet nextId = 0;\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridComponent {\n /**\n * Columns and column properties for the grid.\n */\n set columns(newColumns) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n get columns() {\n return this._columns;\n }\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n set selectedColumnIds(value) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n if (this.columns) {\n this.setDisplayedColumns();\n }\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n this.selectedColumnIdsSet = true;\n }\n get selectedColumnIds() {\n return this._selectedColumnIds;\n }\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n set selectedRowIds(value) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n get selectedRowIds() {\n return this._selectedRowIds;\n }\n get tableWidth() {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n #environmentInjector;\n constructor(affixService, changeDetector, dragulaService, gridAdapter, overlayService, skyWindow, uiConfigService, logger) {\n this.affixService = affixService;\n this.changeDetector = changeDetector;\n this.dragulaService = dragulaService;\n this.gridAdapter = gridAdapter;\n this.overlayService = overlayService;\n this.skyWindow = skyWindow;\n this.uiConfigService = uiConfigService;\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n this.enableMultiselect = false;\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n this.fit = 'width';\n /**\n * Whether to display a toolbar with the grid.\n */\n this.hasToolbar = false;\n /**\n * The observable to send commands to the grid.\n */\n this.messageStream = new Subject();\n /**\n * Fires when the width of a column changes.\n */\n this.columnWidthChange = new EventEmitter();\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n this.multiselectSelectionChange = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteCancel = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteConfirm = new EventEmitter();\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n this.selectedColumnIdsChange = new EventEmitter();\n /**\n * Fires when the active sort field changes.\n */\n this.sortFieldChange = new EventEmitter();\n this.columnResizeStep = 10;\n this.gridId = ++nextId;\n this.rowDeleteConfigs = [];\n this.maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n this.minColWidth = 50;\n this.showResizeBar = false;\n this.showTopScroll = false;\n this.isDraggingResizeHandle = false;\n this.isResized = false;\n this.ngUnsubscribe = new Subject();\n this.rowDeleteContents = {};\n this.subscriptions = [];\n this.scrollTriggered = false;\n this.selectedColumnIdsSet = false;\n this.#environmentInjector = inject(EnvironmentInjector);\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n this.displayedColumns = new Array();\n this.items = new Array();\n this.currentSortField = new BehaviorSubject({\n fieldSelector: '',\n descending: false,\n });\n this.dragulaGroupName = `sky-grids-group-${this.gridId}`;\n }\n ngOnInit() {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message) => {\n this.handleIncomingMessages(message);\n });\n }\n ngAfterContentInit() {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n }\n else {\n this.initColumns();\n }\n // Setup column drag-and-drop.\n this.gridAdapter.initializeDragAndDrop(this.dragulaGroupName, this.dragulaService, (selectedColumnIds) => {\n this.onHeaderDrop(selectedColumnIds);\n });\n this.applySelectedRows();\n }\n ngAfterViewInit() {\n this.checkUserColumnWidthsForScroll();\n }\n ngOnChanges(changes) {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n if (changes['data'] && this.data) {\n this.transformData();\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n }\n else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + id + '\"]');\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n this.checkUserColumnWidthsForScroll();\n });\n }\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n this.dragulaService.destroy(this.dragulaGroupName);\n }\n onWindowResize() {\n this.checkUserColumnWidthsForScroll();\n }\n getTopScrollWidth() {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n getTableClassNames() {\n const classNames = [];\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getTableHeaderClassNames(column) {\n const classNames = [];\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getCaretIconNames(column) {\n const iconNames = [];\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n return this.addDelimiter(iconNames, ' ');\n }\n onKeydown(event, column) {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n sortByColumn(column) {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(take(1), map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n if (field &&\n field.fieldSelector === column.field &&\n field.descending) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }))\n .subscribe();\n }\n }\n getSortDirection(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }));\n }\n getAriaSortDirection(column) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }));\n }\n getCaretVisibility(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }));\n }\n getHelpInlineClass(columnField) {\n return this.getCaretVisibility(columnField).pipe(map((visibility) => {\n return visibility === 'hidden';\n }));\n }\n onMultiselectCheckboxChange() {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n updateColumnHeading(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateInlineHelpPopover(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateColumnDescription(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n onResizeColumnStart(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n event.preventDefault();\n event.stopPropagation();\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((moveEvent) => {\n this.onResizeHandleMove(moveEvent);\n });\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n merge(mouseUpEvent, touchEndEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((endEvent) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n onKeydownResizeCol(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n }\n onInputChangeResizeCol(event) {\n const input = event.target;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleMove(event) {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n this.setResizeBarPosition(event.pageX);\n }\n onResizeHandleBlur() {\n this.showResizeBar = false;\n }\n onResizeHandleFocus(event) {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n const target = event.target;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleRelease(event) {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n onRowClick(event, selectedItem) {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (event.target === event.currentTarget ||\n !this.isInteractiveElement(event)) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n isRowHighlighted(id) {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n getRowHeight(index) {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n cancelRowDelete(id) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== id);\n this.rowDeleteCancel.emit({ id: id });\n this.destroyRowDelete(id);\n }\n confirmRowDelete(id) {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n getRowDeleteItem(id) {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n onTouchMove(event) {\n event.preventDefault();\n }\n onTopScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n onGridScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n checkUserColumnWidthsForScroll() {\n if (!this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n multiselectSelectAll() {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n multiselectClearAll() {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n handleIncomingMessages(message) {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find((config) => config.id === message.data.promptDeleteRow.id);\n if (existingConfig) {\n existingConfig.pending = false;\n }\n else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find((item) => item.id === message.data.promptDeleteRow.id),\n });\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id);\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]');\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== message.data.abortDeleteRow.id);\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n onHeaderDrop(newColumnIds) {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n setDisplayedColumns(respectHidden = false) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n }\n else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n }\n else {\n this.displayedColumns = this.columns;\n }\n }\n }\n transformData() {\n // Transform data into object with id and data properties\n if (this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n }\n else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n }\n else {\n this.items = this.data;\n }\n }\n getGridDataWithSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n }\n else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n applySelectedRows() {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n setSortHeaders() {\n this.currentSortField.next(this.sortField || { fieldSelector: '', descending: false });\n }\n getColumnsFromComponent() {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n updateColumns() {\n this.getColumnsFromComponent();\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n resizeColumnByIndex(columnIndex, newColWidth, deltaX) {\n const column = this.getColumnModelByIndex(columnIndex);\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n }\n else {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth + deltaX}px`);\n column.width = newColWidth;\n }\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n initColumnWidths() {\n // Establish table width.\n this.showTopScroll = true;\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n });\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n this.changeDetector.detectChanges();\n }\n transferColumnWidths(oldColumns, newColumns) {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find((newColumn) => oldColumn.id === newColumn.id);\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n getColumnWidthModelChange() {\n const columnWidthModelChange = new Array();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n updateMaxRange() {\n const leftoverWidth = this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n initializeResizeColumn(event) {\n const clickTarget = event.target;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n resetTableWidth() {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth}px`);\n this.changeDetector.detectChanges();\n });\n }\n getRangeInputByIndex(index) {\n return this.columnRangeInputElementRefs.find((input) => input.nativeElement.getAttribute('sky-cmp-index') === index.toString());\n }\n getColumnModelByIndex(index) {\n return this.displayedColumns[Number(index)];\n }\n getMaxRangeByIndex(index) {\n const columnElementRef = this.columnElementRefs.find((th) => th.nativeElement.getAttribute('sky-cmp-index') === index);\n const rangeInput = columnElementRef.nativeElement.querySelector('.sky-grid-column-input-aria-only');\n return Number(rangeInput.max);\n }\n getLastDisplayedColumn() {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n addDelimiter(text, delimiter) {\n return text.filter((val) => val).join(delimiter);\n }\n destroyRowDelete(id) {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n emitSelectedRows(source) {\n const selectedRows = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n getSelectedRows() {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n isInteractiveElement(event) {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n setResizeBarPosition(xPosition) {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX = xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n applyUserConfig() {\n return new Promise((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe((config) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) => this.columns.find((column) => column.id === id));\n this.changeDetector.markForCheck();\n }\n resolve();\n }, () => {\n resolve();\n });\n });\n }\n setUserConfig(config) {\n if (!this.settingsKey) {\n return;\n }\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => { }, (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n });\n }\n initColumns() {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n // Watch for added/removed columns:\n this.subscriptions.push(this.columnComponents.changes.subscribe(() => this.updateColumns()));\n // Watch for column heading changes:\n this.columnComponents.forEach((comp) => {\n this.subscriptions.push(comp.headingModelChanges.subscribe((change) => {\n this.updateColumnHeading(change);\n }));\n this.subscriptions.push(comp.descriptionModelChanges.subscribe((change) => {\n this.updateColumnDescription(change);\n }));\n this.subscriptions.push(comp.inlineHelpPopoverModelChanges.subscribe((change) => {\n this.updateInlineHelpPopover(change);\n }));\n });\n }\n arraysEqual(arrayA, arrayB) {\n return (arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index]));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i2.DragulaService }, { token: i3.SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.5\", type: SkyGridComponent, isStandalone: false, selector: \"sky-grid\", inputs: { columns: \"columns\", data: \"data\", enableMultiselect: \"enableMultiselect\", fit: \"fit\", hasToolbar: \"hasToolbar\", height: \"height\", highlightText: \"highlightText\", messageStream: \"messageStream\", multiselectRowId: \"multiselectRowId\", rowHighlightedId: \"rowHighlightedId\", selectedColumnIds: \"selectedColumnIds\", selectedRowIds: \"selectedRowIds\", settingsKey: \"settingsKey\", sortField: \"sortField\", width: \"width\" }, outputs: { columnWidthChange: \"columnWidthChange\", multiselectSelectionChange: \"multiselectSelectionChange\", rowDeleteCancel: \"rowDeleteCancel\", rowDeleteConfirm: \"rowDeleteConfirm\", selectedColumnIdsChange: \"selectedColumnIdsChange\", sortFieldChange: \"sortFieldChange\" }, host: { listeners: { \"window:resize\": \"onWindowResize()\" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: \"columnComponents\", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: \"inlineDeleteTemplateRef\", first: true, predicate: [\"inlineDeleteTemplateRef\"], descendants: true, read: TemplateRef }, { propertyName: \"tableContainerElementRef\", first: true, predicate: [\"gridContainer\"], descendants: true }, { propertyName: \"tableElementRef\", first: true, predicate: [\"gridTable\"], descendants: true }, { propertyName: \"topScrollContainerElementRef\", first: true, predicate: [\"topScrollContainer\"], descendants: true }, { propertyName: \"resizeBar\", first: true, predicate: [\"resizeBar\"], descendants: true }, { propertyName: \"columnElementRefs\", predicate: [\"gridCol\"], descendants: true }, { propertyName: \"columnRangeInputElementRefs\", predicate: [\"colSizeRange\"], descendants: true }, { propertyName: \"inlineDeleteRefs\", predicate: [\"inlineDeleteRef\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"], dependencies: [{ kind: \"directive\", type: i4.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i4.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i2.DragulaDirective, selector: \"[dragula]\", inputs: [\"dragula\", \"dragulaModel\"], outputs: [\"dragulaModelChange\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.RangeValueAccessor, selector: \"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i6.λ3, selector: \"sky-checkbox\", inputs: [\"label\", \"labelledBy\", \"id\", \"disabled\", \"tabindex\", \"name\", \"helpPopoverContent\", \"helpPopoverTitle\", \"iconName\", \"checkboxType\", \"checked\", \"indeterminate\", \"required\", \"labelText\", \"labelHidden\", \"hintText\", \"stacked\", \"helpKey\"], outputs: [\"change\", \"checkedChange\", \"disabledChange\", \"indeterminateChange\"] }, { kind: \"component\", type: i7.λ1, selector: \"sky-help-inline\", inputs: [\"ariaControls\", \"ariaExpanded\", \"ariaLabel\", \"helpKey\", \"labelledBy\", \"labelText\", \"popoverContent\", \"popoverTitle\"], outputs: [\"actionClick\"] }, { kind: \"component\", type: i8.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"component\", type: i9.λ8, selector: \"sky-inline-delete\", inputs: [\"pending\"], outputs: [\"cancelTriggered\", \"deleteTriggered\"] }, { kind: \"directive\", type: i10.λ7, selector: \"[skyPopover]\", inputs: [\"skyPopover\", \"skyPopoverAlignment\", \"skyPopoverMessageStream\", \"skyPopoverPlacement\", \"skyPopoverTrigger\"] }, { kind: \"directive\", type: i11.SkyTextHighlightDirective, selector: \"[skyHighlight]\", inputs: [\"skyHighlight\"] }, { kind: \"component\", type: i12.SkyGridCellComponent, selector: \"sky-grid-cell\", inputs: [\"item\", \"columnId\", \"template\", \"fieldSelector\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i13.SkyLibResourcesPipe, name: \"skyLibResources\" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid', viewProviders: [DragulaService], providers: [SkyGridAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i2.DragulaService }, { type: i3.SkyGridAdapterService }, { type: i1.SkyOverlayService }, { type: i1.SkyAppWindowRef }, { type: i1.SkyUIConfigService }, { type: i1.SkyLogService }], propDecorators: { columns: [{\n type: Input\n }], data: [{\n type: Input\n }], enableMultiselect: [{\n type: Input\n }], fit: [{\n type: Input\n }], hasToolbar: [{\n type: Input\n }], height: [{\n type: Input\n }], highlightText: [{\n type: Input\n }], messageStream: [{\n type: Input\n }], multiselectRowId: [{\n type: Input\n }], rowHighlightedId: [{\n type: Input\n }], selectedColumnIds: [{\n type: Input\n }], selectedRowIds: [{\n type: Input\n }], settingsKey: [{\n type: Input\n }], sortField: [{\n type: Input\n }], width: [{\n type: Input\n }], columnWidthChange: [{\n type: Output\n }], multiselectSelectionChange: [{\n type: Output\n }], rowDeleteCancel: [{\n type: Output\n }], rowDeleteConfirm: [{\n type: Output\n }], selectedColumnIdsChange: [{\n type: Output\n }], sortFieldChange: [{\n type: Output\n }], columnComponents: [{\n type: ContentChildren,\n args: [SkyGridColumnComponent]\n }], columnElementRefs: [{\n type: ViewChildren,\n args: ['gridCol']\n }], columnRangeInputElementRefs: [{\n type: ViewChildren,\n args: ['colSizeRange']\n }], inlineDeleteRefs: [{\n type: ViewChildren,\n args: ['inlineDeleteRef']\n }], inlineDeleteTemplateRef: [{\n type: ViewChild,\n args: ['inlineDeleteTemplateRef', { read: TemplateRef }]\n }], tableContainerElementRef: [{\n type: ViewChild,\n args: ['gridContainer']\n }], tableElementRef: [{\n type: ViewChild,\n args: ['gridTable']\n }], topScrollContainerElementRef: [{\n type: ViewChild,\n args: ['topScrollContainer']\n }], resizeBar: [{\n type: ViewChild,\n args: ['resizeBar']\n }], onWindowResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixHQU12QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFFUCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU16RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0vRCxPQUFPLEVB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBcHBXaW5kb3dSZWYsXG4gIFNreUxvZ1NlcnZpY2UsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lVSUNvbmZpZ1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7XG4gIExpc3RJdGVtTW9kZWwsXG4gIExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsLFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb21FdmVudCxcbiAgbWVyZ2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbk1vZGVsIH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4td2lkdGgtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNhbmNlbC1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb25maWcgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maWcnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29uZmlybS1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb250ZW50cyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbnRlbnRzJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1zZWxlY3RlZC1yb3dzLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlJztcbmltcG9ydCB7IFNreUdyaWRVSUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC11aS1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFtEcmFndWxhU2VydmljZV0sXG4gIHByb3ZpZGVyczogW1NreUdyaWRBZGFwdGVyU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIENvbHVtbnMgYW5kIGNvbHVtbiBwcm9wZXJ0aWVzIGZvciB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29sdW1ucyhuZXdDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXSkge1xuICAgIGNvbnN0IG9sZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1ucyA9IG5ld0NvbHVtbnM7XG4gICAgaWYgKG9sZENvbHVtbnMpIHtcbiAgICAgIHRoaXMudHJhbnNmZXJDb2x1bW5XaWR0aHMob2xkQ29sdW1ucywgdGhpcy5jb2x1bW5zKTtcbiAgICAgIHRoaXMuaXNSZXNpemVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnModHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogU2t5R3JpZENvbHVtbk1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGZvciB0aGUgZ3JpZC4gRWFjaCBpdGVtIHJlcXVpcmVzIGFuIGBpZGAgYW5kIGEgcHJvcGVydHkgdGhhdCBtYXBzXG4gICAqIHRvIHRoZSBgZmllbGRgIG9yIGBpZGAgcHJvcGVydHkgb2YgZWFjaCBjb2x1bW4gaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55W107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBtdWx0aXNlbGVjdCBmZWF0dXJlIHRvIGRpc3BsYXkgYSBjb2x1bW4gb2ZcbiAgICogY2hlY2tib3hlcyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBncmlkLiBZb3UgY2FuIHNwZWNpZnkgYSB1bmlxdWUgSUQgd2l0aFxuICAgKiB0aGUgYG11bHRpc2VsZWN0Um93SWRgIHByb3BlcnR5LCBidXQgbXVsdGlzZWxlY3QgZGVmYXVsdHMgdG8gdGhlIGBpZGAgcHJvcGVydHkgb25cbiAgICogdGhlIGBkYXRhYCBvYmplY3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZW5hYmxlTXVsdGlzZWxlY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogSG93IHRoZSBncmlkIGZpdHMgdG8gaXRzIHBhcmVudC4gVGhlIHZhbGlkIG9wdGlvbnMgYXJlIGB3aWR0aGAsXG4gICAqIHdoaWNoIGZpdHMgdGhlIGdyaWQgdG8gdGhlIHBhcmVudCdzIGZ1bGwgd2lkdGgsIGFuZCBgc2Nyb2xsYCwgd2hpY2ggYWxsb3dzIHRoZSBncmlkXG4gICAqIHRvIGV4Y2VlZCB0aGUgcGFyZW50J3Mgd2lkdGguIElmIHRoZSBncmlkIGRvZXMgbm90IGhhdmUgZW5vdWdoIGNvbHVtbnMgdG8gZmlsbFxuICAgKiB0aGUgcGFyZW50J3Mgd2lkdGgsIGl0IGFsd2F5cyBzdHJldGNoZXMgdG8gdGhlIHBhcmVudCdzIGZ1bGwgd2lkdGguXG4gICAqIEBkZWZhdWx0IFwid2lkdGhcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGZpdCA9ICd3aWR0aCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2l0aCB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNUb29sYmFyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRleHQgdG8gaGlnaGxpZ2h0IHdpdGhpbiB0aGUgZ3JpZC5cbiAgICogVHlwaWNhbGx5LCB0aGlzIHByb3BlcnR5IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzZWFyY2guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1lc3NhZ2VTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lHcmlkTWVzc2FnZT4oKTtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCB0aGF0IG1hdGNoZXMgYSBwcm9wZXJ0eSBvbiB0aGUgYGRhdGFgIG9iamVjdC5cbiAgICogQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSB1c2VzIHRoZSBgaWRgIHByb3BlcnR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0Um93SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3cgdG8gaGlnaGxpZ2h0LiBUaGUgSUQgbWF0Y2hlcyB0aGUgYGlkYCBwcm9wZXJ0eVxuICAgKiBvZiB0aGUgYGRhdGFgIG9iamVjdC4gVHlwaWNhbGx5LCB0aGlzIHByb3BlcnR5IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgKiB0aGUgZmx5b3V0IGNvbXBvbmVudCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dIaWdobGlnaHRlZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2x1bW5zIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWQgYmFzZWQgb24gdGhlIGBpZGAgb3IgYGZpZWxkYCBwcm9wZXJ0aWVzXG4gICAqIG9mIHRoZSBjb2x1bW5zLiBJZiBubyBjb2x1bW5zIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIGdyaWQgZGlzcGxheXMgYWxsIGNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkQ29sdW1uSWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSB0aGlzLl9zZWxlY3RlZENvbHVtbklkcztcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbklkcyA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlkcyBoYXZlIGNoYW5nZWQuXG4gICAgaWYgKCFjdXJyZW50SWRzIHx8ICF2YWx1ZSB8fCAhdGhpcy5hcnJheXNFcXVhbCh2YWx1ZSwgY3VycmVudElkcykpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdlIGRvIG5vdCBzZXQgdXNlciBjb25maWcgb3B0aW9ucyBvciBmaXJlIHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgIC8vIG9uIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhlIGNvbHVtbnMgYXJlIHNldCB1cFxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNTZXQpIHtcbiAgICAgICAgdGhpcy5zZXRVc2VyQ29uZmlnKHtcbiAgICAgICAgICBzZWxlY3RlZENvbHVtbklkczogdmFsdWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZENvbHVtbklkcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZXNpemVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFRhYmxlV2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNTZXQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZENvbHVtbklkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgSURzIGZvciB0aGUgcm93cyB0byBzZWxlY3QgaW4gYSBtdWx0aXNlbGVjdCBncmlkLlxuICAgKiBUaGUgSURzIG1hdGNoIHRoZSBgaWRgIHByb3BlcnRpZXMgb2YgdGhlIGBkYXRhYCBvYmplY3RzLlxuICAgKiBSb3dzIHdpdGggSURzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBhcmUgZGUtc2VsZWN0ZWQgaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkUm93SWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZFJvd3MoKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlNlbGVjdGVkUm93SWRzQ2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUm93SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dJZHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBVSSBDb25maWcgU2VydmljZSB0byByZXRyaWV2ZSBzdG9yZWQgc2V0dGluZ3MgZnJvbSBhIGRhdGFiYXNlLlxuICAgKiBUaGUgVUkgQ29uZmlnIFNlcnZpY2Ugc2F2ZXMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdXNlcnMgYW5kIHJldHVybnNcbiAgICogYHNlbGVjdGVkQ29sdW1uSWRzYCB0byBwcmVzZXJ2ZSB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGFuZCB0aGUgcHJlZmVycmVkIGNvbHVtbiBvcmRlci4gWW91ICBtdXN0IHByb3ZpZGUgYGlkYCB2YWx1ZXMgZm9yIHlvdXIgYHNreS1ncmlkLWNvbHVtbmAgZWxlbWVudHMgYmVjYXVzZSB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgZGVwZW5kcyBvbiB0aG9zZSB2YWx1ZXMgdG8gb3JnYW5pemUgY29sdW1ucyBiYXNlZCBvbiB1c2VyIHNldHRpbmdzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVUkgQ29uZmlnIFNlcnZpY2UsIHNlZSBbdGhlIHN0aWNreSBzZXR0aW5ncyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2RldmVsb3Avc3RpY2t5LXNldHRpbmdzKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXR0aW5nc0tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIGNhcmV0IGluIHRoZSBjb2x1bW4gdGhhdCB3YXMgdXNlZCB0byBzb3J0IHRoZSBncmlkLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWxcbiAgICogd2hlbiB5b3UgcHJvZ3JhbW1hdGljYWxseSBzb3J0IGRhdGEgYW5kIHdhbnQgdG8gdmlzdWFsbHkgaW5kaWNhdGUgaG93IHRoZSBncmlkIHdhcyBzb3J0ZWQuXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhIGBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbGAgdmFsdWUgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIC0gYGZpZWxkU2VsZWN0b3JgIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc29ydCBmaWVsZC4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGBzdHJpbmdgIHZhbHVlcy5cbiAgICogLSBgZGVzY2VuZGluZ2AgSW5kaWNhdGVzIHdoZXRoZXIgdG8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyLiBUaGUgY2FyZXQgdGhhdCB2aXN1YWxseVxuICAgKiBpbmRpY2F0ZXMgdGhlIHNvcnQgb3JkZXIgcG9pbnRzIGRvd24gZm9yIGRlc2NlbmRpbmcgb3JkZXIgYW5kIHVwIGZvciBhc2NlbmRpbmcgb3JkZXIuXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgYm9vbGVhbmAgdmFsdWVzLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydEZpZWxkOiBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbDtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBncmlkIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB3aWR0aCBvZiBhIGNvbHVtbiBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjb2x1bW5XaWR0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgU2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2VbXVxuICA+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGlvbiBvZiBtdWx0aXNlbGVjdCBjaGVja2JveGVzIGNoYW5nZXMuXG4gICAqIEVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIHNlbGVjdGVkIHJvd3MgYmFzZWQgb24gdGhlIGBtdWx0aXNlbGVjdFJvd0lkYCBwcm9wZXJ0eVxuICAgKiB0aGF0IHRoZSBjb25zdW1lciBwcm92aWRlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgbXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UgPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcm93RGVsZXRlQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncz4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNvbmZpcm0gPSBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRSb3dEZWxldGVDb25maXJtQXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGluIHRoZSBncmlkIGNoYW5nZSBvciB3aGVuIHRoZSBvcmRlciBvZiB0aGUgY29sdW1ucyBjaGFuZ2VzLlxuICAgKiBUaGUgZXZlbnQgZW1pdHMgYW4gYXJyYXkgb2YgSURzIGZvciB0aGUgZGlzcGxheWVkIGNvbHVtbnMgdGhhdCByZWZsZWN0cyB0aGUgY29sdW1uIG9yZGVyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENvbHVtbklkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSBzb3J0IGZpZWxkIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNvcnRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KCk7XG5cbiAgcHVibGljIGNvbHVtblJlc2l6ZVN0ZXAgPSAxMDtcbiAgcHVibGljIGN1cnJlbnRTb3J0RmllbGQ6IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD47XG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXTtcbiAgcHVibGljIGRyYWd1bGFHcm91cE5hbWU6IHN0cmluZztcbiAgcHVibGljIGdyaWRJZDogbnVtYmVyID0gKytuZXh0SWQ7XG4gIHB1YmxpYyByb3dEZWxldGVDb25maWdzOiBTa3lHcmlkUm93RGVsZXRlQ29uZmlnW10gPSBbXTtcbiAgcHVibGljIGl0ZW1zOiBhbnlbXTtcbiAgcHVibGljIG1heENvbFdpZHRoID0gOTk5OTsgLy8gVGhpcyBpcyBhbiBhcmJpdHJhcnkgbnVtYmVyLCBhcyB0aGUgaW5wdXQgcmFuZ2UgcGlja2VyIHdvbid0IHdvcmsgd2l0aG91dCBhIHZhbHVlLlxuICBwdWJsaWMgbWluQ29sV2lkdGggPSA1MDtcbiAgcHVibGljIHNob3dSZXNpemVCYXIgPSBmYWxzZTtcbiAgcHVibGljIHNob3dUb3BTY3JvbGwgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IHRhYmxlV2lkdGgoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5R3JpZENvbHVtbkNvbXBvbmVudClcbiAgcHJpdmF0ZSBjb2x1bW5Db21wb25lbnRzOiBRdWVyeUxpc3Q8U2t5R3JpZENvbHVtbkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbignZ3JpZENvbCcpXG4gIHByaXZhdGUgY29sdW1uRWxlbWVudFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignY29sU2l6ZVJhbmdlJylcbiAgcHJpdmF0ZSBjb2x1bW5SYW5nZUlucHV0RWxlbWVudFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignaW5saW5lRGVsZXRlUmVmJylcbiAgcHJpdmF0ZSBpbmxpbmVEZWxldGVSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2lubGluZURlbGV0ZVRlbXBsYXRlUmVmJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIGlubGluZURlbGV0ZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpXG4gIHByaXZhdGUgdGFibGVDb250YWluZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdncmlkVGFibGUnKVxuICBwcml2YXRlIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndG9wU2Nyb2xsQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZXNpemVCYXInKVxuICBwcml2YXRlIHJlc2l6ZUJhcjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4OiBzdHJpbmc7XG4gIHByaXZhdGUgaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzUmVzaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJvd0RlbGV0ZUNvbnRlbnRzOiBSZWNvcmQ8c3RyaW5nLCBTa3lHcmlkUm93RGVsZXRlQ29udGVudHM+ID0ge307XG4gIHByaXZhdGUgc3RhcnRDb2x1bW5XaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0ZWRDb2x1bW5JZHNTZXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSB4UG9zU3RhcnQ6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5JZHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd0lkczogc3RyaW5nW107XG5cbiAgcmVhZG9ubHkgI2Vudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRBZGFwdGVyOiBTa3lHcmlkQWRhcHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogU2t5T3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBza3lXaW5kb3c6IFNreUFwcFdpbmRvd1JlZixcbiAgICBwcml2YXRlIHVpQ29uZmlnU2VydmljZTogU2t5VUlDb25maWdTZXJ2aWNlLFxuICAgIGxvZ2dlcjogU2t5TG9nU2VydmljZSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreUdyaWRDb21wb25lbnQnLCB7XG4gICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogNixcbiAgICAgIG1vcmVJbmZvVXJsOiAnaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZCcsXG4gICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIGRhdGEgZ3JpZCBpbnN0ZWFkLicsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPigpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KHtcbiAgICAgIGZpZWxkU2VsZWN0b3I6ICcnLFxuICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1ncmlkcy1ncm91cC0ke3RoaXMuZ3JpZElkfWA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUdyaWRNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy5hcHBseVVzZXJDb25maWcoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBjb2x1bW4gZHJhZy1hbmQtZHJvcC5cbiAgICB0aGlzLmdyaWRBZGFwdGVyLmluaXRpYWxpemVEcmFnQW5kRHJvcChcbiAgICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSxcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UsXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5JZHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMub25IZWFkZXJEcm9wKHNlbGVjdGVkQ29sdW1uSWRzKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZFJvd3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzLmZpbHRlcigoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcblxuICAgICAgLy8gVGhpcyBzZXQgdGltZW91dCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBkYXRhIGhhcyByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIFRoaXMgY2xlYW5zIHVwIGFueSBsaW5nZXJpbmcgcm93IGRlbGV0ZXMgZm9yIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucm93RGVsZXRlQ29udGVudHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgcm93cyByZS1yZW5kZXIgdGh1cyBtZXNzaW5nIHVwIHRoZSBhZmZpeGVycy4gV2UgbXVzdCByZWFmZml4IHRoZW0gc28gdGhhdCB0aGluZ3NcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHJlbmRlciBjb3JyZWN0bHkuXG4gICAgICAgICAgICBjb25zdCByb3dFbGVtZW50OiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgaWQgKyAnXCJdJyxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF0uYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJyxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydzb3J0RmllbGQnXSkge1xuICAgICAgdGhpcy5zZXRTb3J0SGVhZGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveSh0aGlzLmRyYWd1bGFHcm91cE5hbWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRvcFNjcm9sbFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFibGVDbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0aGlzLmZpdCAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtZml0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oYXMtdG9vbGJhcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmxvY2tlZCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oZWFkZXItbG9ja2VkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkRGVsaW1pdGVyKGNsYXNzTmFtZXMsICcgJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FyZXRJY29uTmFtZXMoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMuZ2V0U29ydERpcmVjdGlvbihjb2x1bW4uZmllbGQpLnN1YnNjcmliZSgoc29ydERpcikgPT4ge1xuICAgICAgaWYgKHNvcnREaXIgPT09ICdhc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjaGV2cm9uLXVwJyk7XG4gICAgICB9XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjaGV2cm9uLWRvd24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihpY29uTmFtZXMsICcgJyk7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChrZXkgPT09ICdlbnRlcicgfHwga2V5ID09PSAnICcpIHtcbiAgICAgIHRoaXMuc29ydEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNvcnRCeUNvbHVtbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlICYmIGNvbHVtbi5pc1NvcnRhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgZGVzY2VuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQgJiZcbiAgICAgICAgICAgICAgZmllbGQuZmllbGRTZWxlY3RvciA9PT0gY29sdW1uLmZpZWxkICYmXG4gICAgICAgICAgICAgIGZpZWxkLmRlc2NlbmRpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNvcnRGaWVsZENoYW5nZS5lbWl0KHNlbGVjdG9yKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KHNlbGVjdG9yKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNvcnREaXJlY3Rpb24oY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkXG4gICAgICAgICAgPyBmaWVsZC5kZXNjZW5kaW5nXG4gICAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgICAgOiAnYXNjJ1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcmlhU29ydERpcmVjdGlvbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzY2VuZGluZydcbiAgICAgICAgICAgIDogJ2FzY2VuZGluZydcbiAgICAgICAgICA6IGNvbHVtbi5pc1NvcnRhYmxlXG4gICAgICAgICAgICA/ICdub25lJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENhcmV0VmlzaWJpbGl0eShjb2x1bW5GaWVsZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydEZpZWxkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGQuZmllbGRTZWxlY3RvciA9PT0gY29sdW1uRmllbGQgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQpLnBpcGUoXG4gICAgICBtYXAoKHZpc2liaWxpdHk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5DaGVja2JveENoYW5nZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ29sdW1uSGVhZGluZyhjaGFuZ2U6IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmhlYWRpbmcgPSBjaGFuZ2UudmFsdWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJbmxpbmVIZWxwUG9wb3ZlcihcbiAgICBjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmlubGluZUhlbHBQb3BvdmVyID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ29sdW1uRGVzY3JpcHRpb24oXG4gICAgY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5kZXNjcmlwdGlvbiA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVzaXplQ29sdW1uU3RhcnQoZXZlbnQ6IHtcbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgcGFnZVg/OiBudW1iZXI7XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgPSB0cnVlO1xuICAgIHRoaXMueFBvc1N0YXJ0ID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gdHJ1ZTtcblxuICAgIC8vIFNob3cgdmlzdWFsIGluZGljYXRvciBvZiB3aGVyZSBtb3VzZSBpcyBkcmFnZ2luZyAocmVzaXplQmFyKS5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGV2ZW50LnBhZ2VYKTtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3VzZU1vdmVFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpO1xuICAgIGNvbnN0IHRvdWNoTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2htb3ZlJyk7XG5cbiAgICBtZXJnZShtb3VzZU1vdmVFdmVudCwgdG91Y2hNb3ZlRXZlbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG1vdmVFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25SZXNpemVIYW5kbGVNb3ZlKG1vdmVFdmVudCk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IG1vdXNlVXBFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKTtcbiAgICBjb25zdCB0b3VjaEVuZEV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2hlbmQnKTtcblxuICAgIG1lcmdlKG1vdXNlVXBFdmVudCwgdG91Y2hFbmRFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZW5kRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlUmVsZWFzZShlbmRFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd25SZXNpemVDb2woZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENoYW5nZVJlc2l6ZUNvbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKGlucHV0LnZhbHVlKTtcbiAgICBjb25zdCBkZWx0YVggPSBuZXdWYWx1ZSAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3VmFsdWUsIGRlbHRhWCk7XG4gICAgY29uc3QgbGVmdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihsZWZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMueFBvc1N0YXJ0O1xuICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gdGhpcy5zdGFydENvbHVtbldpZHRoICsgZGVsdGFYO1xuXG4gICAgaWYgKG5ld0NvbFdpZHRoIDw9IHRoaXMubWluQ29sV2lkdGgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4UmFuZ2VCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJyAmJiBuZXdDb2xXaWR0aCA+IG1heCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihldmVudC5wYWdlWCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlUmVsZWFzZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG4gICAgdGhpcy5yZXNpemVDb2x1bW5CeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgsIG5ld0NvbFdpZHRoLCBkZWx0YVgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXggPSB1bmRlZmluZWQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSwgc2VsZWN0ZWRJdGVtOiBMaXN0SXRlbU1vZGVsKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgIXRoaXMuaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQgPSAhc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlJvd0NsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSb3dIaWdobGlnaHRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucm93SGlnaGxpZ2h0ZWRJZCkge1xuICAgICAgcmV0dXJuIGlkID09PSB0aGlzLnJvd0hpZ2hsaWdodGVkSWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dIZWlnaHQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEFkYXB0ZXIuZ2V0Um93SGVpZ2h0KHRoaXMudGFibGVFbGVtZW50UmVmLCBpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsUm93RGVsZXRlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBpZCxcbiAgICApO1xuICAgIHRoaXMucm93RGVsZXRlQ2FuY2VsLmVtaXQoeyBpZDogaWQgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpcm1Sb3dEZWxldGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gaWQpLnBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlybS5lbWl0KHsgaWQ6IGlkIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0RlbGV0ZUl0ZW0oaWQ6IHN0cmluZyk6IFNreUdyaWRSb3dEZWxldGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmluZCgocm93RGVsZXRlKSA9PiByb3dEZWxldGUuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8vIFByZXZlbnQgdG91Y2ggZGV2aWNlcyBmcm9tIGluYWR2ZXJ0ZW50bHkgc2Nyb2xsaW5nIGdyaWQgd2hpbGUgZHJhZ2dpbmcgY29sdW1ucy5cbiAgcHVibGljIG9uVG91Y2hNb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcHVibGljIG9uVG9wU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgdGhpcy50b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25HcmlkU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYpIHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbFRyaWdnZXJlZCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvd1RvcFNjcm9sbCAmJlxuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcyAmJlxuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBsZXQgY29sdW1uc1dpZHRoVG90YWwgPSAwO1xuICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dUb3BTY3JvbGwpIHtcbiAgICAgICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbC5uYXRpdmVFbGVtZW50KS53aWR0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gY29sLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgICAgIGNvbXB1dGVkV2lkdGggfHwgb2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICB0aGlzLm1pbkNvbFdpZHRoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29sdW1uc1dpZHRoVG90YWwgPSBjb2x1bW5zV2lkdGhUb3RhbCArIHdpZHRoO1xuICAgICAgICAgIGlmIChjb2x1bW5zV2lkdGhUb3RhbCA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvcFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5TZWxlY3RBbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdENsZWFyQWxsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5DbGVhckFsbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZTogU2t5R3JpZE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuU2VsZWN0QWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0QWxsKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5DbGVhckFsbDpcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENsZWFyQWxsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuUHJvbXB0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93KSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmluZChcbiAgICAgICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChleGlzdGluZ0NvbmZpZykge1xuICAgICAgICAgICAgZXhpc3RpbmdDb25maWcucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICAgICBwZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgICAgICAgZW5hYmxlU2Nyb2xsOiB0cnVlLFxuICAgICAgICAgICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLiNlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5pbmxpbmVEZWxldGVUZW1wbGF0ZVJlZiwge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuZGF0YS5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgYXJlIG1hbnVhbGx5IHNldHRpbmcgdGhlIHotaW5kZXggaGVyZSBiZWNhdXNlIG92ZXJsYXlzIHdpbGwgYWx3YXlzIGJlIG9uIHRvcCBvZlxuICAgICAgICAgICAgICogdGhlIG9tbmliYXIuIFRoaXMgbWFudWFsIHNldHRpbmcgaXMgMSBsZXNzIHRoYW4gdGhlIG9tbmliYXIncyB6LWluZGV4IG9mIDEwMDAuIFdlXG4gICAgICAgICAgICAgKiBkaXNjdXNzZWQgY2hhbmdpbmcgdGhlIG92ZXJsYXkgc2VydmljZSB0byBhbGxvdyBmb3IgdGhpcyBidXQgZGVjaWRlZCBhZ2FpbnN0IHRoYXRcbiAgICAgICAgICAgICAqIGNoYW5nZSBhdCB0aGlzIHRpbWUgZHVlIHRvIGl0cyBuaWNoZSBuYXR1cmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9ICc5OTknO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5saW5lRGVsZXRlUmVmID0gdGhpcy5pbmxpbmVEZWxldGVSZWZzXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5maW5kKChlbFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5pZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ3Jvdy1kZWxldGUtcmVmLScgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy5hZmZpeFNlcnZpY2UuY3JlYXRlQWZmaXhlcihpbmxpbmVEZWxldGVSZWYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCArICdcIl0nLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5WaWV3cG9ydCxcbiAgICAgICAgICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1ttZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXSA9IHtcbiAgICAgICAgICAgICAgICBhZmZpeGVyOiBhZmZpeGVyLFxuICAgICAgICAgICAgICAgIG92ZXJsYXk6IG92ZXJsYXksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5BYm9ydERlbGV0ZVJvdzpcbiAgICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGEgJiYgbWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93KSB7XG4gICAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maWdzID0gdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbHRlcihcbiAgICAgICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCAhPT0gbWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUobWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb25IZWFkZXJEcm9wKG5ld0NvbHVtbklkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAvLyB1cGRhdGUgc2VsZWN0ZWQgY29sdW1uSWRzXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc1NldCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IG5ld0NvbHVtbklkcztcblxuICAgIC8vIG1hcmsgZm9yIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lm9uUHVzaFxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMocmVzcGVjdEhpZGRlbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNldHVwIGRpc3BsYXllZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNcbiAgICAgICAgICAuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpWzBdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXNwZWN0SGlkZGVuKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhKCk6IHZvaWQge1xuICAgIC8vIFRyYW5zZm9ybSBkYXRhIGludG8gb2JqZWN0IHdpdGggaWQgYW5kIGRhdGEgcHJvcGVydGllc1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0YSAmJlxuICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZGF0YVswXS5pZCAmJlxuICAgICAgIXRoaXMuZGF0YVswXS5kYXRhXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdFJvd0lkKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IG5ldyBMaXN0SXRlbU1vZGVsKGl0ZW0uaWQsIGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpOiBMaXN0SXRlbU1vZGVsW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGxldCBjaGVja2VkO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCB0aGlzLm11bHRpc2VsZWN0Um93SWQpKSB7XG4gICAgICAgIGNoZWNrZWQgPSBzZWxlY3RlZFJvd3MuaW5kZXhPZihpdGVtW3RoaXMubXVsdGlzZWxlY3RSb3dJZF0pID4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTGlzdEl0ZW1Nb2RlbChpdGVtLmlkLCBpdGVtLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnRIZWFkZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KFxuICAgICAgdGhpcy5zb3J0RmllbGQgfHwgeyBmaWVsZFNlbGVjdG9yOiAnJywgZGVzY2VuZGluZzogZmFsc2UgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBzaHJpbmthZ2UgYmVsb3cgbWluaW11bSB3aWR0aC5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZGVsdGFYID0gZGVsdGFYICsgdGhpcy5taW5Db2xXaWR0aCAtIG5ld0NvbFdpZHRoO1xuICAgICAgbmV3Q29sV2lkdGggPSB0aGlzLm1pbkNvbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIGZpdD13aWR0aCBhZGRzL3JlbW92ZXMgd2lkdGggZnJvbSB0aGUgbGFzdCBjb2x1bW5cbiAgICAvLyBmaXQ9c2Nyb2xsIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSB0YWJsZVxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgY29uc3QgbGFzdENvbHVtbiA9IHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpO1xuXG4gICAgICAvLyBQcmV2ZW50IGFjY2lkZW50YWwgZ3Jvd3RoIHRoYXQgd291bGQgYnVtcCBsYXN0IGNvbHVtbiBvZmYgc2NyZWVuLlxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgaWYgKG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICAgIG5ld0NvbFdpZHRoID0gbWF4O1xuICAgICAgICBkZWx0YVggPSBtYXggLSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGg7XG4gICAgICB9XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICAgIGxhc3RDb2x1bW4ud2lkdGggPSBsYXN0Q29sdW1uLndpZHRoIC0gZGVsdGFYO1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZixcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgYCR7dGhpcy50YWJsZVdpZHRoICsgZGVsdGFYfXB4YCxcbiAgICAgICk7XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNvbHVtbldpZHRoQ2hhbmdlLmVtaXQodGhpcy5nZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1uV2lkdGhzKCk6IHZvaWQge1xuICAgIC8vIEVzdGFibGlzaCB0YWJsZSB3aWR0aC5cbiAgICB0aGlzLnNob3dUb3BTY3JvbGwgPSB0cnVlO1xuXG4gICAgLy8gU2V0IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gdGhlIHdpZHRoIGluaXRpYWxseSBnaXZlbiBieSB0aGUgYnJvd3Nlci5cbiAgICAvLyBjb21wdXRlZFdpZHRoIHByZXZlbnRzIGFjY2lkZW50YWwgb3ZlcmZsb3cgZm9yIGJyb3dzZXJzIHdpdGggc3ViLXBpeGVsIHdpZHRocy5cbiAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2wubmF0aXZlRWxlbWVudCkud2lkdGgsXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyAnc2Nyb2xsJyB0YWJsZXMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIG91dHNpZGUgb2YgdGhlaXIgY29uc3RyYWludHMuXG4gICAgaWYgKHRoaXMuZml0ID09PSAnc2Nyb2xsJykge1xuICAgICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWxlbWVudFJlZiwgJ21pbi13aWR0aCcsICdhdXRvJyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1heCBsaW1pdHMgZm9yIGlucHV0IHJhbmdlcy5cbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4UmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmZXJDb2x1bW5XaWR0aHMoXG4gICAgb2xkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICAgbmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9sZENvbHVtbnMgJiYgbmV3Q29sdW1ucykge1xuICAgICAgZm9yIChjb25zdCBvbGRDb2x1bW4gb2Ygb2xkQ29sdW1ucykge1xuICAgICAgICBpZiAob2xkQ29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb2x1bW4gPSBuZXdDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAobmV3Q29sdW1uKSA9PiBvbGRDb2x1bW4uaWQgPT09IG5ld0NvbHVtbi5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCk6IFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlW10ge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCk6IHZvaWQge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYW5nZUlucHV0QnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmFuZ2VJbnB1dEVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAoaW5wdXQpID0+XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LnRvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBTa3lHcmlkQ29sdW1uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbTnVtYmVyKGluZGV4KV07XG4gIH1cblxuICBwcml2YXRlIGdldE1heFJhbmdlQnlJbmRleChpbmRleDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2x1bW5FbGVtZW50UmVmID0gdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5maW5kKFxuICAgICAgKHRoKSA9PiB0aC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpID09PSBpbmRleCxcbiAgICApO1xuICAgIGNvbnN0IHJhbmdlSW5wdXQgPSBjb2x1bW5FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LWdyaWQtY29sdW1uLWlucHV0LWFyaWEtb25seScsXG4gICAgKTtcbiAgICByZXR1cm4gTnVtYmVyKHJhbmdlSW5wdXQubWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFzdERpc3BsYXllZENvbHVtbigpOiBTa3lHcmlkQ29sdW1uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleCh0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlbGltaXRlcih0ZXh0OiBzdHJpbmdbXSwgZGVsaW1pdGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0LmZpbHRlcigodmFsKSA9PiB2YWwpLmpvaW4oZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVJvd0RlbGV0ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGVsZXRlQ29udGVudHMgPSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyb3dEZWxldGVDb250ZW50cykge1xuICAgICAgcm93RGVsZXRlQ29udGVudHMuYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKHJvd0RlbGV0ZUNvbnRlbnRzLm92ZXJsYXkpO1xuICAgICAgZGVsZXRlIHRoaXMucm93RGVsZXRlQ29udGVudHNbaWRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGVkUm93cyhzb3VyY2U6IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSA9IHtcbiAgICAgIHNlbGVjdGVkUm93SWRzOiB0aGlzLmdldFNlbGVjdGVkUm93cygpLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgfTtcbiAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5pc1NlbGVjdGVkO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLmRhdGEsIHRoaXMubXVsdGlzZWxlY3RSb3dJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVt0aGlzLm11bHRpc2VsZWN0Um93SWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlRWxTZWxlY3RvcnMgPSBgXG4gICAgICBhLFxuICAgICAgYnV0dG9uLFxuICAgICAgaW5wdXQsXG4gICAgICBsYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHNlbGVjdCxcbiAgICAgIHRleHRhcmVhLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGRpYWxvZyxcbiAgICAgIG1lbnUsXG4gICAgICBtZW51aXRlbSxcbiAgICAgIHN1bW1hcnlgO1xuICAgIHJldHVybiBldmVudC50YXJnZXQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsU2VsZWN0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzaXplQmFyUG9zaXRpb24oeFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGwgPSB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVzaXplQmFyWCA9XG4gICAgICB4UG9zaXRpb24gLVxuICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBhcmVudFNjcm9sbDtcbiAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMucmVzaXplQmFyLCAnbGVmdCcsIHJlc2l6ZUJhclggKyAncHgnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlVc2VyQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgICAgLmdldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChjb25maWc6IFNreUdyaWRVSUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgY29sdW1uSWRzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGF0YSBzZXQuXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChpZCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGlkKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoICE9PSAwIHx8IHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gV2F0Y2ggZm9yIGFkZGVkL3JlbW92ZWQgY29sdW1uczpcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbnMoKSksXG4gICAgKTtcblxuICAgIC8vIFdhdGNoIGZvciBjb2x1bW4gaGVhZGluZyBjaGFuZ2VzOlxuICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5mb3JFYWNoKChjb21wOiBTa3lHcmlkQ29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgY29tcC5oZWFkaW5nTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBjb21wLmRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5EZXNjcmlwdGlvbihjaGFuZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5c0VxdWFsKGFycmF5QTogYW55W10sIGFycmF5QjogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXlBLmxlbmd0aCA9PT0gYXJyYXlCLmxlbmd0aCAmJlxuICAgICAgYXJyYXlBLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBhcnJheUJbaW5kZXhdKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZ3JpZFwiPlxuICBAaWYgKHNob3dUb3BTY3JvbGwpIHtcbiAgICA8ZGl2XG4gICAgICAjdG9wU2Nyb2xsQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGwtY29udGFpbmVyXCJcbiAgICAgIChzY3JvbGwpPVwib25Ub3BTY3JvbGwoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGxcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0VG9wU2Nyb2xsV2lkdGgoKVwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdlxuICAgICNncmlkQ29udGFpbmVyXG4gICAgY2xhc3M9XCJza3ktZ3JpZC10YWJsZS1jb250YWluZXJcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0XCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAgIChzY3JvbGwpPVwib25HcmlkU2Nyb2xsKCRldmVudClcIlxuICA+XG4gICAgPHRhYmxlICNncmlkVGFibGUgY2xhc3M9XCJza3ktZ3JpZC10YWJsZVwiIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3NOYW1lcygpXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBbZHJhZ3VsYV09XCJkcmFndWxhR3JvdXBOYW1lXCI+XG4gICAgICAgICAgQGlmIChlbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZ3JpZC1tdWx0aXNlbGVjdC1jZWxsIHNreS1ncmlkLWhlYWRlci1sb2NrZWRcIlxuICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICAgIHt7ICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7XG4gICAgICAgICAgICB0cmFjayBjb2x1bW47XG4gICAgICAgICAgICBsZXQgbGFzdCA9ICRsYXN0O1xuICAgICAgICAgICAgbGV0IGkgPSAkaW5kZXhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAjZ3JpZENvbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWZpZWxkLWxhYmVsXCJcbiAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidza3ktZ3JpZC0nICsgZ3JpZElkICsgJy1jb2x1bW4tJyArIGlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFt0YWJJbmRleF09XCJjb2x1bW4uaXNTb3J0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgIChtb3VzZXVwKT1cInNvcnRCeUNvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRUYWJsZUhlYWRlckNsYXNzTmFtZXMoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGggLSAxXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoIC0gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWdyaWQtaGVhZGVyLWNhcmV0LWhpZGRlbi1zcGFjaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIFRoZSBubyBzcGFjaW5nIGhlcmUgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgZXh0cmEgc3BhY2VzIGR1ZSB0byB0aGVzZSBiZWluZyBpbmxpbmUgZWxlbWVudHMgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGluZz8udHJpbSgpXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNreS1pY29uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmctc29ydFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICdza3ktZ3JpZC1oZWFkaW5nLXNvcnQtJyArXG4gICAgICAgICAgICAgICAgICAgIChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uTmFtZV09XCJnZXRDYXJldEljb25OYW1lcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uLmlubGluZUhlbHBQb3BvdmVyKSB7XG4gICAgICAgICAgICAgICAgICA8c2t5LWhlbHAtaW5saW5lXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAnc2t5LWdyaWQtaGVscC1pbmxpbmUtc29ydC1oaWRkZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3NreVBvcG92ZXJdPVwiY29sdW1uLmlubGluZUhlbHBQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKChmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzaXplQ29sdW1uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2NvbFNpemVSYW5nZVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtY29sdW1uLWlucHV0LWFyaWEtb25seVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidza3ktZ3JpZC0nICsgZ3JpZElkICsgJy1jb2x1bW4tJyArIGlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cImNvbHVtblJlc2l6ZVN0ZXBcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvblJlc2l6ZUhhbmRsZUJsdXIoKVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uUmVzaXplSGFuZGxlRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbnB1dENoYW5nZVJlc2l6ZUNvbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cInNreS1ncmlkLXRib2R5XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKSA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1zZWxlY3RlZC1yb3cnOiBpdGVtLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICAgJ3NreS1ncmlkLXJvdy1oaWdobGlnaHQnOiBpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZW5hYmxlTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk11bHRpc2VsZWN0Q2hlY2tib3hDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgIGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICAgICAgICB0cmFjayBjb2x1bW47XG4gICAgICAgICAgICAgIGxldCBsYXN0ID0gJGxhc3Q7XG4gICAgICAgICAgICAgIGxldCBpID0gJGluZGV4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNreS1ncmlkLWNlbGxcbiAgICAgICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uZXhjbHVkZUZyb21IaWdobGlnaHRpbmcgPyBoaWdobGlnaHRUZXh0IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZFNlbGVjdG9yXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJjb2x1bW4uaWQgfHwgY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgICBAaWYgKHNob3dSZXNpemVCYXIpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgI3Jlc2l6ZUJhclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGxUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIj57e1xuICB2YWx1ZVxufX08L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubGluZURlbGV0ZVRlbXBsYXRlUmVmIGxldC1pdGVtPlxuICA8ZGl2XG4gICAgI2lubGluZURlbGV0ZVJlZlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgPlxuICAgIDxza3ktaW5saW5lLWRlbGV0ZVxuICAgICAgW3BlbmRpbmddPVwiZ2V0Um93RGVsZXRlSXRlbShpdGVtLmlkKS5wZW5kaW5nXCJcbiAgICAgIChjYW5jZWxUcmlnZ2VyZWQpPVwiY2FuY2VsUm93RGVsZXRlKGl0ZW0uaWQpXCJcbiAgICAgIChkZWxldGVUcmlnZ2VyZWQpPVwiY29uZmlybVJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\nimport { DragulaModule } from 'ng2-dragula';\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridModule, declarations: [SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent], imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule], exports: [SkyGridComponent, SkyGridColumnComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridModule, imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.5\", ngImport: i0, type: SkyGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRXBEOztHQUVHO0FBc0JILE1BQU0sT0FBTyxhQUFhOzhHQUFiLGFBQWE7K0dBQWIsYUFBYSxpQkFuQnRCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsb0JBQW9CLGFBR3BCLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixzQkFBc0IsYUFFZCxnQkFBZ0IsRUFBRSxzQkFBc0I7K0dBRXZDLGFBQWEsWUFkdEIsWUFBWTtZQUNaLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUNkLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixxQkFBcUI7WUFDckIsZ0JBQWdCO1lBQ2hCLHNCQUFzQjs7MkZBSWIsYUFBYTtrQkFyQnpCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7aUJBQ3BEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFmZml4TW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SGVscElubGluZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9oZWxwLWlubGluZSc7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VGV4dEhpZ2hsaWdodE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcbmltcG9ydCB7IFNreUlubGluZURlbGV0ZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5UG9wb3Zlck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5cbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5cbmltcG9ydCB7IFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1ncmlkcy1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5R3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNreUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNreUdyaWRDb21wb25lbnQsXG4gICAgU2t5R3JpZENvbHVtbkNvbXBvbmVudCxcbiAgICBTa3lHcmlkQ2VsbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcmFndWxhTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFNreUFmZml4TW9kdWxlLFxuICAgIFNreUNoZWNrYm94TW9kdWxlLFxuICAgIFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUhlbHBJbmxpbmVNb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lJbmxpbmVEZWxldGVNb2R1bGUsXG4gICAgU2t5UG9wb3Zlck1vZHVsZSxcbiAgICBTa3lUZXh0SGlnaGxpZ2h0TW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbU2t5R3JpZENvbXBvbmVudCwgU2t5R3JpZENvbHVtbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtZ3JpZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL3NreXV4LWdyaWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i3.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":"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"}
1
+ {"version":3,"file":"skyux-grids.mjs","sources":["../tmp-esm2022/lib/modules/grid/grid-column.model.js","../tmp-esm2022/lib/modules/shared/sky-grids-resources.module.js","../tmp-esm2022/lib/modules/grid/grid-cell.component.js","../tmp-esm2022/lib/modules/grid/grid-column.component.js","../tmp-esm2022/lib/modules/grid/grid-adapter.service.js","../tmp-esm2022/lib/modules/grid/types/grid-message-type.js","../tmp-esm2022/lib/modules/grid/types/grid-selected-rows-source.js","../tmp-esm2022/lib/modules/grid/grid.component.js","../tmp-esm2022/lib/modules/grid/grid.module.js","../tmp-esm2022/skyux-grids.js"],"sourcesContent":["/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnModel {\n constructor(template, data) {\n this.isSortable = true;\n this.template = template;\n if (data) {\n this.id = data.id || data.field;\n this.type = data.type;\n this.field = data.field;\n this.heading = data.heading;\n this.inlineHelpPopover = data.inlineHelpPopover;\n this.width = data.width ? Number(data.width) : undefined;\n this.hidden = data.hidden;\n this.locked = data.locked;\n this.description = data.description;\n this.searchFunction = data.searchFunction;\n this.isSortable = data.isSortable;\n this.excludeFromHighlighting = data.excludeFromHighlighting;\n this.alignment = data.alignment;\n }\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4ubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1jb2x1bW4ubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUE7O0dBRUc7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBcUI3QixZQUFZLFFBQThCLEVBQUUsSUFBVTtRQVYvQyxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBV3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRXpCLElBQUksSUFBSSxFQUFFLENBQUM7WUFDVCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDdEIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM1QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDO1lBQ2hELElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDbEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztZQUM1RCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDbEMsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWFsaWdubWVudCc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbHVtbk1vZGVsIHtcbiAgcHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgcHVibGljIGlkOiBzdHJpbmc7XG4gIHB1YmxpYyBmaWVsZDogc3RyaW5nO1xuICBwdWJsaWMgaGVhZGluZzogc3RyaW5nO1xuICBwdWJsaWMgaW5saW5lSGVscFBvcG92ZXI6IGFueTtcbiAgcHVibGljIHR5cGU6IHN0cmluZztcbiAgcHVibGljIHdpZHRoOiBudW1iZXI7XG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG4gIHB1YmxpYyBsb2NrZWQ6IGJvb2xlYW47XG4gIHB1YmxpYyBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBwdWJsaWMgaXNTb3J0YWJsZSA9IHRydWU7XG4gIHB1YmxpYyBleGNsdWRlRnJvbUhpZ2hsaWdodGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW4ncyBkYXRhIGFuZCBoZWFkZXIuXG4gICAqL1xuICBwdWJsaWMgYWxpZ25tZW50OiBTa3lHcmlkQ29sdW1uQWxpZ25tZW50O1xuXG4gIHB1YmxpYyBzZWFyY2hGdW5jdGlvbjogKGRhdGE6IGFueSwgc2VhcmNoVGV4dDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjx1bmtub3duPiwgZGF0YT86IGFueSkge1xuICAgIHRoaXMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICB0aGlzLmlkID0gZGF0YS5pZCB8fCBkYXRhLmZpZWxkO1xuICAgICAgdGhpcy50eXBlID0gZGF0YS50eXBlO1xuICAgICAgdGhpcy5maWVsZCA9IGRhdGEuZmllbGQ7XG4gICAgICB0aGlzLmhlYWRpbmcgPSBkYXRhLmhlYWRpbmc7XG4gICAgICB0aGlzLmlubGluZUhlbHBQb3BvdmVyID0gZGF0YS5pbmxpbmVIZWxwUG9wb3ZlcjtcbiAgICAgIHRoaXMud2lkdGggPSBkYXRhLndpZHRoID8gTnVtYmVyKGRhdGEud2lkdGgpIDogdW5kZWZpbmVkO1xuICAgICAgdGhpcy5oaWRkZW4gPSBkYXRhLmhpZGRlbjtcbiAgICAgIHRoaXMubG9ja2VkID0gZGF0YS5sb2NrZWQ7XG4gICAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGF0YS5kZXNjcmlwdGlvbjtcbiAgICAgIHRoaXMuc2VhcmNoRnVuY3Rpb24gPSBkYXRhLnNlYXJjaEZ1bmN0aW9uO1xuICAgICAgdGhpcy5pc1NvcnRhYmxlID0gZGF0YS5pc1NvcnRhYmxlO1xuICAgICAgdGhpcy5leGNsdWRlRnJvbUhpZ2hsaWdodGluZyA9IGRhdGEuZXhjbHVkZUZyb21IaWdobGlnaHRpbmc7XG4gICAgICB0aGlzLmFsaWdubWVudCA9IGRhdGEuYWxpZ25tZW50O1xuICAgIH1cbiAgfVxufVxuIl19","/* istanbul ignore file */\n/**\n * NOTICE: DO NOT MODIFY THIS FILE!\n * The contents of this file were automatically generated by\n * the 'ng generate @skyux/i18n:lib-resources-module lib/modules/shared/sky-grids' schematic.\n * To update this file, simply rerun the command.\n */\nimport { NgModule } from '@angular/core';\nimport { SkyI18nModule, SkyLibResourcesService, } from '@skyux/i18n';\nimport * as i0 from \"@angular/core\";\nconst RESOURCES = {\n 'EN-US': { skyux_grid_multiselect_select_row: { message: 'Select row' } },\n 'FR-CA': {\n skyux_grid_multiselect_select_row: { message: 'Sélectionner une ligne' },\n },\n};\nSkyLibResourcesService.addResources(RESOURCES);\n/**\n * Import into any component library module that needs to use resource strings.\n */\nexport class SkyGridsResourcesModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridsResourcesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridsResourcesModule, exports: [SkyI18nModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridsResourcesModule, imports: [SkyI18nModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridsResourcesModule, decorators: [{\n type: NgModule,\n args: [{\n exports: [SkyI18nModule],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5LWdyaWRzLXJlc291cmNlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMtcmVzb3VyY2VzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwwQkFBMEI7QUFDMUI7Ozs7O0dBS0c7QUFDSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFDTCxhQUFhLEVBRWIsc0JBQXNCLEdBQ3ZCLE1BQU0sYUFBYSxDQUFDOztBQUVyQixNQUFNLFNBQVMsR0FBb0M7SUFDakQsT0FBTyxFQUFFLEVBQUUsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLEVBQUU7SUFDekUsT0FBTyxFQUFFO1FBQ1AsaUNBQWlDLEVBQUUsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUU7S0FDekU7Q0FDRixDQUFDO0FBRUYsc0JBQXNCLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBRS9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLHVCQUF1Qjs4R0FBdkIsdUJBQXVCOytHQUF2Qix1QkFBdUIsWUFGeEIsYUFBYTsrR0FFWix1QkFBdUIsWUFGeEIsYUFBYTs7MkZBRVosdUJBQXVCO2tCQUhuQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQztpQkFDekIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBpc3RhbmJ1bCBpZ25vcmUgZmlsZSAqL1xuLyoqXG4gKiBOT1RJQ0U6IERPIE5PVCBNT0RJRlkgVEhJUyBGSUxFIVxuICogVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSB3ZXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5XG4gKiB0aGUgJ25nIGdlbmVyYXRlIEBza3l1eC9pMThuOmxpYi1yZXNvdXJjZXMtbW9kdWxlIGxpYi9tb2R1bGVzL3NoYXJlZC9za3ktZ3JpZHMnIHNjaGVtYXRpYy5cbiAqIFRvIHVwZGF0ZSB0aGlzIGZpbGUsIHNpbXBseSByZXJ1biB0aGUgY29tbWFuZC5cbiAqL1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFNreUkxOG5Nb2R1bGUsXG4gIFNreUxpYlJlc291cmNlcyxcbiAgU2t5TGliUmVzb3VyY2VzU2VydmljZSxcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5jb25zdCBSRVNPVVJDRVM6IFJlY29yZDxzdHJpbmcsIFNreUxpYlJlc291cmNlcz4gPSB7XG4gICdFTi1VUyc6IHsgc2t5dXhfZ3JpZF9tdWx0aXNlbGVjdF9zZWxlY3Rfcm93OiB7IG1lc3NhZ2U6ICdTZWxlY3Qgcm93JyB9IH0sXG4gICdGUi1DQSc6IHtcbiAgICBza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3c6IHsgbWVzc2FnZTogJ1PDqWxlY3Rpb25uZXIgdW5lIGxpZ25lJyB9LFxuICB9LFxufTtcblxuU2t5TGliUmVzb3VyY2VzU2VydmljZS5hZGRSZXNvdXJjZXMoUkVTT1VSQ0VTKTtcblxuLyoqXG4gKiBJbXBvcnQgaW50byBhbnkgY29tcG9uZW50IGxpYnJhcnkgbW9kdWxlIHRoYXQgbmVlZHMgdG8gdXNlIHJlc291cmNlIHN0cmluZ3MuXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtTa3lJMThuTW9kdWxlXSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZHNSZXNvdXJjZXNNb2R1bGUge31cbiJdfQ==","import { ChangeDetectionStrategy, Component, Input, ViewChild, ViewContainerRef, } from '@angular/core';\nimport { getData } from '@skyux/list-builder-common';\nimport * as i0 from \"@angular/core\";\n/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridCellComponent {\n ngOnInit() {\n this.container.createEmbeddedView(this.template, this);\n }\n get row() {\n return this.item.data;\n }\n get value() {\n if (this.item.data && (this.fieldSelector || this.columnId)) {\n return getData(this.item.data, this.fieldSelector || this.columnId);\n }\n return undefined;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridCellComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: SkyGridCellComponent, isStandalone: false, selector: \"sky-grid-cell\", inputs: { item: \"item\", columnId: \"columnId\", template: \"template\", fieldSelector: \"fieldSelector\" }, viewQueries: [{ propertyName: \"container\", first: true, predicate: [\"cell\"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: '<ng-template #cell />', isInline: true, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridCellComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid-cell', template: '<ng-template #cell />', changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, styles: [\":host{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:8px;min-height:35px}\\n\"] }]\n }], propDecorators: { item: [{\n type: Input\n }], columnId: [{\n type: Input\n }], template: [{\n type: Input\n }], fieldSelector: [{\n type: Input\n }], container: [{\n type: ViewChild,\n args: ['cell', {\n read: ViewContainerRef,\n static: true,\n }]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jZWxsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC9ncmlkLWNlbGwuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBaUIsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7O0FBRXBFOzs7R0FHRztBQVFILE1BQU0sT0FBTyxvQkFBb0I7SUFtQnhCLFFBQVE7UUFDYixJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELElBQVcsR0FBRztRQUNaLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQVcsS0FBSztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1lBQzVELE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDOzhHQWpDVSxvQkFBb0I7a0dBQXBCLG9CQUFvQiw4UEFjdkIsZ0JBQWdCLDJDQW5CZCx1QkFBdUI7OzJGQUt0QixvQkFBb0I7a0JBUGhDLFNBQVM7K0JBQ0UsZUFBZSxZQUNmLHVCQUF1QixtQkFFaEIsdUJBQXVCLENBQUMsTUFBTSxjQUNuQyxLQUFLOzhCQUlWLElBQUk7c0JBRFYsS0FBSztnQkFJQyxRQUFRO3NCQURkLEtBQUs7Z0JBSUMsUUFBUTtzQkFEZCxLQUFLO2dCQUlDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBT0UsU0FBUztzQkFKaEIsU0FBUzt1QkFBQyxNQUFNLEVBQUU7d0JBQ2pCLElBQUksRUFBRSxnQkFBZ0I7d0JBQ3RCLE1BQU0sRUFBRSxJQUFJO3FCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMaXN0SXRlbU1vZGVsLCBnZXREYXRhIH0gZnJvbSAnQHNreXV4L2xpc3QtYnVpbGRlci1jb21tb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogQGRlcHJlY2F0ZWQgYFNreUdyaWRDb21wb25lbnRgIGFuZCBpdHMgZmVhdHVyZXMgYXJlIGRlcHJlY2F0ZWQuIFdlIHJlY29tbWVuZCB1c2luZyB0aGUgZGF0YSBncmlkIGluc3RlYWQuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktZ3JpZC1jZWxsJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI2NlbGwgLz4nLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLWNlbGwuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lHcmlkQ2VsbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpdGVtOiBMaXN0SXRlbU1vZGVsO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBjb2x1bW5JZDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0ZW1wbGF0ZTogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgQElucHV0KClcbiAgcHVibGljIGZpZWxkU2VsZWN0b3I6IHN0cmluZztcblxuICBAVmlld0NoaWxkKCdjZWxsJywge1xuICAgIHJlYWQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGNvbnRhaW5lcjogVmlld0NvbnRhaW5lclJlZjtcblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250YWluZXIuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudGVtcGxhdGUsIHRoaXMpO1xuICB9XG5cbiAgcHVibGljIGdldCByb3coKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5pdGVtLmRhdGE7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgaWYgKHRoaXMuaXRlbS5kYXRhICYmICh0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCkpIHtcbiAgICAgIHJldHVybiBnZXREYXRhKHRoaXMuaXRlbS5kYXRhLCB0aGlzLmZpZWxkU2VsZWN0b3IgfHwgdGhpcy5jb2x1bW5JZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuIl19","import { ChangeDetectionStrategy, Component, ContentChildren, EventEmitter, Input, TemplateRef, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\n/**\n * Specifies the column information.\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridColumnComponent {\n constructor() {\n /**\n * The horizontal alignment of the column's data and header.\n * Options include: `\"left\"`, `\"center\"`, and `\"right\"`.\n * @default \"left\"\n */\n this.alignment = 'left';\n /**\n * Whether the column sorts the grid when users click the column header.\n * @default true\n */\n this.isSortable = true;\n /**\n * The search function to apply for the specific column. By default,\n * the column executes a string compare on the column data.\n * @default (value, searchText) => value.toString().toLowerCase().indexOf(searchText) !== -1\n */\n // eslint-disable-next-line @angular-eslint/no-input-rename\n this.searchFunction = this.search;\n this.descriptionChanges = new EventEmitter();\n this.descriptionModelChanges = new EventEmitter();\n this.headingChanges = new EventEmitter();\n this.headingModelChanges = new EventEmitter();\n this.inlineHelpPopoverModelChanges = new EventEmitter();\n }\n ngOnChanges(changes) {\n if (changes['heading'] && changes['heading'].firstChange === false) {\n this.headingChanges.emit(this.heading);\n this.headingModelChanges.emit({\n value: this.heading,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['description'] &&\n changes['description'].firstChange === false) {\n this.descriptionChanges.emit(this.description);\n this.descriptionModelChanges.emit({\n value: this.description,\n id: this.id,\n field: this.field,\n });\n }\n if (changes['inlineHelpPopover'] &&\n changes['inlineHelpPopover'].firstChange === false) {\n this.inlineHelpPopoverModelChanges.emit({\n value: this.inlineHelpPopover,\n id: this.id,\n field: this.field,\n });\n }\n }\n get template() {\n if (this.templates.length > 0) {\n return this.templates.first;\n }\n return this.templateInput;\n }\n search(value, searchText) {\n if (value !== undefined && value !== null) {\n return value.toString().toLowerCase().indexOf(searchText) !== -1;\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridColumnComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.3.0\", type: SkyGridColumnComponent, isStandalone: false, selector: \"sky-grid-column\", inputs: { alignment: \"alignment\", description: \"description\", excludeFromHighlighting: \"excludeFromHighlighting\", field: \"field\", heading: \"heading\", hidden: \"hidden\", id: \"id\", inlineHelpPopover: \"inlineHelpPopover\", isSortable: \"isSortable\", locked: \"locked\", searchFunction: [\"search\", \"searchFunction\"], type: \"type\", templateInput: [\"template\", \"templateInput\"], width: \"width\" }, queries: [{ propertyName: \"templates\", predicate: TemplateRef }], usesOnChanges: true, ngImport: i0, template: '<ng-content />', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridColumnComponent, decorators: [{\n type: Component,\n args: [{\n selector: 'sky-grid-column',\n template: '<ng-content />',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: false,\n }]\n }], propDecorators: { alignment: [{\n type: Input\n }], description: [{\n type: Input\n }], excludeFromHighlighting: [{\n type: Input\n }], field: [{\n type: Input\n }], heading: [{\n type: Input\n }], hidden: [{\n type: Input\n }], id: [{\n type: Input\n }], inlineHelpPopover: [{\n type: Input\n }], isSortable: [{\n type: Input\n }], locked: [{\n type: Input\n }], searchFunction: [{\n type: Input,\n args: ['search']\n }], type: [{\n type: Input\n }], templateInput: [{\n type: Input,\n args: ['template']\n }], width: [{\n type: Input\n }], templates: [{\n type: ContentChildren,\n args: [TemplateRef]\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1jb2x1bW4uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb21wb25lbnRzL2dyaWRzL3NyYy9saWIvbW9kdWxlcy9ncmlkL2dyaWQtY29sdW1uLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFJTCxXQUFXLEdBQ1osTUFBTSxlQUFlLENBQUM7O0FBT3ZCOzs7R0FHRztBQU9ILE1BQU0sT0FBTyxzQkFBc0I7SUFObkM7UUFPRTs7OztXQUlHO1FBRUksY0FBUyxHQUEyQixNQUFNLENBQUM7UUFtRGxEOzs7V0FHRztRQUVJLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFXekI7Ozs7V0FJRztRQUNILDJEQUEyRDtRQUVwRCxtQkFBYyxHQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDO1FBMEJQLHVCQUFrQixHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXRFLDRCQUF1QixHQUM1QixJQUFJLFlBQVksRUFBdUMsQ0FBQztRQUVuRCxtQkFBYyxHQUF5QixJQUFJLFlBQVksRUFBVSxDQUFDO1FBRWxFLHdCQUFtQixHQUN4QixJQUFJLFlBQVksRUFBbUMsQ0FBQztRQUUvQyxrQ0FBNkIsR0FDbEMsSUFBSSxZQUFZLEVBQTZDLENBQUM7S0FvRGpFO0lBL0NRLFdBQVcsQ0FBQyxPQUFzQjtRQUN2QyxJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQ25FLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDO2dCQUM1QixLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU87Z0JBQ25CLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtnQkFDWCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELElBQ0UsT0FBTyxDQUFDLGFBQWEsQ0FBQztZQUN0QixPQUFPLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDNUMsQ0FBQztZQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUM7Z0JBQ2hDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVztnQkFDdkIsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzthQUNsQixDQUFDLENBQUM7UUFDTCxDQUFDO1FBQ0QsSUFDRSxPQUFPLENBQUMsbUJBQW1CLENBQUM7WUFDNUIsT0FBTyxDQUFDLG1CQUFtQixDQUFDLENBQUMsV0FBVyxLQUFLLEtBQUssRUFDbEQsQ0FBQztZQUNELElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxJQUFJLENBQUM7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJLENBQUMsaUJBQWlCO2dCQUM3QixFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7Z0JBQ1gsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDOUIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUM5QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFTyxNQUFNLENBQUMsS0FBVSxFQUFFLFVBQWtCO1FBQzNDLElBQUksS0FBSyxLQUFLLFNBQVMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDMUMsT0FBTyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25FLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7OEdBMUtVLHNCQUFzQjtrR0FBdEIsc0JBQXNCLHdlQXlIaEIsV0FBVyxrREE3SGxCLGdCQUFnQjs7MkZBSWYsc0JBQXNCO2tCQU5sQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO29CQUMvQyxVQUFVLEVBQUUsS0FBSztpQkFDbEI7OEJBUVEsU0FBUztzQkFEZixLQUFLO2dCQU9DLFdBQVc7c0JBRGpCLEtBQUs7Z0JBUUMsdUJBQXVCO3NCQUQ3QixLQUFLO2dCQVVDLEtBQUs7c0JBRFgsS0FBSztnQkFPQyxPQUFPO3NCQURiLEtBQUs7Z0JBUUMsTUFBTTtzQkFEWixLQUFLO2dCQVNDLEVBQUU7c0JBRFIsS0FBSztnQkFPQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsS0FBSztnQkFVQyxNQUFNO3NCQURaLEtBQUs7Z0JBVUMsY0FBYztzQkFEcEIsS0FBSzt1QkFBQyxRQUFRO2dCQVFSLElBQUk7c0JBRFYsS0FBSztnQkFZQyxhQUFhO3NCQURuQixLQUFLO3VCQUFDLFVBQVU7Z0JBUVYsS0FBSztzQkFEWCxLQUFLO2dCQWlCRSxTQUFTO3NCQURoQixlQUFlO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBUZW1wbGF0ZVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreUdyaWRDb2x1bW5BbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWFsaWdubWVudCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5cbi8qKlxuICogU3BlY2lmaWVzIHRoZSBjb2x1bW4gaW5mb3JtYXRpb24uXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkLWNvbHVtbicsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQgLz4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRDb2x1bW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAvKipcbiAgICogVGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBjb2x1bW4ncyBkYXRhIGFuZCBoZWFkZXIuXG4gICAqIE9wdGlvbnMgaW5jbHVkZTogYFwibGVmdFwiYCwgYFwiY2VudGVyXCJgLCBhbmQgYFwicmlnaHRcImAuXG4gICAqIEBkZWZhdWx0IFwibGVmdFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgYWxpZ25tZW50OiBTa3lHcmlkQ29sdW1uQWxpZ25tZW50ID0gJ2xlZnQnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjb2x1bW4uXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0byBkaXNhYmxlIHRoZSBoaWdobGlnaHRpbmcgb2Ygc2VhcmNoIHRleHQgaW4gdGhlIGNvbHVtbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBleGNsdWRlRnJvbUhpZ2hsaWdodGluZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHByb3BlcnR5IHRvIHJldHJpZXZlIGNlbGwgaW5mb3JtYXRpb24gZnJvbSBhbiBlbnRyeSBvbiB0aGUgZ3JpZCBgZGF0YWAgYXJyYXkuXG4gICAqIFlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydHkgZm9yIGV2ZXJ5IGNvbHVtbixcbiAgICogYnV0IGRvIG5vdCBwcm92aWRlIGJvdGguIElmIGBpZGAgZG9lcyBub3QgZXhpc3Qgb24gYSBjb2x1bW4sIHRoZW4gYGZpZWxkYCBpcyB0aGUgZW50cnlcbiAgICogZm9yIHRoZSBncmlkIGBzZWxlY3RlZENvbHVtbklkc2AgYXJyYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZmllbGQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGV4dCB0byBkaXNwbGF5IGluIHRoZSBjb2x1bW4gaGVhZGVyLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGhlYWRpbmc6IHN0cmluZztcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgY29sdW1uIGlzIGluaXRpYWxseSBoaWRkZW4gd2hlbiBncmlkIGBzZWxlY3RlZENvbHVtbklkc2AgYXJlIG5vdCBwcm92aWRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoaWRkZW46IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSB1bmlxdWUgSUQgZm9yIHRoZSBjb2x1bW4uIFlvdSBtdXN0IHByb3ZpZGUgZWl0aGVyIHRoZSBgaWRgIG9yIGBmaWVsZGAgcHJvcGVydHlcbiAgICogZm9yIGV2ZXJ5IGNvbHVtbiwgYnV0IGRvIG5vdCBwcm92aWRlIGJvdGguIElmIGBmaWVsZGAgZG9lcyBub3QgZXhpc3Qgb24gYSBjb2x1bW4sXG4gICAqIHRoZW4gdGhlIGBpZGAgcHJvcGVydHkgcmV0cmlldmVzIGNlbGwgaW5mb3JtYXRpb24gZnJvbSBhbiBlbnRyeSBvbiB0aGUgZ3JpZCBgZGF0YWAgYXJyYXkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRlbXBsYXRlIHRvIGRpc3BsYXkgaW5zaWRlIGFuIGlubGluZSBoZWxwIHBvcHVwIGZvciB0aGlzIGNvbHVtbi5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBpbmxpbmVIZWxwUG9wb3ZlcjogYW55O1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gc29ydHMgdGhlIGdyaWQgd2hlbiB1c2VycyBjbGljayB0aGUgY29sdW1uIGhlYWRlci5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGlzU29ydGFibGUgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgbG9ja2VkLiBUaGUgaW50ZW50IGlzIHRvIGRpc3BsYXkgbG9ja2VkIGNvbHVtbnMgZmlyc3RcbiAgICogb24gdGhlIGxlZnQgc2lkZSBvZiB0aGUgZ3JpZC4gSWYgc2V0IHRvIGB0cnVlYCwgdGhlbiB1c2VycyBjYW5ub3QgZHJhZyB0aGUgY29sdW1uXG4gICAqIHRvIGFub3RoZXIgcG9zaXRpb24gYW5kIG9yIGRyYWcgb3RoZXIgY29sdW1ucyBiZWZvcmUgdGhlIGxvY2tlZCBjb2x1bW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgbG9ja2VkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgc2VhcmNoIGZ1bmN0aW9uIHRvIGFwcGx5IGZvciB0aGUgc3BlY2lmaWMgY29sdW1uLiBCeSBkZWZhdWx0LFxuICAgKiB0aGUgY29sdW1uIGV4ZWN1dGVzIGEgc3RyaW5nIGNvbXBhcmUgb24gdGhlIGNvbHVtbiBkYXRhLlxuICAgKiBAZGVmYXVsdCAodmFsdWUsIHNlYXJjaFRleHQpID0+IHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpICE9PSAtMVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEBhbmd1bGFyLWVzbGludC9uby1pbnB1dC1yZW5hbWVcbiAgQElucHV0KCdzZWFyY2gnKVxuICBwdWJsaWMgc2VhcmNoRnVuY3Rpb246ICh2YWx1ZTogYW55LCBzZWFyY2hUZXh0OiBzdHJpbmcpID0+IGJvb2xlYW4gPVxuICAgIHRoaXMuc2VhcmNoO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0ZW1wbGF0ZSBmb3IgYSBjb2x1bW4uIFRoaXMgY2FuIGJlIGFzc2lnbmVkIGFzIGEgcmVmZXJlbmNlXG4gICAqIHRvIHRoZSBgdGVtcGxhdGVgIGF0dHJpYnV0ZSwgb3IgaXQgY2FuIGJlIGFzc2lnbmVkIGFzIGEgY2hpbGQgb2YgdGhlIGB0ZW1wbGF0ZWAgZWxlbWVudFxuICAgKiBpbnNpZGUgdGhlIGBza3ktZ3JpZC1jb2x1bW5gIGNvbXBvbmVudC4gVGhlIHRlbXBsYXRlIGhhcyBhY2Nlc3MgdG8gdGhlIGB2YWx1ZWAgdmFyaWFibGUsXG4gICAqIHdoaWNoIGNvbnRhaW5zIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhlIGNvbHVtbiwgYW5kIHRoZSBgcm93YCB2YXJpYWJsZSwgd2hpY2ggY29udGFpbnNcbiAgICogdGhlIGVudGlyZSByb3cgZGF0YS5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgndGVtcGxhdGUnKVxuICBwdWJsaWMgdGVtcGxhdGVJbnB1dDogVGVtcGxhdGVSZWY8dW5rbm93bj47XG5cbiAgLyoqXG4gICAqIFRoZSB3aWR0aCBvZiB0aGUgY29sdW1uIGluIHBpeGVscy5cbiAgICogSWYgdW5kZWZpbmVkLCB0aGUgY29sdW1uIHdpZHRoIGlzIGV2ZW5seSBkaXN0cmlidXRlZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xuXG4gIHB1YmxpYyBkZXNjcmlwdGlvbkNoYW5nZXM6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzID1cbiAgICBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRDb2x1bW5EZXNjcmlwdGlvbk1vZGVsQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBoZWFkaW5nQ2hhbmdlczogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgaGVhZGluZ01vZGVsQ2hhbmdlcyA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlPigpO1xuXG4gIHB1YmxpYyBpbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlcyA9XG4gICAgbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkQ29sdW1uSW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZT4oKTtcblxuICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKVxuICBwcml2YXRlIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPHVua25vd24+PjtcblxuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydoZWFkaW5nJ10gJiYgY2hhbmdlc1snaGVhZGluZyddLmZpcnN0Q2hhbmdlID09PSBmYWxzZSkge1xuICAgICAgdGhpcy5oZWFkaW5nQ2hhbmdlcy5lbWl0KHRoaXMuaGVhZGluZyk7XG4gICAgICB0aGlzLmhlYWRpbmdNb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmhlYWRpbmcsXG4gICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICBmaWVsZDogdGhpcy5maWVsZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBjaGFuZ2VzWydkZXNjcmlwdGlvbiddICYmXG4gICAgICBjaGFuZ2VzWydkZXNjcmlwdGlvbiddLmZpcnN0Q2hhbmdlID09PSBmYWxzZVxuICAgICkge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbkNoYW5nZXMuZW1pdCh0aGlzLmRlc2NyaXB0aW9uKTtcbiAgICAgIHRoaXMuZGVzY3JpcHRpb25Nb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgY2hhbmdlc1snaW5saW5lSGVscFBvcG92ZXInXSAmJlxuICAgICAgY2hhbmdlc1snaW5saW5lSGVscFBvcG92ZXInXS5maXJzdENoYW5nZSA9PT0gZmFsc2VcbiAgICApIHtcbiAgICAgIHRoaXMuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuZW1pdCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLmlubGluZUhlbHBQb3BvdmVyLFxuICAgICAgICBpZDogdGhpcy5pZCxcbiAgICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRlbXBsYXRlKCk6IFRlbXBsYXRlUmVmPHVua25vd24+IHtcbiAgICBpZiAodGhpcy50ZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVzLmZpcnN0O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbXBsYXRlSW5wdXQ7XG4gIH1cblxuICBwcml2YXRlIHNlYXJjaCh2YWx1ZTogYW55LCBzZWFyY2hUZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmRleE9mKHNlYXJjaFRleHQpICE9PSAtMTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==","import { Injectable, } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nconst GRID_HEADER_DRAGGING_CLASS = 'sky-grid-header-dragging';\nconst GRID_HEADER_LOCKED_SELECTOR = '.sky-grid-header-locked';\nconst GRID_HEADER_RESIZE_HANDLE = '.sky-grid-resize-handle';\nconst GRID_ROW_DELETE_SELECTOR = '.sky-grid-row-delete-heading';\nconst GRID_MULTISELECT_SELECTOR = '.sky-grid-multiselect-cell';\n/**\n * @internal\n */\nexport class SkyGridAdapterService {\n constructor(rendererFactory) {\n this.rendererFactory = rendererFactory;\n this.renderer = this.rendererFactory.createRenderer(undefined, undefined);\n }\n initializeDragAndDrop(dragulaGroupName, dragulaService, dropCallback) {\n dragulaService\n .drag(dragulaGroupName)\n .subscribe((args) => args.el.classList.add(GRID_HEADER_DRAGGING_CLASS));\n dragulaService\n .dragend(dragulaGroupName)\n .subscribe((args) => args.el.classList.remove(GRID_HEADER_DRAGGING_CLASS));\n dragulaService.drop(dragulaGroupName).subscribe((args) => {\n const columnIds = [];\n const nodes = Array.from(args.target.querySelectorAll(`th:not(${GRID_MULTISELECT_SELECTOR}):not(${GRID_ROW_DELETE_SELECTOR})`));\n for (const el of nodes) {\n const id = el.getAttribute('sky-cmp-id');\n columnIds.push(id);\n }\n dropCallback(columnIds);\n });\n dragulaService.createGroup(dragulaGroupName, {\n moves: (el, container, handle) => {\n const columns = container.querySelectorAll('th div');\n const isLeftOfLocked = this.isLeftOfLocked(handle, columns);\n return (!el.querySelector(GRID_HEADER_LOCKED_SELECTOR) &&\n handle !== undefined &&\n !handle.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !handle.matches(GRID_MULTISELECT_SELECTOR) &&\n !handle.matches(GRID_ROW_DELETE_SELECTOR) &&\n !isLeftOfLocked);\n },\n accepts: (el, target, source, sibling) => {\n if (sibling === undefined || !sibling) {\n return true;\n }\n const columns = source.querySelectorAll('th div');\n const siblingDiv = sibling.querySelector('div');\n const isLeftOfLocked = this.isLeftOfLocked(siblingDiv, columns);\n return (!sibling.matches(GRID_HEADER_LOCKED_SELECTOR) &&\n !sibling.matches(GRID_HEADER_RESIZE_HANDLE) &&\n !isLeftOfLocked);\n },\n });\n }\n getRowHeight(el, index) {\n return (el.nativeElement.querySelectorAll('tbody tr')[index].scrollHeight + 'px');\n }\n setStyle(el, style, value) {\n if (el) {\n this.renderer.setStyle(el.nativeElement, style, value);\n }\n }\n isLeftOfLocked(handle, columns) {\n let sourceColumn = handle;\n for (const column of Array.from(columns)) {\n if (column.contains(handle)) {\n sourceColumn = column;\n }\n }\n for (let i = columns.length - 1; i >= 0; i--) {\n if (columns[i].classList.contains('sky-grid-header-locked')) {\n return true;\n }\n if (columns[i] === sourceColumn) {\n break;\n }\n }\n return false;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridAdapterService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridAdapterService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridAdapterService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [{ type: i0.RendererFactory2 }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1hZGFwdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC1hZGFwdGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFVBQVUsR0FHWCxNQUFNLGVBQWUsQ0FBQzs7QUFJdkIsTUFBTSwwQkFBMEIsR0FBRywwQkFBMEIsQ0FBQztBQUM5RCxNQUFNLDJCQUEyQixHQUFHLHlCQUF5QixDQUFDO0FBQzlELE1BQU0seUJBQXlCLEdBQUcseUJBQXlCLENBQUM7QUFDNUQsTUFBTSx3QkFBd0IsR0FBRyw4QkFBOEIsQ0FBQztBQUNoRSxNQUFNLHlCQUF5QixHQUFHLDRCQUE0QixDQUFDO0FBRS9EOztHQUVHO0FBRUgsTUFBTSxPQUFPLHFCQUFxQjtJQUdoQyxZQUFvQixlQUFpQztRQUFqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBa0I7UUFDbkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQUVNLHFCQUFxQixDQUMxQixnQkFBd0IsRUFDeEIsY0FBOEIsRUFDOUIsWUFBOEM7UUFFOUMsY0FBYzthQUNYLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQzthQUN0QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7UUFFMUUsY0FBYzthQUNYLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQzthQUN6QixTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsMEJBQTBCLENBQUMs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SSxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQzVCLFlBQVksR0FBRyxNQUFNLENBQUM7WUFDeEIsQ0FBQztRQUNILENBQUM7UUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUM3QyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUUsQ0FBQztnQkFDNUQsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssWUFBWSxFQUFFLENBQUM7Z0JBQ2hDLE1BQU07WUFDUixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzs4R0E3R1UscUJBQXFCO2tIQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBRGpDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBFbGVtZW50UmVmLFxuICBJbmplY3RhYmxlLFxuICBSZW5kZXJlcjIsXG4gIFJlbmRlcmVyRmFjdG9yeTIsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBEcmFndWxhU2VydmljZSB9IGZyb20gJ25nMi1kcmFndWxhJztcblxuY29uc3QgR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MgPSAnc2t5LWdyaWQtaGVhZGVyLWRyYWdnaW5nJztcbmNvbnN0IEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtaGVhZGVyLWxvY2tlZCc7XG5jb25zdCBHUklEX0hFQURFUl9SRVNJWkVfSEFORExFID0gJy5za3ktZ3JpZC1yZXNpemUtaGFuZGxlJztcbmNvbnN0IEdSSURfUk9XX0RFTEVURV9TRUxFQ1RPUiA9ICcuc2t5LWdyaWQtcm93LWRlbGV0ZS1oZWFkaW5nJztcbmNvbnN0IEdSSURfTVVMVElTRUxFQ1RfU0VMRUNUT1IgPSAnLnNreS1ncmlkLW11bHRpc2VsZWN0LWNlbGwnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXJGYWN0b3J5OiBSZW5kZXJlckZhY3RvcnkyKSB7XG4gICAgdGhpcy5yZW5kZXJlciA9IHRoaXMucmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0aWFsaXplRHJhZ0FuZERyb3AoXG4gICAgZHJhZ3VsYUdyb3VwTmFtZTogc3RyaW5nLFxuICAgIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcbiAgICBkcm9wQ2FsbGJhY2s6IChuZXdDb2x1bW5JZHM6IHN0cmluZ1tdKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICBkcmFndWxhU2VydmljZVxuICAgICAgLmRyYWcoZHJhZ3VsYUdyb3VwTmFtZSlcbiAgICAgIC5zdWJzY3JpYmUoKGFyZ3MpID0+IGFyZ3MuZWwuY2xhc3NMaXN0LmFkZChHUklEX0hFQURFUl9EUkFHR0lOR19DTEFTUykpO1xuXG4gICAgZHJhZ3VsYVNlcnZpY2VcbiAgICAgIC5kcmFnZW5kKGRyYWd1bGFHcm91cE5hbWUpXG4gICAgICAuc3Vic2NyaWJlKChhcmdzKSA9PlxuICAgICAgICBhcmdzLmVsLmNsYXNzTGlzdC5yZW1vdmUoR1JJRF9IRUFERVJfRFJBR0dJTkdfQ0xBU1MpLFxuICAgICAgKTtcblxuICAgIGRyYWd1bGFTZXJ2aWNlLmRyb3AoZHJhZ3VsYUdyb3VwTmFtZSkuc3Vic2NyaWJlKChhcmdzKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5JZHM6IHN0cmluZ1tdID0gW107XG4gICAgICBjb25zdCBub2RlcyA9IEFycmF5LmZyb208SFRNTEVsZW1lbnQ+KFxuICAgICAgICBhcmdzLnRhcmdldC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgIGB0aDpub3QoJHtHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SfSk6bm90KCR7R1JJRF9ST1dfREVMRVRFX1NFTEVDVE9SfSlgLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgZWwgb2Ygbm9kZXMpIHtcbiAgICAgICAgY29uc3QgaWQgPSBlbC5nZXRBdHRyaWJ1dGUoJ3NreS1jbXAtaWQnKTtcbiAgICAgICAgY29sdW1uSWRzLnB1c2goaWQpO1xuICAgICAgfVxuICAgICAgZHJvcENhbGxiYWNrKGNvbHVtbklkcyk7XG4gICAgfSk7XG5cbiAgICBkcmFndWxhU2VydmljZS5jcmVhdGVHcm91cChkcmFndWxhR3JvdXBOYW1lLCB7XG4gICAgICBtb3ZlczogKGVsOiBIVE1MRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCwgaGFuZGxlOiBIVE1MRWxlbWVudCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5zOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PiA9XG4gICAgICAgICAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoIGRpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoaGFuZGxlLCBjb2x1bW5zKTtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICFlbC5xdWVyeVNlbGVjdG9yKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICBoYW5kbGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX0hFQURFUl9SRVNJWkVfSEFORExFKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX01VTFRJU0VMRUNUX1NFTEVDVE9SKSAmJlxuICAgICAgICAgICFoYW5kbGUubWF0Y2hlcyhHUklEX1JPV19ERUxFVEVfU0VMRUNUT1IpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYWNjZXB0czogKFxuICAgICAgICBlbDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHRhcmdldDogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNvdXJjZTogSFRNTEVsZW1lbnQsXG4gICAgICAgIHNpYmxpbmc6IEhUTUxFbGVtZW50LFxuICAgICAgKSA9PiB7XG4gICAgICAgIGlmIChzaWJsaW5nID09PSB1bmRlZmluZWQgfHwgIXNpYmxpbmcpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+ID1cbiAgICAgICAgICBzb3VyY2UucXVlcnlTZWxlY3RvckFsbCgndGggZGl2Jyk7XG4gICAgICAgIGNvbnN0IHNpYmxpbmdEaXYgPSBzaWJsaW5nLnF1ZXJ5U2VsZWN0b3IoJ2RpdicpO1xuICAgICAgICBjb25zdCBpc0xlZnRPZkxvY2tlZCA9IHRoaXMuaXNMZWZ0T2ZMb2NrZWQoc2libGluZ0RpdiwgY29sdW1ucyk7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX0xPQ0tFRF9TRUxFQ1RPUikgJiZcbiAgICAgICAgICAhc2libGluZy5tYXRjaGVzKEdSSURfSEVBREVSX1JFU0laRV9IQU5ETEUpICYmXG4gICAgICAgICAgIWlzTGVmdE9mTG9ja2VkXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0hlaWdodChlbDogRWxlbWVudFJlZiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIChcbiAgICAgIGVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgndGJvZHkgdHInKVtpbmRleF0uc2Nyb2xsSGVpZ2h0ICsgJ3B4J1xuICAgICk7XG4gIH1cblxuICBwdWJsaWMgc2V0U3R5bGUoZWw6IEVsZW1lbnRSZWYsIHN0eWxlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAoZWwpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoZWwubmF0aXZlRWxlbWVudCwgc3R5bGUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGlzTGVmdE9mTG9ja2VkKFxuICAgIGhhbmRsZTogSFRNTEVsZW1lbnQsXG4gICAgY29sdW1uczogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4sXG4gICk6IGJvb2xlYW4ge1xuICAgIGxldCBzb3VyY2VDb2x1bW4gPSBoYW5kbGU7XG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgQXJyYXkuZnJvbShjb2x1bW5zKSkge1xuICAgICAgaWYgKGNvbHVtbi5jb250YWlucyhoYW5kbGUpKSB7XG4gICAgICAgIHNvdXJjZUNvbHVtbiA9IGNvbHVtbjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gY29sdW1ucy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGNvbHVtbnNbaV0uY2xhc3NMaXN0LmNvbnRhaW5zKCdza3ktZ3JpZC1oZWFkZXItbG9ja2VkJykpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb2x1bW5zW2ldID09PSBzb3VyY2VDb2x1bW4pIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iXX0=","/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridMessageType;\n(function (SkyGridMessageType) {\n /**\n * Selects the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"SelectAll\"] = 0] = \"SelectAll\";\n /**\n * Clears the multiselect checkboxes for all rows in the grid.\n */\n SkyGridMessageType[SkyGridMessageType[\"ClearAll\"] = 1] = \"ClearAll\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"PromptDeleteRow\"] = 2] = \"PromptDeleteRow\";\n /**\n * @internal\n */\n SkyGridMessageType[SkyGridMessageType[\"AbortDeleteRow\"] = 3] = \"AbortDeleteRow\";\n})(SkyGridMessageType || (SkyGridMessageType = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1tZXNzYWdlLXR5cGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvdHlwZXMvZ3JpZC1tZXNzYWdlLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxrQkFvQlg7QUFwQkQsV0FBWSxrQkFBa0I7SUFDNUI7O09BRUc7SUFDSCxxRUFBYSxDQUFBO0lBRWI7O09BRUc7SUFDSCxtRUFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCxpRkFBbUIsQ0FBQTtJQUVuQjs7T0FFRztJQUNILCtFQUFrQixDQUFBO0FBQ3BCLENBQUMsRUFwQlcsa0JBQWtCLEtBQWxCLGtCQUFrQixRQW9CN0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZE1lc3NhZ2VUeXBlIHtcbiAgLyoqXG4gICAqIFNlbGVjdHMgdGhlIG11bHRpc2VsZWN0IGNoZWNrYm94ZXMgZm9yIGFsbCByb3dzIGluIHRoZSBncmlkLlxuICAgKi9cbiAgU2VsZWN0QWxsID0gMCxcblxuICAvKipcbiAgICogQ2xlYXJzIHRoZSBtdWx0aXNlbGVjdCBjaGVja2JveGVzIGZvciBhbGwgcm93cyBpbiB0aGUgZ3JpZC5cbiAgICovXG4gIENsZWFyQWxsID0gMSxcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBQcm9tcHREZWxldGVSb3cgPSAyLFxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEFib3J0RGVsZXRlUm93ID0gMyxcbn1cbiJdfQ==","/**\n * @internal\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport var SkyGridSelectedRowsSource;\n(function (SkyGridSelectedRowsSource) {\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"CheckboxChange\"] = 0] = \"CheckboxChange\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"ClearAll\"] = 1] = \"ClearAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"RowClick\"] = 2] = \"RowClick\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectAll\"] = 3] = \"SelectAll\";\n SkyGridSelectedRowsSource[SkyGridSelectedRowsSource[\"SelectedRowIdsChange\"] = 4] = \"SelectedRowIdsChange\";\n})(SkyGridSelectedRowsSource || (SkyGridSelectedRowsSource = {}));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1zZWxlY3RlZC1yb3dzLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29tcG9uZW50cy9ncmlkcy9zcmMvbGliL21vZHVsZXMvZ3JpZC90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUNILE1BQU0sQ0FBTixJQUFZLHlCQU1YO0FBTkQsV0FBWSx5QkFBeUI7SUFDbkMsNkZBQWMsQ0FBQTtJQUNkLGlGQUFRLENBQUE7SUFDUixpRkFBUSxDQUFBO0lBQ1IsbUZBQVMsQ0FBQTtJQUNULHlHQUFvQixDQUFBO0FBQ3RCLENBQUMsRUFOVyx5QkFBeUIsS0FBekIseUJBQXlCLFFBTXBDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAaW50ZXJuYWxcbiAqIEBkZXByZWNhdGVkIGBTa3lHcmlkQ29tcG9uZW50YCBhbmQgaXRzIGZlYXR1cmVzIGFyZSBkZXByZWNhdGVkLiBXZSByZWNvbW1lbmQgdXNpbmcgdGhlIGRhdGEgZ3JpZCBpbnN0ZWFkLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9kYXRhLWdyaWRcbiAqL1xuZXhwb3J0IGVudW0gU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZSB7XG4gIENoZWNrYm94Q2hhbmdlLFxuICBDbGVhckFsbCxcbiAgUm93Q2xpY2ssXG4gIFNlbGVjdEFsbCxcbiAgU2VsZWN0ZWRSb3dJZHNDaGFuZ2UsXG59XG4iXX0=","import { ChangeDetectionStrategy, Component, ContentChildren, EnvironmentInjector, EventEmitter, HostListener, Input, Output, TemplateRef, ViewChild, ViewChildren, inject, } from '@angular/core';\nimport { SkyAffixAutoFitContext, } from '@skyux/core';\nimport { ListItemModel, } from '@skyux/list-builder-common';\nimport { DragulaService } from 'ng2-dragula';\nimport { BehaviorSubject, Subject, fromEvent, merge, } from 'rxjs';\nimport { distinctUntilChanged, map, take, takeUntil, takeWhile, } from 'rxjs/operators';\nimport { SkyGridAdapterService } from './grid-adapter.service';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridColumnModel } from './grid-column.model';\nimport { SkyGridMessageType } from './types/grid-message-type';\nimport { SkyGridSelectedRowsSource } from './types/grid-selected-rows-source';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@skyux/core\";\nimport * as i2 from \"ng2-dragula\";\nimport * as i3 from \"./grid-adapter.service\";\nimport * as i4 from \"@angular/common\";\nimport * as i5 from \"@angular/forms\";\nimport * as i6 from \"@skyux/forms\";\nimport * as i7 from \"@skyux/help-inline\";\nimport * as i8 from \"@skyux/icon\";\nimport * as i9 from \"@skyux/layout\";\nimport * as i10 from \"@skyux/popovers\";\nimport * as i11 from \"@skyux/indicators\";\nimport * as i12 from \"./grid-cell.component\";\nimport * as i13 from \"@skyux/i18n\";\nlet nextId = 0;\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridComponent {\n /**\n * Columns and column properties for the grid.\n */\n set columns(newColumns) {\n const oldColumns = this.columns;\n this._columns = newColumns;\n if (oldColumns) {\n this.transferColumnWidths(oldColumns, this.columns);\n this.isResized = false;\n this.setDisplayedColumns(true);\n }\n this.changeDetector.markForCheck();\n }\n get columns() {\n return this._columns;\n }\n /**\n * The columns to display in the grid based on the `id` or `field` properties\n * of the columns. If no columns are specified, then the grid displays all columns.\n */\n set selectedColumnIds(value) {\n const currentIds = this._selectedColumnIds;\n this._selectedColumnIds = value;\n if (this.columns) {\n this.setDisplayedColumns();\n }\n // Ensure that the ids have changed.\n if (!currentIds || !value || !this.arraysEqual(value, currentIds)) {\n // This variable ensures that we do not set user config options or fire the change event\n // on the first time that the columns are set up\n if (this.selectedColumnIdsSet) {\n this.setUserConfig({\n selectedColumnIds: value,\n });\n this.selectedColumnIdsChange.emit(this._selectedColumnIds);\n if (this.isResized) {\n this.resetTableWidth();\n }\n }\n }\n this.selectedColumnIdsSet = true;\n }\n get selectedColumnIds() {\n return this._selectedColumnIds;\n }\n /**\n * The set of IDs for the rows to select in a multiselect grid.\n * The IDs match the `id` properties of the `data` objects.\n * Rows with IDs that are not included are de-selected in the grid.\n */\n set selectedRowIds(value) {\n if (value) {\n this._selectedRowIds = value;\n this.applySelectedRows();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectedRowIdsChange);\n }\n }\n get selectedRowIds() {\n return this._selectedRowIds;\n }\n get tableWidth() {\n return this.tableElementRef.nativeElement.offsetWidth;\n }\n #environmentInjector;\n constructor(affixService, changeDetector, dragulaService, gridAdapter, overlayService, skyWindow, uiConfigService, logger) {\n this.affixService = affixService;\n this.changeDetector = changeDetector;\n this.dragulaService = dragulaService;\n this.gridAdapter = gridAdapter;\n this.overlayService = overlayService;\n this.skyWindow = skyWindow;\n this.uiConfigService = uiConfigService;\n /**\n * Whether to enable the multiselect feature to display a column of\n * checkboxes on the left side of the grid. You can specify a unique ID with\n * the `multiselectRowId` property, but multiselect defaults to the `id` property on\n * the `data` object.\n * @default false\n */\n this.enableMultiselect = false;\n /**\n * How the grid fits to its parent. The valid options are `width`,\n * which fits the grid to the parent's full width, and `scroll`, which allows the grid\n * to exceed the parent's width. If the grid does not have enough columns to fill\n * the parent's width, it always stretches to the parent's full width.\n * @default \"width\"\n */\n this.fit = 'width';\n /**\n * Whether to display a toolbar with the grid.\n */\n this.hasToolbar = false;\n /**\n * The observable to send commands to the grid.\n */\n this.messageStream = new Subject();\n /**\n * Fires when the width of a column changes.\n */\n this.columnWidthChange = new EventEmitter();\n /**\n * Fires when the selection of multiselect checkboxes changes.\n * Emits an array of IDs for the selected rows based on the `multiselectRowId` property\n * that the consumer provides.\n */\n this.multiselectSelectionChange = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteCancel = new EventEmitter();\n /**\n * @internal\n */\n this.rowDeleteConfirm = new EventEmitter();\n /**\n * Fires when the columns to display in the grid change or when the order of the columns changes.\n * The event emits an array of IDs for the displayed columns that reflects the column order.\n */\n this.selectedColumnIdsChange = new EventEmitter();\n /**\n * Fires when the active sort field changes.\n */\n this.sortFieldChange = new EventEmitter();\n this.columnResizeStep = 10;\n this.gridId = ++nextId;\n this.rowDeleteConfigs = [];\n this.maxColWidth = 9999; // This is an arbitrary number, as the input range picker won't work without a value.\n this.minColWidth = 50;\n this.showResizeBar = false;\n this.showTopScroll = false;\n this.isDraggingResizeHandle = false;\n this.isResized = false;\n this.ngUnsubscribe = new Subject();\n this.rowDeleteContents = {};\n this.subscriptions = [];\n this.scrollTriggered = false;\n this.selectedColumnIdsSet = false;\n this.#environmentInjector = inject(EnvironmentInjector);\n logger.deprecated('SkyGridComponent', {\n deprecationMajorVersion: 6,\n moreInfoUrl: 'https://developer.blackbaud.com/skyux/components/data-grid',\n replacementRecommendation: 'Use data grid instead.',\n });\n this.displayedColumns = new Array();\n this.items = new Array();\n this.currentSortField = new BehaviorSubject({\n fieldSelector: '',\n descending: false,\n });\n this.dragulaGroupName = `sky-grids-group-${this.gridId}`;\n }\n ngOnInit() {\n this.messageStream\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe((message) => {\n this.handleIncomingMessages(message);\n });\n }\n ngAfterContentInit() {\n if (this.settingsKey) {\n this.applyUserConfig().then(() => {\n this.initColumns();\n });\n }\n else {\n this.initColumns();\n }\n // Setup column drag-and-drop.\n this.gridAdapter.initializeDragAndDrop(this.dragulaGroupName, this.dragulaService, (selectedColumnIds) => {\n this.onHeaderDrop(selectedColumnIds);\n });\n this.applySelectedRows();\n }\n ngAfterViewInit() {\n this.checkUserColumnWidthsForScroll();\n }\n ngOnChanges(changes) {\n if (changes['columns'] && this.columns) {\n if (this.selectedColumnIds) {\n this.selectedColumnIds = this.selectedColumnIds.filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n });\n }\n this.setDisplayedColumns(true);\n }\n if (changes['data'] && this.data) {\n this.transformData();\n // This set timeout is necessary to ensure the data has rendered in the grid\n setTimeout(() => {\n // This cleans up any lingering row deletes for items that have been removed.\n Object.keys(this.rowDeleteContents).forEach((id) => {\n if (!this.data.find((item) => item.id === id)) {\n this.destroyRowDelete(id);\n }\n else {\n // The rows re-render thus messing up the affixers. We must reaffix them so that things\n // continue to render correctly.\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + id + '\"]');\n this.rowDeleteContents[id].affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n }\n });\n this.checkUserColumnWidthsForScroll();\n });\n }\n if (changes['sortField']) {\n this.setSortHeaders();\n }\n }\n ngOnDestroy() {\n this.subscriptions.forEach((subscription) => {\n subscription.unsubscribe();\n });\n this.multiselectSelectionChange.complete();\n this.ngUnsubscribe.next();\n this.ngUnsubscribe.complete();\n Object.keys(this.rowDeleteContents).forEach((id) => {\n this.destroyRowDelete(id);\n });\n this.dragulaService.destroy(this.dragulaGroupName);\n }\n onWindowResize() {\n this.checkUserColumnWidthsForScroll();\n }\n getTopScrollWidth() {\n return this.tableElementRef.nativeElement.scrollWidth;\n }\n getTableClassNames() {\n const classNames = [];\n if (this.fit !== 'scroll') {\n classNames.push('sky-grid-fit');\n }\n if (this.hasToolbar) {\n classNames.push('sky-grid-has-toolbar');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getTableHeaderClassNames(column) {\n const classNames = [];\n if (column && column.locked) {\n classNames.push('sky-grid-header-locked');\n }\n return this.addDelimiter(classNames, ' ');\n }\n getCaretIconNames(column) {\n const iconNames = [];\n this.getSortDirection(column.field).subscribe((sortDir) => {\n if (sortDir === 'asc') {\n iconNames.push('chevron-up');\n }\n if (sortDir === 'desc') {\n iconNames.push('chevron-down');\n }\n });\n return this.addDelimiter(iconNames, ' ');\n }\n onKeydown(event, column) {\n const key = event.key.toLowerCase();\n if (key === 'enter' || key === ' ') {\n this.sortByColumn(column);\n }\n }\n sortByColumn(column) {\n if (!this.isDraggingResizeHandle && column.isSortable) {\n this.currentSortField\n .pipe(take(1), map((field) => {\n let selector = {\n fieldSelector: column.field,\n descending: true,\n };\n if (field &&\n field.fieldSelector === column.field &&\n field.descending) {\n selector = {\n fieldSelector: column.field,\n descending: false,\n };\n }\n this.sortFieldChange.emit(selector);\n this.currentSortField.next(selector);\n }))\n .subscribe();\n }\n }\n getSortDirection(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField\n ? field.descending\n ? 'desc'\n : 'asc'\n : undefined;\n }));\n }\n getAriaSortDirection(column) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === column.field\n ? field.descending\n ? 'descending'\n : 'ascending'\n : column.isSortable\n ? 'none'\n : undefined;\n }));\n }\n getCaretVisibility(columnField) {\n return this.currentSortField.pipe(distinctUntilChanged(), map((field) => {\n return field.fieldSelector === columnField ? 'visible' : 'hidden';\n }));\n }\n getHelpInlineClass(columnField) {\n return this.getCaretVisibility(columnField).pipe(map((visibility) => {\n return visibility === 'hidden';\n }));\n }\n onMultiselectCheckboxChange() {\n this.emitSelectedRows(SkyGridSelectedRowsSource.CheckboxChange);\n }\n updateColumnHeading(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.heading = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateInlineHelpPopover(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.inlineHelpPopover = change.value;\n this.changeDetector.markForCheck();\n }\n }\n updateColumnDescription(change) {\n const foundColumnModel = this.columns.find((column) => {\n return ((change.id !== undefined && change.id === column.id) ||\n (change.field !== undefined && change.field === column.field));\n });\n /* istanbul ignore else */\n if (foundColumnModel) {\n foundColumnModel.description = change.value;\n this.changeDetector.markForCheck();\n }\n }\n onResizeColumnStart(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n this.isDraggingResizeHandle = true;\n this.xPosStart = event.pageX;\n this.showResizeBar = true;\n // Show visual indicator of where mouse is dragging (resizeBar).\n this.changeDetector.detectChanges();\n this.setResizeBarPosition(event.pageX);\n event.preventDefault();\n event.stopPropagation();\n const mouseMoveEvent = fromEvent(document, 'mousemove');\n const touchMoveEvent = fromEvent(document, 'touchmove');\n merge(mouseMoveEvent, touchMoveEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((moveEvent) => {\n this.onResizeHandleMove(moveEvent);\n });\n const mouseUpEvent = fromEvent(document, 'mouseup');\n const touchEndEvent = fromEvent(document, 'touchend');\n merge(mouseUpEvent, touchEndEvent)\n .pipe(takeWhile(() => {\n return this.isDraggingResizeHandle;\n }))\n .subscribe((endEvent) => {\n this.onResizeHandleRelease(endEvent);\n });\n }\n onKeydownResizeCol(event) {\n // If this table hasn't been resized, initialize all the resize widths.\n if (!this.isResized) {\n this.initColumnWidths();\n this.isResized = true;\n }\n this.initializeResizeColumn(event);\n }\n onInputChangeResizeCol(event) {\n const input = event.target;\n const newValue = Number(input.value);\n const deltaX = newValue - this.startColumnWidth;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newValue, deltaX);\n const left = input.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleMove(event) {\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n if (newColWidth <= this.minColWidth) {\n event.stopPropagation();\n return;\n }\n const max = this.getMaxRangeByIndex(this.activeResizeColumnIndex);\n if (this.fit === 'width' && newColWidth > max) {\n event.stopPropagation();\n return;\n }\n this.setResizeBarPosition(event.pageX);\n }\n onResizeHandleBlur() {\n this.showResizeBar = false;\n }\n onResizeHandleFocus(event) {\n this.showResizeBar = true;\n this.changeDetector.detectChanges();\n const target = event.target;\n const left = target.getBoundingClientRect().left;\n this.setResizeBarPosition(left);\n }\n onResizeHandleRelease(event) {\n this.showResizeBar = false;\n const deltaX = event.pageX - this.xPosStart;\n const newColWidth = this.startColumnWidth + deltaX;\n this.resizeColumnByIndex(this.activeResizeColumnIndex, newColWidth, deltaX);\n this.isDraggingResizeHandle = false;\n this.activeResizeColumnIndex = undefined;\n event.stopPropagation();\n this.changeDetector.markForCheck();\n }\n onRowClick(event, selectedItem) {\n /* istanbul ignore else */\n if (this.enableMultiselect) {\n if (event.target === event.currentTarget ||\n !this.isInteractiveElement(event)) {\n selectedItem.isSelected = !selectedItem.isSelected;\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.RowClick);\n }\n }\n }\n isRowHighlighted(id) {\n if (this.rowHighlightedId) {\n return id === this.rowHighlightedId;\n }\n return false;\n }\n getRowHeight(index) {\n return this.gridAdapter.getRowHeight(this.tableElementRef, index);\n }\n cancelRowDelete(id) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== id);\n this.rowDeleteCancel.emit({ id: id });\n this.destroyRowDelete(id);\n }\n confirmRowDelete(id) {\n this.rowDeleteConfigs.find((config) => config.id === id).pending = true;\n this.rowDeleteConfirm.emit({ id: id });\n }\n getRowDeleteItem(id) {\n return this.rowDeleteConfigs.find((rowDelete) => rowDelete.id === id);\n }\n // Prevent touch devices from inadvertently scrolling grid while dragging columns.\n onTouchMove(event) {\n event.preventDefault();\n }\n onTopScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.tableContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.tableContainerElementRef.nativeElement.scrollLeft =\n this.topScrollContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n onGridScroll(event) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.topScrollContainerElementRef) {\n if (this.scrollTriggered) {\n this.scrollTriggered = false;\n this.topScrollContainerElementRef.nativeElement.scrollLeft =\n this.tableContainerElementRef.nativeElement.scrollLeft;\n }\n else {\n this.scrollTriggered = true;\n }\n }\n }\n checkUserColumnWidthsForScroll() {\n if (!this.showTopScroll &&\n this.columnElementRefs &&\n this.columnElementRefs.length > 0) {\n let columnsWidthTotal = 0;\n const windowSize = this.skyWindow.nativeWindow.innerWidth;\n this.columnElementRefs.forEach((col) => {\n if (!this.showTopScroll) {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n const width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n columnsWidthTotal = columnsWidthTotal + width;\n if (columnsWidthTotal > windowSize) {\n this.showTopScroll = true;\n setTimeout(() => {\n this.changeDetector.markForCheck();\n });\n }\n }\n });\n }\n }\n multiselectSelectAll() {\n for (const item of this.items) {\n item.isSelected = true;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.SelectAll);\n }\n multiselectClearAll() {\n for (const item of this.items) {\n item.isSelected = false;\n }\n this.changeDetector.markForCheck();\n this.emitSelectedRows(SkyGridSelectedRowsSource.ClearAll);\n }\n handleIncomingMessages(message) {\n switch (message.type) {\n case SkyGridMessageType.SelectAll:\n this.multiselectSelectAll();\n break;\n case SkyGridMessageType.ClearAll:\n this.multiselectClearAll();\n break;\n case SkyGridMessageType.PromptDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.promptDeleteRow) {\n const existingConfig = this.rowDeleteConfigs.find((config) => config.id === message.data.promptDeleteRow.id);\n if (existingConfig) {\n existingConfig.pending = false;\n }\n else {\n this.rowDeleteConfigs.push({\n id: message.data.promptDeleteRow.id,\n pending: false,\n });\n const overlay = this.overlayService.create({\n enableScroll: true,\n showBackdrop: false,\n closeOnNavigation: true,\n enableClose: false,\n enablePointerEvents: true,\n environmentInjector: this.#environmentInjector,\n });\n overlay.attachTemplate(this.inlineDeleteTemplateRef, {\n $implicit: this.data.find((item) => item.id === message.data.promptDeleteRow.id),\n });\n /**\n * We are manually setting the z-index here because overlays will always be on top of\n * the omnibar. This manual setting is 1 less than the omnibar's z-index of 1000. We\n * discussed changing the overlay service to allow for this but decided against that\n * change at this time due to its niche nature.\n */\n overlay.componentRef.instance.zIndex = '999';\n setTimeout(() => {\n const inlineDeleteRef = this.inlineDeleteRefs\n .toArray()\n .find((elRef) => {\n return (elRef.nativeElement.id ===\n 'row-delete-ref-' + message.data.promptDeleteRow.id);\n });\n const affixer = this.affixService.createAffixer(inlineDeleteRef);\n const rowElement = this.tableElementRef.nativeElement.querySelector('[sky-cmp-id=\"' + message.data.promptDeleteRow.id + '\"]');\n affixer.affixTo(rowElement, {\n autoFitContext: SkyAffixAutoFitContext.Viewport,\n isSticky: true,\n placement: 'above',\n verticalAlignment: 'top',\n horizontalAlignment: 'left',\n enableAutoFit: false,\n });\n this.rowDeleteContents[message.data.promptDeleteRow.id] = {\n affixer: affixer,\n overlay: overlay,\n };\n });\n }\n }\n break;\n case SkyGridMessageType.AbortDeleteRow:\n /* sanity check */\n /* istanbul ignore else */\n if (message.data && message.data.abortDeleteRow) {\n this.rowDeleteConfigs = this.rowDeleteConfigs.filter((config) => config.id !== message.data.abortDeleteRow.id);\n this.destroyRowDelete(message.data.abortDeleteRow.id);\n }\n break;\n }\n this.changeDetector.markForCheck();\n }\n onHeaderDrop(newColumnIds) {\n // update selected columnIds\n this.selectedColumnIdsSet = true;\n this.selectedColumnIds = newColumnIds;\n // mark for check because we are using ChangeDetectionStrategy.onPush\n this.changeDetector.markForCheck();\n }\n setDisplayedColumns(respectHidden = false) {\n /* sanity check */\n /* istanbul ignore else */\n if (this.columns) {\n if (this.selectedColumnIds !== undefined) {\n // setup displayed columns\n this.displayedColumns = this.selectedColumnIds\n .filter((columnId) => {\n return this.columns.find((column) => column.id === columnId);\n })\n .map((columnId) => {\n return this.columns.filter((column) => column.id === columnId)[0];\n });\n }\n else if (respectHidden) {\n this.displayedColumns = this.columns.filter((column) => {\n return !column.hidden;\n });\n }\n else {\n this.displayedColumns = this.columns;\n }\n }\n }\n transformData() {\n // Transform data into object with id and data properties\n if (this.data &&\n this.data.length > 0 &&\n this.data[0].id &&\n !this.data[0].data) {\n if (this.multiselectRowId) {\n this.items = this.getGridDataWithSelectedRows();\n }\n else {\n this.items = this.data.map((item) => new ListItemModel(item.id, item));\n }\n }\n else {\n this.items = this.data;\n }\n }\n getGridDataWithSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return this.data.map((item) => {\n let checked;\n if (Object.prototype.hasOwnProperty.call(item, this.multiselectRowId)) {\n checked = selectedRows.indexOf(item[this.multiselectRowId]) > -1;\n }\n else {\n checked = selectedRows.indexOf(item.id) > -1;\n }\n return new ListItemModel(item.id, item, checked);\n });\n }\n applySelectedRows() {\n if (this.items && this.items.length > 0 && this.selectedRowIds) {\n for (const item of this.items) {\n item.isSelected = this.selectedRowIds.indexOf(item.id) > -1;\n }\n this.changeDetector.markForCheck();\n }\n }\n setSortHeaders() {\n this.currentSortField.next(this.sortField || { fieldSelector: '', descending: false });\n }\n getColumnsFromComponent() {\n this.columns = this.columnComponents.map((columnComponent) => {\n return new SkyGridColumnModel(columnComponent.template, columnComponent);\n });\n }\n updateColumns() {\n this.getColumnsFromComponent();\n // This set timeout is necessary to ensure the columns have rendered in the grid\n setTimeout(() => {\n this.checkUserColumnWidthsForScroll();\n });\n }\n resizeColumnByIndex(columnIndex, newColWidth, deltaX) {\n const column = this.getColumnModelByIndex(columnIndex);\n // Prevent accidental shrinkage below minimum width.\n if (newColWidth <= this.minColWidth) {\n deltaX = deltaX + this.minColWidth - newColWidth;\n newColWidth = this.minColWidth;\n }\n // fit=width adds/removes width from the last column\n // fit=scroll adds/removes width from the table\n if (this.fit === 'width') {\n const lastColumn = this.getLastDisplayedColumn();\n // Prevent accidental growth that would bump last column off screen.\n const max = this.getMaxRangeByIndex(columnIndex);\n if (newColWidth > max) {\n newColWidth = max;\n deltaX = max - this.startColumnWidth;\n }\n column.width = newColWidth;\n lastColumn.width = lastColumn.width - deltaX;\n this.updateMaxRange();\n }\n else {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth + deltaX}px`);\n column.width = newColWidth;\n }\n this.changeDetector.detectChanges();\n this.columnWidthChange.emit(this.getColumnWidthModelChange());\n }\n initColumnWidths() {\n // Establish table width.\n this.showTopScroll = true;\n // Set column widths based on the width initially given by the browser.\n // computedWidth prevents accidental overflow for browsers with sub-pixel widths.\n this.columnElementRefs.forEach((col, index) => {\n const computedWidth = parseFloat(window.getComputedStyle(col.nativeElement).width);\n const offsetWidth = col.nativeElement.offsetWidth;\n /* istanbul ignore next */\n this.getColumnModelByIndex(index).width = Math.max(computedWidth || offsetWidth, this.minColWidth);\n });\n // 'scroll' tables should be allowed to expand outside of their constraints.\n if (this.fit === 'scroll') {\n this.gridAdapter.setStyle(this.tableElementRef, 'min-width', 'auto');\n }\n // Update max limits for input ranges.\n if (this.fit === 'width') {\n this.updateMaxRange();\n }\n this.changeDetector.detectChanges();\n }\n transferColumnWidths(oldColumns, newColumns) {\n /* sanity check */\n /* istanbul ignore else */\n if (oldColumns && newColumns) {\n for (const oldColumn of oldColumns) {\n if (oldColumn.width) {\n const matchingColumn = newColumns.find((newColumn) => oldColumn.id === newColumn.id);\n if (matchingColumn && !matchingColumn.width) {\n matchingColumn.width = oldColumn.width;\n }\n }\n }\n }\n this.changeDetector.markForCheck();\n }\n getColumnWidthModelChange() {\n const columnWidthModelChange = new Array();\n this.columns.forEach((column) => {\n columnWidthModelChange.push({\n id: column.id,\n field: column.field,\n width: column.width,\n });\n });\n return columnWidthModelChange;\n }\n updateMaxRange() {\n const leftoverWidth = this.getLastDisplayedColumn().width - this.minColWidth;\n this.displayedColumns.forEach((column, index) => {\n const newMaxRange = column.width + leftoverWidth;\n const rangeInput = this.getRangeInputByIndex(index);\n rangeInput.nativeElement.max = newMaxRange;\n rangeInput.nativeElement.setAttribute('aria-valuemax', newMaxRange);\n });\n }\n initializeResizeColumn(event) {\n const clickTarget = event.target;\n this.activeResizeColumnIndex = clickTarget.getAttribute('sky-cmp-index');\n const column = this.getColumnModelByIndex(this.activeResizeColumnIndex);\n this.startColumnWidth = column.width;\n }\n resetTableWidth() {\n this.skyWindow.nativeWindow.setTimeout(() => {\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `auto`);\n this.changeDetector.detectChanges();\n this.gridAdapter.setStyle(this.tableElementRef, 'width', `${this.tableWidth}px`);\n this.changeDetector.detectChanges();\n });\n }\n getRangeInputByIndex(index) {\n return this.columnRangeInputElementRefs.find((input) => input.nativeElement.getAttribute('sky-cmp-index') === index.toString());\n }\n getColumnModelByIndex(index) {\n return this.displayedColumns[Number(index)];\n }\n getMaxRangeByIndex(index) {\n const columnElementRef = this.columnElementRefs.find((th) => th.nativeElement.getAttribute('sky-cmp-index') === index);\n const rangeInput = columnElementRef.nativeElement.querySelector('.sky-grid-column-input-aria-only');\n return Number(rangeInput.max);\n }\n getLastDisplayedColumn() {\n return this.getColumnModelByIndex(this.displayedColumns.length - 1);\n }\n addDelimiter(text, delimiter) {\n return text.filter((val) => val).join(delimiter);\n }\n destroyRowDelete(id) {\n const rowDeleteContents = this.rowDeleteContents[id];\n /* istanbul ignore else */\n if (rowDeleteContents) {\n rowDeleteContents.affixer.destroy();\n this.overlayService.close(rowDeleteContents.overlay);\n delete this.rowDeleteContents[id];\n }\n }\n emitSelectedRows(source) {\n const selectedRows = {\n selectedRowIds: this.getSelectedRows(),\n source: source,\n };\n this.multiselectSelectionChange.emit(selectedRows);\n }\n getSelectedRows() {\n return this.items\n .filter((item) => {\n return item.isSelected;\n })\n .map((item) => {\n if (Object.prototype.hasOwnProperty.call(item.data, this.multiselectRowId)) {\n return item.data[this.multiselectRowId];\n }\n return item.id;\n });\n }\n isInteractiveElement(event) {\n const interactiveElSelectors = `\n a,\n button,\n input,\n label,\n option,\n select,\n textarea,\n details,\n dialog,\n menu,\n menuitem,\n summary`;\n return event.target.closest(interactiveElSelectors);\n }\n setResizeBarPosition(xPosition) {\n const parentScroll = this.tableContainerElementRef.nativeElement.scrollLeft;\n const resizeBarX = xPosition -\n this.tableElementRef.nativeElement.getBoundingClientRect().left -\n parentScroll;\n this.gridAdapter.setStyle(this.resizeBar, 'left', resizeBarX + 'px');\n }\n applyUserConfig() {\n return new Promise((resolve) => {\n this.uiConfigService\n .getConfig(this.settingsKey)\n .pipe(take(1))\n .subscribe((config) => {\n /* istanbul ignore else */\n if (config && config.selectedColumnIds) {\n // Remove any columnIds that don't exist in the current data set.\n this.selectedColumnIds = config.selectedColumnIds.filter((id) => this.columns.find((column) => column.id === id));\n this.changeDetector.markForCheck();\n }\n resolve();\n }, () => {\n resolve();\n });\n });\n }\n setUserConfig(config) {\n if (!this.settingsKey) {\n return;\n }\n this.uiConfigService\n .setConfig(this.settingsKey, config)\n .pipe(takeUntil(this.ngUnsubscribe))\n .subscribe(\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n () => { }, (err) => {\n console.warn('Could not save grid settings.');\n console.warn(err);\n });\n }\n initColumns() {\n /* istanbul ignore else */\n if (this.columnComponents.length !== 0 || this.columns !== undefined) {\n /* istanbul ignore else */\n /* sanity check */\n if (this.columnComponents.length > 0) {\n this.getColumnsFromComponent();\n }\n this.transformData();\n this.setDisplayedColumns(true);\n this.changeDetector.markForCheck();\n }\n // Watch for added/removed columns:\n this.subscriptions.push(this.columnComponents.changes.subscribe(() => this.updateColumns()));\n // Watch for column heading changes:\n this.columnComponents.forEach((comp) => {\n this.subscriptions.push(comp.headingModelChanges.subscribe((change) => {\n this.updateColumnHeading(change);\n }));\n this.subscriptions.push(comp.descriptionModelChanges.subscribe((change) => {\n this.updateColumnDescription(change);\n }));\n this.subscriptions.push(comp.inlineHelpPopoverModelChanges.subscribe((change) => {\n this.updateInlineHelpPopover(change);\n }));\n });\n }\n arraysEqual(arrayA, arrayB) {\n return (arrayA.length === arrayB.length &&\n arrayA.every((value, index) => value === arrayB[index]));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridComponent, deps: [{ token: i1.SkyAffixService }, { token: i0.ChangeDetectorRef }, { token: i2.DragulaService }, { token: i3.SkyGridAdapterService }, { token: i1.SkyOverlayService }, { token: i1.SkyAppWindowRef }, { token: i1.SkyUIConfigService }, { token: i1.SkyLogService }], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.3.0\", type: SkyGridComponent, isStandalone: false, selector: \"sky-grid\", inputs: { columns: \"columns\", data: \"data\", enableMultiselect: \"enableMultiselect\", fit: \"fit\", hasToolbar: \"hasToolbar\", height: \"height\", highlightText: \"highlightText\", messageStream: \"messageStream\", multiselectRowId: \"multiselectRowId\", rowHighlightedId: \"rowHighlightedId\", selectedColumnIds: \"selectedColumnIds\", selectedRowIds: \"selectedRowIds\", settingsKey: \"settingsKey\", sortField: \"sortField\", width: \"width\" }, outputs: { columnWidthChange: \"columnWidthChange\", multiselectSelectionChange: \"multiselectSelectionChange\", rowDeleteCancel: \"rowDeleteCancel\", rowDeleteConfirm: \"rowDeleteConfirm\", selectedColumnIdsChange: \"selectedColumnIdsChange\", sortFieldChange: \"sortFieldChange\" }, host: { listeners: { \"window:resize\": \"onWindowResize()\" } }, providers: [SkyGridAdapterService], queries: [{ propertyName: \"columnComponents\", predicate: SkyGridColumnComponent }], viewQueries: [{ propertyName: \"inlineDeleteTemplateRef\", first: true, predicate: [\"inlineDeleteTemplateRef\"], descendants: true, read: TemplateRef }, { propertyName: \"tableContainerElementRef\", first: true, predicate: [\"gridContainer\"], descendants: true }, { propertyName: \"tableElementRef\", first: true, predicate: [\"gridTable\"], descendants: true }, { propertyName: \"topScrollContainerElementRef\", first: true, predicate: [\"topScrollContainer\"], descendants: true }, { propertyName: \"resizeBar\", first: true, predicate: [\"resizeBar\"], descendants: true }, { propertyName: \"columnElementRefs\", predicate: [\"gridCol\"], descendants: true }, { propertyName: \"columnRangeInputElementRefs\", predicate: [\"colSizeRange\"], descendants: true }, { propertyName: \"inlineDeleteRefs\", predicate: [\"inlineDeleteRef\"], descendants: true }], usesOnChanges: true, ngImport: i0, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"], dependencies: [{ kind: \"directive\", type: i4.NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: i4.NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: i2.DragulaDirective, selector: \"[dragula]\", inputs: [\"dragula\", \"dragulaModel\"], outputs: [\"dragulaModelChange\"] }, { kind: \"directive\", type: i5.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i5.RangeValueAccessor, selector: \"input[type=range][formControlName],input[type=range][formControl],input[type=range][ngModel]\" }, { kind: \"directive\", type: i5.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i5.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: i6.λ3, selector: \"sky-checkbox\", inputs: [\"label\", \"labelledBy\", \"id\", \"disabled\", \"tabindex\", \"name\", \"helpPopoverContent\", \"helpPopoverTitle\", \"iconName\", \"checkboxType\", \"checked\", \"indeterminate\", \"required\", \"labelText\", \"labelHidden\", \"hintText\", \"stacked\", \"helpKey\"], outputs: [\"change\", \"checkedChange\", \"disabledChange\", \"indeterminateChange\"] }, { kind: \"component\", type: i7.λ1, selector: \"sky-help-inline\", inputs: [\"ariaControls\", \"ariaExpanded\", \"ariaLabel\", \"helpKey\", \"labelledBy\", \"labelText\", \"popoverContent\", \"popoverTitle\"], outputs: [\"actionClick\"] }, { kind: \"component\", type: i8.λ1, selector: \"sky-icon\", inputs: [\"iconName\", \"variant\", \"iconSize\"] }, { kind: \"component\", type: i9.λ8, selector: \"sky-inline-delete\", inputs: [\"pending\"], outputs: [\"cancelTriggered\", \"deleteTriggered\"] }, { kind: \"directive\", type: i10.λ7, selector: \"[skyPopover]\", inputs: [\"skyPopover\", \"skyPopoverAlignment\", \"skyPopoverMessageStream\", \"skyPopoverPlacement\", \"skyPopoverTrigger\"] }, { kind: \"directive\", type: i11.SkyTextHighlightDirective, selector: \"[skyHighlight]\", inputs: [\"skyHighlight\"] }, { kind: \"component\", type: i12.SkyGridCellComponent, selector: \"sky-grid-cell\", inputs: [\"item\", \"columnId\", \"template\", \"fieldSelector\"] }, { kind: \"pipe\", type: i4.AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: i13.SkyLibResourcesPipe, name: \"skyLibResources\" }], viewProviders: [DragulaService], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridComponent, decorators: [{\n type: Component,\n args: [{ selector: 'sky-grid', viewProviders: [DragulaService], providers: [SkyGridAdapterService], changeDetection: ChangeDetectionStrategy.OnPush, standalone: false, template: \"<div class=\\\"sky-grid\\\">\\n @if (showTopScroll) {\\n <div\\n #topScrollContainer\\n class=\\\"sky-grid-top-scroll-container\\\"\\n (scroll)=\\\"onTopScroll($event)\\\"\\n >\\n <div\\n class=\\\"sky-grid-top-scroll\\\"\\n [style.width.px]=\\\"getTopScrollWidth()\\\"\\n ></div>\\n </div>\\n }\\n <div\\n #gridContainer\\n class=\\\"sky-grid-table-container\\\"\\n [style.height.px]=\\\"height\\\"\\n [style.width.px]=\\\"width\\\"\\n (scroll)=\\\"onGridScroll($event)\\\"\\n >\\n <table #gridTable class=\\\"sky-grid-table\\\" [ngClass]=\\\"getTableClassNames()\\\">\\n <thead>\\n <tr [dragula]=\\\"dragulaGroupName\\\">\\n @if (enableMultiselect) {\\n <th\\n class=\\\"sky-grid-heading sky-grid-multiselect-cell sky-grid-header-locked\\\"\\n scope=\\\"col\\\"\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <span class=\\\"screen-reader-only\\\">\\n {{ 'skyux_grid_multiselect_select_row' | skyLibResources }}\\n </span>\\n </th>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <th\\n #gridCol\\n class=\\\"sky-grid-heading sky-field-label\\\"\\n scope=\\\"col\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n [attr.aria-sort]=\\\"getAriaSortDirection(column) | async\\\"\\n [id]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n [tabIndex]=\\\"column.isSortable ? 0 : -1\\\"\\n (mouseup)=\\\"sortByColumn(column)\\\"\\n (keydown)=\\\"onKeydown($event, column)\\\"\\n (touchmove)=\\\"onTouchMove($event)\\\"\\n >\\n <div\\n class=\\\"overflow\\\"\\n [ngClass]=\\\"getTableHeaderClassNames(column)\\\"\\n [style.max-width.px]=\\\"column.width - 1\\\"\\n [style.width.px]=\\\"column.width - 1\\\"\\n >\\n @if ((getCaretVisibility(column.field) | async) === 'hidden') {\\n <span class=\\\"sky-grid-header-caret-hidden-spacing\\\"></span>\\n }\\n <!-- The no spacing here is intentional to avoid extra spaces due to these being inline elements -->\\n <span class=\\\"sky-grid-header-text\\\">{{\\n column.heading?.trim()\\n }}</span>\\n <sky-icon\\n class=\\\"sky-grid-heading-sort\\\"\\n variant=\\\"solid\\\"\\n [ngClass]=\\\"\\n 'sky-grid-heading-sort-' +\\n (getCaretVisibility(column.field) | async)\\n \\\"\\n [iconName]=\\\"getCaretIconNames(column)\\\"\\n />\\n @if (column.inlineHelpPopover) {\\n <sky-help-inline\\n [ngClass]=\\\"{\\n 'sky-grid-help-inline-sort-hidden':\\n getHelpInlineClass(column.field) | async\\n }\\\"\\n [skyPopover]=\\\"column.inlineHelpPopover\\\"\\n (keydown.enter)=\\\"$event.stopPropagation()\\\"\\n (keydown.space)=\\\"$event.stopPropagation()\\\"\\n (mousedown)=\\\"$event.stopPropagation()\\\"\\n (mouseup)=\\\"$event.stopPropagation()\\\"\\n />\\n }\\n </div>\\n @if ((fit === 'width' && !last) || fit === 'scroll') {\\n <span\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-handle\\\"\\n tabindex=\\\"-1\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n (mousedown)=\\\"onResizeColumnStart($event)\\\"\\n (touchstart)=\\\"onResizeColumnStart($event)\\\"\\n >\\n </span>\\n }\\n <input\\n #colSizeRange\\n aria-label=\\\"Width of column\\\"\\n class=\\\"sky-grid-column-input-aria-only\\\"\\n role=\\\"slider\\\"\\n type=\\\"range\\\"\\n [attr.aria-controls]=\\\"'sky-grid-' + gridId + '-column-' + i\\\"\\n [attr.aria-valuemin]=\\\"minColWidth\\\"\\n [attr.aria-valuemax]=\\\"maxColWidth\\\"\\n [attr.aria-valuenow]=\\\"column.width\\\"\\n [attr.sky-cmp-index]=\\\"i\\\"\\n [min]=\\\"minColWidth\\\"\\n [max]=\\\"maxColWidth\\\"\\n [step]=\\\"columnResizeStep\\\"\\n [(ngModel)]=\\\"column.width\\\"\\n (blur)=\\\"onResizeHandleBlur()\\\"\\n (focus)=\\\"onResizeHandleFocus($event)\\\"\\n (keydown)=\\\"onKeydownResizeCol($event)\\\"\\n (change)=\\\"onInputChangeResizeCol($event)\\\"\\n />\\n </th>\\n }\\n </tr>\\n </thead>\\n <tbody class=\\\"sky-grid-tbody\\\">\\n @for (item of items; track item; let i = $index) {\\n <tr\\n class=\\\"sky-grid-row\\\"\\n [attr.aria-current]=\\\"isRowHighlighted(item.id) ? true : null\\\"\\n [attr.sky-cmp-id]=\\\"item.id\\\"\\n [ngClass]=\\\"{\\n 'sky-grid-multiselect-selected-row': item.isSelected,\\n 'sky-grid-multiselect-row': enableMultiselect,\\n 'sky-grid-row-highlight': isRowHighlighted(item.id)\\n }\\\"\\n (click)=\\\"onRowClick($event, item)\\\"\\n >\\n @if (enableMultiselect) {\\n <td class=\\\"sky-grid-multiselect-cell sky-grid-header-locked\\\">\\n <div\\n [style.max-width.px]=\\\"minColWidth\\\"\\n [style.width.px]=\\\"minColWidth\\\"\\n >\\n <sky-checkbox\\n [label]=\\\"\\n 'skyux_grid_multiselect_select_row' | skyLibResources\\n \\\"\\n [(ngModel)]=\\\"item.isSelected\\\"\\n (change)=\\\"onMultiselectCheckboxChange()\\\"\\n />\\n </div>\\n </td>\\n }\\n @for (\\n column of displayedColumns;\\n track column;\\n let last = $last;\\n let i = $index\\n ) {\\n <td\\n class=\\\"sky-grid-cell\\\"\\n [ngClass]=\\\"'sky-grid-column-alignment-' + column.alignment\\\"\\n [style.max-width.px]=\\\"column.width\\\"\\n [style.width.px]=\\\"column.width\\\"\\n >\\n <sky-grid-cell\\n [skyHighlight]=\\\"\\n !column.excludeFromHighlighting ? highlightText : undefined\\n \\\"\\n [template]=\\\"column.template || defaultCellTemplate\\\"\\n [fieldSelector]=\\\"column.field\\\"\\n [item]=\\\"item\\\"\\n [columnId]=\\\"column.id\\\"\\n [attr.sky-cmp-id]=\\\"column.id || column.field\\\"\\n />\\n </td>\\n }\\n </tr>\\n }\\n </tbody>\\n </table>\\n @if (showResizeBar) {\\n <div\\n #resizeBar\\n aria-hidden=\\\"true\\\"\\n class=\\\"sky-grid-resize-bar\\\"\\n tabindex=\\\"-1\\\"\\n ></div>\\n }\\n </div>\\n</div>\\n\\n<ng-template #defaultCellTemplate let-row=\\\"row\\\" let-value=\\\"value\\\">{{\\n value\\n}}</ng-template>\\n\\n<ng-template #inlineDeleteTemplateRef let-item>\\n <div\\n #inlineDeleteRef\\n [id]=\\\"'row-delete-ref-' + item.id\\\"\\n [ngStyle]=\\\"{\\n height: getRowHeight(0),\\n position: 'fixed',\\n width: tableWidth + 'px'\\n }\\\"\\n >\\n <sky-inline-delete\\n [pending]=\\\"getRowDeleteItem(item.id).pending\\\"\\n (cancelTriggered)=\\\"cancelRowDelete(item.id)\\\"\\n (deleteTriggered)=\\\"confirmRowDelete(item.id)\\\"\\n />\\n </div>\\n</ng-template>\\n\", styles: [\".sky-grid:not(.sky-theme-modern *){--sky-override-grid-font-size: 15px;--sky-override-grid-header-background: #ffffff;--sky-override-grid-heading-border: 1px solid #cdcfd2;--sky-override-grid-heading-color: var(--sky-text-color-deemphasized);--sky-override-grid-heading-drag-color: #eeeeef;--sky-override-grid-heading-font-size: 15px;--sky-override-grid-heading-font-weight: 400;--sky-override-grid-heading-font: BLKB Sans, Helvetica Neue, Arial, sans-serif;--sky-override-grid-heading-sort-space: 5px;--sky-override-grid-multiselect-display: block;--sky-override-grid-resize-handle-color: #00b4f1;--sky-override-grid-resize-handle-width: 5px;--sky-override-grid-resize-opacity: .6;--sky-override-grid-row-border: 1px dotted #cdcfd2;--sky-override-grid-row-color-even: #ffffff;--sky-override-grid-row-color-odd: #fbfbfb;--sky-override-grid-row-selected-background-hover: rgb(232.7615384615, 227.9961538462, 240.7038461538);--sky-override-grid-row-selected-background: #f1eef6;--sky-override-grid-row-selected-border: 1px solid #0974a1;--sky-override-grid-row-selected-border: 1px solid #dadbf6;--sky-override-grid-row-selected-box-shadow: 0px 0px 0px 3px inset #0974a1}.sky-grid{position:relative;display:block}.sky-grid-table-container{overflow:auto}.sky-grid-table{position:relative;table-layout:fixed;border-collapse:collapse;margin:0;font-size:var(--sky-override-grid-font-size, var(--sky-font-size-body-m));min-width:100%}.sky-grid-table.sky-grid-fit{max-width:100%;width:100%}.sky-grid-tbody{background-color:var(--sky-override-grid-row-color-even, var(--sky-color-background-row-base))}.sky-grid-row{border-bottom:var(--sky-override-grid-row-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-row:nth-child(odd){background-color:var(--sky-override-grid-row-color-odd, var(--sky-color-background-row-base))}.sky-grid-row.sky-grid-row-highlight{border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) solid var(--sky-color-border-selected));box-shadow:var(--sky-override-grid-row-selected-box-shadow, 0 0 0 var(--sky-border-width-selected-m) inset var(--sky-color-border-selected))}.sky-grid-row .sky-grid-cell{padding:0;min-width:10px}.sky-grid-heading{position:relative;border-top:var(--sky-override-grid-heading-border, none);border-bottom:var(--sky-override-grid-heading-border, var(--sky-border-width-emphasized) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-left:var(--sky-override-grid-heading-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));color:var(--sky-override-grid-heading-color, var(--sky-color-text-heading));font-family:var(--sky-override-grid-heading-font, var(--sky-font-family-primary));font-weight:var(--sky-override-grid-heading-font-weight, var(--sky-font-style-heading-4));font-size:var(--sky-override-grid-heading-font-size, var(--sky-font-size-heading-4));padding:0;cursor:pointer;background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)));overflow:visible;background-clip:padding-box;-webkit-user-select:none;-webkit-tap-highlight-color:transparent;-moz-user-select:none;-ms-user-select:none;user-select:none}.sky-grid-heading:first-child{border-left:1px solid transparent}.sky-grid-heading.sky-grid-header-dragging{background-color:var(--sky-override-grid-heading-drag-color, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-heading-sort,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-heading-sort{width:14px}.sky-grid-heading.sky-grid-column-alignment-left .sky-grid-help-inline-sort-hidden,.sky-grid-heading.sky-grid-column-alignment-center .sky-grid-help-inline-sort-hidden{margin-left:-14px;margin-right:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-header-caret-hidden-spacing{padding-left:14px}.sky-grid-heading.sky-grid-column-alignment-right .sky-grid-heading-sort-visible{width:14px}.sky-grid-heading div{padding:8px}.sky-grid-heading .overflow{text-overflow:ellipsis;white-space:nowrap;position:relative;z-index:1;overflow:hidden;min-width:100%}.sky-grid-heading .sky-grid-column-input-aria-only{-webkit-appearance:none;-moz-appearance:none;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);position:absolute;display:block;top:0;bottom:0;right:0}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-track{background:transparent}.sky-grid-heading .sky-grid-column-input-aria-only::-moz-range-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-ms-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;width:0;height:0;border-radius:0;border:0 none;background:none;display:none}.sky-grid-heading .sky-grid-column-input-aria-only:focus{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-column-alignment-left{text-align:left}.sky-grid-column-alignment-center{text-align:center}.sky-grid-column-alignment-right{text-align:right}.sky-grid-multiselect-cell{padding:0;text-align:center}.sky-grid-multiselect-cell ::ng-deep .sky-switch-control{margin:0 auto}.sky-grid-multiselect-cell div{display:var(--sky-override-grid-multiselect-display, flex);justify-content:space-around}th.sky-grid-multiselect-cell{cursor:default}th.sky-grid-multiselect-cell .screen-reader-only{width:0;height:0;padding:0;opacity:0;position:absolute;margin:-1px;border:0;overflow:hidden;clip:rect(0,0,0,0);outline:none;white-space:nowrap}@-moz-document url-prefix(){.sky-grid-multiselect-row td{border-left:0px solid transparent;border-right:0px solid transparent}}.sky-grid-multiselect-row:hover{background-color:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-row-base))}.sky-grid-multiselect-selected-row{background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft));border-top:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row));border-bottom:var(--sky-override-grid-row-selected-border, var(--sky-border-width-separator-row) var(--sky-border-style-separator-row) var(--sky-color-border-separator-row))}.sky-grid-multiselect-selected-row:nth-child(odd){background:var(--sky-override-grid-row-selected-background, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover{background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-multiselect-selected-row:hover:nth-child(odd){background:var(--sky-override-grid-row-selected-background-hover, var(--sky-color-background-selected-soft))}.sky-grid-has-toolbar .sky-grid-heading{border-top-width:0px}.sky-grid-heading-sort.sky-grid-heading-sort-hidden{visibility:hidden}.sky-grid-heading-sort.sky-grid-heading-sort-visible{visibility:visible;padding-left:var(--sky-override-grid-heading-sort-space, var(--sky-space-gap-text_action-xs))}.sky-grid-resize-handle{position:absolute;right:0;top:0;bottom:0;width:30px;z-index:2;min-height:20px;height:100%!important;vertical-align:middle;cursor:col-resize}.sky-grid-resize-handle:hover:after{background-color:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider))}.sky-grid-resize-handle:after{position:absolute;right:0;top:0;bottom:0;width:var(--sky-override-grid-resize-handle-width, 3px);height:100%;content:\\\"\\\";background-color:var(--sky-override-grid-header-background, var(--sky-comp-override-list-header-background-color, var(--sky-background-color-page-default)))}.sky-grid-resize-bar{position:absolute;top:0;left:0;z-index:99;height:100%;width:var(--sky-override-grid-resize-handle-width, 3px);background:var(--sky-override-grid-resize-handle-color, var(--sky-color-border-column_divider));opacity:var(--sky-override-grid-resize-opacity, 1)}tr{position:relative}.sky-grid-top-scroll-container{overflow:auto}.sky-grid-top-scroll{height:1px}\\n\"] }]\n }], ctorParameters: () => [{ type: i1.SkyAffixService }, { type: i0.ChangeDetectorRef }, { type: i2.DragulaService }, { type: i3.SkyGridAdapterService }, { type: i1.SkyOverlayService }, { type: i1.SkyAppWindowRef }, { type: i1.SkyUIConfigService }, { type: i1.SkyLogService }], propDecorators: { columns: [{\n type: Input\n }], data: [{\n type: Input\n }], enableMultiselect: [{\n type: Input\n }], fit: [{\n type: Input\n }], hasToolbar: [{\n type: Input\n }], height: [{\n type: Input\n }], highlightText: [{\n type: Input\n }], messageStream: [{\n type: Input\n }], multiselectRowId: [{\n type: Input\n }], rowHighlightedId: [{\n type: Input\n }], selectedColumnIds: [{\n type: Input\n }], selectedRowIds: [{\n type: Input\n }], settingsKey: [{\n type: Input\n }], sortField: [{\n type: Input\n }], width: [{\n type: Input\n }], columnWidthChange: [{\n type: Output\n }], multiselectSelectionChange: [{\n type: Output\n }], rowDeleteCancel: [{\n type: Output\n }], rowDeleteConfirm: [{\n type: Output\n }], selectedColumnIdsChange: [{\n type: Output\n }], sortFieldChange: [{\n type: Output\n }], columnComponents: [{\n type: ContentChildren,\n args: [SkyGridColumnComponent]\n }], columnElementRefs: [{\n type: ViewChildren,\n args: ['gridCol']\n }], columnRangeInputElementRefs: [{\n type: ViewChildren,\n args: ['colSizeRange']\n }], inlineDeleteRefs: [{\n type: ViewChildren,\n args: ['inlineDeleteRef']\n }], inlineDeleteTemplateRef: [{\n type: ViewChild,\n args: ['inlineDeleteTemplateRef', { read: TemplateRef }]\n }], tableContainerElementRef: [{\n type: ViewChild,\n args: ['gridContainer']\n }], tableElementRef: [{\n type: ViewChild,\n args: ['gridTable']\n }], topScrollContainerElementRef: [{\n type: ViewChild,\n args: ['topScrollContainer']\n }], resizeBar: [{\n type: ViewChild,\n args: ['resizeBar']\n }], onWindowResize: [{\n type: HostListener,\n args: ['window:resize']\n }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBR0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxlQUFlLEVBRWYsbUJBQW1CLEVBQ25CLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLE1BQU0sRUFHTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEdBQ1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNMLHNCQUFzQixHQU12QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQ0wsYUFBYSxHQUVkLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM3QyxPQUFPLEVBQ0wsZUFBZSxFQUVmLE9BQU8sRUFFUCxTQUFTLEVBQ1QsS0FBSyxHQUNOLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixHQUFHLEVBQ0gsSUFBSSxFQUNKLFNBQVMsRUFDVCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNqRSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU16RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQU0vRCxPQUFPLEVB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZHJlbixcbiAgRWxlbWVudFJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgRXZlbnRFbWl0dGVyLFxuICBIb3N0TGlzdGVuZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBpbmplY3QsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhTZXJ2aWNlLFxuICBTa3lBcHBXaW5kb3dSZWYsXG4gIFNreUxvZ1NlcnZpY2UsXG4gIFNreU92ZXJsYXlTZXJ2aWNlLFxuICBTa3lVSUNvbmZpZ1NlcnZpY2UsXG59IGZyb20gJ0Bza3l1eC9jb3JlJztcbmltcG9ydCB7XG4gIExpc3RJdGVtTW9kZWwsXG4gIExpc3RTb3J0RmllbGRTZWxlY3Rvck1vZGVsLFxufSBmcm9tICdAc2t5dXgvbGlzdC1idWlsZGVyLWNvbW1vbic7XG5cbmltcG9ydCB7IERyYWd1bGFTZXJ2aWNlIH0gZnJvbSAnbmcyLWRyYWd1bGEnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBPYnNlcnZhYmxlLFxuICBTdWJqZWN0LFxuICBTdWJzY3JpcHRpb24sXG4gIGZyb21FdmVudCxcbiAgbWVyZ2UsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YWtlV2hpbGUsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5R3JpZEFkYXB0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9ncmlkLWFkYXB0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uQ29tcG9uZW50IH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbk1vZGVsIH0gZnJvbSAnLi9ncmlkLWNvbHVtbi5tb2RlbCc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4tZGVzY3JpcHRpb24tbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UgfSBmcm9tICcuL3R5cGVzL2dyaWQtY29sdW1uLWhlYWRpbmctbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLWNvbHVtbi1pbmxpbmUtaGVscC1wb3BvdmVyLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkQ29sdW1uV2lkdGhNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1jb2x1bW4td2lkdGgtbW9kZWwtY2hhbmdlJztcbmltcG9ydCB7IFNreUdyaWRNZXNzYWdlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UnO1xuaW1wb3J0IHsgU2t5R3JpZE1lc3NhZ2VUeXBlIH0gZnJvbSAnLi90eXBlcy9ncmlkLW1lc3NhZ2UtdHlwZSc7XG5pbXBvcnQgeyBTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNhbmNlbC1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb25maWcgfSBmcm9tICcuL3R5cGVzL2dyaWQtcm93LWRlbGV0ZS1jb25maWcnO1xuaW1wb3J0IHsgU2t5R3JpZFJvd0RlbGV0ZUNvbmZpcm1BcmdzIH0gZnJvbSAnLi90eXBlcy9ncmlkLXJvdy1kZWxldGUtY29uZmlybS1hcmdzJztcbmltcG9ydCB7IFNreUdyaWRSb3dEZWxldGVDb250ZW50cyB9IGZyb20gJy4vdHlwZXMvZ3JpZC1yb3ctZGVsZXRlLWNvbnRlbnRzJztcbmltcG9ydCB7IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSB9IGZyb20gJy4vdHlwZXMvZ3JpZC1zZWxlY3RlZC1yb3dzLW1vZGVsLWNoYW5nZSc7XG5pbXBvcnQgeyBTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlIH0gZnJvbSAnLi90eXBlcy9ncmlkLXNlbGVjdGVkLXJvd3Mtc291cmNlJztcbmltcG9ydCB7IFNreUdyaWRVSUNvbmZpZyB9IGZyb20gJy4vdHlwZXMvZ3JpZC11aS1jb25maWcnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9ncmlkLmNvbXBvbmVudC5zY3NzJ10sXG4gIHZpZXdQcm92aWRlcnM6IFtEcmFndWxhU2VydmljZV0sXG4gIHByb3ZpZGVyczogW1NreUdyaWRBZGFwdGVyU2VydmljZV0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgU2t5R3JpZENvbXBvbmVudFxuICBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIENvbHVtbnMgYW5kIGNvbHVtbiBwcm9wZXJ0aWVzIGZvciB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgY29sdW1ucyhuZXdDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXSkge1xuICAgIGNvbnN0IG9sZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgdGhpcy5fY29sdW1ucyA9IG5ld0NvbHVtbnM7XG4gICAgaWYgKG9sZENvbHVtbnMpIHtcbiAgICAgIHRoaXMudHJhbnNmZXJDb2x1bW5XaWR0aHMob2xkQ29sdW1ucywgdGhpcy5jb2x1bW5zKTtcbiAgICAgIHRoaXMuaXNSZXNpemVkID0gZmFsc2U7XG4gICAgICB0aGlzLnNldERpc3BsYXllZENvbHVtbnModHJ1ZSk7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGNvbHVtbnMoKTogU2t5R3JpZENvbHVtbk1vZGVsW10ge1xuICAgIHJldHVybiB0aGlzLl9jb2x1bW5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIGZvciB0aGUgZ3JpZC4gRWFjaCBpdGVtIHJlcXVpcmVzIGFuIGBpZGAgYW5kIGEgcHJvcGVydHkgdGhhdCBtYXBzXG4gICAqIHRvIHRoZSBgZmllbGRgIG9yIGBpZGAgcHJvcGVydHkgb2YgZWFjaCBjb2x1bW4gaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZGF0YTogYW55W107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIHRoZSBtdWx0aXNlbGVjdCBmZWF0dXJlIHRvIGRpc3BsYXkgYSBjb2x1bW4gb2ZcbiAgICogY2hlY2tib3hlcyBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBncmlkLiBZb3UgY2FuIHNwZWNpZnkgYSB1bmlxdWUgSUQgd2l0aFxuICAgKiB0aGUgYG11bHRpc2VsZWN0Um93SWRgIHByb3BlcnR5LCBidXQgbXVsdGlzZWxlY3QgZGVmYXVsdHMgdG8gdGhlIGBpZGAgcHJvcGVydHkgb25cbiAgICogdGhlIGBkYXRhYCBvYmplY3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgZW5hYmxlTXVsdGlzZWxlY3QgPSBmYWxzZTtcblxuICAvKipcbiAgICogSG93IHRoZSBncmlkIGZpdHMgdG8gaXRzIHBhcmVudC4gVGhlIHZhbGlkIG9wdGlvbnMgYXJlIGB3aWR0aGAsXG4gICAqIHdoaWNoIGZpdHMgdGhlIGdyaWQgdG8gdGhlIHBhcmVudCdzIGZ1bGwgd2lkdGgsIGFuZCBgc2Nyb2xsYCwgd2hpY2ggYWxsb3dzIHRoZSBncmlkXG4gICAqIHRvIGV4Y2VlZCB0aGUgcGFyZW50J3Mgd2lkdGguIElmIHRoZSBncmlkIGRvZXMgbm90IGhhdmUgZW5vdWdoIGNvbHVtbnMgdG8gZmlsbFxuICAgKiB0aGUgcGFyZW50J3Mgd2lkdGgsIGl0IGFsd2F5cyBzdHJldGNoZXMgdG8gdGhlIHBhcmVudCdzIGZ1bGwgd2lkdGguXG4gICAqIEBkZWZhdWx0IFwid2lkdGhcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIGZpdCA9ICd3aWR0aCc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZGlzcGxheSBhIHRvb2xiYXIgd2l0aCB0aGUgZ3JpZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBoYXNUb29sYmFyID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFRoZSBoZWlnaHQgb2YgdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGVpZ2h0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRleHQgdG8gaGlnaGxpZ2h0IHdpdGhpbiB0aGUgZ3JpZC5cbiAgICogVHlwaWNhbGx5LCB0aGlzIHByb3BlcnR5IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzZWFyY2guXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgaGlnaGxpZ2h0VGV4dDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb2JzZXJ2YWJsZSB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBncmlkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG1lc3NhZ2VTdHJlYW0gPSBuZXcgU3ViamVjdDxTa3lHcmlkTWVzc2FnZT4oKTtcblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBJRCB0aGF0IG1hdGNoZXMgYSBwcm9wZXJ0eSBvbiB0aGUgYGRhdGFgIG9iamVjdC5cbiAgICogQnkgZGVmYXVsdCwgdGhpcyBwcm9wZXJ0eSB1c2VzIHRoZSBgaWRgIHByb3BlcnR5LlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIG11bHRpc2VsZWN0Um93SWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSByb3cgdG8gaGlnaGxpZ2h0LiBUaGUgSUQgbWF0Y2hlcyB0aGUgYGlkYCBwcm9wZXJ0eVxuICAgKiBvZiB0aGUgYGRhdGFgIG9iamVjdC4gVHlwaWNhbGx5LCB0aGlzIHByb3BlcnR5IGlzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aFxuICAgKiB0aGUgZmx5b3V0IGNvbXBvbmVudCB0byBpbmRpY2F0ZSB0aGUgY3VycmVudGx5IHNlbGVjdGVkIHJvdy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyByb3dIaWdobGlnaHRlZElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb2x1bW5zIHRvIGRpc3BsYXkgaW4gdGhlIGdyaWQgYmFzZWQgb24gdGhlIGBpZGAgb3IgYGZpZWxkYCBwcm9wZXJ0aWVzXG4gICAqIG9mIHRoZSBjb2x1bW5zLiBJZiBubyBjb2x1bW5zIGFyZSBzcGVjaWZpZWQsIHRoZW4gdGhlIGdyaWQgZGlzcGxheXMgYWxsIGNvbHVtbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkQ29sdW1uSWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGN1cnJlbnRJZHMgPSB0aGlzLl9zZWxlY3RlZENvbHVtbklkcztcbiAgICB0aGlzLl9zZWxlY3RlZENvbHVtbklkcyA9IHZhbHVlO1xuXG4gICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKCk7XG4gICAgfVxuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIGlkcyBoYXZlIGNoYW5nZWQuXG4gICAgaWYgKCFjdXJyZW50SWRzIHx8ICF2YWx1ZSB8fCAhdGhpcy5hcnJheXNFcXVhbCh2YWx1ZSwgY3VycmVudElkcykpIHtcbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgZW5zdXJlcyB0aGF0IHdlIGRvIG5vdCBzZXQgdXNlciBjb25maWcgb3B0aW9ucyBvciBmaXJlIHRoZSBjaGFuZ2UgZXZlbnRcbiAgICAgIC8vIG9uIHRoZSBmaXJzdCB0aW1lIHRoYXQgdGhlIGNvbHVtbnMgYXJlIHNldCB1cFxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNTZXQpIHtcbiAgICAgICAgdGhpcy5zZXRVc2VyQ29uZmlnKHtcbiAgICAgICAgICBzZWxlY3RlZENvbHVtbklkczogdmFsdWUsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNDaGFuZ2UuZW1pdCh0aGlzLl9zZWxlY3RlZENvbHVtbklkcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNSZXNpemVkKSB7XG4gICAgICAgICAgdGhpcy5yZXNldFRhYmxlV2lkdGgoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNTZXQgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGdldCBzZWxlY3RlZENvbHVtbklkcygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29sdW1uSWRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBzZXQgb2YgSURzIGZvciB0aGUgcm93cyB0byBzZWxlY3QgaW4gYSBtdWx0aXNlbGVjdCBncmlkLlxuICAgKiBUaGUgSURzIG1hdGNoIHRoZSBgaWRgIHByb3BlcnRpZXMgb2YgdGhlIGBkYXRhYCBvYmplY3RzLlxuICAgKiBSb3dzIHdpdGggSURzIHRoYXQgYXJlIG5vdCBpbmNsdWRlZCBhcmUgZGUtc2VsZWN0ZWQgaW4gdGhlIGdyaWQuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkUm93SWRzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWRSb3dJZHMgPSB2YWx1ZTtcbiAgICAgIHRoaXMuYXBwbHlTZWxlY3RlZFJvd3MoKTtcbiAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlNlbGVjdGVkUm93SWRzQ2hhbmdlKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHNlbGVjdGVkUm93SWRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRSb3dJZHM7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHVuaXF1ZSBrZXkgZm9yIHRoZSBVSSBDb25maWcgU2VydmljZSB0byByZXRyaWV2ZSBzdG9yZWQgc2V0dGluZ3MgZnJvbSBhIGRhdGFiYXNlLlxuICAgKiBUaGUgVUkgQ29uZmlnIFNlcnZpY2Ugc2F2ZXMgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgdXNlcnMgYW5kIHJldHVybnNcbiAgICogYHNlbGVjdGVkQ29sdW1uSWRzYCB0byBwcmVzZXJ2ZSB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGFuZCB0aGUgcHJlZmVycmVkIGNvbHVtbiBvcmRlci4gWW91ICBtdXN0IHByb3ZpZGUgYGlkYCB2YWx1ZXMgZm9yIHlvdXIgYHNreS1ncmlkLWNvbHVtbmAgZWxlbWVudHMgYmVjYXVzZSB0aGUgVUkgQ29uZmlnIFNlcnZpY2UgZGVwZW5kcyBvbiB0aG9zZSB2YWx1ZXMgdG8gb3JnYW5pemUgY29sdW1ucyBiYXNlZCBvbiB1c2VyIHNldHRpbmdzLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgVUkgQ29uZmlnIFNlcnZpY2UsIHNlZSBbdGhlIHN0aWNreSBzZXR0aW5ncyBkb2N1bWVudGF0aW9uXShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2RldmVsb3Avc3RpY2t5LXNldHRpbmdzKS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXR0aW5nc0tleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyBhIGNhcmV0IGluIHRoZSBjb2x1bW4gdGhhdCB3YXMgdXNlZCB0byBzb3J0IHRoZSBncmlkLiBUaGlzIGlzIHBhcnRpY3VsYXJseSB1c2VmdWxcbiAgICogd2hlbiB5b3UgcHJvZ3JhbW1hdGljYWxseSBzb3J0IGRhdGEgYW5kIHdhbnQgdG8gdmlzdWFsbHkgaW5kaWNhdGUgaG93IHRoZSBncmlkIHdhcyBzb3J0ZWQuXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBhIGBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbGAgdmFsdWUgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqIC0gYGZpZWxkU2VsZWN0b3JgIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc29ydCBmaWVsZC4gVGhpcyBwcm9wZXJ0eSBhY2NlcHRzIGBzdHJpbmdgIHZhbHVlcy5cbiAgICogLSBgZGVzY2VuZGluZ2AgSW5kaWNhdGVzIHdoZXRoZXIgdG8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyLiBUaGUgY2FyZXQgdGhhdCB2aXN1YWxseVxuICAgKiBpbmRpY2F0ZXMgdGhlIHNvcnQgb3JkZXIgcG9pbnRzIGRvd24gZm9yIGRlc2NlbmRpbmcgb3JkZXIgYW5kIHVwIGZvciBhc2NlbmRpbmcgb3JkZXIuXG4gICAqIFRoaXMgcHJvcGVydHkgYWNjZXB0cyBgYm9vbGVhbmAgdmFsdWVzLiBEZWZhdWx0IGlzIGBmYWxzZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc29ydEZpZWxkOiBMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbDtcblxuICAvKipcbiAgICogVGhlIHdpZHRoIG9mIHRoZSBncmlkIGluIHBpeGVscy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB3aWR0aDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGaXJlcyB3aGVuIHRoZSB3aWR0aCBvZiBhIGNvbHVtbiBjaGFuZ2VzLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBjb2x1bW5XaWR0aENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgU2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2VbXVxuICA+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIHNlbGVjdGlvbiBvZiBtdWx0aXNlbGVjdCBjaGVja2JveGVzIGNoYW5nZXMuXG4gICAqIEVtaXRzIGFuIGFycmF5IG9mIElEcyBmb3IgdGhlIHNlbGVjdGVkIHJvd3MgYmFzZWQgb24gdGhlIGBtdWx0aXNlbGVjdFJvd0lkYCBwcm9wZXJ0eVxuICAgKiB0aGF0IHRoZSBjb25zdW1lciBwcm92aWRlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgbXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UgPVxuICAgIG5ldyBFdmVudEVtaXR0ZXI8U2t5R3JpZFNlbGVjdGVkUm93c01vZGVsQ2hhbmdlPigpO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcm93RGVsZXRlQ2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lHcmlkUm93RGVsZXRlQ2FuY2VsQXJncz4oKTtcblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHJvd0RlbGV0ZUNvbmZpcm0gPSBuZXcgRXZlbnRFbWl0dGVyPFNreUdyaWRSb3dEZWxldGVDb25maXJtQXJncz4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgY29sdW1ucyB0byBkaXNwbGF5IGluIHRoZSBncmlkIGNoYW5nZSBvciB3aGVuIHRoZSBvcmRlciBvZiB0aGUgY29sdW1ucyBjaGFuZ2VzLlxuICAgKiBUaGUgZXZlbnQgZW1pdHMgYW4gYXJyYXkgb2YgSURzIGZvciB0aGUgZGlzcGxheWVkIGNvbHVtbnMgdGhhdCByZWZsZWN0cyB0aGUgY29sdW1uIG9yZGVyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBzZWxlY3RlZENvbHVtbklkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdGhlIGFjdGl2ZSBzb3J0IGZpZWxkIGNoYW5nZXMuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIHNvcnRGaWVsZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KCk7XG5cbiAgcHVibGljIGNvbHVtblJlc2l6ZVN0ZXAgPSAxMDtcbiAgcHVibGljIGN1cnJlbnRTb3J0RmllbGQ6IEJlaGF2aW9yU3ViamVjdDxMaXN0U29ydEZpZWxkU2VsZWN0b3JNb2RlbD47XG4gIHB1YmxpYyBkaXNwbGF5ZWRDb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXTtcbiAgcHVibGljIGRyYWd1bGFHcm91cE5hbWU6IHN0cmluZztcbiAgcHVibGljIGdyaWRJZDogbnVtYmVyID0gKytuZXh0SWQ7XG4gIHB1YmxpYyByb3dEZWxldGVDb25maWdzOiBTa3lHcmlkUm93RGVsZXRlQ29uZmlnW10gPSBbXTtcbiAgcHVibGljIGl0ZW1zOiBhbnlbXTtcbiAgcHVibGljIG1heENvbFdpZHRoID0gOTk5OTsgLy8gVGhpcyBpcyBhbiBhcmJpdHJhcnkgbnVtYmVyLCBhcyB0aGUgaW5wdXQgcmFuZ2UgcGlja2VyIHdvbid0IHdvcmsgd2l0aG91dCBhIHZhbHVlLlxuICBwdWJsaWMgbWluQ29sV2lkdGggPSA1MDtcbiAgcHVibGljIHNob3dSZXNpemVCYXIgPSBmYWxzZTtcbiAgcHVibGljIHNob3dUb3BTY3JvbGwgPSBmYWxzZTtcblxuICBwdWJsaWMgZ2V0IHRhYmxlV2lkdGgoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5R3JpZENvbHVtbkNvbXBvbmVudClcbiAgcHJpdmF0ZSBjb2x1bW5Db21wb25lbnRzOiBRdWVyeUxpc3Q8U2t5R3JpZENvbHVtbkNvbXBvbmVudD47XG5cbiAgQFZpZXdDaGlsZHJlbignZ3JpZENvbCcpXG4gIHByaXZhdGUgY29sdW1uRWxlbWVudFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignY29sU2l6ZVJhbmdlJylcbiAgcHJpdmF0ZSBjb2x1bW5SYW5nZUlucHV0RWxlbWVudFJlZnM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcbiAgQFZpZXdDaGlsZHJlbignaW5saW5lRGVsZXRlUmVmJylcbiAgcHJpdmF0ZSBpbmxpbmVEZWxldGVSZWZzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG4gIEBWaWV3Q2hpbGQoJ2lubGluZURlbGV0ZVRlbXBsYXRlUmVmJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBwcml2YXRlIGlubGluZURlbGV0ZVRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQFZpZXdDaGlsZCgnZ3JpZENvbnRhaW5lcicpXG4gIHByaXZhdGUgdGFibGVDb250YWluZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdncmlkVGFibGUnKVxuICBwcml2YXRlIHRhYmxlRWxlbWVudFJlZjogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgndG9wU2Nyb2xsQ29udGFpbmVyJylcbiAgcHJpdmF0ZSB0b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZXNpemVCYXInKVxuICBwcml2YXRlIHJlc2l6ZUJhcjogRWxlbWVudFJlZjtcblxuICBwcml2YXRlIGFjdGl2ZVJlc2l6ZUNvbHVtbkluZGV4OiBzdHJpbmc7XG4gIHByaXZhdGUgaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICBwcml2YXRlIGlzUmVzaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHJvd0RlbGV0ZUNvbnRlbnRzOiBSZWNvcmQ8c3RyaW5nLCBTa3lHcmlkUm93RGVsZXRlQ29udGVudHM+ID0ge307XG4gIHByaXZhdGUgc3RhcnRDb2x1bW5XaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XG4gIHByaXZhdGUgc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gIHByaXZhdGUgc2VsZWN0ZWRDb2x1bW5JZHNTZXQgPSBmYWxzZTtcbiAgcHJpdmF0ZSB4UG9zU3RhcnQ6IG51bWJlcjtcblxuICBwcml2YXRlIF9jb2x1bW5zOiBTa3lHcmlkQ29sdW1uTW9kZWxbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRDb2x1bW5JZHM6IHN0cmluZ1tdO1xuICBwcml2YXRlIF9zZWxlY3RlZFJvd0lkczogc3RyaW5nW107XG5cbiAgcmVhZG9ubHkgI2Vudmlyb25tZW50SW5qZWN0b3IgPSBpbmplY3QoRW52aXJvbm1lbnRJbmplY3Rvcik7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGRyYWd1bGFTZXJ2aWNlOiBEcmFndWxhU2VydmljZSxcbiAgICBwcml2YXRlIGdyaWRBZGFwdGVyOiBTa3lHcmlkQWRhcHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBvdmVybGF5U2VydmljZTogU2t5T3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBza3lXaW5kb3c6IFNreUFwcFdpbmRvd1JlZixcbiAgICBwcml2YXRlIHVpQ29uZmlnU2VydmljZTogU2t5VUlDb25maWdTZXJ2aWNlLFxuICAgIGxvZ2dlcjogU2t5TG9nU2VydmljZSxcbiAgKSB7XG4gICAgbG9nZ2VyLmRlcHJlY2F0ZWQoJ1NreUdyaWRDb21wb25lbnQnLCB7XG4gICAgICBkZXByZWNhdGlvbk1ham9yVmVyc2lvbjogNixcbiAgICAgIG1vcmVJbmZvVXJsOiAnaHR0cHM6Ly9kZXZlbG9wZXIuYmxhY2tiYXVkLmNvbS9za3l1eC9jb21wb25lbnRzL2RhdGEtZ3JpZCcsXG4gICAgICByZXBsYWNlbWVudFJlY29tbWVuZGF0aW9uOiAnVXNlIGRhdGEgZ3JpZCBpbnN0ZWFkLicsXG4gICAgfSk7XG5cbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbk1vZGVsPigpO1xuICAgIHRoaXMuaXRlbXMgPSBuZXcgQXJyYXk8YW55PigpO1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TGlzdFNvcnRGaWVsZFNlbGVjdG9yTW9kZWw+KHtcbiAgICAgIGZpZWxkU2VsZWN0b3I6ICcnLFxuICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgfSk7XG4gICAgdGhpcy5kcmFndWxhR3JvdXBOYW1lID0gYHNreS1ncmlkcy1ncm91cC0ke3RoaXMuZ3JpZElkfWA7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5tZXNzYWdlU3RyZWFtXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKG1lc3NhZ2U6IFNreUdyaWRNZXNzYWdlKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlSW5jb21pbmdNZXNzYWdlcyhtZXNzYWdlKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZXR0aW5nc0tleSkge1xuICAgICAgdGhpcy5hcHBseVVzZXJDb25maWcoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5pbml0Q29sdW1ucygpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR1cCBjb2x1bW4gZHJhZy1hbmQtZHJvcC5cbiAgICB0aGlzLmdyaWRBZGFwdGVyLmluaXRpYWxpemVEcmFnQW5kRHJvcChcbiAgICAgIHRoaXMuZHJhZ3VsYUdyb3VwTmFtZSxcbiAgICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UsXG4gICAgICAoc2VsZWN0ZWRDb2x1bW5JZHM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICAgIHRoaXMub25IZWFkZXJEcm9wKHNlbGVjdGVkQ29sdW1uSWRzKTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHRoaXMuYXBwbHlTZWxlY3RlZFJvd3MoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSAmJiB0aGlzLmNvbHVtbnMpIHtcbiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSB0aGlzLnNlbGVjdGVkQ29sdW1uSWRzLmZpbHRlcigoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbikgPT4gY29sdW1uLmlkID09PSBjb2x1bW5JZCk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXREaXNwbGF5ZWRDb2x1bW5zKHRydWUpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydkYXRhJ10gJiYgdGhpcy5kYXRhKSB7XG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcblxuICAgICAgLy8gVGhpcyBzZXQgdGltZW91dCBpcyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBkYXRhIGhhcyByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIC8vIFRoaXMgY2xlYW5zIHVwIGFueSBsaW5nZXJpbmcgcm93IGRlbGV0ZXMgZm9yIGl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMucm93RGVsZXRlQ29udGVudHMpLmZvckVhY2goKGlkKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLmRhdGEuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWQpKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBUaGUgcm93cyByZS1yZW5kZXIgdGh1cyBtZXNzaW5nIHVwIHRoZSBhZmZpeGVycy4gV2UgbXVzdCByZWFmZml4IHRoZW0gc28gdGhhdCB0aGluZ3NcbiAgICAgICAgICAgIC8vIGNvbnRpbnVlIHRvIHJlbmRlciBjb3JyZWN0bHkuXG4gICAgICAgICAgICBjb25zdCByb3dFbGVtZW50OiBIVE1MRWxlbWVudCA9XG4gICAgICAgICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgaWQgKyAnXCJdJyxcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1tpZF0uYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgICAgICAgIGlzU3RpY2t5OiB0cnVlLFxuICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50OiAndG9wJyxcbiAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogJ2xlZnQnLFxuICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzWydzb3J0RmllbGQnXSkge1xuICAgICAgdGhpcy5zZXRTb3J0SGVhZGVycygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24pID0+IHtcbiAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuICAgIHRoaXMubXVsdGlzZWxlY3RTZWxlY3Rpb25DaGFuZ2UuY29tcGxldGUoKTtcblxuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICBPYmplY3Qua2V5cyh0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzKS5mb3JFYWNoKChpZCkgPT4ge1xuICAgICAgdGhpcy5kZXN0cm95Um93RGVsZXRlKGlkKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZHJhZ3VsYVNlcnZpY2UuZGVzdHJveSh0aGlzLmRyYWd1bGFHcm91cE5hbWUpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OnJlc2l6ZScpXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmNoZWNrVXNlckNvbHVtbldpZHRoc0ZvclNjcm9sbCgpO1xuICB9XG5cbiAgcHVibGljIGdldFRvcFNjcm9sbFdpZHRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudGFibGVFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsV2lkdGg7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGFibGVDbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmICh0aGlzLmZpdCAhPT0gJ3Njcm9sbCcpIHtcbiAgICAgIGNsYXNzTmFtZXMucHVzaCgnc2t5LWdyaWQtZml0Jyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaGFzVG9vbGJhcikge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oYXMtdG9vbGJhcicpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihjbGFzc05hbWVzLCAnICcpO1xuICB9XG5cbiAgcHVibGljIGdldFRhYmxlSGVhZGVyQ2xhc3NOYW1lcyhjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHN0cmluZyB7XG4gICAgY29uc3QgY2xhc3NOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIGlmIChjb2x1bW4gJiYgY29sdW1uLmxvY2tlZCkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktZ3JpZC1oZWFkZXItbG9ja2VkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkRGVsaW1pdGVyKGNsYXNzTmFtZXMsICcgJyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Q2FyZXRJY29uTmFtZXMoY29sdW1uOiBTa3lHcmlkQ29sdW1uTW9kZWwpOiBzdHJpbmcge1xuICAgIGNvbnN0IGljb25OYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgIHRoaXMuZ2V0U29ydERpcmVjdGlvbihjb2x1bW4uZmllbGQpLnN1YnNjcmliZSgoc29ydERpcikgPT4ge1xuICAgICAgaWYgKHNvcnREaXIgPT09ICdhc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjaGV2cm9uLXVwJyk7XG4gICAgICB9XG4gICAgICBpZiAoc29ydERpciA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIGljb25OYW1lcy5wdXNoKCdjaGV2cm9uLWRvd24nKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmFkZERlbGltaXRlcihpY29uTmFtZXMsICcgJyk7XG4gIH1cblxuICBwdWJsaWMgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50LCBjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChrZXkgPT09ICdlbnRlcicgfHwga2V5ID09PSAnICcpIHtcbiAgICAgIHRoaXMuc29ydEJ5Q29sdW1uKGNvbHVtbik7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHNvcnRCeUNvbHVtbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlICYmIGNvbHVtbi5pc1NvcnRhYmxlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRTb3J0RmllbGRcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICBtYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBsZXQgc2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgIGZpZWxkU2VsZWN0b3I6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgICAgICAgZGVzY2VuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZmllbGQgJiZcbiAgICAgICAgICAgICAgZmllbGQuZmllbGRTZWxlY3RvciA9PT0gY29sdW1uLmZpZWxkICYmXG4gICAgICAgICAgICAgIGZpZWxkLmRlc2NlbmRpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBzZWxlY3RvciA9IHtcbiAgICAgICAgICAgICAgICBmaWVsZFNlbGVjdG9yOiBjb2x1bW4uZmllbGQsXG4gICAgICAgICAgICAgICAgZGVzY2VuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNvcnRGaWVsZENoYW5nZS5lbWl0KHNlbGVjdG9yKTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KHNlbGVjdG9yKTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldFNvcnREaXJlY3Rpb24oY29sdW1uRmllbGQ6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbkZpZWxkXG4gICAgICAgICAgPyBmaWVsZC5kZXNjZW5kaW5nXG4gICAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgICAgOiAnYXNjJ1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBcmlhU29ydERpcmVjdGlvbihjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFNvcnRGaWVsZC5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgIG1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgcmV0dXJuIGZpZWxkLmZpZWxkU2VsZWN0b3IgPT09IGNvbHVtbi5maWVsZFxuICAgICAgICAgID8gZmllbGQuZGVzY2VuZGluZ1xuICAgICAgICAgICAgPyAnZGVzY2VuZGluZydcbiAgICAgICAgICAgIDogJ2FzY2VuZGluZydcbiAgICAgICAgICA6IGNvbHVtbi5pc1NvcnRhYmxlXG4gICAgICAgICAgICA/ICdub25lJ1xuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldENhcmV0VmlzaWJpbGl0eShjb2x1bW5GaWVsZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50U29ydEZpZWxkLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgbWFwKChmaWVsZCkgPT4ge1xuICAgICAgICByZXR1cm4gZmllbGQuZmllbGRTZWxlY3RvciA9PT0gY29sdW1uRmllbGQgPyAndmlzaWJsZScgOiAnaGlkZGVuJztcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbkZpZWxkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDYXJldFZpc2liaWxpdHkoY29sdW1uRmllbGQpLnBpcGUoXG4gICAgICBtYXAoKHZpc2liaWxpdHk6IHN0cmluZykgPT4ge1xuICAgICAgICByZXR1cm4gdmlzaWJpbGl0eSA9PT0gJ2hpZGRlbic7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIG9uTXVsdGlzZWxlY3RDaGVja2JveENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5DaGVja2JveENoYW5nZSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ29sdW1uSGVhZGluZyhjaGFuZ2U6IFNreUdyaWRDb2x1bW5IZWFkaW5nTW9kZWxDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmhlYWRpbmcgPSBjaGFuZ2UudmFsdWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVJbmxpbmVIZWxwUG9wb3ZlcihcbiAgICBjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlLFxuICApOiB2b2lkIHtcbiAgICBjb25zdCBmb3VuZENvbHVtbk1vZGVsID0gdGhpcy5jb2x1bW5zLmZpbmQoKGNvbHVtbjogU2t5R3JpZENvbHVtbk1vZGVsKSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoY2hhbmdlLmlkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmlkID09PSBjb2x1bW4uaWQpIHx8XG4gICAgICAgIChjaGFuZ2UuZmllbGQgIT09IHVuZGVmaW5lZCAmJiBjaGFuZ2UuZmllbGQgPT09IGNvbHVtbi5maWVsZClcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChmb3VuZENvbHVtbk1vZGVsKSB7XG4gICAgICBmb3VuZENvbHVtbk1vZGVsLmlubGluZUhlbHBQb3BvdmVyID0gY2hhbmdlLnZhbHVlO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlQ29sdW1uRGVzY3JpcHRpb24oXG4gICAgY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZm91bmRDb2x1bW5Nb2RlbCA9IHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW46IFNreUdyaWRDb2x1bW5Nb2RlbCkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGNoYW5nZS5pZCAhPT0gdW5kZWZpbmVkICYmIGNoYW5nZS5pZCA9PT0gY29sdW1uLmlkKSB8fFxuICAgICAgICAoY2hhbmdlLmZpZWxkICE9PSB1bmRlZmluZWQgJiYgY2hhbmdlLmZpZWxkID09PSBjb2x1bW4uZmllbGQpXG4gICAgICApO1xuICAgIH0pO1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoZm91bmRDb2x1bW5Nb2RlbCkge1xuICAgICAgZm91bmRDb2x1bW5Nb2RlbC5kZXNjcmlwdGlvbiA9IGNoYW5nZS52YWx1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG9uUmVzaXplQ29sdW1uU3RhcnQoZXZlbnQ6IHtcbiAgICBzdG9wUHJvcGFnYXRpb246ICgpID0+IHZvaWQ7XG4gICAgcHJldmVudERlZmF1bHQ6ICgpID0+IHZvaWQ7XG4gICAgcGFnZVg/OiBudW1iZXI7XG4gIH0pOiB2b2lkIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG5cbiAgICB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGUgPSB0cnVlO1xuICAgIHRoaXMueFBvc1N0YXJ0ID0gZXZlbnQucGFnZVg7XG4gICAgdGhpcy5zaG93UmVzaXplQmFyID0gdHJ1ZTtcblxuICAgIC8vIFNob3cgdmlzdWFsIGluZGljYXRvciBvZiB3aGVyZSBtb3VzZSBpcyBkcmFnZ2luZyAocmVzaXplQmFyKS5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGV2ZW50LnBhZ2VYKTtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBjb25zdCBtb3VzZU1vdmVFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNlbW92ZScpO1xuICAgIGNvbnN0IHRvdWNoTW92ZUV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2htb3ZlJyk7XG5cbiAgICBtZXJnZShtb3VzZU1vdmVFdmVudCwgdG91Y2hNb3ZlRXZlbnQpXG4gICAgICAucGlwZShcbiAgICAgICAgdGFrZVdoaWxlKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pc0RyYWdnaW5nUmVzaXplSGFuZGxlO1xuICAgICAgICB9KSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKG1vdmVFdmVudDogYW55KSA9PiB7XG4gICAgICAgIHRoaXMub25SZXNpemVIYW5kbGVNb3ZlKG1vdmVFdmVudCk7XG4gICAgICB9KTtcblxuICAgIGNvbnN0IG1vdXNlVXBFdmVudCA9IGZyb21FdmVudChkb2N1bWVudCwgJ21vdXNldXAnKTtcbiAgICBjb25zdCB0b3VjaEVuZEV2ZW50ID0gZnJvbUV2ZW50KGRvY3VtZW50LCAndG91Y2hlbmQnKTtcblxuICAgIG1lcmdlKG1vdXNlVXBFdmVudCwgdG91Y2hFbmRFdmVudClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlV2hpbGUoKCkgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmlzRHJhZ2dpbmdSZXNpemVIYW5kbGU7XG4gICAgICAgIH0pLFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoZW5kRXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLm9uUmVzaXplSGFuZGxlUmVsZWFzZShlbmRFdmVudCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbktleWRvd25SZXNpemVDb2woZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAvLyBJZiB0aGlzIHRhYmxlIGhhc24ndCBiZWVuIHJlc2l6ZWQsIGluaXRpYWxpemUgYWxsIHRoZSByZXNpemUgd2lkdGhzLlxuICAgIGlmICghdGhpcy5pc1Jlc2l6ZWQpIHtcbiAgICAgIHRoaXMuaW5pdENvbHVtbldpZHRocygpO1xuICAgICAgdGhpcy5pc1Jlc2l6ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMuaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudCk7XG4gIH1cblxuICBwdWJsaWMgb25JbnB1dENoYW5nZVJlc2l6ZUNvbChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKGlucHV0LnZhbHVlKTtcbiAgICBjb25zdCBkZWx0YVggPSBuZXdWYWx1ZSAtIHRoaXMuc3RhcnRDb2x1bW5XaWR0aDtcbiAgICB0aGlzLnJlc2l6ZUNvbHVtbkJ5SW5kZXgodGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCwgbmV3VmFsdWUsIGRlbHRhWCk7XG4gICAgY29uc3QgbGVmdCA9IGlucHV0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihsZWZ0KTtcbiAgfVxuXG4gIHB1YmxpYyBvblJlc2l6ZUhhbmRsZU1vdmUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBkZWx0YVggPSBldmVudC5wYWdlWCAtIHRoaXMueFBvc1N0YXJ0O1xuICAgIGNvbnN0IG5ld0NvbFdpZHRoID0gdGhpcy5zdGFydENvbHVtbldpZHRoICsgZGVsdGFYO1xuXG4gICAgaWYgKG5ld0NvbFdpZHRoIDw9IHRoaXMubWluQ29sV2lkdGgpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heCA9IHRoaXMuZ2V0TWF4UmFuZ2VCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJyAmJiBuZXdDb2xXaWR0aCA+IG1heCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXRSZXNpemVCYXJQb3NpdGlvbihldmVudC5wYWdlWCk7XG4gIH1cblxuICBwdWJsaWMgb25SZXNpemVIYW5kbGVCbHVyKCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlRm9jdXMoZXZlbnQ6IEZvY3VzRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNob3dSZXNpemVCYXIgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGxlZnQgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICB0aGlzLnNldFJlc2l6ZUJhclBvc2l0aW9uKGxlZnQpO1xuICB9XG5cbiAgcHVibGljIG9uUmVzaXplSGFuZGxlUmVsZWFzZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuc2hvd1Jlc2l6ZUJhciA9IGZhbHNlO1xuICAgIGNvbnN0IGRlbHRhWCA9IGV2ZW50LnBhZ2VYIC0gdGhpcy54UG9zU3RhcnQ7XG4gICAgY29uc3QgbmV3Q29sV2lkdGggPSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGggKyBkZWx0YVg7XG4gICAgdGhpcy5yZXNpemVDb2x1bW5CeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgsIG5ld0NvbFdpZHRoLCBkZWx0YVgpO1xuICAgIHRoaXMuaXNEcmFnZ2luZ1Jlc2l6ZUhhbmRsZSA9IGZhbHNlO1xuICAgIHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXggPSB1bmRlZmluZWQ7XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIG9uUm93Q2xpY2soZXZlbnQ6IGFueSwgc2VsZWN0ZWRJdGVtOiBMaXN0SXRlbU1vZGVsKTogdm9pZCB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5lbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgaWYgKFxuICAgICAgICBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgfHxcbiAgICAgICAgIXRoaXMuaXNJbnRlcmFjdGl2ZUVsZW1lbnQoZXZlbnQpXG4gICAgICApIHtcbiAgICAgICAgc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQgPSAhc2VsZWN0ZWRJdGVtLmlzU2VsZWN0ZWQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIHRoaXMuZW1pdFNlbGVjdGVkUm93cyhTa3lHcmlkU2VsZWN0ZWRSb3dzU291cmNlLlJvd0NsaWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNSb3dIaWdobGlnaHRlZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMucm93SGlnaGxpZ2h0ZWRJZCkge1xuICAgICAgcmV0dXJuIGlkID09PSB0aGlzLnJvd0hpZ2hsaWdodGVkSWQ7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRSb3dIZWlnaHQoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZEFkYXB0ZXIuZ2V0Um93SGVpZ2h0KHRoaXMudGFibGVFbGVtZW50UmVmLCBpbmRleCk7XG4gIH1cblxuICBwdWJsaWMgY2FuY2VsUm93RGVsZXRlKGlkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmlsdGVyKFxuICAgICAgKGNvbmZpZykgPT4gY29uZmlnLmlkICE9PSBpZCxcbiAgICApO1xuICAgIHRoaXMucm93RGVsZXRlQ2FuY2VsLmVtaXQoeyBpZDogaWQgfSk7XG5cbiAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUoaWQpO1xuICB9XG5cbiAgcHVibGljIGNvbmZpcm1Sb3dEZWxldGUoaWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlncy5maW5kKChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gaWQpLnBlbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMucm93RGVsZXRlQ29uZmlybS5lbWl0KHsgaWQ6IGlkIH0pO1xuICB9XG5cbiAgcHVibGljIGdldFJvd0RlbGV0ZUl0ZW0oaWQ6IHN0cmluZyk6IFNreUdyaWRSb3dEZWxldGVDb25maWcge1xuICAgIHJldHVybiB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmluZCgocm93RGVsZXRlKSA9PiByb3dEZWxldGUuaWQgPT09IGlkKTtcbiAgfVxuXG4gIC8vIFByZXZlbnQgdG91Y2ggZGV2aWNlcyBmcm9tIGluYWR2ZXJ0ZW50bHkgc2Nyb2xsaW5nIGdyaWQgd2hpbGUgZHJhZ2dpbmcgY29sdW1ucy5cbiAgcHVibGljIG9uVG91Y2hNb3ZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG5cbiAgcHVibGljIG9uVG9wU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZikge1xuICAgICAgaWYgKHRoaXMuc2Nyb2xsVHJpZ2dlcmVkKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMudGFibGVDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdCA9XG4gICAgICAgICAgdGhpcy50b3BTY3JvbGxDb250YWluZXJFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuc2Nyb2xsTGVmdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsVHJpZ2dlcmVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb25HcmlkU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYpIHtcbiAgICAgIGlmICh0aGlzLnNjcm9sbFRyaWdnZXJlZCkge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvcFNjcm9sbENvbnRhaW5lckVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5zY3JvbGxMZWZ0ID1cbiAgICAgICAgICB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNjcm9sbFRyaWdnZXJlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgIXRoaXMuc2hvd1RvcFNjcm9sbCAmJlxuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcyAmJlxuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5sZW5ndGggPiAwXG4gICAgKSB7XG4gICAgICBsZXQgY29sdW1uc1dpZHRoVG90YWwgPSAwO1xuICAgICAgY29uc3Qgd2luZG93U2l6ZSA9IHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dUb3BTY3JvbGwpIHtcbiAgICAgICAgICBjb25zdCBjb21wdXRlZFdpZHRoID0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNvbC5uYXRpdmVFbGVtZW50KS53aWR0aCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IG9mZnNldFdpZHRoID0gY29sLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgICAgIGNvbXB1dGVkV2lkdGggfHwgb2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICB0aGlzLm1pbkNvbFdpZHRoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29sdW1uc1dpZHRoVG90YWwgPSBjb2x1bW5zV2lkdGhUb3RhbCArIHdpZHRoO1xuICAgICAgICAgIGlmIChjb2x1bW5zV2lkdGhUb3RhbCA+IHdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1RvcFNjcm9sbCA9IHRydWU7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdFNlbGVjdEFsbCgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5pdGVtcykge1xuICAgICAgaXRlbS5pc1NlbGVjdGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5TZWxlY3RBbGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBtdWx0aXNlbGVjdENsZWFyQWxsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICBpdGVtLmlzU2VsZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB0aGlzLmVtaXRTZWxlY3RlZFJvd3MoU2t5R3JpZFNlbGVjdGVkUm93c1NvdXJjZS5DbGVhckFsbCk7XG4gIH1cblxuICBwcml2YXRlIGhhbmRsZUluY29taW5nTWVzc2FnZXMobWVzc2FnZTogU2t5R3JpZE1lc3NhZ2UpOiB2b2lkIHtcbiAgICBzd2l0Y2ggKG1lc3NhZ2UudHlwZSkge1xuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuU2VsZWN0QWxsOlxuICAgICAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0QWxsKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5DbGVhckFsbDpcbiAgICAgICAgdGhpcy5tdWx0aXNlbGVjdENsZWFyQWxsKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTa3lHcmlkTWVzc2FnZVR5cGUuUHJvbXB0RGVsZXRlUm93OlxuICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi9cbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKG1lc3NhZ2UuZGF0YSAmJiBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93KSB7XG4gICAgICAgICAgY29uc3QgZXhpc3RpbmdDb25maWcgPSB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MuZmluZChcbiAgICAgICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCA9PT0gbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChleGlzdGluZ0NvbmZpZykge1xuICAgICAgICAgICAgZXhpc3RpbmdDb25maWcucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJvd0RlbGV0ZUNvbmZpZ3MucHVzaCh7XG4gICAgICAgICAgICAgIGlkOiBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICAgICBwZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb3ZlcmxheSA9IHRoaXMub3ZlcmxheVNlcnZpY2UuY3JlYXRlKHtcbiAgICAgICAgICAgICAgZW5hYmxlU2Nyb2xsOiB0cnVlLFxuICAgICAgICAgICAgICBzaG93QmFja2Ryb3A6IGZhbHNlLFxuICAgICAgICAgICAgICBjbG9zZU9uTmF2aWdhdGlvbjogdHJ1ZSxcbiAgICAgICAgICAgICAgZW5hYmxlQ2xvc2U6IGZhbHNlLFxuICAgICAgICAgICAgICBlbmFibGVQb2ludGVyRXZlbnRzOiB0cnVlLFxuICAgICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLiNlbnZpcm9ubWVudEluamVjdG9yLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG92ZXJsYXkuYXR0YWNoVGVtcGxhdGUodGhpcy5pbmxpbmVEZWxldGVUZW1wbGF0ZVJlZiwge1xuICAgICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuZGF0YS5maW5kKFxuICAgICAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmlkID09PSBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgYXJlIG1hbnVhbGx5IHNldHRpbmcgdGhlIHotaW5kZXggaGVyZSBiZWNhdXNlIG92ZXJsYXlzIHdpbGwgYWx3YXlzIGJlIG9uIHRvcCBvZlxuICAgICAgICAgICAgICogdGhlIG9tbmliYXIuIFRoaXMgbWFudWFsIHNldHRpbmcgaXMgMSBsZXNzIHRoYW4gdGhlIG9tbmliYXIncyB6LWluZGV4IG9mIDEwMDAuIFdlXG4gICAgICAgICAgICAgKiBkaXNjdXNzZWQgY2hhbmdpbmcgdGhlIG92ZXJsYXkgc2VydmljZSB0byBhbGxvdyBmb3IgdGhpcyBidXQgZGVjaWRlZCBhZ2FpbnN0IHRoYXRcbiAgICAgICAgICAgICAqIGNoYW5nZSBhdCB0aGlzIHRpbWUgZHVlIHRvIGl0cyBuaWNoZSBuYXR1cmUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIG92ZXJsYXkuY29tcG9uZW50UmVmLmluc3RhbmNlLnpJbmRleCA9ICc5OTknO1xuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaW5saW5lRGVsZXRlUmVmID0gdGhpcy5pbmxpbmVEZWxldGVSZWZzXG4gICAgICAgICAgICAgICAgLnRvQXJyYXkoKVxuICAgICAgICAgICAgICAgIC5maW5kKChlbFJlZikgPT4ge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgZWxSZWYubmF0aXZlRWxlbWVudC5pZCA9PT1cbiAgICAgICAgICAgICAgICAgICAgJ3Jvdy1kZWxldGUtcmVmLScgKyBtZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBjb25zdCBhZmZpeGVyID0gdGhpcy5hZmZpeFNlcnZpY2UuY3JlYXRlQWZmaXhlcihpbmxpbmVEZWxldGVSZWYpO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJvd0VsZW1lbnQ6IEhUTUxFbGVtZW50ID1cbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAgICAgICAgICAgICAnW3NreS1jbXAtaWQ9XCInICsgbWVzc2FnZS5kYXRhLnByb21wdERlbGV0ZVJvdy5pZCArICdcIl0nLFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgYWZmaXhlci5hZmZpeFRvKHJvd0VsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhdXRvRml0Q29udGV4dDogU2t5QWZmaXhBdXRvRml0Q29udGV4dC5WaWV3cG9ydCxcbiAgICAgICAgICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdhYm92ZScsXG4gICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ6ICd0b3AnLFxuICAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6ICdsZWZ0JyxcbiAgICAgICAgICAgICAgICBlbmFibGVBdXRvRml0OiBmYWxzZSxcbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgdGhpcy5yb3dEZWxldGVDb250ZW50c1ttZXNzYWdlLmRhdGEucHJvbXB0RGVsZXRlUm93LmlkXSA9IHtcbiAgICAgICAgICAgICAgICBhZmZpeGVyOiBhZmZpeGVyLFxuICAgICAgICAgICAgICAgIG92ZXJsYXk6IG92ZXJsYXksXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNreUdyaWRNZXNzYWdlVHlwZS5BYm9ydERlbGV0ZVJvdzpcbiAgICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChtZXNzYWdlLmRhdGEgJiYgbWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93KSB7XG4gICAgICAgICAgdGhpcy5yb3dEZWxldGVDb25maWdzID0gdGhpcy5yb3dEZWxldGVDb25maWdzLmZpbHRlcihcbiAgICAgICAgICAgIChjb25maWcpID0+IGNvbmZpZy5pZCAhPT0gbWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93LmlkLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICB0aGlzLmRlc3Ryb3lSb3dEZWxldGUobWVzc2FnZS5kYXRhLmFib3J0RGVsZXRlUm93LmlkKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb25IZWFkZXJEcm9wKG5ld0NvbHVtbklkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAvLyB1cGRhdGUgc2VsZWN0ZWQgY29sdW1uSWRzXG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkc1NldCA9IHRydWU7XG4gICAgdGhpcy5zZWxlY3RlZENvbHVtbklkcyA9IG5ld0NvbHVtbklkcztcblxuICAgIC8vIG1hcmsgZm9yIGNoZWNrIGJlY2F1c2Ugd2UgYXJlIHVzaW5nIENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lm9uUHVzaFxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNldERpc3BsYXllZENvbHVtbnMocmVzcGVjdEhpZGRlbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZENvbHVtbklkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIHNldHVwIGRpc3BsYXllZCBjb2x1bW5zXG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHNcbiAgICAgICAgICAuZmlsdGVyKChjb2x1bW5JZCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sdW1ucy5maW5kKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLm1hcCgoY29sdW1uSWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbHVtbnMuZmlsdGVyKChjb2x1bW4pID0+IGNvbHVtbi5pZCA9PT0gY29sdW1uSWQpWzBdO1xuICAgICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmIChyZXNwZWN0SGlkZGVuKSB7XG4gICAgICAgIHRoaXMuZGlzcGxheWVkQ29sdW1ucyA9IHRoaXMuY29sdW1ucy5maWx0ZXIoKGNvbHVtbikgPT4ge1xuICAgICAgICAgIHJldHVybiAhY29sdW1uLmhpZGRlbjtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMgPSB0aGlzLmNvbHVtbnM7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhKCk6IHZvaWQge1xuICAgIC8vIFRyYW5zZm9ybSBkYXRhIGludG8gb2JqZWN0IHdpdGggaWQgYW5kIGRhdGEgcHJvcGVydGllc1xuICAgIGlmIChcbiAgICAgIHRoaXMuZGF0YSAmJlxuICAgICAgdGhpcy5kYXRhLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMuZGF0YVswXS5pZCAmJlxuICAgICAgIXRoaXMuZGF0YVswXS5kYXRhXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXNlbGVjdFJvd0lkKSB7XG4gICAgICAgIHRoaXMuaXRlbXMgPSB0aGlzLmdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IG5ldyBMaXN0SXRlbU1vZGVsKGl0ZW0uaWQsIGl0ZW0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pdGVtcyA9IHRoaXMuZGF0YTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEdyaWREYXRhV2l0aFNlbGVjdGVkUm93cygpOiBMaXN0SXRlbU1vZGVsW10ge1xuICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZ2V0U2VsZWN0ZWRSb3dzKCk7XG4gICAgcmV0dXJuIHRoaXMuZGF0YS5tYXAoKGl0ZW0pID0+IHtcbiAgICAgIGxldCBjaGVja2VkO1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLCB0aGlzLm11bHRpc2VsZWN0Um93SWQpKSB7XG4gICAgICAgIGNoZWNrZWQgPSBzZWxlY3RlZFJvd3MuaW5kZXhPZihpdGVtW3RoaXMubXVsdGlzZWxlY3RSb3dJZF0pID4gLTE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjaGVja2VkID0gc2VsZWN0ZWRSb3dzLmluZGV4T2YoaXRlbS5pZCkgPiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgTGlzdEl0ZW1Nb2RlbChpdGVtLmlkLCBpdGVtLCBjaGVja2VkKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlTZWxlY3RlZFJvd3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXRlbXMgJiYgdGhpcy5pdGVtcy5sZW5ndGggPiAwICYmIHRoaXMuc2VsZWN0ZWRSb3dJZHMpIHtcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLml0ZW1zKSB7XG4gICAgICAgIGl0ZW0uaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRSb3dJZHMuaW5kZXhPZihpdGVtLmlkKSA+IC0xO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFNvcnRIZWFkZXJzKCk6IHZvaWQge1xuICAgIHRoaXMuY3VycmVudFNvcnRGaWVsZC5uZXh0KFxuICAgICAgdGhpcy5zb3J0RmllbGQgfHwgeyBmaWVsZFNlbGVjdG9yOiAnJywgZGVzY2VuZGluZzogZmFsc2UgfSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbkNvbXBvbmVudHMubWFwKChjb2x1bW5Db21wb25lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgU2t5R3JpZENvbHVtbk1vZGVsKGNvbHVtbkNvbXBvbmVudC50ZW1wbGF0ZSwgY29sdW1uQ29tcG9uZW50KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ29sdW1ucygpOiB2b2lkIHtcbiAgICB0aGlzLmdldENvbHVtbnNGcm9tQ29tcG9uZW50KCk7XG5cbiAgICAvLyBUaGlzIHNldCB0aW1lb3V0IGlzIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGNvbHVtbnMgaGF2ZSByZW5kZXJlZCBpbiB0aGUgZ3JpZFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5jaGVja1VzZXJDb2x1bW5XaWR0aHNGb3JTY3JvbGwoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzaXplQ29sdW1uQnlJbmRleChcbiAgICBjb2x1bW5JbmRleDogc3RyaW5nLFxuICAgIG5ld0NvbFdpZHRoOiBudW1iZXIsXG4gICAgZGVsdGFYOiBudW1iZXIsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGNvbHVtbkluZGV4KTtcblxuICAgIC8vIFByZXZlbnQgYWNjaWRlbnRhbCBzaHJpbmthZ2UgYmVsb3cgbWluaW11bSB3aWR0aC5cbiAgICBpZiAobmV3Q29sV2lkdGggPD0gdGhpcy5taW5Db2xXaWR0aCkge1xuICAgICAgZGVsdGFYID0gZGVsdGFYICsgdGhpcy5taW5Db2xXaWR0aCAtIG5ld0NvbFdpZHRoO1xuICAgICAgbmV3Q29sV2lkdGggPSB0aGlzLm1pbkNvbFdpZHRoO1xuICAgIH1cblxuICAgIC8vIGZpdD13aWR0aCBhZGRzL3JlbW92ZXMgd2lkdGggZnJvbSB0aGUgbGFzdCBjb2x1bW5cbiAgICAvLyBmaXQ9c2Nyb2xsIGFkZHMvcmVtb3ZlcyB3aWR0aCBmcm9tIHRoZSB0YWJsZVxuICAgIGlmICh0aGlzLmZpdCA9PT0gJ3dpZHRoJykge1xuICAgICAgY29uc3QgbGFzdENvbHVtbiA9IHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpO1xuXG4gICAgICAvLyBQcmV2ZW50IGFjY2lkZW50YWwgZ3Jvd3RoIHRoYXQgd291bGQgYnVtcCBsYXN0IGNvbHVtbiBvZmYgc2NyZWVuLlxuICAgICAgY29uc3QgbWF4ID0gdGhpcy5nZXRNYXhSYW5nZUJ5SW5kZXgoY29sdW1uSW5kZXgpO1xuICAgICAgaWYgKG5ld0NvbFdpZHRoID4gbWF4KSB7XG4gICAgICAgIG5ld0NvbFdpZHRoID0gbWF4O1xuICAgICAgICBkZWx0YVggPSBtYXggLSB0aGlzLnN0YXJ0Q29sdW1uV2lkdGg7XG4gICAgICB9XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICAgIGxhc3RDb2x1bW4ud2lkdGggPSBsYXN0Q29sdW1uLndpZHRoIC0gZGVsdGFYO1xuICAgICAgdGhpcy51cGRhdGVNYXhSYW5nZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKFxuICAgICAgICB0aGlzLnRhYmxlRWxlbWVudFJlZixcbiAgICAgICAgJ3dpZHRoJyxcbiAgICAgICAgYCR7dGhpcy50YWJsZVdpZHRoICsgZGVsdGFYfXB4YCxcbiAgICAgICk7XG4gICAgICBjb2x1bW4ud2lkdGggPSBuZXdDb2xXaWR0aDtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmNvbHVtbldpZHRoQ2hhbmdlLmVtaXQodGhpcy5nZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1uV2lkdGhzKCk6IHZvaWQge1xuICAgIC8vIEVzdGFibGlzaCB0YWJsZSB3aWR0aC5cbiAgICB0aGlzLnNob3dUb3BTY3JvbGwgPSB0cnVlO1xuXG4gICAgLy8gU2V0IGNvbHVtbiB3aWR0aHMgYmFzZWQgb24gdGhlIHdpZHRoIGluaXRpYWxseSBnaXZlbiBieSB0aGUgYnJvd3Nlci5cbiAgICAvLyBjb21wdXRlZFdpZHRoIHByZXZlbnRzIGFjY2lkZW50YWwgb3ZlcmZsb3cgZm9yIGJyb3dzZXJzIHdpdGggc3ViLXBpeGVsIHdpZHRocy5cbiAgICB0aGlzLmNvbHVtbkVsZW1lbnRSZWZzLmZvckVhY2goKGNvbCwgaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbXB1dGVkV2lkdGggPSBwYXJzZUZsb2F0KFxuICAgICAgICB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjb2wubmF0aXZlRWxlbWVudCkud2lkdGgsXG4gICAgICApO1xuICAgICAgY29uc3Qgb2Zmc2V0V2lkdGggPSBjb2wubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleChpbmRleCkud2lkdGggPSBNYXRoLm1heChcbiAgICAgICAgY29tcHV0ZWRXaWR0aCB8fCBvZmZzZXRXaWR0aCxcbiAgICAgICAgdGhpcy5taW5Db2xXaWR0aCxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyAnc2Nyb2xsJyB0YWJsZXMgc2hvdWxkIGJlIGFsbG93ZWQgdG8gZXhwYW5kIG91dHNpZGUgb2YgdGhlaXIgY29uc3RyYWludHMuXG4gICAgaWYgKHRoaXMuZml0ID09PSAnc2Nyb2xsJykge1xuICAgICAgdGhpcy5ncmlkQWRhcHRlci5zZXRTdHlsZSh0aGlzLnRhYmxlRWxlbWVudFJlZiwgJ21pbi13aWR0aCcsICdhdXRvJyk7XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIG1heCBsaW1pdHMgZm9yIGlucHV0IHJhbmdlcy5cbiAgICBpZiAodGhpcy5maXQgPT09ICd3aWR0aCcpIHtcbiAgICAgIHRoaXMudXBkYXRlTWF4UmFuZ2UoKTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmZXJDb2x1bW5XaWR0aHMoXG4gICAgb2xkQ29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICAgbmV3Q29sdW1uczogU2t5R3JpZENvbHVtbk1vZGVsW10sXG4gICk6IHZvaWQge1xuICAgIC8qIHNhbml0eSBjaGVjayAqL1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKG9sZENvbHVtbnMgJiYgbmV3Q29sdW1ucykge1xuICAgICAgZm9yIChjb25zdCBvbGRDb2x1bW4gb2Ygb2xkQ29sdW1ucykge1xuICAgICAgICBpZiAob2xkQ29sdW1uLndpZHRoKSB7XG4gICAgICAgICAgY29uc3QgbWF0Y2hpbmdDb2x1bW4gPSBuZXdDb2x1bW5zLmZpbmQoXG4gICAgICAgICAgICAobmV3Q29sdW1uKSA9PiBvbGRDb2x1bW4uaWQgPT09IG5ld0NvbHVtbi5pZCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChtYXRjaGluZ0NvbHVtbiAmJiAhbWF0Y2hpbmdDb2x1bW4ud2lkdGgpIHtcbiAgICAgICAgICAgIG1hdGNoaW5nQ29sdW1uLndpZHRoID0gb2xkQ29sdW1uLndpZHRoO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlKCk6IFNreUdyaWRDb2x1bW5XaWR0aE1vZGVsQ2hhbmdlW10ge1xuICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kZWxDaGFuZ2UgPSBuZXcgQXJyYXk8U2t5R3JpZENvbHVtbldpZHRoTW9kZWxDaGFuZ2U+KCk7XG4gICAgdGhpcy5jb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgY29sdW1uV2lkdGhNb2RlbENoYW5nZS5wdXNoKHtcbiAgICAgICAgaWQ6IGNvbHVtbi5pZCxcbiAgICAgICAgZmllbGQ6IGNvbHVtbi5maWVsZCxcbiAgICAgICAgd2lkdGg6IGNvbHVtbi53aWR0aCxcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGVsQ2hhbmdlO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNYXhSYW5nZSgpOiB2b2lkIHtcbiAgICBjb25zdCBsZWZ0b3ZlcldpZHRoID1cbiAgICAgIHRoaXMuZ2V0TGFzdERpc3BsYXllZENvbHVtbigpLndpZHRoIC0gdGhpcy5taW5Db2xXaWR0aDtcbiAgICB0aGlzLmRpc3BsYXllZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbmV3TWF4UmFuZ2UgPSBjb2x1bW4ud2lkdGggKyBsZWZ0b3ZlcldpZHRoO1xuICAgICAgY29uc3QgcmFuZ2VJbnB1dCA9IHRoaXMuZ2V0UmFuZ2VJbnB1dEJ5SW5kZXgoaW5kZXgpO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50Lm1heCA9IG5ld01heFJhbmdlO1xuICAgICAgcmFuZ2VJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS12YWx1ZW1heCcsIG5ld01heFJhbmdlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVJlc2l6ZUNvbHVtbihldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tUYXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgdGhpcy5hY3RpdmVSZXNpemVDb2x1bW5JbmRleCA9IGNsaWNrVGFyZ2V0LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpO1xuICAgIGNvbnN0IGNvbHVtbiA9IHRoaXMuZ2V0Q29sdW1uTW9kZWxCeUluZGV4KHRoaXMuYWN0aXZlUmVzaXplQ29sdW1uSW5kZXgpO1xuICAgIHRoaXMuc3RhcnRDb2x1bW5XaWR0aCA9IGNvbHVtbi53aWR0aDtcbiAgfVxuXG4gIHByaXZhdGUgcmVzZXRUYWJsZVdpZHRoKCk6IHZvaWQge1xuICAgIHRoaXMuc2t5V2luZG93Lm5hdGl2ZVdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUodGhpcy50YWJsZUVsZW1lbnRSZWYsICd3aWR0aCcsIGBhdXRvYCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIHRoaXMuZ3JpZEFkYXB0ZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMudGFibGVFbGVtZW50UmVmLFxuICAgICAgICAnd2lkdGgnLFxuICAgICAgICBgJHt0aGlzLnRhYmxlV2lkdGh9cHhgLFxuICAgICAgKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSYW5nZUlucHV0QnlJbmRleChpbmRleDogc3RyaW5nIHwgbnVtYmVyKTogRWxlbWVudFJlZiB7XG4gICAgcmV0dXJuIHRoaXMuY29sdW1uUmFuZ2VJbnB1dEVsZW1lbnRSZWZzLmZpbmQoXG4gICAgICAoaW5wdXQpID0+XG4gICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZ2V0QXR0cmlidXRlKCdza3ktY21wLWluZGV4JykgPT09IGluZGV4LnRvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29sdW1uTW9kZWxCeUluZGV4KGluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBTa3lHcmlkQ29sdW1uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmRpc3BsYXllZENvbHVtbnNbTnVtYmVyKGluZGV4KV07XG4gIH1cblxuICBwcml2YXRlIGdldE1heFJhbmdlQnlJbmRleChpbmRleDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBjb25zdCBjb2x1bW5FbGVtZW50UmVmID0gdGhpcy5jb2x1bW5FbGVtZW50UmVmcy5maW5kKFxuICAgICAgKHRoKSA9PiB0aC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2t5LWNtcC1pbmRleCcpID09PSBpbmRleCxcbiAgICApO1xuICAgIGNvbnN0IHJhbmdlSW5wdXQgPSBjb2x1bW5FbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcbiAgICAgICcuc2t5LWdyaWQtY29sdW1uLWlucHV0LWFyaWEtb25seScsXG4gICAgKTtcbiAgICByZXR1cm4gTnVtYmVyKHJhbmdlSW5wdXQubWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TGFzdERpc3BsYXllZENvbHVtbigpOiBTa3lHcmlkQ29sdW1uTW9kZWwge1xuICAgIHJldHVybiB0aGlzLmdldENvbHVtbk1vZGVsQnlJbmRleCh0aGlzLmRpc3BsYXllZENvbHVtbnMubGVuZ3RoIC0gMSk7XG4gIH1cblxuICBwcml2YXRlIGFkZERlbGltaXRlcih0ZXh0OiBzdHJpbmdbXSwgZGVsaW1pdGVyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0ZXh0LmZpbHRlcigodmFsKSA9PiB2YWwpLmpvaW4oZGVsaW1pdGVyKTtcbiAgfVxuXG4gIHByaXZhdGUgZGVzdHJveVJvd0RlbGV0ZShpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qgcm93RGVsZXRlQ29udGVudHMgPSB0aGlzLnJvd0RlbGV0ZUNvbnRlbnRzW2lkXTtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChyb3dEZWxldGVDb250ZW50cykge1xuICAgICAgcm93RGVsZXRlQ29udGVudHMuYWZmaXhlci5kZXN0cm95KCk7XG4gICAgICB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsb3NlKHJvd0RlbGV0ZUNvbnRlbnRzLm92ZXJsYXkpO1xuICAgICAgZGVsZXRlIHRoaXMucm93RGVsZXRlQ29udGVudHNbaWRdO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW1pdFNlbGVjdGVkUm93cyhzb3VyY2U6IFNreUdyaWRTZWxlY3RlZFJvd3NTb3VyY2UpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZFJvd3M6IFNreUdyaWRTZWxlY3RlZFJvd3NNb2RlbENoYW5nZSA9IHtcbiAgICAgIHNlbGVjdGVkUm93SWRzOiB0aGlzLmdldFNlbGVjdGVkUm93cygpLFxuICAgICAgc291cmNlOiBzb3VyY2UsXG4gICAgfTtcbiAgICB0aGlzLm11bHRpc2VsZWN0U2VsZWN0aW9uQ2hhbmdlLmVtaXQoc2VsZWN0ZWRSb3dzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRSb3dzKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5pdGVtc1xuICAgICAgLmZpbHRlcigoaXRlbSkgPT4ge1xuICAgICAgICByZXR1cm4gaXRlbS5pc1NlbGVjdGVkO1xuICAgICAgfSlcbiAgICAgIC5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChpdGVtLmRhdGEsIHRoaXMubXVsdGlzZWxlY3RSb3dJZClcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0uZGF0YVt0aGlzLm11bHRpc2VsZWN0Um93SWRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzSW50ZXJhY3RpdmVFbGVtZW50KGV2ZW50OiBhbnkpOiBhbnkge1xuICAgIGNvbnN0IGludGVyYWN0aXZlRWxTZWxlY3RvcnMgPSBgXG4gICAgICBhLFxuICAgICAgYnV0dG9uLFxuICAgICAgaW5wdXQsXG4gICAgICBsYWJlbCxcbiAgICAgIG9wdGlvbixcbiAgICAgIHNlbGVjdCxcbiAgICAgIHRleHRhcmVhLFxuICAgICAgZGV0YWlscyxcbiAgICAgIGRpYWxvZyxcbiAgICAgIG1lbnUsXG4gICAgICBtZW51aXRlbSxcbiAgICAgIHN1bW1hcnlgO1xuICAgIHJldHVybiBldmVudC50YXJnZXQuY2xvc2VzdChpbnRlcmFjdGl2ZUVsU2VsZWN0b3JzKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVzaXplQmFyUG9zaXRpb24oeFBvc2l0aW9uOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJlbnRTY3JvbGwgPSB0aGlzLnRhYmxlQ29udGFpbmVyRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnNjcm9sbExlZnQ7XG4gICAgY29uc3QgcmVzaXplQmFyWCA9XG4gICAgICB4UG9zaXRpb24gLVxuICAgICAgdGhpcy50YWJsZUVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cbiAgICAgIHBhcmVudFNjcm9sbDtcbiAgICB0aGlzLmdyaWRBZGFwdGVyLnNldFN0eWxlKHRoaXMucmVzaXplQmFyLCAnbGVmdCcsIHJlc2l6ZUJhclggKyAncHgnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlVc2VyQ29uZmlnKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgdGhpcy51aUNvbmZpZ1NlcnZpY2VcbiAgICAgICAgLmdldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5KVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChjb25maWc6IFNreUdyaWRVSUNvbmZpZykgPT4ge1xuICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnNlbGVjdGVkQ29sdW1uSWRzKSB7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSBhbnkgY29sdW1uSWRzIHRoYXQgZG9uJ3QgZXhpc3QgaW4gdGhlIGN1cnJlbnQgZGF0YSBzZXQuXG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb2x1bW5JZHMgPSBjb25maWcuc2VsZWN0ZWRDb2x1bW5JZHMuZmlsdGVyKChpZCkgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbnMuZmluZCgoY29sdW1uKSA9PiBjb2x1bW4uaWQgPT09IGlkKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldFVzZXJDb25maWcoY29uZmlnOiBTa3lHcmlkVUlDb25maWcpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2V0dGluZ3NLZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnVpQ29uZmlnU2VydmljZVxuICAgICAgLnNldENvbmZpZyh0aGlzLnNldHRpbmdzS2V5LCBjb25maWcpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgICAgICAgKCkgPT4ge30sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzYXZlIGdyaWQgc2V0dGluZ3MuJyk7XG4gICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgIH0sXG4gICAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0Q29sdW1ucygpOiB2b2lkIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmICh0aGlzLmNvbHVtbkNvbXBvbmVudHMubGVuZ3RoICE9PSAwIHx8IHRoaXMuY29sdW1ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgLyogc2FuaXR5IGNoZWNrICovXG4gICAgICBpZiAodGhpcy5jb2x1bW5Db21wb25lbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5nZXRDb2x1bW5zRnJvbUNvbXBvbmVudCgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnRyYW5zZm9ybURhdGEoKTtcbiAgICAgIHRoaXMuc2V0RGlzcGxheWVkQ29sdW1ucyh0cnVlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgLy8gV2F0Y2ggZm9yIGFkZGVkL3JlbW92ZWQgY29sdW1uczpcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnVwZGF0ZUNvbHVtbnMoKSksXG4gICAgKTtcblxuICAgIC8vIFdhdGNoIGZvciBjb2x1bW4gaGVhZGluZyBjaGFuZ2VzOlxuICAgIHRoaXMuY29sdW1uQ29tcG9uZW50cy5mb3JFYWNoKChjb21wOiBTa3lHcmlkQ29sdW1uQ29tcG9uZW50KSA9PiB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcbiAgICAgICAgY29tcC5oZWFkaW5nTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uSGVhZGluZ01vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbHVtbkhlYWRpbmcoY2hhbmdlKTtcbiAgICAgICAgICB9LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxuICAgICAgICBjb21wLmRlc2NyaXB0aW9uTW9kZWxDaGFuZ2VzLnN1YnNjcmliZShcbiAgICAgICAgICAoY2hhbmdlOiBTa3lHcmlkQ29sdW1uRGVzY3JpcHRpb25Nb2RlbENoYW5nZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVDb2x1bW5EZXNjcmlwdGlvbihjaGFuZ2UpO1xuICAgICAgICAgIH0sXG4gICAgICAgICksXG4gICAgICApO1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXG4gICAgICAgIGNvbXAuaW5saW5lSGVscFBvcG92ZXJNb2RlbENoYW5nZXMuc3Vic2NyaWJlKFxuICAgICAgICAgIChjaGFuZ2U6IFNreUdyaWRDb2x1bW5JbmxpbmVIZWxwUG9wb3Zlck1vZGVsQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUlubGluZUhlbHBQb3BvdmVyKGNoYW5nZSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5c0VxdWFsKGFycmF5QTogYW55W10sIGFycmF5QjogYW55W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXJyYXlBLmxlbmd0aCA9PT0gYXJyYXlCLmxlbmd0aCAmJlxuICAgICAgYXJyYXlBLmV2ZXJ5KCh2YWx1ZSwgaW5kZXgpID0+IHZhbHVlID09PSBhcnJheUJbaW5kZXhdKVxuICAgICk7XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJza3ktZ3JpZFwiPlxuICBAaWYgKHNob3dUb3BTY3JvbGwpIHtcbiAgICA8ZGl2XG4gICAgICAjdG9wU2Nyb2xsQ29udGFpbmVyXG4gICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGwtY29udGFpbmVyXCJcbiAgICAgIChzY3JvbGwpPVwib25Ub3BTY3JvbGwoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cInNreS1ncmlkLXRvcC1zY3JvbGxcIlxuICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiZ2V0VG9wU2Nyb2xsV2lkdGgoKVwiXG4gICAgICA+PC9kaXY+XG4gICAgPC9kaXY+XG4gIH1cbiAgPGRpdlxuICAgICNncmlkQ29udGFpbmVyXG4gICAgY2xhc3M9XCJza3ktZ3JpZC10YWJsZS1jb250YWluZXJcIlxuICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiaGVpZ2h0XCJcbiAgICBbc3R5bGUud2lkdGgucHhdPVwid2lkdGhcIlxuICAgIChzY3JvbGwpPVwib25HcmlkU2Nyb2xsKCRldmVudClcIlxuICA+XG4gICAgPHRhYmxlICNncmlkVGFibGUgY2xhc3M9XCJza3ktZ3JpZC10YWJsZVwiIFtuZ0NsYXNzXT1cImdldFRhYmxlQ2xhc3NOYW1lcygpXCI+XG4gICAgICA8dGhlYWQ+XG4gICAgICAgIDx0ciBbZHJhZ3VsYV09XCJkcmFndWxhR3JvdXBOYW1lXCI+XG4gICAgICAgICAgQGlmIChlbmFibGVNdWx0aXNlbGVjdCkge1xuICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtaGVhZGluZyBza3ktZ3JpZC1tdWx0aXNlbGVjdC1jZWxsIHNreS1ncmlkLWhlYWRlci1sb2NrZWRcIlxuICAgICAgICAgICAgICBzY29wZT1cImNvbFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNjcmVlbi1yZWFkZXItb25seVwiPlxuICAgICAgICAgICAgICAgIHt7ICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzIH19XG4gICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICAgIEBmb3IgKFxuICAgICAgICAgICAgY29sdW1uIG9mIGRpc3BsYXllZENvbHVtbnM7XG4gICAgICAgICAgICB0cmFjayBjb2x1bW47XG4gICAgICAgICAgICBsZXQgbGFzdCA9ICRsYXN0O1xuICAgICAgICAgICAgbGV0IGkgPSAkaW5kZXhcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIDx0aFxuICAgICAgICAgICAgICAjZ3JpZENvbFxuICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmcgc2t5LWZpZWxkLWxhYmVsXCJcbiAgICAgICAgICAgICAgc2NvcGU9XCJjb2xcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWlkXT1cImNvbHVtbi5pZCB8fCBjb2x1bW4uZmllbGRcIlxuICAgICAgICAgICAgICBbYXR0ci5hcmlhLXNvcnRdPVwiZ2V0QXJpYVNvcnREaXJlY3Rpb24oY29sdW1uKSB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgW2lkXT1cIidza3ktZ3JpZC0nICsgZ3JpZElkICsgJy1jb2x1bW4tJyArIGlcIlxuICAgICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbHVtbi53aWR0aFwiXG4gICAgICAgICAgICAgIFt0YWJJbmRleF09XCJjb2x1bW4uaXNTb3J0YWJsZSA/IDAgOiAtMVwiXG4gICAgICAgICAgICAgIChtb3VzZXVwKT1cInNvcnRCeUNvbHVtbihjb2x1bW4pXCJcbiAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duKCRldmVudCwgY29sdW1uKVwiXG4gICAgICAgICAgICAgICh0b3VjaG1vdmUpPVwib25Ub3VjaE1vdmUoJGV2ZW50KVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm92ZXJmbG93XCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJnZXRUYWJsZUhlYWRlckNsYXNzTmFtZXMoY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGggLSAxXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwiY29sdW1uLndpZHRoIC0gMVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2t5LWdyaWQtaGVhZGVyLWNhcmV0LWhpZGRlbi1zcGFjaW5nXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8IS0tIFRoZSBubyBzcGFjaW5nIGhlcmUgaXMgaW50ZW50aW9uYWwgdG8gYXZvaWQgZXh0cmEgc3BhY2VzIGR1ZSB0byB0aGVzZSBiZWluZyBpbmxpbmUgZWxlbWVudHMgLS0+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJza3ktZ3JpZC1oZWFkZXItdGV4dFwiPnt7XG4gICAgICAgICAgICAgICAgICBjb2x1bW4uaGVhZGluZz8udHJpbSgpXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNreS1pY29uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLWhlYWRpbmctc29ydFwiXG4gICAgICAgICAgICAgICAgICB2YXJpYW50PVwic29saWRcIlxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICdza3ktZ3JpZC1oZWFkaW5nLXNvcnQtJyArXG4gICAgICAgICAgICAgICAgICAgIChnZXRDYXJldFZpc2liaWxpdHkoY29sdW1uLmZpZWxkKSB8IGFzeW5jKVxuICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICAgIFtpY29uTmFtZV09XCJnZXRDYXJldEljb25OYW1lcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uLmlubGluZUhlbHBQb3BvdmVyKSB7XG4gICAgICAgICAgICAgICAgICA8c2t5LWhlbHAtaW5saW5lXG4gICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAnc2t5LWdyaWQtaGVscC1pbmxpbmUtc29ydC1oaWRkZW4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0SGVscElubGluZUNsYXNzKGNvbHVtbi5maWVsZCkgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgW3NreVBvcG92ZXJdPVwiY29sdW1uLmlubGluZUhlbHBQb3BvdmVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uc3BhY2UpPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgKG1vdXNlZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAobW91c2V1cCk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICBAaWYgKChmaXQgPT09ICd3aWR0aCcgJiYgIWxhc3QpIHx8IGZpdCA9PT0gJ3Njcm9sbCcpIHtcbiAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtcmVzaXplLWhhbmRsZVwiXG4gICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaW5kZXhdPVwiaVwiXG4gICAgICAgICAgICAgICAgICAobW91c2Vkb3duKT1cIm9uUmVzaXplQ29sdW1uU3RhcnQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAodG91Y2hzdGFydCk9XCJvblJlc2l6ZUNvbHVtblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI2NvbFNpemVSYW5nZVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9XCJXaWR0aCBvZiBjb2x1bW5cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2t5LWdyaWQtY29sdW1uLWlucHV0LWFyaWEtb25seVwiXG4gICAgICAgICAgICAgICAgcm9sZT1cInNsaWRlclwiXG4gICAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIidza3ktZ3JpZC0nICsgZ3JpZElkICsgJy1jb2x1bW4tJyArIGlcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVtYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtdmFsdWVub3ddPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5za3ktY21wLWluZGV4XT1cImlcIlxuICAgICAgICAgICAgICAgIFttaW5dPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFttYXhdPVwibWF4Q29sV2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdGVwXT1cImNvbHVtblJlc2l6ZVN0ZXBcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiY29sdW1uLndpZHRoXCJcbiAgICAgICAgICAgICAgICAoYmx1cik9XCJvblJlc2l6ZUhhbmRsZUJsdXIoKVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uUmVzaXplSGFuZGxlRm9jdXMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duUmVzaXplQ29sKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25JbnB1dENoYW5nZVJlc2l6ZUNvbCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgfVxuICAgICAgICA8L3RyPlxuICAgICAgPC90aGVhZD5cbiAgICAgIDx0Ym9keSBjbGFzcz1cInNreS1ncmlkLXRib2R5XCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXM7IHRyYWNrIGl0ZW07IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgPHRyXG4gICAgICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJvd1wiXG4gICAgICAgICAgICBbYXR0ci5hcmlhLWN1cnJlbnRdPVwiaXNSb3dIaWdobGlnaHRlZChpdGVtLmlkKSA/IHRydWUgOiBudWxsXCJcbiAgICAgICAgICAgIFthdHRyLnNreS1jbXAtaWRdPVwiaXRlbS5pZFwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1zZWxlY3RlZC1yb3cnOiBpdGVtLmlzU2VsZWN0ZWQsXG4gICAgICAgICAgICAgICdza3ktZ3JpZC1tdWx0aXNlbGVjdC1yb3cnOiBlbmFibGVNdWx0aXNlbGVjdCxcbiAgICAgICAgICAgICAgJ3NreS1ncmlkLXJvdy1oaWdobGlnaHQnOiBpc1Jvd0hpZ2hsaWdodGVkKGl0ZW0uaWQpXG4gICAgICAgICAgICB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoZW5hYmxlTXVsdGlzZWxlY3QpIHtcbiAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2t5LWdyaWQtbXVsdGlzZWxlY3QtY2VsbCBza3ktZ3JpZC1oZWFkZXItbG9ja2VkXCI+XG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJtaW5Db2xXaWR0aFwiXG4gICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibWluQ29sV2lkdGhcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxza3ktY2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICdza3l1eF9ncmlkX211bHRpc2VsZWN0X3NlbGVjdF9yb3cnIHwgc2t5TGliUmVzb3VyY2VzXG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5pc1NlbGVjdGVkXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbk11bHRpc2VsZWN0Q2hlY2tib3hDaGFuZ2UoKVwiXG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgQGZvciAoXG4gICAgICAgICAgICAgIGNvbHVtbiBvZiBkaXNwbGF5ZWRDb2x1bW5zO1xuICAgICAgICAgICAgICB0cmFjayBjb2x1bW47XG4gICAgICAgICAgICAgIGxldCBsYXN0ID0gJGxhc3Q7XG4gICAgICAgICAgICAgIGxldCBpID0gJGluZGV4XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJza3ktZ3JpZC1jZWxsXCJcbiAgICAgICAgICAgICAgICBbbmdDbGFzc109XCInc2t5LWdyaWQtY29sdW1uLWFsaWdubWVudC0nICsgY29sdW1uLmFsaWdubWVudFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb2x1bW4ud2lkdGhcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNreS1ncmlkLWNlbGxcbiAgICAgICAgICAgICAgICAgIFtza3lIaWdobGlnaHRdPVwiXG4gICAgICAgICAgICAgICAgICAgICFjb2x1bW4uZXhjbHVkZUZyb21IaWdobGlnaHRpbmcgPyBoaWdobGlnaHRUZXh0IDogdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cImNvbHVtbi50ZW1wbGF0ZSB8fCBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcbiAgICAgICAgICAgICAgICAgIFtmaWVsZFNlbGVjdG9yXT1cImNvbHVtbi5maWVsZFwiXG4gICAgICAgICAgICAgICAgICBbaXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2x1bW5JZF09XCJjb2x1bW4uaWRcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuc2t5LWNtcC1pZF09XCJjb2x1bW4uaWQgfHwgY29sdW1uLmZpZWxkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIH1cbiAgICAgIDwvdGJvZHk+XG4gICAgPC90YWJsZT5cbiAgICBAaWYgKHNob3dSZXNpemVCYXIpIHtcbiAgICAgIDxkaXZcbiAgICAgICAgI3Jlc2l6ZUJhclxuICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICBjbGFzcz1cInNreS1ncmlkLXJlc2l6ZS1iYXJcIlxuICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgID48L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjZGVmYXVsdENlbGxUZW1wbGF0ZSBsZXQtcm93PVwicm93XCIgbGV0LXZhbHVlPVwidmFsdWVcIj57e1xuICB2YWx1ZVxufX08L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2lubGluZURlbGV0ZVRlbXBsYXRlUmVmIGxldC1pdGVtPlxuICA8ZGl2XG4gICAgI2lubGluZURlbGV0ZVJlZlxuICAgIFtpZF09XCIncm93LWRlbGV0ZS1yZWYtJyArIGl0ZW0uaWRcIlxuICAgIFtuZ1N0eWxlXT1cIntcbiAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KDApLFxuICAgICAgcG9zaXRpb246ICdmaXhlZCcsXG4gICAgICB3aWR0aDogdGFibGVXaWR0aCArICdweCdcbiAgICB9XCJcbiAgPlxuICAgIDxza3ktaW5saW5lLWRlbGV0ZVxuICAgICAgW3BlbmRpbmddPVwiZ2V0Um93RGVsZXRlSXRlbShpdGVtLmlkKS5wZW5kaW5nXCJcbiAgICAgIChjYW5jZWxUcmlnZ2VyZWQpPVwiY2FuY2VsUm93RGVsZXRlKGl0ZW0uaWQpXCJcbiAgICAgIChkZWxldGVUcmlnZ2VyZWQpPVwiY29uZmlybVJvd0RlbGV0ZShpdGVtLmlkKVwiXG4gICAgLz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SkyAffixModule } from '@skyux/core';\nimport { SkyCheckboxModule } from '@skyux/forms';\nimport { SkyHelpInlineModule } from '@skyux/help-inline';\nimport { SkyIconModule } from '@skyux/icon';\nimport { SkyTextHighlightModule } from '@skyux/indicators';\nimport { SkyInlineDeleteModule } from '@skyux/layout';\nimport { SkyPopoverModule } from '@skyux/popovers';\nimport { DragulaModule } from 'ng2-dragula';\nimport { SkyGridsResourcesModule } from '../shared/sky-grids-resources.module';\nimport { SkyGridCellComponent } from './grid-cell.component';\nimport { SkyGridColumnComponent } from './grid-column.component';\nimport { SkyGridComponent } from './grid.component';\nimport * as i0 from \"@angular/core\";\n/**\n * @deprecated `SkyGridComponent` and its features are deprecated. We recommend using the data grid instead. For more information, see https://developer.blackbaud.com/skyux/components/data-grid\n */\nexport class SkyGridModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridModule, declarations: [SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent], imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule], exports: [SkyGridComponent, SkyGridColumnComponent] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridModule, imports: [CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.0\", ngImport: i0, type: SkyGridModule, decorators: [{\n type: NgModule,\n args: [{\n declarations: [\n SkyGridComponent,\n SkyGridColumnComponent,\n SkyGridCellComponent,\n ],\n imports: [\n CommonModule,\n DragulaModule,\n FormsModule,\n SkyAffixModule,\n SkyCheckboxModule,\n SkyGridsResourcesModule,\n SkyHelpInlineModule,\n SkyIconModule,\n SkyInlineDeleteModule,\n SkyPopoverModule,\n SkyTextHighlightModule,\n ],\n exports: [SkyGridComponent, SkyGridColumnComponent],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL2xpYi9tb2R1bGVzL2dyaWQvZ3JpZC5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDN0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ2pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDM0QsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3RELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFL0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDakUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRXBEOztHQUVHO0FBc0JILE1BQU0sT0FBTyxhQUFhOzhHQUFiLGFBQWE7K0dBQWIsYUFBYSxpQkFuQnRCLGdCQUFnQjtZQUNoQixzQkFBc0I7WUFDdEIsb0JBQW9CLGFBR3BCLFlBQVk7WUFDWixhQUFhO1lBQ2IsV0FBVztZQUNYLGNBQWM7WUFDZCxpQkFBaUI7WUFDakIsdUJBQXVCO1lBQ3ZCLG1CQUFtQjtZQUNuQixhQUFhO1lBQ2IscUJBQXFCO1lBQ3JCLGdCQUFnQjtZQUNoQixzQkFBc0IsYUFFZCxnQkFBZ0IsRUFBRSxzQkFBc0I7K0dBRXZDLGFBQWEsWUFkdEIsWUFBWTtZQUNaLGFBQWE7WUFDYixXQUFXO1lBQ1gsY0FBYztZQUNkLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsbUJBQW1CO1lBQ25CLGFBQWE7WUFDYixxQkFBcUI7WUFDckIsZ0JBQWdCO1lBQ2hCLHNCQUFzQjs7MkZBSWIsYUFBYTtrQkFyQnpCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFO3dCQUNaLGdCQUFnQjt3QkFDaEIsc0JBQXNCO3dCQUN0QixvQkFBb0I7cUJBQ3JCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGFBQWE7d0JBQ2IsV0FBVzt3QkFDWCxjQUFjO3dCQUNkLGlCQUFpQjt3QkFDakIsdUJBQXVCO3dCQUN2QixtQkFBbUI7d0JBQ25CLGFBQWE7d0JBQ2IscUJBQXFCO3dCQUNyQixnQkFBZ0I7d0JBQ2hCLHNCQUFzQjtxQkFDdkI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsc0JBQXNCLENBQUM7aUJBQ3BEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNreUFmZml4TW9kdWxlIH0gZnJvbSAnQHNreXV4L2NvcmUnO1xuaW1wb3J0IHsgU2t5Q2hlY2tib3hNb2R1bGUgfSBmcm9tICdAc2t5dXgvZm9ybXMnO1xuaW1wb3J0IHsgU2t5SGVscElubGluZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9oZWxwLWlubGluZSc7XG5pbXBvcnQgeyBTa3lJY29uTW9kdWxlIH0gZnJvbSAnQHNreXV4L2ljb24nO1xuaW1wb3J0IHsgU2t5VGV4dEhpZ2hsaWdodE1vZHVsZSB9IGZyb20gJ0Bza3l1eC9pbmRpY2F0b3JzJztcbmltcG9ydCB7IFNreUlubGluZURlbGV0ZU1vZHVsZSB9IGZyb20gJ0Bza3l1eC9sYXlvdXQnO1xuaW1wb3J0IHsgU2t5UG9wb3Zlck1vZHVsZSB9IGZyb20gJ0Bza3l1eC9wb3BvdmVycyc7XG5cbmltcG9ydCB7IERyYWd1bGFNb2R1bGUgfSBmcm9tICduZzItZHJhZ3VsYSc7XG5cbmltcG9ydCB7IFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlIH0gZnJvbSAnLi4vc2hhcmVkL3NreS1ncmlkcy1yZXNvdXJjZXMubW9kdWxlJztcblxuaW1wb3J0IHsgU2t5R3JpZENlbGxDb21wb25lbnQgfSBmcm9tICcuL2dyaWQtY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgU2t5R3JpZENvbHVtbkNvbXBvbmVudCB9IGZyb20gJy4vZ3JpZC1jb2x1bW4uY29tcG9uZW50JztcbmltcG9ydCB7IFNreUdyaWRDb21wb25lbnQgfSBmcm9tICcuL2dyaWQuY29tcG9uZW50JztcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBgU2t5R3JpZENvbXBvbmVudGAgYW5kIGl0cyBmZWF0dXJlcyBhcmUgZGVwcmVjYXRlZC4gV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBkYXRhIGdyaWQgaW5zdGVhZC4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvZGF0YS1ncmlkXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGRlY2xhcmF0aW9uczogW1xuICAgIFNreUdyaWRDb21wb25lbnQsXG4gICAgU2t5R3JpZENvbHVtbkNvbXBvbmVudCxcbiAgICBTa3lHcmlkQ2VsbENvbXBvbmVudCxcbiAgXSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBEcmFndWxhTW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIFNreUFmZml4TW9kdWxlLFxuICAgIFNreUNoZWNrYm94TW9kdWxlLFxuICAgIFNreUdyaWRzUmVzb3VyY2VzTW9kdWxlLFxuICAgIFNreUhlbHBJbmxpbmVNb2R1bGUsXG4gICAgU2t5SWNvbk1vZHVsZSxcbiAgICBTa3lJbmxpbmVEZWxldGVNb2R1bGUsXG4gICAgU2t5UG9wb3Zlck1vZHVsZSxcbiAgICBTa3lUZXh0SGlnaGxpZ2h0TW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbU2t5R3JpZENvbXBvbmVudCwgU2t5R3JpZENvbHVtbkNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNreUdyaWRNb2R1bGUge31cbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2t5dXgtZ3JpZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvbXBvbmVudHMvZ3JpZHMvc3JjL3NreXV4LWdyaWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":["i3.SkyGridAdapterService","i12.SkyGridCellComponent"],"mappings":"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"}