@igo2/context 18.0.0 → 18.0.1-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/fesm2022/igo2-context.mjs +118 -118
  2. package/fesm2022/igo2-context.mjs.map +1 -1
  3. package/package.json +12 -14
  4. package/esm2022/igo2-context.mjs +0 -5
  5. package/esm2022/lib/context-import-export/context-import-export/context-import-export.component.mjs +0 -156
  6. package/esm2022/lib/context-import-export/context-import-export.module.mjs +0 -24
  7. package/esm2022/lib/context-import-export/index.mjs +0 -3
  8. package/esm2022/lib/context-import-export/shared/context-export.errors.mjs +0 -15
  9. package/esm2022/lib/context-import-export/shared/context-export.interface.mjs +0 -2
  10. package/esm2022/lib/context-import-export/shared/context-export.service.mjs +0 -38
  11. package/esm2022/lib/context-import-export/shared/context-export.utils.mjs +0 -15
  12. package/esm2022/lib/context-import-export/shared/context-import.errors.mjs +0 -33
  13. package/esm2022/lib/context-import-export/shared/context-import.service.mjs +0 -82
  14. package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +0 -148
  15. package/esm2022/lib/context-import-export/shared/index.mjs +0 -8
  16. package/esm2022/lib/context-manager/context-edit/context-edit-binding.directive.mjs +0 -56
  17. package/esm2022/lib/context-manager/context-edit/context-edit.component.mjs +0 -35
  18. package/esm2022/lib/context-manager/context-edit/index.mjs +0 -3
  19. package/esm2022/lib/context-manager/context-form/context-form.component.mjs +0 -117
  20. package/esm2022/lib/context-manager/context-form/index.mjs +0 -2
  21. package/esm2022/lib/context-manager/context-item/context-item.component.mjs +0 -96
  22. package/esm2022/lib/context-manager/context-item/index.mjs +0 -2
  23. package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +0 -259
  24. package/esm2022/lib/context-manager/context-list/context-list.component.mjs +0 -424
  25. package/esm2022/lib/context-manager/context-list/context-list.enum.mjs +0 -7
  26. package/esm2022/lib/context-manager/context-list/index.mjs +0 -3
  27. package/esm2022/lib/context-manager/context-manager.directive.mjs +0 -19
  28. package/esm2022/lib/context-manager/context-manager.module.mjs +0 -77
  29. package/esm2022/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +0 -109
  30. package/esm2022/lib/context-manager/context-permissions/context-permissions.component.mjs +0 -170
  31. package/esm2022/lib/context-manager/context-permissions/index.mjs +0 -3
  32. package/esm2022/lib/context-manager/index.mjs +0 -8
  33. package/esm2022/lib/context-manager/shared/context.enum.mjs +0 -13
  34. package/esm2022/lib/context-manager/shared/context.interface.mjs +0 -2
  35. package/esm2022/lib/context-manager/shared/context.service.mjs +0 -616
  36. package/esm2022/lib/context-manager/shared/index.mjs +0 -6
  37. package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +0 -176
  38. package/esm2022/lib/context-manager/shared/map-context.directive.mjs +0 -68
  39. package/esm2022/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +0 -69
  40. package/esm2022/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +0 -37
  41. package/esm2022/lib/context-map-button/bookmark-button/index.mjs +0 -3
  42. package/esm2022/lib/context-map-button/context-map-button.directive.mjs +0 -10
  43. package/esm2022/lib/context-map-button/context-map-button.module.mjs +0 -48
  44. package/esm2022/lib/context-map-button/index.mjs +0 -5
  45. package/esm2022/lib/context-map-button/poi-button/index.mjs +0 -4
  46. package/esm2022/lib/context-map-button/poi-button/poi-button.component.mjs +0 -160
  47. package/esm2022/lib/context-map-button/poi-button/poi-dialog.component.mjs +0 -37
  48. package/esm2022/lib/context-map-button/poi-button/shared/index.mjs +0 -3
  49. package/esm2022/lib/context-map-button/poi-button/shared/poi.interface.mjs +0 -2
  50. package/esm2022/lib/context-map-button/poi-button/shared/poi.service.mjs +0 -38
  51. package/esm2022/lib/context-map-button/user-button/index.mjs +0 -3
  52. package/esm2022/lib/context-map-button/user-button/user-button.animation.mjs +0 -17
  53. package/esm2022/lib/context-map-button/user-button/user-button.component.mjs +0 -82
  54. package/esm2022/lib/context-map-button/user-button/user-dialog.component.mjs +0 -43
  55. package/esm2022/lib/context.module.mjs +0 -42
  56. package/esm2022/lib/environment/environment.interface.mjs +0 -2
  57. package/esm2022/lib/environment/index.mjs +0 -2
  58. package/esm2022/lib/share-map/index.mjs +0 -6
  59. package/esm2022/lib/share-map/share-map/share-map-api.component.mjs +0 -111
  60. package/esm2022/lib/share-map/share-map/share-map-url.component.mjs +0 -78
  61. package/esm2022/lib/share-map/share-map/share-map.component.mjs +0 -35
  62. package/esm2022/lib/share-map/share-map.module.mjs +0 -31
  63. package/esm2022/lib/share-map/shared/index.mjs +0 -2
  64. package/esm2022/lib/share-map/shared/share-map.service.mjs +0 -223
  65. package/esm2022/lib/sidenav/index.mjs +0 -2
  66. package/esm2022/lib/sidenav/sidenav.component.mjs +0 -122
  67. package/esm2022/lib/sidenav/sidenav.module.mjs +0 -24
  68. package/esm2022/public_api.mjs +0 -16
