@aquera/ngx-smart-table 0.0.9-alpha → 0.0.11-alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +1 -1
- package/esm2020/lib/models/table-config.interface.mjs +3 -2
- package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +1 -1
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +48 -19
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +30 -5
- package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +14 -4
- package/esm2020/lib/renderer/models/table-state.class.mjs +32 -2
- package/fesm2015/aquera-ngx-smart-table.mjs +127 -31
- package/fesm2015/aquera-ngx-smart-table.mjs.map +1 -1
- package/fesm2020/aquera-ngx-smart-table.mjs +124 -29
- package/fesm2020/aquera-ngx-smart-table.mjs.map +1 -1
- package/lib/models/table-config.interface.d.ts +6 -0
- package/lib/renderer/components/st-table/st-table.component.d.ts +7 -2
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +15 -1
- package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +5 -1
- package/lib/renderer/models/table-state.class.d.ts +8 -1
- package/package.json +1 -1
|
@@ -48,6 +48,11 @@ export class StWorkbookComponent {
|
|
|
48
48
|
* Emitted when fullscreen is toggled
|
|
49
49
|
*/
|
|
50
50
|
this.fullscreenToggle = new EventEmitter();
|
|
51
|
+
/**
|
|
52
|
+
* Emitted when user navigates past last row (arrow down at bottom)
|
|
53
|
+
* Only emitted if addRowOnNavigatePastEnd is enabled in tableConfig
|
|
54
|
+
*/
|
|
55
|
+
this.requestAddRow = new EventEmitter();
|
|
51
56
|
/**
|
|
52
57
|
* Array of sheets
|
|
53
58
|
*/
|
|
@@ -152,14 +157,20 @@ export class StWorkbookComponent {
|
|
|
152
157
|
initializeComponent(isFirstInit = true) {
|
|
153
158
|
if (!this.config)
|
|
154
159
|
return;
|
|
160
|
+
const previousSheetCount = this.sheets.length;
|
|
155
161
|
this.sheets = [...this.config.sheets];
|
|
162
|
+
const newSheetCount = this.sheets.length;
|
|
156
163
|
// Only reset activeSheetIndex on first init, preserve it on config updates
|
|
157
164
|
if (isFirstInit) {
|
|
158
165
|
this.activeSheetIndex = this.config.initialActiveSheetIndex || 0;
|
|
159
166
|
}
|
|
160
167
|
else {
|
|
161
|
-
//
|
|
162
|
-
if (
|
|
168
|
+
// Check if a new sheet was added - switch to the new sheet
|
|
169
|
+
if (newSheetCount > previousSheetCount) {
|
|
170
|
+
this.activeSheetIndex = newSheetCount - 1; // Switch to the newly added sheet
|
|
171
|
+
}
|
|
172
|
+
// Ensure activeSheetIndex is still valid after config change (e.g., sheet deleted)
|
|
173
|
+
else if (this.activeSheetIndex >= this.sheets.length) {
|
|
163
174
|
this.activeSheetIndex = Math.max(0, this.sheets.length - 1);
|
|
164
175
|
}
|
|
165
176
|
}
|
|
@@ -420,6 +431,18 @@ export class StWorkbookComponent {
|
|
|
420
431
|
onTableStateChange(event) {
|
|
421
432
|
this.tableStateChange.emit(event);
|
|
422
433
|
}
|
|
434
|
+
/**
|
|
435
|
+
* Handle request to add a new row - emitted when navigating past last row
|
|
436
|
+
*/
|
|
437
|
+
onRequestAddRow(event) {
|
|
438
|
+
const activeSheet = this.sheets[this.activeSheetIndex];
|
|
439
|
+
if (activeSheet) {
|
|
440
|
+
this.requestAddRow.emit({
|
|
441
|
+
sheetId: activeSheet.id,
|
|
442
|
+
focusColumn: event.focusColumn
|
|
443
|
+
});
|
|
444
|
+
}
|
|
445
|
+
}
|
|
423
446
|
/**
|
|
424
447
|
* Component cleanup
|
|
425
448
|
*/
|
|
@@ -492,10 +515,10 @@ export class StWorkbookComponent {
|
|
|
492
515
|
}
|
|
493
516
|
}
|
|
494
517
|
StWorkbookComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StWorkbookComponent, deps: [{ token: i1.AutosaveService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
495
|
-
StWorkbookComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StWorkbookComponent, selector: "st-workbook", inputs: { config: "config", sheetsData: "sheetsData", state: "state" }, outputs: { sheetChanged: "sheetChanged", addSheet: "addSheet", sheetTabAction: "sheetTabAction", workbookAction: "workbookAction", cellChange: "cellChange", cellSave: "cellSave", tableStateChange: "tableStateChange", fullscreenToggle: "fullscreenToggle" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n slot=\"nav\" \n panel=\"shared-panel\"\n [class.active]=\"i === activeSheetIndex\"\n (click)=\"onTabChange(i)\">\n <div class=\"sheet-tab-content\">\n <span class=\"sheet-name\">{{ sheet.name }}</span>\n \n <!-- Tab actions dropdown button -->\n <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Toolbar Tab (for workbook controls) -->\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n class=\"workbook-toolbar-tab\"\n [disabled]=\"true\">\n <div class=\"workbook-toolbar-content\">\n <!-- Autosave Indicator -->\n <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Single Shared Tab Panel -->\n <nile-tab-panel name=\"shared-panel\">\n <!-- Lazy loading strategy: table is destroyed and recreated with new config/state when sheet changes -->\n <!-- Using ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\n [attr.data-sheet-key]=\"key\"\n [tableConfig]=\"currentTableConfig\"\n [data$]=\"currentTableData$\"\n [tableState]=\"currentTableState\"\n (cellChange)=\"onCellChange($event)\"\n (cellSave)=\"onCellSave($event)\"\n (stateChange)=\"onTableStateChange($event)\">\n </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\n\n", styles: ["@import\"@aquera/nile/lib/styles/variables.css\";:host{display:block;width:100%;height:100%}.workbook-container{display:flex;flex-direction:column;height:100%;background:white;border:1px solid var(--nile-color-neutral-200);border-radius:4px;overflow:hidden}.workbook-container.fullscreen{position:fixed;inset:0;z-index:2000;border:none;border-radius:0}.workbook-container nile-tab-group{height:100%;display:flex;flex-direction:column}.sheet-tab-content{display:flex;align-items:center;gap:8px;padding:0 4px}.sheet-tab-content .sheet-name{font-size:12px;font-weight:500;font-family:var(--nile-font-family-sans-serif);color:#000}.sheet-tab-content .tab-actions-button{width:20px;height:20px;padding:0;background:transparent;border:none;cursor:pointer}.workbook-toolbar-tab{margin-left:auto!important;pointer-events:auto!important;border-left:1px solid var(--nile-color-neutral-200)}.workbook-toolbar-tab .workbook-toolbar-content{display:flex;gap:4px;align-items:center;padding:0 8px}.workbook-toolbar-tab .workbook-toolbar-content .autosave-indicator{display:flex;align-items:center;margin-right:8px;color:var(--nile-color-success-500)}.workbook-toolbar-tab button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;color:var(--nile-color-neutral-600)}.workbook-toolbar-tab button:hover{background-color:var(--nile-color-neutral-100);color:var(--nile-color-neutral-900)}.workbook-toolbar-tab button:active{background-color:var(--nile-color-neutral-200)}.workbook-toolbar-tab button nile-icon{font-size:16px}.tab-actions-dropdown{position:fixed;z-index:1001}.tab-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.tab-actions-dropdown .dropdown-menu{position:relative;min-width:180px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.tab-actions-dropdown .dropdown-menu nile-menu{display:block}.workbook-actions-dropdown{position:fixed;z-index:1001}.workbook-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.workbook-actions-dropdown .dropdown-menu{position:relative;min-width:200px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.workbook-actions-dropdown .dropdown-menu nile-menu{display:block}.fullscreen-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1999;cursor:pointer}nile-tab-group::part(nav){background-color:#fafafa}nile-tab-group::part(active-tab-indicator-path){background:none}nile-tab-group::part(active-tab-indicator){border-bottom:none}nile-tab-group::part(tabs){gap:0}nile-tab-group nile-tab{border:1px solid #e0e0e0;border-top-left-radius:6px;border-top-right-radius:6px}nile-tab-group nile-tab::part(base){padding-left:.5rem;padding-top:.5rem;padding-bottom:.5rem;border-bottom-left-radius:0;border-bottom-right-radius:0}nile-tab-group nile-tab.active{background-color:#fff;color:#000}nile-tab-group nile-tab-panel::part(base){padding:0;max-height:30rem}\n"], components: [{ type: i2.StTableComponent, selector: "st-table", inputs: ["tableConfig", "data", "data$", "tableState", "enableSorting", "enableFiltering", "validateConfig"], outputs: ["stateChange", "dataChange", "cellEdit", "cellSave", "cellCancel", "cellChange", "columnResized", "columnMoved", "configValidationErrors", "columnAdded", "rowAction", "validationStateChange"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i3.AsyncPipe, "date": i3.DatePipe } });
|
|
518
|
+
StWorkbookComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: StWorkbookComponent, selector: "st-workbook", inputs: { config: "config", sheetsData: "sheetsData", state: "state" }, outputs: { sheetChanged: "sheetChanged", addSheet: "addSheet", sheetTabAction: "sheetTabAction", workbookAction: "workbookAction", cellChange: "cellChange", cellSave: "cellSave", tableStateChange: "tableStateChange", fullscreenToggle: "fullscreenToggle", requestAddRow: "requestAddRow" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n slot=\"nav\" \n panel=\"shared-panel\"\n [class.active]=\"i === activeSheetIndex\"\n (click)=\"onTabChange(i)\">\n <div class=\"sheet-tab-content\">\n <span class=\"sheet-name\">{{ sheet.name }}</span>\n \n <!-- Tab actions dropdown button -->\n <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Toolbar Tab (for workbook controls) -->\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n class=\"workbook-toolbar-tab\"\n [disabled]=\"true\">\n <div class=\"workbook-toolbar-content\">\n <!-- Autosave Indicator -->\n <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Single Shared Tab Panel -->\n <nile-tab-panel name=\"shared-panel\">\n <!-- Lazy loading strategy: table is destroyed and recreated with new config/state when sheet changes -->\n <!-- Using ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\n [attr.data-sheet-key]=\"key\"\n [tableConfig]=\"currentTableConfig\"\n [data$]=\"currentTableData$\"\n [tableState]=\"currentTableState\"\n (cellChange)=\"onCellChange($event)\"\n (cellSave)=\"onCellSave($event)\"\n (stateChange)=\"onTableStateChange($event)\"\n (requestAddRow)=\"onRequestAddRow($event)\">\n </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\n\n", styles: ["@import\"@aquera/nile/lib/styles/variables.css\";:host{display:block;width:100%;height:100%}.workbook-container{display:flex;flex-direction:column;height:100%;background:white;border:1px solid var(--nile-color-neutral-200);border-radius:4px;overflow:hidden}.workbook-container.fullscreen{position:fixed;inset:0;z-index:2000;border:none;border-radius:0}.workbook-container nile-tab-group{height:100%;display:flex;flex-direction:column}.sheet-tab-content{display:flex;align-items:center;gap:8px;padding:0 4px}.sheet-tab-content .sheet-name{font-size:12px;font-weight:500;font-family:var(--nile-font-family-sans-serif);color:#000}.sheet-tab-content .tab-actions-button{width:20px;height:20px;padding:0;background:transparent;border:none;cursor:pointer}.workbook-toolbar-tab{margin-left:auto!important;pointer-events:auto!important;border-left:1px solid var(--nile-color-neutral-200)}.workbook-toolbar-tab .workbook-toolbar-content{display:flex;gap:4px;align-items:center;padding:0 8px}.workbook-toolbar-tab .workbook-toolbar-content .autosave-indicator{display:flex;align-items:center;margin-right:8px;color:var(--nile-color-success-500)}.workbook-toolbar-tab button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;color:var(--nile-color-neutral-600)}.workbook-toolbar-tab button:hover{background-color:var(--nile-color-neutral-100);color:var(--nile-color-neutral-900)}.workbook-toolbar-tab button:active{background-color:var(--nile-color-neutral-200)}.workbook-toolbar-tab button nile-icon{font-size:16px}.tab-actions-dropdown{position:fixed;z-index:1001}.tab-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.tab-actions-dropdown .dropdown-menu{position:relative;min-width:180px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.tab-actions-dropdown .dropdown-menu nile-menu{display:block}.workbook-actions-dropdown{position:fixed;z-index:1001}.workbook-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.workbook-actions-dropdown .dropdown-menu{position:relative;min-width:200px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.workbook-actions-dropdown .dropdown-menu nile-menu{display:block}.fullscreen-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1999;cursor:pointer}nile-tab-group::part(nav){background-color:#fafafa}nile-tab-group::part(active-tab-indicator-path){background:none}nile-tab-group::part(active-tab-indicator){border-bottom:none}nile-tab-group::part(tabs){gap:0}nile-tab-group nile-tab{border:1px solid #e0e0e0;border-top-left-radius:6px;border-top-right-radius:6px}nile-tab-group nile-tab::part(base){padding-left:.5rem;padding-top:.5rem;padding-bottom:.5rem;border-bottom-left-radius:0;border-bottom-right-radius:0}nile-tab-group nile-tab.active{background-color:#fff;color:#000}nile-tab-group nile-tab-panel::part(base){padding:0;max-height:30rem}\n"], components: [{ type: i2.StTableComponent, selector: "st-table", inputs: ["tableConfig", "data", "data$", "tableState", "enableSorting", "enableFiltering", "validateConfig"], outputs: ["stateChange", "dataChange", "cellEdit", "cellSave", "cellCancel", "cellChange", "columnResized", "columnMoved", "configValidationErrors", "columnAdded", "rowAction", "validationStateChange", "requestAddRow"] }], directives: [{ type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], pipes: { "async": i3.AsyncPipe, "date": i3.DatePipe } });
|
|
496
519
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StWorkbookComponent, decorators: [{
|
|
497
520
|
type: Component,
|
|
498
|
-
args: [{ selector: 'st-workbook', template: "<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n slot=\"nav\" \n panel=\"shared-panel\"\n [class.active]=\"i === activeSheetIndex\"\n (click)=\"onTabChange(i)\">\n <div class=\"sheet-tab-content\">\n <span class=\"sheet-name\">{{ sheet.name }}</span>\n \n <!-- Tab actions dropdown button -->\n <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Toolbar Tab (for workbook controls) -->\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n class=\"workbook-toolbar-tab\"\n [disabled]=\"true\">\n <div class=\"workbook-toolbar-content\">\n <!-- Autosave Indicator -->\n <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Single Shared Tab Panel -->\n <nile-tab-panel name=\"shared-panel\">\n <!-- Lazy loading strategy: table is destroyed and recreated with new config/state when sheet changes -->\n <!-- Using ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\n [attr.data-sheet-key]=\"key\"\n [tableConfig]=\"currentTableConfig\"\n [data$]=\"currentTableData$\"\n [tableState]=\"currentTableState\"\n (cellChange)=\"onCellChange($event)\"\n (cellSave)=\"onCellSave($event)\"\n (stateChange)=\"onTableStateChange($event)\">\n </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\n\n", styles: ["@import\"@aquera/nile/lib/styles/variables.css\";:host{display:block;width:100%;height:100%}.workbook-container{display:flex;flex-direction:column;height:100%;background:white;border:1px solid var(--nile-color-neutral-200);border-radius:4px;overflow:hidden}.workbook-container.fullscreen{position:fixed;inset:0;z-index:2000;border:none;border-radius:0}.workbook-container nile-tab-group{height:100%;display:flex;flex-direction:column}.sheet-tab-content{display:flex;align-items:center;gap:8px;padding:0 4px}.sheet-tab-content .sheet-name{font-size:12px;font-weight:500;font-family:var(--nile-font-family-sans-serif);color:#000}.sheet-tab-content .tab-actions-button{width:20px;height:20px;padding:0;background:transparent;border:none;cursor:pointer}.workbook-toolbar-tab{margin-left:auto!important;pointer-events:auto!important;border-left:1px solid var(--nile-color-neutral-200)}.workbook-toolbar-tab .workbook-toolbar-content{display:flex;gap:4px;align-items:center;padding:0 8px}.workbook-toolbar-tab .workbook-toolbar-content .autosave-indicator{display:flex;align-items:center;margin-right:8px;color:var(--nile-color-success-500)}.workbook-toolbar-tab button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;color:var(--nile-color-neutral-600)}.workbook-toolbar-tab button:hover{background-color:var(--nile-color-neutral-100);color:var(--nile-color-neutral-900)}.workbook-toolbar-tab button:active{background-color:var(--nile-color-neutral-200)}.workbook-toolbar-tab button nile-icon{font-size:16px}.tab-actions-dropdown{position:fixed;z-index:1001}.tab-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.tab-actions-dropdown .dropdown-menu{position:relative;min-width:180px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.tab-actions-dropdown .dropdown-menu nile-menu{display:block}.workbook-actions-dropdown{position:fixed;z-index:1001}.workbook-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.workbook-actions-dropdown .dropdown-menu{position:relative;min-width:200px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.workbook-actions-dropdown .dropdown-menu nile-menu{display:block}.fullscreen-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1999;cursor:pointer}nile-tab-group::part(nav){background-color:#fafafa}nile-tab-group::part(active-tab-indicator-path){background:none}nile-tab-group::part(active-tab-indicator){border-bottom:none}nile-tab-group::part(tabs){gap:0}nile-tab-group nile-tab{border:1px solid #e0e0e0;border-top-left-radius:6px;border-top-right-radius:6px}nile-tab-group nile-tab::part(base){padding-left:.5rem;padding-top:.5rem;padding-bottom:.5rem;border-bottom-left-radius:0;border-bottom-right-radius:0}nile-tab-group nile-tab.active{background-color:#fff;color:#000}nile-tab-group nile-tab-panel::part(base){padding:0;max-height:30rem}\n"] }]
|
|
521
|
+
args: [{ selector: 'st-workbook', template: "<div class=\"workbook-container\" [class.fullscreen]=\"isFullscreen$ | async\">\n <nile-tab-group [activeIndex]=\"activeSheetIndex\">\n \n <!-- Sheet Tabs (one per sheet) -->\n <nile-tab *ngFor=\"let sheet of sheets; let i = index\"\n slot=\"nav\" \n panel=\"shared-panel\"\n [class.active]=\"i === activeSheetIndex\"\n (click)=\"onTabChange(i)\">\n <div class=\"sheet-tab-content\">\n <span class=\"sheet-name\">{{ sheet.name }}</span>\n \n <!-- Tab actions dropdown button -->\n <button class=\"tab-actions-button\"\n (click)=\"openTabActions($event, sheet, i)\"\n *ngIf=\"hasTabActions(sheet)\">\n <nile-icon name=\"arrowdown\" size=\"14\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Toolbar Tab (for workbook controls) -->\n <nile-tab slot=\"nav\" \n panel=\"shared-panel\"\n class=\"workbook-toolbar-tab\"\n [disabled]=\"true\">\n <div class=\"workbook-toolbar-content\">\n <!-- Autosave Indicator -->\n <div class=\"autosave-indicator\" *ngIf=\"autosaveEnabled\">\n <nile-icon \n *ngIf=\"!isSaving && lastSaveTime\" \n name=\"save\" \n size=\"14\"\n [title]=\"'Saved at ' + (lastSaveTime | date:'HH:mm:ss')\">\n </nile-icon>\n <nile-icon \n *ngIf=\"isSaving\" \n name=\"loader\" \n size=\"14\"\n title=\"Saving...\">\n </nile-icon>\n </div>\n\n <!-- Workbook Actions Dropdown -->\n <button class=\"workbook-actions-button\"\n *ngIf=\"config.workbookActions && config.workbookActions.length > 0\"\n (click)=\"toggleWorkbookActions($event)\"\n title=\"Workbook Actions\">\n <nile-icon name=\"settings\"></nile-icon>\n </button>\n \n <!-- Add Sheet Button -->\n <button class=\"add-sheet-button\"\n *ngIf=\"canAddSheet\"\n (click)=\"onAddSheet()\"\n title=\"Add Sheet\">\n <nile-icon name=\"plus\"></nile-icon>\n </button>\n \n <!-- Fullscreen Button -->\n <button class=\"fullscreen-button\"\n *ngIf=\"config.display?.allowFullscreen !== false\"\n (click)=\"toggleFullscreen()\"\n [title]=\"(isFullscreen$ | async) ? 'Exit Fullscreen' : 'Fullscreen'\">\n <nile-icon [name]=\"(isFullscreen$ | async) ? 'collapse' : 'expand-06'\"></nile-icon>\n </button>\n </div>\n </nile-tab>\n \n <!-- Single Shared Tab Panel -->\n <nile-tab-panel name=\"shared-panel\">\n <!-- Lazy loading strategy: table is destroyed and recreated with new config/state when sheet changes -->\n <!-- Using ngFor with trackBy to force complete reinitialization when tableComponentKey changes -->\n <ng-container *ngFor=\"let key of [tableComponentKey]; trackBy: trackByKey\">\n <st-table *ngIf=\"currentTableConfig && currentTableState\"\n [attr.data-sheet-key]=\"key\"\n [tableConfig]=\"currentTableConfig\"\n [data$]=\"currentTableData$\"\n [tableState]=\"currentTableState\"\n (cellChange)=\"onCellChange($event)\"\n (cellSave)=\"onCellSave($event)\"\n (stateChange)=\"onTableStateChange($event)\"\n (requestAddRow)=\"onRequestAddRow($event)\">\n </st-table>\n </ng-container>\n </nile-tab-panel>\n \n </nile-tab-group>\n</div>\n\n<!-- Tab Actions Dropdown -->\n<div class=\"tab-actions-dropdown\" \n *ngIf=\"tabActionsOpen\"\n [ngStyle]=\"tabActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeTabActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of selectedSheet?.tabActions\" \n (click)=\"onTabActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Workbook Actions Dropdown -->\n<div class=\"workbook-actions-dropdown\"\n *ngIf=\"workbookActionsOpen\"\n [ngStyle]=\"workbookActionsPosition\">\n <div class=\"dropdown-backdrop\" (click)=\"closeWorkbookActions()\"></div>\n <div class=\"dropdown-menu\">\n <nile-menu>\n <nile-menu-item *ngFor=\"let action of visibleWorkbookActions\"\n [class.disabled]=\"isActionDisabled(action)\"\n (click)=\"onWorkbookActionClick(action, $event)\">\n <nile-icon *ngIf=\"action.icon\" slot=\"prefix\" size=\"14\" [name]=\"action.icon\"></nile-icon>\n {{ action.label }}\n </nile-menu-item>\n </nile-menu>\n </div>\n</div>\n\n<!-- Fullscreen Backdrop -->\n<div class=\"fullscreen-backdrop\" \n *ngIf=\"isFullscreen$ | async\"\n (click)=\"toggleFullscreen()\">\n</div>\n\n", styles: ["@import\"@aquera/nile/lib/styles/variables.css\";:host{display:block;width:100%;height:100%}.workbook-container{display:flex;flex-direction:column;height:100%;background:white;border:1px solid var(--nile-color-neutral-200);border-radius:4px;overflow:hidden}.workbook-container.fullscreen{position:fixed;inset:0;z-index:2000;border:none;border-radius:0}.workbook-container nile-tab-group{height:100%;display:flex;flex-direction:column}.sheet-tab-content{display:flex;align-items:center;gap:8px;padding:0 4px}.sheet-tab-content .sheet-name{font-size:12px;font-weight:500;font-family:var(--nile-font-family-sans-serif);color:#000}.sheet-tab-content .tab-actions-button{width:20px;height:20px;padding:0;background:transparent;border:none;cursor:pointer}.workbook-toolbar-tab{margin-left:auto!important;pointer-events:auto!important;border-left:1px solid var(--nile-color-neutral-200)}.workbook-toolbar-tab .workbook-toolbar-content{display:flex;gap:4px;align-items:center;padding:0 8px}.workbook-toolbar-tab .workbook-toolbar-content .autosave-indicator{display:flex;align-items:center;margin-right:8px;color:var(--nile-color-success-500)}.workbook-toolbar-tab button{display:flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:none;border-radius:4px;cursor:pointer;transition:background-color .2s;color:var(--nile-color-neutral-600)}.workbook-toolbar-tab button:hover{background-color:var(--nile-color-neutral-100);color:var(--nile-color-neutral-900)}.workbook-toolbar-tab button:active{background-color:var(--nile-color-neutral-200)}.workbook-toolbar-tab button nile-icon{font-size:16px}.tab-actions-dropdown{position:fixed;z-index:1001}.tab-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.tab-actions-dropdown .dropdown-menu{position:relative;min-width:180px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.tab-actions-dropdown .dropdown-menu nile-menu{display:block}.workbook-actions-dropdown{position:fixed;z-index:1001}.workbook-actions-dropdown .dropdown-backdrop{position:fixed;top:0;left:0;width:100%;height:100%;background:transparent;z-index:1000}.workbook-actions-dropdown .dropdown-menu{position:relative;min-width:200px;background:white;border-radius:8px;box-shadow:0 4px 12px #00000026;z-index:1001;overflow:hidden}.workbook-actions-dropdown .dropdown-menu nile-menu{display:block}.fullscreen-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:1999;cursor:pointer}nile-tab-group::part(nav){background-color:#fafafa}nile-tab-group::part(active-tab-indicator-path){background:none}nile-tab-group::part(active-tab-indicator){border-bottom:none}nile-tab-group::part(tabs){gap:0}nile-tab-group nile-tab{border:1px solid #e0e0e0;border-top-left-radius:6px;border-top-right-radius:6px}nile-tab-group nile-tab::part(base){padding-left:.5rem;padding-top:.5rem;padding-bottom:.5rem;border-bottom-left-radius:0;border-bottom-right-radius:0}nile-tab-group nile-tab.active{background-color:#fff;color:#000}nile-tab-group nile-tab-panel::part(base){padding:0;max-height:30rem}\n"] }]
|
|
499
522
|
}], ctorParameters: function () { return [{ type: i1.AutosaveService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { config: [{
|
|
500
523
|
type: Input
|
|
501
524
|
}], sheetsData: [{
|
|
@@ -518,5 +541,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
518
541
|
type: Output
|
|
519
542
|
}], fullscreenToggle: [{
|
|
520
543
|
type: Output
|
|
544
|
+
}], requestAddRow: [{
|
|
545
|
+
type: Output
|
|
521
546
|
}] } });
|
|
522
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qtd29ya2Jvb2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXdvcmtib29rL3N0LXdvcmtib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC13b3JrYm9vay9zdC13b3JrYm9vay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQU1iLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTVELE9BQU8sRUFBb0IsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7QUFRdEcsTUFBTSxPQUFPLG1CQUFtQjtJQWlKOUIsWUFDVSxlQUFnQyxFQUNoQyxHQUFzQjtRQUR0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE3SWhDOztXQUVHO1FBQ00sZUFBVSxHQUF3QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFPMUY7O1dBRUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFcEQ7O1dBRUc7UUFD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Z0I7c0JBQXpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgT25Jbml0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJqZWN0LCBtZXJnZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXb3JrYm9va0NvbmZpZywgV29ya2Jvb2tTaGVldENvbmZpZyB9IGZyb20gJy4uLy4uLy4uL21vZGVscy93b3JrYm9vay1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IFdvcmtib29rQWN0aW9uLCBXb3JrYm9va0FjdGlvbkV2ZW50LCBTaGVldFRhYkFjdGlvbkV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3dvcmtib29rLWFjdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgV29ya2Jvb2tTdGF0ZSB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrYm9vay1zdGF0ZS5jbGFzcyc7XG5pbXBvcnQgeyBXb3JrYm9va1N0YXRlU25hcHNob3QgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya2Jvb2stc3RhdGUuaW50ZXJmYWNlJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvdGFibGUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBDZWxsQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvY2VsbC10eXBlcyc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGFibGUtdHlwZXMnO1xuaW1wb3J0IHsgQXV0b3NhdmVTdHJhdGVneSwgREVGQVVMVF9BVVRPU0FWRV9DT05GSUcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvYXV0b3NhdmUtY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBBdXRvc2F2ZVNlcnZpY2UsIEF1dG9zYXZlRGF0YSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2F1dG9zYXZlLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdC13b3JrYm9vaycsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdC13b3JrYm9vay5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3N0LXdvcmtib29rLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIFN0V29ya2Jvb2tDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgLyoqXG4gICAqIFdvcmtib29rIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIEBJbnB1dCgpIGNvbmZpZyE6IFdvcmtib29rQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBNYXAgb2Ygc2hlZXQgSUQgdG8gZGF0YSBhcnJheVxuICAgKi9cbiAgQElucHV0KCkgc2hlZXRzRGF0YTogQmVoYXZpb3JTdWJqZWN0PE1hcDxzdHJpbmcsIGFueVtdPj4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KG5ldyBNYXAoKSk7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGV4dGVybmFsIHN0YXRlIG1hbmFnZW1lbnRcbiAgICovXG4gIEBJbnB1dCgpIHN0YXRlPzogV29ya2Jvb2tTdGF0ZTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGFjdGl2ZSBzaGVldCBjaGFuZ2VzXG4gICAqL1xuICBAT3V0cHV0KCkgc2hlZXRDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhZGQgc2hlZXQgYnV0dG9uIGlzIGNsaWNrZWRcbiAgICovXG4gIEBPdXRwdXQoKSBhZGRTaGVldCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIGEgc2hlZXQgdGFiIGFjdGlvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgc2hlZXRUYWJBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFNoZWV0VGFiQWN0aW9uRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHdvcmtib29rIGFjdGlvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgd29ya2Jvb2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPFdvcmtib29rQWN0aW9uRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBjZWxsIHZhbHVlIGNoYW5nZXNcbiAgICovXG4gIEBPdXRwdXQoKSBjZWxsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDZWxsQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBjZWxsIGlzIHNhdmVkXG4gICAqL1xuICBAT3V0cHV0KCkgY2VsbFNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHRhYmxlIHN0YXRlIGNoYW5nZXNcbiAgICovXG4gIEBPdXRwdXQoKSB0YWJsZVN0YXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxUYWJsZVN0YXRlQ2hhbmdlRXZlbnQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBmdWxsc2NyZWVuIGlzIHRvZ2dsZWRcbiAgICovXG4gIEBPdXRwdXQoKSBmdWxsc2NyZWVuVG9nZ2xlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBzaGVldHNcbiAgICovXG4gIHNoZWV0czogV29ya2Jvb2tTaGVldENvbmZpZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSBzaGVldCBpbmRleFxuICAgKi9cbiAgYWN0aXZlU2hlZXRJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgdGFibGUgY29uZmlnIChmb3IgYWN0aXZlIHNoZWV0KVxuICAgKi9cbiAgY3VycmVudFRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHRhYmxlIGRhdGEgKGZvciBhY3RpdmUgc2hlZXQpIC0gdXNpbmcgQmVoYXZpb3JTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzXG4gICAqL1xuICBjdXJyZW50VGFibGVEYXRhJDogQmVoYXZpb3JTdWJqZWN0PGFueVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblxuICAvKipcbiAgICogQ3VycmVudCB0YWJsZSBzdGF0ZSAoZm9yIGFjdGl2ZSBzaGVldClcbiAgICovXG4gIGN1cnJlbnRUYWJsZVN0YXRlOiBUYWJsZVN0YXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBrZXkgZm9yIHRhYmxlIGNvbXBvbmVudCAoY2hhbmdlcyBvbiBzaGVldCBzd2l0Y2ggdG8gZm9yY2UgcmVpbml0aWFsaXphdGlvbilcbiAgICovXG4gIHRhYmxlQ29tcG9uZW50S2V5OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSW50ZXJuYWwgc3RhdGUgaW5zdGFuY2VcbiAgICovXG4gIGludGVybmFsU3RhdGU/OiBXb3JrYm9va1N0YXRlO1xuXG4gIC8qKlxuICAgKiBGdWxsc2NyZWVuIHN0YXRlIG9ic2VydmFibGVcbiAgICovXG4gIGlzRnVsbHNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKipcbiAgICogVGFiIGFjdGlvbnMgZHJvcGRvd24gc3RhdGVcbiAgICovXG4gIHRhYkFjdGlvbnNPcGVuID0gZmFsc2U7XG4gIHNlbGVjdGVkU2hlZXQ6IFdvcmtib29rU2hlZXRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRTaGVldEluZGV4OiBudW1iZXIgPSAtMTtcbiAgdGFiQWN0aW9uc1Bvc2l0aW9uOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogV29ya2Jvb2sgYWN0aW9ucyBkcm9wZG93biBzdGF0ZVxuICAgKi9cbiAgd29ya2Jvb2tBY3Rpb25zT3BlbiA9IGZhbHNlO1xuICB3b3JrYm9va0FjdGlvbnNQb3NpdGlvbjogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIFZpc2libGUgd29ya2Jvb2sgYWN0aW9ucyAoZmlsdGVyZWQgYnkgaGlkZGVuKVxuICAgKi9cbiAgdmlzaWJsZVdvcmtib29rQWN0aW9uczogV29ya2Jvb2tBY3Rpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBEZXN0cm95IHN1YmplY3QgZm9yIGNsZWFudXBcbiAgICovXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBBdXRvc2F2ZSBlbmFibGVkIGZsYWdcbiAgICovXG4gIGF1dG9zYXZlRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBdXRvc2F2ZSBzdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBhdXRvc2F2ZVN0cmF0ZWd5OiBBdXRvc2F2ZVN0cmF0ZWd5ID0gJ2xhenknO1xuXG4gIC8qKlxuICAgKiBMYXN0IHNhdmUgdGltZXN0YW1wXG4gICAqL1xuICBsYXN0U2F2ZVRpbWU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2F2aW5nIGluZGljYXRvclxuICAgKi9cbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQmVmb3JldW5sb2FkIGhhbmRsZXIgcmVmZXJlbmNlXG4gICAqL1xuICBwcml2YXRlIGJlZm9yZVVubG9hZEhhbmRsZXI6ICgoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0b3NhdmVTZXJ2aWNlOiBBdXRvc2F2ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBzaGVldHNEYXRhIGNoYW5nZXMgdG8gdXBkYXRlIGN1cnJlbnRUYWJsZURhdGEkIHJlYWN0aXZlbHlcbiAgICB0aGlzLnNoZWV0c0RhdGEucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKChkYXRhTWFwKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNoZWV0ICYmIGRhdGFNYXApIHtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IGRhdGFNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRTaGVldC5pZCk7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBCZWhhdmlvclN1YmplY3QgLSBzdC10YWJsZSB3aWxsIHJlYWN0IGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYWJsZURhdGEkLm5leHQoWy4uLm5ld0RhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhdXRvc2F2ZSBpZiBlbmFibGVkXG4gICAgY29uc3QgYXV0b3NhdmVDb25maWcgPSB0aGlzLmNvbmZpZy5hdXRvc2F2ZSB8fCBERUZBVUxUX0FVVE9TQVZFX0NPTkZJRztcbiAgICB0aGlzLmF1dG9zYXZlRW5hYmxlZCA9IGF1dG9zYXZlQ29uZmlnLmVuYWJsZWQ7XG4gICAgdGhpcy5hdXRvc2F2ZVN0cmF0ZWd5ID0gYXV0b3NhdmVDb25maWcuc3RyYXRlZ3k7XG5cbiAgICBpZiAodGhpcy5hdXRvc2F2ZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0dXBBdXRvUmVzdG9yZSgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplQXV0b3NhdmUoKTtcbiAgICAgIHRoaXMuc2V0dXBCZWZvcmVVbmxvYWRXYXJuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgY29uc3QgaXNGaXJzdENoYW5nZSA9IGNoYW5nZXNbJ2NvbmZpZyddLmZpcnN0Q2hhbmdlO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KGlzRmlyc3RDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbXBvbmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gaXNGaXJzdEluaXQgV2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiAodHJ1ZSkgb3IgYSBjb25maWcgdXBkYXRlIChmYWxzZSlcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudChpc0ZpcnN0SW5pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSByZXR1cm47XG5cbiAgICB0aGlzLnNoZWV0cyA9IFsuLi50aGlzLmNvbmZpZy5zaGVldHNdO1xuICAgIFxuICAgIC8vIE9ubHkgcmVzZXQgYWN0aXZlU2hlZXRJbmRleCBvbiBmaXJzdCBpbml0LCBwcmVzZXJ2ZSBpdCBvbiBjb25maWcgdXBkYXRlc1xuICAgIGlmIChpc0ZpcnN0SW5pdCkge1xuICAgICAgdGhpcy5hY3RpdmVTaGVldEluZGV4ID0gdGhpcy5jb25maWcuaW5pdGlhbEFjdGl2ZVNoZWV0SW5kZXggfHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRW5zdXJlIGFjdGl2ZVNoZWV0SW5kZXggaXMgc3RpbGwgdmFsaWQgYWZ0ZXIgY29uZmlnIGNoYW5nZVxuICAgICAgaWYgKHRoaXMuYWN0aXZlU2hlZXRJbmRleCA+PSB0aGlzLnNoZWV0cy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmVTaGVldEluZGV4ID0gTWF0aC5tYXgoMCwgdGhpcy5zaGVldHMubGVuZ3RoIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGlmICghdGhpcy5zdGF0ZSkge1xuICAgICAgdGhpcy5pbnRlcm5hbFN0YXRlID0gbmV3IFdvcmtib29rU3RhdGUoe1xuICAgICAgICBpZDogdGhpcy5jb25maWcuaWQsXG4gICAgICAgIG5hbWU6IHRoaXMuY29uZmlnLm5hbWUsXG4gICAgICAgIGluaXRpYWxBY3RpdmVTaGVldEluZGV4OiB0aGlzLmFjdGl2ZVNoZWV0SW5kZXhcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlVmlzaWJsZVdvcmtib29rQWN0aW9ucygpO1xuICAgIHRoaXMudXBkYXRlQWN0aXZlU2hlZXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYWN0aXZlIHN0YXRlIChleHRlcm5hbCBvciBpbnRlcm5hbClcbiAgICovXG4gIGdldCBhY3RpdmVTdGF0ZSgpOiBXb3JrYm9va1N0YXRlIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZSB8fCB0aGlzLmludGVybmFsU3RhdGUhO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0YWIgY2hhbmdlIGV2ZW50IGZyb20gbmlsZS10YWItZ3JvdXBcbiAgICovXG4gIG9uVGFiQ2hhbmdlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBuZXdJbmRleCA9IGV2ZW50LmRldGFpbD8uaW5kZXggPz8gZXZlbnQ7XG4gICAgXG4gICAgLy8gSWdub3JlIGlmIGNsaWNrZWQgb24gdG9vbGJhciB0YWJcbiAgICBpZiAobmV3SW5kZXggPj0gdGhpcy5zaGVldHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hY3RpdmVTaGVldEluZGV4ID0gbmV3SW5kZXg7XG4gICAgdGhpcy5hY3RpdmVTdGF0ZS5zZXRBY3RpdmVTaGVldEluZGV4KG5ld0luZGV4KTtcbiAgICB0aGlzLnVwZGF0ZUFjdGl2ZVNoZWV0KCk7XG4gICAgdGhpcy5zaGVldENoYW5nZWQuZW1pdCh0aGlzLmFjdGl2ZVNoZWV0SW5kZXgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBhY3RpdmUgc2hlZXQgZGF0YSAodHJpZ2dlcnMgdGFibGUgcmUtaW5pdGlhbGl6YXRpb24gd2l0aCBuZXcgY29uZmlnL3N0YXRlKVxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVBY3RpdmVTaGVldCgpOiB2b2lkIHtcbiAgICBjb25zdCBzaGVldCA9IHRoaXMuc2hlZXRzW3RoaXMuYWN0aXZlU2hlZXRJbmRleF07XG4gICAgaWYgKCFzaGVldCkgcmV0dXJuO1xuXG4gICAgLy8gVXBkYXRlIHNlbGVjdGVkIHNoZWV0IHJlZmVyZW5jZSBmb3IgZGF0YSBzdWJzY3JpcHRpb25zXG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0ID0gc2hlZXQ7XG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0SW5kZXggPSB0aGlzLmFjdGl2ZVNoZWV0SW5kZXg7XG5cbiAgICAvLyBHZXQgc2hlZXQgZGF0YVxuICAgIGNvbnN0IHNoZWV0RGF0YSA9IHRoaXMuc2hlZXRzRGF0YS5nZXRWYWx1ZSgpPy5nZXQoc2hlZXQuaWQpIHx8IFtdO1xuXG4gICAgLy8gQ3JlYXRlIGEgZnJlc2ggVGFibGVTdGF0ZSBmb3IgdGhpcyBzaGVldCAobGF6eSBpbml0aWFsaXphdGlvbilcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIHRhYmxlIHJlaW5pdGlhbGl6ZXMgd2l0aCBuZXcgY29uZmlnIGFuZCBzdGF0ZVxuICAgIGNvbnN0IHRhYmxlU3RhdGUgPSBuZXcgVGFibGVTdGF0ZShcbiAgICAgIHNoZWV0LnRhYmxlQ29uZmlnLmNvbHVtbnMsXG4gICAgICB7XG4gICAgICAgIGluaXRpYWxQYWdlOiBzaGVldC50YWJsZUNvbmZpZy5pbml0aWFsU3RhdGU/LnBhZ2UgfHwgMSxcbiAgICAgICAgcGFnZVNpemU6IHNoZWV0LnRhYmxlQ29uZmlnLnBhZ2luYXRpb24/LnBhZ2VTaXplIHx8IDI1XG4gICAgICB9XG4gICAgKTtcblxuICAgIC8vIFVwZGF0ZSBjdXJyZW50IHRhYmxlIHByb3BlcnRpZXMgKHRyaWdnZXJzIEFuZ3VsYXIgY2hhbmdlIGRldGVjdGlvbilcbiAgICAvLyBUaGUgc3QtdGFibGUgY29tcG9uZW50IHdpbGwgZGV0ZWN0IHRoZXNlIGNoYW5nZXMgYW5kIHJlaW5pdGlhbGl6ZVxuICAgIHRoaXMuY3VycmVudFRhYmxlQ29uZmlnID0geyAuLi5zaGVldC50YWJsZUNvbmZpZyB9O1xuICAgIHRoaXMuY3VycmVudFRhYmxlRGF0YSQubmV4dChzaGVldERhdGEpO1xuICAgIHRoaXMuY3VycmVudFRhYmxlU3RhdGUgPSB0YWJsZVN0YXRlO1xuICAgIFxuICAgIC8vIFVwZGF0ZSBjb21wb25lbnQga2V5IHRvIGZvcmNlIERPTSByZS1jcmVhdGlvbiAodHJ1ZSBsYXp5IGxvYWRpbmcpXG4gICAgLy8gVGhpcyBlbnN1cmVzIGNvbXBsZXRlIHJlaW5pdGlhbGl6YXRpb24gb2Ygc3QtdGFibGUgY29tcG9uZW50XG4gICAgdGhpcy50YWJsZUNvbXBvbmVudEtleSA9IGAke3NoZWV0LmlkfS0ke0RhdGUubm93KCl9YDtcblxuICAgIC8vIFN0b3JlIHRoZSB0YWJsZSBzdGF0ZSBpbiB3b3JrYm9vayBzdGF0ZSBmb3IgcGVyc2lzdGVuY2VcbiAgICB0aGlzLmFjdGl2ZVN0YXRlLnNldFNoZWV0VGFibGVTdGF0ZShzaGVldC5pZCwgdGFibGVTdGF0ZSk7XG5cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbmV3IHNoZWV0XG4gICAqL1xuICBvbkFkZFNoZWV0KCk6IHZvaWQge1xuICAgIHRoaXMuYWRkU2hlZXQuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyYWNrQnkgZnVuY3Rpb24gdG8gZm9yY2UgY29tcG9uZW50IHJlY3JlYXRpb24gd2hlbiBrZXkgY2hhbmdlc1xuICAgKi9cbiAgdHJhY2tCeUtleShpbmRleDogbnVtYmVyLCBrZXk6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBjYW4gYWRkIG1vcmUgc2hlZXRzXG4gICAqL1xuICBnZXQgY2FuQWRkU2hlZXQoKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc3BsYXk/LmFsbG93QWRkU2hlZXQgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbmZpZy5kaXNwbGF5Py5tYXhTaGVldHMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNoZWV0cy5sZW5ndGggPCB0aGlzLmNvbmZpZy5kaXNwbGF5Lm1heFNoZWV0cztcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG1pbmltdW0gc2hlZXRzIHJlcXVpcmVkXG4gICAqL1xuICBnZXQgbWluU2hlZXRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmRpc3BsYXk/Lm1pblNoZWV0cyB8fCAxO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW4gdGFiIGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIG9wZW5UYWJBY3Rpb25zKGV2ZW50OiBNb3VzZUV2ZW50LCBzaGVldDogV29ya2Jvb2tTaGVldENvbmZpZywgaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIHRoaXMuc2VsZWN0ZWRTaGVldCA9IHNoZWV0O1xuICAgIHRoaXMuc2VsZWN0ZWRTaGVldEluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy50YWJBY3Rpb25zT3BlbiA9IHRydWU7XG5cbiAgICAvLyBQb3NpdGlvbiBkcm9wZG93blxuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICB0aGlzLnRhYkFjdGlvbnNQb3NpdGlvbiA9IHtcbiAgICAgIHRvcDogYCR7cmVjdC5ib3R0b20gKyA0fXB4YCxcbiAgICAgIGxlZnQ6IGAke3JlY3QubGVmdH1weGBcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHRhYiBhY3Rpb25zIGRyb3Bkb3duXG4gICAqL1xuICBjbG9zZVRhYkFjdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJBY3Rpb25zT3BlbiA9IGZhbHNlO1xuICAgIHRoaXMuc2VsZWN0ZWRTaGVldCA9IG51bGw7XG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0SW5kZXggPSAtMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBzaGVldCBoYXMgdGFiIGFjdGlvbnNcbiAgICovXG4gIGhhc1RhYkFjdGlvbnMoc2hlZXQ6IFdvcmtib29rU2hlZXRDb25maWcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISEoc2hlZXQudGFiQWN0aW9ucyAmJiBzaGVldC50YWJBY3Rpb25zLmxlbmd0aCA+IDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0YWIgYWN0aW9uIGNsaWNrXG4gICAqL1xuICBvblRhYkFjdGlvbkNsaWNrKGFjdGlvbjogYW55LCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICghdGhpcy5zZWxlY3RlZFNoZWV0KSByZXR1cm47XG5cbiAgICB0aGlzLnNoZWV0VGFiQWN0aW9uLmVtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgc2hlZXRJZDogdGhpcy5zZWxlY3RlZFNoZWV0LmlkXG4gICAgfSk7XG5cbiAgICB0aGlzLmNsb3NlVGFiQWN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB3b3JrYm9vayBhY3Rpb25zIGRyb3Bkb3duXG4gICAqL1xuICB0b2dnbGVXb3JrYm9va0FjdGlvbnMoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBcbiAgICB0aGlzLndvcmtib29rQWN0aW9uc09wZW4gPSAhdGhpcy53b3JrYm9va0FjdGlvbnNPcGVuO1xuXG4gICAgaWYgKHRoaXMud29ya2Jvb2tBY3Rpb25zT3Blbikge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlY3QgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLndvcmtib29rQWN0aW9uc1Bvc2l0aW9uID0ge1xuICAgICAgICB0b3A6IGAke3JlY3QuYm90dG9tICsgNH1weGAsXG4gICAgICAgIHJpZ2h0OiBgJHt3aW5kb3cuaW5uZXJXaWR0aCAtIHJlY3QucmlnaHR9cHhgXG4gICAgICB9O1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlIHdvcmtib29rIGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlV29ya2Jvb2tBY3Rpb25zKCk6IHZvaWQge1xuICAgIHRoaXMud29ya2Jvb2tBY3Rpb25zT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB2aXNpYmxlIHdvcmtib29rIGFjdGlvbnNcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVmlzaWJsZVdvcmtib29rQWN0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLndvcmtib29rQWN0aW9ucykge1xuICAgICAgdGhpcy52aXNpYmxlV29ya2Jvb2tBY3Rpb25zID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy52aXNpYmxlV29ya2Jvb2tBY3Rpb25zID0gdGhpcy5jb25maWcud29ya2Jvb2tBY3Rpb25zLmZpbHRlcihhY3Rpb24gPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhY3Rpb24uaGlkZGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiAhYWN0aW9uLmhpZGRlbigpO1xuICAgICAgfVxuICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHdvcmtib29rIGFjdGlvbiBpcyBkaXNhYmxlZFxuICAgKi9cbiAgaXNBY3Rpb25EaXNhYmxlZChhY3Rpb246IFdvcmtib29rQWN0aW9uKTogYm9vbGVhbiB7XG4gICAgaWYgKHR5cGVvZiBhY3Rpb24uZGlzYWJsZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBhY3Rpb24uZGlzYWJsZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgd29ya2Jvb2sgYWN0aW9uIGNsaWNrXG4gICAqL1xuICBvbldvcmtib29rQWN0aW9uQ2xpY2soYWN0aW9uOiBXb3JrYm9va0FjdGlvbiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICBpZiAodGhpcy5pc0FjdGlvbkRpc2FibGVkKGFjdGlvbikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndvcmtib29rQWN0aW9uLmVtaXQoe1xuICAgICAgYWN0aW9uLFxuICAgICAgd29ya2Jvb2tJZDogdGhpcy5jb25maWcuaWRcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VXb3JrYm9va0FjdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUb2dnbGUgZnVsbHNjcmVlbiBtb2RlXG4gICAqL1xuICB0b2dnbGVGdWxsc2NyZWVuKCk6IHZvaWQge1xuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLmlzRnVsbHNjcmVlbiQudmFsdWU7XG4gICAgY29uc3QgbmV3VmFsdWUgPSAhY3VycmVudDtcbiAgICBcbiAgICB0aGlzLmlzRnVsbHNjcmVlbiQubmV4dChuZXdWYWx1ZSk7XG4gICAgdGhpcy5mdWxsc2NyZWVuVG9nZ2xlLmVtaXQobmV3VmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIGNoYW5nZSBmcm9tIHRhYmxlIC0gdXBkYXRlIGludGVybmFsIGRhdGEgYW5kIHBhc3MgdGhyb3VnaCB0byBwYXJlbnRcbiAgICovXG4gIG9uQ2VsbENoYW5nZShldmVudDogQ2VsbENoYW5nZUV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0ID0gdGhpcy5zaGVldHNbdGhpcy5hY3RpdmVTaGVldEluZGV4XTtcbiAgICBcbiAgICAvLyBVcGRhdGUgdGhlIGludGVybmFsIHNoZWV0c0RhdGEgd2l0aCB0aGUgbmV3IGNlbGwgdmFsdWVcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNoZWV0ICYmIGV2ZW50LnJvd0RhdGEgJiYgZXZlbnQuY29sdW1uS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5zaGVldHNEYXRhLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBzaGVldERhdGEgPSBjdXJyZW50RGF0YS5nZXQodGhpcy5zZWxlY3RlZFNoZWV0LmlkKTtcbiAgICAgIFxuICAgICAgaWYgKHNoZWV0RGF0YSAmJiBldmVudC5yb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWMgcm93J3MgY29sdW1uIHZhbHVlXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnNoZWV0RGF0YVtldmVudC5yb3dJbmRleF0gfTtcbiAgICAgICAgdXBkYXRlZFJvd1tldmVudC5jb2x1bW5LZXldID0gZXZlbnQubmV3VmFsdWU7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCByb3dcbiAgICAgICAgY29uc3QgdXBkYXRlZFNoZWV0RGF0YSA9IFsuLi5zaGVldERhdGFdO1xuICAgICAgICB1cGRhdGVkU2hlZXREYXRhW2V2ZW50LnJvd0luZGV4XSA9IHVwZGF0ZWRSb3c7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgTWFwIHdpdGggdGhlIHVwZGF0ZWQgc2hlZXQgZGF0YVxuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IG5ldyBNYXAoY3VycmVudERhdGEpO1xuICAgICAgICB1cGRhdGVkRGF0YS5zZXQodGhpcy5zZWxlY3RlZFNoZWV0LmlkLCB1cGRhdGVkU2hlZXREYXRhKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgQmVoYXZpb3JTdWJqZWN0IHdpdGggbmV3IHJlZmVyZW5jZVxuICAgICAgICB0aGlzLnNoZWV0c0RhdGEubmV4dCh1cGRhdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVtaXQgdG8gcGFyZW50XG4gICAgdGhpcy5jZWxsQ2hhbmdlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBjZWxsIHNhdmUgZnJvbSB0YWJsZSAtIHVwZGF0ZSBpbnRlcm5hbCBkYXRhIGFuZCBwYXNzIHRocm91Z2ggdG8gcGFyZW50XG4gICAqL1xuICBvbkNlbGxTYXZlKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICAvLyBVcGRhdGUgdGhlIGludGVybmFsIHNoZWV0c0RhdGEgd2l0aCB0aGUgbmV3IGNlbGwgdmFsdWVcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNoZWV0ICYmIGV2ZW50LnJvd0RhdGEgJiYgZXZlbnQuY29sdW1uS2V5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gdGhpcy5zaGVldHNEYXRhLmdldFZhbHVlKCk7XG4gICAgICBjb25zdCBzaGVldERhdGEgPSBjdXJyZW50RGF0YS5nZXQodGhpcy5zZWxlY3RlZFNoZWV0LmlkKTtcbiAgICAgIFxuICAgICAgaWYgKHNoZWV0RGF0YSAmJiBldmVudC5yb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgc3BlY2lmaWMgcm93J3MgY29sdW1uIHZhbHVlXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRSb3cgPSB7IC4uLnNoZWV0RGF0YVtldmVudC5yb3dJbmRleF0gfTtcbiAgICAgICAgdXBkYXRlZFJvd1tldmVudC5jb2x1bW5LZXldID0gZXZlbnQubmV3VmFsdWU7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgYXJyYXkgd2l0aCB0aGUgdXBkYXRlZCByb3dcbiAgICAgICAgY29uc3QgdXBkYXRlZFNoZWV0RGF0YSA9IFsuLi5zaGVldERhdGFdO1xuICAgICAgICB1cGRhdGVkU2hlZXREYXRhW2V2ZW50LnJvd0luZGV4XSA9IHVwZGF0ZWRSb3c7XG4gICAgICAgIFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgTWFwIHdpdGggdGhlIHVwZGF0ZWQgc2hlZXQgZGF0YVxuICAgICAgICBjb25zdCB1cGRhdGVkRGF0YSA9IG5ldyBNYXAoY3VycmVudERhdGEpO1xuICAgICAgICB1cGRhdGVkRGF0YS5zZXQodGhpcy5zZWxlY3RlZFNoZWV0LmlkLCB1cGRhdGVkU2hlZXREYXRhKTtcbiAgICAgICAgXG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgQmVoYXZpb3JTdWJqZWN0IHdpdGggbmV3IHJlZmVyZW5jZVxuICAgICAgICB0aGlzLnNoZWV0c0RhdGEubmV4dCh1cGRhdGVkRGF0YSk7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIC8vIEVtaXQgdG8gcGFyZW50XG4gICAgdGhpcy5jZWxsU2F2ZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgdGFibGUgc3RhdGUgY2hhbmdlIC0gcGFzcyB0aHJvdWdoIHRvIHBhcmVudFxuICAgKi9cbiAgb25UYWJsZVN0YXRlQ2hhbmdlKGV2ZW50OiBUYWJsZVN0YXRlQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnRhYmxlU3RhdGVDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50IGNsZWFudXBcbiAgICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcblxuICAgIC8vIENsZWFyIGF1dG9zYXZlIGRhdGEgb24gZGVzdHJveVxuICAgIGlmICh0aGlzLmF1dG9zYXZlRW5hYmxlZCkge1xuICAgICAgdGhpcy5hdXRvc2F2ZVNlcnZpY2UuY2xlYXIodGhpcy5jb25maWcuaWQpO1xuICAgIH1cblxuICAgIC8vIFJlbW92ZSBiZWZvcmV1bmxvYWQgaGFuZGxlclxuICAgIGlmICh0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCB0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGF1dG9zYXZlIHN1YnNjcmlwdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBpbml0aWFsaXplQXV0b3NhdmUoKTogdm9pZCB7XG4gICAgY29uc3QgY2hhbmdlRXZlbnRzJCA9IG1lcmdlKFxuICAgICAgdGhpcy5jZWxsQ2hhbmdlLFxuICAgICAgdGhpcy5jZWxsU2F2ZSxcbiAgICAgIHRoaXMudGFibGVTdGF0ZUNoYW5nZSxcbiAgICAgIHRoaXMuc2hlZXRUYWJBY3Rpb25cbiAgICApO1xuXG4gICAgY29uc3QgYXV0b3NhdmUkID0gdGhpcy5hdXRvc2F2ZVN0cmF0ZWd5ID09PSAnbGF6eSdcbiAgICAgID8gY2hhbmdlRXZlbnRzJC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmF1dG9zYXZlU2VydmljZS5zZXREaXJ0eSh0aGlzLmNvbmZpZy5pZCwgdHJ1ZSkpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgyMDAwKSxcbiAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpXG4gICAgICAgIClcbiAgICAgIDogY2hhbmdlRXZlbnRzJC5waXBlKFxuICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmF1dG9zYXZlU2VydmljZS5zZXREaXJ0eSh0aGlzLmNvbmZpZy5pZCwgdHJ1ZSkpLFxuICAgICAgICAgIGRlYm91bmNlVGltZSgxMDApXG4gICAgICAgICk7XG5cbiAgICBhdXRvc2F2ZSQucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKCgpID0+IHRoaXMucGVyZm9ybUF1dG9zYXZlKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYXV0b3NhdmUgb3BlcmF0aW9uXG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1BdXRvc2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2F2aW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGF1dG9zYXZlRGF0YTogQXV0b3NhdmVEYXRhID0ge1xuICAgICAgd29ya2Jvb2tDb25maWc6IHRoaXMuY29uZmlnLFxuICAgICAgd29ya2Jvb2tTdGF0ZTogdGhpcy5hY3RpdmVTdGF0ZS5nZXRTbmFwc2hvdCgpLFxuICAgICAgc2hlZXRzRGF0YTogbmV3IE1hcCh0aGlzLnNoZWV0c0RhdGEuZ2V0VmFsdWUoKSksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKClcbiAgICB9O1xuXG4gICAgdGhpcy5hdXRvc2F2ZVNlcnZpY2Uuc2F2ZSh0aGlzLmNvbmZpZy5pZCwgYXV0b3NhdmVEYXRhKTtcbiAgICB0aGlzLmxhc3RTYXZlVGltZSA9IG5ldyBEYXRlKCk7XG4gICAgdGhpcy5pc1NhdmluZyA9IGZhbHNlO1xuICAgIHRoaXMuYXV0b3NhdmVTZXJ2aWNlLnNldERpcnR5KHRoaXMuY29uZmlnLmlkLCBmYWxzZSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0dXAgYXV0by1yZXN0b3JlIGZyb20gYXV0b3NhdmVcbiAgICovXG4gIHByaXZhdGUgc2V0dXBBdXRvUmVzdG9yZSgpOiB2b2lkIHtcbiAgICBjb25zdCBhdXRvc2F2ZWQgPSB0aGlzLmF1dG9zYXZlU2VydmljZS5nZXQodGhpcy5jb25maWcuaWQpO1xuXG4gICAgaWYgKGF1dG9zYXZlZCkge1xuICAgICAgLy8gUmVzdG9yZSBjb25maWdcbiAgICAgIHRoaXMuY29uZmlnID0gYXV0b3NhdmVkLndvcmtib29rQ29uZmlnO1xuXG4gICAgICAvLyBSZXN0b3JlIHNoZWV0cyBkYXRhXG4gICAgICB0aGlzLnNoZWV0c0RhdGEubmV4dChhdXRvc2F2ZWQuc2hlZXRzRGF0YSk7XG5cbiAgICAgIC8vIE5vdGU6IFdvcmtib29rIHN0YXRlIHJlc3RvcmF0aW9uIGlzIGhhbmRsZWQgaW50ZXJuYWxseVxuICAgICAgLy8gSWYgZXh0ZXJuYWwgc3RhdGUgbWFuYWdlbWVudCBpcyB1c2VkLCBwYXJlbnQgY29tcG9uZW50IHNob3VsZCBoYW5kbGUgaXRcblxuICAgICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBhdXRvc2F2ZWQudGltZXN0YW1wO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBiZWZvcmV1bmxvYWQgd2FybmluZyBmb3IgdW5zYXZlZCBjaGFuZ2VzXG4gICAqL1xuICBwcml2YXRlIHNldHVwQmVmb3JlVW5sb2FkV2FybmluZygpOiB2b2lkIHtcbiAgICB0aGlzLmJlZm9yZVVubG9hZEhhbmRsZXIgPSAoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB7XG4gICAgICBpZiAodGhpcy5hdXRvc2F2ZVNlcnZpY2UuaXNEaXJ0eSh0aGlzLmNvbmZpZy5pZCkpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQucmV0dXJuVmFsdWUgPSAnWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gbGVhdmU/JztcbiAgICAgICAgcmV0dXJuIGV2ZW50LnJldHVyblZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlcik7XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cIndvcmtib29rLWNvbnRhaW5lclwiIFtjbGFzcy5mdWxsc2NyZWVuXT1cImlzRnVsbHNjcmVlbiQgfCBhc3luY1wiPlxuICA8bmlsZS10YWItZ3JvdXAgW2FjdGl2ZUluZGV4XT1cImFjdGl2ZVNoZWV0SW5kZXhcIj5cbiAgICBcbiAgICA8IS0tIFNoZWV0IFRhYnMgKG9uZSBwZXIgc2hlZXQpIC0tPlxuICAgIDxuaWxlLXRhYiAqbmdGb3I9XCJsZXQgc2hlZXQgb2Ygc2hlZXRzOyBsZXQgaSA9IGluZGV4XCJcbiAgICAgICAgICAgICAgc2xvdD1cIm5hdlwiIFxuICAgICAgICAgICAgICBwYW5lbD1cInNoYXJlZC1wYW5lbFwiXG4gICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaSA9PT0gYWN0aXZlU2hlZXRJbmRleFwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJvblRhYkNoYW5nZShpKVwiPlxuICAgICAgPGRpdiBjbGFzcz1cInNoZWV0LXRhYi1jb250ZW50XCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwic2hlZXQtbmFtZVwiPnt7IHNoZWV0Lm5hbWUgfX08L3NwYW4+XG4gICAgICAgIFxuICAgICAgICA8IS0tIFRhYiBhY3Rpb25zIGRyb3Bkb3duIGJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInRhYi1hY3Rpb25zLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5UYWJBY3Rpb25zKCRldmVudCwgc2hlZXQsIGkpXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImhhc1RhYkFjdGlvbnMoc2hlZXQpXCI+XG4gICAgICAgICAgPG5pbGUtaWNvbiBuYW1lPVwiYXJyb3dkb3duXCIgc2l6ZT1cIjE0XCI+PC9uaWxlLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uaWxlLXRhYj5cbiAgICBcbiAgICA8IS0tIFRvb2xiYXIgVGFiIChmb3Igd29ya2Jvb2sgY29udHJvbHMpIC0tPlxuICAgIDxuaWxlLXRhYiBzbG90PVwibmF2XCIgXG4gICAgICAgICAgICAgIHBhbmVsPVwic2hhcmVkLXBhbmVsXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJ3b3JrYm9vay10b29sYmFyLXRhYlwiXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0cnVlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwid29ya2Jvb2stdG9vbGJhci1jb250ZW50XCI+XG4gICAgICAgIDwhLS0gQXV0b3NhdmUgSW5kaWNhdG9yIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXV0b3NhdmUtaW5kaWNhdG9yXCIgKm5nSWY9XCJhdXRvc2F2ZUVuYWJsZWRcIj5cbiAgICAgICAgICA8bmlsZS1pY29uIFxuICAgICAgICAgICAgKm5nSWY9XCIhaXNTYXZpbmcgJiYgbGFzdFNhdmVUaW1lXCIgXG4gICAgICAgICAgICBuYW1lPVwic2F2ZVwiIFxuICAgICAgICAgICAgc2l6ZT1cIjE0XCJcbiAgICAgICAgICAgIFt0aXRsZV09XCInU2F2ZWQgYXQgJyArIChsYXN0U2F2ZVRpbWUgfCBkYXRlOidISDptbTpzcycpXCI+XG4gICAgICAgICAgPC9uaWxlLWljb24+XG4gICAgICAgICAgPG5pbGUtaWNvbiBcbiAgICAgICAgICAgICpuZ0lmPVwiaXNTYXZpbmdcIiBcbiAgICAgICAgICAgIG5hbWU9XCJsb2FkZXJcIiBcbiAgICAgICAgICAgIHNpemU9XCIxNFwiXG4gICAgICAgICAgICB0aXRsZT1cIlNhdmluZy4uLlwiPlxuICAgICAgICAgIDwvbmlsZS1pY29uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8IS0tIFdvcmtib29rIEFjdGlvbnMgRHJvcGRvd24gLS0+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJ3b3JrYm9vay1hY3Rpb25zLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcud29ya2Jvb2tBY3Rpb25zICYmIGNvbmZpZy53b3JrYm9va0FjdGlvbnMubGVuZ3RoID4gMFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVdvcmtib29rQWN0aW9ucygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIldvcmtib29rIEFjdGlvbnNcIj5cbiAgICAgICAgICA8bmlsZS1pY29uIG5hbWU9XCJzZXR0aW5nc1wiPjwvbmlsZS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gQWRkIFNoZWV0IEJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1zaGVldC1idXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuQWRkU2hlZXRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkFkZFNoZWV0KClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiQWRkIFNoZWV0XCI+XG4gICAgICAgICAgPG5pbGUtaWNvbiBuYW1lPVwicGx1c1wiPjwvbmlsZS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gRnVsbHNjcmVlbiBCdXR0b24gLS0+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJmdWxsc2NyZWVuLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb25maWcuZGlzcGxheT8uYWxsb3dGdWxsc2NyZWVuICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cIihpc0Z1bGxzY3JlZW4kIHwgYXN5bmMpID8gJ0V4aXQgRnVsbHNjcmVlbicgOiAnRnVsbHNjcmVlbidcIj5cbiAgICAgICAgICA8bmlsZS1pY29uIFtuYW1lXT1cIihpc0Z1bGxzY3JlZW4kIHwgYXN5bmMpID8gJ2NvbGxhcHNlJyA6ICdleHBhbmQtMDYnXCI+PC9uaWxlLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9uaWxlLXRhYj5cbiAgICBcbiAgICA8IS0tIFNpbmdsZSBTaGFyZWQgVGFiIFBhbmVsIC0tPlxuICAgIDxuaWxlLXRhYi1wYW5lbCBuYW1lPVwic2hhcmVkLXBhbmVsXCI+XG4gICAgICA8IS0tIExhenkgbG9hZGluZyBzdHJhdGVneTogdGFibGUgaXMgZGVzdHJveWVkIGFuZCByZWNyZWF0ZWQgd2l0aCBuZXcgY29uZmlnL3N0YXRlIHdoZW4gc2hlZXQgY2hhbmdlcyAtLT5cbiAgICAgIDwhLS0gVXNpbmcgbmdGb3Igd2l0aCB0cmFja0J5IHRvIGZvcmNlIGNvbXBsZXRlIHJlaW5pdGlhbGl6YXRpb24gd2hlbiB0YWJsZUNvbXBvbmVudEtleSBjaGFuZ2VzIC0tPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQga2V5IG9mIFt0YWJsZUNvbXBvbmVudEtleV07IHRyYWNrQnk6IHRyYWNrQnlLZXlcIj5cbiAgICAgICAgPHN0LXRhYmxlICpuZ0lmPVwiY3VycmVudFRhYmxlQ29uZmlnICYmIGN1cnJlbnRUYWJsZVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgIFthdHRyLmRhdGEtc2hlZXQta2V5XT1cImtleVwiXG4gICAgICAgICAgICAgICAgICBbdGFibGVDb25maWddPVwiY3VycmVudFRhYmxlQ29uZmlnXCJcbiAgICAgICAgICAgICAgICAgIFtkYXRhJF09XCJjdXJyZW50VGFibGVEYXRhJFwiXG4gICAgICAgICAgICAgICAgICBbdGFibGVTdGF0ZV09XCJjdXJyZW50VGFibGVTdGF0ZVwiXG4gICAgICAgICAgICAgICAgICAoY2VsbENoYW5nZSk9XCJvbkNlbGxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAoY2VsbFNhdmUpPVwib25DZWxsU2F2ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChzdGF0ZUNoYW5nZSk9XCJvblRhYmxlU3RhdGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICA8L3N0LXRhYmxlPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uaWxlLXRhYi1wYW5lbD5cbiAgICBcbiAgPC9uaWxlLXRhYi1ncm91cD5cbjwvZGl2PlxuXG48IS0tIFRhYiBBY3Rpb25zIERyb3Bkb3duIC0tPlxuPGRpdiBjbGFzcz1cInRhYi1hY3Rpb25zLWRyb3Bkb3duXCIgXG4gICAgICpuZ0lmPVwidGFiQWN0aW9uc09wZW5cIlxuICAgICBbbmdTdHlsZV09XCJ0YWJBY3Rpb25zUG9zaXRpb25cIj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLWJhY2tkcm9wXCIgKGNsaWNrKT1cImNsb3NlVGFiQWN0aW9ucygpXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgPG5pbGUtbWVudT5cbiAgICAgIDxuaWxlLW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHNlbGVjdGVkU2hlZXQ/LnRhYkFjdGlvbnNcIiBcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25UYWJBY3Rpb25DbGljayhhY3Rpb24sICRldmVudClcIj5cbiAgICAgICAgPG5pbGUtaWNvbiAqbmdJZj1cImFjdGlvbi5pY29uXCIgc2xvdD1cInByZWZpeFwiIHNpemU9XCIxNFwiIFtuYW1lXT1cImFjdGlvbi5pY29uXCI+PC9uaWxlLWljb24+XG4gICAgICAgIHt7IGFjdGlvbi5sYWJlbCB9fVxuICAgICAgPC9uaWxlLW1lbnUtaXRlbT5cbiAgICA8L25pbGUtbWVudT5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPCEtLSBXb3JrYm9vayBBY3Rpb25zIERyb3Bkb3duIC0tPlxuPGRpdiBjbGFzcz1cIndvcmtib29rLWFjdGlvbnMtZHJvcGRvd25cIlxuICAgICAqbmdJZj1cIndvcmtib29rQWN0aW9uc09wZW5cIlxuICAgICBbbmdTdHlsZV09XCJ3b3JrYm9va0FjdGlvbnNQb3NpdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VXb3JrYm9va0FjdGlvbnMoKVwiPjwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudVwiPlxuICAgIDxuaWxlLW1lbnU+XG4gICAgICA8bmlsZS1tZW51LWl0ZW0gKm5nRm9yPVwibGV0IGFjdGlvbiBvZiB2aXNpYmxlV29ya2Jvb2tBY3Rpb25zXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiaXNBY3Rpb25EaXNhYmxlZChhY3Rpb24pXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25Xb3JrYm9va0FjdGlvbkNsaWNrKGFjdGlvbiwgJGV2ZW50KVwiPlxuICAgICAgICA8bmlsZS1pY29uICpuZ0lmPVwiYWN0aW9uLmljb25cIiBzbG90PVwicHJlZml4XCIgc2l6ZT1cIjE0XCIgW25hbWVdPVwiYWN0aW9uLmljb25cIj48L25pbGUtaWNvbj5cbiAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgIDwvbmlsZS1tZW51PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIEZ1bGxzY3JlZW4gQmFja2Ryb3AgLS0+XG48ZGl2IGNsYXNzPVwiZnVsbHNjcmVlbi1iYWNrZHJvcFwiIFxuICAgICAqbmdJZj1cImlzRnVsbHNjcmVlbiQgfCBhc3luY1wiXG4gICAgIChjbGljayk9XCJ0b2dnbGVGdWxsc2NyZWVuKClcIj5cbjwvZGl2PlxuXG4iXX0=
|
|
547
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qtd29ya2Jvb2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9yZW5kZXJlci9jb21wb25lbnRzL3N0LXdvcmtib29rL3N0LXdvcmtib29rLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvcmVuZGVyZXIvY29tcG9uZW50cy9zdC13b3JrYm9vay9zdC13b3JrYm9vay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxHQU1iLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUdwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFFbEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBSTVELE9BQU8sRUFBb0IsdUJBQXVCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQzs7Ozs7QUFRdEcsTUFBTSxPQUFPLG1CQUFtQjtJQXVKOUIsWUFDVSxlQUFnQyxFQUNoQyxHQUFzQjtRQUR0QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFuSmhDOztXQUVHO1FBQ00sZUFBVSxHQUF3QyxJQUFJLGVBQWUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFPMUY7O1dBRUc7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFcEQ7O1dBRUc7UUFD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RSxDQUFDO2dCQUN2QixLQUFLLENBQUMsV0FBVyxHQUFHLDJEQUEyRCxDQUFDO2dCQUNoRixPQUFPLEtBQUssQ0FBQyxXQUFXLENBQUM7YUFDMUI7WUFDRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFFRixNQUFNLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7O2dIQWhvQlUsbUJBQW1CO29HQUFuQixtQkFBbUIsaWJDN0JoQyxzaUtBaUlBOzJGRHBHYSxtQkFBbUI7a0JBTC9CLFNBQVM7K0JBQ0UsYUFBYTtzSUFRZCxNQUFNO3NCQUFkLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxLQUFLO3NCQUFiLEtBQUs7Z0JBS0ksWUFBWTtzQkFBckIsTUFBTTtnQkFLRyxRQUFRO3NCQUFqQixNQUFNO2dCQUtHLGNBQWM7c0JBQXZCLE1BQU07Z0JBS0csY0FBYztzQkFBdkIsTUFBTTtnQkFLRyxVQUFVO3NCQUFuQixNQUFNO2dCQUtHLFFBQVE7c0JBQWpCLE1BQU07Z0JBS0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUtHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFNRyxhQUFhO3NCQUF0QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIENoYW5nZURldGVjdG9yUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV29ya2Jvb2tDb25maWcsIFdvcmtib29rU2hlZXRDb25maWcgfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvd29ya2Jvb2stY29uZmlnLmludGVyZmFjZSc7XG5pbXBvcnQgeyBXb3JrYm9va0FjdGlvbiwgV29ya2Jvb2tBY3Rpb25FdmVudCwgU2hlZXRUYWJBY3Rpb25FdmVudCB9IGZyb20gJy4uLy4uLy4uL21vZGVscy93b3JrYm9vay1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFdvcmtib29rU3RhdGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvd29ya2Jvb2stc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgV29ya2Jvb2tTdGF0ZVNuYXBzaG90IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmtib29rLXN0YXRlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBUYWJsZVN0YXRlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXN0YXRlLmNsYXNzJztcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL3RhYmxlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbENoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2NlbGwtdHlwZXMnO1xuaW1wb3J0IHsgVGFibGVTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RhYmxlLXR5cGVzJztcbmltcG9ydCB7IEF1dG9zYXZlU3RyYXRlZ3ksIERFRkFVTFRfQVVUT1NBVkVfQ09ORklHIH0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2F1dG9zYXZlLWNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQXV0b3NhdmVTZXJ2aWNlLCBBdXRvc2F2ZURhdGEgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9hdXRvc2F2ZS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc3Qtd29ya2Jvb2snLFxuICB0ZW1wbGF0ZVVybDogJy4vc3Qtd29ya2Jvb2suY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zdC13b3JrYm9vay5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBTdFdvcmtib29rQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBXb3JrYm9vayBjb25maWd1cmF0aW9uXG4gICAqL1xuICBASW5wdXQoKSBjb25maWchOiBXb3JrYm9va0NvbmZpZztcblxuICAvKipcbiAgICogTWFwIG9mIHNoZWV0IElEIHRvIGRhdGEgYXJyYXlcbiAgICovXG4gIEBJbnB1dCgpIHNoZWV0c0RhdGE6IEJlaGF2aW9yU3ViamVjdDxNYXA8c3RyaW5nLCBhbnlbXT4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChuZXcgTWFwKCkpO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBleHRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50XG4gICAqL1xuICBASW5wdXQoKSBzdGF0ZT86IFdvcmtib29rU3RhdGU7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhY3RpdmUgc2hlZXQgY2hhbmdlc1xuICAgKi9cbiAgQE91dHB1dCgpIHNoZWV0Q2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYWRkIHNoZWV0IGJ1dHRvbiBpcyBjbGlja2VkXG4gICAqL1xuICBAT3V0cHV0KCkgYWRkU2hlZXQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiBhIHNoZWV0IHRhYiBhY3Rpb24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHNoZWV0VGFiQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxTaGVldFRhYkFjdGlvbkV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gYSB3b3JrYm9vayBhY3Rpb24gaXMgY2xpY2tlZFxuICAgKi9cbiAgQE91dHB1dCgpIHdvcmtib29rQWN0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxXb3JrYm9va0FjdGlvbkV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gY2VsbCB2YWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBAT3V0cHV0KCkgY2VsbENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q2VsbENoYW5nZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gY2VsbCBpcyBzYXZlZFxuICAgKi9cbiAgQE91dHB1dCgpIGNlbGxTYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgLyoqXG4gICAqIEVtaXR0ZWQgd2hlbiB0YWJsZSBzdGF0ZSBjaGFuZ2VzXG4gICAqL1xuICBAT3V0cHV0KCkgdGFibGVTdGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGFibGVTdGF0ZUNoYW5nZUV2ZW50PigpO1xuXG4gIC8qKlxuICAgKiBFbWl0dGVkIHdoZW4gZnVsbHNjcmVlbiBpcyB0b2dnbGVkXG4gICAqL1xuICBAT3V0cHV0KCkgZnVsbHNjcmVlblRvZ2dsZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAvKipcbiAgICogRW1pdHRlZCB3aGVuIHVzZXIgbmF2aWdhdGVzIHBhc3QgbGFzdCByb3cgKGFycm93IGRvd24gYXQgYm90dG9tKVxuICAgKiBPbmx5IGVtaXR0ZWQgaWYgYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQgaXMgZW5hYmxlZCBpbiB0YWJsZUNvbmZpZ1xuICAgKi9cbiAgQE91dHB1dCgpIHJlcXVlc3RBZGRSb3cgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc2hlZXRJZDogc3RyaW5nOyBmb2N1c0NvbHVtbj86IG51bWJlciB9PigpO1xuXG4gIC8qKlxuICAgKiBBcnJheSBvZiBzaGVldHNcbiAgICovXG4gIHNoZWV0czogV29ya2Jvb2tTaGVldENvbmZpZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIEFjdGl2ZSBzaGVldCBpbmRleFxuICAgKi9cbiAgYWN0aXZlU2hlZXRJbmRleCA9IDA7XG5cbiAgLyoqXG4gICAqIEN1cnJlbnQgdGFibGUgY29uZmlnIChmb3IgYWN0aXZlIHNoZWV0KVxuICAgKi9cbiAgY3VycmVudFRhYmxlQ29uZmlnOiBUYWJsZUNvbmZpZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBDdXJyZW50IHRhYmxlIGRhdGEgKGZvciBhY3RpdmUgc2hlZXQpIC0gdXNpbmcgQmVoYXZpb3JTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzXG4gICAqL1xuICBjdXJyZW50VGFibGVEYXRhJDogQmVoYXZpb3JTdWJqZWN0PGFueVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55W10+KFtdKTtcblxuICAvKipcbiAgICogQ3VycmVudCB0YWJsZSBzdGF0ZSAoZm9yIGFjdGl2ZSBzaGVldClcbiAgICovXG4gIGN1cnJlbnRUYWJsZVN0YXRlOiBUYWJsZVN0YXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFVuaXF1ZSBrZXkgZm9yIHRhYmxlIGNvbXBvbmVudCAoY2hhbmdlcyBvbiBzaGVldCBzd2l0Y2ggdG8gZm9yY2UgcmVpbml0aWFsaXphdGlvbilcbiAgICovXG4gIHRhYmxlQ29tcG9uZW50S2V5OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogSW50ZXJuYWwgc3RhdGUgaW5zdGFuY2VcbiAgICovXG4gIGludGVybmFsU3RhdGU/OiBXb3JrYm9va1N0YXRlO1xuXG4gIC8qKlxuICAgKiBGdWxsc2NyZWVuIHN0YXRlIG9ic2VydmFibGVcbiAgICovXG4gIGlzRnVsbHNjcmVlbiQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAvKipcbiAgICogVGFiIGFjdGlvbnMgZHJvcGRvd24gc3RhdGVcbiAgICovXG4gIHRhYkFjdGlvbnNPcGVuID0gZmFsc2U7XG4gIHNlbGVjdGVkU2hlZXQ6IFdvcmtib29rU2hlZXRDb25maWcgfCBudWxsID0gbnVsbDtcbiAgc2VsZWN0ZWRTaGVldEluZGV4OiBudW1iZXIgPSAtMTtcbiAgdGFiQWN0aW9uc1Bvc2l0aW9uOiBhbnkgPSB7fTtcblxuICAvKipcbiAgICogV29ya2Jvb2sgYWN0aW9ucyBkcm9wZG93biBzdGF0ZVxuICAgKi9cbiAgd29ya2Jvb2tBY3Rpb25zT3BlbiA9IGZhbHNlO1xuICB3b3JrYm9va0FjdGlvbnNQb3NpdGlvbjogYW55ID0ge307XG5cbiAgLyoqXG4gICAqIFZpc2libGUgd29ya2Jvb2sgYWN0aW9ucyAoZmlsdGVyZWQgYnkgaGlkZGVuKVxuICAgKi9cbiAgdmlzaWJsZVdvcmtib29rQWN0aW9uczogV29ya2Jvb2tBY3Rpb25bXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBEZXN0cm95IHN1YmplY3QgZm9yIGNsZWFudXBcbiAgICovXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8qKlxuICAgKiBBdXRvc2F2ZSBlbmFibGVkIGZsYWdcbiAgICovXG4gIGF1dG9zYXZlRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBdXRvc2F2ZSBzdHJhdGVneVxuICAgKi9cbiAgcHJpdmF0ZSBhdXRvc2F2ZVN0cmF0ZWd5OiBBdXRvc2F2ZVN0cmF0ZWd5ID0gJ2xhenknO1xuXG4gIC8qKlxuICAgKiBMYXN0IHNhdmUgdGltZXN0YW1wXG4gICAqL1xuICBsYXN0U2F2ZVRpbWU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogU2F2aW5nIGluZGljYXRvclxuICAgKi9cbiAgaXNTYXZpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQmVmb3JldW5sb2FkIGhhbmRsZXIgcmVmZXJlbmNlXG4gICAqL1xuICBwcml2YXRlIGJlZm9yZVVubG9hZEhhbmRsZXI6ICgoZXZlbnQ6IEJlZm9yZVVubG9hZEV2ZW50KSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYXV0b3NhdmVTZXJ2aWNlOiBBdXRvc2F2ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmluaXRpYWxpemVDb21wb25lbnQoKTtcblxuICAgIC8vIFN1YnNjcmliZSB0byBzaGVldHNEYXRhIGNoYW5nZXMgdG8gdXBkYXRlIGN1cnJlbnRUYWJsZURhdGEkIHJlYWN0aXZlbHlcbiAgICB0aGlzLnNoZWV0c0RhdGEucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICkuc3Vic2NyaWJlKChkYXRhTWFwKSA9PiB7XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFNoZWV0ICYmIGRhdGFNYXApIHtcbiAgICAgICAgY29uc3QgbmV3RGF0YSA9IGRhdGFNYXAuZ2V0KHRoaXMuc2VsZWN0ZWRTaGVldC5pZCk7XG4gICAgICAgIGlmIChuZXdEYXRhKSB7XG4gICAgICAgICAgLy8gVXBkYXRlIHRoZSBCZWhhdmlvclN1YmplY3QgLSBzdC10YWJsZSB3aWxsIHJlYWN0IGF1dG9tYXRpY2FsbHlcbiAgICAgICAgICB0aGlzLmN1cnJlbnRUYWJsZURhdGEkLm5leHQoWy4uLm5ld0RhdGFdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBhdXRvc2F2ZSBpZiBlbmFibGVkXG4gICAgY29uc3QgYXV0b3NhdmVDb25maWcgPSB0aGlzLmNvbmZpZy5hdXRvc2F2ZSB8fCBERUZBVUxUX0FVVE9TQVZFX0NPTkZJRztcbiAgICB0aGlzLmF1dG9zYXZlRW5hYmxlZCA9IGF1dG9zYXZlQ29uZmlnLmVuYWJsZWQ7XG4gICAgdGhpcy5hdXRvc2F2ZVN0cmF0ZWd5ID0gYXV0b3NhdmVDb25maWcuc3RyYXRlZ3k7XG5cbiAgICBpZiAodGhpcy5hdXRvc2F2ZUVuYWJsZWQpIHtcbiAgICAgIHRoaXMuc2V0dXBBdXRvUmVzdG9yZSgpO1xuICAgICAgdGhpcy5pbml0aWFsaXplQXV0b3NhdmUoKTtcbiAgICAgIHRoaXMuc2V0dXBCZWZvcmVVbmxvYWRXYXJuaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydjb25maWcnXSkge1xuICAgICAgY29uc3QgaXNGaXJzdENoYW5nZSA9IGNoYW5nZXNbJ2NvbmZpZyddLmZpcnN0Q2hhbmdlO1xuICAgICAgdGhpcy5pbml0aWFsaXplQ29tcG9uZW50KGlzRmlyc3RDaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGNvbXBvbmVudCBzdGF0ZVxuICAgKiBAcGFyYW0gaXNGaXJzdEluaXQgV2hldGhlciB0aGlzIGlzIHRoZSBmaXJzdCBpbml0aWFsaXphdGlvbiAodHJ1ZSkgb3IgYSBjb25maWcgdXBkYXRlIChmYWxzZSlcbiAgICovXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUNvbXBvbmVudChpc0ZpcnN0SW5pdDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnKSByZXR1cm47XG5cbiAgICBjb25zdCBwcmV2aW91c1NoZWV0Q291bnQgPSB0aGlzLnNoZWV0cy5sZW5ndGg7XG4gICAgdGhpcy5zaGVldHMgPSBbLi4udGhpcy5jb25maWcuc2hlZXRzXTtcbiAgICBjb25zdCBuZXdTaGVldENvdW50ID0gdGhpcy5zaGVldHMubGVuZ3RoO1xuICAgIFxuICAgIC8vIE9ubHkgcmVzZXQgYWN0aXZlU2hlZXRJbmRleCBvbiBmaXJzdCBpbml0LCBwcmVzZXJ2ZSBpdCBvbiBjb25maWcgdXBkYXRlc1xuICAgIGlmIChpc0ZpcnN0SW5pdCkge1xuICAgICAgdGhpcy5hY3RpdmVTaGVldEluZGV4ID0gdGhpcy5jb25maWcuaW5pdGlhbEFjdGl2ZVNoZWV0SW5kZXggfHwgMDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ2hlY2sgaWYgYSBuZXcgc2hlZXQgd2FzIGFkZGVkIC0gc3dpdGNoIHRvIHRoZSBuZXcgc2hlZXRcbiAgICAgIGlmIChuZXdTaGVldENvdW50ID4gcHJldmlvdXNTaGVldENvdW50KSB7XG4gICAgICAgIHRoaXMuYWN0aXZlU2hlZXRJbmRleCA9IG5ld1NoZWV0Q291bnQgLSAxOyAvLyBTd2l0Y2ggdG8gdGhlIG5ld2x5IGFkZGVkIHNoZWV0XG4gICAgICB9XG4gICAgICAvLyBFbnN1cmUgYWN0aXZlU2hlZXRJbmRleCBpcyBzdGlsbCB2YWxpZCBhZnRlciBjb25maWcgY2hhbmdlIChlLmcuLCBzaGVldCBkZWxldGVkKVxuICAgICAgZWxzZSBpZiAodGhpcy5hY3RpdmVTaGVldEluZGV4ID49IHRoaXMuc2hlZXRzLmxlbmd0aCkge1xuICAgICAgICB0aGlzLmFjdGl2ZVNoZWV0SW5kZXggPSBNYXRoLm1heCgwLCB0aGlzLnNoZWV0cy5sZW5ndGggLSAxKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgaWYgKCF0aGlzLnN0YXRlKSB7XG4gICAgICB0aGlzLmludGVybmFsU3RhdGUgPSBuZXcgV29ya2Jvb2tTdGF0ZSh7XG4gICAgICAgIGlkOiB0aGlzLmNvbmZpZy5pZCxcbiAgICAgICAgbmFtZTogdGhpcy5jb25maWcubmFtZSxcbiAgICAgICAgaW5pdGlhbEFjdGl2ZVNoZWV0SW5kZXg6IHRoaXMuYWN0aXZlU2hlZXRJbmRleFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVWaXNpYmxlV29ya2Jvb2tBY3Rpb25zKCk7XG4gICAgdGhpcy51cGRhdGVBY3RpdmVTaGVldCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhY3RpdmUgc3RhdGUgKGV4dGVybmFsIG9yIGludGVybmFsKVxuICAgKi9cbiAgZ2V0IGFjdGl2ZVN0YXRlKCk6IFdvcmtib29rU3RhdGUge1xuICAgIHJldHVybiB0aGlzLnN0YXRlIHx8IHRoaXMuaW50ZXJuYWxTdGF0ZSE7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRhYiBjaGFuZ2UgZXZlbnQgZnJvbSBuaWxlLXRhYi1ncm91cFxuICAgKi9cbiAgb25UYWJDaGFuZ2UoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIGNvbnN0IG5ld0luZGV4ID0gZXZlbnQuZGV0YWlsPy5pbmRleCA/PyBldmVudDtcbiAgICBcbiAgICAvLyBJZ25vcmUgaWYgY2xpY2tlZCBvbiB0b29sYmFyIHRhYlxuICAgIGlmIChuZXdJbmRleCA+PSB0aGlzLnNoZWV0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGl2ZVNoZWV0SW5kZXggPSBuZXdJbmRleDtcbiAgICB0aGlzLmFjdGl2ZVN0YXRlLnNldEFjdGl2ZVNoZWV0SW5kZXgobmV3SW5kZXgpO1xuICAgIHRoaXMudXBkYXRlQWN0aXZlU2hlZXQoKTtcbiAgICB0aGlzLnNoZWV0Q2hhbmdlZC5lbWl0KHRoaXMuYWN0aXZlU2hlZXRJbmRleCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIGFjdGl2ZSBzaGVldCBkYXRhICh0cmlnZ2VycyB0YWJsZSByZS1pbml0aWFsaXphdGlvbiB3aXRoIG5ldyBjb25maWcvc3RhdGUpXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjdGl2ZVNoZWV0KCk6IHZvaWQge1xuICAgIGNvbnN0IHNoZWV0ID0gdGhpcy5zaGVldHNbdGhpcy5hY3RpdmVTaGVldEluZGV4XTtcbiAgICBpZiAoIXNoZWV0KSByZXR1cm47XG5cbiAgICAvLyBVcGRhdGUgc2VsZWN0ZWQgc2hlZXQgcmVmZXJlbmNlIGZvciBkYXRhIHN1YnNjcmlwdGlvbnNcbiAgICB0aGlzLnNlbGVjdGVkU2hlZXQgPSBzaGVldDtcbiAgICB0aGlzLnNlbGVjdGVkU2hlZXRJbmRleCA9IHRoaXMuYWN0aXZlU2hlZXRJbmRleDtcblxuICAgIC8vIEdldCBzaGVldCBkYXRhXG4gICAgY29uc3Qgc2hlZXREYXRhID0gdGhpcy5zaGVldHNEYXRhLmdldFZhbHVlKCk/LmdldChzaGVldC5pZCkgfHwgW107XG5cbiAgICAvLyBDcmVhdGUgYSBmcmVzaCBUYWJsZVN0YXRlIGZvciB0aGlzIHNoZWV0IChsYXp5IGluaXRpYWxpemF0aW9uKVxuICAgIC8vIFRoaXMgZW5zdXJlcyB0aGUgdGFibGUgcmVpbml0aWFsaXplcyB3aXRoIG5ldyBjb25maWcgYW5kIHN0YXRlXG4gICAgY29uc3QgdGFibGVTdGF0ZSA9IG5ldyBUYWJsZVN0YXRlKFxuICAgICAgc2hlZXQudGFibGVDb25maWcuY29sdW1ucyxcbiAgICAgIHtcbiAgICAgICAgaW5pdGlhbFBhZ2U6IHNoZWV0LnRhYmxlQ29uZmlnLmluaXRpYWxTdGF0ZT8ucGFnZSB8fCAxLFxuICAgICAgICBwYWdlU2l6ZTogc2hlZXQudGFibGVDb25maWcucGFnaW5hdGlvbj8ucGFnZVNpemUgfHwgMjVcbiAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gVXBkYXRlIGN1cnJlbnQgdGFibGUgcHJvcGVydGllcyAodHJpZ2dlcnMgQW5ndWxhciBjaGFuZ2UgZGV0ZWN0aW9uKVxuICAgIC8vIFRoZSBzdC10YWJsZSBjb21wb25lbnQgd2lsbCBkZXRlY3QgdGhlc2UgY2hhbmdlcyBhbmQgcmVpbml0aWFsaXplXG4gICAgdGhpcy5jdXJyZW50VGFibGVDb25maWcgPSB7IC4uLnNoZWV0LnRhYmxlQ29uZmlnIH07XG4gICAgdGhpcy5jdXJyZW50VGFibGVEYXRhJC5uZXh0KHNoZWV0RGF0YSk7XG4gICAgdGhpcy5jdXJyZW50VGFibGVTdGF0ZSA9IHRhYmxlU3RhdGU7XG4gICAgXG4gICAgLy8gVXBkYXRlIGNvbXBvbmVudCBrZXkgdG8gZm9yY2UgRE9NIHJlLWNyZWF0aW9uICh0cnVlIGxhenkgbG9hZGluZylcbiAgICAvLyBUaGlzIGVuc3VyZXMgY29tcGxldGUgcmVpbml0aWFsaXphdGlvbiBvZiBzdC10YWJsZSBjb21wb25lbnRcbiAgICB0aGlzLnRhYmxlQ29tcG9uZW50S2V5ID0gYCR7c2hlZXQuaWR9LSR7RGF0ZS5ub3coKX1gO1xuXG4gICAgLy8gU3RvcmUgdGhlIHRhYmxlIHN0YXRlIGluIHdvcmtib29rIHN0YXRlIGZvciBwZXJzaXN0ZW5jZVxuICAgIHRoaXMuYWN0aXZlU3RhdGUuc2V0U2hlZXRUYWJsZVN0YXRlKHNoZWV0LmlkLCB0YWJsZVN0YXRlKTtcblxuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBuZXcgc2hlZXRcbiAgICovXG4gIG9uQWRkU2hlZXQoKTogdm9pZCB7XG4gICAgdGhpcy5hZGRTaGVldC5lbWl0KCk7XG4gIH1cblxuICAvKipcbiAgICogVHJhY2tCeSBmdW5jdGlvbiB0byBmb3JjZSBjb21wb25lbnQgcmVjcmVhdGlvbiB3aGVuIGtleSBjaGFuZ2VzXG4gICAqL1xuICB0cmFja0J5S2V5KGluZGV4OiBudW1iZXIsIGtleTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGNhbiBhZGQgbW9yZSBzaGVldHNcbiAgICovXG4gIGdldCBjYW5BZGRTaGVldCgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5jb25maWcuZGlzcGxheT8uYWxsb3dBZGRTaGVldCA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY29uZmlnLmRpc3BsYXk/Lm1heFNoZWV0cykge1xuICAgICAgcmV0dXJuIHRoaXMuc2hlZXRzLmxlbmd0aCA8IHRoaXMuY29uZmlnLmRpc3BsYXkubWF4U2hlZXRzO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgbWluaW11bSBzaGVldHMgcmVxdWlyZWRcbiAgICovXG4gIGdldCBtaW5TaGVldHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuZGlzcGxheT8ubWluU2hlZXRzIHx8IDE7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiB0YWIgYWN0aW9ucyBkcm9wZG93blxuICAgKi9cbiAgb3BlblRhYkFjdGlvbnMoZXZlbnQ6IE1vdXNlRXZlbnQsIHNoZWV0OiBXb3JrYm9va1NoZWV0Q29uZmlnLCBpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgXG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0ID0gc2hlZXQ7XG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0SW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnRhYkFjdGlvbnNPcGVuID0gdHJ1ZTtcblxuICAgIC8vIFBvc2l0aW9uIGRyb3Bkb3duXG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHRoaXMudGFiQWN0aW9uc1Bvc2l0aW9uID0ge1xuICAgICAgdG9wOiBgJHtyZWN0LmJvdHRvbSArIDR9cHhgLFxuICAgICAgbGVmdDogYCR7cmVjdC5sZWZ0fXB4YFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2UgdGFiIGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIGNsb3NlVGFiQWN0aW9ucygpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkFjdGlvbnNPcGVuID0gZmFsc2U7XG4gICAgdGhpcy5zZWxlY3RlZFNoZWV0ID0gbnVsbDtcbiAgICB0aGlzLnNlbGVjdGVkU2hlZXRJbmRleCA9IC0xO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHNoZWV0IGhhcyB0YWIgYWN0aW9uc1xuICAgKi9cbiAgaGFzVGFiQWN0aW9ucyhzaGVldDogV29ya2Jvb2tTaGVldENvbmZpZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIShzaGVldC50YWJBY3Rpb25zICYmIHNoZWV0LnRhYkFjdGlvbnMubGVuZ3RoID4gMCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIHRhYiBhY3Rpb24gY2xpY2tcbiAgICovXG4gIG9uVGFiQWN0aW9uQ2xpY2soYWN0aW9uOiBhbnksIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkU2hlZXQpIHJldHVybjtcblxuICAgIHRoaXMuc2hlZXRUYWJBY3Rpb24uZW1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICBzaGVldElkOiB0aGlzLnNlbGVjdGVkU2hlZXQuaWRcbiAgICB9KTtcblxuICAgIHRoaXMuY2xvc2VUYWJBY3Rpb25zKCk7XG4gIH1cblxuICAvKipcbiAgICogVG9nZ2xlIHdvcmtib29rIGFjdGlvbnMgZHJvcGRvd25cbiAgICovXG4gIHRvZ2dsZVdvcmtib29rQWN0aW9ucyhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIFxuICAgIHRoaXMud29ya2Jvb2tBY3Rpb25zT3BlbiA9ICF0aGlzLndvcmtib29rQWN0aW9uc09wZW47XG5cbiAgICBpZiAodGhpcy53b3JrYm9va0FjdGlvbnNPcGVuKSB7XG4gICAgICBjb25zdCB0YXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgY29uc3QgcmVjdCA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHRoaXMud29ya2Jvb2tBY3Rpb25zUG9zaXRpb24gPSB7XG4gICAgICAgIHRvcDogYCR7cmVjdC5ib3R0b20gKyA0fXB4YCxcbiAgICAgICAgcmlnaHQ6IGAke3dpbmRvdy5pbm5lcldpZHRoIC0gcmVjdC5yaWdodH1weGBcbiAgICAgIH07XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2Ugd29ya2Jvb2sgYWN0aW9ucyBkcm9wZG93blxuICAgKi9cbiAgY2xvc2VXb3JrYm9va0FjdGlvbnMoKTogdm9pZCB7XG4gICAgdGhpcy53b3JrYm9va0FjdGlvbnNPcGVuID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlIHZpc2libGUgd29ya2Jvb2sgYWN0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVWaXNpYmxlV29ya2Jvb2tBY3Rpb25zKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jb25maWcud29ya2Jvb2tBY3Rpb25zKSB7XG4gICAgICB0aGlzLnZpc2libGVXb3JrYm9va0FjdGlvbnMgPSBbXTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnZpc2libGVXb3JrYm9va0FjdGlvbnMgPSB0aGlzLmNvbmZpZy53b3JrYm9va0FjdGlvbnMuZmlsdGVyKGFjdGlvbiA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFjdGlvbi5oaWRkZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuICFhY3Rpb24uaGlkZGVuKCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gIWFjdGlvbi5oaWRkZW47XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgd29ya2Jvb2sgYWN0aW9uIGlzIGRpc2FibGVkXG4gICAqL1xuICBpc0FjdGlvbkRpc2FibGVkKGFjdGlvbjogV29ya2Jvb2tBY3Rpb24pOiBib29sZWFuIHtcbiAgICBpZiAodHlwZW9mIGFjdGlvbi5kaXNhYmxlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGFjdGlvbi5kaXNhYmxlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gYWN0aW9uLmRpc2FibGVkIHx8IGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB3b3JrYm9vayBhY3Rpb24gY2xpY2tcbiAgICovXG4gIG9uV29ya2Jvb2tBY3Rpb25DbGljayhhY3Rpb246IFdvcmtib29rQWN0aW9uLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLmlzQWN0aW9uRGlzYWJsZWQoYWN0aW9uKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMud29ya2Jvb2tBY3Rpb24uZW1pdCh7XG4gICAgICBhY3Rpb24sXG4gICAgICB3b3JrYm9va0lkOiB0aGlzLmNvbmZpZy5pZFxuICAgIH0pO1xuXG4gICAgdGhpcy5jbG9zZVdvcmtib29rQWN0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSBmdWxsc2NyZWVuIG1vZGVcbiAgICovXG4gIHRvZ2dsZUZ1bGxzY3JlZW4oKTogdm9pZCB7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuaXNGdWxsc2NyZWVuJC52YWx1ZTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICFjdXJyZW50O1xuICAgIFxuICAgIHRoaXMuaXNGdWxsc2NyZWVuJC5uZXh0KG5ld1ZhbHVlKTtcbiAgICB0aGlzLmZ1bGxzY3JlZW5Ub2dnbGUuZW1pdChuZXdWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgY2hhbmdlIGZyb20gdGFibGUgLSB1cGRhdGUgaW50ZXJuYWwgZGF0YSBhbmQgcGFzcyB0aHJvdWdoIHRvIHBhcmVudFxuICAgKi9cbiAgb25DZWxsQ2hhbmdlKGV2ZW50OiBDZWxsQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdGVkU2hlZXQgPSB0aGlzLnNoZWV0c1t0aGlzLmFjdGl2ZVNoZWV0SW5kZXhdO1xuICAgIFxuICAgIC8vIFVwZGF0ZSB0aGUgaW50ZXJuYWwgc2hlZXRzRGF0YSB3aXRoIHRoZSBuZXcgY2VsbCB2YWx1ZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2hlZXQgJiYgZXZlbnQucm93RGF0YSAmJiBldmVudC5jb2x1bW5LZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY3VycmVudERhdGEgPSB0aGlzLnNoZWV0c0RhdGEuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHNoZWV0RGF0YSA9IGN1cnJlbnREYXRhLmdldCh0aGlzLnNlbGVjdGVkU2hlZXQuaWQpO1xuICAgICAgXG4gICAgICBpZiAoc2hlZXREYXRhICYmIGV2ZW50LnJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzcGVjaWZpYyByb3cncyBjb2x1bW4gdmFsdWVcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4uc2hlZXREYXRhW2V2ZW50LnJvd0luZGV4XSB9O1xuICAgICAgICB1cGRhdGVkUm93W2V2ZW50LmNvbHVtbktleV0gPSBldmVudC5uZXdWYWx1ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHJvd1xuICAgICAgICBjb25zdCB1cGRhdGVkU2hlZXREYXRhID0gWy4uLnNoZWV0RGF0YV07XG4gICAgICAgIHVwZGF0ZWRTaGVldERhdGFbZXZlbnQucm93SW5kZXhdID0gdXBkYXRlZFJvdztcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBNYXAgd2l0aCB0aGUgdXBkYXRlZCBzaGVldCBkYXRhXG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gbmV3IE1hcChjdXJyZW50RGF0YSk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnNldCh0aGlzLnNlbGVjdGVkU2hlZXQuaWQsIHVwZGF0ZWRTaGVldERhdGEpO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBCZWhhdmlvclN1YmplY3Qgd2l0aCBuZXcgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuc2hlZXRzRGF0YS5uZXh0KHVwZGF0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcbiAgICB0aGlzLmNlbGxDaGFuZ2UuZW1pdChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGNlbGwgc2F2ZSBmcm9tIHRhYmxlIC0gdXBkYXRlIGludGVybmFsIGRhdGEgYW5kIHBhc3MgdGhyb3VnaCB0byBwYXJlbnRcbiAgICovXG4gIG9uQ2VsbFNhdmUoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgaW50ZXJuYWwgc2hlZXRzRGF0YSB3aXRoIHRoZSBuZXcgY2VsbCB2YWx1ZVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2hlZXQgJiYgZXZlbnQucm93RGF0YSAmJiBldmVudC5jb2x1bW5LZXkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc3QgY3VycmVudERhdGEgPSB0aGlzLnNoZWV0c0RhdGEuZ2V0VmFsdWUoKTtcbiAgICAgIGNvbnN0IHNoZWV0RGF0YSA9IGN1cnJlbnREYXRhLmdldCh0aGlzLnNlbGVjdGVkU2hlZXQuaWQpO1xuICAgICAgXG4gICAgICBpZiAoc2hlZXREYXRhICYmIGV2ZW50LnJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBzcGVjaWZpYyByb3cncyBjb2x1bW4gdmFsdWVcbiAgICAgICAgY29uc3QgdXBkYXRlZFJvdyA9IHsgLi4uc2hlZXREYXRhW2V2ZW50LnJvd0luZGV4XSB9O1xuICAgICAgICB1cGRhdGVkUm93W2V2ZW50LmNvbHVtbktleV0gPSBldmVudC5uZXdWYWx1ZTtcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBhcnJheSB3aXRoIHRoZSB1cGRhdGVkIHJvd1xuICAgICAgICBjb25zdCB1cGRhdGVkU2hlZXREYXRhID0gWy4uLnNoZWV0RGF0YV07XG4gICAgICAgIHVwZGF0ZWRTaGVldERhdGFbZXZlbnQucm93SW5kZXhdID0gdXBkYXRlZFJvdztcbiAgICAgICAgXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBNYXAgd2l0aCB0aGUgdXBkYXRlZCBzaGVldCBkYXRhXG4gICAgICAgIGNvbnN0IHVwZGF0ZWREYXRhID0gbmV3IE1hcChjdXJyZW50RGF0YSk7XG4gICAgICAgIHVwZGF0ZWREYXRhLnNldCh0aGlzLnNlbGVjdGVkU2hlZXQuaWQsIHVwZGF0ZWRTaGVldERhdGEpO1xuICAgICAgICBcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBCZWhhdmlvclN1YmplY3Qgd2l0aCBuZXcgcmVmZXJlbmNlXG4gICAgICAgIHRoaXMuc2hlZXRzRGF0YS5uZXh0KHVwZGF0ZWREYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgLy8gRW1pdCB0byBwYXJlbnRcbiAgICB0aGlzLmNlbGxTYXZlLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSB0YWJsZSBzdGF0ZSBjaGFuZ2UgLSBwYXNzIHRocm91Z2ggdG8gcGFyZW50XG4gICAqL1xuICBvblRhYmxlU3RhdGVDaGFuZ2UoZXZlbnQ6IFRhYmxlU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuICAgIHRoaXMudGFibGVTdGF0ZUNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGUgcmVxdWVzdCB0byBhZGQgYSBuZXcgcm93IC0gZW1pdHRlZCB3aGVuIG5hdmlnYXRpbmcgcGFzdCBsYXN0IHJvd1xuICAgKi9cbiAgb25SZXF1ZXN0QWRkUm93KGV2ZW50OiB7IGZvY3VzQ29sdW1uPzogbnVtYmVyIH0pOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVTaGVldCA9IHRoaXMuc2hlZXRzW3RoaXMuYWN0aXZlU2hlZXRJbmRleF07XG4gICAgaWYgKGFjdGl2ZVNoZWV0KSB7XG4gICAgICB0aGlzLnJlcXVlc3RBZGRSb3cuZW1pdCh7XG4gICAgICAgIHNoZWV0SWQ6IGFjdGl2ZVNoZWV0LmlkLFxuICAgICAgICBmb2N1c0NvbHVtbjogZXZlbnQuZm9jdXNDb2x1bW5cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgY2xlYW51cFxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgLy8gQ2xlYXIgYXV0b3NhdmUgZGF0YSBvbiBkZXN0cm95XG4gICAgaWYgKHRoaXMuYXV0b3NhdmVFbmFibGVkKSB7XG4gICAgICB0aGlzLmF1dG9zYXZlU2VydmljZS5jbGVhcih0aGlzLmNvbmZpZy5pZCk7XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGJlZm9yZXVubG9hZCBoYW5kbGVyXG4gICAgaWYgKHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlcikge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYXV0b3NhdmUgc3Vic2NyaXB0aW9uXG4gICAqL1xuICBwcml2YXRlIGluaXRpYWxpemVBdXRvc2F2ZSgpOiB2b2lkIHtcbiAgICBjb25zdCBjaGFuZ2VFdmVudHMkID0gbWVyZ2UoXG4gICAgICB0aGlzLmNlbGxDaGFuZ2UsXG4gICAgICB0aGlzLmNlbGxTYXZlLFxuICAgICAgdGhpcy50YWJsZVN0YXRlQ2hhbmdlLFxuICAgICAgdGhpcy5zaGVldFRhYkFjdGlvblxuICAgICk7XG5cbiAgICBjb25zdCBhdXRvc2F2ZSQgPSB0aGlzLmF1dG9zYXZlU3RyYXRlZ3kgPT09ICdsYXp5J1xuICAgICAgPyBjaGFuZ2VFdmVudHMkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuYXV0b3NhdmVTZXJ2aWNlLnNldERpcnR5KHRoaXMuY29uZmlnLmlkLCB0cnVlKSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDIwMDApLFxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKClcbiAgICAgICAgKVxuICAgICAgOiBjaGFuZ2VFdmVudHMkLnBpcGUoXG4gICAgICAgICAgdGFwKCgpID0+IHRoaXMuYXV0b3NhdmVTZXJ2aWNlLnNldERpcnR5KHRoaXMuY29uZmlnLmlkLCB0cnVlKSksXG4gICAgICAgICAgZGVib3VuY2VUaW1lKDEwMClcbiAgICAgICAgKTtcblxuICAgIGF1dG9zYXZlJC5waXBlKFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy5wZXJmb3JtQXV0b3NhdmUoKSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhdXRvc2F2ZSBvcGVyYXRpb25cbiAgICovXG4gIHByaXZhdGUgcGVyZm9ybUF1dG9zYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTYXZpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgYXV0b3NhdmVEYXRhOiBBdXRvc2F2ZURhdGEgPSB7XG4gICAgICB3b3JrYm9va0NvbmZpZzogdGhpcy5jb25maWcsXG4gICAgICB3b3JrYm9va1N0YXRlOiB0aGlzLmFjdGl2ZVN0YXRlLmdldFNuYXBzaG90KCksXG4gICAgICBzaGVldHNEYXRhOiBuZXcgTWFwKHRoaXMuc2hlZXRzRGF0YS5nZXRWYWx1ZSgpKSxcbiAgICAgIHRpbWVzdGFtcDogbmV3IERhdGUoKVxuICAgIH07XG5cbiAgICB0aGlzLmF1dG9zYXZlU2VydmljZS5zYXZlKHRoaXMuY29uZmlnLmlkLCBhdXRvc2F2ZURhdGEpO1xuICAgIHRoaXMubGFzdFNhdmVUaW1lID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLmlzU2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5hdXRvc2F2ZVNlcnZpY2Uuc2V0RGlydHkodGhpcy5jb25maWcuaWQsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXR1cCBhdXRvLXJlc3RvcmUgZnJvbSBhdXRvc2F2ZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXR1cEF1dG9SZXN0b3JlKCk6IHZvaWQge1xuICAgIGNvbnN0IGF1dG9zYXZlZCA9IHRoaXMuYXV0b3NhdmVTZXJ2aWNlLmdldCh0aGlzLmNvbmZpZy5pZCk7XG5cbiAgICBpZiAoYXV0b3NhdmVkKSB7XG4gICAgICAvLyBSZXN0b3JlIGNvbmZpZ1xuICAgICAgdGhpcy5jb25maWcgPSBhdXRvc2F2ZWQud29ya2Jvb2tDb25maWc7XG5cbiAgICAgIC8vIFJlc3RvcmUgc2hlZXRzIGRhdGFcbiAgICAgIHRoaXMuc2hlZXRzRGF0YS5uZXh0KGF1dG9zYXZlZC5zaGVldHNEYXRhKTtcblxuICAgICAgLy8gTm90ZTogV29ya2Jvb2sgc3RhdGUgcmVzdG9yYXRpb24gaXMgaGFuZGxlZCBpbnRlcm5hbGx5XG4gICAgICAvLyBJZiBleHRlcm5hbCBzdGF0ZSBtYW5hZ2VtZW50IGlzIHVzZWQsIHBhcmVudCBjb21wb25lbnQgc2hvdWxkIGhhbmRsZSBpdFxuXG4gICAgICB0aGlzLmxhc3RTYXZlVGltZSA9IGF1dG9zYXZlZC50aW1lc3RhbXA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHVwIGJlZm9yZXVubG9hZCB3YXJuaW5nIGZvciB1bnNhdmVkIGNoYW5nZXNcbiAgICovXG4gIHByaXZhdGUgc2V0dXBCZWZvcmVVbmxvYWRXYXJuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuYmVmb3JlVW5sb2FkSGFuZGxlciA9IChldmVudDogQmVmb3JlVW5sb2FkRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmF1dG9zYXZlU2VydmljZS5pc0RpcnR5KHRoaXMuY29uZmlnLmlkKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudC5yZXR1cm5WYWx1ZSA9ICdZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMuIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBsZWF2ZT8nO1xuICAgICAgICByZXR1cm4gZXZlbnQucmV0dXJuVmFsdWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgdGhpcy5iZWZvcmVVbmxvYWRIYW5kbGVyKTtcbiAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwid29ya2Jvb2stY29udGFpbmVyXCIgW2NsYXNzLmZ1bGxzY3JlZW5dPVwiaXNGdWxsc2NyZWVuJCB8IGFzeW5jXCI+XG4gIDxuaWxlLXRhYi1ncm91cCBbYWN0aXZlSW5kZXhdPVwiYWN0aXZlU2hlZXRJbmRleFwiPlxuICAgIFxuICAgIDwhLS0gU2hlZXQgVGFicyAob25lIHBlciBzaGVldCkgLS0+XG4gICAgPG5pbGUtdGFiICpuZ0Zvcj1cImxldCBzaGVldCBvZiBzaGVldHM7IGxldCBpID0gaW5kZXhcIlxuICAgICAgICAgICAgICBzbG90PVwibmF2XCIgXG4gICAgICAgICAgICAgIHBhbmVsPVwic2hhcmVkLXBhbmVsXCJcbiAgICAgICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpID09PSBhY3RpdmVTaGVldEluZGV4XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uVGFiQ2hhbmdlKGkpXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwic2hlZXQtdGFiLWNvbnRlbnRcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzaGVldC1uYW1lXCI+e3sgc2hlZXQubmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgXG4gICAgICAgIDwhLS0gVGFiIGFjdGlvbnMgZHJvcGRvd24gYnV0dG9uIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwidGFiLWFjdGlvbnMtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwib3BlblRhYkFjdGlvbnMoJGV2ZW50LCBzaGVldCwgaSlcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiaGFzVGFiQWN0aW9ucyhzaGVldClcIj5cbiAgICAgICAgICA8bmlsZS1pY29uIG5hbWU9XCJhcnJvd2Rvd25cIiBzaXplPVwiMTRcIj48L25pbGUtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25pbGUtdGFiPlxuICAgIFxuICAgIDwhLS0gVG9vbGJhciBUYWIgKGZvciB3b3JrYm9vayBjb250cm9scykgLS0+XG4gICAgPG5pbGUtdGFiIHNsb3Q9XCJuYXZcIiBcbiAgICAgICAgICAgICAgcGFuZWw9XCJzaGFyZWQtcGFuZWxcIlxuICAgICAgICAgICAgICBjbGFzcz1cIndvcmtib29rLXRvb2xiYXItdGFiXCJcbiAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInRydWVcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJ3b3JrYm9vay10b29sYmFyLWNvbnRlbnRcIj5cbiAgICAgICAgPCEtLSBBdXRvc2F2ZSBJbmRpY2F0b3IgLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvc2F2ZS1pbmRpY2F0b3JcIiAqbmdJZj1cImF1dG9zYXZlRW5hYmxlZFwiPlxuICAgICAgICAgIDxuaWxlLWljb24gXG4gICAgICAgICAgICAqbmdJZj1cIiFpc1NhdmluZyAmJiBsYXN0U2F2ZVRpbWVcIiBcbiAgICAgICAgICAgIG5hbWU9XCJzYXZlXCIgXG4gICAgICAgICAgICBzaXplPVwiMTRcIlxuICAgICAgICAgICAgW3RpdGxlXT1cIidTYXZlZCBhdCAnICsgKGxhc3RTYXZlVGltZSB8IGRhdGU6J0hIOm1tOnNzJylcIj5cbiAgICAgICAgICA8L25pbGUtaWNvbj5cbiAgICAgICAgICA8bmlsZS1pY29uIFxuICAgICAgICAgICAgKm5nSWY9XCJpc1NhdmluZ1wiIFxuICAgICAgICAgICAgbmFtZT1cImxvYWRlclwiIFxuICAgICAgICAgICAgc2l6ZT1cIjE0XCJcbiAgICAgICAgICAgIHRpdGxlPVwiU2F2aW5nLi4uXCI+XG4gICAgICAgICAgPC9uaWxlLWljb24+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDwhLS0gV29ya2Jvb2sgQWN0aW9ucyBEcm9wZG93biAtLT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIndvcmtib29rLWFjdGlvbnMtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy53b3JrYm9va0FjdGlvbnMgJiYgY29uZmlnLndvcmtib29rQWN0aW9ucy5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlV29ya2Jvb2tBY3Rpb25zKCRldmVudClcIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwiV29ya2Jvb2sgQWN0aW9uc1wiPlxuICAgICAgICAgIDxuaWxlLWljb24gbmFtZT1cInNldHRpbmdzXCI+PC9uaWxlLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBBZGQgU2hlZXQgQnV0dG9uIC0tPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLXNoZWV0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5BZGRTaGVldFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uQWRkU2hlZXQoKVwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJBZGQgU2hlZXRcIj5cbiAgICAgICAgICA8bmlsZS1pY29uIG5hbWU9XCJwbHVzXCI+PC9uaWxlLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICBcbiAgICAgICAgPCEtLSBGdWxsc2NyZWVuIEJ1dHRvbiAtLT5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImZ1bGxzY3JlZW4tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbmZpZy5kaXNwbGF5Py5hbGxvd0Z1bGxzY3JlZW4gIT09IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRnVsbHNjcmVlbigpXCJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiKGlzRnVsbHNjcmVlbiQgfCBhc3luYykgPyAnRXhpdCBGdWxsc2NyZWVuJyA6ICdGdWxsc2NyZWVuJ1wiPlxuICAgICAgICAgIDxuaWxlLWljb24gW25hbWVdPVwiKGlzRnVsbHNjcmVlbiQgfCBhc3luYykgPyAnY29sbGFwc2UnIDogJ2V4cGFuZC0wNidcIj48L25pbGUtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L25pbGUtdGFiPlxuICAgIFxuICAgIDwhLS0gU2luZ2xlIFNoYXJlZCBUYWIgUGFuZWwgLS0+XG4gICAgPG5pbGUtdGFiLXBhbmVsIG5hbWU9XCJzaGFyZWQtcGFuZWxcIj5cbiAgICAgIDwhLS0gTGF6eSBsb2FkaW5nIHN0cmF0ZWd5OiB0YWJsZSBpcyBkZXN0cm95ZWQgYW5kIHJlY3JlYXRlZCB3aXRoIG5ldyBjb25maWcvc3RhdGUgd2hlbiBzaGVldCBjaGFuZ2VzIC0tPlxuICAgICAgPCEtLSBVc2luZyBuZ0ZvciB3aXRoIHRyYWNrQnkgdG8gZm9yY2UgY29tcGxldGUgcmVpbml0aWFsaXphdGlvbiB3aGVuIHRhYmxlQ29tcG9uZW50S2V5IGNoYW5nZXMgLS0+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBrZXkgb2YgW3RhYmxlQ29tcG9uZW50S2V5XTsgdHJhY2tCeTogdHJhY2tCeUtleVwiPlxuICAgICAgICA8c3QtdGFibGUgKm5nSWY9XCJjdXJyZW50VGFibGVDb25maWcgJiYgY3VycmVudFRhYmxlU3RhdGVcIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuZGF0YS1zaGVldC1rZXldPVwia2V5XCJcbiAgICAgICAgICAgICAgICAgIFt0YWJsZUNvbmZpZ109XCJjdXJyZW50VGFibGVDb25maWdcIlxuICAgICAgICAgICAgICAgICAgW2RhdGEkXT1cImN1cnJlbnRUYWJsZURhdGEkXCJcbiAgICAgICAgICAgICAgICAgIFt0YWJsZVN0YXRlXT1cImN1cnJlbnRUYWJsZVN0YXRlXCJcbiAgICAgICAgICAgICAgICAgIChjZWxsQ2hhbmdlKT1cIm9uQ2VsbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChjZWxsU2F2ZSk9XCJvbkNlbGxTYXZlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgKHN0YXRlQ2hhbmdlKT1cIm9uVGFibGVTdGF0ZUNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIChyZXF1ZXN0QWRkUm93KT1cIm9uUmVxdWVzdEFkZFJvdygkZXZlbnQpXCI+XG4gICAgICAgIDwvc3QtdGFibGU+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25pbGUtdGFiLXBhbmVsPlxuICAgIFxuICA8L25pbGUtdGFiLWdyb3VwPlxuPC9kaXY+XG5cbjwhLS0gVGFiIEFjdGlvbnMgRHJvcGRvd24gLS0+XG48ZGl2IGNsYXNzPVwidGFiLWFjdGlvbnMtZHJvcGRvd25cIiBcbiAgICAgKm5nSWY9XCJ0YWJBY3Rpb25zT3BlblwiXG4gICAgIFtuZ1N0eWxlXT1cInRhYkFjdGlvbnNQb3NpdGlvblwiPlxuICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tYmFja2Ryb3BcIiAoY2xpY2spPVwiY2xvc2VUYWJBY3Rpb25zKClcIj48L2Rpdj5cbiAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnVcIj5cbiAgICA8bmlsZS1tZW51PlxuICAgICAgPG5pbGUtbWVudS1pdGVtICpuZ0Zvcj1cImxldCBhY3Rpb24gb2Ygc2VsZWN0ZWRTaGVldD8udGFiQWN0aW9uc1wiIFxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRhYkFjdGlvbkNsaWNrKGFjdGlvbiwgJGV2ZW50KVwiPlxuICAgICAgICA8bmlsZS1pY29uICpuZ0lmPVwiYWN0aW9uLmljb25cIiBzbG90PVwicHJlZml4XCIgc2l6ZT1cIjE0XCIgW25hbWVdPVwiYWN0aW9uLmljb25cIj48L25pbGUtaWNvbj5cbiAgICAgICAge3sgYWN0aW9uLmxhYmVsIH19XG4gICAgICA8L25pbGUtbWVudS1pdGVtPlxuICAgIDwvbmlsZS1tZW51PlxuICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIFdvcmtib29rIEFjdGlvbnMgRHJvcGRvd24gLS0+XG48ZGl2IGNsYXNzPVwid29ya2Jvb2stYWN0aW9ucy1kcm9wZG93blwiXG4gICAgICpuZ0lmPVwid29ya2Jvb2tBY3Rpb25zT3BlblwiXG4gICAgIFtuZ1N0eWxlXT1cIndvcmtib29rQWN0aW9uc1Bvc2l0aW9uXCI+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1iYWNrZHJvcFwiIChjbGljayk9XCJjbG9zZVdvcmtib29rQWN0aW9ucygpXCI+PC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51XCI+XG4gICAgPG5pbGUtbWVudT5cbiAgICAgIDxuaWxlLW1lbnUtaXRlbSAqbmdGb3I9XCJsZXQgYWN0aW9uIG9mIHZpc2libGVXb3JrYm9va0FjdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJpc0FjdGlvbkRpc2FibGVkKGFjdGlvbilcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbldvcmtib29rQWN0aW9uQ2xpY2soYWN0aW9uLCAkZXZlbnQpXCI+XG4gICAgICAgIDxuaWxlLWljb24gKm5nSWY9XCJhY3Rpb24uaWNvblwiIHNsb3Q9XCJwcmVmaXhcIiBzaXplPVwiMTRcIiBbbmFtZV09XCJhY3Rpb24uaWNvblwiPjwvbmlsZS1pY29uPlxuICAgICAgICB7eyBhY3Rpb24ubGFiZWwgfX1cbiAgICAgIDwvbmlsZS1tZW51LWl0ZW0+XG4gICAgPC9uaWxlLW1lbnU+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gRnVsbHNjcmVlbiBCYWNrZHJvcCAtLT5cbjxkaXYgY2xhc3M9XCJmdWxsc2NyZWVuLWJhY2tkcm9wXCIgXG4gICAgICpuZ0lmPVwiaXNGdWxsc2NyZWVuJCB8IGFzeW5jXCJcbiAgICAgKGNsaWNrKT1cInRvZ2dsZUZ1bGxzY3JlZW4oKVwiPlxuPC9kaXY+XG5cbiJdfQ==
|
|
@@ -5,6 +5,12 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
* Directive to handle keyboard navigation in table cells
|
|
6
6
|
*/
|
|
7
7
|
export class StKeyboardNavigationDirective {
|
|
8
|
+
constructor() {
|
|
9
|
+
/**
|
|
10
|
+
* When enabled, pressing arrow down at the last row will emit requestAddRow event
|
|
11
|
+
*/
|
|
12
|
+
this.addRowOnNavigatePastEnd = false;
|
|
13
|
+
}
|
|
8
14
|
onKeyDown(event) {
|
|
9
15
|
if (!this.tableState.isNavigationActive()) {
|
|
10
16
|
return;
|
|
@@ -22,7 +28,9 @@ export class StKeyboardNavigationDirective {
|
|
|
22
28
|
event.preventDefault();
|
|
23
29
|
const direction = this.getDirection(event.key);
|
|
24
30
|
if (direction) {
|
|
25
|
-
|
|
31
|
+
// Pass addRowOnNavigatePastEnd only for DOWN direction
|
|
32
|
+
const addRowEnabled = direction === NavigationDirection.DOWN && this.addRowOnNavigatePastEnd;
|
|
33
|
+
this.tableState.moveFocus(direction, addRowEnabled);
|
|
26
34
|
}
|
|
27
35
|
break;
|
|
28
36
|
case NavigationKey.ENTER:
|
|
@@ -30,7 +38,7 @@ export class StKeyboardNavigationDirective {
|
|
|
30
38
|
if (isEditing)
|
|
31
39
|
return; // Let cell component handle save
|
|
32
40
|
event.preventDefault();
|
|
33
|
-
this.tableState.moveFocus(NavigationDirection.DOWN);
|
|
41
|
+
this.tableState.moveFocus(NavigationDirection.DOWN, this.addRowOnNavigatePastEnd);
|
|
34
42
|
break;
|
|
35
43
|
case NavigationKey.TAB:
|
|
36
44
|
// Navigate left/right when NOT editing (Excel-like behavior)
|
|
@@ -58,7 +66,7 @@ export class StKeyboardNavigationDirective {
|
|
|
58
66
|
}
|
|
59
67
|
}
|
|
60
68
|
StKeyboardNavigationDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StKeyboardNavigationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
61
|
-
StKeyboardNavigationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: StKeyboardNavigationDirective, selector: "[stKeyboardNavigation]", inputs: { tableState: "tableState" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0 });
|
|
69
|
+
StKeyboardNavigationDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.4.0", type: StKeyboardNavigationDirective, selector: "[stKeyboardNavigation]", inputs: { tableState: "tableState", addRowOnNavigatePastEnd: "addRowOnNavigatePastEnd" }, host: { listeners: { "keydown": "onKeyDown($event)" } }, ngImport: i0 });
|
|
62
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: StKeyboardNavigationDirective, decorators: [{
|
|
63
71
|
type: Directive,
|
|
64
72
|
args: [{
|
|
@@ -66,8 +74,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
66
74
|
}]
|
|
67
75
|
}], propDecorators: { tableState: [{
|
|
68
76
|
type: Input
|
|
77
|
+
}], addRowOnNavigatePastEnd: [{
|
|
78
|
+
type: Input
|
|
69
79
|
}], onKeyDown: [{
|
|
70
80
|
type: HostListener,
|
|
71
81
|
args: ['keydown', ['$event']]
|
|
72
82
|
}] } });
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Qta2V5Ym9hcmQtbmF2aWdhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL3JlbmRlcmVyL2RpcmVjdGl2ZXMvc3Qta2V5Ym9hcmQtbmF2aWdhdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9ELE9BQU8sRUFBRSxhQUFhLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFN0U7O0dBRUc7QUFJSCxNQUFNLE9BQU8sNkJBQTZCO0lBSDFDO1FBTUU7O1dBRUc7UUFDTSw0QkFBdUIsR0FBWSxLQUFLLENBQUM7S0ErRG5EO0lBNURDLFNBQVMsQ0FBQyxLQUFvQjtRQUM1QixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFO1lBQ3pDLE9BQU87U0FDUjtRQUVELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUVyRCxvREFBb0Q7UUFDcEQsUUFBUSxLQUFLLENBQUMsR0FBb0IsRUFBRTtZQUNsQyxLQUFLLGFBQWEsQ0FBQyxRQUFRLENBQUM7WUFDNUIsS0FBSyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQzlCLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztZQUM5QixLQUFLLGFBQWEsQ0FBQyxXQUFXO2dCQUM1QixvQ0FBb0M7Z0JBQ3BDLElBQUksU0FBUztvQkFBRSxPQUFPO2dCQUV0QixLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQW9CLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxTQUFTLEVBQUU7b0JBQ2IsdURBQXVEO29CQUN2RCxNQUFNLGFBQWEsR0FBRyxTQUFTLEtBQUssbUJBQW1CLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyx1QkFBdUIsQ0FBQztvQkFDN0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRDtnQkFDRCxNQUFNO1lBRVIsS0FBSyxhQUFhLENBQUMsS0FBSztnQkFDdEIsdURBQXVEO2dCQUN2RCxJQUFJLFNBQVM7b0JBQUUsT0FBTyxDQUFDLGlDQUFpQztnQkFFeEQsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQ2xGLE1BQU07WUFFUixLQUFLLGFBQWEsQ0FBQyxHQUFHO2dCQUNwQiw2REFBNkQ7Z0JBQzdELElBQUksU0FBUztvQkFBRSxPQUFPLENBQUMsaUNBQWlDO2dCQUV4RCxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQ3ZCLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUN2QixLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FDdEUsQ0FBQztnQkFDRixNQUFNO1NBQ1Q7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxZQUFZLENBQUMsR0FBa0I7UUFDckMsTUFBTSxHQUFHLEdBQXNEO1lBQzdELENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEVBQUU7WUFDaEQsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQUUsbUJBQW1CLENBQUMsSUFBSTtZQUNwRCxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxtQkFBbUIsQ0FBQyxJQUFJO1lBQ3BELENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxFQUFFLG1CQUFtQixDQUFDLEtBQUs7WUFDdEQsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSTtZQUN6QixDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJO1lBQzNCLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUk7U0FDN0IsQ0FBQztRQUNGLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7OzBIQXBFVSw2QkFBNkI7OEdBQTdCLDZCQUE2QjsyRkFBN0IsNkJBQTZCO2tCQUh6QyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSx3QkFBd0I7aUJBQ25DOzhCQUVVLFVBQVU7c0JBQWxCLEtBQUs7Z0JBS0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUdOLFNBQVM7c0JBRFIsWUFBWTt1QkFBQyxTQUFTLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3RMaXN0ZW5lciwgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYmxlU3RhdGUgfSBmcm9tICcuLi9tb2RlbHMvdGFibGUtc3RhdGUuY2xhc3MnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbktleSwgTmF2aWdhdGlvbkRpcmVjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9jZWxsLXR5cGVzJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdG8gaGFuZGxlIGtleWJvYXJkIG5hdmlnYXRpb24gaW4gdGFibGUgY2VsbHNcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3N0S2V5Ym9hcmROYXZpZ2F0aW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgU3RLZXlib2FyZE5hdmlnYXRpb25EaXJlY3RpdmUge1xuICBASW5wdXQoKSB0YWJsZVN0YXRlITogVGFibGVTdGF0ZTtcbiAgXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIHByZXNzaW5nIGFycm93IGRvd24gYXQgdGhlIGxhc3Qgcm93IHdpbGwgZW1pdCByZXF1ZXN0QWRkUm93IGV2ZW50XG4gICAqL1xuICBASW5wdXQoKSBhZGRSb3dPbk5hdmlnYXRlUGFzdEVuZDogYm9vbGVhbiA9IGZhbHNlO1xuICBcbiAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy50YWJsZVN0YXRlLmlzTmF2aWdhdGlvbkFjdGl2ZSgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IGlzRWRpdGluZyA9IHRoaXMudGFibGVTdGF0ZS5pc0FueUNlbGxFZGl0aW5nKCk7XG4gICAgXG4gICAgLy8gVXNlIE5hdmlnYXRpb25LZXkgZW51bSBmb3IgdHlwZS1zYWZlIGtleSBjaGVja2luZ1xuICAgIHN3aXRjaCAoZXZlbnQua2V5IGFzIE5hdmlnYXRpb25LZXkpIHtcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5BUlJPV19VUDpcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5BUlJPV19ET1dOOlxuICAgICAgY2FzZSBOYXZpZ2F0aW9uS2V5LkFSUk9XX0xFRlQ6XG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuQVJST1dfUklHSFQ6XG4gICAgICAgIC8vIEFsbG93IG5hdmlnYXRpb24gd2hlbiBOT1QgZWRpdGluZ1xuICAgICAgICBpZiAoaXNFZGl0aW5nKSByZXR1cm47XG4gICAgICAgIFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCBkaXJlY3Rpb24gPSB0aGlzLmdldERpcmVjdGlvbihldmVudC5rZXkgYXMgTmF2aWdhdGlvbktleSk7XG4gICAgICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgICAgICAvLyBQYXNzIGFkZFJvd09uTmF2aWdhdGVQYXN0RW5kIG9ubHkgZm9yIERPV04gZGlyZWN0aW9uXG4gICAgICAgICAgY29uc3QgYWRkUm93RW5hYmxlZCA9IGRpcmVjdGlvbiA9PT0gTmF2aWdhdGlvbkRpcmVjdGlvbi5ET1dOICYmIHRoaXMuYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQ7XG4gICAgICAgICAgdGhpcy50YWJsZVN0YXRlLm1vdmVGb2N1cyhkaXJlY3Rpb24sIGFkZFJvd0VuYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgICBcbiAgICAgIGNhc2UgTmF2aWdhdGlvbktleS5FTlRFUjpcbiAgICAgICAgLy8gTmF2aWdhdGUgZG93biB3aGVuIE5PVCBlZGl0aW5nIChFeGNlbC1saWtlIGJlaGF2aW9yKVxuICAgICAgICBpZiAoaXNFZGl0aW5nKSByZXR1cm47IC8vIExldCBjZWxsIGNvbXBvbmVudCBoYW5kbGUgc2F2ZVxuICAgICAgICBcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50YWJsZVN0YXRlLm1vdmVGb2N1cyhOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04sIHRoaXMuYWRkUm93T25OYXZpZ2F0ZVBhc3RFbmQpO1xuICAgICAgICBicmVhaztcbiAgICAgICAgXG4gICAgICBjYXNlIE5hdmlnYXRpb25LZXkuVEFCOlxuICAgICAgICAvLyBOYXZpZ2F0ZSBsZWZ0L3JpZ2h0IHdoZW4gTk9UIGVkaXRpbmcgKEV4Y2VsLWxpa2UgYmVoYXZpb3IpXG4gICAgICAgIGlmIChpc0VkaXRpbmcpIHJldHVybjsgLy8gTGV0IGNlbGwgY29tcG9uZW50IGhhbmRsZSBzYXZlXG4gICAgICAgIFxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLnRhYmxlU3RhdGUubW92ZUZvY3VzKFxuICAgICAgICAgIGV2ZW50LnNoaWZ0S2V5ID8gTmF2aWdhdGlvbkRpcmVjdGlvbi5MRUZUIDogTmF2aWdhdGlvbkRpcmVjdGlvbi5SSUdIVFxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgXG4gIC8qKlxuICAgKiBDb252ZXJ0IG5hdmlnYXRpb24ga2V5IHRvIGRpcmVjdGlvbiB1c2luZyBlbnVtc1xuICAgKi9cbiAgcHJpdmF0ZSBnZXREaXJlY3Rpb24oa2V5OiBOYXZpZ2F0aW9uS2V5KTogTmF2aWdhdGlvbkRpcmVjdGlvbiB8IG51bGwge1xuICAgIGNvbnN0IG1hcDogUmVjb3JkPE5hdmlnYXRpb25LZXksIE5hdmlnYXRpb25EaXJlY3Rpb24gfCBudWxsPiA9IHtcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkFSUk9XX1VQXTogTmF2aWdhdGlvbkRpcmVjdGlvbi5VUCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkFSUk9XX0RPV05dOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLkRPV04sXG4gICAgICBbTmF2aWdhdGlvbktleS5BUlJPV19MRUZUXTogTmF2aWdhdGlvbkRpcmVjdGlvbi5MRUZULFxuICAgICAgW05hdmlnYXRpb25LZXkuQVJST1dfUklHSFRdOiBOYXZpZ2F0aW9uRGlyZWN0aW9uLlJJR0hULFxuICAgICAgW05hdmlnYXRpb25LZXkuVEFCXTogbnVsbCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkVOVEVSXTogbnVsbCxcbiAgICAgIFtOYXZpZ2F0aW9uS2V5LkVTQ0FQRV06IG51bGxcbiAgICB9O1xuICAgIHJldHVybiBtYXBba2V5XTtcbiAgfVxufVxuIl19
|