@igo2/context 16.3.0 → 17.0.0-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.
- package/esm2022/lib/context-import-export/context-import-export/context-import-export.component.mjs +43 -18
- package/esm2022/lib/context-import-export/context-import-export.module.mjs +10 -66
- package/esm2022/lib/context-import-export/shared/context-export.service.mjs +4 -4
- package/esm2022/lib/context-import-export/shared/context-export.utils.mjs +1 -1
- package/esm2022/lib/context-import-export/shared/context-import.errors.mjs +1 -1
- package/esm2022/lib/context-import-export/shared/context-import.service.mjs +7 -7
- package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +1 -1
- package/esm2022/lib/context-manager/context-edit/context-edit-binding.directive.mjs +10 -9
- package/esm2022/lib/context-manager/context-edit/context-edit.component.mjs +10 -9
- package/esm2022/lib/context-manager/context-form/context-form.component.mjs +32 -16
- package/esm2022/lib/context-manager/context-item/context-item.component.mjs +30 -15
- package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +16 -10
- package/esm2022/lib/context-manager/context-list/context-list.component.mjs +48 -17
- package/esm2022/lib/context-manager/context-manager.module.mjs +23 -102
- package/esm2022/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +12 -9
- package/esm2022/lib/context-manager/context-permissions/context-permissions.component.mjs +47 -18
- package/esm2022/lib/context-manager/index.mjs +19 -1
- package/esm2022/lib/context-manager/shared/context.interface.mjs +1 -1
- package/esm2022/lib/context-manager/shared/context.service.mjs +17 -9
- package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +14 -9
- package/esm2022/lib/context-manager/shared/map-context.directive.mjs +9 -8
- package/esm2022/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +14 -10
- package/esm2022/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +25 -11
- package/esm2022/lib/context-map-button/context-map-button.module.mjs +16 -75
- package/esm2022/lib/context-map-button/index.mjs +10 -1
- package/esm2022/lib/context-map-button/poi-button/poi-button.component.mjs +33 -16
- package/esm2022/lib/context-map-button/poi-button/poi-dialog.component.mjs +25 -11
- package/esm2022/lib/context-map-button/poi-button/shared/poi.service.mjs +7 -7
- package/esm2022/lib/context-map-button/user-button/user-button.animation.mjs +1 -1
- package/esm2022/lib/context-map-button/user-button/user-button.component.mjs +24 -13
- package/esm2022/lib/context-map-button/user-button/user-dialog.component.mjs +17 -9
- package/esm2022/lib/context.module.mjs +9 -11
- package/esm2022/lib/environment/environment.interface.mjs +1 -1
- package/esm2022/lib/environment/index.mjs +1 -1
- package/esm2022/lib/share-map/index.mjs +9 -1
- package/esm2022/lib/share-map/share-map/share-map-api.component.mjs +36 -18
- package/esm2022/lib/share-map/share-map/share-map-url.component.mjs +28 -15
- package/esm2022/lib/share-map/share-map/share-map.component.mjs +21 -13
- package/esm2022/lib/share-map/share-map.module.mjs +10 -50
- package/esm2022/lib/share-map/shared/share-map.service.mjs +8 -8
- package/esm2022/lib/sidenav/sidenav.component.mjs +29 -16
- package/esm2022/lib/sidenav/sidenav.module.mjs +10 -46
- package/esm2022/public_api.mjs +1 -1
- package/fesm2022/igo2-context.mjs +1363 -1380
- package/fesm2022/igo2-context.mjs.map +1 -1
- package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +3 -2
- package/lib/context-import-export/context-import-export.module.d.ts +4 -15
- package/lib/context-import-export/shared/context-export.utils.d.ts +1 -1
- package/lib/context-import-export/shared/context-import.service.d.ts +1 -1
- package/lib/context-import-export/shared/context-import.utils.d.ts +1 -1
- package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +2 -2
- package/lib/context-manager/context-edit/context-edit.component.d.ts +1 -1
- package/lib/context-manager/context-form/context-form.component.d.ts +2 -2
- package/lib/context-manager/context-item/context-item.component.d.ts +2 -2
- package/lib/context-manager/context-list/context-list-binding.directive.d.ts +4 -2
- package/lib/context-manager/context-list/context-list.component.d.ts +4 -2
- package/lib/context-manager/context-manager.module.d.ts +6 -22
- package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +3 -2
- package/lib/context-manager/context-permissions/context-permissions.component.d.ts +2 -2
- package/lib/context-manager/index.d.ts +7 -0
- package/lib/context-manager/shared/context.interface.d.ts +1 -1
- package/lib/context-manager/shared/context.service.d.ts +5 -1
- package/lib/context-manager/shared/layer-context.directive.d.ts +3 -2
- package/lib/context-manager/shared/map-context.directive.d.ts +2 -2
- package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +2 -2
- package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +1 -1
- package/lib/context-map-button/context-map-button.module.d.ts +5 -18
- package/lib/context-map-button/index.d.ts +4 -0
- package/lib/context-map-button/poi-button/poi-button.component.d.ts +3 -2
- package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +1 -1
- package/lib/context-map-button/poi-button/shared/poi.service.d.ts +1 -1
- package/lib/context-map-button/user-button/user-button.component.d.ts +2 -2
- package/lib/context-map-button/user-button/user-dialog.component.d.ts +2 -2
- package/lib/context.module.d.ts +9 -9
- package/lib/share-map/index.d.ts +4 -0
- package/lib/share-map/share-map/share-map-api.component.d.ts +3 -2
- package/lib/share-map/share-map/share-map-url.component.d.ts +2 -2
- package/lib/share-map/share-map/share-map.component.d.ts +2 -2
- package/lib/share-map/share-map.module.d.ts +4 -11
- package/lib/share-map/shared/share-map.service.d.ts +1 -1
- package/lib/sidenav/sidenav.component.d.ts +2 -2
- package/lib/sidenav/sidenav.module.d.ts +4 -10
- package/locale/en.context.json +200 -200
- package/locale/fr.context.json +200 -200
- package/package.json +12 -12
- package/src/context-theme.scss +5 -5
- package/src/lib/context-manager/context-item/context-item.theming.scss +21 -21
- package/src/lib/context-manager/context-list/context-list.theming.scss +23 -23
- package/src/lib/context-manager/context-manager.theming.scss +7 -7
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { ChangeDetectorRef, Directive, HostListener, Self } from '@angular/core';
|
|
2
2
|
import { AuthService } from '@igo2/auth';
|
|
3
3
|
import { ConfirmDialogService } from '@igo2/common';
|
|
4
|
-
import { LanguageService
|
|
4
|
+
import { LanguageService } from '@igo2/core/language';
|
|
5
|
+
import { MessageService } from '@igo2/core/message';
|
|
6
|
+
import { StorageService } from '@igo2/core/storage';
|
|
5
7
|
import { MapService } from '@igo2/geo';
|
|
6
8
|
import { debounceTime } from 'rxjs/operators';
|
|
7
9
|
import { ContextService } from '../shared/context.service';
|
|
@@ -10,9 +12,11 @@ import * as i0 from "@angular/core";
|
|
|
10
12
|
import * as i1 from "./context-list.component";
|
|
11
13
|
import * as i2 from "../shared/context.service";
|
|
12
14
|
import * as i3 from "@igo2/geo";
|
|
13
|
-
import * as i4 from "@igo2/core";
|
|
15
|
+
import * as i4 from "@igo2/core/language";
|
|
14
16
|
import * as i5 from "@igo2/common";
|
|
15
|
-
import * as i6 from "@igo2/
|
|
17
|
+
import * as i6 from "@igo2/core/message";
|
|
18
|
+
import * as i7 from "@igo2/auth";
|
|
19
|
+
import * as i8 from "@igo2/core/storage";
|
|
16
20
|
export class ContextListBindingDirective {
|
|
17
21
|
contextService;
|
|
18
22
|
mapService;
|
|
@@ -204,17 +208,19 @@ export class ContextListBindingDirective {
|
|
|
204
208
|
handleContextsChange(contexts) {
|
|
205
209
|
this.component.contexts = contexts;
|
|
206
210
|
}
|
|
207
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
208
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "
|
|
211
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListBindingDirective, deps: [{ token: i1.ContextListComponent, self: true }, { token: i2.ContextService }, { token: i3.MapService }, { token: i4.LanguageService }, { token: i5.ConfirmDialogService }, { token: i6.MessageService }, { token: i7.AuthService }, { token: i8.StorageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
212
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: ContextListBindingDirective, isStandalone: true, selector: "[igoContextListBinding]", host: { listeners: { "select": "onSelect($event)", "edit": "onEdit($event)", "save": "onSave($event)", "favorite": "onFavorite($event)", "manageTools": "onManageTools($event)", "managePermissions": "onManagePermissions($event)", "delete": "onDelete($event)", "clone": "onClone($event)", "create": "onCreate($event)", "filterPermissionsChanged": "loadContexts()", "showHiddenContexts": "showHiddenContexts()", "show": "onShowContext($event)", "hide": "onHideContext($event)" } }, providers: [ConfirmDialogService], ngImport: i0 });
|
|
209
213
|
}
|
|
210
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
214
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListBindingDirective, decorators: [{
|
|
211
215
|
type: Directive,
|
|
212
216
|
args: [{
|
|
213
|
-
selector: '[igoContextListBinding]'
|
|
217
|
+
selector: '[igoContextListBinding]',
|
|
218
|
+
standalone: true,
|
|
219
|
+
providers: [ConfirmDialogService]
|
|
214
220
|
}]
|
|
215
|
-
}], ctorParameters:
|
|
221
|
+
}], ctorParameters: () => [{ type: i1.ContextListComponent, decorators: [{
|
|
216
222
|
type: Self
|
|
217
|
-
}] }, { type: i2.ContextService }, { type: i3.MapService }, { type: i4.LanguageService }, { type: i5.ConfirmDialogService }, { type:
|
|
223
|
+
}] }, { type: i2.ContextService }, { type: i3.MapService }, { type: i4.LanguageService }, { type: i5.ConfirmDialogService }, { type: i6.MessageService }, { type: i7.AuthService }, { type: i8.StorageService }, { type: i0.ChangeDetectorRef }], propDecorators: { onSelect: [{
|
|
218
224
|
type: HostListener,
|
|
219
225
|
args: ['select', ['$event']]
|
|
220
226
|
}], onEdit: [{
|
|
@@ -254,4 +260,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
254
260
|
type: HostListener,
|
|
255
261
|
args: ['hide', ['$event']]
|
|
256
262
|
}] } });
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGV4dC9zcmMvbGliL2NvbnRleHQtbWFuYWdlci9jb250ZXh0LWxpc3QvY29udGV4dC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFHWixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQzdFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHdkMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBUTlDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7Ozs7QUFLaEUsTUFBTSxPQUFPLDJCQUEyQjtJQWtMNUI7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXhMRixTQUFTLENBQXVCO0lBQ2hDLFVBQVUsQ0FBZTtJQUN6QixpQkFBaUIsQ0FBZTtJQUNoQyxrQkFBa0IsQ0FBZTtJQUNqQyxpQkFBaUIsQ0FBQztJQUcxQixRQUFRLENBQUMsT0FBZ0I7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFHRCxNQUFNLENBQUMsT0FBZ0I7UUFDckIsSUFBSSxDQUFDLGNBQWMs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RGxCLFlBQVk7dUJBQUMsbUJBQW1CLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTTdDLFFBQVE7c0JBRFAsWUFBWTt1QkFBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBd0JsQyxPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQWlCakMsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFvQmxDLFlBQVk7c0JBRFgsWUFBWTt1QkFBQywwQkFBMEI7Z0JBY3hDLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyxvQkFBb0I7Z0JBUWxDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTWhDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENoYW5nZURldGVjdG9yUmVmLFxyXG4gIERpcmVjdGl2ZSxcclxuICBIb3N0TGlzdGVuZXIsXHJcbiAgT25EZXN0cm95LFxyXG4gIE9uSW5pdCxcclxuICBTZWxmXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJ0BpZ28yL2F1dGgnO1xyXG5pbXBvcnQgeyBDb25maXJtRGlhbG9nU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvbW1vbic7XHJcbmltcG9ydCB7IExhbmd1YWdlU2VydmljZSwgTWVzc2FnZVNlcnZpY2UsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB7IE1hcFNlcnZpY2UgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgQ29udGV4dCxcclxuICBDb250ZXh0VXNlclBlcm1pc3Npb24sXHJcbiAgQ29udGV4dHNMaXN0LFxyXG4gIERldGFpbGVkQ29udGV4dFxyXG59IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LmludGVyZmFjZSc7XHJcbmltcG9ydCB7IENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRleHRMaXN0Q29tcG9uZW50IH0gZnJvbSAnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50JztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gIHNlbGVjdG9yOiAnW2lnb0NvbnRleHRMaXN0QmluZGluZ10nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDb250ZXh0TGlzdEJpbmRpbmdEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBjb21wb25lbnQ6IENvbnRleHRMaXN0Q29tcG9uZW50O1xyXG4gIHByaXZhdGUgY29udGV4dHMkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgc2VsZWN0ZWRDb250ZXh0JCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIGRlZmF1bHRDb250ZXh0SWQkJDogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcHJldmlvdXNNZXNzYWdlSWQ7XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3NlbGVjdCcsIFsnJGV2ZW50J10pXHJcbiAgb25TZWxlY3QoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkQ29udGV4dChjb250ZXh0LnVyaSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdlZGl0JywgWyckZXZlbnQnXSlcclxuICBvbkVkaXQoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkRWRpdGVkQ29udGV4dChjb250ZXh0LnVyaSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdzYXZlJywgWyckZXZlbnQnXSlcclxuICBvblNhdmUoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgY29uc3QgbWFwID0gdGhpcy5tYXBTZXJ2aWNlLmdldE1hcCgpO1xyXG4gICAgY29uc3QgY29udGV4dEZyb21NYXAgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmdldENvbnRleHRGcm9tTWFwKG1hcCk7XHJcblxyXG4gICAgY29uc3QgbXNnU3VjY2VzcyA9ICgpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuc2F2ZU1zZycsXHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmRpYWxvZy5zYXZlVGl0bGUnLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YWx1ZTogY29udGV4dC50aXRsZVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH07XHJcblxyXG4gICAgaWYgKGNvbnRleHQuaW1wb3J0ZWQpIHtcclxuICAgICAgY29udGV4dEZyb21NYXAudGl0bGUgPSBjb250ZXh0LnRpdGxlO1xyXG4gICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmRlbGV0ZShjb250ZXh0LmlkLCB0cnVlKTtcclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5jcmVhdGUoY29udGV4dEZyb21NYXApLnN1YnNjcmliZSgoY29udGV4dENyZWF0ZWQpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmxvYWRDb250ZXh0KGNvbnRleHRDcmVhdGVkLnVyaSk7XHJcbiAgICAgICAgbXNnU3VjY2VzcygpO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoYW5nZXM6IGFueSA9IHtcclxuICAgICAgbGF5ZXJzOiBjb250ZXh0RnJvbU1hcC5sYXllcnMsXHJcbiAgICAgIG1hcDoge1xyXG4gICAgICAgIHZpZXc6IGNvbnRleHRGcm9tTWFwLm1hcC52aWV3XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS51cGRhdGUoY29udGV4dC5pZCwgY2hhbmdlcykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgbXNnU3VjY2VzcygpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdmYXZvcml0ZScsIFsnJGV2ZW50J10pXHJcbiAgb25GYXZvcml0ZShjb250ZXh0OiBDb250ZXh0KSB7XHJcbiAgICBpZiAoIWNvbnRleHQuaWQpIHtcclxuICAgICAgY29udGV4dC5pZCA9IGNvbnRleHQudXJpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5zZXREZWZhdWx0KGNvbnRleHQuaWQpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzTWVzc2FnZUlkKSB7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5yZW1vdmUodGhpcy5wcmV2aW91c01lc3NhZ2VJZCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5kZWZhdWx0Q29udGV4dElkJC5uZXh0KGNvbnRleHQuaWQpO1xyXG4gICAgICBjb25zdCBtZXNzYWdlT2JqID0gdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuZmF2b3JpdGVNc2cnLFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuZmF2b3JpdGVUaXRsZScsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIHZhbHVlOiBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnByZXZpb3VzTWVzc2FnZUlkID0gbWVzc2FnZU9iai50b2FzdElkO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbWFuYWdlVG9vbHMnLCBbJyRldmVudCddKVxyXG4gIG9uTWFuYWdlVG9vbHMoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkRWRpdGVkQ29udGV4dChjb250ZXh0LnVyaSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdtYW5hZ2VQZXJtaXNzaW9ucycsIFsnJGV2ZW50J10pXHJcbiAgb25NYW5hZ2VQZXJtaXNzaW9ucyhjb250ZXh0OiBDb250ZXh0KSB7XHJcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmxvYWRFZGl0ZWRDb250ZXh0KGNvbnRleHQudXJpKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2RlbGV0ZScsIFsnJGV2ZW50J10pXHJcbiAgb25EZWxldGUoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgY29uc3QgdHJhbnNsYXRlID0gdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlO1xyXG4gICAgdGhpcy5jb25maXJtRGlhbG9nU2VydmljZVxyXG4gICAgICAub3BlbihcclxuICAgICAgICB0cmFuc2xhdGUuaW5zdGFudCgnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmNvbmZpcm1EZWxldGUnKVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbmZpcm0pID0+IHtcclxuICAgICAgICBpZiAoY29uZmlybSkge1xyXG4gICAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZVxyXG4gICAgICAgICAgICAuZGVsZXRlKGNvbnRleHQuaWQsIGNvbnRleHQuaW1wb3J0ZWQpXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuZGVsZXRlTXNnJyxcclxuICAgICAgICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuZGVsZXRlVGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgeyB2YWx1ZTogY29udGV4dC50aXRsZSB9XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2Nsb25lJywgWyckZXZlbnQnXSlcclxuICBvbkNsb25lKGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcclxuICAgICAgdGl0bGU6IGNvbnRleHQudGl0bGUgKyAnLWNvcHknLFxyXG4gICAgICB1cmk6IGNvbnRleHQudXJpICsgJy1jb3B5J1xyXG4gICAgfTtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY2xvbmUoY29udGV4dC5pZCwgcHJvcGVydGllcykuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgdGhpcy5tZXNzYWdlU2VydmljZS5zdWNjZXNzKFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuY2xvbmVNc2cnLFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuY2xvbmVUaXRsZScsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHsgdmFsdWU6IGNvbnRleHQudGl0bGUgfVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjcmVhdGUnLCBbJyRldmVudCddKVxyXG4gIG9uQ3JlYXRlKG9wdHM6IHsgdGl0bGU6IHN0cmluZzsgZW1wdHk6IGJvb2xlYW4gfSkge1xyXG4gICAgY29uc3QgeyB0aXRsZSwgZW1wdHkgfSA9IG9wdHM7XHJcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0U2VydmljZS5nZXRDb250ZXh0RnJvbU1hcChcclxuICAgICAgdGhpcy5jb21wb25lbnQubWFwLFxyXG4gICAgICBlbXB0eVxyXG4gICAgKTtcclxuICAgIGNvbnRleHQudGl0bGUgPSB0aXRsZTtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKGNvbnRleHQpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnaWdvLmNvbnRleHQuYm9va21hcmtCdXR0b24uZGlhbG9nLmNyZWF0ZU1zZycsXHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmJvb2ttYXJrQnV0dG9uLmRpYWxvZy5jcmVhdGVUaXRsZScsXHJcbiAgICAgICAgdW5kZWZpbmVkLFxyXG4gICAgICAgIHsgdmFsdWU6IGNvbnRleHQudGl0bGUgfVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmxvYWRDb250ZXh0KGNvbnRleHQudXJpKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZmlsdGVyUGVybWlzc2lvbnNDaGFuZ2VkJylcclxuICBsb2FkQ29udGV4dHMoKSB7XHJcbiAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFsnbm9uZSddO1xyXG4gICAgZm9yIChjb25zdCBwIG9mIHRoaXMuY29tcG9uZW50LnBlcm1pc3Npb25zKSB7XHJcbiAgICAgIGlmIChwLmNoZWNrZWQgPT09IHRydWUgfHwgcC5pbmRldGVybWluYXRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgcGVybWlzc2lvbnMucHVzaChwLm5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmNvbXBvbmVudC5zaG93SGlkZGVuXHJcbiAgICAgID8gdGhpcy5jb250ZXh0U2VydmljZS5sb2FkQ29udGV4dHMocGVybWlzc2lvbnMsIHRydWUpXHJcbiAgICAgIDogdGhpcy5jb250ZXh0U2VydmljZS5sb2FkQ29udGV4dHMocGVybWlzc2lvbnMsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ3Nob3dIaWRkZW5Db250ZXh0cycpXHJcbiAgc2hvd0hpZGRlbkNvbnRleHRzKCkge1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlbiA9ICF0aGlzLmNvbXBvbmVudC5zaG93SGlkZGVuO1xyXG4gICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoJ2NvbnRleHRzLnNob3dIaWRkZW4nLCB0aGlzLmNvbXBvbmVudC5zaG93SGlkZGVuKTtcclxuICAgIHRoaXMubG9hZENvbnRleHRzKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdzaG93JywgWyckZXZlbnQnXSlcclxuICBvblNob3dDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5zaG93Q29udGV4dChjb250ZXh0LmlkKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2hpZGUnLCBbJyRldmVudCddKVxyXG4gIG9uSGlkZUNvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmhpZGVDb250ZXh0KGNvbnRleHQuaWQpLnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBAU2VsZigpIGNvbXBvbmVudDogQ29udGV4dExpc3RDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIGNvbnRleHRTZXJ2aWNlOiBDb250ZXh0U2VydmljZSxcclxuICAgIHByaXZhdGUgbWFwU2VydmljZTogTWFwU2VydmljZSxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvbmZpcm1EaWFsb2dTZXJ2aWNlOiBDb25maXJtRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBhdXRoOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgc3RvcmFnZVNlcnZpY2U6IFN0b3JhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBPdmVycmlkZSBpbnB1dCBjb250ZXh0c1xyXG4gICAgdGhpcy5jb21wb25lbnQuY29udGV4dHMgPSB7IG91cnM6IFtdIH07XHJcbiAgICB0aGlzLmNvbXBvbmVudC5zaG93SGlkZGVuID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoXHJcbiAgICAgICdjb250ZXh0cy5zaG93SGlkZGVuJ1xyXG4gICAgKSBhcyBib29sZWFuO1xyXG5cclxuICAgIHRoaXMuY29udGV4dHMkJCA9IHRoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dHMkLnN1YnNjcmliZSgoY29udGV4dHMpID0+XHJcbiAgICAgIHRoaXMuaGFuZGxlQ29udGV4dHNDaGFuZ2UoY29udGV4dHMpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCQkID0gdGhpcy5jb250ZXh0U2VydmljZS5kZWZhdWx0Q29udGV4dElkJC5zdWJzY3JpYmUoXHJcbiAgICAgIChpZCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50LmRlZmF1bHRDb250ZXh0SWQgPSBpZDtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHN0b3JlZENvbnRleHRVcmkgPSB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldChcclxuICAgICAgJ2Zhdm9yaXRlLmNvbnRleHQudXJpJ1xyXG4gICAgKSBhcyBzdHJpbmc7XHJcbiAgICBpZiAoc3RvcmVkQ29udGV4dFVyaSAmJiAhdGhpcy5hdXRoLmF1dGhlbnRpY2F0ZWQpIHtcclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5kZWZhdWx0Q29udGV4dElkJC5uZXh0KHN0b3JlZENvbnRleHRVcmkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNlZSBmZWF0dXJlLWxpc3QuY29tcG9uZW50IGZvciBhbiBleHBsYW5hdGlvbiBhYm91dCB0aGUgZGVib3VuY2UgdGltZVxyXG4gICAgdGhpcy5zZWxlY3RlZENvbnRleHQkJCA9IHRoaXMuY29udGV4dFNlcnZpY2UuY29udGV4dCRcclxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGNvbnRleHQpID0+ICh0aGlzLmNvbXBvbmVudC5zZWxlY3RlZENvbnRleHQgPSBjb250ZXh0KSk7XHJcblxyXG4gICAgdGhpcy5hdXRoLmF1dGhlbnRpY2F0ZSQuc3Vic2NyaWJlKChhdXRoZW50aWNhdGUpID0+IHtcclxuICAgICAgaWYgKGF1dGhlbnRpY2F0ZSkge1xyXG4gICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0UHJvZmlsQnlVc2VyKCkuc3Vic2NyaWJlKChwcm9maWxzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51c2VycyA9IHByb2ZpbHM7XHJcbiAgICAgICAgICB0aGlzLmNvbXBvbmVudC5wZXJtaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgcHJvZmlsc0FjYyA9IHRoaXMuY29tcG9uZW50LnVzZXJzLnJlZHVjZSgoYWNjLCBjdXIpID0+IHtcclxuICAgICAgICAgICAgYWNjID0gYWNjLmNvbmNhdChjdXIpO1xyXG4gICAgICAgICAgICBhY2MgPSBjdXIuY2hpbGRzID8gYWNjLmNvbmNhdChjdXIuY2hpbGRzKSA6IGFjYztcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sIFtdKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGNvbnN0IHVzZXIgb2YgcHJvZmlsc0FjYykge1xyXG4gICAgICAgICAgICBjb25zdCBwZXJtaXNzaW9uOiBDb250ZXh0VXNlclBlcm1pc3Npb24gPSB7XHJcbiAgICAgICAgICAgICAgbmFtZTogdXNlci5uYW1lLFxyXG4gICAgICAgICAgICAgIGNoZWNrZWQ6IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KFxyXG4gICAgICAgICAgICAgICAgJ2NvbnRleHRzLnBlcm1pc3Npb25zLicgKyB1c2VyLm5hbWVcclxuICAgICAgICAgICAgICApIGFzIGJvb2xlYW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaWYgKHBlcm1pc3Npb24uY2hlY2tlZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQucGVybWlzc2lvbnMucHVzaChwZXJtaXNzaW9uKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBwZXJtaXNzaW9ucyA9IFsnbm9uZSddO1xyXG4gICAgICAgICAgZm9yIChjb25zdCBwIG9mIHRoaXMuY29tcG9uZW50LnBlcm1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChwLmNoZWNrZWQgPT09IHRydWUgfHwgcC5pbmRldGVybWluYXRlID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgICAgcGVybWlzc2lvbnMucHVzaChwLm5hbWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlblxyXG4gICAgICAgICAgICA/IHRoaXMuY29udGV4dFNlcnZpY2UubG9hZENvbnRleHRzKHBlcm1pc3Npb25zLCB0cnVlKVxyXG4gICAgICAgICAgICA6IHRoaXMuY29udGV4dFNlcnZpY2UubG9hZENvbnRleHRzKHBlcm1pc3Npb25zLCBmYWxzZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmNvbnRleHRzJCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRDb250ZXh0JCQudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUNvbnRleHRzQ2hhbmdlKGNvbnRleHRzOiBDb250ZXh0c0xpc3QpIHtcclxuICAgIHRoaXMuY29tcG9uZW50LmNvbnRleHRzID0gY29udGV4dHM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
263
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29udGV4dC9zcmMvbGliL2NvbnRleHQtbWFuYWdlci9jb250ZXh0LWxpc3QvY29udGV4dC1saXN0LWJpbmRpbmcuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFHWixJQUFJLEVBQ0wsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUN6QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDcEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUd2QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFROUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTywyQkFBMkI7SUFrTDVCO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUF4TEYsU0FBUyxDQUF1QjtJQUNoQyxVQUFVLENBQWU7SUFDekIsaUJBQWlCLENBQWU7SUFDaEMsa0JBQWtCLENBQWU7SUFDakMsaUJBQWlCLENBQUM7SUFHMUIsUUFBUSxDQUFDLE9BQWdCO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FB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LFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1sQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQU1oQyxNQUFNO3NCQURMLFlBQVk7dUJBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQXVDaEMsVUFBVTtzQkFEVCxZQUFZO3VCQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3QnBDLGFBQWE7c0JBRFosWUFBWTt1QkFBQyxhQUFhLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBTXZDLG1CQUFtQjtzQkFEbEIsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNN0MsUUFBUTtzQkFEUCxZQUFZO3VCQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkF3QmxDLE9BQU87c0JBRE4sWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBaUJqQyxRQUFRO3NCQURQLFlBQVk7dUJBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDO2dCQW9CbEMsWUFBWTtzQkFEWCxZQUFZO3VCQUFDLDBCQUEwQjtnQkFjeEMsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLG9CQUFvQjtnQkFRbEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFNaEMsYUFBYTtzQkFEWixZQUFZO3VCQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgRGlyZWN0aXZlLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIFNlbGZcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvYXV0aCc7XHJcbmltcG9ydCB7IENvbmZpcm1EaWFsb2dTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XHJcbmltcG9ydCB7IE1lc3NhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9tZXNzYWdlJztcclxuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2UgfSBmcm9tICdAaWdvMi9jb3JlL3N0b3JhZ2UnO1xyXG5pbXBvcnQgeyBNYXBTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvZ2VvJztcclxuXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQge1xyXG4gIENvbnRleHQsXHJcbiAgQ29udGV4dFVzZXJQZXJtaXNzaW9uLFxyXG4gIENvbnRleHRzTGlzdCxcclxuICBEZXRhaWxlZENvbnRleHRcclxufSBmcm9tICcuLi9zaGFyZWQvY29udGV4dC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0U2VydmljZSB9IGZyb20gJy4uL3NoYXJlZC9jb250ZXh0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0TGlzdENvbXBvbmVudCB9IGZyb20gJy4vY29udGV4dC1saXN0LmNvbXBvbmVudCc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICBzZWxlY3RvcjogJ1tpZ29Db250ZXh0TGlzdEJpbmRpbmddJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIHByb3ZpZGVyczogW0NvbmZpcm1EaWFsb2dTZXJ2aWNlXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dExpc3RCaW5kaW5nRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgY29tcG9uZW50OiBDb250ZXh0TGlzdENvbXBvbmVudDtcclxuICBwcml2YXRlIGNvbnRleHRzJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHNlbGVjdGVkQ29udGV4dCQkOiBTdWJzY3JpcHRpb247XHJcbiAgcHJpdmF0ZSBkZWZhdWx0Q29udGV4dElkJCQ6IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHByZXZpb3VzTWVzc2FnZUlkO1xyXG5cclxuICBASG9zdExpc3RlbmVyKCdzZWxlY3QnLCBbJyRldmVudCddKVxyXG4gIG9uU2VsZWN0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UubG9hZENvbnRleHQoY29udGV4dC51cmkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZWRpdCcsIFsnJGV2ZW50J10pXHJcbiAgb25FZGl0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UubG9hZEVkaXRlZENvbnRleHQoY29udGV4dC51cmkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignc2F2ZScsIFsnJGV2ZW50J10pXHJcbiAgb25TYXZlKGNvbnRleHQ6IENvbnRleHQpIHtcclxuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwU2VydmljZS5nZXRNYXAoKTtcclxuICAgIGNvbnN0IGNvbnRleHRGcm9tTWFwID0gdGhpcy5jb250ZXh0U2VydmljZS5nZXRDb250ZXh0RnJvbU1hcChtYXApO1xyXG5cclxuICAgIGNvbnN0IG1zZ1N1Y2Nlc3MgPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLnNhdmVNc2cnLFxyXG4gICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5kaWFsb2cuc2F2ZVRpdGxlJyxcclxuICAgICAgICB1bmRlZmluZWQsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdmFsdWU6IGNvbnRleHQudGl0bGVcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGlmIChjb250ZXh0LmltcG9ydGVkKSB7XHJcbiAgICAgIGNvbnRleHRGcm9tTWFwLnRpdGxlID0gY29udGV4dC50aXRsZTtcclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5kZWxldGUoY29udGV4dC5pZCwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuY3JlYXRlKGNvbnRleHRGcm9tTWFwKS5zdWJzY3JpYmUoKGNvbnRleHRDcmVhdGVkKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkQ29udGV4dChjb250ZXh0Q3JlYXRlZC51cmkpO1xyXG4gICAgICAgIG1zZ1N1Y2Nlc3MoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjaGFuZ2VzOiBhbnkgPSB7XHJcbiAgICAgIGxheWVyczogY29udGV4dEZyb21NYXAubGF5ZXJzLFxyXG4gICAgICBtYXA6IHtcclxuICAgICAgICB2aWV3OiBjb250ZXh0RnJvbU1hcC5tYXAudmlld1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UudXBkYXRlKGNvbnRleHQuaWQsIGNoYW5nZXMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIG1zZ1N1Y2Nlc3MoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZmF2b3JpdGUnLCBbJyRldmVudCddKVxyXG4gIG9uRmF2b3JpdGUoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgaWYgKCFjb250ZXh0LmlkKSB7XHJcbiAgICAgIGNvbnRleHQuaWQgPSBjb250ZXh0LnVyaTtcclxuICAgIH1cclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2Uuc2V0RGVmYXVsdChjb250ZXh0LmlkKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5wcmV2aW91c01lc3NhZ2VJZCkge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UucmVtb3ZlKHRoaXMucHJldmlvdXNNZXNzYWdlSWQpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuZGVmYXVsdENvbnRleHRJZCQubmV4dChjb250ZXh0LmlkKTtcclxuICAgICAgY29uc3QgbWVzc2FnZU9iaiA9IHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmZhdm9yaXRlTXNnJyxcclxuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmZhdm9yaXRlVGl0bGUnLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB2YWx1ZTogY29udGV4dC50aXRsZVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5wcmV2aW91c01lc3NhZ2VJZCA9IG1lc3NhZ2VPYmoudG9hc3RJZDtcclxuICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ21hbmFnZVRvb2xzJywgWyckZXZlbnQnXSlcclxuICBvbk1hbmFnZVRvb2xzKGNvbnRleHQ6IENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2UubG9hZEVkaXRlZENvbnRleHQoY29udGV4dC51cmkpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignbWFuYWdlUGVybWlzc2lvbnMnLCBbJyRldmVudCddKVxyXG4gIG9uTWFuYWdlUGVybWlzc2lvbnMoY29udGV4dDogQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkRWRpdGVkQ29udGV4dChjb250ZXh0LnVyaSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdkZWxldGUnLCBbJyRldmVudCddKVxyXG4gIG9uRGVsZXRlKGNvbnRleHQ6IENvbnRleHQpIHtcclxuICAgIGNvbnN0IHRyYW5zbGF0ZSA9IHRoaXMubGFuZ3VhZ2VTZXJ2aWNlLnRyYW5zbGF0ZTtcclxuICAgIHRoaXMuY29uZmlybURpYWxvZ1NlcnZpY2VcclxuICAgICAgLm9wZW4oXHJcbiAgICAgICAgdHJhbnNsYXRlLmluc3RhbnQoJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmRpYWxvZy5jb25maXJtRGVsZXRlJylcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb25maXJtKSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbmZpcm0pIHtcclxuICAgICAgICAgIHRoaXMuY29udGV4dFNlcnZpY2VcclxuICAgICAgICAgICAgLmRlbGV0ZShjb250ZXh0LmlkLCBjb250ZXh0LmltcG9ydGVkKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmRlbGV0ZU1zZycsXHJcbiAgICAgICAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmRlbGV0ZVRpdGxlJyxcclxuICAgICAgICAgICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgIHsgdmFsdWU6IGNvbnRleHQudGl0bGUgfVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdjbG9uZScsIFsnJGV2ZW50J10pXHJcbiAgb25DbG9uZShjb250ZXh0OiBEZXRhaWxlZENvbnRleHQpIHtcclxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XHJcbiAgICAgIHRpdGxlOiBjb250ZXh0LnRpdGxlICsgJy1jb3B5JyxcclxuICAgICAgdXJpOiBjb250ZXh0LnVyaSArICctY29weSdcclxuICAgIH07XHJcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmNsb25lKGNvbnRleHQuaWQsIHByb3BlcnRpZXMpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2Uuc3VjY2VzcyhcclxuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmNsb25lTXNnJyxcclxuICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZGlhbG9nLmNsb25lVGl0bGUnLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7IHZhbHVlOiBjb250ZXh0LnRpdGxlIH1cclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignY3JlYXRlJywgWyckZXZlbnQnXSlcclxuICBvbkNyZWF0ZShvcHRzOiB7IHRpdGxlOiBzdHJpbmc7IGVtcHR5OiBib29sZWFuIH0pIHtcclxuICAgIGNvbnN0IHsgdGl0bGUsIGVtcHR5IH0gPSBvcHRzO1xyXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dFNlcnZpY2UuZ2V0Q29udGV4dEZyb21NYXAoXHJcbiAgICAgIHRoaXMuY29tcG9uZW50Lm1hcCxcclxuICAgICAgZW1wdHlcclxuICAgICk7XHJcbiAgICBjb250ZXh0LnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmNyZWF0ZShjb250ZXh0KS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VTZXJ2aWNlLnN1Y2Nlc3MoXHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmJvb2ttYXJrQnV0dG9uLmRpYWxvZy5jcmVhdGVNc2cnLFxyXG4gICAgICAgICdpZ28uY29udGV4dC5ib29rbWFya0J1dHRvbi5kaWFsb2cuY3JlYXRlVGl0bGUnLFxyXG4gICAgICAgIHVuZGVmaW5lZCxcclxuICAgICAgICB7IHZhbHVlOiBjb250ZXh0LnRpdGxlIH1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5jb250ZXh0U2VydmljZS5sb2FkQ29udGV4dChjb250ZXh0LnVyaSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIEBIb3N0TGlzdGVuZXIoJ2ZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZCcpXHJcbiAgbG9hZENvbnRleHRzKCkge1xyXG4gICAgY29uc3QgcGVybWlzc2lvbnMgPSBbJ25vbmUnXTtcclxuICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmNvbXBvbmVudC5wZXJtaXNzaW9ucykge1xyXG4gICAgICBpZiAocC5jaGVja2VkID09PSB0cnVlIHx8IHAuaW5kZXRlcm1pbmF0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIHBlcm1pc3Npb25zLnB1c2gocC5uYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlblxyXG4gICAgICA/IHRoaXMuY29udGV4dFNlcnZpY2UubG9hZENvbnRleHRzKHBlcm1pc3Npb25zLCB0cnVlKVxyXG4gICAgICA6IHRoaXMuY29udGV4dFNlcnZpY2UubG9hZENvbnRleHRzKHBlcm1pc3Npb25zLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdzaG93SGlkZGVuQ29udGV4dHMnKVxyXG4gIHNob3dIaWRkZW5Db250ZXh0cygpIHtcclxuICAgIHRoaXMuY29tcG9uZW50LnNob3dIaWRkZW4gPSAhdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlbjtcclxuICAgIHRoaXMuc3RvcmFnZVNlcnZpY2Uuc2V0KCdjb250ZXh0cy5zaG93SGlkZGVuJywgdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlbik7XHJcbiAgICB0aGlzLmxvYWRDb250ZXh0cygpO1xyXG4gIH1cclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignc2hvdycsIFsnJGV2ZW50J10pXHJcbiAgb25TaG93Q29udGV4dChjb250ZXh0OiBEZXRhaWxlZENvbnRleHQpIHtcclxuICAgIHRoaXMuY29udGV4dFNlcnZpY2Uuc2hvd0NvbnRleHQoY29udGV4dC5pZCkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKCdoaWRlJywgWyckZXZlbnQnXSlcclxuICBvbkhpZGVDb250ZXh0KGNvbnRleHQ6IERldGFpbGVkQ29udGV4dCkge1xyXG4gICAgdGhpcy5jb250ZXh0U2VydmljZS5oaWRlQ29udGV4dChjb250ZXh0LmlkKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQFNlbGYoKSBjb21wb25lbnQ6IENvbnRleHRMaXN0Q29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1hcFNlcnZpY2U6IE1hcFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxhbmd1YWdlU2VydmljZTogTGFuZ3VhZ2VTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb25maXJtRGlhbG9nU2VydmljZTogQ29uZmlybURpYWxvZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1lc3NhZ2VTZXJ2aWNlOiBNZXNzYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYXV0aDogQXV0aFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgLy8gT3ZlcnJpZGUgaW5wdXQgY29udGV4dHNcclxuICAgIHRoaXMuY29tcG9uZW50LmNvbnRleHRzID0geyBvdXJzOiBbXSB9O1xyXG4gICAgdGhpcy5jb21wb25lbnQuc2hvd0hpZGRlbiA9IHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KFxyXG4gICAgICAnY29udGV4dHMuc2hvd0hpZGRlbidcclxuICAgICkgYXMgYm9vbGVhbjtcclxuXHJcbiAgICB0aGlzLmNvbnRleHRzJCQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHRzJC5zdWJzY3JpYmUoKGNvbnRleHRzKSA9PlxyXG4gICAgICB0aGlzLmhhbmRsZUNvbnRleHRzQ2hhbmdlKGNvbnRleHRzKVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQkJCA9IHRoaXMuY29udGV4dFNlcnZpY2UuZGVmYXVsdENvbnRleHRJZCQuc3Vic2NyaWJlKFxyXG4gICAgICAoaWQpID0+IHtcclxuICAgICAgICB0aGlzLmNvbXBvbmVudC5kZWZhdWx0Q29udGV4dElkID0gaWQ7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgICBjb25zdCBzdG9yZWRDb250ZXh0VXJpID0gdGhpcy5zdG9yYWdlU2VydmljZS5nZXQoXHJcbiAgICAgICdmYXZvcml0ZS5jb250ZXh0LnVyaSdcclxuICAgICkgYXMgc3RyaW5nO1xyXG4gICAgaWYgKHN0b3JlZENvbnRleHRVcmkgJiYgIXRoaXMuYXV0aC5hdXRoZW50aWNhdGVkKSB7XHJcbiAgICAgIHRoaXMuY29udGV4dFNlcnZpY2UuZGVmYXVsdENvbnRleHRJZCQubmV4dChzdG9yZWRDb250ZXh0VXJpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZWUgZmVhdHVyZS1saXN0LmNvbXBvbmVudCBmb3IgYW4gZXhwbGFuYXRpb24gYWJvdXQgdGhlIGRlYm91bmNlIHRpbWVcclxuICAgIHRoaXMuc2VsZWN0ZWRDb250ZXh0JCQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLmNvbnRleHQkXHJcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSgxMDApKVxyXG4gICAgICAuc3Vic2NyaWJlKChjb250ZXh0KSA9PiAodGhpcy5jb21wb25lbnQuc2VsZWN0ZWRDb250ZXh0ID0gY29udGV4dCkpO1xyXG5cclxuICAgIHRoaXMuYXV0aC5hdXRoZW50aWNhdGUkLnN1YnNjcmliZSgoYXV0aGVudGljYXRlKSA9PiB7XHJcbiAgICAgIGlmIChhdXRoZW50aWNhdGUpIHtcclxuICAgICAgICB0aGlzLmNvbnRleHRTZXJ2aWNlLmdldFByb2ZpbEJ5VXNlcigpLnN1YnNjcmliZSgocHJvZmlscykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jb21wb25lbnQudXNlcnMgPSBwcm9maWxzO1xyXG4gICAgICAgICAgdGhpcy5jb21wb25lbnQucGVybWlzc2lvbnMgPSBbXTtcclxuICAgICAgICAgIGNvbnN0IHByb2ZpbHNBY2MgPSB0aGlzLmNvbXBvbmVudC51c2Vycy5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XHJcbiAgICAgICAgICAgIGFjYyA9IGFjYy5jb25jYXQoY3VyKTtcclxuICAgICAgICAgICAgYWNjID0gY3VyLmNoaWxkcyA/IGFjYy5jb25jYXQoY3VyLmNoaWxkcykgOiBhY2M7XHJcbiAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICB9LCBbXSk7XHJcblxyXG4gICAgICAgICAgZm9yIChjb25zdCB1c2VyIG9mIHByb2ZpbHNBY2MpIHtcclxuICAgICAgICAgICAgY29uc3QgcGVybWlzc2lvbjogQ29udGV4dFVzZXJQZXJtaXNzaW9uID0ge1xyXG4gICAgICAgICAgICAgIG5hbWU6IHVzZXIubmFtZSxcclxuICAgICAgICAgICAgICBjaGVja2VkOiB0aGlzLnN0b3JhZ2VTZXJ2aWNlLmdldChcclxuICAgICAgICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgdXNlci5uYW1lXHJcbiAgICAgICAgICAgICAgKSBhcyBib29sZWFuXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGlmIChwZXJtaXNzaW9uLmNoZWNrZWQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICBwZXJtaXNzaW9uLmNoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50LnBlcm1pc3Npb25zLnB1c2gocGVybWlzc2lvbik7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBbJ25vbmUnXTtcclxuICAgICAgICAgIGZvciAoY29uc3QgcCBvZiB0aGlzLmNvbXBvbmVudC5wZXJtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBpZiAocC5jaGVja2VkID09PSB0cnVlIHx8IHAuaW5kZXRlcm1pbmF0ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgIHBlcm1pc3Npb25zLnB1c2gocC5uYW1lKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuY29tcG9uZW50LnNob3dIaWRkZW5cclxuICAgICAgICAgICAgPyB0aGlzLmNvbnRleHRTZXJ2aWNlLmxvYWRDb250ZXh0cyhwZXJtaXNzaW9ucywgdHJ1ZSlcclxuICAgICAgICAgICAgOiB0aGlzLmNvbnRleHRTZXJ2aWNlLmxvYWRDb250ZXh0cyhwZXJtaXNzaW9ucywgZmFsc2UpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jb250ZXh0cyQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLnNlbGVjdGVkQ29udGV4dCQkLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVDb250ZXh0c0NoYW5nZShjb250ZXh0czogQ29udGV4dHNMaXN0KSB7XHJcbiAgICB0aGlzLmNvbXBvbmVudC5jb250ZXh0cyA9IGNvbnRleHRzO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,29 +1,41 @@
|
|
|
1
|
+
import { AsyncPipe, KeyValuePipe, NgFor, NgIf } from '@angular/common';
|
|
1
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';
|
|
2
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';
|
|
3
12
|
import { AuthService } from '@igo2/auth';
|
|
4
|
-
import { ActionStore, ActionbarMode } from '@igo2/common';
|
|
5
|
-
import { ConfigService
|
|
13
|
+
import { ActionStore, ActionbarComponent, ActionbarMode, CollapsibleComponent, ListComponent, ListItemDirective } from '@igo2/common';
|
|
14
|
+
import { ConfigService } from '@igo2/core/config';
|
|
15
|
+
import { LanguageService } from '@igo2/core/language';
|
|
16
|
+
import { StorageService } from '@igo2/core/storage';
|
|
17
|
+
import { TranslateModule } from '@ngx-translate/core';
|
|
6
18
|
import { BehaviorSubject, ReplaySubject, timer } from 'rxjs';
|
|
7
19
|
import { take } from 'rxjs/operators';
|
|
8
20
|
import { debounce } from 'rxjs/operators';
|
|
9
21
|
import { BookmarkDialogComponent } from '../../context-map-button/bookmark-button/bookmark-dialog.component';
|
|
22
|
+
import { ContextItemComponent } from '../context-item/context-item.component';
|
|
10
23
|
import { ContextListControlsEnum } from './context-list.enum';
|
|
11
24
|
import * as i0 from "@angular/core";
|
|
12
|
-
import * as i1 from "@igo2/core";
|
|
25
|
+
import * as i1 from "@igo2/core/config";
|
|
13
26
|
import * as i2 from "@igo2/auth";
|
|
14
27
|
import * as i3 from "@angular/material/dialog";
|
|
15
|
-
import * as i4 from "@
|
|
16
|
-
import * as i5 from "@
|
|
28
|
+
import * as i4 from "@igo2/core/language";
|
|
29
|
+
import * as i5 from "@igo2/core/storage";
|
|
17
30
|
import * as i6 from "@angular/material/form-field";
|
|
18
31
|
import * as i7 from "@angular/material/input";
|
|
19
|
-
import * as i8 from "@angular/
|
|
32
|
+
import * as i8 from "@angular/forms";
|
|
20
33
|
import * as i9 from "@angular/material/button";
|
|
21
|
-
import * as i10 from "@angular/material/
|
|
22
|
-
import * as i11 from "@angular/material/
|
|
34
|
+
import * as i10 from "@angular/material/icon";
|
|
35
|
+
import * as i11 from "@angular/material/tooltip";
|
|
23
36
|
import * as i12 from "@angular/material/menu";
|
|
24
|
-
import * as i13 from "@
|
|
25
|
-
import * as i14 from "
|
|
26
|
-
import * as i15 from "@ngx-translate/core";
|
|
37
|
+
import * as i13 from "@angular/material/checkbox";
|
|
38
|
+
import * as i14 from "@ngx-translate/core";
|
|
27
39
|
export class ContextListComponent {
|
|
28
40
|
cdRef;
|
|
29
41
|
configService;
|
|
@@ -355,13 +367,32 @@ export class ContextListComponent {
|
|
|
355
367
|
context.hidden = false;
|
|
356
368
|
this.show.emit(context);
|
|
357
369
|
}
|
|
358
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
359
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextListComponent, 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\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupContexts.value.length && auth.authenticated\"\r\n [title]=\"titleMapping[groupContexts.key] | translate\"\r\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\"\r\n (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-template\r\n *ngIf=\"groupContexts.value.length && !auth.authenticated\"\r\n ngFor\r\n let-context\r\n [ngForOf]=\"groupContexts.value\"\r\n >\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\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}.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: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.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: "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: "component", type: i8.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i9.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i10.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: i13.ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: i13.CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: i13.ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "component", type: i14.ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i15.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
370
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", 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 });
|
|
371
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", 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\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\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}.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", "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: TranslateModule }, { kind: "pipe", type: i14.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
360
372
|
}
|
|
361
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
373
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListComponent, decorators: [{
|
|
362
374
|
type: Component,
|
|
363
|
-
args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush,
|
|
364
|
-
|
|
375
|
+
args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
|
|
376
|
+
ListComponent,
|
|
377
|
+
NgIf,
|
|
378
|
+
MatFormFieldModule,
|
|
379
|
+
MatInputModule,
|
|
380
|
+
FormsModule,
|
|
381
|
+
MatButtonModule,
|
|
382
|
+
MatIconModule,
|
|
383
|
+
MatTooltipModule,
|
|
384
|
+
ActionbarComponent,
|
|
385
|
+
MatMenuModule,
|
|
386
|
+
NgFor,
|
|
387
|
+
MatCheckboxModule,
|
|
388
|
+
CollapsibleComponent,
|
|
389
|
+
ContextItemComponent,
|
|
390
|
+
ListItemDirective,
|
|
391
|
+
AsyncPipe,
|
|
392
|
+
KeyValuePipe,
|
|
393
|
+
TranslateModule
|
|
394
|
+
], template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\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}.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"] }]
|
|
395
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.ConfigService }, { type: i2.AuthService }, { type: i3.MatDialog }, { type: i4.LanguageService }, { type: i5.StorageService }], propDecorators: { contexts: [{
|
|
365
396
|
type: Input
|
|
366
397
|
}], selectedContext: [{
|
|
367
398
|
type: Input
|
|
@@ -400,4 +431,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
400
431
|
}], term: [{
|
|
401
432
|
type: Input
|
|
402
433
|
}] } });
|
|
403
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFELE9BQU8sRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUc1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFMUMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFRN0csT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBUTlELE1BQU0sT0FBTyxvQkFBb0I7SUEwSHJCO0lBQ0Q7SUFDQTtJQUNDO0lBQ0E7SUFD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QU07Z0JBd0JILElBQUk7c0JBRFAsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbnB1dCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaWdvMi9hdXRoJztcclxuaW1wb3J0IHsgQWN0aW9uU3RvcmUsIEFjdGlvbmJhck1vZGUgfSBmcm9tICdAaWdvMi9jb21tb24nO1xyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlLCBMYW5ndWFnZVNlcnZpY2UsIFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZSc7XHJcbmltcG9ydCB0eXBlIHsgSWdvTWFwIH0gZnJvbSAnQGlnbzIvZ2VvJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYXAtYnV0dG9uL2Jvb2ttYXJrLWJ1dHRvbi9ib29rbWFyay1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHtcclxuICBDb250ZXh0UHJvZmlscyxcclxuICBDb250ZXh0U2VydmljZU9wdGlvbnMsXHJcbiAgQ29udGV4dFVzZXJQZXJtaXNzaW9uLFxyXG4gIENvbnRleHRzTGlzdCxcclxuICBEZXRhaWxlZENvbnRleHRcclxufSBmcm9tICcuLi9zaGFyZWQvY29udGV4dC5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBDb250ZXh0TGlzdENvbnRyb2xzRW51bSB9IGZyb20gJy4vY29udGV4dC1saXN0LmVudW0nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdpZ28tY29udGV4dC1saXN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY29udGV4dC1saXN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jb250ZXh0LWxpc3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGNvbnRleHRDb25maWdzOiBDb250ZXh0U2VydmljZU9wdGlvbnM7XHJcbiAgcHJpdmF0ZSBjb250ZXh0c0luaXRpYWw6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcclxuICBjb250ZXh0cyQ6IEJlaGF2aW9yU3ViamVjdDxDb250ZXh0c0xpc3Q+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHRoaXMuY29udGV4dHNJbml0aWFsXHJcbiAgKTtcclxuXHJcbiAgY2hhbmdlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xyXG5cclxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbnRleHRzKCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XHJcbiAgfVxyXG4gIHNldCBjb250ZXh0cyh2YWx1ZTogQ29udGV4dHNMaXN0KSB7XHJcbiAgICB0aGlzLl9jb250ZXh0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbnRleHRzOiBDb250ZXh0c0xpc3QgPSB7IG91cnM6IFtdIH07XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGVkQ29udGV4dCgpOiBEZXRhaWxlZENvbnRleHQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29udGV4dDtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGVkQ29udGV4dCh2YWx1ZTogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbnRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RlZENvbnRleHQ6IERldGFpbGVkQ29udGV4dDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGVmYXVsdENvbnRleHRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dENvbmZpZ3NcclxuICAgICAgPyB0aGlzLl9kZWZhdWx0Q29udGV4dElkXHJcbiAgICAgIDogKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdmYXZvcml0ZS5jb250ZXh0LnVyaScpIGFzIHN0cmluZykgfHxcclxuICAgICAgICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQ7XHJcbiAgfVxyXG4gIHNldCBkZWZhdWx0Q29udGV4dElkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdENvbnRleHRJZDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY29sbGFwc2VkOiB7IGNvbnRleHRTY29wZSB9W10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSB1bnNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsb25lID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0aXRsZTogc3RyaW5nOyBlbXB0eTogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgc2hvd0hpZGRlbkNvbnRleHRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBmYXZvcml0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VQZXJtaXNzaW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VUb29scyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJQZXJtaXNzaW9uc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgQ29udGV4dFVzZXJQZXJtaXNzaW9uW11cclxuICA+KCk7XHJcblxyXG4gIHB1YmxpYyB0aXRsZU1hcHBpbmcgPSB7XHJcbiAgICBvdXJzOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIub3VyQ29udGV4dHMnLFxyXG4gICAgc2hhcmVkOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc2hhcmVkQ29udGV4dHMnLFxyXG4gICAgcHVibGljOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIucHVibGljQ29udGV4dHMnXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVzZXJzOiBDb250ZXh0UHJvZmlsc1tdO1xyXG4gIHB1YmxpYyBwZXJtaXNzaW9uczogQ29udGV4dFVzZXJQZXJtaXNzaW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGFjdGlvblN0b3JlID0gbmV3IEFjdGlvblN0b3JlKFtdKTtcclxuICBwdWJsaWMgYWN0aW9uYmFyTW9kZSA9IEFjdGlvbmJhck1vZGUuT3ZlcmxheTtcclxuXHJcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xyXG5cclxuICBwdWJsaWMgc2hvd0hpZGRlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb250ZXh0IGZpbHRlciB0ZXJtXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90ZXJtID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IHRlcm0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtO1xyXG4gIH1cclxuICBwdWJsaWMgX3Rlcm06IHN0cmluZyA9ICcnO1xyXG5cclxuICBnZXQgc29ydGVkQWxwaGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVkQWxwaGE7XHJcbiAgfVxyXG4gIHNldCBzb3J0ZWRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYTogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHNob3dDb250ZXh0RmlsdGVyID0gQ29udGV4dExpc3RDb250cm9sc0VudW0uYWx3YXlzO1xyXG5cclxuICBwdWJsaWMgdGhyZXNob2xkVG9GaWx0ZXIgPSA1O1xyXG5cclxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnB1YmxpYz8ubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnNoYXJlZD8ubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jb250ZXh0Q29uZmlncyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2NvbnRleHQnKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJCA9IHRoaXMuY2hhbmdlJFxyXG4gICAgICAucGlwZShkZWJvdW5jZSgoKSA9PiB0aW1lcig1MCkpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRleHRzJC5uZXh0KHRoaXMuZmlsdGVyQ29udGV4dHNMaXN0KHRoaXMuY29udGV4dHMpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25TdG9yZS5sb2FkKFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnZW1wdHlDb250ZXh0JyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0J1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1vdXRsaW5lJyxcclxuICAgICAgICB0b29sdGlwOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5lbXB0eUNvbnRleHRUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250ZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnY29udGV4dEZyb21NYXAnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5jb250ZXh0TWFwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1jaGVjaycsXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcFRvb2x0aXAnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUNvbnRleHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICBpZiAodGhpcy50ZXJtID09PSAnJykge1xyXG4gICAgICBpZiAodGhpcy5zb3J0ZWRBbHBoYSkge1xyXG4gICAgICAgIGNvbnRleHRzID0gdGhpcy5zb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBvdXJzID0gY29udGV4dHMub3Vycy5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXHJcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgdXBkYXRlQ29udGV4dHM6IENvbnRleHRzTGlzdCA9IHtcclxuICAgICAgICBvdXJzXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0cy5wdWJsaWMpIHtcclxuICAgICAgICBjb25zdCBwdWJsaWNzID0gY29udGV4dHMucHVibGljLmZpbHRlcigoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHRoaXMudGVybVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUNvbnRleHRzLnB1YmxpYyA9IHB1YmxpY3M7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRleHRzLnNoYXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHNoYXJlZCA9IGNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQgPSBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVDb250ZXh0cy5zaGFyZWQgPSBzaGFyZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNvcnRlZEFscGhhKSB7XHJcbiAgICAgICAgdXBkYXRlQ29udGV4dHMgPSB0aGlzLnNvcnRDb250ZXh0c0xpc3QodXBkYXRlQ29udGV4dHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dGaWx0ZXIoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2hvd0NvbnRleHRGaWx0ZXIpIHtcclxuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5hbHdheXM6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgQ29udGV4dExpc3RDb250cm9sc0VudW0ubmV2ZXI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGxldCB0b3RhbExlbmd0aCA9IHRoaXMuY29udGV4dHMub3Vycy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdWJsaWNcclxuICAgICAgICAgID8gKHRvdGFsTGVuZ3RoICs9IHRoaXMuY29udGV4dHMucHVibGljLmxlbmd0aClcclxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xyXG4gICAgICAgIHRoaXMuY29udGV4dHMuc2hhcmVkXHJcbiAgICAgICAgICA/ICh0b3RhbExlbmd0aCArPSB0aGlzLmNvbnRleHRzLnNoYXJlZC5sZW5ndGgpXHJcbiAgICAgICAgICA6ICh0b3RhbExlbmd0aCArPSAwKTtcclxuICAgICAgICBpZiAodG90YWxMZW5ndGggPj0gdGhpcy50aHJlc2hvbGRUb0ZpbHRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNvcnRDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCkge1xyXG4gICAgaWYgKGNvbnRleHRzKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRleHRzTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udGV4dHMpKTtcclxuICAgICAgY29udGV4dHNMaXN0Lm91cnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGNvbnRleHRzTGlzdC5zaGFyZWQpIHtcclxuICAgICAgICBjb250ZXh0c0xpc3Quc2hhcmVkLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dHNMaXN0LnB1YmxpYykge1xyXG4gICAgICAgIGNvbnRleHRzTGlzdC5wdWJsaWMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHNMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplKHN0cjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTb3J0KHNvcnRBbHBoYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zb3J0ZWRBbHBoYSA9IHNvcnRBbHBoYTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy50ZXJtID0gJyc7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb250ZXh0KGVtcHR5PzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oQm9va21hcmtEaWFsb2dDb21wb25lbnQsIHsgZGlzYWJsZUNsb3NlOiBmYWxzZSB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KHsgdGl0bGUsIGVtcHR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uKHVzZXI/KTogQ29udGV4dFVzZXJQZXJtaXNzaW9uIHtcclxuICAgIGlmICh1c2VyKSB7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmZpbmQoKHApID0+IHAubmFtZSA9PT0gdXNlci5uYW1lKTtcclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyLCBwYXJlbnQ/KSB7XHJcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uKHVzZXIpO1xyXG4gICAgaWYgKHBlcm1pc3Npb24pIHtcclxuICAgICAgcGVybWlzc2lvbi5jaGVja2VkID0gIXBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgJ2NvbnRleHRzLnBlcm1pc3Npb25zLicgKyBwZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICk7XHJcbiAgICAgIHBlcm1pc3Npb24uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgbGV0IGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBwYXJlbnQuY2hpbGRzKSB7XHJcbiAgICAgICAgY29uc3QgY1Blcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XHJcbiAgICAgICAgaWYgKGNQZXJtaXNzaW9uLmNoZWNrZWQgIT09IHBlcm1pc3Npb24uY2hlY2tlZCkge1xyXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihwYXJlbnQpO1xyXG4gICAgICBpZiAocGFyZW50UGVybWlzc2lvbikge1xyXG4gICAgICAgIHBhcmVudFBlcm1pc3Npb24uY2hlY2tlZCA9IHBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcclxuICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgcGFyZW50UGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwYXJlbnRQZXJtaXNzaW9uLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZXIuY2hpbGRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiB1c2VyLmNoaWxkcykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihjKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24gJiZcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkID0gcGVybWlzc2lvbi5jaGVja2VkO1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgY2hpbGRyZW5QZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZC5lbWl0KHRoaXMucGVybWlzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUNvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0hpZGRlbikge1xyXG4gICAgICBjb25zdCBjb250ZXh0czogQ29udGV4dHNMaXN0ID0geyBvdXJzOiBbXSwgc2hhcmVkOiBbXSwgcHVibGljOiBbXSB9O1xyXG4gICAgICBjb250ZXh0cy5vdXJzID0gdGhpcy5jb250ZXh0cy5vdXJzLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnNoYXJlZCA9IHRoaXMuY29udGV4dHMuc2hhcmVkLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnB1YmxpYyA9IHRoaXMuY29udGV4dHMucHVibGljLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcclxuICAgIH1cclxuICAgIHRoaXMuaGlkZS5lbWl0KGNvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93LmVtaXQoY29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZ28tbGlzdCBbbmF2aWdhdGlvbl09XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRleHQtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd0ZpbHRlcigpXCIgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRlcm1cIlxyXG4gICAgICAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIlxyXG4gICAgICAgICpuZ0lmPVwidGVybS5sZW5ndGhcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhc29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc29ydEFscGhhYmV0aWNhbGx5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQodHJ1ZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgc3ZnSWNvbj1cInNvcnQtYWxwaGFiZXRpY2FsLXZhcmlhbnRcIlxyXG4gICAgICAgID48L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwic29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRDb250ZXh0T3JkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwid2FyblwiIHN2Z0ljb249XCJzb3J0LXZhcmlhbnQtcmVtb3ZlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8aWdvLWFjdGlvbmJhclxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cImFkZC1jb250ZXh0LWJ1dHRvblwiXHJcbiAgICAgICAgW2ljb25Db2xvcl09XCJjb2xvclwiXHJcbiAgICAgICAgW3N0b3JlXT1cImFjdGlvblN0b3JlXCJcclxuICAgICAgICBbd2l0aEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgaWNvbj1cInBsdXNcIlxyXG4gICAgICAgIFt3aXRoVGl0bGVdPVwiYWN0aW9uYmFyTW9kZSA9PT0gJ292ZXJsYXknXCJcclxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXHJcbiAgICAgICAgW21vZGVdPVwiYWN0aW9uYmFyTW9kZVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cInVzZXJzLWZpbHRlclwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclVzZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWNjb3VudE1lbnVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIHN2Z0ljb249XCJmaWx0ZXItbWVudVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LW1lbnUgI2FjY291bnRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5jaGlsZHM7IGVsc2Ugd2l0aFN1Yk1lbnVcIlxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsLW1lbnVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkodXNlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhTdWJNZW51PlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdWJBY2NvdW50TWVudVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5pbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1tZW51ICNzdWJBY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgdXNlci5jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKGNoaWxkKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkoY2hpbGQsIHVzZXIpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgY2hpbGQudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicHJvZmlsLW1lbnVcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2hvd0hpZGRlblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNob3dIaWRkZW5Db250ZXh0cy5lbWl0KClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNob3dIaWRkZW4nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlIG5nRm9yIGxldC1ncm91cENvbnRleHRzIFtuZ0Zvck9mXT1cImNvbnRleHRzJCB8IGFzeW5jIHwga2V5dmFsdWVcIj5cclxuICAgIDxpZ28tY29sbGFwc2libGVcclxuICAgICAgKm5nSWY9XCJncm91cENvbnRleHRzLnZhbHVlLmxlbmd0aCAmJiBhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBbdGl0bGVdPVwidGl0bGVNYXBwaW5nW2dyb3VwQ29udGV4dHMua2V5XSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtjb2xsYXBzZWRdPVwiY29sbGFwc2VkW3RpdGxlTWFwcGluZ1tncm91cENvbnRleHRzLmtleV1dXCJcclxuICAgICAgKHRvZ2dsZSk9XCJjb2xsYXBzZWRbdGl0bGVNYXBwaW5nW2dyb3VwQ29udGV4dHMua2V5XV0gPSAkZXZlbnRcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbnRleHQgW25nRm9yT2ZdPVwiZ3JvdXBDb250ZXh0cy52YWx1ZVwiPlxyXG4gICAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXHJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgICBjb250ZXh0LmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoY2xvbmUpPVwiY2xvbmUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoc2F2ZSk9XCJzYXZlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGhpZGUpPVwiaGlkZUNvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNob3cpPVwic2hvd0NvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVRvb2xzKT1cIm1hbmFnZVRvb2xzLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVBlcm1pc3Npb25zKT1cIm1hbmFnZVBlcm1pc3Npb25zLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAodW5zZWxlY3QpPVwidW5zZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvaWdvLWNvbGxhcHNpYmxlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAqbmdJZj1cImdyb3VwQ29udGV4dHMudmFsdWUubGVuZ3RoICYmICFhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBuZ0ZvclxyXG4gICAgICBsZXQtY29udGV4dFxyXG4gICAgICBbbmdGb3JPZl09XCJncm91cENvbnRleHRzLnZhbHVlXCJcclxuICAgID5cclxuICAgICAgPGlnby1jb250ZXh0LWl0ZW1cclxuICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgIGNvbG9yPVwiYWNjZW50XCJcclxuICAgICAgICBbc2hvd0Zhdm9yaXRlXT1cIlxyXG4gICAgICAgICAgY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2Zhdm9yaXRlQ29udGV4dDROb25BdXRoZW50aWNhdGVkJylcclxuICAgICAgICBcIlxyXG4gICAgICAgIFtzZWxlY3RlZF09XCJzZWxlY3RlZENvbnRleHQgJiYgc2VsZWN0ZWRDb250ZXh0LnVyaSA9PT0gY29udGV4dC51cmlcIlxyXG4gICAgICAgIFtjb250ZXh0XT1cImNvbnRleHRcIlxyXG4gICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgY29udGV4dENvbmZpZ3NcclxuICAgICAgICAgICAgPyBkZWZhdWx0Q29udGV4dElkID09PSBjb250ZXh0LmlkXHJcbiAgICAgICAgICAgIDogZGVmYXVsdENvbnRleHRJZCA9PT0gY29udGV4dC51cmlcclxuICAgICAgICBcIlxyXG4gICAgICAgIChmYXZvcml0ZSk9XCJmYXZvcml0ZS5lbWl0KGNvbnRleHQpXCJcclxuICAgICAgICAoc2VsZWN0KT1cInNlbGVjdC5lbWl0KGNvbnRleHQpXCJcclxuICAgICAgICAodW5zZWxlY3QpPVwidW5zZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZ28tY29udGV4dC1pdGVtPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICA8ZGl2ICpuZ0lmPVwiaXNFbXB0eVwiIGNsYXNzPVwibm8tcmVzdWx0XCI+XHJcbiAgICB7eyAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIubm9SZXN1bHQnIHwgdHJhbnNsYXRlIH19XHJcbiAgPC9kaXY+XHJcbjwvaWdvLWxpc3Q+XHJcbiJdfQ==
|
|
434
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbnRleHQvc3JjL2xpYi9jb250ZXh0LW1hbmFnZXIvY29udGV4dC1saXN0L2NvbnRleHQtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb250ZXh0L3NyYy9saWIvY29udGV4dC1tYW5hZ2VyL2NvbnRleHQtbGlzdC9jb250ZXh0LWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFDUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUU3RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sWUFBWSxD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QixvQkFBb0I7d0JBQ3BCLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxZQUFZO3dCQUNaLGVBQWU7cUJBQ2hCOytOQWNHLFFBQVE7c0JBRFgsS0FBSztnQkFXRixlQUFlO3NCQURsQixLQUFLO2dCQVdGLEdBQUc7c0JBRE4sS0FBSztnQkFVRixnQkFBZ0I7c0JBRG5CLEtBQUs7Z0JBY0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLHdCQUF3QjtzQkFBakMsTUFBTTtnQkF3QkgsSUFBSTtzQkFEUCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUsIE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIElucHV0LFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0XHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5pbXBvcnQgeyBNYXRDaGVja2JveE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NoZWNrYm94JztcclxuaW1wb3J0IHsgTWF0RGlhbG9nIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdEljb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pY29uJztcclxuaW1wb3J0IHsgTWF0SW5wdXRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IE1hdE1lbnVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9tZW51JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5cclxuaW1wb3J0IHsgQXV0aFNlcnZpY2UgfSBmcm9tICdAaWdvMi9hdXRoJztcclxuaW1wb3J0IHtcclxuICBBY3Rpb25TdG9yZSxcclxuICBBY3Rpb25iYXJDb21wb25lbnQsXHJcbiAgQWN0aW9uYmFyTW9kZSxcclxuICBDb2xsYXBzaWJsZUNvbXBvbmVudCxcclxuICBMaXN0Q29tcG9uZW50LFxyXG4gIExpc3RJdGVtRGlyZWN0aXZlXHJcbn0gZnJvbSAnQGlnbzIvY29tbW9uJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJ0BpZ28yL2NvcmUvY29uZmlnJztcclxuaW1wb3J0IHsgTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9sYW5ndWFnZSc7XHJcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlIH0gZnJvbSAnQGlnbzIvY29yZS9zdG9yYWdlJztcclxuaW1wb3J0IHR5cGUgeyBJZ29NYXAgfSBmcm9tICdAaWdvMi9nZW8nO1xyXG5cclxuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9uLCB0aW1lciB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IEJvb2ttYXJrRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29udGV4dC1tYXAtYnV0dG9uL2Jvb2ttYXJrLWJ1dHRvbi9ib29rbWFyay1kaWFsb2cuY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ29udGV4dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9jb250ZXh0LWl0ZW0vY29udGV4dC1pdGVtLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgQ29udGV4dFByb2ZpbHMsXHJcbiAgQ29udGV4dFNlcnZpY2VPcHRpb25zLFxyXG4gIENvbnRleHRVc2VyUGVybWlzc2lvbixcclxuICBDb250ZXh0c0xpc3QsXHJcbiAgRGV0YWlsZWRDb250ZXh0XHJcbn0gZnJvbSAnLi4vc2hhcmVkL2NvbnRleHQuaW50ZXJmYWNlJztcclxuaW1wb3J0IHsgQ29udGV4dExpc3RDb250cm9sc0VudW0gfSBmcm9tICcuL2NvbnRleHQtbGlzdC5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWdvLWNvbnRleHQtbGlzdCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRleHQtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY29udGV4dC1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbXHJcbiAgICBMaXN0Q29tcG9uZW50LFxyXG4gICAgTmdJZixcclxuICAgIE1hdEZvcm1GaWVsZE1vZHVsZSxcclxuICAgIE1hdElucHV0TW9kdWxlLFxyXG4gICAgRm9ybXNNb2R1bGUsXHJcbiAgICBNYXRCdXR0b25Nb2R1bGUsXHJcbiAgICBNYXRJY29uTW9kdWxlLFxyXG4gICAgTWF0VG9vbHRpcE1vZHVsZSxcclxuICAgIEFjdGlvbmJhckNvbXBvbmVudCxcclxuICAgIE1hdE1lbnVNb2R1bGUsXHJcbiAgICBOZ0ZvcixcclxuICAgIE1hdENoZWNrYm94TW9kdWxlLFxyXG4gICAgQ29sbGFwc2libGVDb21wb25lbnQsXHJcbiAgICBDb250ZXh0SXRlbUNvbXBvbmVudCxcclxuICAgIExpc3RJdGVtRGlyZWN0aXZlLFxyXG4gICAgQXN5bmNQaXBlLFxyXG4gICAgS2V5VmFsdWVQaXBlLFxyXG4gICAgVHJhbnNsYXRlTW9kdWxlXHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ29udGV4dExpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgcHVibGljIGNvbnRleHRDb25maWdzOiBDb250ZXh0U2VydmljZU9wdGlvbnM7XHJcbiAgcHJpdmF0ZSBjb250ZXh0c0luaXRpYWw6IENvbnRleHRzTGlzdCA9IHsgb3VyczogW10gfTtcclxuICBjb250ZXh0cyQ6IEJlaGF2aW9yU3ViamVjdDxDb250ZXh0c0xpc3Q+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChcclxuICAgIHRoaXMuY29udGV4dHNJbml0aWFsXHJcbiAgKTtcclxuXHJcbiAgY2hhbmdlJCA9IG5ldyBSZXBsYXlTdWJqZWN0PHZvaWQ+KDEpO1xyXG5cclxuICBwcml2YXRlIGNoYW5nZSQkOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IGNvbnRleHRzKCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICByZXR1cm4gdGhpcy5fY29udGV4dHM7XHJcbiAgfVxyXG4gIHNldCBjb250ZXh0cyh2YWx1ZTogQ29udGV4dHNMaXN0KSB7XHJcbiAgICB0aGlzLl9jb250ZXh0cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5uZXh0KCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2NvbnRleHRzOiBDb250ZXh0c0xpc3QgPSB7IG91cnM6IFtdIH07XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGVkQ29udGV4dCgpOiBEZXRhaWxlZENvbnRleHQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkQ29udGV4dDtcclxuICB9XHJcbiAgc2V0IHNlbGVjdGVkQ29udGV4dCh2YWx1ZTogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RlZENvbnRleHQgPSB2YWx1ZTtcclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zZWxlY3RlZENvbnRleHQ6IERldGFpbGVkQ29udGV4dDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgbWFwKCk6IElnb01hcCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbWFwO1xyXG4gIH1cclxuICBzZXQgbWFwKHZhbHVlOiBJZ29NYXApIHtcclxuICAgIHRoaXMuX21hcCA9IHZhbHVlO1xyXG4gIH1cclxuICBwcml2YXRlIF9tYXA6IElnb01hcDtcclxuXHJcbiAgQElucHV0KClcclxuICBnZXQgZGVmYXVsdENvbnRleHRJZCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuY29udGV4dENvbmZpZ3NcclxuICAgICAgPyB0aGlzLl9kZWZhdWx0Q29udGV4dElkXHJcbiAgICAgIDogKHRoaXMuc3RvcmFnZVNlcnZpY2UuZ2V0KCdmYXZvcml0ZS5jb250ZXh0LnVyaScpIGFzIHN0cmluZykgfHxcclxuICAgICAgICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQ7XHJcbiAgfVxyXG4gIHNldCBkZWZhdWx0Q29udGV4dElkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX2RlZmF1bHRDb250ZXh0SWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZGVmYXVsdENvbnRleHRJZDogc3RyaW5nO1xyXG5cclxuICBwdWJsaWMgY29sbGFwc2VkOiB7IGNvbnRleHRTY29wZSB9W10gPSBbXTtcclxuXHJcbiAgQE91dHB1dCgpIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSB1bnNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBlZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBzYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNsb25lID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIGNyZWF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyB0aXRsZTogc3RyaW5nOyBlbXB0eTogYm9vbGVhbiB9PigpO1xyXG4gIEBPdXRwdXQoKSBoaWRlID0gbmV3IEV2ZW50RW1pdHRlcjxEZXRhaWxlZENvbnRleHQ+KCk7XHJcbiAgQE91dHB1dCgpIHNob3cgPSBuZXcgRXZlbnRFbWl0dGVyPERldGFpbGVkQ29udGV4dD4oKTtcclxuICBAT3V0cHV0KCkgc2hvd0hpZGRlbkNvbnRleHRzID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIEBPdXRwdXQoKSBmYXZvcml0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VQZXJtaXNzaW9ucyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBtYW5hZ2VUb29scyA9IG5ldyBFdmVudEVtaXR0ZXI8RGV0YWlsZWRDb250ZXh0PigpO1xyXG4gIEBPdXRwdXQoKSBmaWx0ZXJQZXJtaXNzaW9uc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFxyXG4gICAgQ29udGV4dFVzZXJQZXJtaXNzaW9uW11cclxuICA+KCk7XHJcblxyXG4gIHB1YmxpYyB0aXRsZU1hcHBpbmcgPSB7XHJcbiAgICBvdXJzOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIub3VyQ29udGV4dHMnLFxyXG4gICAgc2hhcmVkOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc2hhcmVkQ29udGV4dHMnLFxyXG4gICAgcHVibGljOiAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIucHVibGljQ29udGV4dHMnXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHVzZXJzOiBDb250ZXh0UHJvZmlsc1tdO1xyXG4gIHB1YmxpYyBwZXJtaXNzaW9uczogQ29udGV4dFVzZXJQZXJtaXNzaW9uW10gPSBbXTtcclxuXHJcbiAgcHVibGljIGFjdGlvblN0b3JlID0gbmV3IEFjdGlvblN0b3JlKFtdKTtcclxuICBwdWJsaWMgYWN0aW9uYmFyTW9kZSA9IEFjdGlvbmJhck1vZGUuT3ZlcmxheTtcclxuXHJcbiAgcHVibGljIGNvbG9yID0gJ3ByaW1hcnknO1xyXG5cclxuICBwdWJsaWMgc2hvd0hpZGRlbiA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBDb250ZXh0IGZpbHRlciB0ZXJtXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBzZXQgdGVybSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl90ZXJtID0gdmFsdWU7XHJcbiAgICB0aGlzLm5leHQoKTtcclxuICB9XHJcbiAgZ2V0IHRlcm0oKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl90ZXJtO1xyXG4gIH1cclxuICBwdWJsaWMgX3Rlcm06IHN0cmluZyA9ICcnO1xyXG5cclxuICBnZXQgc29ydGVkQWxwaGEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVkQWxwaGE7XHJcbiAgfVxyXG4gIHNldCBzb3J0ZWRBbHBoYSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fc29ydGVkQWxwaGEgPSB2YWx1ZTtcclxuICAgIHRoaXMubmV4dCgpO1xyXG4gIH1cclxuICBwcml2YXRlIF9zb3J0ZWRBbHBoYTogYm9vbGVhbiA9IHVuZGVmaW5lZDtcclxuXHJcbiAgcHVibGljIHNob3dDb250ZXh0RmlsdGVyID0gQ29udGV4dExpc3RDb250cm9sc0VudW0uYWx3YXlzO1xyXG5cclxuICBwdWJsaWMgdGhyZXNob2xkVG9GaWx0ZXIgPSA1O1xyXG5cclxuICBnZXQgaXNFbXB0eSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLm91cnMubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnB1YmxpYz8ubGVuZ3RoICYmXHJcbiAgICAgICF0aGlzLmNvbnRleHRzLnNoYXJlZD8ubGVuZ3RoXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNkUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHB1YmxpYyBjb25maWdTZXJ2aWNlOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHVibGljIGF1dGg6IEF1dGhTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBkaWFsb2c6IE1hdERpYWxvZyxcclxuICAgIHByaXZhdGUgbGFuZ3VhZ2VTZXJ2aWNlOiBMYW5ndWFnZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHN0b3JhZ2VTZXJ2aWNlOiBTdG9yYWdlU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5jb250ZXh0Q29uZmlncyA9IHRoaXMuY29uZmlnU2VydmljZS5nZXRDb25maWcoJ2NvbnRleHQnKTtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJCA9IHRoaXMuY2hhbmdlJFxyXG4gICAgICAucGlwZShkZWJvdW5jZSgoKSA9PiB0aW1lcig1MCkpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLmNvbnRleHRzJC5uZXh0KHRoaXMuZmlsdGVyQ29udGV4dHNMaXN0KHRoaXMuY29udGV4dHMpKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgdGhpcy5hY3Rpb25TdG9yZS5sb2FkKFtcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnZW1wdHlDb250ZXh0JyxcclxuICAgICAgICB0aXRsZTogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZW1wdHlDb250ZXh0J1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1vdXRsaW5lJyxcclxuICAgICAgICB0b29sdGlwOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5lbXB0eUNvbnRleHRUb29sdGlwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaGFuZGxlcjogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5jcmVhdGVDb250ZXh0KHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIGlkOiAnY29udGV4dEZyb21NYXAnLFxyXG4gICAgICAgIHRpdGxlOiB0aGlzLmxhbmd1YWdlU2VydmljZS50cmFuc2xhdGUuaW5zdGFudChcclxuICAgICAgICAgICdpZ28uY29udGV4dC5jb250ZXh0TWFuYWdlci5jb250ZXh0TWFwJ1xyXG4gICAgICAgICksXHJcbiAgICAgICAgaWNvbjogJ21hcC1jaGVjaycsXHJcbiAgICAgICAgdG9vbHRpcDogdGhpcy5sYW5ndWFnZVNlcnZpY2UudHJhbnNsYXRlLmluc3RhbnQoXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuY29udGV4dE1hcFRvb2x0aXAnXHJcbiAgICAgICAgKSxcclxuICAgICAgICBoYW5kbGVyOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZUNvbnRleHQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIG5leHQoKSB7XHJcbiAgICB0aGlzLmNoYW5nZSQubmV4dCgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWx0ZXJDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCk6IENvbnRleHRzTGlzdCB7XHJcbiAgICBpZiAodGhpcy50ZXJtID09PSAnJykge1xyXG4gICAgICBpZiAodGhpcy5zb3J0ZWRBbHBoYSkge1xyXG4gICAgICAgIGNvbnRleHRzID0gdGhpcy5zb3J0Q29udGV4dHNMaXN0KGNvbnRleHRzKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBvdXJzID0gY29udGV4dHMub3Vycy5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICBjb25zdCBmaWx0ZXJOb3JtYWxpemVkID0gdGhpcy50ZXJtXHJcbiAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBsZXQgdXBkYXRlQ29udGV4dHM6IENvbnRleHRzTGlzdCA9IHtcclxuICAgICAgICBvdXJzXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBpZiAodGhpcy5jb250ZXh0cy5wdWJsaWMpIHtcclxuICAgICAgICBjb25zdCBwdWJsaWNzID0gY29udGV4dHMucHVibGljLmZpbHRlcigoY29udGV4dCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyTm9ybWFsaXplZCA9IHRoaXMudGVybVxyXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxyXG4gICAgICAgICAgICAubm9ybWFsaXplKCdORkQnKVxyXG4gICAgICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpO1xyXG4gICAgICAgICAgY29uc3QgY29udGV4dFRpdGxlTm9ybWFsaXplZCA9IGNvbnRleHQudGl0bGVcclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIHJldHVybiBjb250ZXh0VGl0bGVOb3JtYWxpemVkLmluY2x1ZGVzKGZpbHRlck5vcm1hbGl6ZWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHVwZGF0ZUNvbnRleHRzLnB1YmxpYyA9IHB1YmxpY3M7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmNvbnRleHRzLnNoYXJlZCkge1xyXG4gICAgICAgIGNvbnN0IHNoYXJlZCA9IGNvbnRleHRzLnNoYXJlZC5maWx0ZXIoKGNvbnRleHQpID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlck5vcm1hbGl6ZWQgPSB0aGlzLnRlcm1cclxuICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcclxuICAgICAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKTtcclxuICAgICAgICAgIGNvbnN0IGNvbnRleHRUaXRsZU5vcm1hbGl6ZWQgPSBjb250ZXh0LnRpdGxlXHJcbiAgICAgICAgICAgIC50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJyk7XHJcbiAgICAgICAgICByZXR1cm4gY29udGV4dFRpdGxlTm9ybWFsaXplZC5pbmNsdWRlcyhmaWx0ZXJOb3JtYWxpemVkKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB1cGRhdGVDb250ZXh0cy5zaGFyZWQgPSBzaGFyZWQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLnNvcnRlZEFscGhhKSB7XHJcbiAgICAgICAgdXBkYXRlQ29udGV4dHMgPSB0aGlzLnNvcnRDb250ZXh0c0xpc3QodXBkYXRlQ29udGV4dHMpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiB1cGRhdGVDb250ZXh0cztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5jaGFuZ2UkJC51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dGaWx0ZXIoKSB7XHJcbiAgICBzd2l0Y2ggKHRoaXMuc2hvd0NvbnRleHRGaWx0ZXIpIHtcclxuICAgICAgY2FzZSBDb250ZXh0TGlzdENvbnRyb2xzRW51bS5hbHdheXM6XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIGNhc2UgQ29udGV4dExpc3RDb250cm9sc0VudW0ubmV2ZXI6XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGxldCB0b3RhbExlbmd0aCA9IHRoaXMuY29udGV4dHMub3Vycy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdWJsaWNcclxuICAgICAgICAgID8gKHRvdGFsTGVuZ3RoICs9IHRoaXMuY29udGV4dHMucHVibGljLmxlbmd0aClcclxuICAgICAgICAgIDogKHRvdGFsTGVuZ3RoICs9IDApO1xyXG4gICAgICAgIHRoaXMuY29udGV4dHMuc2hhcmVkXHJcbiAgICAgICAgICA/ICh0b3RhbExlbmd0aCArPSB0aGlzLmNvbnRleHRzLnNoYXJlZC5sZW5ndGgpXHJcbiAgICAgICAgICA6ICh0b3RhbExlbmd0aCArPSAwKTtcclxuICAgICAgICBpZiAodG90YWxMZW5ndGggPj0gdGhpcy50aHJlc2hvbGRUb0ZpbHRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNvcnRDb250ZXh0c0xpc3QoY29udGV4dHM6IENvbnRleHRzTGlzdCkge1xyXG4gICAgaWYgKGNvbnRleHRzKSB7XHJcbiAgICAgIGNvbnN0IGNvbnRleHRzTGlzdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29udGV4dHMpKTtcclxuICAgICAgY29udGV4dHNMaXN0Lm91cnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgaWYgKGNvbnRleHRzTGlzdC5zaGFyZWQpIHtcclxuICAgICAgICBjb250ZXh0c0xpc3Quc2hhcmVkLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA8IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAtMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbGl6ZShhLnRpdGxlKSA+IHRoaXMubm9ybWFsaXplKGIudGl0bGUpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoY29udGV4dHNMaXN0LnB1YmxpYykge1xyXG4gICAgICAgIGNvbnRleHRzTGlzdC5wdWJsaWMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpIDwgdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsaXplKGEudGl0bGUpID4gdGhpcy5ub3JtYWxpemUoYi50aXRsZSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIDE7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gY29udGV4dHNMaXN0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbm9ybWFsaXplKHN0cjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gc3RyXHJcbiAgICAgIC5ub3JtYWxpemUoJ05GRCcpXHJcbiAgICAgIC5yZXBsYWNlKC9bXFx1MDMwMC1cXHUwMzZmXS9nLCAnJylcclxuICAgICAgLnRvTG93ZXJDYXNlKCk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTb3J0KHNvcnRBbHBoYTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5zb3J0ZWRBbHBoYSA9IHNvcnRBbHBoYTtcclxuICB9XHJcblxyXG4gIGNsZWFyRmlsdGVyKCkge1xyXG4gICAgdGhpcy50ZXJtID0gJyc7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVDb250ZXh0KGVtcHR5PzogYm9vbGVhbikge1xyXG4gICAgdGhpcy5kaWFsb2dcclxuICAgICAgLm9wZW4oQm9va21hcmtEaWFsb2dDb21wb25lbnQsIHsgZGlzYWJsZUNsb3NlOiBmYWxzZSB9KVxyXG4gICAgICAuYWZ0ZXJDbG9zZWQoKVxyXG4gICAgICAucGlwZSh0YWtlKDEpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh0aXRsZTogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgaWYgKHRpdGxlKSB7XHJcbiAgICAgICAgICB0aGlzLmNyZWF0ZS5lbWl0KHsgdGl0bGUsIGVtcHR5IH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXRQZXJtaXNzaW9uKHVzZXI/KTogQ29udGV4dFVzZXJQZXJtaXNzaW9uIHtcclxuICAgIGlmICh1c2VyKSB7XHJcbiAgICAgIGNvbnN0IHBlcm1pc3Npb24gPSB0aGlzLnBlcm1pc3Npb25zLmZpbmQoKHApID0+IHAubmFtZSA9PT0gdXNlci5uYW1lKTtcclxuICAgICAgcmV0dXJuIHBlcm1pc3Npb247XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyLCBwYXJlbnQ/KSB7XHJcbiAgICBjb25zdCBwZXJtaXNzaW9uID0gdGhpcy5nZXRQZXJtaXNzaW9uKHVzZXIpO1xyXG4gICAgaWYgKHBlcm1pc3Npb24pIHtcclxuICAgICAgcGVybWlzc2lvbi5jaGVja2VkID0gIXBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgJ2NvbnRleHRzLnBlcm1pc3Npb25zLicgKyBwZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICk7XHJcbiAgICAgIHBlcm1pc3Npb24uaW5kZXRlcm1pbmF0ZSA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJlbnQpIHtcclxuICAgICAgbGV0IGluZGV0ZXJtaW5hdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiBwYXJlbnQuY2hpbGRzKSB7XHJcbiAgICAgICAgY29uc3QgY1Blcm1pc3Npb24gPSB0aGlzLmdldFBlcm1pc3Npb24oYyk7XHJcbiAgICAgICAgaWYgKGNQZXJtaXNzaW9uLmNoZWNrZWQgIT09IHBlcm1pc3Npb24uY2hlY2tlZCkge1xyXG4gICAgICAgICAgaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcGFyZW50UGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihwYXJlbnQpO1xyXG4gICAgICBpZiAocGFyZW50UGVybWlzc2lvbikge1xyXG4gICAgICAgIHBhcmVudFBlcm1pc3Npb24uY2hlY2tlZCA9IHBlcm1pc3Npb24uY2hlY2tlZDtcclxuICAgICAgICB0aGlzLnN0b3JhZ2VTZXJ2aWNlLnNldChcclxuICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgcGFyZW50UGVybWlzc2lvbi5uYW1lLFxyXG4gICAgICAgICAgcGVybWlzc2lvbi5jaGVja2VkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBwYXJlbnRQZXJtaXNzaW9uLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHVzZXIuY2hpbGRzKSB7XHJcbiAgICAgIGZvciAoY29uc3QgYyBvZiB1c2VyLmNoaWxkcykge1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuUGVybWlzc2lvbiA9IHRoaXMuZ2V0UGVybWlzc2lvbihjKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBjaGlsZHJlblBlcm1pc3Npb24gJiZcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkICE9PSBwZXJtaXNzaW9uLmNoZWNrZWRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGNoaWxkcmVuUGVybWlzc2lvbi5jaGVja2VkID0gcGVybWlzc2lvbi5jaGVja2VkO1xyXG4gICAgICAgICAgdGhpcy5zdG9yYWdlU2VydmljZS5zZXQoXHJcbiAgICAgICAgICAgICdjb250ZXh0cy5wZXJtaXNzaW9ucy4nICsgY2hpbGRyZW5QZXJtaXNzaW9uLm5hbWUsXHJcbiAgICAgICAgICAgIHBlcm1pc3Npb24uY2hlY2tlZFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbHRlclBlcm1pc3Npb25zQ2hhbmdlZC5lbWl0KHRoaXMucGVybWlzc2lvbnMpO1xyXG4gIH1cclxuXHJcbiAgaGlkZUNvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IHRydWU7XHJcbiAgICBpZiAoIXRoaXMuc2hvd0hpZGRlbikge1xyXG4gICAgICBjb25zdCBjb250ZXh0czogQ29udGV4dHNMaXN0ID0geyBvdXJzOiBbXSwgc2hhcmVkOiBbXSwgcHVibGljOiBbXSB9O1xyXG4gICAgICBjb250ZXh0cy5vdXJzID0gdGhpcy5jb250ZXh0cy5vdXJzLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnNoYXJlZCA9IHRoaXMuY29udGV4dHMuc2hhcmVkLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIGNvbnRleHRzLnB1YmxpYyA9IHRoaXMuY29udGV4dHMucHVibGljLmZpbHRlcigoYykgPT4gYy5pZCAhPT0gY29udGV4dC5pZCk7XHJcbiAgICAgIHRoaXMuY29udGV4dHMgPSBjb250ZXh0cztcclxuICAgIH1cclxuICAgIHRoaXMuaGlkZS5lbWl0KGNvbnRleHQpO1xyXG4gIH1cclxuXHJcbiAgc2hvd0NvbnRleHQoY29udGV4dDogRGV0YWlsZWRDb250ZXh0KSB7XHJcbiAgICBjb250ZXh0LmhpZGRlbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5zaG93LmVtaXQoY29udGV4dCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZ28tbGlzdCBbbmF2aWdhdGlvbl09XCJ0cnVlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImNvbnRleHQtZmlsdGVyLWNvbnRhaW5lclwiPlxyXG4gICAgPG1hdC1mb3JtLWZpZWxkICpuZ0lmPVwic2hvd0ZpbHRlcigpXCIgZmxvYXRMYWJlbD1cImFsd2F5c1wiPlxyXG4gICAgICA8bWF0LWxhYmVsPnt7XHJcbiAgICAgICAgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclBsYWNlSG9sZGVyJyB8IHRyYW5zbGF0ZVxyXG4gICAgICB9fTwvbWF0LWxhYmVsPlxyXG4gICAgICA8aW5wdXRcclxuICAgICAgICBtYXRJbnB1dFxyXG4gICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuZmlsdGVyUGxhY2VIb2xkZXInIHwgdHJhbnNsYXRlXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbKG5nTW9kZWwpXT1cInRlcm1cIlxyXG4gICAgICAvPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgbWF0U3VmZml4XHJcbiAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIlxyXG4gICAgICAgICpuZ0lmPVwidGVybS5sZW5ndGhcIlxyXG4gICAgICAgIGFyaWEtbGFiZWw9XCJDbGVhclwiXHJcbiAgICAgICAgY29sb3I9XCJ3YXJuXCJcclxuICAgICAgICAoY2xpY2spPVwiY2xlYXJGaWx0ZXIoKVwiXHJcbiAgICAgID5cclxuICAgICAgICA8bWF0LWljb24gc3ZnSWNvbj1cImNsb3NlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcbiAgICA8L21hdC1mb3JtLWZpZWxkPlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJhY3Rpb25zLWNvbnRhaW5lclwiPlxyXG4gICAgICA8YnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhc29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiXHJcbiAgICAgICAgICAnaWdvLmNvbnRleHQuY29udGV4dE1hbmFnZXIuc29ydEFscGhhYmV0aWNhbGx5JyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgIFwiXHJcbiAgICAgICAgbWF0VG9vbHRpcFNob3dEZWxheT1cIjUwMFwiXHJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQodHJ1ZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uXHJcbiAgICAgICAgICBjb2xvcj1cInByaW1hcnlcIlxyXG4gICAgICAgICAgc3ZnSWNvbj1cInNvcnQtYWxwaGFiZXRpY2FsLXZhcmlhbnRcIlxyXG4gICAgICAgID48L21hdC1pY29uPlxyXG4gICAgICA8L2J1dHRvbj5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwic29ydGVkQWxwaGFcIlxyXG4gICAgICAgIGNsYXNzPVwic29ydC1hbHBoYVwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNvcnRDb250ZXh0T3JkZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlU29ydChmYWxzZSlcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwid2FyblwiIHN2Z0ljb249XCJzb3J0LXZhcmlhbnQtcmVtb3ZlXCI+PC9tYXQtaWNvbj5cclxuICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICA8aWdvLWFjdGlvbmJhclxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cImFkZC1jb250ZXh0LWJ1dHRvblwiXHJcbiAgICAgICAgW2ljb25Db2xvcl09XCJjb2xvclwiXHJcbiAgICAgICAgW3N0b3JlXT1cImFjdGlvblN0b3JlXCJcclxuICAgICAgICBbd2l0aEljb25dPVwidHJ1ZVwiXHJcbiAgICAgICAgaWNvbj1cInBsdXNcIlxyXG4gICAgICAgIFt3aXRoVGl0bGVdPVwiYWN0aW9uYmFyTW9kZSA9PT0gJ292ZXJsYXknXCJcclxuICAgICAgICBbaG9yaXpvbnRhbF09XCJmYWxzZVwiXHJcbiAgICAgICAgW21vZGVdPVwiYWN0aW9uYmFyTW9kZVwiXHJcbiAgICAgID5cclxuICAgICAgPC9pZ28tYWN0aW9uYmFyPlxyXG5cclxuICAgICAgPGJ1dHRvblxyXG4gICAgICAgICpuZ0lmPVwiYXV0aC5hdXRoZW50aWNhdGVkICYmIGNvbnRleHRDb25maWdzXCJcclxuICAgICAgICBjbGFzcz1cInVzZXJzLWZpbHRlclwiXHJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXHJcbiAgICAgICAgW21hdFRvb2x0aXBdPVwiJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLmZpbHRlclVzZXInIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICBtYXRUb29sdGlwU2hvd0RlbGF5PVwiNTAwXCJcclxuICAgICAgICBbbWF0TWVudVRyaWdnZXJGb3JdPVwiYWNjb3VudE1lbnVcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPG1hdC1pY29uIGNvbG9yPVwicHJpbWFyeVwiIHN2Z0ljb249XCJmaWx0ZXItbWVudVwiPjwvbWF0LWljb24+XHJcbiAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8bWF0LW1lbnUgI2FjY291bnRNZW51PVwibWF0TWVudVwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHVzZXIgb2YgdXNlcnNcIj5cclxuICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgKm5nSWY9XCIhdXNlci5jaGlsZHM7IGVsc2Ugd2l0aFN1Yk1lbnVcIlxyXG4gICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgIGNsYXNzPVwicHJvZmlsLW1lbnVcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmluZGV0ZXJtaW5hdGVcIlxyXG4gICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkodXNlcilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICA8c3Bhbj57eyB1c2VyLnRpdGxlIH19PC9zcGFuPlxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICA8bmctdGVtcGxhdGUgI3dpdGhTdWJNZW51PlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgbWF0LW1lbnUtaXRlbVxyXG4gICAgICAgICAgICAgIFttYXRNZW51VHJpZ2dlckZvcl09XCJzdWJBY2NvdW50TWVudVwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICA8bWF0LWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKHVzZXIpLmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiZ2V0UGVybWlzc2lvbih1c2VyKS5pbmRldGVybWluYXRlXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJoYW5kbGVUb2dnbGVDYXRlZ29yeSh1c2VyKVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDxzcGFuPnt7IHVzZXIudGl0bGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPG1hdC1tZW51ICNzdWJBY2NvdW50TWVudT1cIm1hdE1lbnVcIj5cclxuICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBtYXQtbWVudS1pdGVtXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpbGQgb2YgdXNlci5jaGlsZHNcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJwcm9maWwtbWVudVwiXHJcbiAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1jaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJnZXRQZXJtaXNzaW9uKGNoaWxkKS5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwiaGFuZGxlVG9nZ2xlQ2F0ZWdvcnkoY2hpbGQsIHVzZXIpXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAge3sgY2hpbGQudGl0bGUgfX1cclxuICAgICAgICAgICAgICAgIDwvbWF0LWNoZWNrYm94PlxyXG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L21hdC1tZW51PlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgPGJ1dHRvbiBtYXQtbWVudS1pdGVtIGNsYXNzPVwicHJvZmlsLW1lbnVcIj5cclxuICAgICAgICAgIDxtYXQtY2hlY2tib3hcclxuICAgICAgICAgICAgW2NoZWNrZWRdPVwic2hvd0hpZGRlblwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAoY2hhbmdlKT1cInNob3dIaWRkZW5Db250ZXh0cy5lbWl0KClcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgPC9tYXQtY2hlY2tib3g+XHJcbiAgICAgICAgICA8c3Bhbj5cclxuICAgICAgICAgICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLnNob3dIaWRkZW4nIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgIDwvbWF0LW1lbnU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuXHJcbiAgPG5nLXRlbXBsYXRlXHJcbiAgICBuZ0ZvclxyXG4gICAgbGV0LWdyb3VwQ29udGV4dHNcclxuICAgIFtuZ0Zvck9mXT1cIiRhbnkoY29udGV4dHMkIHwgYXN5bmMpIHwga2V5dmFsdWVcIlxyXG4gID5cclxuICAgIDxpZ28tY29sbGFwc2libGVcclxuICAgICAgKm5nSWY9XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlLmxlbmd0aCAmJiBhdXRoLmF1dGhlbnRpY2F0ZWRcIlxyXG4gICAgICBbdGl0bGVdPVwidGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XSB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgIFtjb2xsYXBzZWRdPVwiJGFueShjb2xsYXBzZWRbdGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XV0pXCJcclxuICAgICAgKHRvZ2dsZSk9XCJjb2xsYXBzZWRbdGl0bGVNYXBwaW5nWyRhbnkoZ3JvdXBDb250ZXh0cykua2V5XV0gPSAkYW55KCRldmVudClcIlxyXG4gICAgPlxyXG4gICAgICA8bmctdGVtcGxhdGUgbmdGb3IgbGV0LWNvbnRleHQgW25nRm9yT2ZdPVwiJGFueShncm91cENvbnRleHRzKS52YWx1ZVwiPlxyXG4gICAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgICBpZ29MaXN0SXRlbVxyXG4gICAgICAgICAgY29sb3I9XCJhY2NlbnRcIlxyXG4gICAgICAgICAgW3NlbGVjdGVkXT1cInNlbGVjdGVkQ29udGV4dCAmJiBzZWxlY3RlZENvbnRleHQudXJpID09PSBjb250ZXh0LnVyaVwiXHJcbiAgICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICAgIFtkZWZhdWx0XT1cIlxyXG4gICAgICAgICAgICBjb250ZXh0LmlkICYmXHJcbiAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbnRleHRJZCAmJlxyXG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQuaWRcclxuICAgICAgICAgIFwiXHJcbiAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoY2xvbmUpPVwiY2xvbmUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAoc2F2ZSk9XCJzYXZlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGhpZGUpPVwiaGlkZUNvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNob3cpPVwic2hvd0NvbnRleHQoY29udGV4dClcIlxyXG4gICAgICAgICAgKGZhdm9yaXRlKT1cImZhdm9yaXRlLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVRvb2xzKT1cIm1hbmFnZVRvb2xzLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKG1hbmFnZVBlcm1pc3Npb25zKT1cIm1hbmFnZVBlcm1pc3Npb25zLmVtaXQoY29udGV4dClcIlxyXG4gICAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgICAodW5zZWxlY3QpPVwidW5zZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvaWdvLWNvbGxhcHNpYmxlPlxyXG5cclxuICAgIDxuZy1jb250YWluZXJcclxuICAgICAgKm5nSWY9XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlLmxlbmd0aCAmJiAhYXV0aC5hdXRoZW50aWNhdGVkXCJcclxuICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgIDxuZy10ZW1wbGF0ZSBuZ0ZvciBsZXQtY29udGV4dCBbbmdGb3JPZl09XCIkYW55KGdyb3VwQ29udGV4dHMpLnZhbHVlXCI+XHJcbiAgICAgIDxpZ28tY29udGV4dC1pdGVtXHJcbiAgICAgICAgaWdvTGlzdEl0ZW1cclxuICAgICAgICBjb2xvcj1cImFjY2VudFwiXHJcbiAgICAgICAgW3Nob3dGYXZvcml0ZV09XCJcclxuICAgICAgICAgIGNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCdmYXZvcml0ZUNvbnRleHQ0Tm9uQXV0aGVudGljYXRlZCcpXHJcbiAgICAgICAgXCJcclxuICAgICAgICBbc2VsZWN0ZWRdPVwic2VsZWN0ZWRDb250ZXh0ICYmIHNlbGVjdGVkQ29udGV4dC51cmkgPT09IGNvbnRleHQudXJpXCJcclxuICAgICAgICBbY29udGV4dF09XCJjb250ZXh0XCJcclxuICAgICAgICBbZGVmYXVsdF09XCJcclxuICAgICAgICAgIGNvbnRleHRDb25maWdzXHJcbiAgICAgICAgICAgID8gZGVmYXVsdENvbnRleHRJZCA9PT0gY29udGV4dC5pZFxyXG4gICAgICAgICAgICA6IGRlZmF1bHRDb250ZXh0SWQgPT09IGNvbnRleHQudXJpXHJcbiAgICAgICAgXCJcclxuICAgICAgICAoZmF2b3JpdGUpPVwiZmF2b3JpdGUuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgKHNlbGVjdCk9XCJzZWxlY3QuZW1pdChjb250ZXh0KVwiXHJcbiAgICAgICAgKHVuc2VsZWN0KT1cInVuc2VsZWN0LmVtaXQoY29udGV4dClcIlxyXG4gICAgICA+XHJcbiAgICAgIDwvaWdvLWNvbnRleHQtaXRlbT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgPGRpdiAqbmdJZj1cImlzRW1wdHlcIiBjbGFzcz1cIm5vLXJlc3VsdFwiPlxyXG4gICAge3sgJ2lnby5jb250ZXh0LmNvbnRleHRNYW5hZ2VyLm5vUmVzdWx0JyB8IHRyYW5zbGF0ZSB9fVxyXG4gIDwvZGl2PlxyXG48L2lnby1saXN0PlxyXG4iXX0=
|