@@ -1,424 +0,0 @@
1
- import { AsyncPipe, KeyValuePipe, NgFor, NgIf } from '@angular/common';
2
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Input, Output } from '@angular/core';
3
- import { FormsModule } from '@angular/forms';
4
- import { MatButtonModule } from '@angular/material/button';
5
- import { MatCheckboxModule } from '@angular/material/checkbox';
6
- import { MatDialog } from '@angular/material/dialog';
7
- import { MatFormFieldModule } from '@angular/material/form-field';
8
- import { MatIconModule } from '@angular/material/icon';
9
- import { MatInputModule } from '@angular/material/input';
10
- import { MatMenuModule } from '@angular/material/menu';
11
- import { MatTooltipModule } from '@angular/material/tooltip';
12
- import { AuthService } from '@igo2/auth';
13
- import { ActionStore, ActionbarComponent, ActionbarMode } from '@igo2/common/action';
14
- import { CollapsibleComponent } from '@igo2/common/collapsible';
15
- import { ListComponent, ListItemDirective } from '@igo2/common/list';
16
- import { ConfigService } from '@igo2/core/config';
17
- import { LanguageService } from '@igo2/core/language';
18
- import { IgoLanguageModule } from '@igo2/core/language';
19
- import { StorageService } from '@igo2/core/storage';
20
- import { BehaviorSubject, ReplaySubject, timer } from 'rxjs';
21
- import { take } from 'rxjs/operators';
22
- import { debounce } from 'rxjs/operators';
23
- import { BookmarkDialogComponent } from '../../context-map-button/bookmark-button/bookmark-dialog.component';
24
- import { ContextItemComponent } from '../context-item/context-item.component';
25
- import { ContextListControlsEnum } from './context-list.enum';
26
- import * as i0 from "@angular/core";
27
- import * as i1 from "@igo2/core/config";
28
- import * as i2 from "@igo2/auth";
29
- import * as i3 from "@angular/material/dialog";
30
- import * as i4 from "@igo2/core/language";
31
- import * as i5 from "@igo2/core/storage";
32
- import * as i6 from "@angular/material/form-field";
33
- import * as i7 from "@angular/material/input";
34
- import * as i8 from "@angular/forms";
35
- import * as i9 from "@angular/material/button";
36
- import * as i10 from "@angular/material/icon";
37
- import * as i11 from "@angular/material/tooltip";
38
- import * as i12 from "@angular/material/menu";
39
- import * as i13 from "@angular/material/checkbox";
40
- import * as i14 from "@ngx-translate/core";
41
- export class ContextListComponent {
42
- cdRef;
43
- configService;
44
- auth;
45
- dialog;
46
- languageService;
47
- storageService;
48
- contextConfigs;
49
- contextsInitial = { ours: [] };
50
- contexts$ = new BehaviorSubject(this.contextsInitial);
51
- change$ = new ReplaySubject(1);
52
- change$$;
53
- get contexts() {
54
- return this._contexts;
55
- }
56
- set contexts(value) {
57
- this._contexts = value;
58
- this.next();
59
- }
60
- _contexts = { ours: [] };
61
- selectedContext;
62
- map;
63
- get defaultContextId() {
64
- return this.contextConfigs
65
- ? this._defaultContextId
66
- : this.storageService.get('favorite.context.uri') ||
67
- this._defaultContextId;
68
- }
69
- set defaultContextId(value) {
70
- this._defaultContextId = value;
71
- }
72
- _defaultContextId;
73
- collapsed = [];
74
- select = new EventEmitter();
75
- unselect = new EventEmitter();
76
- edit = new EventEmitter();
77
- delete = new EventEmitter();
78
- save = new EventEmitter();
79
- clone = new EventEmitter();
80
- create = new EventEmitter();
81
- hide = new EventEmitter();
82
- show = new EventEmitter();
83
- showHiddenContexts = new EventEmitter();
84
- favorite = new EventEmitter();
85
- managePermissions = new EventEmitter();
86
- manageTools = new EventEmitter();
87
- filterPermissionsChanged = new EventEmitter();
88
- titleMapping = {
89
- ours: 'igo.context.contextManager.ourContexts',
90
- shared: 'igo.context.contextManager.sharedContexts',
91
- public: 'igo.context.contextManager.publicContexts'
92
- };
93
- users;
94
- permissions = [];
95
- actionStore = new ActionStore([]);
96
- actionbarMode = ActionbarMode.Overlay;
97
- color = 'primary';
98
- showHidden = false;
99
- /**
100
- * Context filter term
101
- */
102
- set term(value) {
103
- this._term = value;
104
- this.next();
105
- }
106
- get term() {
107
- return this._term;
108
- }
109
- _term = '';
110
- get sortedAlpha() {
111
- return this._sortedAlpha;
112
- }
113
- set sortedAlpha(value) {
114
- this._sortedAlpha = value;
115
- this.next();
116
- }
117
- _sortedAlpha = undefined;
118
- showContextFilter = ContextListControlsEnum.always;
119
- thresholdToFilter = 5;
120
- get isEmpty() {
121
- return (!this.contexts.ours.length &&
122
- !this.contexts.public?.length &&
123
- !this.contexts.shared?.length);
124
- }
125
- constructor(cdRef, configService, auth, dialog, languageService, storageService) {
126
- this.cdRef = cdRef;
127
- this.configService = configService;
128
- this.auth = auth;
129
- this.dialog = dialog;
130
- this.languageService = languageService;
131
- this.storageService = storageService;
132
- this.contextConfigs = this.configService.getConfig('context');
133
- }
134
- ngOnInit() {
135
- this.change$$ = this.change$
136
- .pipe(debounce(() => timer(50)))
137
- .subscribe(() => {
138
- this.contexts$.next(this.filterContextsList(this.contexts));
139
- });
140
- this.actionStore.load([
141
- {
142
- id: 'emptyContext',
143
- title: this.languageService.translate.instant('igo.context.contextManager.emptyContext'),
144
- icon: 'star',
145
- tooltip: this.languageService.translate.instant('igo.context.contextManager.emptyContextTooltip'),
146
- handler: () => {
147
- this.createContext(true);
148
- }
149
- },
150
- {
151
- id: 'contextFromMap',
152
- title: this.languageService.translate.instant('igo.context.contextManager.contextMap'),
153
- icon: 'map',
154
- tooltip: this.languageService.translate.instant('igo.context.contextManager.contextMapTooltip'),
155
- handler: () => {
156
- this.createContext(false);
157
- }
158
- }
159
- ]);
160
- }
161
- next() {
162
- this.change$.next();
163
- }
164
- filterContextsList(contexts) {
165
- if (this.term === '') {
166
- if (this.sortedAlpha) {
167
- contexts = this.sortContextsList(contexts);
168
- }
169
- return contexts;
170
- }
171
- else {
172
- const ours = contexts.ours.filter((context) => {
173
- const filterNormalized = this.term
174
- .toLowerCase()
175
- .normalize('NFD')
176
- .replace(/[\u0300-\u036f]/g, '');
177
- const contextTitleNormalized = context.title
178
- .toLowerCase()
179
- .normalize('NFD')
180
- .replace(/[\u0300-\u036f]/g, '');
181
- return contextTitleNormalized.includes(filterNormalized);
182
- });
183
- let updateContexts = {
184
- ours
185
- };
186
- if (this.contexts.public) {
187
- const publics = contexts.public.filter((context) => {
188
- const filterNormalized = this.term
189
- .toLowerCase()
190
- .normalize('NFD')
191
- .replace(/[\u0300-\u036f]/g, '');
192
- const contextTitleNormalized = context.title
193
- .toLowerCase()
194
- .normalize('NFD')
195
- .replace(/[\u0300-\u036f]/g, '');
196
- return contextTitleNormalized.includes(filterNormalized);
197
- });
198
- updateContexts.public = publics;
199
- }
200
- if (this.contexts.shared) {
201
- const shared = contexts.shared.filter((context) => {
202
- const filterNormalized = this.term
203
- .toLowerCase()
204
- .normalize('NFD')
205
- .replace(/[\u0300-\u036f]/g, '');
206
- const contextTitleNormalized = context.title
207
- .toLowerCase()
208
- .normalize('NFD')
209
- .replace(/[\u0300-\u036f]/g, '');
210
- return contextTitleNormalized.includes(filterNormalized);
211
- });
212
- updateContexts.shared = shared;
213
- }
214
- if (this.sortedAlpha) {
215
- updateContexts = this.sortContextsList(updateContexts);
216
- }
217
- return updateContexts;
218
- }
219
- }
220
- ngOnDestroy() {
221
- this.change$$.unsubscribe();
222
- }
223
- showFilter() {
224
- switch (this.showContextFilter) {
225
- case ContextListControlsEnum.always:
226
- return true;
227
- case ContextListControlsEnum.never:
228
- return false;
229
- default: {
230
- let totalLength = this.contexts.ours.length;
231
- this.contexts.public
232
- ? (totalLength += this.contexts.public.length)
233
- : (totalLength += 0);
234
- this.contexts.shared
235
- ? (totalLength += this.contexts.shared.length)
236
- : (totalLength += 0);
237
- if (totalLength >= this.thresholdToFilter) {
238
- return true;
239
- }
240
- return false;
241
- }
242
- }
243
- }
244
- sortContextsList(contexts) {
245
- if (contexts) {
246
- const contextsList = JSON.parse(JSON.stringify(contexts));
247
- contextsList.ours.sort((a, b) => {
248
- if (this.normalize(a.title) < this.normalize(b.title)) {
249
- return -1;
250
- }
251
- if (this.normalize(a.title) > this.normalize(b.title)) {
252
- return 1;
253
- }
254
- return 0;
255
- });
256
- if (contextsList.shared) {
257
- contextsList.shared.sort((a, b) => {
258
- if (this.normalize(a.title) < this.normalize(b.title)) {
259
- return -1;
260
- }
261
- if (this.normalize(a.title) > this.normalize(b.title)) {
262
- return 1;
263
- }
264
- return 0;
265
- });
266
- }
267
- else if (contextsList.public) {
268
- contextsList.public.sort((a, b) => {
269
- if (this.normalize(a.title) < this.normalize(b.title)) {
270
- return -1;
271
- }
272
- if (this.normalize(a.title) > this.normalize(b.title)) {
273
- return 1;
274
- }
275
- return 0;
276
- });
277
- }
278
- return contextsList;
279
- }
280
- }
281
- normalize(str) {
282
- return str
283
- .normalize('NFD')
284
- .replace(/[\u0300-\u036f]/g, '')
285
- .toLowerCase();
286
- }
287
- toggleSort() {
288
- this.sortedAlpha = !this.sortedAlpha;
289
- }
290
- clearFilter() {
291
- this.term = '';
292
- }
293
- createContext(empty) {
294
- this.dialog
295
- .open(BookmarkDialogComponent, { disableClose: false })
296
- .afterClosed()
297
- .pipe(take(1))
298
- .subscribe((title) => {
299
- if (title) {
300
- this.create.emit({ title, empty });
301
- }
302
- });
303
- }
304
- getPermission(user) {
305
- if (user) {
306
- const permission = this.permissions.find((p) => p.name === user.name);
307
- return permission;
308
- }
309
- }
310
- handleToggleCategory(user, parent) {
311
- const permission = this.getPermission(user);
312
- if (permission) {
313
- permission.checked = !permission.checked;
314
- this.storageService.set('contexts.permissions.' + permission.name, permission.checked);
315
- permission.indeterminate = false;
316
- }
317
- if (parent) {
318
- let indeterminate = false;
319
- for (const c of parent.childs) {
320
- const cPermission = this.getPermission(c);
321
- if (cPermission.checked !== permission.checked) {
322
- indeterminate = true;
323
- break;
324
- }
325
- }
326
- const parentPermission = this.getPermission(parent);
327
- if (parentPermission) {
328
- parentPermission.checked = permission.checked;
329
- this.storageService.set('contexts.permissions.' + parentPermission.name, permission.checked);
330
- parentPermission.indeterminate = indeterminate;
331
- }
332
- }
333
- if (user.childs) {
334
- for (const c of user.childs) {
335
- const childrenPermission = this.getPermission(c);
336
- if (childrenPermission &&
337
- childrenPermission.checked !== permission.checked) {
338
- childrenPermission.checked = permission.checked;
339
- this.storageService.set('contexts.permissions.' + childrenPermission.name, permission.checked);
340
- }
341
- }
342
- }
343
- this.filterPermissionsChanged.emit(this.permissions);
344
- }
345
- hideContext(context) {
346
- context.hidden = true;
347
- if (!this.showHidden) {
348
- const contexts = { ours: [], shared: [], public: [] };
349
- contexts.ours = this.contexts.ours.filter((c) => c.id !== context.id);
350
- contexts.shared = this.contexts.shared.filter((c) => c.id !== context.id);
351
- contexts.public = this.contexts.public.filter((c) => c.id !== context.id);
352
- this.contexts = contexts;
353
- }
354
- this.hide.emit(context);
355
- }
356
- showContext(context) {
357
- context.hidden = false;
358
- this.show.emit(context);
359
- }
360
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.ConfigService }, { token: i2.AuthService }, { token: i3.MatDialog }, { token: i4.LanguageService }, { token: i5.StorageService }], target: i0.ɵɵFactoryTarget.Component });
361
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <button\n mat-icon-button\n matSuffix\n class=\"clear-button\"\n *ngIf=\"term.length\"\n aria-label=\"Clear\"\n color=\"warn\"\n (click)=\"clearFilter()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n class=\"sort-alpha\"\n [class.--active]=\"sortedAlpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort()\"\n >\n <mat-icon color=\"primary\">sort_by_alpha</mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"add\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\">fitler_alt</mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\n (edit)=\"edit.emit(context)\"\n (delete)=\"delete.emit(context)\"\n (clone)=\"clone.emit(context)\"\n (save)=\"save.emit(context)\"\n (hide)=\"hideContext(context)\"\n (show)=\"showContext(context)\"\n (favorite)=\"favorite.emit(context)\"\n (manageTools)=\"manageTools.emit(context)\"\n (managePermissions)=\"managePermissions.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.sort-alpha.--active mat-icon{color:red}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i8.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i8.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i8.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i11.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "disabledInteractive", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: IgoLanguageModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
362
- }
363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContextListComponent, decorators: [{
364
- type: Component,
365
- args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
366
- ListComponent,
367
- NgIf,
368
- MatFormFieldModule,
369
- MatInputModule,
370
- FormsModule,
371
- MatButtonModule,
372
- MatIconModule,
373
- MatTooltipModule,
374
- ActionbarComponent,
375
- MatMenuModule,
376
- NgFor,
377
- MatCheckboxModule,
378
- CollapsibleComponent,
379
- ContextItemComponent,
380
- ListItemDirective,
381
- AsyncPipe,
382
- KeyValuePipe,
383
- IgoLanguageModule
384
- ], template: "<igo-list [navigation]=\"true\">\n <div class=\"context-filter-container\">\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\n <mat-label>{{\n 'igo.context.contextManager.filterPlaceHolder' | translate\n }}</mat-label>\n <input\n matInput\n type=\"text\"\n [placeholder]=\"\n 'igo.context.contextManager.filterPlaceHolder' | translate\n \"\n [(ngModel)]=\"term\"\n />\n <button\n mat-icon-button\n matSuffix\n class=\"clear-button\"\n *ngIf=\"term.length\"\n aria-label=\"Clear\"\n color=\"warn\"\n (click)=\"clearFilter()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n </mat-form-field>\n\n <div class=\"actions-container\">\n <button\n class=\"sort-alpha\"\n [class.--active]=\"sortedAlpha\"\n mat-icon-button\n [matTooltip]=\"\n 'igo.context.contextManager.sortAlphabetically' | translate\n \"\n matTooltipShowDelay=\"500\"\n (click)=\"toggleSort()\"\n >\n <mat-icon color=\"primary\">sort_by_alpha</mat-icon>\n </button>\n\n <igo-actionbar\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"add-context-button\"\n [iconColor]=\"color\"\n [store]=\"actionStore\"\n [withIcon]=\"true\"\n icon=\"add\"\n [withTitle]=\"actionbarMode === 'overlay'\"\n [horizontal]=\"false\"\n [mode]=\"actionbarMode\"\n >\n </igo-actionbar>\n\n <button\n *ngIf=\"auth.authenticated && contextConfigs\"\n class=\"users-filter\"\n mat-icon-button\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\n matTooltipShowDelay=\"500\"\n [matMenuTriggerFor]=\"accountMenu\"\n >\n <mat-icon color=\"primary\">fitler_alt</mat-icon>\n </button>\n <mat-menu #accountMenu=\"matMenu\">\n <ng-container *ngFor=\"let user of users\">\n <button\n *ngIf=\"!user.childs; else withSubMenu\"\n mat-menu-item\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n <ng-template #withSubMenu>\n <button\n mat-menu-item\n [matMenuTriggerFor]=\"subAccountMenu\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(user).checked\"\n [indeterminate]=\"getPermission(user).indeterminate\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(user)\"\n >\n </mat-checkbox>\n <span>{{ user.title }}</span>\n </button>\n\n <mat-menu #subAccountMenu=\"matMenu\">\n <button\n mat-menu-item\n *ngFor=\"let child of user.childs\"\n class=\"profil-menu\"\n >\n <mat-checkbox\n [checked]=\"getPermission(child).checked\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"handleToggleCategory(child, user)\"\n >\n {{ child.title }}\n </mat-checkbox>\n </button>\n </mat-menu>\n </ng-template>\n </ng-container>\n\n <button mat-menu-item class=\"profil-menu\">\n <mat-checkbox\n [checked]=\"showHidden\"\n (click)=\"$event.stopPropagation()\"\n (change)=\"showHiddenContexts.emit()\"\n >\n </mat-checkbox>\n <span>\n {{ 'igo.context.contextManager.showHidden' | translate }}\n </span>\n </button>\n </mat-menu>\n </div>\n </div>\n\n <ng-template\n ngFor\n let-groupContexts\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\n >\n <igo-collapsible\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\n >\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\n <igo-context-item\n igoListItem\n color=\"accent\"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n context.id &&\n this.defaultContextId &&\n this.defaultContextId === context.id\n \"\n (edit)=\"edit.emit(context)\"\n (delete)=\"delete.emit(context)\"\n (clone)=\"clone.emit(context)\"\n (save)=\"save.emit(context)\"\n (hide)=\"hideContext(context)\"\n (show)=\"showContext(context)\"\n (favorite)=\"favorite.emit(context)\"\n (manageTools)=\"manageTools.emit(context)\"\n (managePermissions)=\"managePermissions.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </igo-collapsible>\n\n <ng-template\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\n ngFor\n let-context\n [ngForOf]=\"$any(groupContexts).value\"\n >\n <igo-context-item\n igoListItem\n color=\"accent\"\n [showFavorite]=\"\n configService.getConfig('favoriteContext4NonAuthenticated')\n \"\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\n [context]=\"context\"\n [default]=\"\n contextConfigs\n ? defaultContextId === context.id\n : defaultContextId === context.uri\n \"\n (favorite)=\"favorite.emit(context)\"\n (select)=\"select.emit(context)\"\n (unselect)=\"unselect.emit(context)\"\n >\n </igo-context-item>\n </ng-template>\n </ng-template>\n\n <div *ngIf=\"isEmpty\" class=\"no-result\">\n {{ 'igo.context.contextManager.noResult' | translate }}\n </div>\n</igo-list>\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.sort-alpha.--active mat-icon{color:red}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
385
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ConfigService }, { type: i2.AuthService }, { type: i3.MatDialog }, { type: i4.LanguageService }, { type: i5.StorageService }], propDecorators: { contexts: [{
386
- type: Input
387
- }], selectedContext: [{
388
- type: Input
389
- }], map: [{
390
- type: Input
391
- }], defaultContextId: [{
392
- type: Input
393
- }], select: [{
394
- type: Output
395
- }], unselect: [{
396
- type: Output
397
- }], edit: [{
398
- type: Output
399
- }], delete: [{
400
- type: Output
401
- }], save: [{
402
- type: Output
403
- }], clone: [{
404
- type: Output
405
- }], create: [{
406
- type: Output
407
- }], hide: [{
408
- type: Output
409
- }], show: [{
410
- type: Output
411
- }], showHiddenContexts: [{
412
- type: Output
413
- }], favorite: [{
414
- type: Output
415
- }], managePermissions: [{
416
- type: Output
417
- }], manageTools: [{
418
- type: Output
419
- }], filterPermissionsChanged: [{
420
- type: Output
421
- }], term: [{
422
- type: Input
423
- }] } });
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxD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RyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLElBQUk7c0JBQWIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csd0JBQXdCO3NCQUFqQyxNQUFNO2dCQXdCSCxJQUFJO3NCQURQLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3luY1BpcGUsIEtleVZhbHVlUGlwZSwgTmdGb3IsIE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcbmltcG9ydCB7IE1hdElucHV0TW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xuaW1wb3J0IHsgTWF0TWVudU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL21lbnUnO1xuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xuXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BpZ28yL2F1dGgnO1xuaW1wb3J0IHtcbiAgQWN0aW9uU3RvcmUsXG4gIEFjdGlvbmJhckNvbXBvbmVudCxcbiAgQWN0aW9uYmFyTW9kZVxufSBmcm9tICdAaWdvMi9jb21tb24vYWN0aW9uJztcbmltcG9ydCB7IENvbGxhcHNpYmxlQ29tcG9uZW50IH0gZnJvbSAnQGlnbzIvY29tbW9uL2NvbGxhcHNpYmxlJztcbmltcG9ydCB7IExpc3RDb21wb25lbnQsIExpc3RJdGVtRGlyZWN0aXZlIH0gZnJvbSAnQGlnbzIvY29tbW9uL2xpc3QnO1xuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvbGFuZ3VhZ2UnO1xuaW1wb3J0IHsgSWdvTGFuZ3VhZ2VNb2R1bGUgfSBmcm9tICdAaWdvMi9jb3JlL2xhbmd1YWdlJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcblxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBSZXBsYXlTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZGVib3VuY2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYXAtYnV0dG9uL2Jvb2ttYXJrLWJ1dHRvbi9ib29rbWFyay1kaWFsb2cuY29tcG9uZW50JztcbmltcG9ydCB7IENvbnRleHRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGV4dC1pdGVtL2NvbnRleHQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFByb2ZpbHMsXG4gIENvbnRleHRTZXJ2aWNlT3B0aW9ucyxcbiAgQ29udGV4dFVzZXJQZXJtaXNzaW9uLFxuICBDb250ZXh0c0xpc3QsXG4gIERldGFpbGVkQ29udGV4dFxufSBmcm9tICcuLi9zaGFyZWQvY29udGV4dC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ29udGV4dExpc3RDb250cm9sc0VudW0gfSBmcm9tICcuL2NvbnRleHQtbGlzdC5lbnVtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaWdvLWNvbnRleHQtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtcbiAgICBMaXN0Q29tcG9uZW50LFxuICAgIE5nSWYsXG4gICAgTWF0Rm9ybUZpZWxkTW9kdWxlLFxuICAgIE1hdElucHV0TW9kdWxlLFxuICAgIEZvcm1zTW9kdWxlLFxuICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICBNYXRJY29uTW9kdWxlLFxuICAgIE1hdFRvb2x0aXBNb2R1bGUsXG4gICAgQWN0aW9uYmFyQ29tcG9uZW50LFxuICAgIE1hdE1lbnVNb2R1bGUsXG4gICAgTmdGb3IsXG4gICAgTWF0Q2hlY2tib3hNb2R1bGUsXG4gICAgQ29sbGFwc2libGVDb21wb25lbnQsXG4gICAgQ29udGV4dEl0ZW1Db21wb25lbnQsXG4gICAgTGlzdEl0ZW1EaXJlY3RpdmUsXG4gICAgQXN5bmNQaXBlLFxuICAgIEtleVZhbHVlUGlwZSxcbiAgICBJZ29MYW5ndWFnZU1vZHVsZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgY29udGV4dENvbmZpZ3M6IENvbnRleHRTZXJ2aWNlT3B0aW9ucztcbiAgcHJpdmF0ZSBjb250ZXh0c0luaXRpYWw6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcbiAgY29udGV4dHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb250ZXh0c0xpc3Q+KHRoaXMuY29udGV4dHNJbml0aWFsKTtcblxuICBjaGFuZ2UkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG5cbiAgcHJpdmF0ZSBjaGFuZ2UkJDogU3Vic2NyaXB0aW9uO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBjb250ZXh0cygpOiBDb250ZXh0c0xpc3Qge1xuICAgIHJldHVybiB0aGlzLl9jb250ZXh0cztcbiAgfVxuICBzZXQgY29udGV4dHModmFsdWU6IENvbnRleHRzTGlzdCkge1xuICAgIHRoaXMuX2NvbnRleHRzID0gdmFsdWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfY29udGV4dHM6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcblxuICBASW5wdXQoKSBzZWxlY3RlZENvbnRleHQ6IERldGFpbGVkQ29udGV4dDtcblxuICBASW5wdXQoKSBtYXA6IElnb01hcDtcblxuICBASW5wdXQoKVxuICBnZXQgZGVmYXVsdENvbnRleHRJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHRDb25maWdzXG4gICAgICA/IHRoaXMuX2RlZmF1bHRDb250ZXh0SWRcbiAgICAgIDogKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdmYXZvcml0ZS5jb250ZXh0LnVyaScpIGFzIHN0cmluZykgfHxcbiAgICAgICAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkO1xuICB9XG4gIHNldCBkZWZhdWx0Q29udGV4dElkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9kZWZhdWx0Q29udGV4dElkID0gdmFsdWU7XG4gIH1cbiAgcHJpdmF0ZSBfZGVmYXVsdENvbnRleHRJZDogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb2xsYXBzZWQ6IHsgY29udGV4dFNjb3BlIH1bXSA9IFtdO1xuXG4gIEBPdXRwdXQoKSBzZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIHVuc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIHNhdmUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIGNsb25lID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgdGl0bGU6IHN0cmluZzsgZW1wdHk6IGJvb2xlYW4gfT4oKTtcbiAgQE91dHB1dCgpIGhpZGUgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIHNob3dIaWRkZW5Db250ZXh0cyA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQE91dHB1dCgpIGZhdm9yaXRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XG4gIEBPdXRwdXQoKSBtYW5hZ2VQZXJtaXNzaW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xuICBAT3V0cHV0KCkgbWFuYWdlVG9vbHMgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcbiAgQE91dHB1dCgpIGZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8XG4gICAgQ29udGV4dFVzZXJQZXJtaXNzaW9uW11cbiAgPigpO1xuXG4gIHB1YmxpYyB0aXRsZU1hcHBpbmcgPSB7XG4gICAgb3VyczogJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLm91ckNvbnRleHRzJyxcbiAgICBzaGFyZWQ6ICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5zaGFyZWRDb250ZXh0cycsXG4gICAgcHVibGljOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIucHVibGljQ29udGV4dHMnXG4gIH07XG5cbiAgcHVibGljIHVzZXJzOiBDb250ZXh0UHJvZmlsc1tdO1xuICBwdWJsaWMgcGVybWlzc2lvbnM6IENvbnRleHRVc2VyUGVybWlzc2lvbltdID0gW107XG5cbiAgcHVibGljIGFjdGlvblN0b3JlID0gbmV3IEFjdGlvblN0b3JlKFtdKTtcbiAgcHVibGljIGFjdGlvbmJhck1vZGUgPSBBY3Rpb25iYXJNb2RlLk92ZXJsYXk7XG5cbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xuXG4gIHB1YmxpYyBzaG93SGlkZGVuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIENvbnRleHQgZmlsdGVyIHRlcm1cbiAgICovXG4gIEBJbnB1dCgpXG4gIHNldCB0ZXJtKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZXJtID0gdmFsdWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cbiAgZ2V0IHRlcm0oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVybTtcbiAgfVxuICBwdWJsaWMgX3Rlcm0gPSAnJztcblxuICBnZXQgc29ydGVkQWxwaGEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NvcnRlZEFscGhhO1xuICB9XG4gIHNldCBzb3J0ZWRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX3NvcnRlZEFscGhhID0gdmFsdWU7XG4gICAgdGhpcy5uZXh0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfc29ydGVkQWxwaGE6IGJvb2xlYW4gPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIHNob3dDb250ZXh0RmlsdGVyID0gQ29udGV4dExpc3RDb250cm9sc0VudW0uYWx3YXlzO1xuXG4gIHB1YmxpYyB0aHJlc2hvbGRUb0ZpbHRlciA9IDU7XG5cbiAgZ2V0IGlzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgICF0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoICYmXG4gICAgICAhdGhpcy5jb250ZXh0cy5wdWJsaWM/Lmxlbmd0aCAmJlxuICAgICAgIXRoaXMuY29udGV4dHMuc2hhcmVkPy5sZW5ndGhcbiAgICApO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHVibGljIGNvbmZpZ1NlcnZpY2U6IENvbmZpZ1NlcnZpY2UsXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nOiBNYXREaWFsb2csXG4gICAgcHJpdmF0ZSBsYW5ndWFnZVNlcnZpY2U6IExhbmd1YWdlU2VydmljZSxcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxuICApIHtcbiAgICB0aGlzLmNvbnRleHRDb25maWdzID0gdGhpcy5jb25maWdTZXJ2aWNlLmdldENvbmZpZygnY29udGV4dCcpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5jaGFuZ2UkJCA9IHRoaXMuY2hhbmdlJFxuICAgICAgLnBpcGUoZGVib3VuY2UoKCkgPT4gdGltZXIoNTApKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmNvbnRleHRzJC5uZXh0KHRoaXMuZmlsdGVyQ29udGV4dHNMaXN0KHRoaXMuY29udGV4dHMpKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5hY3Rpb25TdG9yZS5sb2FkKFtcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdlbXB0eUNvbnRleHQnLFxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmVtcHR5Q29udGV4dCdcbiAgICAgICAgKSxcbiAgICAgICAgaWNvbjogJ3N0YXInLFxuICAgICAgICB0b29sdGlwOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0VG9vbHRpcCdcbiAgICAgICAgKSxcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlQ29udGV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaWQ6ICdjb250ZXh0RnJvbU1hcCcsXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcCdcbiAgICAgICAgKSxcbiAgICAgICAgaWNvbjogJ21hcCcsXG4gICAgICAgIHRvb2x0aXA6IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZS5pbnN0YW50KFxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5jb250ZXh0TWFwVG9vbHRpcCdcbiAgICAgICAgKSxcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuY3JlYXRlQ29udGV4dChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgbmV4dCgpIHtcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBmaWx0ZXJDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCk6IENvbnRleHRzTGlzdCB7XG4gICAgaWYgKHRoaXMudGVybSA9PT0gJycpIHtcbiAgICAgIGlmICh0aGlzLnNvcnRlZEFscGhhKSB7XG4gICAgICAgIGNvbnRleHRzID0gdGhpcy5zb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZXh0cztcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3VycyA9IGNvbnRleHRzLm91cnMuZmlsdGVyKChjb250ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgcmV0dXJuIGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQuaW5jbHVkZXMoZmlsdGVyTm9ybWFsaXplZCk7XG4gICAgICB9KTtcblxuICAgICAgbGV0IHVwZGF0ZUNvbnRleHRzOiBDb250ZXh0c0xpc3QgPSB7XG4gICAgICAgIG91cnNcbiAgICAgIH07XG5cbiAgICAgIGlmICh0aGlzLmNvbnRleHRzLnB1YmxpYykge1xuICAgICAgICBjb25zdCBwdWJsaWNzID0gY29udGV4dHMucHVibGljLmZpbHRlcigoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgICBjb25zdCBjb250ZXh0VGl0bGVOb3JtYWxpemVkID0gY29udGV4dC50aXRsZVxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xuICAgICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlQ29udGV4dHMucHVibGljID0gcHVibGljcztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29udGV4dHMuc2hhcmVkKSB7XG4gICAgICAgIGNvbnN0IHNoYXJlZCA9IGNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGNvbnRleHQpID0+IHtcbiAgICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XG4gICAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcbiAgICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZUNvbnRleHRzLnNoYXJlZCA9IHNoYXJlZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc29ydGVkQWxwaGEpIHtcbiAgICAgICAgdXBkYXRlQ29udGV4dHMgPSB0aGlzLnNvcnRDb250ZXh0c0xpc3QodXBkYXRlQ29udGV4dHMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVwZGF0ZUNvbnRleHRzO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuY2hhbmdlJCQudW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzaG93RmlsdGVyKCkge1xuICAgIHN3aXRjaCAodGhpcy5zaG93Q29udGV4dEZpbHRlcikge1xuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5hbHdheXM6XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5uZXZlcjpcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBsZXQgdG90YWxMZW5ndGggPSB0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoO1xuXG4gICAgICAgIHRoaXMuY29udGV4dHMucHVibGljXG4gICAgICAgICAgPyAodG90YWxMZW5ndGggKz0gdGhpcy5jb250ZXh0cy5wdWJsaWMubGVuZ3RoKVxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xuXG4gICAgICAgIHRoaXMuY29udGV4dHMuc2hhcmVkXG4gICAgICAgICAgPyAodG90YWxMZW5ndGggKz0gdGhpcy5jb250ZXh0cy5zaGFyZWQubGVuZ3RoKVxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xuICAgICAgICBpZiAodG90YWxMZW5ndGggPj0gdGhpcy50aHJlc2hvbGRUb0ZpbHRlcikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzOiBDb250ZXh0c0xpc3QpIHtcbiAgICBpZiAoY29udGV4dHMpIHtcbiAgICAgIGNvbnN0IGNvbnRleHRzTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udGV4dHMpKTtcbiAgICAgIGNvbnRleHRzTGlzdC5vdXJzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcbiAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcbiAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoY29udGV4dHNMaXN0LnNoYXJlZCkge1xuICAgICAgICBjb250ZXh0c0xpc3Quc2hhcmVkLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dHNMaXN0LnB1YmxpYykge1xuICAgICAgICBjb250ZXh0c0xpc3QucHVibGljLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPCB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5ub3JtYWxpemUoYS50aXRsZSkgPiB0aGlzLm5vcm1hbGl6ZShiLnRpdGxlKSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250ZXh0c0xpc3Q7XG4gICAgfVxuICB9XG5cbiAgbm9ybWFsaXplKHN0cjogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcbiAgICAgIC50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgdG9nZ2xlU29ydCgpIHtcbiAgICB0aGlzLnNvcnRlZEFscGhhID0gIXRoaXMuc29ydGVkQWxwaGE7XG4gIH1cblxuICBjbGVhckZpbHRlcigpIHtcbiAgICB0aGlzLnRlcm0gPSAnJztcbiAgfVxuXG4gIGNyZWF0ZUNvbnRleHQoZW1wdHk/OiBib29sZWFuKSB7XG4gICAgdGhpcy5kaWFsb2dcbiAgICAgIC5vcGVuKEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50LCB7IGRpc2FibGVDbG9zZTogZmFsc2UgfSlcbiAgICAgIC5hZnRlckNsb3NlZCgpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgodGl0bGU6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KHsgdGl0bGUsIGVtcHR5IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIGdldFBlcm1pc3Npb24odXNlcj8pOiBDb250ZXh0VXNlclBlcm1pc3Npb24ge1xuICAgIGlmICh1c2VyKSB7XG4gICAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5wZXJtaXNzaW9ucy5maW5kKChwKSA9PiBwLm5hbWUgPT09IHVzZXIubmFtZSk7XG4gICAgICByZXR1cm4gcGVybWlzc2lvbjtcbiAgICB9XG4gIH1cblxuICBoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyLCBwYXJlbnQ/KSB7XG4gICAgY29uc3QgcGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbih1c2VyKTtcbiAgICBpZiAocGVybWlzc2lvbikge1xuICAgICAgcGVybWlzc2lvbi5jaGVja2VkID0gIXBlcm1pc3Npb24uY2hlY2tlZDtcbiAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIHBlcm1pc3Npb24ubmFtZSxcbiAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXG4gICAgICApO1xuICAgICAgcGVybWlzc2lvbi5pbmRldGVybWluYXRlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCkge1xuICAgICAgbGV0IGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgICAgZm9yIChjb25zdCBjIG9mIHBhcmVudC5jaGlsZHMpIHtcbiAgICAgICAgY29uc3QgY1Blcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XG4gICAgICAgIGlmIChjUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWQpIHtcbiAgICAgICAgICBpbmRldGVybWluYXRlID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihwYXJlbnQpO1xuICAgICAgaWYgKHBhcmVudFBlcm1pc3Npb24pIHtcbiAgICAgICAgcGFyZW50UGVybWlzc2lvbi5jaGVja2VkID0gcGVybWlzc2lvbi5jaGVja2VkO1xuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcbiAgICAgICAgICAnY29udGV4dHMucGVybWlzc2lvbnMuJyArIHBhcmVudFBlcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICBwZXJtaXNzaW9uLmNoZWNrZWRcbiAgICAgICAgKTtcbiAgICAgICAgcGFyZW50UGVybWlzc2lvbi5pbmRldGVybWluYXRlID0gaW5kZXRlcm1pbmF0ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXNlci5jaGlsZHMpIHtcbiAgICAgIGZvciAoY29uc3QgYyBvZiB1c2VyLmNoaWxkcykge1xuICAgICAgICBjb25zdCBjaGlsZHJlblBlcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24gJiZcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24uY2hlY2tlZCAhPT0gcGVybWlzc2lvbi5jaGVja2VkXG4gICAgICAgICkge1xuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkID0gcGVybWlzc2lvbi5jaGVja2VkO1xuICAgICAgICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KFxuICAgICAgICAgICAgJ2NvbnRleHRzLnBlcm1pc3Npb25zLicgKyBjaGlsZHJlblBlcm1pc3Npb24ubmFtZSxcbiAgICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZC5lbWl0KHRoaXMucGVybWlzc2lvbnMpO1xuICB9XG5cbiAgaGlkZUNvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XG4gICAgY29udGV4dC5oaWRkZW4gPSB0cnVlO1xuICAgIGlmICghdGhpcy5zaG93SGlkZGVuKSB7XG4gICAgICBjb25zdCBjb250ZXh0czogQ29udGV4dHNMaXN0ID0geyBvdXJzOiBbXSwgc2hhcmVkOiBbXSwgcHVibGljOiBbXSB9O1xuICAgICAgY29udGV4dHMub3VycyA9IHRoaXMuY29udGV4dHMub3Vycy5maWx0ZXIoKGMpID0+IGMuaWQgIT09IGNvbnRleHQuaWQpO1xuICAgICAgY29udGV4dHMuc2hhcmVkID0gdGhpcy5jb250ZXh0cy5zaGFyZWQuZmlsdGVyKChjKSA9PiBjLmlkICE9PSBjb250ZXh0LmlkKTtcbiAgICAgIGNvbnRleHRzLnB1YmxpYyA9IHRoaXMuY29udGV4dHMucHVibGljLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XG4gICAgICB0aGlzLmNvbnRleHRzID0gY29udGV4dHM7XG4gICAgfVxuICAgIHRoaXMuaGlkZS5lbWl0KGNvbnRleHQpO1xuICB9XG5cbiAgc2hvd0NvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XG4gICAgY29udGV4dC5oaWRkZW4gPSBmYWxzZTtcbiAgICB0aGlzLnNob3cuZW1pdChjb250ZXh0KTtcbiAgfVxufVxuIiwiPGlnby1saXN0IFtuYXZpZ2F0aW9uXT1cInRydWVcIj5cbiAgPGRpdiBjbGFzcz1cImNvbnRleHQtZmlsdGVyLWNvbnRhaW5lclwiPlxuICAgIDxtYXQtZm9ybS1maWVsZCAqbmdJZj1cInNob3dGaWx0ZXIoKVwiIGZsb2F0TGFiZWw9XCJhbHdheXNcIj5cbiAgICAgIDxtYXQtbGFiZWw+e3tcbiAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZVxuICAgICAgfX08L21hdC1sYWJlbD5cbiAgICAgIDxpbnB1dFxuICAgICAgICBtYXRJbnB1dFxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtwbGFjZWhvbGRlcl09XCJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgIFsobmdNb2RlbCldPVwidGVybVwiXG4gICAgICAvPlxuICAgICAgPGJ1dHRvblxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgbWF0U3VmZml4XG4gICAgICAgIGNsYXNzPVwiY2xlYXItYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJ0ZXJtLmxlbmd0aFwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXG4gICAgICAgIGNvbG9yPVwid2FyblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhckZpbHRlcigpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uPmNsb3NlPC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG5cbiAgICA8ZGl2IGNsYXNzPVwiYWN0aW9ucy1jb250YWluZXJcIj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgY2xhc3M9XCJzb3J0LWFscGhhXCJcbiAgICAgICAgW2NsYXNzLi0tYWN0aXZlXT1cInNvcnRlZEFscGhhXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIFttYXRUb29sdGlwXT1cIlxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5zb3J0QWxwaGFiZXRpY2FsbHknIHwgdHJhbnNsYXRlXG4gICAgICAgIFwiXG4gICAgICAgIG1hdFRvb2x0aXBTaG93RGVsYXk9XCI1MDBcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydCgpXCJcbiAgICAgID5cbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiPnNvcnRfYnlfYWxwaGE8L21hdC1pY29uPlxuICAgICAgPC9idXR0b24+XG5cbiAgICAgIDxpZ28tYWN0aW9uYmFyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcbiAgICAgICAgY2xhc3M9XCJhZGQtY29udGV4dC1idXR0b25cIlxuICAgICAgICBbaWNvbkNvbG9yXT1cImNvbG9yXCJcbiAgICAgICAgW3N0b3JlXT1cImFjdGlvblN0b3JlXCJcbiAgICAgICAgW3dpdGhJY29uXT1cInRydWVcIlxuICAgICAgICBpY29uPVwiYWRkXCJcbiAgICAgICAgW3dpdGhUaXRsZV09XCJhY3Rpb25iYXJNb2RlID09PSAnb3ZlcmxheSdcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXG4gICAgICAgIFttb2RlXT1cImFjdGlvbmJhck1vZGVcIlxuICAgICAgPlxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxuXG4gICAgICA8YnV0dG9uXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcbiAgICAgICAgY2xhc3M9XCJ1c2Vycy1maWx0ZXJcIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclVzZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXG4gICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJhY2NvdW50TWVudVwiXG4gICAgICA+XG4gICAgICAgIDxtYXQtaWNvbiBjb2xvcj1cInByaW1hcnlcIj5maXRsZXJfYWx0PC9tYXQtaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPG1hdC1tZW51ICNhY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgdXNlciBvZiB1c2Vyc1wiPlxuICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwiIXVzZXIuY2hpbGRzOyBlbHNlIHdpdGhTdWJNZW51XCJcbiAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsLW1lbnVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5jaGVja2VkXCJcbiAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5pbmRldGVybWluYXRlXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkodXNlcilcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnRpdGxlIH19PC9zcGFuPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjd2l0aFN1Yk1lbnU+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgW21hdE1lbnVUcmlnZ2VyRm9yXT1cInN1YkFjY291bnRNZW51XCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxtYXQtY2hlY2tib3hcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmNoZWNrZWRcIlxuICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImdldFBlcm1pc3Npb24odXNlcikuaW5kZXRlcm1pbmF0ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyKVwiXG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudGl0bGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICAgICAgPG1hdC1tZW51ICNzdWJBY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIG1hdC1tZW51LWl0ZW1cbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgdXNlci5jaGlsZHNcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsLW1lbnVcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxuICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbihjaGlsZCkuY2hlY2tlZFwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkoY2hpbGQsIHVzZXIpXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICB7eyBjaGlsZC50aXRsZSB9fVxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvbWF0LW1lbnU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicHJvZmlsLW1lbnVcIj5cbiAgICAgICAgICA8bWF0LWNoZWNrYm94XG4gICAgICAgICAgICBbY2hlY2tlZF09XCJzaG93SGlkZGVuXCJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJzaG93SGlkZGVuQ29udGV4dHMuZW1pdCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XG4gICAgICAgICAgPHNwYW4+XG4gICAgICAgICAgICB7eyAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc2hvd0hpZGRlbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9tYXQtbWVudT5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLXRlbXBsYXRlXG4gICAgbmdGb3JcbiAgICBsZXQtZ3JvdXBDb250ZXh0c1xuICAgIFtuZ0Zvck9mXT1cIiRhbnkoY29udGV4dHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIlxuICA+XG4gICAgPGlnby1jb2xsYXBzaWJsZVxuICAgICAgKm5nSWY9XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlLmxlbmd0aCAmJiBhdXRoLmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgW3RpdGxlXT1cInRpdGxlTWFwcGluZ1skYW55KGdyb3VwQ29udGV4dHMpLmtleV0gfCB0cmFuc2xhdGVcIlxuICAgICAgW2NvbGxhcHNlZF09XCIkYW55KGNvbGxhcHNlZFt0aXRsZU1hcHBpbmdbJGFueShncm91cENvbnRleHRzKS5rZXldXSlcIlxuICAgICAgKHRvZ2dsZSk9XCJjb2xsYXBzZWRbdGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XV0gPSAkYW55KCRldmVudClcIlxuICAgID5cbiAgICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29udGV4dCBbbmdGb3JPZl09XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlXCI+XG4gICAgICAgIDxpZ28tY29udGV4dC1pdGVtXG4gICAgICAgICAgaWdvTGlzdEl0ZW1cbiAgICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXG4gICAgICAgICAgW2NvbnRleHRdPVwiY29udGV4dFwiXG4gICAgICAgICAgW2RlZmF1bHRdPVwiXG4gICAgICAgICAgICBjb250ZXh0LmlkICYmXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQgJiZcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCA9PT0gY29udGV4dC5pZFxuICAgICAgICAgIFwiXG4gICAgICAgICAgKGVkaXQpPVwiZWRpdC5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAoZGVsZXRlKT1cImRlbGV0ZS5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAoY2xvbmUpPVwiY2xvbmUuZW1pdChjb250ZXh0KVwiXG4gICAgICAgICAgKHNhdmUpPVwic2F2ZS5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAoaGlkZSk9XCJoaWRlQ29udGV4dChjb250ZXh0KVwiXG4gICAgICAgICAgKHNob3cpPVwic2hvd0NvbnRleHQoY29udGV4dClcIlxuICAgICAgICAgIChmYXZvcml0ZSk9XCJmYXZvcml0ZS5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgICAobWFuYWdlVG9vbHMpPVwibWFuYWdlVG9vbHMuZW1pdChjb250ZXh0KVwiXG4gICAgICAgICAgKG1hbmFnZVBlcm1pc3Npb25zKT1cIm1hbmFnZVBlcm1pc3Npb25zLmVtaXQoY29udGV4dClcIlxuICAgICAgICAgIChzZWxlY3QpPVwic2VsZWN0LmVtaXQoY29udGV4dClcIlxuICAgICAgICAgICh1bnNlbGVjdCk9XCJ1bnNlbGVjdC5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgPlxuICAgICAgICA8L2lnby1jb250ZXh0LWl0ZW0+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvaWdvLWNvbGxhcHNpYmxlPlxuXG4gICAgPG5nLXRlbXBsYXRlXG4gICAgICAqbmdJZj1cIiRhbnkoZ3JvdXBDb250ZXh0cykudmFsdWUubGVuZ3RoICYmICFhdXRoLmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgbmdGb3JcbiAgICAgIGxldC1jb250ZXh0XG4gICAgICBbbmdGb3JPZl09XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlXCJcbiAgICA+XG4gICAgICA8aWdvLWNvbnRleHQtaXRlbVxuICAgICAgICBpZ29MaXN0SXRlbVxuICAgICAgICBjb2xvcj1cImFjY2VudFwiXG4gICAgICAgIFtzaG93RmF2b3JpdGVdPVwiXG4gICAgICAgICAgY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2Zhdm9yaXRlQ29udGV4dDROb25BdXRoZW50aWNhdGVkJylcbiAgICAgICAgXCJcbiAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxuICAgICAgICBbZGVmYXVsdF09XCJcbiAgICAgICAgICBjb250ZXh0Q29uZmlnc1xuICAgICAgICAgICAgPyBkZWZhdWx0Q29udGV4dElkID09PSBjb250ZXh0LmlkXG4gICAgICAgICAgICA6IGRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQudXJpXG4gICAgICAgIFwiXG4gICAgICAgIChmYXZvcml0ZSk9XCJmYXZvcml0ZS5lbWl0KGNvbnRleHQpXCJcbiAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXG4gICAgICAgICh1bnNlbGVjdCk9XCJ1bnNlbGVjdC5lbWl0KGNvbnRleHQpXCJcbiAgICAgID5cbiAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxkaXYgKm5nSWY9XCJpc0VtcHR5XCIgY2xhc3M9XCJuby1yZXN1bHRcIj5cbiAgICB7eyAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIubm9SZXN1bHQnIHwgdHJhbnNsYXRlIH19XG4gIDwvZGl2PlxuPC9pZ28tbGlzdD5cbiJdfQ==
@@ -1,7 +0,0 @@
1
- export var ContextListControlsEnum;
2
- (function (ContextListControlsEnum) {
3
- ContextListControlsEnum["always"] = "always";
4
- ContextListControlsEnum["never"] = "never";
5
- ContextListControlsEnum["default"] = "default";
6
- })(ContextListControlsEnum || (ContextListControlsEnum = {}));
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmVudW0uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuZW51bS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSx1QkFJWDtBQUpELFdBQVksdUJBQXVCO0lBQ2pDLDRDQUFpQixDQUFBO0lBQ2pCLDBDQUFlLENBQUE7SUFDZiw4Q0FBbUIsQ0FBQTtBQUNyQixDQUFDLEVBSlcsdUJBQXVCLEtBQXZCLHVCQUF1QixRQUlsQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIENvbnRleHRMaXN0Q29udHJvbHNFbnVtIHtcbiAgYWx3YXlzID0gJ2Fsd2F5cycsXG4gIG5ldmVyID0gJ25ldmVyJyxcbiAgZGVmYXVsdCA9ICdkZWZhdWx0J1xufVxuIl19
@@ -1,3 +0,0 @@
1
- export * from './context-list.component';
2
- export * from './context-list-binding.directive';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbnRleHQtbGlzdC5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250ZXh0LWxpc3QtYmluZGluZy5kaXJlY3RpdmUnO1xuIl19
@@ -1,19 +0,0 @@
1
- import { ContextEditBindingDirective, ContextEditComponent } from './context-edit';
2
- import { ContextFormComponent } from './context-form';
3
- import { ContextItemComponent } from './context-item';
4
- import { ContextListBindingDirective, ContextListComponent } from './context-list';
5
- import { ContextPermissionsBindingDirective, ContextPermissionsComponent } from './context-permissions';
6
- import { LayerContextDirective, MapContextDirective } from './shared';
7
- export const CONTEXT_MANAGER_DIRECTIVES = [
8
- ContextListComponent,
9
- ContextListBindingDirective,
10
- ContextItemComponent,
11
- ContextFormComponent,
12
- ContextEditComponent,
13
- ContextEditBindingDirective,
14
- ContextPermissionsComponent,
15
- ContextPermissionsBindingDirective,
16
- MapContextDirective,
17
- LayerContextDirective
18
- ];
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tYW5hZ2VyLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1tYW5hZ2VyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLG9CQUFvQixFQUNyQixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RELE9BQU8sRUFDTCwyQkFBMkIsRUFDM0Isb0JBQW9CLEVBQ3JCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUNMLGtDQUFrQyxFQUNsQywyQkFBMkIsRUFDNUIsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFdEUsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUc7SUFDeEMsb0JBQW9CO0lBQ3BCLDJCQUEyQjtJQUMzQixvQkFBb0I7SUFDcEIsb0JBQW9CO0lBQ3BCLG9CQUFvQjtJQUNwQiwyQkFBMkI7SUFDM0IsMkJBQTJCO0lBQzNCLGtDQUFrQztJQUNsQyxtQkFBbUI7SUFDbkIscUJBQXFCO0NBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbnRleHRFZGl0QmluZGluZ0RpcmVjdGl2ZSxcbiAgQ29udGV4dEVkaXRDb21wb25lbnRcbn0gZnJvbSAnLi9jb250ZXh0LWVkaXQnO1xuaW1wb3J0IHsgQ29udGV4dEZvcm1Db21wb25lbnQgfSBmcm9tICcuL2NvbnRleHQtZm9ybSc7XG5pbXBvcnQgeyBDb250ZXh0SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1pdGVtJztcbmltcG9ydCB7XG4gIENvbnRleHRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgQ29udGV4dExpc3RDb21wb25lbnRcbn0gZnJvbSAnLi9jb250ZXh0LWxpc3QnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFBlcm1pc3Npb25zQmluZGluZ0RpcmVjdGl2ZSxcbiAgQ29udGV4dFBlcm1pc3Npb25zQ29tcG9uZW50XG59IGZyb20gJy4vY29udGV4dC1wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBMYXllckNvbnRleHREaXJlY3RpdmUsIE1hcENvbnRleHREaXJlY3RpdmUgfSBmcm9tICcuL3NoYXJlZCc7XG5cbmV4cG9ydCBjb25zdCBDT05URVhUX01BTkFHRVJfRElSRUNUSVZFUyA9IFtcbiAgQ29udGV4dExpc3RDb21wb25lbnQsXG4gIENvbnRleHRMaXN0QmluZGluZ0RpcmVjdGl2ZSxcbiAgQ29udGV4dEl0ZW1Db21wb25lbnQsXG4gIENvbnRleHRGb3JtQ29tcG9uZW50LFxuICBDb250ZXh0RWRpdENvbXBvbmVudCxcbiAgQ29udGV4dEVkaXRCaW5kaW5nRGlyZWN0aXZlLFxuICBDb250ZXh0UGVybWlzc2lvbnNDb21wb25lbnQsXG4gIENvbnRleHRQZXJtaXNzaW9uc0JpbmRpbmdEaXJlY3RpdmUsXG4gIE1hcENvbnRleHREaXJlY3RpdmUsXG4gIExheWVyQ29udGV4dERpcmVjdGl2ZVxuXSBhcyBjb25zdDtcbiJdfQ==