@dotglitch/ngx-common 1.0.21 → 1.0.23
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/assets/mat-icons.d.ts +5705 -0
- package/components/filemanager/file-grid/file-grid.component.d.ts +97 -0
- package/components/filemanager/filemanager.component.d.ts +206 -0
- package/components/filemanager/folder-rename/folder-rename.component.d.ts +18 -0
- package/components/filemanager/helpers.d.ts +5 -0
- package/components/filemanager/icon-resolver.d.ts +13 -0
- package/components/filemanager/textextensions.d.ts +3 -0
- package/components/filemanager/toolbar/breadcrumb/breadcrumb.component.d.ts +16 -0
- package/components/filemanager/toolbar/icon-button/icon-button.component.d.ts +11 -0
- package/components/filemanager/toolbar/toolbar.component.d.ts +30 -0
- package/components/filemanager/tree-view/tree-view.component.d.ts +21 -0
- package/components/tabulator/tabulator.component.d.ts +30 -0
- package/components/types.d.ts +16 -0
- package/components/vscode/ts-type-resolver/dependency-parser.d.ts +6 -0
- package/components/vscode/ts-type-resolver/dummy-source-cache.d.ts +7 -0
- package/components/vscode/ts-type-resolver/import-resolver.d.ts +28 -0
- package/components/vscode/ts-type-resolver/main.d.ts +22 -0
- package/components/vscode/ts-type-resolver/recursion-depth.d.ts +11 -0
- package/components/vscode/ts-type-resolver/types.d.ts +179 -0
- package/components/vscode/ts-type-resolver/unpkg-source-resolver.d.ts +5 -0
- package/components/vscode/ts-type-resolver/update-emitter.d.ts +2 -0
- package/components/vscode/vscode.component.d.ts +57 -0
- package/esm2020/assets/mat-icons.mjs +5705 -0
- package/esm2020/components/filemanager/file-grid/file-grid.component.mjs +672 -0
- package/esm2020/components/filemanager/filemanager.component.mjs +301 -0
- package/esm2020/components/filemanager/folder-rename/folder-rename.component.mjs +57 -0
- package/esm2020/components/filemanager/helpers.mjs +26 -0
- package/esm2020/components/filemanager/icon-resolver.mjs +155 -0
- package/esm2020/components/filemanager/textextensions.mjs +294 -0
- package/esm2020/components/filemanager/toolbar/breadcrumb/breadcrumb.component.mjs +26 -0
- package/esm2020/components/filemanager/toolbar/icon-button/icon-button.component.mjs +34 -0
- package/esm2020/components/filemanager/toolbar/toolbar.component.mjs +163 -0
- package/esm2020/components/filemanager/tree-view/tree-view.component.mjs +53 -0
- package/esm2020/components/lazy-loader/lazy-loader.module.mjs +3 -3
- package/esm2020/components/lazy-loader/lazy-loader.service.mjs +1 -1
- package/esm2020/components/menu/menu.component.mjs +3 -4
- package/esm2020/components/tabulator/tabulator.component.mjs +92 -0
- package/esm2020/components/types.mjs +3 -0
- package/esm2020/components/vscode/ts-type-resolver/dependency-parser.mjs +91 -0
- package/esm2020/components/vscode/ts-type-resolver/dummy-source-cache.mjs +15 -0
- package/esm2020/components/vscode/ts-type-resolver/import-resolver.mjs +311 -0
- package/esm2020/components/vscode/ts-type-resolver/main.mjs +112 -0
- package/esm2020/components/vscode/ts-type-resolver/recursion-depth.mjs +21 -0
- package/esm2020/components/vscode/ts-type-resolver/types.mjs +14 -0
- package/esm2020/components/vscode/ts-type-resolver/unpkg-source-resolver.mjs +21 -0
- package/esm2020/components/vscode/ts-type-resolver/update-emitter.mjs +37 -0
- package/esm2020/components/vscode/vscode.component.mjs +230 -0
- package/esm2020/directives/menu.directive.mjs +19 -18
- package/esm2020/public-api.mjs +6 -1
- package/esm2020/types/menu.mjs +1 -1
- package/fesm2015/dotglitch-ngx-common-folder-rename.component-d039534b.mjs +79 -0
- package/fesm2015/dotglitch-ngx-common-folder-rename.component-d039534b.mjs.map +1 -0
- package/fesm2015/dotglitch-ngx-common.mjs +8361 -28
- package/fesm2015/dotglitch-ngx-common.mjs.map +1 -1
- package/fesm2020/dotglitch-ngx-common-folder-rename.component-ba3ebd0a.mjs +78 -0
- package/fesm2020/dotglitch-ngx-common-folder-rename.component-ba3ebd0a.mjs.map +1 -0
- package/fesm2020/dotglitch-ngx-common.mjs +8330 -27
- package/fesm2020/dotglitch-ngx-common.mjs.map +1 -1
- package/package.json +6 -2
- package/public-api.d.ts +4 -0
- package/types/menu.d.ts +4 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import { NgIf } from '@angular/common';
|
|
3
|
+
import { MatIconModule } from '@angular/material/icon';
|
|
4
|
+
import { MatButtonModule } from '@angular/material/button';
|
|
5
|
+
import { GtkIconButtonComponent } from './icon-button/icon-button.component';
|
|
6
|
+
import { GtkBreadcrumbComponent } from './breadcrumb/breadcrumb.component';
|
|
7
|
+
import { uploadFile } from '../helpers';
|
|
8
|
+
import { MenuDirective } from '../../../public-api';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "../filemanager.component";
|
|
11
|
+
import * as i2 from "../../../public-api";
|
|
12
|
+
import * as i3 from "@angular/material/icon";
|
|
13
|
+
import * as i4 from "@angular/material/button";
|
|
14
|
+
export class ToolbarComponent {
|
|
15
|
+
constructor(fileManager, dialog, fetch) {
|
|
16
|
+
this.fileManager = fileManager;
|
|
17
|
+
this.dialog = dialog;
|
|
18
|
+
this.fetch = fetch;
|
|
19
|
+
this.onBreadcrumbClick = new EventEmitter();
|
|
20
|
+
this.currentTab = {};
|
|
21
|
+
this.showHiddenFilesChange = new EventEmitter();
|
|
22
|
+
this.showSidebarChange = new EventEmitter();
|
|
23
|
+
this.drawerMode = false;
|
|
24
|
+
this.showBareMinimum = false;
|
|
25
|
+
this.fileOptions = [
|
|
26
|
+
{
|
|
27
|
+
label: "New Folder",
|
|
28
|
+
action: (folder) => {
|
|
29
|
+
this.dialog.open("folder-rename", "@dotglitch/ngx-web-components", { inputs: { path: this.currentTab.path, name: '', config: this.config } });
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
label: "Upload file",
|
|
34
|
+
icon: "file_upload",
|
|
35
|
+
action: (evt) => uploadFile(this.fetch, this.config, this.fileManager.currentTab.path, null, this.fileManager.contextTags).then(res => {
|
|
36
|
+
// Tell the current tab to reload it's data.
|
|
37
|
+
const tab = this.fileManager.currentTab;
|
|
38
|
+
const grid = this.fileManager.fileGrids.find(t => t.tab.id == tab.id);
|
|
39
|
+
grid.loadFolder();
|
|
40
|
+
})
|
|
41
|
+
},
|
|
42
|
+
// {
|
|
43
|
+
// label: "Add to Bookmarks (WIP)",
|
|
44
|
+
// action: (folder) => {
|
|
45
|
+
// //
|
|
46
|
+
// }
|
|
47
|
+
// },
|
|
48
|
+
// "separator",
|
|
49
|
+
// {
|
|
50
|
+
// label: "Paste",
|
|
51
|
+
// action: (folder) => {
|
|
52
|
+
// //
|
|
53
|
+
// }
|
|
54
|
+
// },
|
|
55
|
+
// {
|
|
56
|
+
// label: "Select All",
|
|
57
|
+
// action: (folder) => {
|
|
58
|
+
// //
|
|
59
|
+
// }
|
|
60
|
+
// },
|
|
61
|
+
// "separator",
|
|
62
|
+
// {
|
|
63
|
+
// label: "Properties",
|
|
64
|
+
// action: (folder) => {
|
|
65
|
+
// //
|
|
66
|
+
// }
|
|
67
|
+
// },
|
|
68
|
+
];
|
|
69
|
+
this.sortOptions = [
|
|
70
|
+
{
|
|
71
|
+
label: "Sort",
|
|
72
|
+
separator: true
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
label: "A-Z",
|
|
76
|
+
action: () => this.setSorter('a-z')
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
label: "Z-A",
|
|
80
|
+
action: () => this.setSorter('z-a')
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: "Last Modified",
|
|
84
|
+
action: () => this.setSorter('lastmod')
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
label: "First Modified",
|
|
88
|
+
action: () => this.setSorter('firstmod')
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
label: "Size",
|
|
92
|
+
action: () => this.setSorter('size')
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
label: "Type",
|
|
96
|
+
action: () => this.setSorter('type')
|
|
97
|
+
},
|
|
98
|
+
"separator",
|
|
99
|
+
{
|
|
100
|
+
label: "Refresh",
|
|
101
|
+
action: () => this.fileManager.currentFileGrid.loadFolder()
|
|
102
|
+
}
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
historyBack(tab) {
|
|
106
|
+
console.log("history ->", tab);
|
|
107
|
+
tab.historyIndex--;
|
|
108
|
+
tab.path = tab.history[tab.historyIndex - 1];
|
|
109
|
+
}
|
|
110
|
+
historyForward(tab) {
|
|
111
|
+
console.log("history <-", tab);
|
|
112
|
+
tab.historyIndex++;
|
|
113
|
+
tab.path = tab.history[tab.historyIndex - 1];
|
|
114
|
+
}
|
|
115
|
+
toggleDrawer() {
|
|
116
|
+
if ([...this.fileManager.drawer._drawers][0].opened)
|
|
117
|
+
this.fileManager.drawer.close();
|
|
118
|
+
else
|
|
119
|
+
this.fileManager.drawer.open();
|
|
120
|
+
}
|
|
121
|
+
setSorter(mode) {
|
|
122
|
+
this.fileManager.currentTab.sortOrder = mode;
|
|
123
|
+
this.fileManager.refreshSorting();
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
ToolbarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ToolbarComponent, deps: [{ token: i1.FilemanagerComponent }, { token: i2.DialogService }, { token: i2.Fetch }], target: i0.ɵɵFactoryTarget.Component });
|
|
127
|
+
ToolbarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: ToolbarComponent, isStandalone: true, selector: "app-toolbar", inputs: { config: "config", currentTab: "currentTab", showHiddenFiles: "showHiddenFiles", showSidebar: "showSidebar", drawerMode: "drawerMode", showBareMinimum: "showBareMinimum" }, outputs: { onBreadcrumbClick: "onBreadcrumbClick", showHiddenFilesChange: "showHiddenFilesChange", showSidebarChange: "showSidebarChange" }, viewQueries: [{ propertyName: "zoomTemplate", first: true, predicate: ["zoomTemplate"], descendants: true }, { propertyName: "actionTemplate", first: true, predicate: ["actionTemplate"], descendants: true }], ngImport: i0, template: "<button\n *ngIf=\"fileManager.sidebarOverlay && !drawerMode\"\n mat-icon-button\n (click)=\"toggleDrawer()\"\n>\n <mat-icon>list</mat-icon>\n</button>\n\n<ng-container *ngIf=\"!showBareMinimum\">\n <div class=\"buttongroup\">\n <gtk-icon-button\n fontIcon=\"arrow_back_ios_new\"\n (click)=\"historyBack(currentTab)\"\n [disabled]=\"currentTab.history?.length <= 1\"\n />\n <gtk-icon-button\n fontIcon=\"arrow_forward_ios\"\n (click)=\"historyForward(currentTab)\"\n [disabled]=\"currentTab.historyIndex >= (currentTab.history?.length-1)\"\n />\n </div>\n\n <div style=\"width: 40px\" *ngIf=\"!drawerMode\"></div>\n</ng-container>\n\n\n<app-breadcrumb\n *ngIf=\"currentTab\"\n style=\"flex: 1\"\n [crumbs]=\"currentTab.breadcrumb\"\n (crumbClick)=\"onBreadcrumbClick.next($event)\"\n [config]=\"config\"\n/>\n\n<ng-container *ngIf=\"!drawerMode\">\n <!-- <div style=\"flex: 1\"></div> -->\n\n <gtk-icon-button\n fontIcon=\"more_vert\"\n [ngx-menu]=\"fileOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n <div style=\"width: 8px\"></div>\n\n <!-- <gtk-icon-button\n fontIcon=\"search\"\n /> -->\n\n <div style=\"width: 100px\" *ngIf=\"fileManager.width > 800\"></div>\n\n <gtk-icon-button\n [fontIcon]=\"currentTab.viewMode == 'list' ? 'view_list' : 'grid_view'\"\n (click)=\"currentTab.viewMode = currentTab.viewMode == 'list' ? 'grid' : 'list'; fileManager.onResize()\"\n />\n\n <gtk-icon-button\n fontIcon=\"sort\"\n [ngx-menu]=\"sortOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n</ng-container>\n\n", styles: [":host{display:flex}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i4.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: GtkIconButtonComponent, selector: "gtk-icon-button", inputs: ["fontIcon", "disabled"], outputs: ["click"] }, { kind: "component", type: GtkBreadcrumbComponent, selector: "app-breadcrumb", inputs: ["crumbs", "config"], outputs: ["crumbClick"] }, { kind: "directive", type: MenuDirective, selector: "[ngx-contextmenu],[ngx-menu],[ngxContextmenu],[ngxMenu]", inputs: ["ngx-menu-context", "ngx-contextmenu", "ngx-menu", "ngx-menu-config"] }] });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ToolbarComponent, decorators: [{
|
|
129
|
+
type: Component,
|
|
130
|
+
args: [{ selector: 'app-toolbar', imports: [
|
|
131
|
+
NgIf,
|
|
132
|
+
MatIconModule,
|
|
133
|
+
MatButtonModule,
|
|
134
|
+
GtkIconButtonComponent,
|
|
135
|
+
GtkBreadcrumbComponent,
|
|
136
|
+
MenuDirective
|
|
137
|
+
], standalone: true, template: "<button\n *ngIf=\"fileManager.sidebarOverlay && !drawerMode\"\n mat-icon-button\n (click)=\"toggleDrawer()\"\n>\n <mat-icon>list</mat-icon>\n</button>\n\n<ng-container *ngIf=\"!showBareMinimum\">\n <div class=\"buttongroup\">\n <gtk-icon-button\n fontIcon=\"arrow_back_ios_new\"\n (click)=\"historyBack(currentTab)\"\n [disabled]=\"currentTab.history?.length <= 1\"\n />\n <gtk-icon-button\n fontIcon=\"arrow_forward_ios\"\n (click)=\"historyForward(currentTab)\"\n [disabled]=\"currentTab.historyIndex >= (currentTab.history?.length-1)\"\n />\n </div>\n\n <div style=\"width: 40px\" *ngIf=\"!drawerMode\"></div>\n</ng-container>\n\n\n<app-breadcrumb\n *ngIf=\"currentTab\"\n style=\"flex: 1\"\n [crumbs]=\"currentTab.breadcrumb\"\n (crumbClick)=\"onBreadcrumbClick.next($event)\"\n [config]=\"config\"\n/>\n\n<ng-container *ngIf=\"!drawerMode\">\n <!-- <div style=\"flex: 1\"></div> -->\n\n <gtk-icon-button\n fontIcon=\"more_vert\"\n [ngx-menu]=\"fileOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n\n <div style=\"width: 8px\"></div>\n\n <!-- <gtk-icon-button\n fontIcon=\"search\"\n /> -->\n\n <div style=\"width: 100px\" *ngIf=\"fileManager.width > 800\"></div>\n\n <gtk-icon-button\n [fontIcon]=\"currentTab.viewMode == 'list' ? 'view_list' : 'grid_view'\"\n (click)=\"currentTab.viewMode = currentTab.viewMode == 'list' ? 'grid' : 'list'; fileManager.onResize()\"\n />\n\n <gtk-icon-button\n fontIcon=\"sort\"\n [ngx-menu]=\"sortOptions\"\n [ngx-menu-config]=\"{position: 'bottom'}\"\n />\n</ng-container>\n\n", styles: [":host{display:flex}\n"] }]
|
|
138
|
+
}], ctorParameters: function () { return [{ type: i1.FilemanagerComponent }, { type: i2.DialogService }, { type: i2.Fetch }]; }, propDecorators: { zoomTemplate: [{
|
|
139
|
+
type: ViewChild,
|
|
140
|
+
args: ['zoomTemplate']
|
|
141
|
+
}], actionTemplate: [{
|
|
142
|
+
type: ViewChild,
|
|
143
|
+
args: ['actionTemplate']
|
|
144
|
+
}], config: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], onBreadcrumbClick: [{
|
|
147
|
+
type: Output
|
|
148
|
+
}], currentTab: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], showHiddenFiles: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], showHiddenFilesChange: [{
|
|
153
|
+
type: Output
|
|
154
|
+
}], showSidebar: [{
|
|
155
|
+
type: Input
|
|
156
|
+
}], showSidebarChange: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], drawerMode: [{
|
|
159
|
+
type: Input
|
|
160
|
+
}], showBareMinimum: [{
|
|
161
|
+
type: Input
|
|
162
|
+
}] } });
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbGJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvZmlsZW1hbmFnZXIvdG9vbGJhci90b29sYmFyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci90b29sYmFyL3Rvb2xiYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBZSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0YsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0UsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHM0UsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN4QyxPQUFPLEVBQXdCLGFBQWEsRUFBWSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7QUFnQnBGLE1BQU0sT0FBTyxnQkFBZ0I7SUFtQnpCLFlBQ1csV0FBaUMsRUFDaEMsTUFBcUIsRUFDckIsS0FBWTtRQUZiLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUNoQyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLFVBQUssR0FBTCxLQUFLLENBQU87UUFmZCxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXhDLGVBQVUsR0FBZ0IsRUFBUyxDQUFDO1FBR25DLDBCQUFxQixHQUFHLElBQUks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O2lHQUFoQixnQkFBZ0IsMmxCQ3pCN0IsNnREQStEQSwrRUQvQ1EsSUFBSSw0RkFDSixhQUFhLG1MQUNiLGVBQWUsNExBQ2Ysc0JBQXNCLGtIQUN0QixzQkFBc0Isa0hBQ3RCLGFBQWE7MkZBSVIsZ0JBQWdCO2tCQWQ1QixTQUFTOytCQUNJLGFBQWEsV0FHZDt3QkFDTCxJQUFJO3dCQUNKLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixzQkFBc0I7d0JBQ3RCLHNCQUFzQjt3QkFDdEIsYUFBYTtxQkFDaEIsY0FDVyxJQUFJOzJKQUdXLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYztnQkFDSSxjQUFjO3NCQUExQyxTQUFTO3VCQUFDLGdCQUFnQjtnQkFFbEIsTUFBTTtzQkFBZCxLQUFLO2dCQUdJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRSxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0kscUJBQXFCO3NCQUE5QixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksaUJBQWlCO3NCQUExQixNQUFNO2dCQUVFLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBHdGtJY29uQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9pY29uLWJ1dHRvbi9pY29uLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3RrQnJlYWRjcnVtYkNvbXBvbmVudCB9IGZyb20gJy4vYnJlYWRjcnVtYi9icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBGaWxlbWFuYWdlckNvbXBvbmVudCwgRmlsZVZpZXdUYWIsIEZTRGVzY3JpcHRvciwgTmd4RmlsZU1hbmFnZXJDb25maWd1cmF0aW9uIH0gZnJvbSAnLi4vZmlsZW1hbmFnZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEZpbGVTb3J0aW5nIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgdXBsb2FkRmlsZSB9IGZyb20gJy4uL2hlbHBlcnMnO1xuaW1wb3J0IHsgRGlhbG9nU2VydmljZSwgRmV0Y2gsIE1lbnVEaXJlY3RpdmUsIE1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vLi4vcHVibGljLWFwaSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYXBwLXRvb2xiYXInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90b29sYmFyLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90b29sYmFyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBOZ0lmLFxuICAgICAgICBNYXRJY29uTW9kdWxlLFxuICAgICAgICBNYXRCdXR0b25Nb2R1bGUsXG4gICAgICAgIEd0a0ljb25CdXR0b25Db21wb25lbnQsXG4gICAgICAgIEd0a0JyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIE1lbnVEaXJlY3RpdmVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVG9vbGJhckNvbXBvbmVudCB7XG4gICAgQFZpZXdDaGlsZCgnem9vbVRlbXBsYXRlJykgem9vbVRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2FjdGlvblRlbXBsYXRlJykgYWN0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBjb25maWc6IE5neEZpbGVNYW5hZ2VyQ29uZmlndXJhdGlvbjtcblxuXG4gICAgQE91dHB1dCgpIG9uQnJlYWRjcnVtYkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQElucHV0KCkgY3VycmVudFRhYjogRmlsZVZpZXdUYWIgPSB7fSBhcyBhbnk7XG5cbiAgICBASW5wdXQoKSBzaG93SGlkZGVuRmlsZXM6IGJvb2xlYW47XG4gICAgQE91dHB1dCgpIHNob3dIaWRkZW5GaWxlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBASW5wdXQoKSBzaG93U2lkZWJhcjogYm9vbGVhbjtcbiAgICBAT3V0cHV0KCkgc2hvd1NpZGViYXJDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICBASW5wdXQoKSBkcmF3ZXJNb2RlID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2hvd0JhcmVNaW5pbXVtID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIGZpbGVNYW5hZ2VyOiBGaWxlbWFuYWdlckNvbXBvbmVudCxcbiAgICAgICAgcHJpdmF0ZSBkaWFsb2c6IERpYWxvZ1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgZmV0Y2g6IEZldGNoXG4gICAgKSB7XG5cbiAgICB9XG5cbiAgICBmaWxlT3B0aW9uczogTWVudUl0ZW08RlNEZXNjcmlwdG9yPltdID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJOZXcgRm9sZGVyXCIsXG4gICAgICAgICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZy5vcGVuKFwiZm9sZGVyLXJlbmFtZVwiLCBcIkBkb3RnbGl0Y2gvbmd4LXdlYi1jb21wb25lbnRzXCIsIHsgaW5wdXRzOiB7IHBhdGg6IHRoaXMuY3VycmVudFRhYi5wYXRoLCBuYW1lOiAnJywgY29uZmlnOiB0aGlzLmNvbmZpZyB9IH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlVwbG9hZCBmaWxlXCIsXG4gICAgICAgICAgICBpY29uOiBcImZpbGVfdXBsb2FkXCIsXG4gICAgICAgICAgICBhY3Rpb246IChldnQpID0+IHVwbG9hZEZpbGUodGhpcy5mZXRjaCwgdGhpcy5jb25maWcsIHRoaXMuZmlsZU1hbmFnZXIuY3VycmVudFRhYi5wYXRoLCBudWxsLCB0aGlzLmZpbGVNYW5hZ2VyLmNvbnRleHRUYWdzKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGVsbCB0aGUgY3VycmVudCB0YWIgdG8gcmVsb2FkIGl0J3MgZGF0YS5cbiAgICAgICAgICAgICAgICBjb25zdCB0YWIgPSAgdGhpcy5maWxlTWFuYWdlci5jdXJyZW50VGFiO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyaWQgPSB0aGlzLmZpbGVNYW5hZ2VyLmZpbGVHcmlkcy5maW5kKHQgPT4gdC50YWIuaWQgPT0gdGFiLmlkKTtcbiAgICAgICAgICAgICAgICBncmlkLmxvYWRGb2xkZXIoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIkFkZCB0byBCb29rbWFya3MgKFdJUClcIixcbiAgICAgICAgLy8gICAgIGFjdGlvbjogKGZvbGRlcikgPT4ge1xuICAgICAgICAvLyAgICAgICAgIC8vXG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH0sXG4gICAgICAgIC8vIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIC8vIHtcbiAgICAgICAgLy8gICAgIGxhYmVsOiBcIlBhc3RlXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBsYWJlbDogXCJTZWxlY3QgQWxsXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgICAgICAvLyBcInNlcGFyYXRvclwiLFxuICAgICAgICAvLyB7XG4gICAgICAgIC8vICAgICBsYWJlbDogXCJQcm9wZXJ0aWVzXCIsXG4gICAgICAgIC8vICAgICBhY3Rpb246IChmb2xkZXIpID0+IHtcbiAgICAgICAgLy8gICAgICAgICAvL1xuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9LFxuICAgIF1cblxuICAgIHNvcnRPcHRpb25zOiBNZW51SXRlbTxGU0Rlc2NyaXB0b3I+W10gPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNvcnRcIixcbiAgICAgICAgICAgIHNlcGFyYXRvcjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJBLVpcIixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5zZXRTb3J0ZXIoJ2EteicpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlotQVwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNldFNvcnRlcignei1hJylcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiTGFzdCBNb2RpZmllZFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLnNldFNvcnRlcignbGFzdG1vZCcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIkZpcnN0IE1vZGlmaWVkXCIsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2V0U29ydGVyKCdmaXJzdG1vZCcpXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxhYmVsOiBcIlNpemVcIixcbiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5zZXRTb3J0ZXIoJ3NpemUnKVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBsYWJlbDogXCJUeXBlXCIsXG4gICAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuc2V0U29ydGVyKCd0eXBlJylcbiAgICAgICAgfSxcbiAgICAgICAgXCJzZXBhcmF0b3JcIixcbiAgICAgICAge1xuICAgICAgICAgICAgbGFiZWw6IFwiUmVmcmVzaFwiLFxuICAgICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmZpbGVNYW5hZ2VyLmN1cnJlbnRGaWxlR3JpZC5sb2FkRm9sZGVyKClcbiAgICAgICAgfVxuICAgIF07XG5cbiAgICBoaXN0b3J5QmFjayh0YWI6IEZpbGVWaWV3VGFiKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaGlzdG9yeSAtPlwiLCB0YWIpXG4gICAgICAgIHRhYi5oaXN0b3J5SW5kZXgtLTtcbiAgICAgICAgdGFiLnBhdGggPSB0YWIuaGlzdG9yeVt0YWIuaGlzdG9yeUluZGV4IC0gMV07XG4gICAgfVxuXG4gICAgaGlzdG9yeUZvcndhcmQodGFiOiBGaWxlVmlld1RhYikge1xuICAgICAgICBjb25zb2xlLmxvZyhcImhpc3RvcnkgPC1cIiwgdGFiKVxuICAgICAgICB0YWIuaGlzdG9yeUluZGV4Kys7XG4gICAgICAgIHRhYi5wYXRoID0gdGFiLmhpc3RvcnlbdGFiLmhpc3RvcnlJbmRleCAtIDFdO1xuICAgIH1cblxuICAgIHRvZ2dsZURyYXdlcigpIHtcbiAgICAgICAgaWYgKFsuLi50aGlzLmZpbGVNYW5hZ2VyLmRyYXdlci5fZHJhd2Vyc11bMF0ub3BlbmVkKVxuICAgICAgICAgICAgdGhpcy5maWxlTWFuYWdlci5kcmF3ZXIuY2xvc2UoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5maWxlTWFuYWdlci5kcmF3ZXIub3BlbigpO1xuICAgIH1cblxuICAgIHNldFNvcnRlcihtb2RlOiBGaWxlU29ydGluZykge1xuICAgICAgICB0aGlzLmZpbGVNYW5hZ2VyLmN1cnJlbnRUYWIuc29ydE9yZGVyID0gbW9kZTtcbiAgICAgICAgdGhpcy5maWxlTWFuYWdlci5yZWZyZXNoU29ydGluZygpO1xuICAgIH1cbn1cbiIsIjxidXR0b25cbiAgICAqbmdJZj1cImZpbGVNYW5hZ2VyLnNpZGViYXJPdmVybGF5ICYmICFkcmF3ZXJNb2RlXCJcbiAgICBtYXQtaWNvbi1idXR0b25cbiAgICAoY2xpY2spPVwidG9nZ2xlRHJhd2VyKClcIlxuPlxuICAgIDxtYXQtaWNvbj5saXN0PC9tYXQtaWNvbj5cbjwvYnV0dG9uPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dCYXJlTWluaW11bVwiPlxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25ncm91cFwiPlxuICAgICAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgICAgICBmb250SWNvbj1cImFycm93X2JhY2tfaW9zX25ld1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiaGlzdG9yeUJhY2soY3VycmVudFRhYilcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRUYWIuaGlzdG9yeT8ubGVuZ3RoIDw9IDFcIlxuICAgICAgICAvPlxuICAgICAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgICAgICBmb250SWNvbj1cImFycm93X2ZvcndhcmRfaW9zXCJcbiAgICAgICAgICAgIChjbGljayk9XCJoaXN0b3J5Rm9yd2FyZChjdXJyZW50VGFiKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudFRhYi5oaXN0b3J5SW5kZXggPj0gKGN1cnJlbnRUYWIuaGlzdG9yeT8ubGVuZ3RoLTEpXCJcbiAgICAgICAgLz5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogNDBweFwiICpuZ0lmPVwiIWRyYXdlck1vZGVcIj48L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG5cbjxhcHAtYnJlYWRjcnVtYlxuICAgICpuZ0lmPVwiY3VycmVudFRhYlwiXG4gICAgc3R5bGU9XCJmbGV4OiAxXCJcbiAgICBbY3J1bWJzXT1cImN1cnJlbnRUYWIuYnJlYWRjcnVtYlwiXG4gICAgKGNydW1iQ2xpY2spPVwib25CcmVhZGNydW1iQ2xpY2submV4dCgkZXZlbnQpXCJcbiAgICBbY29uZmlnXT1cImNvbmZpZ1wiXG4vPlxuXG48bmctY29udGFpbmVyICpuZ0lmPVwiIWRyYXdlck1vZGVcIj5cbiAgICA8IS0tIDxkaXYgc3R5bGU9XCJmbGV4OiAxXCI+PC9kaXY+IC0tPlxuXG4gICAgPGd0ay1pY29uLWJ1dHRvblxuICAgICAgICBmb250SWNvbj1cIm1vcmVfdmVydFwiXG4gICAgICAgIFtuZ3gtbWVudV09XCJmaWxlT3B0aW9uc1wiXG4gICAgICAgIFtuZ3gtbWVudS1jb25maWddPVwie3Bvc2l0aW9uOiAnYm90dG9tJ31cIlxuICAgIC8+XG5cbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDhweFwiPjwvZGl2PlxuXG4gICAgPCEtLSA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgIGZvbnRJY29uPVwic2VhcmNoXCJcbiAgICAvPiAtLT5cblxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMTAwcHhcIiAqbmdJZj1cImZpbGVNYW5hZ2VyLndpZHRoID4gODAwXCI+PC9kaXY+XG5cbiAgICA8Z3RrLWljb24tYnV0dG9uXG4gICAgICAgIFtmb250SWNvbl09XCJjdXJyZW50VGFiLnZpZXdNb2RlID09ICdsaXN0JyA/ICd2aWV3X2xpc3QnIDogJ2dyaWRfdmlldydcIlxuICAgICAgICAoY2xpY2spPVwiY3VycmVudFRhYi52aWV3TW9kZSA9IGN1cnJlbnRUYWIudmlld01vZGUgPT0gJ2xpc3QnID8gJ2dyaWQnIDogJ2xpc3QnOyBmaWxlTWFuYWdlci5vblJlc2l6ZSgpXCJcbiAgICAvPlxuXG4gICAgPGd0ay1pY29uLWJ1dHRvblxuICAgICAgICBmb250SWNvbj1cInNvcnRcIlxuICAgICAgICBbbmd4LW1lbnVdPVwic29ydE9wdGlvbnNcIlxuICAgICAgICBbbmd4LW1lbnUtY29uZmlnXT1cIntwb3NpdGlvbjogJ2JvdHRvbSd9XCJcbiAgICAvPlxuPC9uZy1jb250YWluZXI+XG5cbiJdfQ==
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { NgForOf, NgIf, NgTemplateOutlet } from '@angular/common';
|
|
2
|
+
import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef } from '@angular/core';
|
|
3
|
+
import { MatExpansionModule } from '@angular/material/expansion';
|
|
4
|
+
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
5
|
+
import { IconResolver } from '../icon-resolver';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
import * as i1 from "../filemanager.component";
|
|
8
|
+
import * as i2 from "@angular/material/expansion";
|
|
9
|
+
import * as i3 from "@angular/material/progress-bar";
|
|
10
|
+
export class TreeViewComponent {
|
|
11
|
+
get libConfig() { return this.fileManager.libConfig; }
|
|
12
|
+
constructor(fileManager) {
|
|
13
|
+
this.fileManager = fileManager;
|
|
14
|
+
this.click = new EventEmitter();
|
|
15
|
+
this.loadChildren = new EventEmitter();
|
|
16
|
+
this.iconResolver = new IconResolver(this.libConfig.assetPath);
|
|
17
|
+
}
|
|
18
|
+
tryLoadChildren(item, panel) {
|
|
19
|
+
this.loadChildren.next({
|
|
20
|
+
item,
|
|
21
|
+
cb: (children) => {
|
|
22
|
+
item['_children'] = children;
|
|
23
|
+
if (children.length == 0)
|
|
24
|
+
panel.close();
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
TreeViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeViewComponent, deps: [{ token: i1.FilemanagerComponent }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
TreeViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: TreeViewComponent, isStandalone: true, selector: "app-tree-view", inputs: { rowTemplateIn: ["rowTemplate", "rowTemplateIn"], data: "data" }, outputs: { click: "click", loadChildren: "loadChildren" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, read: TemplateRef }], ngImport: i0, template: "<mat-accordion displayMode=\"flat\" [multi]=\"true\">\n <mat-expansion-panel\n #panel\n *ngFor=\"let item of data\"\n expanded=\"false\"\n togglePosition=\"before\"\n [class.isleaf]=\"item['_children']?.length == 0\"\n (afterExpand)=\"tryLoadChildren(item, panel)\"\n >\n <mat-expansion-panel-header>\n <div (click)=\"$event.stopPropagation(); click.next(item);\" style=\"display: flex; align-items: center;\">\n <ng-container *ngIf=\"!panel.expanded\">\n <img style=\"height: 20px; margin-right: 8px\" [src]=\"iconResolver.resolveIcon(item)?.path\"/>\n </ng-container>\n <ng-container *ngIf=\"panel.expanded\">\n <img style=\"height: 20px; margin-right: 8px\" [src]=\"iconResolver.resolveIcon(item)?.path.replace('.svg', '-open.svg')\"/>\n </ng-container>\n {{item.name}}\n </div>\n </mat-expansion-panel-header>\n\n <app-tree-view\n *ngIf=\"item['_children']; else loadingTemplate\"\n [data]=\"item['_children']\"\n (click)=\"click.next(item)\"\n (loadChildren)=\"loadChildren.next($event)\"\n />\n <ng-template #loadingTemplate>\n <mat-progress-bar color=\"primary\" mode=\"query\"/>\n </ng-template>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [":host{display:block;color:var(--text-color)}ul{list-style:none;padding:0;margin:0}ul li>div:hover{background-color:var(--list-row-hover-background-color)}.label{top:4px;position:relative}.active ::ng-deep>.mat-expansion-panel-header>.mat-content{background-color:#494949;border-radius:7px;padding-left:12px}.active ::ng-deep>.mat-expansion-panel-header>.mat-content.label{font-weight:bolder}.isleaf ::ng-deep .mat-expansion-indicator{display:none}:host ::ng-deep .mat-expansion-panel-header,:host ::ng-deep .mat-expansion-panel-header.mat-expanded{height:32px}:host ::ng-deep .mat-expansion-panel-body{padding:0 0 0 24px}:host ::ng-deep .mat-expansion-panel{box-shadow:none!important;background:rgba(0,0,0,0)}:host ::ng-deep .mat-expansion-panel .mat-content{align-items:center}:host ::ng-deep .mat-expansion-panel-header .mat-expansion-indicator:after{transform:rotate(315deg);transition:transform .2s ease}:host ::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{transform:rotate(225deg)}\n"], dependencies: [{ kind: "component", type: TreeViewComponent, selector: "app-tree-view", inputs: ["rowTemplate", "data"], outputs: ["click", "loadChildren"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatExpansionModule }, { kind: "directive", type: i2.MatAccordion, selector: "mat-accordion", inputs: ["multi", "hideToggle", "displayMode", "togglePosition"], exportAs: ["matAccordion"] }, { kind: "component", type: i2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { kind: "component", type: i2.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i3.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }] });
|
|
31
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: TreeViewComponent, decorators: [{
|
|
32
|
+
type: Component,
|
|
33
|
+
args: [{ selector: 'app-tree-view', imports: [
|
|
34
|
+
NgIf,
|
|
35
|
+
NgForOf,
|
|
36
|
+
NgTemplateOutlet,
|
|
37
|
+
MatExpansionModule,
|
|
38
|
+
MatProgressBarModule
|
|
39
|
+
], standalone: true, template: "<mat-accordion displayMode=\"flat\" [multi]=\"true\">\n <mat-expansion-panel\n #panel\n *ngFor=\"let item of data\"\n expanded=\"false\"\n togglePosition=\"before\"\n [class.isleaf]=\"item['_children']?.length == 0\"\n (afterExpand)=\"tryLoadChildren(item, panel)\"\n >\n <mat-expansion-panel-header>\n <div (click)=\"$event.stopPropagation(); click.next(item);\" style=\"display: flex; align-items: center;\">\n <ng-container *ngIf=\"!panel.expanded\">\n <img style=\"height: 20px; margin-right: 8px\" [src]=\"iconResolver.resolveIcon(item)?.path\"/>\n </ng-container>\n <ng-container *ngIf=\"panel.expanded\">\n <img style=\"height: 20px; margin-right: 8px\" [src]=\"iconResolver.resolveIcon(item)?.path.replace('.svg', '-open.svg')\"/>\n </ng-container>\n {{item.name}}\n </div>\n </mat-expansion-panel-header>\n\n <app-tree-view\n *ngIf=\"item['_children']; else loadingTemplate\"\n [data]=\"item['_children']\"\n (click)=\"click.next(item)\"\n (loadChildren)=\"loadChildren.next($event)\"\n />\n <ng-template #loadingTemplate>\n <mat-progress-bar color=\"primary\" mode=\"query\"/>\n </ng-template>\n </mat-expansion-panel>\n</mat-accordion>\n", styles: [":host{display:block;color:var(--text-color)}ul{list-style:none;padding:0;margin:0}ul li>div:hover{background-color:var(--list-row-hover-background-color)}.label{top:4px;position:relative}.active ::ng-deep>.mat-expansion-panel-header>.mat-content{background-color:#494949;border-radius:7px;padding-left:12px}.active ::ng-deep>.mat-expansion-panel-header>.mat-content.label{font-weight:bolder}.isleaf ::ng-deep .mat-expansion-indicator{display:none}:host ::ng-deep .mat-expansion-panel-header,:host ::ng-deep .mat-expansion-panel-header.mat-expanded{height:32px}:host ::ng-deep .mat-expansion-panel-body{padding:0 0 0 24px}:host ::ng-deep .mat-expansion-panel{box-shadow:none!important;background:rgba(0,0,0,0)}:host ::ng-deep .mat-expansion-panel .mat-content{align-items:center}:host ::ng-deep .mat-expansion-panel-header .mat-expansion-indicator:after{transform:rotate(315deg);transition:transform .2s ease}:host ::ng-deep .mat-expansion-panel-header.mat-expanded .mat-expansion-indicator:after{transform:rotate(225deg)}\n"] }]
|
|
40
|
+
}], ctorParameters: function () { return [{ type: i1.FilemanagerComponent }]; }, propDecorators: { rowTemplate: [{
|
|
41
|
+
type: ContentChild,
|
|
42
|
+
args: ["rowTemplate", { read: TemplateRef }]
|
|
43
|
+
}], rowTemplateIn: [{
|
|
44
|
+
type: Input,
|
|
45
|
+
args: ["rowTemplate"]
|
|
46
|
+
}], data: [{
|
|
47
|
+
type: Input
|
|
48
|
+
}], click: [{
|
|
49
|
+
type: Output
|
|
50
|
+
}], loadChildren: [{
|
|
51
|
+
type: Output
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS12aWV3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci90cmVlLXZpZXcvdHJlZS12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9maWxlbWFuYWdlci90cmVlLXZpZXcvdHJlZS12aWV3LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUF3QixLQUFLLEVBQVksTUFBTSxFQUFFLFdBQVcsRUFBZ0MsTUFBTSxlQUFlLENBQUM7QUFDaEssT0FBTyxFQUFFLGtCQUFrQixFQUFxQixNQUFNLDZCQUE2QixDQUFDO0FBQ3BGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7QUFnQmhELE1BQU0sT0FBTyxpQkFBaUI7SUFVMUIsSUFBSSxTQUFTLEtBQUssT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFFdEQsWUFDcUIsV0FBaUM7UUFBakMsZ0JBQVcsR0FBWCxXQUFXLENBQXNCO1FBUDVDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQVF4QyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFJLEVBQUUsS0FBd0I7UUFDMUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSTtZQUNKLEVBQUUsRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxRQUFRLENBQUM7Z0JBQzdCLElBQUksUUFBUSxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUNwQixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDdEIsQ0FBQztTQUNKLENBQUMsQ0FBQTtJQUNOLENBQUM7OzhHQTNCUSxpQkFBaUI7a0dBQWpCLGlCQUFpQixrU0FDVyxXQUFXLDZCQ3JCcEQseTVDQWdDQSx5akNEWmEsaUJBQWlCLCtIQVJ0QixJQUFJLDZGQUNKLE9BQU8sa0hBRVAsa0JBQWtCLHltQkFDbEIsb0JBQW9COzJGQUlmLGlCQUFpQjtrQkFiN0IsU0FBUzsrQkFDSSxlQUFlLFdBR2hCO3dCQUNMLElBQUk7d0JBQ0osT0FBTzt3QkFDUCxnQkFBZ0I7d0JBQ2hCLGtCQUFrQjt3QkFDbEIsb0JBQW9CO3FCQUN2QixjQUNXLElBQUk7MkdBR29DLFdBQVc7c0JBQTlELFlBQVk7dUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDNUIsYUFBYTtzQkFBbEMsS0FBSzt1QkFBQyxhQUFhO2dCQUVYLElBQUk7c0JBQVosS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nRm9yT2YsIE5nSWYsIE5nVGVtcGxhdGVPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgRWxlbWVudFJlZiwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTWF0RXhwYW5zaW9uTW9kdWxlLCBNYXRFeHBhbnNpb25QYW5lbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2V4cGFuc2lvbic7XG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XG5pbXBvcnQgeyBJY29uUmVzb2x2ZXIgfSBmcm9tICcuLi9pY29uLXJlc29sdmVyJztcbmltcG9ydCB7IEZpbGVtYW5hZ2VyQ29tcG9uZW50IH0gZnJvbSAnLi4vZmlsZW1hbmFnZXIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhcHAtdHJlZS12aWV3JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdHJlZS12aWV3LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90cmVlLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIE5nSWYsXG4gICAgICAgIE5nRm9yT2YsXG4gICAgICAgIE5nVGVtcGxhdGVPdXRsZXQsXG4gICAgICAgIE1hdEV4cGFuc2lvbk1vZHVsZSxcbiAgICAgICAgTWF0UHJvZ3Jlc3NCYXJNb2R1bGVcbiAgICBdLFxuICAgIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVHJlZVZpZXdDb21wb25lbnQge1xuICAgIEBDb250ZW50Q2hpbGQoXCJyb3dUZW1wbGF0ZVwiLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIHJvd1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBJbnB1dChcInJvd1RlbXBsYXRlXCIpIHJvd1RlbXBsYXRlSW46IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBASW5wdXQoKSBkYXRhOiBhbnlbXTtcblxuICAgIEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgICBAT3V0cHV0KCkgbG9hZENoaWxkcmVuID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgaWNvblJlc29sdmVyOiBJY29uUmVzb2x2ZXI7XG4gICAgZ2V0IGxpYkNvbmZpZygpIHsgcmV0dXJuIHRoaXMuZmlsZU1hbmFnZXIubGliQ29uZmlnOyB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBmaWxlTWFuYWdlcjogRmlsZW1hbmFnZXJDb21wb25lbnQsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuaWNvblJlc29sdmVyID0gbmV3IEljb25SZXNvbHZlcih0aGlzLmxpYkNvbmZpZy5hc3NldFBhdGgpO1xuICAgIH1cblxuICAgIHRyeUxvYWRDaGlsZHJlbihpdGVtLCBwYW5lbDogTWF0RXhwYW5zaW9uUGFuZWwpIHtcbiAgICAgICAgdGhpcy5sb2FkQ2hpbGRyZW4ubmV4dCh7XG4gICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgY2I6IChjaGlsZHJlbikgPT4ge1xuICAgICAgICAgICAgICAgIGl0ZW1bJ19jaGlsZHJlbiddID0gY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PSAwKVxuICAgICAgICAgICAgICAgICAgICBwYW5lbC5jbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbn1cbiIsIjxtYXQtYWNjb3JkaW9uIGRpc3BsYXlNb2RlPVwiZmxhdFwiIFttdWx0aV09XCJ0cnVlXCI+XG4gICAgPG1hdC1leHBhbnNpb24tcGFuZWxcbiAgICAgICAgI3BhbmVsXG4gICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFcIlxuICAgICAgICBleHBhbmRlZD1cImZhbHNlXCJcbiAgICAgICAgdG9nZ2xlUG9zaXRpb249XCJiZWZvcmVcIlxuICAgICAgICBbY2xhc3MuaXNsZWFmXT1cIml0ZW1bJ19jaGlsZHJlbiddPy5sZW5ndGggPT0gMFwiXG4gICAgICAgIChhZnRlckV4cGFuZCk9XCJ0cnlMb2FkQ2hpbGRyZW4oaXRlbSwgcGFuZWwpXCJcbiAgICA+XG4gICAgICAgIDxtYXQtZXhwYW5zaW9uLXBhbmVsLWhlYWRlcj5cbiAgICAgICAgICAgIDxkaXYgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgY2xpY2submV4dChpdGVtKTtcIiBzdHlsZT1cImRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFwYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHN0eWxlPVwiaGVpZ2h0OiAyMHB4OyBtYXJnaW4tcmlnaHQ6IDhweFwiIFtzcmNdPVwiaWNvblJlc29sdmVyLnJlc29sdmVJY29uKGl0ZW0pPy5wYXRoXCIvPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYW5lbC5leHBhbmRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIHN0eWxlPVwiaGVpZ2h0OiAyMHB4OyBtYXJnaW4tcmlnaHQ6IDhweFwiIFtzcmNdPVwiaWNvblJlc29sdmVyLnJlc29sdmVJY29uKGl0ZW0pPy5wYXRoLnJlcGxhY2UoJy5zdmcnLCAnLW9wZW4uc3ZnJylcIi8+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAge3tpdGVtLm5hbWV9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbC1oZWFkZXI+XG5cbiAgICAgICAgPGFwcC10cmVlLXZpZXdcbiAgICAgICAgICAgICpuZ0lmPVwiaXRlbVsnX2NoaWxkcmVuJ107IGVsc2UgbG9hZGluZ1RlbXBsYXRlXCJcbiAgICAgICAgICAgIFtkYXRhXT1cIml0ZW1bJ19jaGlsZHJlbiddXCJcbiAgICAgICAgICAgIChjbGljayk9XCJjbGljay5uZXh0KGl0ZW0pXCJcbiAgICAgICAgICAgIChsb2FkQ2hpbGRyZW4pPVwibG9hZENoaWxkcmVuLm5leHQoJGV2ZW50KVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ1RlbXBsYXRlPlxuICAgICAgICAgICAgPG1hdC1wcm9ncmVzcy1iYXIgY29sb3I9XCJwcmltYXJ5XCIgbW9kZT1cInF1ZXJ5XCIvPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbWF0LWV4cGFuc2lvbi1wYW5lbD5cbjwvbWF0LWFjY29yZGlvbj5cbiJdfQ==
|
|
@@ -7,11 +7,11 @@ export class LazyLoaderModule {
|
|
|
7
7
|
return ({
|
|
8
8
|
ngModule: LazyLoaderModule,
|
|
9
9
|
providers: [
|
|
10
|
-
LazyLoaderService,
|
|
11
10
|
{
|
|
12
11
|
provide: NGX_LAZY_LOADER_CONFIG,
|
|
13
12
|
useValue: config
|
|
14
|
-
}
|
|
13
|
+
},
|
|
14
|
+
LazyLoaderService
|
|
15
15
|
]
|
|
16
16
|
});
|
|
17
17
|
}
|
|
@@ -26,4 +26,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
26
26
|
exports: [LazyLoaderComponent]
|
|
27
27
|
}]
|
|
28
28
|
}] });
|
|
29
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy9jb21wb25lbnRzL2xhenktbG9hZGVyL2xhenktbG9hZGVyLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFFbEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBTWxGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDbEIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUEyQjtRQUM3QyxPQUFPLENBQUM7WUFDSixRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRTtnQkFDUDtvQkFDSSxPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixRQUFRLEVBQUUsTUFBTTtpQkFDbkI7Z0JBQ0QsaUJBQWlCO2FBQ3BCO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7NkdBWlEsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsWUFIZixtQkFBbUIsYUFDbkIsbUJBQW1COzhHQUVwQixnQkFBZ0IsWUFIZixtQkFBbUI7MkZBR3BCLGdCQUFnQjtrQkFKNUIsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztvQkFDOUIsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQ2pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIE9wdGlvbmFsLCBTa2lwU2VsZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4TGF6eUxvYWRlckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTGF6eUxvYWRlckNvbXBvbmVudCB9IGZyb20gJy4vbGF6eS1sb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IExhenlMb2FkZXJTZXJ2aWNlLCBOR1hfTEFaWV9MT0FERVJfQ09ORklHIH0gZnJvbSAnLi9sYXp5LWxvYWRlci5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbTGF6eUxvYWRlckNvbXBvbmVudF0sXG4gICAgZXhwb3J0czogW0xhenlMb2FkZXJDb21wb25lbnRdXG59KVxuZXhwb3J0IGNsYXNzIExhenlMb2FkZXJNb2R1bGUge1xuICAgIHB1YmxpYyBzdGF0aWMgZm9yUm9vdChjb25maWc6IE5neExhenlMb2FkZXJDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPExhenlMb2FkZXJNb2R1bGU+IHtcbiAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICBuZ01vZHVsZTogTGF6eUxvYWRlck1vZHVsZSxcbiAgICAgICAgICAgIHByb3ZpZGVyczogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZTogTkdYX0xBWllfTE9BREVSX0NPTkZJRyxcbiAgICAgICAgICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2VcbiAgICAgICAgICAgIF1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl19
|
|
@@ -212,4 +212,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
212
212
|
type: Inject,
|
|
213
213
|
args: [NGX_LAZY_LOADER_CONFIG]
|
|
214
214
|
}] }]; } });
|
|
215
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9sYXp5LWxvYWRlci9sYXp5LWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQTRELHdCQUF3QixFQUFnRCxNQUFNLFNBQVMsQ0FBQztBQUMzSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFbkQsMENBQTBDO0FBQzFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQWtCLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBa0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFLeEYsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLElBQUksS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQVNuRSxZQUE0QyxTQUE4QixFQUFFO1FBQ3hFLG9GQUFvRjtRQUNwRixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBMkI7UUFDaEQsTUFBTSxFQUFF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QUFNLENBQUMsY0FBYyxDQUFDLE9BQWMsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsT0FBTyxDQUFDLENBQUM7Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtJQUNMLENBQUM7O0FBclBELGlEQUFpRDtBQUNsQywwQkFBUSxHQUVuQixFQUFFLENBQUM7OEdBUkUsaUJBQWlCLGtCQVlOLHNCQUFzQjtrSEFaakMsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFhZ0IsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21waWxlZENvbXBvbmVudCwgQ29tcGlsZWRNb2R1bGUsIENvbXBvbmVudFJlZ2lzdHJhdGlvbiwgQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LCBEeW5hbWljUmVnaXN0cmF0aW9uQXJncywgTmd4TGF6eUxvYWRlckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc3RyaW5nVG9TbHVnLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8vIE1vbmtleS1wYXRjaCB0aGUgdHlwZSBvZiB0aGVzZSBzeW1ib2xzLlxuY29uc3QgJGlkID0gU3ltYm9sKFwiaWRcIikgYXMgYW55IGFzIHN0cmluZztcbmNvbnN0ICRncm91cCA9IFN5bWJvbChcImdyb3VwXCIpIGFzIGFueSBhcyBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBOR1hfTEFaWV9MT0FERVJfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE5neExhenlMb2FkZXJDb25maWc+KCdjb25maWcnKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMYXp5TG9hZGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBnZXQgZXJyKCkgeyByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnI7IH1cbiAgICBwcml2YXRlIGdldCBsb2coKSB7IHJldHVybiBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLmxvZzsgfVxuICAgIHByaXZhdGUgZ2V0IHdhcm4oKSB7IHJldHVybiBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLndhcm47IH1cblxuICAgIC8vIEEgcHJveGllZCByZWdpc3RyeSB0aGF0IG11dGF0ZXMgcmVmZXJlbmNlIGtleXNcbiAgICBwcml2YXRlIHN0YXRpYyByZWdpc3RyeToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBDb21wb25lbnRSZWdpc3RyYXRpb25bXTtcbiAgICB9ID0ge307XG5cbiAgICBwdWJsaWMgc3RhdGljIGNvbmZpZzogTmd4TGF6eUxvYWRlckNvbmZpZztcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTkdYX0xBWllfTE9BREVSX0NPTkZJRykgY29uZmlnOiBOZ3hMYXp5TG9hZGVyQ29uZmlnID0ge30pIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoaXMgaXMgc2luZ2xldG9uIGFuZCB3b3JrcyByZWdhcmRsZXNzIG9mIHNwZWNpYWwgaW5zdGFuY2luZyByZXF1aXJlbWVudHMuXG4gICAgICAgIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyZShjb25maWc6IE5neExhenlMb2FkZXJDb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIHdhcm4sIGVyciB9ID0gTG9nZ2VyKFwibmd4LWxhenktbG9hZGVyXCIsIFwiIzAwOTY4OFwiKTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlc29sdmVTdHJhdGVneTogQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LlBpY2tGaXJzdCxcbiAgICAgICAgICAgIGxvZ2dlcjoge1xuICAgICAgICAgICAgICAgIGxvZyxcbiAgICAgICAgICAgICAgICB3YXJuLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmNvbmZpZ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbmZpZy5lbnRyaWVzPy5mb3JFYWNoKGUgPT4gdGhpcy5hZGRDb21wb25lbnRUb1JlZ2lzdHJ5KGUpKVxuXG4gICAgICAgIC8vIElmIGEgY3VzdG9tIHJlc29sdXRpb24gc3RyYXRlZ3kgaXMgcHJvdmlkZWQgYnV0IG5vIHJlc29sdXRpb24gZnVuY3Rpb24gaXMgcGFzc2VkLFxuICAgICAgICAvLyB3ZSB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5jb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kgPT0gQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LkN1c3RvbSAmJlxuICAgICAgICAgICAgIXRoaXMuY29uZmlnLmN1c3RvbVJlc29sdmVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUuIENvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGEgY3VzdG9tIHJlc29sdmUgbWF0Y2hlciBidXQgbm9uZSB3YXMgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcubG9hZGVyRGlzdHJhY3RvckNvbXBvbmVudCAmJiB0aGlzLmNvbmZpZy5sb2FkZXJEaXN0cmFjdG9yVGVtcGxhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaGF2ZSBib3RoIGEgQ29tcG9uZW50IGFuZCBUZW1wbGF0ZSBmb3IgRGlzdHJhY3RvciB2aWV3LlwiKVxuICAgICAgICBpZiAodGhpcy5jb25maWcuZXJyb3JDb21wb25lbnQgJiYgdGhpcy5jb25maWcuZXJyb3JUZW1wbGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBoYXZlIGJvdGggYSBDb21wb25lbnQgYW5kIFRlbXBsYXRlIGZvciBFcnJvciB2aWV3LlwiKVxuICAgICAgICBpZiAodGhpcy5jb25maWcubm90Rm91bmRDb21wb25lbnQgJiYgdGhpcy5jb25maWcubm90Rm91bmRUZW1wbGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBoYXZlIGJvdGggYSBDb21wb25lbnQgYW5kIFRlbXBsYXRlIGZvciBOb3RGb3VuZCB2aWV3LlwiKVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkQ29tcG9uZW50VG9SZWdpc3RyeShyZWdpc3RyYXRpb246IENvbXBvbmVudFJlZ2lzdHJhdGlvbikge1xuICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgPHVuZGVmaW5lZD4gY29tcG9uZW50IGludG8gcmVnaXN0cnkuXCIpO1xuXG4gICAgICAgIC8vIENsb25lIHRoZSBvYmplY3QgaW50byBvdXIgcmVwb3NpdG9yeSBhbmQgdHJhbnNmZXIgdGhlIGlkIGludG8gYSBzdGFuZGFyZGl6ZWQgc2x1ZyBmb3JtYXRcblxuICAgICAgICBjb25zdCBpZCA9IHN0cmluZ1RvU2x1ZyhyZWdpc3RyYXRpb24uaWQgPz8gRGF0ZS5ub3coKS50b1N0cmluZygpKTsgLy8gcHVyZ2Ugbm9uLWJhc2ljIEFTQ0lJIGNoYXJzXG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmVnaXN0cmF0aW9uLmdyb3VwIHx8IFwiZGVmYXVsdFwiO1xuXG4gICAgICAgIHJlZ2lzdHJhdGlvblskaWRdID0gaWQ7XG4gICAgICAgIHJlZ2lzdHJhdGlvblskZ3JvdXBdID0gaWQ7XG5cblxuICAgICAgICBpZiAoIXRoaXMucmVnaXN0cnlbZ3JvdXBdKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeVtncm91cF0gPSBbXTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSByZWdpc3RyYXRpb24gZm9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgLy8gaWYgKHRoaXMucmVnaXN0cnlbZ3JvdXBdICYmIHR5cGVvZiB0aGlzLnJlZ2lzdHJ5W2dyb3VwXVsnbG9hZCddID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyAgICAgLy8gV2FybiB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlIHN0YXRlIGlzIHByb2JsZW1hdGljXG4gICAgICAgIC8vICAgICB0aGlzLmNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgLy8gICAgICAgICBgQSBwcmV2aW91cyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtpZH0hIFRoZSBvbGQgcmVnaXN0cmF0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbi5gICtcbiAgICAgICAgLy8gICAgICAgICBgUGxlYXNlIGVuc3VyZSB5b3UgdXNlIGdyb3VwcyBpZiB5b3UgaW50ZW5kIHRvIGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudCBpZHMuIGAgK1xuICAgICAgICAvLyAgICAgICAgIGBJZiB0aGlzIHdhcyBpbnRlbnRpb25hbCwgZmlyc3QgcmVtb3ZlIHRoZSBvbGQgY29tcG9uZW50IGZyb20gdGhlIHJlZ2lzdHJ5IGJlZm9yZSBhZGRpbmcgYSBuZXcgaW5zdGFuY2VgXG4gICAgICAgIC8vICAgICApO1xuXG4gICAgICAgIC8vICAgICAvLyBJZiB3ZSdyZSBpbiBkZXYgbW9kZSwgYnJlYWsgdGhlIGxvYWRlciBzdXJmYWNlXG4gICAgICAgIC8vICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5yZWdpc3RyeVtncm91cF0ucHVzaChyZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGFuIEFuZ3VsYXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGlkIGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIHJlc29sdmUgdGhlIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBncm91cFxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQW5ndWxhciBDb21wb25lbnQgQ2xhc3MgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJDb21wb25lbnQ8VCBleHRlbmRzIHsgbmV3KC4uLmFyZ3M6IGFueVtdKTogSW5zdGFuY2VUeXBlPFQ+OyB9PihhcmdzOiBEeW5hbWljUmVnaXN0cmF0aW9uQXJnczxUPikge1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBvbmVudFJlZ2lzdGVyZWQoYXJncy5pZCwgYXJncy5ncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKGBXaWxsIG5vdCByZS1yZWdpc3RlciBjb21wb25lbnQgJyR7YXJncy5pZH0nIGluIGdyb3VwICcke2FyZ3MuZ3JvdXAgfHwgJ2RlZmF1bHQnfScgYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBMYXp5TG9hZGVyU2VydmljZS5hZGRDb21wb25lbnRUb1JlZ2lzdHJ5KHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmdUb1NsdWcoYXJncy5pZCksXG4gICAgICAgICAgICBtYXRjaGVyOiBhcmdzLm1hdGNoZXIsXG4gICAgICAgICAgICBncm91cDogc3RyaW5nVG9TbHVnKGFyZ3MuZ3JvdXAgfHwgXCJkZWZhdWx0XCIpLFxuICAgICAgICAgICAgbG9hZDogYXJncy5sb2FkIHx8ICgoKSA9PiBhcmdzLmNvbXBvbmVudClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5yZWdpc3RlckNvbXBvbmVudChpZDogc3RyaW5nLCBncm91cCA9IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIGNvbnN0IF9pZCA9IHN0cmluZ1RvU2x1ZyhpZCk7XG4gICAgICAgIGNvbnN0IF9ncm91cCA9IHN0cmluZ1RvU2x1Zyhncm91cCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVSZWdpc3RyYXRpb25FbnRyeShpZCwgZ3JvdXApKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVucmVnaXN0ZXIgY29tcG9uZW50ICR7fSEgQ29tcG9uZW50IGlzIG5vdCBwcmVzZW50IGluIHJlZ2lzdHJ5XCIpXG5cbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIGNsZWFyaW5nIHJ1bm5pbmcgaW5zdGFuY2VzXG4gICAgICAgIGRlbGV0ZSBMYXp5TG9hZGVyU2VydmljZS5yZWdpc3RyeVtfZ3JvdXBdW19pZF07XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlZ2lzdHJhdGlvbiBlbnRyeSBmb3IgYSBjb21wb25lbnQuXG4gICAgICogUmV0dXJucyBudWxsIGlmIGNvbXBvbmVudCBpcyBub3QgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkodmFsdWU6IHN0cmluZywgZ3JvdXAgPSBcImRlZmF1bHRcIikge1xuICAgICAgICBjb25zdCBfaWQgPSBzdHJpbmdUb1NsdWcodmFsdWUpO1xuICAgICAgICBjb25zdCBfZ3JvdXAgPSBzdHJpbmdUb1NsdWcoZ3JvdXApO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gKExhenlMb2FkZXJTZXJ2aWNlLnJlZ2lzdHJ5W19ncm91cF0gfHwgW10pO1xuXG4gICAgICAgIGxldCBpdGVtcyA9IHRhcmdldEdyb3VwLmZpbHRlcih0ID0+IHtcbiAgICAgICAgICAgIGlmICghdCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBObyBtYXRjaGVyLCBjaGVjayBpZFxuICAgICAgICAgICAgaWYgKCF0Lm1hdGNoZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRbJGlkXSA9PSBfaWQ7XG5cbiAgICAgICAgICAgIC8vIE1hdGNoZXIgaXMgcmVnZXhcbiAgICAgICAgICAgIGlmICh0Lm1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubWF0Y2hlci50ZXN0KF9pZCkgfHwgdC5tYXRjaGVyLnRlc3QodmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBNYXRjaGVyIGlzIHN0cmluZyA9PiByZWdleFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0Lm1hdGNoZXIgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByeCA9IG5ldyBSZWdFeHAodC5tYXRjaGVyLCAndWknKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcngudGVzdChfaWQpIHx8IHJ4LnRlc3QodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXRjaGVyIGlzIGFycmF5XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0Lm1hdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdC5tYXRjaGVyLmZpbmQoZSA9PiBzdHJpbmdUb1NsdWcoZSkgPT0gX2lkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VzdG9tIG1hdGNoZXIgZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdC5tYXRjaGVyID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5tYXRjaGVyKF9pZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMud2FybihcIlJlc29sdmVkIG11bHRpcGxlIGNvbXBvbmVudHMgZm9yIHRoZSBwcm92aWRlZCBgW2NvbXBvbmVudF1gIGJpbmRpbmcuIFRoaXMgbWF5IGNhdXNlIFVJIGNvbmZsaWN0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dCA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGlmIChvdXQubWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gX2lkLm1hdGNoKG91dC5tYXRjaGVyKSB8fCB2YWx1ZS5tYXRjaChvdXQubWF0Y2hlcik7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZW50cnk6IG91dCxcbiAgICAgICAgICAgICAgICBtYXRjaEdyb3VwczogcmVzdWx0Py5ncm91cHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBlbnRyeTogb3V0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBjb21wb25lbnQgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAgICAgKiBDYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSByZWdleCBtYXRjaGVycyBhbmQgYWxpYXNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wb25lbnRSZWdpc3RlcmVkKHZhbHVlOiBzdHJpbmcsIGdyb3VwID0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkodmFsdWUsIGdyb3VwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBidW5kbGVcbiAgICAgKiBAcmV0dXJucyBUaGUgY29tcG9uZW50IGBPYmplY3RgIGlmIGEgY29tcG9uZW50IHdhcyByZXNvbHZlZCwgYG51bGxgIGlmIG5vIGNvbXBvbmVudCB3YXMgZm91bmRcbiAgICAgKiBgZmFsc2VgIGlmIHRoZSBzcGVjaWZpZWQgc3RyYXRlZ3kgd2FzIGFuIGludmFsaWQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmVDb21wb25lbnQoaWQ6IHN0cmluZywgZ3JvdXA6IHN0cmluZywgbW9kdWxlczogKENvbXBpbGVkQ29tcG9uZW50IHwgQ29tcGlsZWRNb2R1bGUpW10pOiBPYmplY3QgfCBudWxsIHwgZmFsc2Uge1xuXG4gICAgICAgIHN3aXRjaCAoTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmNvbXBvbmVudFJlc29sdmVTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuUGlja0ZpcnN0OiB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhhY3QgaWQgLT4gY2xhc3NuYW1lIG1hdGNoXG4gICAgICAgICAgICBjYXNlIENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5NYXRjaElkVG9DbGFzc05hbWU6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID1cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGsubmFtZSA9PSBpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZ1enp5IGlkIC0+IGNsYXNzbmFtZSBtYXRjaFxuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuRnV6enlJZENsYXNzTmFtZToge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pZCA9IGlkLnJlcGxhY2UoL1teYS16MC05X1xcLV0vaWcsICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChfaWQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnIoXCJGdXp6eSBjbGFzc25hbWUgbWF0Y2hpbmcgc3RyaXBwZWQgYWxsIHN5bWJvbHMgZnJvbSB0aGUgSUQgc3BlY2lmaWVkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJ4ID0gbmV3IFJlZ0V4cChgXiR7aWR9KGNvbXBvbmVudHxtb2R1bGUpPyRgLCBcImlcIik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG1vZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2lkID0gbW9kLm5hbWUucmVwbGFjZSgvW15hLXowLTlfXFwtXS9pZywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcngudGVzdChraWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnIoXCJGdXp6eSBjbGFzc25hbWUgbWF0Y2hpbmcgcmVzb2x2ZWQgbXVsdGlwbGUgdGFyZ2V0cyFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLmVycihcIkZ1enp5IGNsYXNzbmFtZSBtYXRjaGluZyByZXNvbHZlZCBubyB0YXJnZXRzIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5DdXN0b206IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmN1c3RvbVJlc29sdmVyKG1vZHVsZXMgYXMgYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9sYXp5LWxvYWRlci9sYXp5LWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBWSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQTRELHdCQUF3QixFQUFnRCxNQUFNLFNBQVMsQ0FBQztBQUMzSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFbkQsMENBQTBDO0FBQzFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQWtCLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBa0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFLeEYsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLElBQUksS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQVNuRSxZQUE0QyxTQUE4QixFQUFFO1FBQ3hFLG9GQUFvRjtRQUNwRixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBMkI7UUFDaEQsTUFBTSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDVix3QkFBd0IsRUFBRSx3QkFBd0IsQ0FBQyxTQUFTO1lBQzVELE1BQU0sRUFBRTtnQkFDSixHQUFHO2dCQUNILElBQUk7Z0JBQ0osR0FBRzthQUNOO1lBQ0QsR0FBRyxNQUFNO1NBQ1osQ0FBQztRQUVGLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFFNUQsb0ZBQW9GO1FBQ3BGLG9CQUFvQjtRQUNwQixJQUNJLElBQUksQ0FBQyxNQUFNLENBQUMsd0JBQXdCLElBQUksd0JBQXdCLENBQUMsTUFBTTtZQUN2RSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUM3QjtZQUNFLE1BQU0sSUFBSSxLQUFLLENBQUMsMkZBQTJGLENBQUMsQ0FBQztTQUNoSDtRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyx5QkFBeUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLHdCQUF3QjtZQUM3RSxNQUFNLElBQUksS0FBSyxDQUFDLGdFQUFnRSxDQUFDLENBQUE7UUFDckYsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWE7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFBO1FBQ2hGLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtZQUM3RCxNQUFNLElBQUksS0FBSyxDQUFDLDhEQUE4RCxDQUFDLENBQUE7SUFFdkYsQ0FBQztJQUVPLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxZQUFtQztRQUNyRSxJQUFJLENBQUMsWUFBWTtZQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsaURBQWlELENBQUMsQ0FBQztRQUV2RSwyRkFBMkY7UUFFM0YsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7UUFDakcsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssSUFBSSxTQUFTLENBQUM7UUFFOUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN2QixZQUFZLENBQUMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRzFCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztZQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUU5Qiw0REFBNEQ7UUFDNUQsbUZBQW1GO1FBQ25GLDBEQUEwRDtRQUMxRCwrQkFBK0I7UUFDL0Isa0dBQWtHO1FBQ2xHLDJGQUEyRjtRQUMzRixtSEFBbUg7UUFDbkgsU0FBUztRQUVULHdEQUF3RDtRQUN4RCx1QkFBdUI7UUFDdkIsa0JBQWtCO1FBQ2xCLElBQUk7UUFFSixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxpQkFBaUIsQ0FBc0QsSUFBZ0M7UUFDMUcsSUFBSSxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDakQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxtQ0FBbUMsSUFBSSxDQUFDLEVBQUUsZUFBZSxJQUFJLENBQUMsS0FBSyxJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUM7WUFDL0YsT0FBTztTQUNWO1FBRUQsaUJBQWlCLENBQUMsc0JBQXNCLENBQUM7WUFDckMsRUFBRSxFQUFFLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixLQUFLLEVBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDO1lBQzVDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztTQUM1QyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLG1CQUFtQixDQUFDLEVBQVUsRUFBRSxLQUFLLEdBQUcsU0FBUztRQUNwRCxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5DLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsRUFBRSxFQUFFLEtBQUssQ0FBQztZQUN6QyxNQUFNLElBQUksS0FBSyxDQUFDLHVFQUF1RSxDQUFDLENBQUE7UUFFNUYsMENBQTBDO1FBQzFDLE9BQU8saUJBQWlCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFHRDs7O09BR0c7SUFDSSx3QkFBd0IsQ0FBQyxLQUFhLEVBQUUsS0FBSyxHQUFHLFNBQVM7UUFDNUQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVuQyxNQUFNLFdBQVcsR0FBRyxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUUvRCxJQUFJLEtBQUssR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLElBQUksQ0FBQyxDQUFDO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXJCLHVCQUF1QjtZQUN2QixJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU87Z0JBQ1YsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDO1lBRXpCLG1CQUFtQjtZQUNuQixJQUFJLENBQUMsQ0FBQyxPQUFPLFlBQVksTUFBTTtnQkFDM0IsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4RCw2QkFBNkI7WUFDN0IsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLElBQUksUUFBUSxFQUFFO2dCQUM5QixNQUFNLEVBQUUsR0FBRyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUN6QztZQUVELG1CQUFtQjtZQUNuQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUN4RDtZQUVELDBCQUEwQjtZQUMxQixJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVO2dCQUM5QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFMUIsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsbUdBQW1HLENBQUMsQ0FBQztTQUNsSDtRQUNELElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVyQixJQUFJLEdBQUcsQ0FBQyxPQUFPLFlBQVksTUFBTSxFQUFFO1lBQy9CLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBRWxFLE9BQU87Z0JBQ0gsS0FBSyxFQUFFLEdBQUc7Z0JBQ1YsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNO2FBQzlCLENBQUM7U0FDTDtRQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLHFCQUFxQixDQUFDLEtBQWEsRUFBRSxLQUFLLEdBQUcsU0FBUztRQUN6RCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLGdCQUFnQixDQUFDLEVBQVUsRUFBRSxLQUFhLEVBQUUsT0FBK0M7UUFFOUYsUUFBUSxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsd0JBQXdCLEVBQUU7WUFDdkQsS0FBSyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFFckMsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckI7WUFFRCw4QkFBOEI7WUFDOUIsS0FBSyx3QkFBd0IsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2dCQUM5QyxNQUFNLE9BQU8sR0FDVCxPQUFPO3FCQUNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRW5DLElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDO29CQUNuQixPQUFPLElBQUksQ0FBQztnQkFFaEIsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckI7WUFDRCw4QkFBOEI7WUFDOUIsS0FBSyx3QkFBd0IsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUM1QyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUU3QyxJQUFJLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUNqQixpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO29CQUM1RyxPQUFPLEtBQUssQ0FBQztpQkFDaEI7Z0JBRUQsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUV6RCxNQUFNLE9BQU8sR0FBRyxPQUFPO3FCQUNsQixNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ1YsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLENBQUM7b0JBRWpELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDeEIsQ0FBQyxDQUFDLENBQUM7Z0JBRVAsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDcEIsaUJBQWlCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMscURBQXFELENBQUMsQ0FBQztvQkFDM0YsT0FBTyxLQUFLLENBQUM7aUJBQ2hCO2dCQUVELElBQUksT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7b0JBQ3JCLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLCtDQUErQyxDQUFDLENBQUM7b0JBQ3JGLE9BQU8sSUFBSSxDQUFDO2lCQUNmO2dCQUVELE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JCO1lBQ0QsS0FBSyx3QkFBd0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQWMsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsT0FBTyxDQUFDLENBQUM7Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtJQUNMLENBQUM7O0FBclBELGlEQUFpRDtBQUNsQywwQkFBUSxHQUVuQixFQUFFLENBQUM7OEdBUkUsaUJBQWlCLGtCQVlOLHNCQUFzQjtrSEFaakMsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFhZ0IsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBPcHRpb25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tcGlsZWRDb21wb25lbnQsIENvbXBpbGVkTW9kdWxlLCBDb21wb25lbnRSZWdpc3RyYXRpb24sIENvbXBvbmVudFJlc29sdmVTdHJhdGVneSwgRHluYW1pY1JlZ2lzdHJhdGlvbkFyZ3MsIE5neExhenlMb2FkZXJDb25maWcgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHN0cmluZ1RvU2x1ZywgTG9nZ2VyIH0gZnJvbSAnLi4vLi4vdXRpbHMnO1xuXG4vLyBNb25rZXktcGF0Y2ggdGhlIHR5cGUgb2YgdGhlc2Ugc3ltYm9scy5cbmNvbnN0ICRpZCA9IFN5bWJvbChcImlkXCIpIGFzIGFueSBhcyBzdHJpbmc7XG5jb25zdCAkZ3JvdXAgPSBTeW1ib2woXCJncm91cFwiKSBhcyBhbnkgYXMgc3RyaW5nO1xuXG5leHBvcnQgY29uc3QgTkdYX0xBWllfTE9BREVSX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxOZ3hMYXp5TG9hZGVyQ29uZmlnPignY29uZmlnJyk7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgTGF6eUxvYWRlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgZ2V0IGVycigpIHsgcmV0dXJuIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5sb2dnZXIuZXJyOyB9XG4gICAgcHJpdmF0ZSBnZXQgbG9nKCkgeyByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5sb2c7IH1cbiAgICBwcml2YXRlIGdldCB3YXJuKCkgeyByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci53YXJuOyB9XG5cbiAgICAvLyBBIHByb3hpZWQgcmVnaXN0cnkgdGhhdCBtdXRhdGVzIHJlZmVyZW5jZSBrZXlzXG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVnaXN0cnk6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogQ29tcG9uZW50UmVnaXN0cmF0aW9uW107XG4gICAgfSA9IHt9O1xuXG4gICAgcHVibGljIHN0YXRpYyBjb25maWc6IE5neExhenlMb2FkZXJDb25maWc7XG5cbiAgICBjb25zdHJ1Y3RvcihASW5qZWN0KE5HWF9MQVpZX0xPQURFUl9DT05GSUcpIGNvbmZpZzogTmd4TGF6eUxvYWRlckNvbmZpZyA9IHt9KSB7XG4gICAgICAgIC8vIEVuc3VyZSB0aGlzIGlzIHNpbmdsZXRvbiBhbmQgd29ya3MgcmVnYXJkbGVzcyBvZiBzcGVjaWFsIGluc3RhbmNpbmcgcmVxdWlyZW1lbnRzLlxuICAgICAgICBMYXp5TG9hZGVyU2VydmljZS5jb25maWd1cmUoY29uZmlnKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyBjb25maWd1cmUoY29uZmlnOiBOZ3hMYXp5TG9hZGVyQ29uZmlnKSB7XG4gICAgICAgIGNvbnN0IHsgbG9nLCB3YXJuLCBlcnIgfSA9IExvZ2dlcihcIm5neC1sYXp5LWxvYWRlclwiLCBcIiMwMDk2ODhcIik7XG5cbiAgICAgICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAgICAgICBjb21wb25lbnRSZXNvbHZlU3RyYXRlZ3k6IENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5QaWNrRmlyc3QsXG4gICAgICAgICAgICBsb2dnZXI6IHtcbiAgICAgICAgICAgICAgICBsb2csXG4gICAgICAgICAgICAgICAgd2FybixcbiAgICAgICAgICAgICAgICBlcnJcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi5jb25maWdcbiAgICAgICAgfTtcblxuICAgICAgICBjb25maWcuZW50cmllcz8uZm9yRWFjaChlID0+IHRoaXMuYWRkQ29tcG9uZW50VG9SZWdpc3RyeShlKSlcblxuICAgICAgICAvLyBJZiBhIGN1c3RvbSByZXNvbHV0aW9uIHN0cmF0ZWd5IGlzIHByb3ZpZGVkIGJ1dCBubyByZXNvbHV0aW9uIGZ1bmN0aW9uIGlzIHBhc3NlZCxcbiAgICAgICAgLy8gd2UgdGhyb3cgYW4gZXJyb3JcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5jb25maWcuY29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5ID09IENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5DdXN0b20gJiZcbiAgICAgICAgICAgICF0aGlzLmNvbmZpZy5jdXN0b21SZXNvbHZlclxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBpbml0aWFsaXplLiBDb25maWd1cmF0aW9uIHNwZWNpZmllcyBhIGN1c3RvbSByZXNvbHZlIG1hdGNoZXIgYnV0IG5vbmUgd2FzIHByb3ZpZGVkXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmxvYWRlckRpc3RyYWN0b3JDb21wb25lbnQgJiYgdGhpcy5jb25maWcubG9hZGVyRGlzdHJhY3RvclRlbXBsYXRlKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGhhdmUgYm90aCBhIENvbXBvbmVudCBhbmQgVGVtcGxhdGUgZm9yIERpc3RyYWN0b3Igdmlldy5cIilcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmVycm9yQ29tcG9uZW50ICYmIHRoaXMuY29uZmlnLmVycm9yVGVtcGxhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaGF2ZSBib3RoIGEgQ29tcG9uZW50IGFuZCBUZW1wbGF0ZSBmb3IgRXJyb3Igdmlldy5cIilcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLm5vdEZvdW5kQ29tcG9uZW50ICYmIHRoaXMuY29uZmlnLm5vdEZvdW5kVGVtcGxhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaGF2ZSBib3RoIGEgQ29tcG9uZW50IGFuZCBUZW1wbGF0ZSBmb3IgTm90Rm91bmQgdmlldy5cIilcblxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGFkZENvbXBvbmVudFRvUmVnaXN0cnkocmVnaXN0cmF0aW9uOiBDb21wb25lbnRSZWdpc3RyYXRpb24pIHtcbiAgICAgICAgaWYgKCFyZWdpc3RyYXRpb24pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgYWRkIDx1bmRlZmluZWQ+IGNvbXBvbmVudCBpbnRvIHJlZ2lzdHJ5LlwiKTtcblxuICAgICAgICAvLyBDbG9uZSB0aGUgb2JqZWN0IGludG8gb3VyIHJlcG9zaXRvcnkgYW5kIHRyYW5zZmVyIHRoZSBpZCBpbnRvIGEgc3RhbmRhcmRpemVkIHNsdWcgZm9ybWF0XG5cbiAgICAgICAgY29uc3QgaWQgPSBzdHJpbmdUb1NsdWcocmVnaXN0cmF0aW9uLmlkID8/IERhdGUubm93KCkudG9TdHJpbmcoKSk7IC8vIHB1cmdlIG5vbi1iYXNpYyBBU0NJSSBjaGFyc1xuICAgICAgICBjb25zdCBncm91cCA9IHJlZ2lzdHJhdGlvbi5ncm91cCB8fCBcImRlZmF1bHRcIjtcblxuICAgICAgICByZWdpc3RyYXRpb25bJGlkXSA9IGlkO1xuICAgICAgICByZWdpc3RyYXRpb25bJGdyb3VwXSA9IGlkO1xuXG5cbiAgICAgICAgaWYgKCF0aGlzLnJlZ2lzdHJ5W2dyb3VwXSlcbiAgICAgICAgICAgIHRoaXMucmVnaXN0cnlbZ3JvdXBdID0gW107XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgd2UgYWxyZWFkeSBoYXZlIGEgcmVnaXN0cmF0aW9uIGZvciB0aGUgY29tcG9uZW50XG4gICAgICAgIC8vIGlmICh0aGlzLnJlZ2lzdHJ5W2dyb3VwXSAmJiB0eXBlb2YgdGhpcy5yZWdpc3RyeVtncm91cF1bJ2xvYWQnXSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgLy8gICAgIC8vIFdhcm4gdGhlIGRldmVsb3BlciB0aGF0IHRoZSBzdGF0ZSBpcyBwcm9ibGVtYXRpY1xuICAgICAgICAvLyAgICAgdGhpcy5jb25maWcubG9nZ2VyLndhcm4oXG4gICAgICAgIC8vICAgICAgICAgYEEgcHJldmlvdXMgZW50cnkgYWxyZWFkeSBleGlzdHMgZm9yICR7aWR9ISBUaGUgb2xkIHJlZ2lzdHJhdGlvbiB3aWxsIGJlIG92ZXJyaWRkZW4uYCArXG4gICAgICAgIC8vICAgICAgICAgYFBsZWFzZSBlbnN1cmUgeW91IHVzZSBncm91cHMgaWYgeW91IGludGVuZCB0byBoYXZlIGR1cGxpY2F0ZSBjb21wb25lbnQgaWRzLiBgICtcbiAgICAgICAgLy8gICAgICAgICBgSWYgdGhpcyB3YXMgaW50ZW50aW9uYWwsIGZpcnN0IHJlbW92ZSB0aGUgb2xkIGNvbXBvbmVudCBmcm9tIHRoZSByZWdpc3RyeSBiZWZvcmUgYWRkaW5nIGEgbmV3IGluc3RhbmNlYFxuICAgICAgICAvLyAgICAgKTtcblxuICAgICAgICAvLyAgICAgLy8gSWYgd2UncmUgaW4gZGV2IG1vZGUsIGJyZWFrIHRoZSBsb2FkZXIgc3VyZmFjZVxuICAgICAgICAvLyAgICAgaWYgKGlzRGV2TW9kZSgpKVxuICAgICAgICAvLyAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gfVxuXG4gICAgICAgIHRoaXMucmVnaXN0cnlbZ3JvdXBdLnB1c2gocmVnaXN0cmF0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWdpc3RlciBhbiBBbmd1bGFyIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBpZCBpZGVudGlmaWVyIHRoYXQgaXMgdXNlZCB0byByZXNvbHZlIHRoZSBjb21wb25lbnRcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKiBAcGFyYW0gY29tcG9uZW50IEFuZ3VsYXIgQ29tcG9uZW50IENsYXNzIGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyQ29tcG9uZW50PFQgZXh0ZW5kcyB7IG5ldyguLi5hcmdzOiBhbnlbXSk6IEluc3RhbmNlVHlwZTxUPjsgfT4oYXJnczogRHluYW1pY1JlZ2lzdHJhdGlvbkFyZ3M8VD4pIHtcbiAgICAgICAgaWYgKHRoaXMuaXNDb21wb25lbnRSZWdpc3RlcmVkKGFyZ3MuaWQsIGFyZ3MuZ3JvdXApKSB7XG4gICAgICAgICAgICB0aGlzLmxvZyhgV2lsbCBub3QgcmUtcmVnaXN0ZXIgY29tcG9uZW50ICcke2FyZ3MuaWR9JyBpbiBncm91cCAnJHthcmdzLmdyb3VwIHx8ICdkZWZhdWx0J30nIGApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuYWRkQ29tcG9uZW50VG9SZWdpc3RyeSh7XG4gICAgICAgICAgICBpZDogc3RyaW5nVG9TbHVnKGFyZ3MuaWQpLFxuICAgICAgICAgICAgbWF0Y2hlcjogYXJncy5tYXRjaGVyLFxuICAgICAgICAgICAgZ3JvdXA6IHN0cmluZ1RvU2x1ZyhhcmdzLmdyb3VwIHx8IFwiZGVmYXVsdFwiKSxcbiAgICAgICAgICAgIGxvYWQ6IGFyZ3MubG9hZCB8fCAoKCkgPT4gYXJncy5jb21wb25lbnQpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqXG4gICAgICogQHBhcmFtIGlkXG4gICAgICogQHBhcmFtIGdyb3VwXG4gICAgICovXG4gICAgcHVibGljIHVucmVnaXN0ZXJDb21wb25lbnQoaWQ6IHN0cmluZywgZ3JvdXAgPSBcImRlZmF1bHRcIikge1xuICAgICAgICBjb25zdCBfaWQgPSBzdHJpbmdUb1NsdWcoaWQpO1xuICAgICAgICBjb25zdCBfZ3JvdXAgPSBzdHJpbmdUb1NsdWcoZ3JvdXApO1xuXG4gICAgICAgIGlmICghdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkoaWQsIGdyb3VwKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCB1bnJlZ2lzdGVyIGNvbXBvbmVudCAke30hIENvbXBvbmVudCBpcyBub3QgcHJlc2VudCBpbiByZWdpc3RyeVwiKVxuXG4gICAgICAgIC8vIFRPRE86IGhhbmRsZSBjbGVhcmluZyBydW5uaW5nIGluc3RhbmNlc1xuICAgICAgICBkZWxldGUgTGF6eUxvYWRlclNlcnZpY2UucmVnaXN0cnlbX2dyb3VwXVtfaWRdO1xuICAgIH1cblxuXG4gICAgLyoqXG4gICAgICogR2V0IHRoZSByZWdpc3RyYXRpb24gZW50cnkgZm9yIGEgY29tcG9uZW50LlxuICAgICAqIFJldHVybnMgbnVsbCBpZiBjb21wb25lbnQgaXMgbm90IGluIHRoZSByZWdpc3RyeS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVzb2x2ZVJlZ2lzdHJhdGlvbkVudHJ5KHZhbHVlOiBzdHJpbmcsIGdyb3VwID0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgY29uc3QgX2lkID0gc3RyaW5nVG9TbHVnKHZhbHVlKTtcbiAgICAgICAgY29uc3QgX2dyb3VwID0gc3RyaW5nVG9TbHVnKGdyb3VwKTtcblxuICAgICAgICBjb25zdCB0YXJnZXRHcm91cCA9IChMYXp5TG9hZGVyU2VydmljZS5yZWdpc3RyeVtfZ3JvdXBdIHx8IFtdKTtcblxuICAgICAgICBsZXQgaXRlbXMgPSB0YXJnZXRHcm91cC5maWx0ZXIodCA9PiB7XG4gICAgICAgICAgICBpZiAoIXQpIHJldHVybiBmYWxzZTtcblxuICAgICAgICAgICAgLy8gTm8gbWF0Y2hlciwgY2hlY2sgaWRcbiAgICAgICAgICAgIGlmICghdC5tYXRjaGVyKVxuICAgICAgICAgICAgICAgIHJldHVybiB0WyRpZF0gPT0gX2lkO1xuXG4gICAgICAgICAgICAvLyBNYXRjaGVyIGlzIHJlZ2V4XG4gICAgICAgICAgICBpZiAodC5tYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKVxuICAgICAgICAgICAgICAgIHJldHVybiB0Lm1hdGNoZXIudGVzdChfaWQpIHx8IHQubWF0Y2hlci50ZXN0KHZhbHVlKTtcblxuICAgICAgICAgICAgLy8gTWF0Y2hlciBpcyBzdHJpbmcgPT4gcmVnZXhcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdC5tYXRjaGVyID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnggPSBuZXcgUmVnRXhwKHQubWF0Y2hlciwgJ3VpJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJ4LnRlc3QoX2lkKSB8fCByeC50ZXN0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gTWF0Y2hlciBpcyBhcnJheVxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodC5tYXRjaGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhIXQubWF0Y2hlci5maW5kKGUgPT4gc3RyaW5nVG9TbHVnKGUpID09IF9pZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEN1c3RvbSBtYXRjaGVyIGZ1bmN0aW9uXG4gICAgICAgICAgICBpZiAodHlwZW9mIHQubWF0Y2hlciA9PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubWF0Y2hlcihfaWQpO1xuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oXCJSZXNvbHZlZCBtdWx0aXBsZSBjb21wb25lbnRzIGZvciB0aGUgcHJvdmlkZWQgYFtjb21wb25lbnRdYCBiaW5kaW5nLiBUaGlzIG1heSBjYXVzZSBVSSBjb25mbGljdHMuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBvdXQgPSBpdGVtc1swXTtcblxuICAgICAgICBpZiAob3V0Lm1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IF9pZC5tYXRjaChvdXQubWF0Y2hlcikgfHwgdmFsdWUubWF0Y2gob3V0Lm1hdGNoZXIpO1xuXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBvdXQsXG4gICAgICAgICAgICAgICAgbWF0Y2hHcm91cHM6IHJlc3VsdD8uZ3JvdXBzXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHsgZW50cnk6IG91dCB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrIGlmIGEgY29tcG9uZW50IGlzIGN1cnJlbnRseSByZWdpc3RlcmVkXG4gICAgICogQ2FuIGJlIHVzZWQgdG8gdmFsaWRhdGUgcmVnZXggbWF0Y2hlcnMgYW5kIGFsaWFzZXMuXG4gICAgICovXG4gICAgcHVibGljIGlzQ29tcG9uZW50UmVnaXN0ZXJlZCh2YWx1ZTogc3RyaW5nLCBncm91cCA9IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMucmVzb2x2ZVJlZ2lzdHJhdGlvbkVudHJ5KHZhbHVlLCBncm91cCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnVuZGxlXG4gICAgICogQHJldHVybnMgVGhlIGNvbXBvbmVudCBgT2JqZWN0YCBpZiBhIGNvbXBvbmVudCB3YXMgcmVzb2x2ZWQsIGBudWxsYCBpZiBubyBjb21wb25lbnQgd2FzIGZvdW5kXG4gICAgICogYGZhbHNlYCBpZiB0aGUgc3BlY2lmaWVkIHN0cmF0ZWd5IHdhcyBhbiBpbnZhbGlkIHNlbGVjdGlvblxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlQ29tcG9uZW50KGlkOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcsIG1vZHVsZXM6IChDb21waWxlZENvbXBvbmVudCB8IENvbXBpbGVkTW9kdWxlKVtdKTogT2JqZWN0IHwgbnVsbCB8IGZhbHNlIHtcblxuICAgICAgICBzd2l0Y2ggKExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5jb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LlBpY2tGaXJzdDoge1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1vZHVsZXNbMF07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEV4YWN0IGlkIC0+IGNsYXNzbmFtZSBtYXRjaFxuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuTWF0Y2hJZFRvQ2xhc3NOYW1lOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9XG4gICAgICAgICAgICAgICAgICAgIG1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoayA9PiBrLm5hbWUgPT0gaWQpO1xuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09IDApXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBGdXp6eSBpZCAtPiBjbGFzc25hbWUgbWF0Y2hcbiAgICAgICAgICAgIGNhc2UgQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LkZ1enp5SWRDbGFzc05hbWU6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBfaWQgPSBpZC5yZXBsYWNlKC9bXmEtejAtOV9cXC1dL2lnLCAnJyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoX2lkLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5sb2dnZXIuZXJyKFwiRnV6enkgY2xhc3NuYW1lIG1hdGNoaW5nIHN0cmlwcGVkIGFsbCBzeW1ib2xzIGZyb20gdGhlIElEIHNwZWNpZmllZCFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCByeCA9IG5ldyBSZWdFeHAoYF4ke2lkfShjb21wb25lbnR8bW9kdWxlKT8kYCwgXCJpXCIpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IG1vZHVsZXNcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihtb2QgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtpZCA9IG1vZC5uYW1lLnJlcGxhY2UoL1teYS16MC05X1xcLV0vaWcsICcnKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ4LnRlc3Qoa2lkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5sb2dnZXIuZXJyKFwiRnV6enkgY2xhc3NuYW1lIG1hdGNoaW5nIHJlc29sdmVkIG11bHRpcGxlIHRhcmdldHMhXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoZXMubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnIoXCJGdXp6eSBjbGFzc25hbWUgbWF0Y2hpbmcgcmVzb2x2ZWQgbm8gdGFyZ2V0cyFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzWzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuQ3VzdG9tOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZy5jdXN0b21SZXNvbHZlcihtb2R1bGVzIGFzIGFueSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuIl19
|