@alfresco/adf-content-services 8.1.0-15865093855 → 8.1.0-15928551305
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/aspect-list/aspect-list-dialog.component.mjs +5 -6
- package/esm2022/lib/aspect-list/aspect-list.component.mjs +5 -6
- package/esm2022/lib/breadcrumb/breadcrumb.component.mjs +6 -7
- package/esm2022/lib/breadcrumb/dropdown-breadcrumb.component.mjs +4 -5
- package/esm2022/lib/category/categories-management/categories-management.component.mjs +10 -11
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata-header.component.mjs +4 -5
- package/esm2022/lib/content-metadata/components/content-metadata/content-metadata.component.mjs +6 -7
- package/esm2022/lib/content-metadata/components/content-metadata-card/content-metadata-card.component.mjs +4 -5
- package/esm2022/lib/content-node-selector/content-node-selector-panel/content-node-selector-panel.component.mjs +8 -9
- package/esm2022/lib/content-node-selector/content-node-selector.component.mjs +6 -7
- package/esm2022/lib/content-node-selector/site-dropdown/sites-dropdown.component.mjs +4 -4
- package/esm2022/lib/content-node-share/content-node-share.dialog.mjs +11 -12
- package/esm2022/lib/content-type/content-type-dialog.component.mjs +7 -8
- package/esm2022/lib/content.module.mjs +2 -2
- package/esm2022/lib/dialogs/category-selector/category-selector.dialog.mjs +5 -6
- package/esm2022/lib/dialogs/folder/folder.dialog.mjs +7 -8
- package/esm2022/lib/dialogs/library/library.dialog.mjs +8 -9
- package/esm2022/lib/dialogs/node-lock/node-lock.dialog.mjs +9 -10
- package/esm2022/lib/directives/content-directive.module.mjs +2 -2
- package/esm2022/lib/directives/node-counter.directive.mjs +4 -5
- package/esm2022/lib/document-list/components/document-list.component.mjs +6 -7
- package/esm2022/lib/document-list/components/file-auto-download/file-auto-download.component.mjs +7 -8
- package/esm2022/lib/document-list/components/library-name-column/library-name-column.component.mjs +5 -7
- package/esm2022/lib/document-list/components/library-role-column/library-role-column.component.mjs +5 -7
- package/esm2022/lib/document-list/components/library-status-column/library-status-column.component.mjs +5 -7
- package/esm2022/lib/document-list/components/name-column/name-column.component.mjs +5 -7
- package/esm2022/lib/document-list/document-list.module.mjs +1 -5
- package/esm2022/lib/new-version-uploader/new-version-uploader.dialog.mjs +5 -6
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-dialog.component.mjs +5 -6
- package/esm2022/lib/permission-manager/components/add-permission/add-permission-panel.component.mjs +7 -8
- package/esm2022/lib/permission-manager/components/add-permission/add-permission.component.mjs +4 -5
- package/esm2022/lib/permission-manager/components/permission-container/permission-container.component.mjs +6 -7
- package/esm2022/lib/permission-manager/components/permission-list/permission-list.component.mjs +5 -6
- package/esm2022/lib/permission-manager/components/user-role-column/user-role-column.component.mjs +4 -5
- package/esm2022/lib/search/components/search-check-list/search-check-list.component.mjs +6 -7
- package/esm2022/lib/search/components/search-chip-autocomplete-input/search-chip-autocomplete-input.component.mjs +8 -9
- package/esm2022/lib/search/components/search-chip-list/search-chip-list.component.mjs +5 -6
- package/esm2022/lib/search/components/search-control.component.mjs +4 -5
- package/esm2022/lib/search/components/search-date-range-tabbed/search-date-range/search-date-range.component.mjs +8 -9
- package/esm2022/lib/search/components/search-datetime-range/search-datetime-range.component.mjs +4 -5
- package/esm2022/lib/search/components/search-facet-field/search-facet-field.component.mjs +6 -7
- package/esm2022/lib/search/components/search-filter/search-filter-card/search-filter-card.component.mjs +5 -6
- package/esm2022/lib/search/components/search-filter/search-filter.component.mjs +4 -5
- package/esm2022/lib/search/components/search-filter-autocomplete-chips/search-filter-autocomplete-chips.component.mjs +5 -6
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip/search-facet-chip.component.mjs +6 -7
- package/esm2022/lib/search/components/search-filter-chips/search-facet-chip-tabbed/search-facet-chip-tabbed.component.mjs +6 -7
- package/esm2022/lib/search/components/search-filter-chips/search-filter-chips.component.mjs +4 -5
- package/esm2022/lib/search/components/search-filter-chips/search-filter-menu-card/search-filter-menu-card.component.mjs +6 -7
- package/esm2022/lib/search/components/search-filter-chips/search-widget-chip/search-widget-chip.component.mjs +6 -7
- package/esm2022/lib/search/components/search-filter-container/search-filter-container.component.mjs +5 -6
- package/esm2022/lib/search/components/search-filter-tabbed/search-filter-tabbed.component.mjs +4 -5
- package/esm2022/lib/search/components/search-form/search-form.component.mjs +6 -7
- package/esm2022/lib/search/components/search-input/search-input.component.mjs +4 -5
- package/esm2022/lib/search/components/search-logical-filter/search-logical-filter.component.mjs +5 -6
- package/esm2022/lib/search/components/search-number-range/search-number-range.component.mjs +5 -6
- package/esm2022/lib/search/components/search-properties/search-properties.component.mjs +4 -4
- package/esm2022/lib/search/components/search-radio/search-radio.component.mjs +6 -7
- package/esm2022/lib/search/components/search-slider/search-slider.component.mjs +4 -5
- package/esm2022/lib/search/components/search-text/search-text.component.mjs +8 -9
- package/esm2022/lib/search/components/search.component.mjs +4 -5
- package/esm2022/lib/tag/tag-actions/tag-actions.component.mjs +6 -7
- package/esm2022/lib/tag/tags-creator/tags-creator.component.mjs +6 -7
- package/esm2022/lib/tree/components/tree.component.mjs +10 -11
- package/esm2022/lib/tree-view/components/tree-view.component.mjs +4 -5
- package/esm2022/lib/upload/components/file-uploading-dialog.component.mjs +6 -7
- package/esm2022/lib/upload/components/file-uploading-list-row.component.mjs +5 -6
- package/esm2022/lib/upload/components/upload-button.component.mjs +5 -6
- package/esm2022/lib/upload/components/upload-version-button.component.mjs +5 -6
- package/esm2022/lib/version-manager/version-comparison.component.mjs +4 -5
- package/esm2022/lib/version-manager/version-list.component.mjs +5 -6
- package/esm2022/lib/version-manager/version-manager.component.mjs +4 -5
- package/esm2022/lib/version-manager/version-upload.component.mjs +7 -8
- package/esm2022/lib/viewer/components/alfresco-viewer.component.mjs +6 -7
- package/fesm2022/adf-content-services.mjs +188 -192
- package/fesm2022/adf-content-services.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -25,7 +25,7 @@ import { MatCardModule } from '@angular/material/card';
|
|
|
25
25
|
import { ContentMetadataComponent } from '../content-metadata/content-metadata.component';
|
|
26
26
|
import { MatButtonModule } from '@angular/material/button';
|
|
27
27
|
import { MatIconModule } from '@angular/material/icon';
|
|
28
|
-
import {
|
|
28
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
29
29
|
import * as i0 from "@angular/core";
|
|
30
30
|
import * as i1 from "../../../common/services/content.service";
|
|
31
31
|
import * as i2 from "../../../aspect-list/services/node-aspect.service";
|
|
@@ -34,7 +34,6 @@ import * as i4 from "@angular/common";
|
|
|
34
34
|
import * as i5 from "@angular/material/card";
|
|
35
35
|
import * as i6 from "@angular/material/button";
|
|
36
36
|
import * as i7 from "@angular/material/icon";
|
|
37
|
-
import * as i8 from "@ngx-translate/core";
|
|
38
37
|
export class ContentMetadataCardComponent {
|
|
39
38
|
/**
|
|
40
39
|
* This flag displays/hides the metadata properties.
|
|
@@ -96,11 +95,11 @@ export class ContentMetadataCardComponent {
|
|
|
96
95
|
return !this.readOnly && this.hasAllowableOperations() && this.editAspectSupported;
|
|
97
96
|
}
|
|
98
97
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentMetadataCardComponent, deps: [{ token: i1.ContentService }, { token: i2.NodeAspectService }, { token: i3.VersionCompatibilityService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
99
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentMetadataCardComponent, isStandalone: true, selector: "adf-content-metadata-card", inputs: { node: "node", displayEmpty: "displayEmpty", displayAspect: "displayAspect", displayTags: "displayTags", displayCategories: "displayCategories", preset: "preset", readOnly: "readOnly", multi: "multi", editable: "editable", customPanels: "customPanels", displayDefaultProperties: "displayDefaultProperties" }, host: { classAttribute: "adf-content-metadata-card" }, usesOnChanges: true, ngImport: i0, template: "<mat-card appearance=\"outlined\" *ngIf=\"node\" class=\"adf-content-metadata-card-view\">\n <mat-card-content class=\"adf-content-metadata-card-view-content\">\n <adf-content-metadata\n [displayDefaultProperties]=\"displayDefaultProperties\"\n [expanded]=\"expanded\"\n [node]=\"node\"\n [displayEmpty]=\"displayEmpty\"\n [readOnly]=\"!editable\"\n [multi]=\"multi\"\n [displayAspect]=\"displayAspect\"\n [preset]=\"preset\"\n [displayTags]=\"displayTags\"\n [displayCategories]=\"displayCategories\"\n [customPanels]=\"customPanels\" />\n </mat-card-content>\n <mat-card-footer class=\"adf-content-metadata-card-footer adf-content-metadata-card-view-footer\">\n <div>\n <button *ngIf=\"isEditAspectSupported()\"\n mat-icon-button\n (click)=\"openAspectDialog()\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT_ASPECTS' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT_ASPECTS' | translate\"\n data-automation-id=\"meta-data-card-edit-aspect\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n </mat-card-footer>\n</mat-card>\n", styles: [".adf-content-metadata-card .adf-content-metadata-card-view{padding:0}.adf-content-metadata-card .adf-content-metadata-card-view .adf-content-metadata-card-view-content{margin-bottom:0}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer{margin:0;padding:8px 12px;border-top:1px solid var(--adf-theme-foreground-text-color-007);display:flex;place-content:stretch space-between;align-items:stretch;max-height:100%}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button{color:var(--adf-theme-foreground-text-color-054)}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button:hover{color:var(--adf-theme-foreground-text-color-087)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i5.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: ContentMetadataComponent, selector: "adf-content-metadata", inputs: ["node", "displayEmpty", "expanded", "multi", "preset", "displayDefaultProperties", "displayAspect", "copyToClipboardAction", "useChipsForMultiValueProperty", "displayTags", "displayCategories", "customPanels", "readOnly"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "
|
|
98
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentMetadataCardComponent, isStandalone: true, selector: "adf-content-metadata-card", inputs: { node: "node", displayEmpty: "displayEmpty", displayAspect: "displayAspect", displayTags: "displayTags", displayCategories: "displayCategories", preset: "preset", readOnly: "readOnly", multi: "multi", editable: "editable", customPanels: "customPanels", displayDefaultProperties: "displayDefaultProperties" }, host: { classAttribute: "adf-content-metadata-card" }, usesOnChanges: true, ngImport: i0, template: "<mat-card appearance=\"outlined\" *ngIf=\"node\" class=\"adf-content-metadata-card-view\">\n <mat-card-content class=\"adf-content-metadata-card-view-content\">\n <adf-content-metadata\n [displayDefaultProperties]=\"displayDefaultProperties\"\n [expanded]=\"expanded\"\n [node]=\"node\"\n [displayEmpty]=\"displayEmpty\"\n [readOnly]=\"!editable\"\n [multi]=\"multi\"\n [displayAspect]=\"displayAspect\"\n [preset]=\"preset\"\n [displayTags]=\"displayTags\"\n [displayCategories]=\"displayCategories\"\n [customPanels]=\"customPanels\" />\n </mat-card-content>\n <mat-card-footer class=\"adf-content-metadata-card-footer adf-content-metadata-card-view-footer\">\n <div>\n <button *ngIf=\"isEditAspectSupported()\"\n mat-icon-button\n (click)=\"openAspectDialog()\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT_ASPECTS' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT_ASPECTS' | translate\"\n data-automation-id=\"meta-data-card-edit-aspect\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n </mat-card-footer>\n</mat-card>\n", styles: [".adf-content-metadata-card .adf-content-metadata-card-view{padding:0}.adf-content-metadata-card .adf-content-metadata-card-view .adf-content-metadata-card-view-content{margin-bottom:0}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer{margin:0;padding:8px 12px;border-top:1px solid var(--adf-theme-foreground-text-color-007);display:flex;place-content:stretch space-between;align-items:stretch;max-height:100%}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button{color:var(--adf-theme-foreground-text-color-054)}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button:hover{color:var(--adf-theme-foreground-text-color-087)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatCardModule }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "directive", type: i5.MatCardContent, selector: "mat-card-content" }, { kind: "directive", type: i5.MatCardFooter, selector: "mat-card-footer" }, { kind: "component", type: ContentMetadataComponent, selector: "adf-content-metadata", inputs: ["node", "displayEmpty", "expanded", "multi", "preset", "displayDefaultProperties", "displayAspect", "copyToClipboardAction", "useChipsForMultiValueProperty", "displayTags", "displayCategories", "customPanels", "readOnly"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i6.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i7.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
100
99
|
}
|
|
101
100
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentMetadataCardComponent, decorators: [{
|
|
102
101
|
type: Component,
|
|
103
|
-
args: [{ selector: 'adf-content-metadata-card', standalone: true, imports: [CommonModule, MatCardModule, ContentMetadataComponent, MatButtonModule, MatIconModule,
|
|
102
|
+
args: [{ selector: 'adf-content-metadata-card', standalone: true, imports: [CommonModule, MatCardModule, ContentMetadataComponent, MatButtonModule, MatIconModule, TranslatePipe], encapsulation: ViewEncapsulation.None, host: { class: 'adf-content-metadata-card' }, template: "<mat-card appearance=\"outlined\" *ngIf=\"node\" class=\"adf-content-metadata-card-view\">\n <mat-card-content class=\"adf-content-metadata-card-view-content\">\n <adf-content-metadata\n [displayDefaultProperties]=\"displayDefaultProperties\"\n [expanded]=\"expanded\"\n [node]=\"node\"\n [displayEmpty]=\"displayEmpty\"\n [readOnly]=\"!editable\"\n [multi]=\"multi\"\n [displayAspect]=\"displayAspect\"\n [preset]=\"preset\"\n [displayTags]=\"displayTags\"\n [displayCategories]=\"displayCategories\"\n [customPanels]=\"customPanels\" />\n </mat-card-content>\n <mat-card-footer class=\"adf-content-metadata-card-footer adf-content-metadata-card-view-footer\">\n <div>\n <button *ngIf=\"isEditAspectSupported()\"\n mat-icon-button\n (click)=\"openAspectDialog()\"\n [attr.title]=\"'CORE.METADATA.ACTIONS.EDIT_ASPECTS' | translate\"\n [attr.aria-label]=\"'CORE.METADATA.ACCESSIBILITY.EDIT_ASPECTS' | translate\"\n data-automation-id=\"meta-data-card-edit-aspect\">\n <mat-icon>menu</mat-icon>\n </button>\n </div>\n </mat-card-footer>\n</mat-card>\n", styles: [".adf-content-metadata-card .adf-content-metadata-card-view{padding:0}.adf-content-metadata-card .adf-content-metadata-card-view .adf-content-metadata-card-view-content{margin-bottom:0}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer{margin:0;padding:8px 12px;border-top:1px solid var(--adf-theme-foreground-text-color-007);display:flex;place-content:stretch space-between;align-items:stretch;max-height:100%}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button{color:var(--adf-theme-foreground-text-color-054)}.adf-content-metadata-card-footer.adf-content-metadata-card-view-footer button:hover{color:var(--adf-theme-foreground-text-color-087)}\n"] }]
|
|
104
103
|
}], ctorParameters: () => [{ type: i1.ContentService }, { type: i2.NodeAspectService }, { type: i3.VersionCompatibilityService }], propDecorators: { node: [{
|
|
105
104
|
type: Input,
|
|
106
105
|
args: [{ required: true }]
|
|
@@ -126,4 +125,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
126
125
|
}], displayDefaultProperties: [{
|
|
127
126
|
type: Input
|
|
128
127
|
}] } });
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tZXRhZGF0YS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1tZXRhZGF0YS9jb21wb25lbnRzL2NvbnRlbnQtbWV0YWRhdGEtY2FyZC9jb250ZW50LW1ldGFkYXRhLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW1ldGFkYXRhL2NvbXBvbmVudHMvY29udGVudC1tZXRhZGF0YS1jYXJkL2NvbnRlbnQtbWV0YWRhdGEtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXRGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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Szt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBT3pCLFFBQVE7c0JBRFAsS0FBSztnQkFRTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sUUFBUTtzQkFEUCxLQUFLO2dCQUtOLFlBQVk7c0JBRFgsS0FBSztnQkFTRix3QkFBd0I7c0JBRDNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcywgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGUgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IE5vZGVBc3BlY3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXNwZWN0LWxpc3Qvc2VydmljZXMvbm9kZS1hc3BlY3Quc2VydmljZSc7XG5pbXBvcnQgeyBDb250ZW50TWV0YWRhdGFDdXN0b21QYW5lbCwgUHJlc2V0Q29uZmlnIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9jb250ZW50LW1ldGFkYXRhLmludGVyZmFjZXMnO1xuaW1wb3J0IHsgVmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vdmVyc2lvbi1jb21wYXRpYmlsaXR5L3ZlcnNpb24tY29tcGF0aWJpbGl0eS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL3NlcnZpY2VzL2NvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBbGxvd2FibGVPcGVyYXRpb25zRW51bSB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbi9tb2RlbHMvYWxsb3dhYmxlLW9wZXJhdGlvbnMuZW51bSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0Q2FyZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NhcmQnO1xuaW1wb3J0IHsgQ29udGVudE1ldGFkYXRhQ29tcG9uZW50IH0gZnJvbSAnLi4vY29udGVudC1tZXRhZGF0YS9jb250ZW50LW1ldGFkYXRhLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNYXRCdXR0b25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNvbnRlbnQtbWV0YWRhdGEtY2FyZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBDb250ZW50TWV0YWRhdGFDb21wb25lbnQsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1tZXRhZGF0YS1jYXJkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb250ZW50LW1ldGFkYXRhLWNhcmQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtY29udGVudC1tZXRhZGF0YS1jYXJkJyB9XG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnRNZXRhZGF0YUNhcmRDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKiAocmVxdWlyZWQpIFRoZSBub2RlIGVudGl0eSB0byBmZXRjaCBtZXRhZGF0YSBhYm91dCAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgbm9kZTogTm9kZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBkaXNwbGF5cy9oaWRlcyBlbXB0eSBtZXRhZGF0YVxuICAgICAqIGZpZWxkcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlFbXB0eT86IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBkaXNwbGF5cyBkZXNpcmVkIGFzcGVjdCB3aGVuIG9wZW4gZm9yIHRoZSBmaXJzdCB0aW1lIGZpZWxkcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlBc3BlY3Q/OiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIERpc3BsYXkgdGFncyBpbiB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheVRhZ3MgPSB0cnVlO1xuXG4gICAgLyoqIERpc3BsYXkgY2F0ZWdvcmllcyBpbiB0aGUgY2FyZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzcGxheUNhdGVnb3JpZXMgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogTmFtZSBvciBjb25maWd1cmF0aW9uIG9mIHRoZSBtZXRhZGF0YSBwcmVzZXQsIHdoaWNoIGRlZmluZXMgYXNwZWN0c1xuICAgICAqIGFuZCB0aGVpciBwcm9wZXJ0aWVzLlxuICAgICAqL1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlIH0pXG4gICAgcHJlc2V0OiBzdHJpbmcgfCBQcmVzZXRDb25maWc7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgc2V0cyB0aGUgbWV0YWRhdGEgaW4gcmVhZCBvbmx5IG1vZGUgcHJldmVudGluZyBjaGFuZ2VzLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVhZE9ubHk/ID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgYWxsb3dzIHRoZSBjb21wb25lbnQgdG8gZGlzcGxheSBtb3JlXG4gICAgICogdGhhbiBvbmUgYWNjb3JkaW9uIGF0IGEgdGltZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIG11bHRpPyA9IGZhbHNlO1xuXG4gICAgLyoqIFRoaXMgZmxhZyB0b2dnbGVzIGVkaXRhYmxlIG9mIGNvbnRlbnQuICovXG4gICAgQElucHV0KClcbiAgICBlZGl0YWJsZT8gPSBmYWxzZTtcblxuICAgIC8qKiBMaXN0IG9mIGN1c3RvbSBtZXRhZGF0YSBwYW5lbHMgdG8gYmUgZGlzcGxheWVkIHdpdGggcmVnaXN0ZXJlZCBjdXN0b20gY29tcG9uZW50cyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY3VzdG9tUGFuZWxzOiBDb250ZW50TWV0YWRhdGFDdXN0b21QYW5lbFtdO1xuXG4gICAgcHJpdmF0ZSBfZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZmxhZyBkaXNwbGF5cy9oaWRlcyB0aGUgbWV0YWRhdGEgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBkaXNwbGF5RGVmYXVsdFByb3BlcnRpZXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzID0gdmFsdWU7XG4gICAgICAgIHRoaXMub25EaXNwbGF5RGVmYXVsdFByb3BlcnRpZXNDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGV4cGFuZGVkOiBib29sZWFuO1xuXG4gICAgZWRpdEFzcGVjdFN1cHBvcnRlZCA9IGZhbHNlO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY29udGVudFNlcnZpY2U6IENvbnRlbnRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG5vZGVBc3BlY3RTZXJ2aWNlOiBOb2RlQXNwZWN0U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB2ZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2U6IFZlcnNpb25Db21wYXRpYmlsaXR5U2VydmljZVxuICAgICkge1xuICAgICAgICB0aGlzLmVkaXRBc3BlY3RTdXBwb3J0ZWQgPSB0aGlzLnZlcnNpb25Db21wYXRpYmlsaXR5U2VydmljZS5pc1ZlcnNpb25TdXBwb3J0ZWQoJzcnKTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzLmRpc3BsYXlBc3BlY3Q/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5leHBhbmRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkRpc3BsYXlEZWZhdWx0UHJvcGVydGllc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5leHBhbmRlZCA9ICF0aGlzLl9kaXNwbGF5RGVmYXVsdFByb3BlcnRpZXM7XG4gICAgfVxuXG4gICAgaGFzQWxsb3dhYmxlT3BlcmF0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudFNlcnZpY2UuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucyh0aGlzLm5vZGUsIEFsbG93YWJsZU9wZXJhdGlvbnNFbnVtLlVQREFURSk7XG4gICAgfVxuXG4gICAgb3BlbkFzcGVjdERpYWxvZygpIHtcbiAgICAgICAgdGhpcy5ub2RlQXNwZWN0U2VydmljZS51cGRhdGVOb2RlQXNwZWN0cyh0aGlzLm5vZGUuaWQpO1xuICAgIH1cblxuICAgIGlzRWRpdEFzcGVjdFN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnJlYWRPbmx5ICYmIHRoaXMuaGFzQWxsb3dhYmxlT3BlcmF0aW9ucygpICYmIHRoaXMuZWRpdEFzcGVjdFN1cHBvcnRlZDtcbiAgICB9XG59XG4iLCI8bWF0LWNhcmQgYXBwZWFyYW5jZT1cIm91dGxpbmVkXCIgKm5nSWY9XCJub2RlXCIgY2xhc3M9XCJhZGYtY29udGVudC1tZXRhZGF0YS1jYXJkLXZpZXdcIj5cbiAgICA8bWF0LWNhcmQtY29udGVudCBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLWNhcmQtdmlldy1jb250ZW50XCI+XG4gICAgICAgIDxhZGYtY29udGVudC1tZXRhZGF0YVxuICAgICAgICAgICAgW2Rpc3BsYXlEZWZhdWx0UHJvcGVydGllc109XCJkaXNwbGF5RGVmYXVsdFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgW2V4cGFuZGVkXT1cImV4cGFuZGVkXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVcIlxuICAgICAgICAgICAgW2Rpc3BsYXlFbXB0eV09XCJkaXNwbGF5RW1wdHlcIlxuICAgICAgICAgICAgW3JlYWRPbmx5XT1cIiFlZGl0YWJsZVwiXG4gICAgICAgICAgICBbbXVsdGldPVwibXVsdGlcIlxuICAgICAgICAgICAgW2Rpc3BsYXlBc3BlY3RdPVwiZGlzcGxheUFzcGVjdFwiXG4gICAgICAgICAgICBbcHJlc2V0XT1cInByZXNldFwiXG4gICAgICAgICAgICBbZGlzcGxheVRhZ3NdPVwiZGlzcGxheVRhZ3NcIlxuICAgICAgICAgICAgW2Rpc3BsYXlDYXRlZ29yaWVzXT1cImRpc3BsYXlDYXRlZ29yaWVzXCJcbiAgICAgICAgICAgIFtjdXN0b21QYW5lbHNdPVwiY3VzdG9tUGFuZWxzXCIgLz5cbiAgICA8L21hdC1jYXJkLWNvbnRlbnQ+XG4gICAgPG1hdC1jYXJkLWZvb3RlciBjbGFzcz1cImFkZi1jb250ZW50LW1ldGFkYXRhLWNhcmQtZm9vdGVyIGFkZi1jb250ZW50LW1ldGFkYXRhLWNhcmQtdmlldy1mb290ZXJcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJpc0VkaXRBc3BlY3RTdXBwb3J0ZWQoKVwiXG4gICAgICAgICAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9wZW5Bc3BlY3REaWFsb2coKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIudGl0bGVdPVwiJ0NPUkUuTUVUQURBVEEuQUNUSU9OUy5FRElUX0FTUEVDVFMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidDT1JFLk1FVEFEQVRBLkFDQ0VTU0lCSUxJVFkuRURJVF9BU1BFQ1RTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwibWV0YS1kYXRhLWNhcmQtZWRpdC1hc3BlY3RcIj5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24+bWVudTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9tYXQtY2FyZC1mb290ZXI+XG48L21hdC1jYXJkPlxuIl19
|
|
128
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1tZXRhZGF0YS1jYXJkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1tZXRhZGF0YS9jb21wb25lbnRzL2NvbnRlbnQtbWV0YWRhdGEtY2FyZC9jb250ZW50LW1ldGFkYXRhLWNhcmQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW1ldGFkYXRhL2NvbXBvbmVudHMvY29udGVudC1tZXRhZGF0YS1jYXJkL2NvbnRlbnQtbWV0YWRhdGEtY2FyZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXRGLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDhEQUE4RCxDQUFDO0FBQzNHLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxrREFBa0QsQ0FBQztBQUMzRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1B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O3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtnQkFPekIsUUFBUTtzQkFEUCxLQUFLO2dCQVFOLEtBQUs7c0JBREosS0FBSztnQkFLTixRQUFRO3NCQURQLEtBQUs7Z0JBS04sWUFBWTtzQkFEWCxLQUFLO2dCQVNGLHdCQUF3QjtzQkFEM0IsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTm9kZSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgTm9kZUFzcGVjdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hc3BlY3QtbGlzdC9zZXJ2aWNlcy9ub2RlLWFzcGVjdC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbnRlbnRNZXRhZGF0YUN1c3RvbVBhbmVsLCBQcmVzZXRDb25maWcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2NvbnRlbnQtbWV0YWRhdGEuaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBWZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi92ZXJzaW9uLWNvbXBhdGliaWxpdHkvdmVyc2lvbi1jb21wYXRpYmlsaXR5LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb21tb24vc2VydmljZXMvY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEFsbG93YWJsZU9wZXJhdGlvbnNFbnVtIH0gZnJvbSAnLi4vLi4vLi4vY29tbW9uL21vZGVscy9hbGxvd2FibGUtb3BlcmF0aW9ucy5lbnVtJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBNYXRDYXJkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2FyZCc7XG5pbXBvcnQgeyBDb250ZW50TWV0YWRhdGFDb21wb25lbnQgfSBmcm9tICcuLi9jb250ZW50LW1ldGFkYXRhL2NvbnRlbnQtbWV0YWRhdGEuY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBNYXRJY29uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaWNvbic7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWRmLWNvbnRlbnQtbWV0YWRhdGEtY2FyZCcsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRDYXJkTW9kdWxlLCBDb250ZW50TWV0YWRhdGFDb21wb25lbnQsIE1hdEJ1dHRvbk1vZHVsZSwgTWF0SWNvbk1vZHVsZSwgVHJhbnNsYXRlUGlwZV0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtbWV0YWRhdGEtY2FyZC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29udGVudC1tZXRhZGF0YS1jYXJkLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7IGNsYXNzOiAnYWRmLWNvbnRlbnQtbWV0YWRhdGEtY2FyZCcgfVxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50TWV0YWRhdGFDYXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICAvKiogKHJlcXVpcmVkKSBUaGUgbm9kZSBlbnRpdHkgdG8gZmV0Y2ggbWV0YWRhdGEgYWJvdXQgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIG5vZGU6IE5vZGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgZGlzcGxheXMvaGlkZXMgZW1wdHkgbWV0YWRhdGFcbiAgICAgKiBmaWVsZHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5RW1wdHk/OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgZGlzcGxheXMgZGVzaXJlZCBhc3BlY3Qgd2hlbiBvcGVuIGZvciB0aGUgZmlyc3QgdGltZSBmaWVsZHMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkaXNwbGF5QXNwZWN0Pzogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKiBEaXNwbGF5IHRhZ3MgaW4gdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlUYWdzID0gdHJ1ZTtcblxuICAgIC8qKiBEaXNwbGF5IGNhdGVnb3JpZXMgaW4gdGhlIGNhcmQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc3BsYXlDYXRlZ29yaWVzID0gdHJ1ZTtcblxuICAgIC8qKlxuICAgICAqIE5hbWUgb3IgY29uZmlndXJhdGlvbiBvZiB0aGUgbWV0YWRhdGEgcHJlc2V0LCB3aGljaCBkZWZpbmVzIGFzcGVjdHNcbiAgICAgKiBhbmQgdGhlaXIgcHJvcGVydGllcy5cbiAgICAgKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIHByZXNldDogc3RyaW5nIHwgUHJlc2V0Q29uZmlnO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmbGFnIHNldHMgdGhlIG1ldGFkYXRhIGluIHJlYWQgb25seSBtb2RlIHByZXZlbnRpbmcgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlYWRPbmx5PyA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogVGhpcyBmbGFnIGFsbG93cyB0aGUgY29tcG9uZW50IHRvIGRpc3BsYXkgbW9yZVxuICAgICAqIHRoYW4gb25lIGFjY29yZGlvbiBhdCBhIHRpbWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBtdWx0aT8gPSBmYWxzZTtcblxuICAgIC8qKiBUaGlzIGZsYWcgdG9nZ2xlcyBlZGl0YWJsZSBvZiBjb250ZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZWRpdGFibGU/ID0gZmFsc2U7XG5cbiAgICAvKiogTGlzdCBvZiBjdXN0b20gbWV0YWRhdGEgcGFuZWxzIHRvIGJlIGRpc3BsYXllZCB3aXRoIHJlZ2lzdGVyZWQgY3VzdG9tIGNvbXBvbmVudHMgKi9cbiAgICBASW5wdXQoKVxuICAgIGN1c3RvbVBhbmVsczogQ29udGVudE1ldGFkYXRhQ3VzdG9tUGFuZWxbXTtcblxuICAgIHByaXZhdGUgX2Rpc3BsYXlEZWZhdWx0UHJvcGVydGllczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGZsYWcgZGlzcGxheXMvaGlkZXMgdGhlIG1ldGFkYXRhIHByb3BlcnRpZXMuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzKHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2Rpc3BsYXlEZWZhdWx0UHJvcGVydGllcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLm9uRGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzQ2hhbmdlKCk7XG4gICAgfVxuXG4gICAgZ2V0IGRpc3BsYXlEZWZhdWx0UHJvcGVydGllcygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlEZWZhdWx0UHJvcGVydGllcztcbiAgICB9XG5cbiAgICBleHBhbmRlZDogYm9vbGVhbjtcblxuICAgIGVkaXRBc3BlY3RTdXBwb3J0ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2RlQXNwZWN0U2VydmljZTogTm9kZUFzcGVjdFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdmVyc2lvbkNvbXBhdGliaWxpdHlTZXJ2aWNlOiBWZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2VcbiAgICApIHtcbiAgICAgICAgdGhpcy5lZGl0QXNwZWN0U3VwcG9ydGVkID0gdGhpcy52ZXJzaW9uQ29tcGF0aWJpbGl0eVNlcnZpY2UuaXNWZXJzaW9uU3VwcG9ydGVkKCc3Jyk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoY2hhbmdlcy5kaXNwbGF5QXNwZWN0Py5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25EaXNwbGF5RGVmYXVsdFByb3BlcnRpZXNDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZXhwYW5kZWQgPSAhdGhpcy5fZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzO1xuICAgIH1cblxuICAgIGhhc0FsbG93YWJsZU9wZXJhdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRlbnRTZXJ2aWNlLmhhc0FsbG93YWJsZU9wZXJhdGlvbnModGhpcy5ub2RlLCBBbGxvd2FibGVPcGVyYXRpb25zRW51bS5VUERBVEUpO1xuICAgIH1cblxuICAgIG9wZW5Bc3BlY3REaWFsb2coKSB7XG4gICAgICAgIHRoaXMubm9kZUFzcGVjdFNlcnZpY2UudXBkYXRlTm9kZUFzcGVjdHModGhpcy5ub2RlLmlkKTtcbiAgICB9XG5cbiAgICBpc0VkaXRBc3BlY3RTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5yZWFkT25seSAmJiB0aGlzLmhhc0FsbG93YWJsZU9wZXJhdGlvbnMoKSAmJiB0aGlzLmVkaXRBc3BlY3RTdXBwb3J0ZWQ7XG4gICAgfVxufVxuIiwiPG1hdC1jYXJkIGFwcGVhcmFuY2U9XCJvdXRsaW5lZFwiICpuZ0lmPVwibm9kZVwiIGNsYXNzPVwiYWRmLWNvbnRlbnQtbWV0YWRhdGEtY2FyZC12aWV3XCI+XG4gICAgPG1hdC1jYXJkLWNvbnRlbnQgY2xhc3M9XCJhZGYtY29udGVudC1tZXRhZGF0YS1jYXJkLXZpZXctY29udGVudFwiPlxuICAgICAgICA8YWRmLWNvbnRlbnQtbWV0YWRhdGFcbiAgICAgICAgICAgIFtkaXNwbGF5RGVmYXVsdFByb3BlcnRpZXNdPVwiZGlzcGxheURlZmF1bHRQcm9wZXJ0aWVzXCJcbiAgICAgICAgICAgIFtleHBhbmRlZF09XCJleHBhbmRlZFwiXG4gICAgICAgICAgICBbbm9kZV09XCJub2RlXCJcbiAgICAgICAgICAgIFtkaXNwbGF5RW1wdHldPVwiZGlzcGxheUVtcHR5XCJcbiAgICAgICAgICAgIFtyZWFkT25seV09XCIhZWRpdGFibGVcIlxuICAgICAgICAgICAgW211bHRpXT1cIm11bHRpXCJcbiAgICAgICAgICAgIFtkaXNwbGF5QXNwZWN0XT1cImRpc3BsYXlBc3BlY3RcIlxuICAgICAgICAgICAgW3ByZXNldF09XCJwcmVzZXRcIlxuICAgICAgICAgICAgW2Rpc3BsYXlUYWdzXT1cImRpc3BsYXlUYWdzXCJcbiAgICAgICAgICAgIFtkaXNwbGF5Q2F0ZWdvcmllc109XCJkaXNwbGF5Q2F0ZWdvcmllc1wiXG4gICAgICAgICAgICBbY3VzdG9tUGFuZWxzXT1cImN1c3RvbVBhbmVsc1wiIC8+XG4gICAgPC9tYXQtY2FyZC1jb250ZW50PlxuICAgIDxtYXQtY2FyZC1mb290ZXIgY2xhc3M9XCJhZGYtY29udGVudC1tZXRhZGF0YS1jYXJkLWZvb3RlciBhZGYtY29udGVudC1tZXRhZGF0YS1jYXJkLXZpZXctZm9vdGVyXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiaXNFZGl0QXNwZWN0U3VwcG9ydGVkKClcIlxuICAgICAgICAgICAgICAgIG1hdC1pY29uLWJ1dHRvblxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuQXNwZWN0RGlhbG9nKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLnRpdGxlXT1cIidDT1JFLk1FVEFEQVRBLkFDVElPTlMuRURJVF9BU1BFQ1RTJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQ09SRS5NRVRBREFUQS5BQ0NFU1NJQklMSVRZLkVESVRfQVNQRUNUUycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cIm1ldGEtZGF0YS1jYXJkLWVkaXQtYXNwZWN0XCI+XG4gICAgICAgICAgICAgICAgPG1hdC1pY29uPm1lbnU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbWF0LWNhcmQtZm9vdGVyPlxuPC9tYXQtY2FyZD5cbiJdfQ==
|
|
@@ -25,7 +25,7 @@ import { debounceTime } from 'rxjs/operators';
|
|
|
25
25
|
import { ContentNodeSelectorPanelService } from './content-node-selector-panel.service';
|
|
26
26
|
import { CommonModule } from '@angular/common';
|
|
27
27
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
|
28
|
-
import {
|
|
28
|
+
import { TranslatePipe } from '@ngx-translate/core';
|
|
29
29
|
import { MatInputModule } from '@angular/material/input';
|
|
30
30
|
import { AutoFocusDirective } from '../../directives/auto-focus.directive';
|
|
31
31
|
import { NodeCounterDirective } from '../../directives/node-counter.directive';
|
|
@@ -45,11 +45,10 @@ import * as i4 from "../../common";
|
|
|
45
45
|
import * as i5 from "./content-node-selector-panel.service";
|
|
46
46
|
import * as i6 from "@angular/common";
|
|
47
47
|
import * as i7 from "@angular/material/form-field";
|
|
48
|
-
import * as i8 from "@
|
|
49
|
-
import * as i9 from "@angular/
|
|
50
|
-
import * as i10 from "@angular/
|
|
51
|
-
import * as i11 from "@angular/material/
|
|
52
|
-
import * as i12 from "@angular/material/button";
|
|
48
|
+
import * as i8 from "@angular/material/input";
|
|
49
|
+
import * as i9 from "@angular/forms";
|
|
50
|
+
import * as i10 from "@angular/material/icon";
|
|
51
|
+
import * as i11 from "@angular/material/button";
|
|
53
52
|
export const defaultValidation = () => true;
|
|
54
53
|
export class ContentNodeSelectorPanelComponent {
|
|
55
54
|
/**
|
|
@@ -533,14 +532,14 @@ export class ContentNodeSelectorPanelComponent {
|
|
|
533
532
|
};
|
|
534
533
|
}
|
|
535
534
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeSelectorPanelComponent, deps: [{ token: i1.CustomResourcesService }, { token: i2.SearchQueryBuilderService }, { token: i3.UserPreferencesService }, { token: i4.NodesApiService }, { token: i4.UploadService }, { token: i4.SitesService }, { token: i5.ContentNodeSelectorPanelService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
536
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentNodeSelectorPanelComponent, isStandalone: true, selector: "adf-content-node-selector-panel", inputs: { restrictRootToCurrentFolderId: "restrictRootToCurrentFolderId", currentFolderId: "currentFolderId", dropdownHideMyFiles: "dropdownHideMyFiles", dropdownSiteList: "dropdownSiteList", where: "where", rowFilter: "rowFilter", excludeSiteContent: "excludeSiteContent", imageResolver: "imageResolver", pageSize: "pageSize", selectionMode: "selectionMode", isSelectionValid: "isSelectionValid", breadcrumbTransform: "breadcrumbTransform", showSearch: "showSearch", showDropdownSiteList: "showDropdownSiteList", showFilesInResult: "showFilesInResult", showNodeCounter: "showNodeCounter" }, outputs: { select: "select", navigationChange: "navigationChange", siteChange: "siteChange", showingSearch: "showingSearch", currentFolder: "currentFolder", folderLoaded: "folderLoaded" }, host: { classAttribute: "adf-content-node-selector-panel" }, providers: [SearchQueryBuilderService], viewQueries: [{ propertyName: "documentList", first: true, predicate: ["documentList"], descendants: true, static: true }, { propertyName: "highlighter", first: true, predicate: HighlightDirective, descendants: true, static: true }, { propertyName: "infinitePaginationComponent", first: true, predicate: InfinitePaginationComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"adf-content-node-selector-content\">\n <mat-form-field floatPlaceholder=\"never\"\n appearance=\"fill\"\n class=\"adf-content-node-selector-content-input\"\n subscriptSizing=\"dynamic\"\n *ngIf=\"showSearch\">\n <mat-label>{{ 'NODE_SELECTOR.SEARCH' | translate }}</mat-label>\n <input matInput\n id=\"searchInput\"\n [formControl]=\"searchInput\"\n type=\"text\"\n [value]=\"searchTerm\"\n adf-auto-focus\n data-automation-id=\"content-node-selector-search-input\">\n\n <mat-icon *ngIf=\"searchTerm.length > 0\"\n matSuffix (click)=\"clear()\"\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-clear\">clear\n </mat-icon>\n\n <mat-icon *ngIf=\"searchTerm.length === 0\"\n matSuffix\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-icon\">search\n </mat-icon>\n\n </mat-form-field>\n <adf-sites-dropdown\n *ngIf=\"showDropdownSiteList\"\n class=\"full-width\"\n (change)=\"siteChanged($event)\"\n [placeholder]=\"'NODE_SELECTOR.SELECT_LIBRARY'\"\n [hideMyFiles]=\"dropdownHideMyFiles\"\n [siteList]=\"dropdownSiteList\"\n [value]=\"startSiteGuid\"\n data-automation-id=\"content-node-selector-sites-combo\" />\n <button *ngIf=\"hasCustomModels()\"\n data-automation-id=\"adf-toggle-search-panel-button\"\n mat-icon-button\n (click)=\"toggleSearchPanel()\">\n <mat-icon>filter_list</mat-icon>\n {{ 'SEARCH.SEARCH_HEADER.TITLE' | translate }}\n </button>\n <div class=\"adf-content-node-selector-search-panel-container\">\n <adf-search-panel *ngIf=\"searchPanelExpanded\" />\n <div class=\"adf-content-node-selector-document-list-container\">\n <adf-toolbar>\n <adf-toolbar-title>\n <ng-container *ngIf=\"!showBreadcrumbs()\">\n <h2 class=\"adf-search-results-label\">{{ 'NODE_SELECTOR.SEARCH_RESULTS' | translate }}</h2>\n </ng-container>\n <adf-dropdown-breadcrumb *ngIf=\"showBreadcrumbs()\"\n class=\"adf-content-node-selector-content-breadcrumb\"\n (navigate)=\"clearSearch()\"\n [target]=\"documentList\"\n [rootId]=\"breadcrumbRootId\"\n [transform]=\"breadcrumbTransform\"\n [folderNode]=\"breadcrumbFolderNode\"\n [root]=\"breadcrumbFolderTitle\"\n data-automation-id=\"content-node-selector-content-breadcrumb\" />\n <ng-container *ngIf=\"showNodeCounter\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n\n <div\n class=\"adf-content-node-selector-content-list\"\n [class.adf-content-node-selector-content-list-searchLayout]=\"showingSearchResults\"\n data-automation-id=\"content-node-selector-content-list\">\n <adf-document-list\n #documentList\n [adf-highlight]=\"searchTerm\"\n adf-highlight-selector=\".adf-name-location-cell-name\"\n [showHeader]=\"showHeader\"\n [node]=\"nodePaging\"\n [preselectNodes]=\"preselectedNodes\"\n [maxItems]=\"pageSize\"\n [rowFilter]=\"_rowFilter\"\n [imageResolver]=\"imageResolver\"\n [currentFolderId]=\"folderIdToShow\"\n [selectionMode]=\"selectionMode\"\n [contextMenuActions]=\"false\"\n [contentActions]=\"false\"\n [allowDropFiles]=\"false\"\n [sorting]=\"sorting\"\n sortingMode=\"server\"\n [where]=\"where\"\n (folderChange)=\"onFolderChange($event)\"\n (ready)=\"onFolderLoaded($event)\"\n (nodeSelected)=\"onCurrentSelection($event)\"\n [class.adf-content-node-selector-content-list-empty]=\"emptyList\"\n data-automation-id=\"content-node-selector-document-list\">\n\n <adf-custom-empty-content-template>\n <div aria-live=\"polite\">{{ 'NODE_SELECTOR.NO_RESULTS' | translate }}</div>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <data-column key=\"$thumbnail\" type=\"image\" />\n <data-column key=\"name\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.NAME\" class=\"adf-full-width adf-ellipsis-cell\">\n <ng-template let-context>\n <adf-name-location-cell [row]=\"context.row\" />\n </ng-template>\n </data-column>\n <data-column key=\"modifiedAt\" type=\"date\" title=\"ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON\" format=\"timeAgo\" class=\"adf-content-selector-modified-cell\" />\n <data-column key=\"createdByUser.displayName\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.CREATED_BY\" class=\"adf-content-selector-modifier-cell\" />\n <data-column key=\"visibility\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.STATUS\" class=\"adf-content-selector-visibility-cell\" />\n </data-columns>\n\n </adf-document-list>\n\n <adf-infinite-pagination\n [target]=\"target\"\n [loading]=\"loadingSearchResults\"\n (loadMore)=\"getNextPageOfSearch($event)\"\n data-automation-id=\"content-node-selector-search-pagination\">\n {{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}\n </adf-infinite-pagination>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h2.adf-search-results-label{flex:1;font-weight:600;font-size:var(--theme-body-1-font-size);font-style:normal;font-stretch:normal;line-height:1.43;letter-spacing:-.2px;color:var(--adf-theme-foreground-text-color-087)}.mdc-dialog .mat-mdc-dialog-surface:is(div){padding-bottom:0}.adf-content-node-selector-panel .adf-toolbar .adf-toolbar-container.adf-toolbar-container-row{max-height:48px;border-bottom-width:0;font-size:var(--theme-body-1-font-size);height:auto}.adf-content-node-selector-search-panel-container{display:flex}.adf-content-node-selector-document-list-container{margin-top:16px;width:100%}.adf-content-node-selector-content{padding-top:0}.adf-content-node-selector-content .mat-mdc-input-element:focus::placeholder{color:var(--theme-primary-color)}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex{align-items:center}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-bottom:0}.adf-content-node-selector-content .adf-sites-dropdown-form-field label.mat-mdc-floating-label{top:32px}.adf-content-node-selector-content .mat-mdc-form-field-subscript-wrapper{height:16px}.adf-content-node-selector-content-input{width:100%;margin-bottom:8px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon{color:var(--adf-theme-foreground-icon-color-054);cursor:pointer;padding:0 0 8px;width:1em;height:1em;font-size:20px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon:hover{color:var(--adf-theme-foreground-base-color)}.adf-content-node-selector-content-input .mat-mdc-form-field-subscript-wrapper{display:none}.adf-content-node-selector-content .adf-site-dropdown-container{display:block}.adf-content-node-selector-content .adf-site-dropdown-container .adf-sites-dropdown-form-field{width:100%}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger{outline:none}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon:hover{color:var(--adf-theme-foreground-base-color-065)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger:focus .adf-dropdown-breadcrumb-icon{color:var(--theme-primary-color)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-item-chevron{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-content-list,.adf-content-node-selector-list{height:40vh;overflow:auto;border:1px solid var(--adf-theme-foreground-text-color-007);border-top:0;position:relative}.adf-content-node-selector-content-list-empty+adf-infinite-pagination,.adf-content-node-selector-list-empty+adf-infinite-pagination{position:absolute;bottom:0;width:100%}.adf-content-node-selector-content-list .adf-highlight,.adf-content-node-selector-list .adf-highlight{color:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list,.adf-content-node-selector-list .adf-datatable-list{border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-name-location-cell-location,.adf-content-node-selector-list .adf-datatable-list .adf-name-location-cell-location{display:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected{height:100%;width:100%}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected>svg,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell--image,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell--image{min-width:35px;width:35px;max-width:40px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell:nth-child(2),.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell:nth-child(2){flex:1 0 95px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell{flex:0 1 auto;min-width:1px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value{padding:0}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:40px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell{border-top:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell{border-bottom:none}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name{padding:5px 10px 2px}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i9.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: ReactiveFormsModule }, { kind: "directive", type: i10.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: i10.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i10.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i11.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DropdownSitesComponent, selector: "adf-sites-dropdown", inputs: ["hideMyFiles", "siteList", "value", "placeholder", "relations"], outputs: ["change", "error"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i12.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: DropdownBreadcrumbComponent, selector: "adf-dropdown-breadcrumb" }, { kind: "directive", type: NodeCounterDirective, selector: "[adf-node-counter]", inputs: ["adf-node-counter"] }, { kind: "component", type: DocumentListComponent, selector: "adf-document-list", inputs: ["includeFields", "where", "permissionsStyle", "locationFormat", "navigate", "showHeader", "navigationMode", "thumbnails", "selectionMode", "multiselect", "contentActions", "contentActionsPosition", "contextMenuActions", "emptyFolderImageUrl", "allowDropFiles", "sorting", "additionalSorting", "sortingMode", "rowStyle", "rowStyleClass", "loading", "_rowFilter", "rowFilter", "imageResolver", "stickyHeader", "headerFilters", "filterValue", "currentFolderId", "preselectNodes", "node", "maxItems", "columnsPresetKey", "setColumnsVisibility", "setColumnsWidths", "setColumnsOrder", "maxColumnsVisible", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "displayDragAndDropHint"], outputs: ["nodeClick", "nodeDblClick", "folderChange", "preview", "ready", "error", "nodeSelected", "filterSelection", "columnsWidthChanged", "columnsVisibilityChanged", "columnsOrderChanged", "selectedItemsCountChanged"] }, { kind: "directive", type: HighlightDirective, selector: "[adf-highlight]", inputs: ["adf-highlight-selector", "adf-highlight", "adf-highlight-class"] }, { kind: "component", type: DataColumnListComponent, selector: "data-columns" }, { kind: "component", type: DataColumnComponent, selector: "data-column", inputs: ["id", "key", "customData", "type", "format", "sortable", "draggable", "resizable", "isHidden", "title", "subtitle", "formatTooltip", "sr-title", "class", "copyContent", "editable", "focus", "sortingKey", "order", "currencyConfig", "decimalConfig", "dateConfig"] }, { kind: "component", type: NameLocationCellComponent, selector: "adf-name-location-cell", inputs: ["row"] }, { kind: "component", type: InfinitePaginationComponent, selector: "adf-infinite-pagination", inputs: ["target", "pageSize", "loading"], outputs: ["loadMore"] }, { kind: "directive", type: CustomEmptyContentTemplateDirective, selector: "adf-custom-empty-content-template, empty-folder-content" }, { kind: "component", type: SearchPanelComponent, selector: "adf-search-panel" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
535
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ContentNodeSelectorPanelComponent, isStandalone: true, selector: "adf-content-node-selector-panel", inputs: { restrictRootToCurrentFolderId: "restrictRootToCurrentFolderId", currentFolderId: "currentFolderId", dropdownHideMyFiles: "dropdownHideMyFiles", dropdownSiteList: "dropdownSiteList", where: "where", rowFilter: "rowFilter", excludeSiteContent: "excludeSiteContent", imageResolver: "imageResolver", pageSize: "pageSize", selectionMode: "selectionMode", isSelectionValid: "isSelectionValid", breadcrumbTransform: "breadcrumbTransform", showSearch: "showSearch", showDropdownSiteList: "showDropdownSiteList", showFilesInResult: "showFilesInResult", showNodeCounter: "showNodeCounter" }, outputs: { select: "select", navigationChange: "navigationChange", siteChange: "siteChange", showingSearch: "showingSearch", currentFolder: "currentFolder", folderLoaded: "folderLoaded" }, host: { classAttribute: "adf-content-node-selector-panel" }, providers: [SearchQueryBuilderService], viewQueries: [{ propertyName: "documentList", first: true, predicate: ["documentList"], descendants: true, static: true }, { propertyName: "highlighter", first: true, predicate: HighlightDirective, descendants: true, static: true }, { propertyName: "infinitePaginationComponent", first: true, predicate: InfinitePaginationComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"adf-content-node-selector-content\">\n <mat-form-field floatPlaceholder=\"never\"\n appearance=\"fill\"\n class=\"adf-content-node-selector-content-input\"\n subscriptSizing=\"dynamic\"\n *ngIf=\"showSearch\">\n <mat-label>{{ 'NODE_SELECTOR.SEARCH' | translate }}</mat-label>\n <input matInput\n id=\"searchInput\"\n [formControl]=\"searchInput\"\n type=\"text\"\n [value]=\"searchTerm\"\n adf-auto-focus\n data-automation-id=\"content-node-selector-search-input\">\n\n <mat-icon *ngIf=\"searchTerm.length > 0\"\n matSuffix (click)=\"clear()\"\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-clear\">clear\n </mat-icon>\n\n <mat-icon *ngIf=\"searchTerm.length === 0\"\n matSuffix\n class=\"adf-content-node-selector-content-input-icon\"\n data-automation-id=\"content-node-selector-search-icon\">search\n </mat-icon>\n\n </mat-form-field>\n <adf-sites-dropdown\n *ngIf=\"showDropdownSiteList\"\n class=\"full-width\"\n (change)=\"siteChanged($event)\"\n [placeholder]=\"'NODE_SELECTOR.SELECT_LIBRARY'\"\n [hideMyFiles]=\"dropdownHideMyFiles\"\n [siteList]=\"dropdownSiteList\"\n [value]=\"startSiteGuid\"\n data-automation-id=\"content-node-selector-sites-combo\" />\n <button *ngIf=\"hasCustomModels()\"\n data-automation-id=\"adf-toggle-search-panel-button\"\n mat-icon-button\n (click)=\"toggleSearchPanel()\">\n <mat-icon>filter_list</mat-icon>\n {{ 'SEARCH.SEARCH_HEADER.TITLE' | translate }}\n </button>\n <div class=\"adf-content-node-selector-search-panel-container\">\n <adf-search-panel *ngIf=\"searchPanelExpanded\" />\n <div class=\"adf-content-node-selector-document-list-container\">\n <adf-toolbar>\n <adf-toolbar-title>\n <ng-container *ngIf=\"!showBreadcrumbs()\">\n <h2 class=\"adf-search-results-label\">{{ 'NODE_SELECTOR.SEARCH_RESULTS' | translate }}</h2>\n </ng-container>\n <adf-dropdown-breadcrumb *ngIf=\"showBreadcrumbs()\"\n class=\"adf-content-node-selector-content-breadcrumb\"\n (navigate)=\"clearSearch()\"\n [target]=\"documentList\"\n [rootId]=\"breadcrumbRootId\"\n [transform]=\"breadcrumbTransform\"\n [folderNode]=\"breadcrumbFolderNode\"\n [root]=\"breadcrumbFolderTitle\"\n data-automation-id=\"content-node-selector-content-breadcrumb\" />\n <ng-container *ngIf=\"showNodeCounter\" [adf-node-counter]=\"getSelectedCount()\" />\n </adf-toolbar-title>\n </adf-toolbar>\n\n <div\n class=\"adf-content-node-selector-content-list\"\n [class.adf-content-node-selector-content-list-searchLayout]=\"showingSearchResults\"\n data-automation-id=\"content-node-selector-content-list\">\n <adf-document-list\n #documentList\n [adf-highlight]=\"searchTerm\"\n adf-highlight-selector=\".adf-name-location-cell-name\"\n [showHeader]=\"showHeader\"\n [node]=\"nodePaging\"\n [preselectNodes]=\"preselectedNodes\"\n [maxItems]=\"pageSize\"\n [rowFilter]=\"_rowFilter\"\n [imageResolver]=\"imageResolver\"\n [currentFolderId]=\"folderIdToShow\"\n [selectionMode]=\"selectionMode\"\n [contextMenuActions]=\"false\"\n [contentActions]=\"false\"\n [allowDropFiles]=\"false\"\n [sorting]=\"sorting\"\n sortingMode=\"server\"\n [where]=\"where\"\n (folderChange)=\"onFolderChange($event)\"\n (ready)=\"onFolderLoaded($event)\"\n (nodeSelected)=\"onCurrentSelection($event)\"\n [class.adf-content-node-selector-content-list-empty]=\"emptyList\"\n data-automation-id=\"content-node-selector-document-list\">\n\n <adf-custom-empty-content-template>\n <div aria-live=\"polite\">{{ 'NODE_SELECTOR.NO_RESULTS' | translate }}</div>\n </adf-custom-empty-content-template>\n\n <data-columns>\n <data-column key=\"$thumbnail\" type=\"image\" />\n <data-column key=\"name\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.NAME\" class=\"adf-full-width adf-ellipsis-cell\">\n <ng-template let-context>\n <adf-name-location-cell [row]=\"context.row\" />\n </ng-template>\n </data-column>\n <data-column key=\"modifiedAt\" type=\"date\" title=\"ADF-DOCUMENT-LIST.LAYOUT.MODIFIED_ON\" format=\"timeAgo\" class=\"adf-content-selector-modified-cell\" />\n <data-column key=\"createdByUser.displayName\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.CREATED_BY\" class=\"adf-content-selector-modifier-cell\" />\n <data-column key=\"visibility\" type=\"text\" title=\"ADF-DOCUMENT-LIST.LAYOUT.STATUS\" class=\"adf-content-selector-visibility-cell\" />\n </data-columns>\n\n </adf-document-list>\n\n <adf-infinite-pagination\n [target]=\"target\"\n [loading]=\"loadingSearchResults\"\n (loadMore)=\"getNextPageOfSearch($event)\"\n data-automation-id=\"content-node-selector-search-pagination\">\n {{ 'ADF-DOCUMENT-LIST.LAYOUT.LOAD_MORE' | translate }}\n </adf-infinite-pagination>\n </div>\n </div>\n </div>\n</div>\n", styles: ["h2.adf-search-results-label{flex:1;font-weight:600;font-size:var(--theme-body-1-font-size);font-style:normal;font-stretch:normal;line-height:1.43;letter-spacing:-.2px;color:var(--adf-theme-foreground-text-color-087)}.mdc-dialog .mat-mdc-dialog-surface:is(div){padding-bottom:0}.adf-content-node-selector-panel .adf-toolbar .adf-toolbar-container.adf-toolbar-container-row{max-height:48px;border-bottom-width:0;font-size:var(--theme-body-1-font-size);height:auto}.adf-content-node-selector-search-panel-container{display:flex}.adf-content-node-selector-document-list-container{margin-top:16px;width:100%}.adf-content-node-selector-content{padding-top:0}.adf-content-node-selector-content .mat-mdc-input-element:focus::placeholder{color:var(--theme-primary-color)}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex{align-items:center}.adf-content-node-selector-content .mat-mdc-text-field-wrapper .mat-mdc-form-field-flex .mat-mdc-form-field-infix{padding-bottom:0}.adf-content-node-selector-content .adf-sites-dropdown-form-field label.mat-mdc-floating-label{top:32px}.adf-content-node-selector-content .mat-mdc-form-field-subscript-wrapper{height:16px}.adf-content-node-selector-content-input{width:100%;margin-bottom:8px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon{color:var(--adf-theme-foreground-icon-color-054);cursor:pointer;padding:0 0 8px;width:1em;height:1em;font-size:20px}.adf-content-node-selector-content-input .adf-content-node-selector-content-input-icon:hover{color:var(--adf-theme-foreground-base-color)}.adf-content-node-selector-content-input .mat-mdc-form-field-subscript-wrapper{display:none}.adf-content-node-selector-content .adf-site-dropdown-container{display:block}.adf-content-node-selector-content .adf-site-dropdown-container .adf-sites-dropdown-form-field{width:100%}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger{outline:none}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger .adf-dropdown-breadcrumb-icon:hover{color:var(--adf-theme-foreground-base-color-065)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-trigger:focus .adf-dropdown-breadcrumb-icon{color:var(--theme-primary-color)}.adf-content-node-selector-breadcrumb .adf-dropdown-breadcrumb-item-chevron{color:var(--adf-theme-foreground-base-color-045)}.adf-content-node-selector-content-list,.adf-content-node-selector-list{height:40vh;overflow:auto;border:1px solid var(--adf-theme-foreground-text-color-007);border-top:0;position:relative}.adf-content-node-selector-content-list-empty+adf-infinite-pagination,.adf-content-node-selector-list-empty+adf-infinite-pagination{position:absolute;bottom:0;width:100%}.adf-content-node-selector-content-list .adf-highlight,.adf-content-node-selector-list .adf-highlight{color:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list,.adf-content-node-selector-list .adf-datatable-list{border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-name-location-cell-location,.adf-content-node-selector-list .adf-datatable-list .adf-name-location-cell-location{display:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected{height:100%;width:100%}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-selected>svg,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-selected>svg{fill:var(--theme-primary-color)}.adf-content-node-selector-content-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell--image,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell--image{min-width:35px;width:35px;max-width:40px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell:nth-child(2),.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell:nth-child(2){flex:1 0 95px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell .adf-no-content-container.adf-datatable-cell{text-align:center;border:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell{flex:0 1 auto;min-width:1px}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-cell.adf-content-selector-visibility-cell .adf-datatable-cell-value{padding:0}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:40px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:first-child .adf-datatable-cell{border-top:none}.adf-content-node-selector-content-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell,.adf-content-node-selector-list .adf-datatable-list .adf-datatable-body .adf-datatable-row:last-child .adf-datatable-cell{border-bottom:none}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{min-height:65px}@media screen and (-ms-high-contrast: active),screen and (-ms-high-contrast: none){.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row{padding-top:15px}}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row .adf-name-location-cell-name{padding:5px 10px 2px}.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modified-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-modifier-cell,.adf-content-node-selector-content-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell,.adf-content-node-selector-list-searchLayout .adf-datatable-list .adf-datatable-body .adf-datatable-row.adf-content-selector-visibility-cell{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i7.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7.MatLabel, selector: "mat-label" }, { kind: "directive", type: i7.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i8.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: ReactiveFormsModule }, { kind: "directive", type: i9.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: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i9.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: AutoFocusDirective, selector: "[adf-auto-focus]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i10.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: DropdownSitesComponent, selector: "adf-sites-dropdown", inputs: ["hideMyFiles", "siteList", "value", "placeholder", "relations"], outputs: ["change", "error"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i11.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ToolbarTitleComponent, selector: "adf-toolbar-title" }, { kind: "component", type: ToolbarComponent, selector: "adf-toolbar", inputs: ["title", "color"] }, { kind: "component", type: DropdownBreadcrumbComponent, selector: "adf-dropdown-breadcrumb" }, { kind: "directive", type: NodeCounterDirective, selector: "[adf-node-counter]", inputs: ["adf-node-counter"] }, { kind: "component", type: DocumentListComponent, selector: "adf-document-list", inputs: ["includeFields", "where", "permissionsStyle", "locationFormat", "navigate", "showHeader", "navigationMode", "thumbnails", "selectionMode", "multiselect", "contentActions", "contentActionsPosition", "contextMenuActions", "emptyFolderImageUrl", "allowDropFiles", "sorting", "additionalSorting", "sortingMode", "rowStyle", "rowStyleClass", "loading", "_rowFilter", "rowFilter", "imageResolver", "stickyHeader", "headerFilters", "filterValue", "currentFolderId", "preselectNodes", "node", "maxItems", "columnsPresetKey", "setColumnsVisibility", "setColumnsWidths", "setColumnsOrder", "maxColumnsVisible", "isResizingEnabled", "blurOnResize", "displayCheckboxesOnHover", "displayDragAndDropHint"], outputs: ["nodeClick", "nodeDblClick", "folderChange", "preview", "ready", "error", "nodeSelected", "filterSelection", "columnsWidthChanged", "columnsVisibilityChanged", "columnsOrderChanged", "selectedItemsCountChanged"] }, { kind: "directive", type: HighlightDirective, selector: "[adf-highlight]", inputs: ["adf-highlight-selector", "adf-highlight", "adf-highlight-class"] }, { kind: "component", type: DataColumnListComponent, selector: "data-columns" }, { kind: "component", type: DataColumnComponent, selector: "data-column", inputs: ["id", "key", "customData", "type", "format", "sortable", "draggable", "resizable", "isHidden", "title", "subtitle", "formatTooltip", "sr-title", "class", "copyContent", "editable", "focus", "sortingKey", "order", "currencyConfig", "decimalConfig", "dateConfig"] }, { kind: "component", type: NameLocationCellComponent, selector: "adf-name-location-cell", inputs: ["row"] }, { kind: "component", type: InfinitePaginationComponent, selector: "adf-infinite-pagination", inputs: ["target", "pageSize", "loading"], outputs: ["loadMore"] }, { kind: "directive", type: CustomEmptyContentTemplateDirective, selector: "adf-custom-empty-content-template, empty-folder-content" }, { kind: "component", type: SearchPanelComponent, selector: "adf-search-panel" }], encapsulation: i0.ViewEncapsulation.None }); }
|
|
537
536
|
}
|
|
538
537
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ContentNodeSelectorPanelComponent, decorators: [{
|
|
539
538
|
type: Component,
|
|
540
539
|
args: [{ selector: 'adf-content-node-selector-panel', standalone: true, imports: [
|
|
541
540
|
CommonModule,
|
|
542
541
|
MatFormFieldModule,
|
|
543
|
-
|
|
542
|
+
TranslatePipe,
|
|
544
543
|
MatInputModule,
|
|
545
544
|
ReactiveFormsModule,
|
|
546
545
|
AutoFocusDirective,
|
|
@@ -615,4 +614,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
615
614
|
type: ViewChild,
|
|
616
615
|
args: [InfinitePaginationComponent, { static: true }]
|
|
617
616
|
}] } });
|
|
618
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWtELGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsVUFBVSxFQUErQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0gsT0FBTyxFQUFFLHFC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QkFEWixLQUFLO2dCQVFOLGdCQUFnQjtzQkFEZixLQUFLO2dCQVVOLG1CQUFtQjtzQkFEbEIsS0FBSztnQkFLRixVQUFVO3NCQURiLEtBQUs7Z0JBYUYsb0JBQW9CO3NCQUR2QixLQUFLO2dCQWFGLGlCQUFpQjtzQkFEcEIsS0FBSztnQkFVRixlQUFlO3NCQURsQixLQUFLO2dCQVdOLE1BQU07c0JBREwsTUFBTTtnQkFLUCxnQkFBZ0I7c0JBRGYsTUFBTTtnQkFLUCxVQUFVO3NCQURULE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLGFBQWE7c0JBRFosTUFBTTtnQkFLUCxZQUFZO3NCQURYLE1BQU07Z0JBSVAsWUFBWTtzQkFEWCxTQUFTO3VCQUFDLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBSTNDLFdBQVc7c0JBRFYsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBbUIvQywyQkFBMkI7c0JBRDFCLFNBQVM7dUJBQUMsMkJBQTJCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IMKpIDIwMDUtMjAyNSBIeWxhbmQgU29mdHdhcmUsIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBDb21wb25lbnQsIERlc3Ryb3lSZWYsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgRGF0YUNvbHVtbkNvbXBvbmVudCxcbiAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICBEYXRhU29ydGluZyxcbiAgICBIaWdobGlnaHREaXJlY3RpdmUsXG4gICAgSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgIFBhZ2luYXRlZENvbXBvbmVudCxcbiAgICBTaG93SGVhZGVyTW9kZSxcbiAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgIFRvb2xiYXJUaXRsZUNvbXBvbmVudCxcbiAgICBVc2VyUHJlZmVyZW5jZXNTZXJ2aWNlLFxuICAgIFVzZXJQcmVmZXJlbmNlVmFsdWVzXG59IGZyb20gJ0BhbGZyZXNjby9hZGYtY29yZSc7XG5pbXBvcnQgeyBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCwgRmlsZVVwbG9hZERlbGV0ZUV2ZW50LCBOb2Rlc0FwaVNlcnZpY2UsIFNpdGVzU2VydmljZSwgVXBsb2FkU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBVbnR5cGVkRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOb2RlLCBOb2RlRW50cnksIE5vZGVQYWdpbmcsIFBhZ2luYXRpb24sIFJlcXVlc3RTY29wZSwgU2VhcmNoUmVxdWVzdCwgU2l0ZUVudHJ5LCBTaXRlUGFnaW5nIH0gZnJvbSAnQGFsZnJlc2NvL2pzLWFwaSc7XG5pbXBvcnQgeyBEb2N1bWVudExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvZG9jdW1lbnQtbGlzdC5jb21wb25lbnQnO1xuaW1wb3J0IHsgUm93RmlsdGVyIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL3Jvdy1maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHsgSW1hZ2VSZXNvbHZlciB9IGZyb20gJy4uLy4uL2RvY3VtZW50LWxpc3QvZGF0YS9pbWFnZS1yZXNvbHZlci5tb2RlbCc7XG5pbXBvcnQgeyBDdXN0b21SZXNvdXJjZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9zZXJ2aWNlcy9jdXN0b20tcmVzb3VyY2VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2hhcmVEYXRhUm93IH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL3NoYXJlLWRhdGEtcm93Lm1vZGVsJztcbmltcG9ydCB7IE5vZGVFbnRyeUV2ZW50IH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9jb21wb25lbnRzL25vZGUuZXZlbnQnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZSB9IGZyb20gJy4vY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEF1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYXV0by1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZUNvdW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtY291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRHJvcGRvd25TaXRlc0NvbXBvbmVudCB9IGZyb20gJy4uL3NpdGUtZHJvcGRvd24vc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBOYW1lTG9jYXRpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmFtZS1sb2NhdGlvbi1jZWxsL25hbWUtbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25CcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnJlYWRjcnVtYi9kcm9wZG93bi1icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlcnZpY2VzL3NlYXJjaC1xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtcGFuZWwvc2VhcmNoLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GdW5jdGlvbiA9IChlbnRyeTogTm9kZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWxpZGF0aW9uID0gKCkgPT4gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICAgICAgTWF0SW5wdXRNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIEF1dG9Gb2N1c0RpcmVjdGl2ZSxcbiAgICAgICAgTWF0SWNvbk1vZHVsZSxcbiAgICAgICAgRHJvcGRvd25TaXRlc0NvbXBvbmVudCxcbiAgICAgICAgTWF0QnV0dG9uTW9kdWxlLFxuICAgICAgICBUb29sYmFyVGl0bGVDb21wb25lbnQsXG4gICAgICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgICAgIERyb3Bkb3duQnJlYWRjcnVtYkNvbXBvbmVudCxcbiAgICAgICAgTm9kZUNvdW50ZXJEaXJlY3RpdmUsXG4gICAgICAgIERvY3VtZW50TGlzdENvbXBvbmVudCxcbiAgICAgICAgSGlnaGxpZ2h0RGlyZWN0aXZlLFxuICAgICAgICBEYXRhQ29sdW1uTGlzdENvbXBvbmVudCxcbiAgICAgICAgRGF0YUNvbHVtbkNvbXBvbmVudCxcbiAgICAgICAgTmFtZUxvY2F0aW9uQ2VsbENvbXBvbmVudCxcbiAgICAgICAgSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICAgICAgU2VhcmNoUGFuZWxDb21wb25lbnRcbiAgICBdLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDogeyBjbGFzczogJ2FkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwnIH0sXG4gICAgcHJvdmlkZXJzOiBbU2VhcmNoUXVlcnlCdWlsZGVyU2VydmljZV1cbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudE5vZGVTZWxlY3RvclBhbmVsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgREVGQVVMVF9QQUdJTkFUSU9OOiBQYWdpbmF0aW9uID0gbmV3IFBhZ2luYXRpb24oe1xuICAgICAgICBtYXhJdGVtczogMjUsXG4gICAgICAgIHNraXBDb3VudDogMFxuICAgIH0pO1xuXG4gICAgcmVhZG9ubHkgZGlzYWJsZUFjdGlvbkZvbGRlckxpc3QgPSBbJy1teXNpdGVzLSddO1xuXG4gICAgcHJpdmF0ZSBzaG93U2l0ZUxpc3QgPSB0cnVlO1xuICAgIHByaXZhdGUgc2hvd1NlYXJjaEZpZWxkID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNob3dDb3VudGVyID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBfZW1wdHlMaXN0ID0gdHJ1ZTtcblxuICAgIC8qKiBJZiB0cnVlIHdpbGwgcmVzdHJpY3QgdGhlIHNlYXJjaCBhbmQgYnJlYWRjcnVtYnMgdG8gdGhlIGN1cnJlbnRGb2xkZXJJZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcmVzdHJpY3RSb290VG9DdXJyZW50Rm9sZGVySWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBOb2RlIElEIG9mIHRoZSBmb2xkZXIgY3VycmVudGx5IGxpc3RlZC4gKi9cbiAgICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KVxuICAgIGN1cnJlbnRGb2xkZXJJZDogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKlxuICAgICAqIEhpZGUgdGhlIFwiTXkgRmlsZXNcIiBvcHRpb24gYWRkZWQgdG8gdGhlIHNpdGUgbGlzdCBieSBkZWZhdWx0LlxuICAgICAqIFNlZSB0aGUgW1NpdGVzIERyb3Bkb3duIGNvbXBvbmVudF0oc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50Lm1kKVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJvcGRvd25IaWRlTXlGaWxlczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIHNpdGUgZm9yIHNpdGUgZHJvcGRvd24uIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIGBzaXRlTGlzdGAuXG4gICAgICogcHJvcGVydHkgb2YgdGhlIFNpdGVzIERyb3Bkb3duIGNvbXBvbmVudCAoc2VlIGl0cyBkb2MgcGFnZVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uKS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duU2l0ZUxpc3Q6IFNpdGVQYWdpbmcgPSBudWxsO1xuXG4gICAgX3Jvd0ZpbHRlcjogUm93RmlsdGVyID0gZGVmYXVsdFZhbGlkYXRpb247XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gKndoZXJlKiBmaWx0ZXIgZnVuY3Rpb24uIFNlZSB0aGVcbiAgICAgKiBEb2N1bWVudCBMaXN0IGNvbXBvbmVudFxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2hlcmU6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSByb3cgZmlsdGVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogW1JvdyBGaWx0ZXIgTW9kZWxdKHJvdy1maWx0ZXIubW9kZWwubWQpIHBhZ2VcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCByb3dGaWx0ZXIocm93RmlsdGVyOiBSb3dGaWx0ZXIpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVSb3dGaWx0ZXIocm93RmlsdGVyKTtcbiAgICB9XG5cbiAgICBnZXQgcm93RmlsdGVyKCk6IFJvd0ZpbHRlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb3dGaWx0ZXI7XG4gICAgfVxuXG4gICAgX2V4Y2x1ZGVTaXRlQ29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBsaXN0IG9mIHNpdGUgY29udGVudCBjb21wb25lbnRJZHMuXG4gICAgICogVXNlZCB0byBmaWx0ZXIgb3V0IHRoZSBjb3JyZXNwb25kaW5nIGl0ZW1zIGZyb20gdGhlIGRpc3BsYXllZCBub2Rlc1xuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGV4Y2x1ZGVTaXRlQ29udGVudChleGNsdWRlU2l0ZUNvbnRlbnQ6IHN0cmluZ1tdKSB7XG4gICAgICAgIHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudCA9IGV4Y2x1ZGVTaXRlQ29udGVudDtcbiAgICAgICAgdGhpcy5jcmVhdGVSb3dGaWx0ZXIodGhpcy5fcm93RmlsdGVyKTtcbiAgICB9XG5cbiAgICBnZXQgZXhjbHVkZVNpdGVDb250ZW50KCk6IHN0cmluZ1tdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gaW1hZ2UgcmVzb2x2ZXIgZnVuY3Rpb24uIFNlZSB0aGVcbiAgICAgKiBbSW1hZ2UgUmVzb2x2ZXIgTW9kZWxdKGltYWdlLXJlc29sdmVyLm1vZGVsLm1kKSBwYWdlXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpbWFnZVJlc29sdmVyOiBJbWFnZVJlc29sdmVyID0gbnVsbDtcblxuICAgIC8qKiBOdW1iZXIgb2YgaXRlbXMgc2hvd24gcGVyIHBhZ2UgaW4gdGhlIGxpc3QuICovXG4gICAgQElucHV0KClcbiAgICBwYWdlU2l6ZTogbnVtYmVyID0gdGhpcy5ERUZBVUxUX1BBR0lOQVRJT04ubWF4SXRlbXM7XG5cbiAgICAvKiogRGVmaW5lIHRoZSBzZWxlY3Rpb24gbW9kZSBmb3IgZG9jdW1lbnQgbGlzdC4gVGhlIGFsbG93ZWQgdmFsdWVzIGFyZSBzaW5nbGUgb3IgbXVsdGlwbGUgKi9cbiAgICBASW5wdXQoKVxuICAgIHNlbGVjdGlvbk1vZGU6ICdzaW5nbGUnIHwgJ211bHRpcGxlJyA9ICdzaW5nbGUnO1xuXG4gICAgLyoqXG4gICAgICogRnVuY3Rpb24gdXNlZCB0byBkZWNpZGUgaWYgdGhlIHNlbGVjdGVkIG5vZGUgaGFzIHBlcm1pc3Npb24gdG8gYmUgc2VsZWN0ZWQuXG4gICAgICogRGVmYXVsdCB2YWx1ZSBpcyBhIGZ1bmN0aW9uIHRoYXQgYWx3YXlzIHJldHVybnMgdHJ1ZS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzU2VsZWN0aW9uVmFsaWQ6IFZhbGlkYXRpb25GdW5jdGlvbiA9IGRlZmF1bHRWYWxpZGF0aW9uO1xuXG4gICAgLyoqXG4gICAgICogVHJhbnNmb3JtYXRpb24gdG8gYmUgcGVyZm9ybWVkIG9uIHRoZSBjaG9zZW4vZm9sZGVyIG5vZGUgYmVmb3JlIGJ1aWxkaW5nIHRoZVxuICAgICAqIGJyZWFkY3J1bWIgVUkuIENhbiBiZSB1c2VmdWwgd2hlbiBjdXN0b20gZm9ybWF0dGluZyBpcyBuZWVkZWQgZm9yIHRoZSBicmVhZGNydW1iLlxuICAgICAqIFlvdSBjYW4gY2hhbmdlIHRoZSBwYXRoIGVsZW1lbnRzIGZyb20gdGhlIG5vZGUgdGhhdCBhcmUgdXNlZCB0byBidWlsZCB0aGVcbiAgICAgKiBicmVhZGNydW1iIHVzaW5nIHRoaXMgZnVuY3Rpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBicmVhZGNydW1iVHJhbnNmb3JtOiAobm9kZSkgPT4gYW55O1xuXG4gICAgLyoqIFRvZ2dsZSBzZWFyY2ggaW5wdXQgcmVuZGVyaW5nICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2hvd1NlYXJjaCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoRmllbGQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2VhcmNoRmllbGQ7XG4gICAgfVxuXG4gICAgLyoqIFRvZ2dsZSBzaXRlcyBsaXN0IGRyb3Bkb3duIHJlbmRlcmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dEcm9wZG93blNpdGVMaXN0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dTaXRlTGlzdCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IHNob3dEcm9wZG93blNpdGVMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zaG93U2l0ZUxpc3Q7XG4gICAgfVxuXG4gICAgLyoqIFNob3dzIHRoZSBmaWxlcyBhbmQgZm9sZGVycyBpbiB0aGUgc2VhcmNoIHJlc3VsdCAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dGaWxlc0luUmVzdWx0KHZhbHVlOiBib29sZWFuKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCBzaG93RmlsZXNRdWVyeSA9IGBUWVBFOidjbTpmb2xkZXInJHt2YWx1ZSA/IGAgT1IgVFlQRTonY206Y29udGVudCdgIDogJyd9YDtcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShzaG93RmlsZXNRdWVyeSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogU2hvd3MgdGhlIG5vZGUgY291bnRlciBpbiB0aGUgYnJlYWRjcnVtYiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dOb2RlQ291bnRlcih2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNob3dDb3VudGVyID0gdmFsdWUgPz8gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0IHNob3dOb2RlQ291bnRlcigpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd0NvdW50ZXI7XG4gICAgfVxuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBoYXMgY2hvc2VuIGFuIGl0ZW0uICovXG4gICAgQE91dHB1dCgpXG4gICAgc2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlW10+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGNoYW5nZXMuICovXG4gICAgQE91dHB1dCgpXG4gICAgbmF2aWdhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZUVudHJ5RXZlbnQ+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHRoZSBzZWxlY3Qgc2l0ZSBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNpdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gc2VhcmNoIGlzIHJ1bm5pbmcuICovXG4gICAgQE91dHB1dCgpXG4gICAgc2hvd2luZ1NlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gY3VycmVudCBmb2xkZXIgbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGN1cnJlbnRGb2xkZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGU+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGZvbGRlciBsb2FkZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgZm9sZGVyTG9hZGVkOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gICAgQFZpZXdDaGlsZCgnZG9jdW1lbnRMaXN0JywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBkb2N1bWVudExpc3Q6IERvY3VtZW50TGlzdENvbXBvbmVudDtcblxuICAgIEBWaWV3Q2hpbGQoSGlnaGxpZ2h0RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGhpZ2hsaWdodGVyOiBIaWdobGlnaHREaXJlY3RpdmU7XG5cbiAgICBub2RlUGFnaW5nOiBOb2RlUGFnaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc2l0ZUlkOiBudWxsIHwgc3RyaW5nO1xuICAgIGJyZWFkY3J1bWJSb290SWQ6IG51bGwgfCBzdHJpbmc7XG4gICAgc2VhcmNoVGVybTogc3RyaW5nID0gJyc7XG4gICAgc2hvd2luZ1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsb2FkaW5nU2VhcmNoUmVzdWx0czogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGluRGlhbG9nOiBib29sZWFuID0gZmFsc2U7XG4gICAgX2Nob3Nlbk5vZGU6IE5vZGVbXSA9IG51bGw7XG4gICAgc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb246IE5vZGVbXSA9IG51bGw7XG4gICAgZm9sZGVySWRUb1Nob3c6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGJyZWFkY3J1bWJGb2xkZXJUaXRsZTogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgc3RhcnRTaXRlR3VpZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgaGFzVmFsaWRRdWVyeTogYm9vbGVhbiA9IGZhbHNlO1xuICAgIHNob3dIZWFkZXIgPSBTaG93SGVhZGVyTW9kZS5OZXZlcjtcblxuICAgIEBWaWV3Q2hpbGQoSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIGluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudDogSW5maW5pdGVQYWdpbmF0aW9uQ29tcG9uZW50O1xuXG4gICAgaW5maW5pdGVTY3JvbGw6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBkZWJvdW5jZVNlYXJjaDogbnVtYmVyID0gMjAwO1xuICAgIHNlYXJjaElucHV0OiBVbnR5cGVkRm9ybUNvbnRyb2wgPSBuZXcgVW50eXBlZEZvcm1Db250cm9sKCk7XG5cbiAgICB0YXJnZXQ6IFBhZ2luYXRlZENvbXBvbmVudDtcbiAgICBwcmVzZWxlY3RlZE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuICAgIGN1cnJlbnRVcGxvYWRCYXRjaDogTm9kZUVudHJ5W10gPSBbXTtcblxuICAgIHNvcnRpbmc6IHN0cmluZ1tdIHwgRGF0YVNvcnRpbmcgPSBbJ2NyZWF0ZWRBdCcsICdkZXNjJ107XG5cbiAgICBzZWFyY2hQYW5lbEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjdXN0b21SZXNvdXJjZXNTZXJ2aWNlOiBDdXN0b21SZXNvdXJjZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHF1ZXJ5QnVpbGRlclNlcnZpY2U6IFNlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXNlclByZWZlcmVuY2VzU2VydmljZTogVXNlclByZWZlcmVuY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBub2Rlc0FwaVNlcnZpY2U6IE5vZGVzQXBpU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB1cGxvYWRTZXJ2aWNlOiBVcGxvYWRTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHNpdGVzU2VydmljZTogU2l0ZXNTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGNvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2U6IENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICBzZXQgY2hvc2VuTm9kZSh2YWx1ZTogTm9kZVtdKSB7XG4gICAgICAgIHRoaXMuX2Nob3Nlbk5vZGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3QubmV4dCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IGNob3Nlbk5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaG9zZW5Ob2RlO1xuICAgIH1cblxuICAgIGdldCBlbXB0eUxpc3QoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9lbXB0eUxpc3Q7XG4gICAgfVxuXG4gICAgZ2V0U2VsZWN0ZWRDb3VudCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5jaG9zZW5Ob2RlPy5sZW5ndGggfHwgMDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZWFyY2hJbnB1dC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlU2VhcmNoKSwgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChzZWFyY2hWYWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gc2VhcmNoVmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVzZXJRdWVyeSA9IHNlYXJjaFZhbHVlLmxlbmd0aCA+IDAgPyBgJHtzZWFyY2hWYWx1ZX0qYCA6IHNlYXJjaFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoc2VhcmNoUmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbGlkUXVlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcGFyZURpYWxvZ0Zvck5ld1NlYXJjaChzZWFyY2hSZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuZXhlY3V0ZShmYWxzZSwgc2VhcmNoUmVxdWVzdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFzVmFsaWRRdWVyeSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb2xkZXJUb1Nob3coKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5leGVjdXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHJlc3VsdHM6IE5vZGVQYWdpbmcpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc1ZhbGlkUXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVzZXJQcmVmZXJlbmNlc1NlcnZpY2VcbiAgICAgICAgICAgIC5zZWxlY3QoVXNlclByZWZlcmVuY2VWYWx1ZXMuUGFnaW5hdGlvblNpemUpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHBhZ1NpemUpID0+ICh0aGlzLnBhZ2VTaXplID0gcGFnU2l6ZSkpO1xuXG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGhpcy5kb2N1bWVudExpc3Q7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvbGRlcklkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN0cmljdFJvb3RUb0N1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYlJvb3RJZCA9IHRoaXMuY3VycmVudEZvbGRlcklkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2l0ZUlkID0gdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0U3RhcnRTaXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gPSB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gPyB0aGlzLmJyZWFkY3J1bWJUcmFuc2Zvcm0gOiBudWxsO1xuICAgICAgICB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgPSB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgPyB0aGlzLmlzU2VsZWN0aW9uVmFsaWQgOiBkZWZhdWx0VmFsaWRhdGlvbjtcbiAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWRFdmVudCgpO1xuICAgICAgICB0aGlzLm9uRmlsZVVwbG9hZERlbGV0ZWRFdmVudCgpO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLnNldFNlYXJjaFNjb3BlVG9Ob2RlcygpO1xuXG4gICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LiRmb2xkZXJOb2RlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoY3VycmVudE5vZGU6IE5vZGUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvbGRlci5lbWl0KGN1cnJlbnROb2RlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VhcmNoUGFuZWwoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoUGFuZWxFeHBhbmRlZCA9ICF0aGlzLnNlYXJjaFBhbmVsRXhwYW5kZWQ7XG4gICAgfVxuXG4gICAgaGFzQ3VzdG9tTW9kZWxzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlPy5jdXN0b21Nb2RlbHM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZpbGVVcGxvYWRFdmVudCgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWRDb21wbGV0ZVxuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZmlsZVVwbG9hZEV2ZW50OiBGaWxlVXBsb2FkQ29tcGxldGVFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVwbG9hZEJhdGNoLnB1c2goZmlsZVVwbG9hZEV2ZW50LmRhdGEpO1xuICAgICAgICAgICAgICAgIGlmICghdGhpcy51cGxvYWRTZXJ2aWNlLmlzVXBsb2FkaW5nKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmVzZWxlY3RlZE5vZGVzID0gdGhpcy5nZXRQcmVzZWxlY3ROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFVwbG9hZEJhdGNoID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRmlsZVVwbG9hZERlbGV0ZWRFdmVudCgpIHtcbiAgICAgICAgdGhpcy51cGxvYWRTZXJ2aWNlLmZpbGVVcGxvYWREZWxldGVkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZSgoZGVsZXRlZEZpbGVFdmVudDogRmlsZVVwbG9hZERlbGV0ZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC51bnNlbGVjdFJvd0Zyb21Ob2RlSWQoZGVsZXRlZEZpbGVFdmVudC5maWxlLmRhdGEuZW50cnkuaWQpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QucmVsb2FkV2l0aG91dFJlc2V0dGluZ1NlbGVjdGlvbigpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFN0YXJ0U2l0ZSgpIHtcbiAgICAgICAgdGhpcy5ub2Rlc0FwaVNlcnZpY2UuZ2V0Tm9kZSh0aGlzLmN1cnJlbnRGb2xkZXJJZCkuc3Vic2NyaWJlKChzdGFydE5vZGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFydFNpdGVHdWlkID0gdGhpcy5zaXRlc1NlcnZpY2UuZ2V0U2l0ZU5hbWVGcm9tTm9kZVBhdGgoc3RhcnROb2RlRW50cnkpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnRTaXRlR3VpZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2l0ZXNTZXJ2aWNlLmdldFNpdGUodGhpcy5zdGFydFNpdGVHdWlkKS5zdWJzY3JpYmUoKHN0YXJ0U2l0ZUVudHJ5KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydFNpdGVFbnRyeSBpbnN0YW5jZW9mIFNpdGVFbnRyeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXRlQ2hhbmdlLmVtaXQoc3RhcnRTaXRlRW50cnkuZW50cnkudGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlUm93RmlsdGVyKGZpbHRlcj86IFJvd0ZpbHRlcikge1xuICAgICAgICBpZiAoIWZpbHRlcikge1xuICAgICAgICAgICAgZmlsdGVyID0gKCkgPT4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9yb3dGaWx0ZXIgPSAodmFsdWU6IFNoYXJlRGF0YVJvdywgaW5kZXg6IG51bWJlciwgYXJyYXk6IFNoYXJlRGF0YVJvd1tdKSA9PlxuICAgICAgICAgICAgZmlsdGVyKHZhbHVlLCBpbmRleCwgYXJyYXkpICYmICF0aGlzLmlzRXhjbHVkZWRTaXRlQ29udGVudCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0V4Y2x1ZGVkU2l0ZUNvbnRlbnQocm93OiBTaGFyZURhdGFSb3cpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZW50cnkgPSByb3cubm9kZS5lbnRyeTtcbiAgICAgICAgaWYgKHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudD8ubGVuZ3RoICYmIGVudHJ5Py5wcm9wZXJ0aWVzPy5bJ3N0OmNvbXBvbmVudElkJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IGV4Y2x1ZGVkSXRlbSA9IHRoaXMuX2V4Y2x1ZGVTaXRlQ29udGVudC5maW5kKChpZDogc3RyaW5nKSA9PiBlbnRyeS5wcm9wZXJ0aWVzWydzdDpjb21wb25lbnRJZCddID09PSBpZCk7XG4gICAgICAgICAgICByZXR1cm4gISFleGNsdWRlZEl0ZW07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIHNpdGUgYXR0cmlidXRlIGFuZCBzdGFydHMgYSBuZXcgc2VhcmNoXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hvc2VuU2l0ZSBTaXRlRW50cnkgdG8gc2VhcmNoIHdpdGhpblxuICAgICAqL1xuICAgIHNpdGVDaGFuZ2VkKGNob3NlblNpdGU6IFNpdGVFbnRyeSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNpdGVJZCA9IGNob3NlblNpdGUuZW50cnkuZ3VpZDtcbiAgICAgICAgdGhpcy5zZXRUaXRsZUlmQ3VzdG9tU2l0ZShjaG9zZW5TaXRlKTtcbiAgICAgICAgdGhpcy5zaXRlQ2hhbmdlLmVtaXQoY2hvc2VuU2l0ZS5lbnRyeS50aXRsZSk7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgY3VycmVudCBicmVhZGNydW1iIGZvbGRlciBub2RlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgYWN0dWFsbHkgc2VsZWN0ZWR8ZW50ZXJlZCBmb2xkZXIgbm9kZSBvciBudWxsIGluIGNhc2Ugb2Ygc2VhcmNoaW5nIGZvciB0aGUgYnJlYWRjcnVtYlxuICAgICAqL1xuICAgIGdldCBicmVhZGNydW1iRm9sZGVyTm9kZSgpOiBOb2RlIHwgbnVsbCB7XG4gICAgICAgIGxldCBmb2xkZXJOb2RlOiBOb2RlO1xuXG4gICAgICAgIGlmICh0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzICYmIHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24/Lmxlbmd0aCkge1xuICAgICAgICAgICAgZm9sZGVyTm9kZSA9IHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb25bMF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb2xkZXJOb2RlID0gdGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb2xkZXJOb2RlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIHRoZSBkaWFsb2cgZm9yIGEgbmV3IHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHNlYXJjaFJlcXVlc3QgcmVxdWVzdCBvcHRpb25zXG4gICAgICovXG4gICAgcHJlcGFyZURpYWxvZ0Zvck5ld1NlYXJjaChzZWFyY2hSZXF1ZXN0OiBTZWFyY2hSZXF1ZXN0KTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gc2VhcmNoUmVxdWVzdCA/IG51bGwgOiB0aGlzLmRvY3VtZW50TGlzdDtcbiAgICAgICAgaWYgKHRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudC5yZXNldCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5sb2FkaW5nU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRkQ29ycmVzcG9uZGluZ05vZGVJZHNRdWVyeSgpO1xuICAgICAgICB0aGlzLnJlc2V0Q2hvc2VuTm9kZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIHRoZSBzZWFyY2ggaW5wdXQgYW5kIHJlc2V0IHRvIGxhc3QgZm9sZGVyIG5vZGUgaW4gd2hpY2ggc2VhcmNoIHdhcyBwZXJmb3JtZWRcbiAgICAgKi9cbiAgICBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZWFyY2hUZXJtID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51c2VyUXVlcnkgPSAnJztcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc2V0cyB0aGUgZm9sZGVyIHRvIGJlIHNob3duIHdpdGggdGhlIHNpdGUgc2VsZWN0aW9uIG9yIHRoZSBpbml0aWFsIGxhbmRpbmcgZm9sZGVyXG4gICAgICovXG4gICAgcmVzZXRGb2xkZXJUb1Nob3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSB0aGlzLnNpdGVJZCB8fCB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgc2VhcmNoIGlucHV0IGFuZCBzZWFyY2ggcmVsYXRlZCBkYXRhXG4gICAgICovXG4gICAgY2xlYXJTZWFyY2goKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgICAgICB0aGlzLm5vZGVQYWdpbmcgPSBudWxsO1xuICAgICAgICB0aGlzLnJlc2V0UGFnaW5hdGlvbigpO1xuICAgICAgICB0aGlzLnJlc2V0Q2hvc2VuTm9kZSgpO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaC5lbWl0KHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29ycmVzcG9uZGluZ05vZGVJZHNRdWVyeSgpIHtcbiAgICAgICAgbGV0IGV4dHJhUGFyZW50RmlsdGVyaW5nID0gJyc7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5oYXNDb3JyZXNwb25kaW5nTm9kZUlkcyh0aGlzLnNpdGVJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5nZXRDb3JyZXNwb25kaW5nTm9kZUlkcyh0aGlzLnNpdGVJZCkuc3Vic2NyaWJlKChub2RlSWRzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVJZHM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBub2RlSWRzXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChpZCkgPT4gaWQgIT09IHRoaXMuc2l0ZUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZvckVhY2goKGV4dHJhSWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVBhcmVudEZpbHRlcmluZyArPSBgIE9SIEFOQ0VTVE9SOid3b3Jrc3BhY2U6Ly9TcGFjZXNTdG9yZS8ke2V4dHJhSWR9J2A7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RmlsdGVyaW5nID0gdGhpcy5zaXRlSWQgPyBgQU5DRVNUT1I6J3dvcmtzcGFjZTovL1NwYWNlc1N0b3JlLyR7dGhpcy5zaXRlSWR9JyR7ZXh0cmFQYXJlbnRGaWx0ZXJpbmd9YCA6ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShwYXJlbnRGaWx0ZXJpbmcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRGaWx0ZXJpbmcgPSB0aGlzLnNpdGVJZCA/IGBBTkNFU1RPUjond29ya3NwYWNlOi8vU3BhY2VzU3RvcmUvJHt0aGlzLnNpdGVJZH0nYCA6ICcnO1xuICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmFkZEZpbHRlclF1ZXJ5KHBhcmVudEZpbHRlcmluZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFNlYXJjaFNjb3BlVG9Ob2RlcygpIHtcbiAgICAgICAgY29uc3Qgc2NvcGU6IFJlcXVlc3RTY29wZSA9IHtcbiAgICAgICAgICAgIGxvY2F0aW9uczogJ25vZGVzJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2Uuc2V0U2NvcGUoc2NvcGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3cgdGhlIHJlc3VsdHMgb2YgdGhlIHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIHJlc3VsdHMgU2VhcmNoIHJlc3VsdHNcbiAgICAgKi9cbiAgICBwcml2YXRlIHNob3dTZWFyY2hSZXN1bHRzKHJlc3VsdHM6IE5vZGVQYWdpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyA9IHRydWU7XG4gICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoLmVtaXQodGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyk7XG5cbiAgICAgICAgdGhpcy5ub2RlUGFnaW5nID0gcmVzdWx0cztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHNob3dpbmdTZWFyY2hSZXN1bHRzIHN0YXRlIHRvIGJlIGFibGUgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIHNlYXJjaCByZXN1bHRzIG9yIGZvbGRlciByZXN1bHRzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gJGV2ZW50IG5vZGUgZXZlbnRcbiAgICAgKi9cbiAgICBvbkZvbGRlckNoYW5nZSgkZXZlbnQ6IE5vZGVFbnRyeUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuZm9sZGVySWRUb1Nob3cgPSAkZXZlbnQudmFsdWUuaWQ7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJyZWFkY3J1bWJGb2xkZXJUaXRsZSA9IG51bGw7XG4gICAgICAgIHRoaXMucHJlc2VsZWN0ZWROb2RlcyA9IFtdO1xuICAgICAgICB0aGlzLmNsZWFyU2VhcmNoKCk7XG4gICAgICAgIHRoaXMubmF2aWdhdGlvbkNoYW5nZS5lbWl0KCRldmVudCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQXR0ZW1wdHMgdG8gc2V0IHRoZSBjdXJyZW50bHkgbG9hZGVkIG5vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2RlUGFnaW5nIHBhZ2luYXRpb24gbW9kZWxcbiAgICAgKi9cbiAgICBvbkZvbGRlckxvYWRlZChub2RlUGFnaW5nOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZW1wdHlMaXN0ID0gIXRoaXMuZG9jdW1lbnRMaXN0LmRhdGEuZ2V0Um93cygpLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudXBkYXRlUGFnaW5hdGlvbkFmdGVyUm93RmlsdGVyKG5vZGVQYWdpbmcpO1xuICAgICAgICBpZiAoIXRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpIHtcbiAgICAgICAgICAgIHRoaXMuYXR0ZW1wdE5vZGVTZWxlY3Rpb24odGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5mb2xkZXJMb2FkZWQuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgcGFnaW5hdGlvbi5oYXNNb3JlSXRlbXMgdG8gZmFsc2UgYWZ0ZXIgZmlsdGVyaW5nIG9ubHkgZm9sZGVycyBkdXJpbmcgJ0NPUFknIGFuZCAnTU9WRScgYWN0aW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVBhZ2luZyBwYWdpbmF0aW9uIG1vZGVsXG4gICAgICovXG4gICAgdXBkYXRlUGFnaW5hdGlvbkFmdGVyUm93RmlsdGVyKG5vZGVQYWdpbmc6IE5vZGVQYWdpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRMaXN0LmRhdGEuZ2V0Um93cygpLmxlbmd0aCA8IG5vZGVQYWdpbmcubGlzdC5wYWdpbmF0aW9uLm1heEl0ZW1zKSB7XG4gICAgICAgICAgICBub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbi5oYXNNb3JlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgd2hldGhlciBicmVhZGNydW1iIGhhcyB0byBiZSBzaG93biBvciBub3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIGB0cnVlYCBpZiBuZWVkcyB0byBzaG93IHRoZSBicmVhZGNydW1iLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIHNob3dCcmVhZGNydW1icygpIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzIHx8IHRoaXMuY2hvc2VuTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBMb2FkcyB0aGUgbmV4dCBiYXRjaCBvZiBzZWFyY2ggcmVzdWx0c1xuICAgICAqXG4gICAgICogQHBhcmFtIHBhZ2luYXRpb24gUGFnaW5hdGlvbiBvYmplY3RcbiAgICAgKi9cbiAgICBnZXROZXh0UGFnZU9mU2VhcmNoKHBhZ2luYXRpb246IFBhZ2luYXRpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbCA9IHRydWU7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5wYWdpbmcubWF4SXRlbXMgPSBwYWdpbmF0aW9uLm1heEl0ZW1zO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nLnNraXBDb3VudCA9IHBhZ2luYXRpb24uc2tpcENvdW50O1xuXG4gICAgICAgIGlmICh0aGlzLnNlYXJjaFRlcm0ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2VsZWN0cyBub2RlIGFzIGNob3NlbiBpZiBpdCBoYXMgdGhlIHJpZ2h0IHBlcm1pc3Npb24sIGNsZWFycyB0aGUgc2VsZWN0aW9uIG90aGVyd2lzZVxuICAgICAqXG4gICAgICogQHBhcmFtIGVudHJ5IG5vZGUgZW50cnlcbiAgICAgKi9cbiAgICBwcml2YXRlIGF0dGVtcHROb2RlU2VsZWN0aW9uKGVudHJ5OiBOb2RlKTogdm9pZCB7XG4gICAgICAgIGlmIChlbnRyeSAmJiB0aGlzLmlzU2VsZWN0aW9uVmFsaWQoZW50cnkpICYmICF0aGlzLmlzQWN0aW9uRGlzYWJsZWRGb3JGb2xkZXIodGhpcy5kb2N1bWVudExpc3QuY3VycmVudEZvbGRlcklkKSkge1xuICAgICAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gW2VudHJ5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaXNBY3Rpb25EaXNhYmxlZEZvckZvbGRlcihmb2xkZXJJZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVBY3Rpb25Gb2xkZXJMaXN0LmluY2x1ZGVzKGZvbGRlcklkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGNob3NlbiBub2RlXG4gICAgICovXG4gICAgcmVzZXRDaG9zZW5Ob2RlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNob3Nlbk5vZGUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEl0IGZpbHRlcnMgYW5kIGVtaXQgdGhlIHNlbGVjdGlvbiBjb21pbmcgZnJvbSB0aGUgZG9jdW1lbnQgbGlzdFxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVzRW50cmllcyBzZWxlY3RlZCBub2Rlc1xuICAgICAqL1xuICAgIG9uQ3VycmVudFNlbGVjdGlvbihub2Rlc0VudHJpZXM6IE5vZGVFbnRyeVtdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHZhbGlkTm9kZXNFbnRpdHkgPSBub2Rlc0VudHJpZXMuZmlsdGVyKChub2RlKSA9PiB0aGlzLmlzU2VsZWN0aW9uVmFsaWQobm9kZS5lbnRyeSkpO1xuICAgICAgICB0aGlzLmNob3Nlbk5vZGUgPSB2YWxpZE5vZGVzRW50aXR5Lm1hcCgobm9kZSkgPT4gbm9kZS5lbnRyeSk7XG4gICAgICAgIHRoaXMuc2VsZWN0aW9uV2l0aG91dFZhbGlkYXRpb24gPSBub2Rlc0VudHJpZXMubWFwKChub2RlKSA9PiBub2RlLmVudHJ5KTtcbiAgICB9XG5cbiAgICBzZXRUaXRsZUlmQ3VzdG9tU2l0ZShzaXRlOiBTaXRlRW50cnkpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tUmVzb3VyY2VzU2VydmljZS5pc0N1c3RvbVNvdXJjZShzaXRlLmVudHJ5Lmd1aWQpKSB7XG4gICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJGb2xkZXJUaXRsZSA9IHNpdGUuZW50cnkudGl0bGU7XG4gICAgICAgICAgICBpZiAodGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZS5wYXRoLmVsZW1lbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyTm9kZS5uYW1lID0gc2l0ZS5lbnRyeS50aXRsZTtcbiAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC5mb2xkZXJOb2RlLnBhdGguZWxlbWVudHMgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaGFzUHJlc2VsZWN0Tm9kZXMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXNlbGVjdGVkTm9kZXM/Lmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgaXNTaW5nbGVTZWxlY3Rpb25Nb2RlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlJztcbiAgICB9XG5cbiAgICBnZXRQcmVzZWxlY3ROb2Rlc0Jhc2VkT25TZWxlY3Rpb25Nb2RlKCk6IE5vZGVFbnRyeVtdIHtcbiAgICAgICAgbGV0IHNlbGVjdGVkTm9kZXM6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVwbG9hZEJhdGNoPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpKSB7XG4gICAgICAgICAgICAgICAgc2VsZWN0ZWROb2RlcyA9IFt0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaFt0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaC5sZW5ndGggLSAxXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzZWxlY3RlZE5vZGVzO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRQYWdpbmF0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nID0ge1xuICAgICAgICAgICAgbWF4SXRlbXM6IHRoaXMucGFnZVNpemUsXG4gICAgICAgICAgICBza2lwQ291bnQ6IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLnNraXBDb3VudFxuICAgICAgICB9O1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnRcIj5cbiAgICA8bWF0LWZvcm0tZmllbGQgZmxvYXRQbGFjZWhvbGRlcj1cIm5ldmVyXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cImZpbGxcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdFNpemluZz1cImR5bmFtaWNcIlxuICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInNob3dTZWFyY2hcIj5cbiAgICAgICAgPG1hdC1sYWJlbD57eyAnTk9ERV9TRUxFQ1RPUi5TRUFSQ0gnIHwgdHJhbnNsYXRlIH19PC9tYXQtbGFiZWw+XG4gICAgICAgIDxpbnB1dCBtYXRJbnB1dFxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hJbnB1dFwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNlYXJjaFRlcm1cIlxuICAgICAgICAgICAgYWRmLWF1dG8tZm9jdXNcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtaW5wdXRcIj5cblxuICAgICAgICA8bWF0LWljb24gKm5nSWY9XCJzZWFyY2hUZXJtLmxlbmd0aCA+IDBcIlxuICAgICAgICAgICAgbWF0U3VmZml4IChjbGljayk9XCJjbGVhcigpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWlucHV0LWljb25cIlxuICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1jbGVhclwiPmNsZWFyXG4gICAgICAgIDwvbWF0LWljb24+XG5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGVybS5sZW5ndGggPT09IDBcIlxuICAgICAgICAgICAgbWF0U3VmZml4XG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtaWNvblwiPnNlYXJjaFxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICA8YWRmLXNpdGVzLWRyb3Bkb3duXG4gICAgICAgICpuZ0lmPVwic2hvd0Ryb3Bkb3duU2l0ZUxpc3RcIlxuICAgICAgICBjbGFzcz1cImZ1bGwtd2lkdGhcIlxuICAgICAgICAoY2hhbmdlKT1cInNpdGVDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ05PREVfU0VMRUNUT1IuU0VMRUNUX0xJQlJBUlknXCJcbiAgICAgICAgW2hpZGVNeUZpbGVzXT1cImRyb3Bkb3duSGlkZU15RmlsZXNcIlxuICAgICAgICBbc2l0ZUxpc3RdPVwiZHJvcGRvd25TaXRlTGlzdFwiXG4gICAgICAgIFt2YWx1ZV09XCJzdGFydFNpdGVHdWlkXCJcbiAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNpdGVzLWNvbWJvXCIgLz5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaGFzQ3VzdG9tTW9kZWxzKClcIlxuICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJhZGYtdG9nZ2xlLXNlYXJjaC1wYW5lbC1idXR0b25cIlxuICAgICAgICBtYXQtaWNvbi1idXR0b25cbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlYXJjaFBhbmVsKClcIj5cbiAgICAgICAgPG1hdC1pY29uPmZpbHRlcl9saXN0PC9tYXQtaWNvbj5cbiAgICAgICAge3sgJ1NFQVJDSC5TRUFSQ0hfSEVBREVSLlRJVExFJyB8IHRyYW5zbGF0ZSB9fVxuICAgIDwvYnV0dG9uPlxuICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1wYW5lbC1jb250YWluZXJcIj5cbiAgICAgICAgPGFkZi1zZWFyY2gtcGFuZWwgKm5nSWY9XCJzZWFyY2hQYW5lbEV4cGFuZGVkXCIgLz5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItZG9jdW1lbnQtbGlzdC1jb250YWluZXJcIj5cbiAgICA8YWRmLXRvb2xiYXI+XG4gICAgICAgIDxhZGYtdG9vbGJhci10aXRsZT5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0JyZWFkY3J1bWJzKClcIj5cbiAgICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJhZGYtc2VhcmNoLXJlc3VsdHMtbGFiZWxcIj57eyAnTk9ERV9TRUxFQ1RPUi5TRUFSQ0hfUkVTVUxUUycgfCB0cmFuc2xhdGUgfX08L2gyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8YWRmLWRyb3Bkb3duLWJyZWFkY3J1bWIgKm5nSWY9XCJzaG93QnJlYWRjcnVtYnMoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtYnJlYWRjcnVtYlwiXG4gICAgICAgICAgICAgICAgKG5hdmlnYXRlKT1cImNsZWFyU2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIFt0YXJnZXRdPVwiZG9jdW1lbnRMaXN0XCJcbiAgICAgICAgICAgICAgICBbcm9vdElkXT1cImJyZWFkY3J1bWJSb290SWRcIlxuICAgICAgICAgICAgICAgIFt0cmFuc2Zvcm1dPVwiYnJlYWRjcnVtYlRyYW5zZm9ybVwiXG4gICAgICAgICAgICAgICAgW2ZvbGRlck5vZGVdPVwiYnJlYWRjcnVtYkZvbGRlck5vZGVcIlxuICAgICAgICAgICAgICAgIFtyb290XT1cImJyZWFkY3J1bWJGb2xkZXJUaXRsZVwiXG4gICAgICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtYnJlYWRjcnVtYlwiIC8+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd05vZGVDb3VudGVyXCIgW2FkZi1ub2RlLWNvdW50ZXJdPVwiZ2V0U2VsZWN0ZWRDb3VudCgpXCIgLz5cbiAgICAgICAgPC9hZGYtdG9vbGJhci10aXRsZT5cbiAgICA8L2FkZi10b29sYmFyPlxuXG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0XCJcbiAgICAgICAgW2NsYXNzLmFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0LXNlYXJjaExheW91dF09XCJzaG93aW5nU2VhcmNoUmVzdWx0c1wiXG4gICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWxpc3RcIj5cbiAgICAgICAgPGFkZi1kb2N1bWVudC1saXN0XG4gICAgICAgICAgICAjZG9jdW1lbnRMaXN0XG4gICAgICAgICAgICBbYWRmLWhpZ2hsaWdodF09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgIGFkZi1oaWdobGlnaHQtc2VsZWN0b3I9XCIuYWRmLW5hbWUtbG9jYXRpb24tY2VsbC1uYW1lXCJcbiAgICAgICAgICAgIFtzaG93SGVhZGVyXT1cInNob3dIZWFkZXJcIlxuICAgICAgICAgICAgW25vZGVdPVwibm9kZVBhZ2luZ1wiXG4gICAgICAgICAgICBbcHJlc2VsZWN0Tm9kZXNdPVwicHJlc2VsZWN0ZWROb2Rlc1wiXG4gICAgICAgICAgICBbbWF4SXRlbXNdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgW3Jvd0ZpbHRlcl09XCJfcm93RmlsdGVyXCJcbiAgICAgICAgICAgIFtpbWFnZVJlc29sdmVyXT1cImltYWdlUmVzb2x2ZXJcIlxuICAgICAgICAgICAgW2N1cnJlbnRGb2xkZXJJZF09XCJmb2xkZXJJZFRvU2hvd1wiXG4gICAgICAgICAgICBbc2VsZWN0aW9uTW9kZV09XCJzZWxlY3Rpb25Nb2RlXCJcbiAgICAgICAgICAgIFtjb250ZXh0TWVudUFjdGlvbnNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW2NvbnRlbnRBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFthbGxvd0Ryb3BGaWxlc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbc29ydGluZ109XCJzb3J0aW5nXCJcbiAgICAgICAgICAgIHNvcnRpbmdNb2RlPVwic2VydmVyXCJcbiAgICAgICAgICAgIFt3aGVyZV09XCJ3aGVyZVwiXG4gICAgICAgICAgICAoZm9sZGVyQ2hhbmdlKT1cIm9uRm9sZGVyQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgKHJlYWR5KT1cIm9uRm9sZGVyTG9hZGVkKCRldmVudClcIlxuICAgICAgICAgICAgKG5vZGVTZWxlY3RlZCk9XCJvbkN1cnJlbnRTZWxlY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICBbY2xhc3MuYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWxpc3QtZW1wdHldPVwiZW1wdHlMaXN0XCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1kb2N1bWVudC1saXN0XCI+XG5cbiAgICAgICAgICAgIDxhZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIj57eyAnTk9ERV9TRUxFQ1RPUi5OT19SRVNVTFRTJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9hZGYtY3VzdG9tLWVtcHR5LWNvbnRlbnQtdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkYXRhLWNvbHVtbnM+XG4gICAgICAgICAgICAgICAgPGRhdGEtY29sdW1uIGtleT1cIiR0aHVtYm5haWxcIiB0eXBlPVwiaW1hZ2VcIiAvPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJuYW1lXCIgdHlwZT1cInRleHRcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5OQU1FXCIgY2xhc3M9XCJhZGYtZnVsbC13aWR0aCBhZGYtZWxsaXBzaXMtY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbnRleHQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8YWRmLW5hbWUtbG9jYXRpb24tY2VsbCBbcm93XT1cImNvbnRleHQucm93XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L2RhdGEtY29sdW1uPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJtb2RpZmllZEF0XCIgdHlwZT1cImRhdGVcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5NT0RJRklFRF9PTlwiIGZvcm1hdD1cInRpbWVBZ29cIiBjbGFzcz1cImFkZi1jb250ZW50LXNlbGVjdG9yLW1vZGlmaWVkLWNlbGxcIiAvPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCJjcmVhdGVkQnlVc2VyLmRpc3BsYXlOYW1lXCIgdHlwZT1cInRleHRcIiB0aXRsZT1cIkFERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5DUkVBVEVEX0JZXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci1tb2RpZmllci1jZWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwidmlzaWJpbGl0eVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuU1RBVFVTXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci12aXNpYmlsaXR5LWNlbGxcIiAvPlxuICAgICAgICAgICAgPC9kYXRhLWNvbHVtbnM+XG5cbiAgICAgICAgPC9hZGYtZG9jdW1lbnQtbGlzdD5cblxuICAgICAgICA8YWRmLWluZmluaXRlLXBhZ2luYXRpb25cbiAgICAgICAgICAgIFt0YXJnZXRdPVwidGFyZ2V0XCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdTZWFyY2hSZXN1bHRzXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJnZXROZXh0UGFnZU9mU2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiY29udGVudC1ub2RlLXNlbGVjdG9yLXNlYXJjaC1wYWdpbmF0aW9uXCI+XG4gICAgICAgICAgICB7eyAnQURGLURPQ1VNRU5ULUxJU1QuTEFZT1VULkxPQURfTU9SRScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9hZGYtaW5maW5pdGUtcGFnaW5hdGlvbj5cbiAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
617
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYi9jb250ZW50LXNlcnZpY2VzL3NyYy9saWIvY29udGVudC1ub2RlLXNlbGVjdG9yL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW5vZGUtc2VsZWN0b3IvY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsL2NvbnRlbnQtbm9kZS1zZWxlY3Rvci1wYW5lbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFDSCxtQ0FBbUMsRUFDbkMsbUJBQW1CLEVBQ25CLHVCQUF1QixFQUV2QixrQkFBa0IsRUFDbEIsMkJBQTJCLEVBRTNCLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3JCLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDdkIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQWtELGVBQWUsRUFBRSxZQUFZLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVILE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sRUFBK0IsVUFBVSxFQUErQixTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0gsT0FBTyxFQUFFLHFC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QURaLEtBQUs7Z0JBUU4sZ0JBQWdCO3NCQURmLEtBQUs7Z0JBVU4sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtGLFVBQVU7c0JBRGIsS0FBSztnQkFhRixvQkFBb0I7c0JBRHZCLEtBQUs7Z0JBYUYsaUJBQWlCO3NCQURwQixLQUFLO2dCQVVGLGVBQWU7c0JBRGxCLEtBQUs7Z0JBV04sTUFBTTtzQkFETCxNQUFNO2dCQUtQLGdCQUFnQjtzQkFEZixNQUFNO2dCQUtQLFVBQVU7c0JBRFQsTUFBTTtnQkFLUCxhQUFhO3NCQURaLE1BQU07Z0JBS1AsYUFBYTtzQkFEWixNQUFNO2dCQUtQLFlBQVk7c0JBRFgsTUFBTTtnQkFJUCxZQUFZO3NCQURYLFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFJM0MsV0FBVztzQkFEVixTQUFTO3VCQUFDLGtCQUFrQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFtQi9DLDJCQUEyQjtzQkFEMUIsU0FBUzt1QkFBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgwqkgMjAwNS0yMDI1IEh5bGFuZCBTb2Z0d2FyZSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCwgRGVzdHJveVJlZiwgRXZlbnRFbWl0dGVyLCBpbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkLCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDdXN0b21FbXB0eUNvbnRlbnRUZW1wbGF0ZURpcmVjdGl2ZSxcbiAgICBEYXRhQ29sdW1uQ29tcG9uZW50LFxuICAgIERhdGFDb2x1bW5MaXN0Q29tcG9uZW50LFxuICAgIERhdGFTb3J0aW5nLFxuICAgIEhpZ2hsaWdodERpcmVjdGl2ZSxcbiAgICBJbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgUGFnaW5hdGVkQ29tcG9uZW50LFxuICAgIFNob3dIZWFkZXJNb2RlLFxuICAgIFRvb2xiYXJDb21wb25lbnQsXG4gICAgVG9vbGJhclRpdGxlQ29tcG9uZW50LFxuICAgIFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgVXNlclByZWZlcmVuY2VWYWx1ZXNcbn0gZnJvbSAnQGFsZnJlc2NvL2FkZi1jb3JlJztcbmltcG9ydCB7IEZpbGVVcGxvYWRDb21wbGV0ZUV2ZW50LCBGaWxlVXBsb2FkRGVsZXRlRXZlbnQsIE5vZGVzQXBpU2VydmljZSwgU2l0ZXNTZXJ2aWNlLCBVcGxvYWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tbW9uJztcbmltcG9ydCB7IFJlYWN0aXZlRm9ybXNNb2R1bGUsIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE5vZGUsIE5vZGVFbnRyeSwgTm9kZVBhZ2luZywgUGFnaW5hdGlvbiwgUmVxdWVzdFNjb3BlLCBTZWFyY2hSZXF1ZXN0LCBTaXRlRW50cnksIFNpdGVQYWdpbmcgfSBmcm9tICdAYWxmcmVzY28vanMtYXBpJztcbmltcG9ydCB7IERvY3VtZW50TGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2RvY3VtZW50LWxpc3QvY29tcG9uZW50cy9kb2N1bWVudC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSb3dGaWx0ZXIgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2RhdGEvcm93LWZpbHRlci5tb2RlbCc7XG5pbXBvcnQgeyBJbWFnZVJlc29sdmVyIH0gZnJvbSAnLi4vLi4vZG9jdW1lbnQtbGlzdC9kYXRhL2ltYWdlLXJlc29sdmVyLm1vZGVsJztcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L3NlcnZpY2VzL2N1c3RvbS1yZXNvdXJjZXMuc2VydmljZSc7XG5pbXBvcnQgeyBTaGFyZURhdGFSb3cgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2RhdGEvc2hhcmUtZGF0YS1yb3cubW9kZWwnO1xuaW1wb3J0IHsgTm9kZUVudHJ5RXZlbnQgfSBmcm9tICcuLi8uLi9kb2N1bWVudC1saXN0L2NvbXBvbmVudHMvbm9kZS5ldmVudCc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlIH0gZnJvbSAnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVQaXBlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNYXRJbnB1dE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2lucHV0JztcbmltcG9ydCB7IEF1dG9Gb2N1c0RpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYXV0by1mb2N1cy5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTm9kZUNvdW50ZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzL25vZGUtY291bnRlci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xuaW1wb3J0IHsgRHJvcGRvd25TaXRlc0NvbXBvbmVudCB9IGZyb20gJy4uL3NpdGUtZHJvcGRvd24vc2l0ZXMtZHJvcGRvd24uY29tcG9uZW50JztcbmltcG9ydCB7IE1hdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2J1dHRvbic7XG5pbXBvcnQgeyBOYW1lTG9jYXRpb25DZWxsQ29tcG9uZW50IH0gZnJvbSAnLi4vbmFtZS1sb2NhdGlvbi1jZWxsL25hbWUtbG9jYXRpb24tY2VsbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRHJvcGRvd25CcmVhZGNydW1iQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYnJlYWRjcnVtYi9kcm9wZG93bi1icmVhZGNydW1iLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VhcmNoL3NlcnZpY2VzL3NlYXJjaC1xdWVyeS1idWlsZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2VhcmNoUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi8uLi9zZWFyY2gvY29tcG9uZW50cy9zZWFyY2gtcGFuZWwvc2VhcmNoLXBhbmVsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5cbmV4cG9ydCB0eXBlIFZhbGlkYXRpb25GdW5jdGlvbiA9IChlbnRyeTogTm9kZSkgPT4gYm9vbGVhbjtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRWYWxpZGF0aW9uID0gKCkgPT4gdHJ1ZTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBNYXRGb3JtRmllbGRNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIE1hdElucHV0TW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvRm9jdXNEaXJlY3RpdmUsXG4gICAgICAgIE1hdEljb25Nb2R1bGUsXG4gICAgICAgIERyb3Bkb3duU2l0ZXNDb21wb25lbnQsXG4gICAgICAgIE1hdEJ1dHRvbk1vZHVsZSxcbiAgICAgICAgVG9vbGJhclRpdGxlQ29tcG9uZW50LFxuICAgICAgICBUb29sYmFyQ29tcG9uZW50LFxuICAgICAgICBEcm9wZG93bkJyZWFkY3J1bWJDb21wb25lbnQsXG4gICAgICAgIE5vZGVDb3VudGVyRGlyZWN0aXZlLFxuICAgICAgICBEb2N1bWVudExpc3RDb21wb25lbnQsXG4gICAgICAgIEhpZ2hsaWdodERpcmVjdGl2ZSxcbiAgICAgICAgRGF0YUNvbHVtbkxpc3RDb21wb25lbnQsXG4gICAgICAgIERhdGFDb2x1bW5Db21wb25lbnQsXG4gICAgICAgIE5hbWVMb2NhdGlvbkNlbGxDb21wb25lbnQsXG4gICAgICAgIEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudCxcbiAgICAgICAgQ3VzdG9tRW1wdHlDb250ZW50VGVtcGxhdGVEaXJlY3RpdmUsXG4gICAgICAgIFNlYXJjaFBhbmVsQ29tcG9uZW50XG4gICAgXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb250ZW50LW5vZGUtc2VsZWN0b3ItcGFuZWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGhvc3Q6IHsgY2xhc3M6ICdhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLXBhbmVsJyB9LFxuICAgIHByb3ZpZGVyczogW1NlYXJjaFF1ZXJ5QnVpbGRlclNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRlbnROb2RlU2VsZWN0b3JQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgIERFRkFVTFRfUEFHSU5BVElPTjogUGFnaW5hdGlvbiA9IG5ldyBQYWdpbmF0aW9uKHtcbiAgICAgICAgbWF4SXRlbXM6IDI1LFxuICAgICAgICBza2lwQ291bnQ6IDBcbiAgICB9KTtcblxuICAgIHJlYWRvbmx5IGRpc2FibGVBY3Rpb25Gb2xkZXJMaXN0ID0gWyctbXlzaXRlcy0nXTtcblxuICAgIHByaXZhdGUgc2hvd1NpdGVMaXN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIHNob3dTZWFyY2hGaWVsZCA9IHRydWU7XG4gICAgcHJpdmF0ZSBzaG93Q291bnRlciA9IGZhbHNlO1xuICAgIHByaXZhdGUgX2VtcHR5TGlzdCA9IHRydWU7XG5cbiAgICAvKiogSWYgdHJ1ZSB3aWxsIHJlc3RyaWN0IHRoZSBzZWFyY2ggYW5kIGJyZWFkY3J1bWJzIHRvIHRoZSBjdXJyZW50Rm9sZGVySWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHJlc3RyaWN0Um9vdFRvQ3VycmVudEZvbGRlcklkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogTm9kZSBJRCBvZiB0aGUgZm9sZGVyIGN1cnJlbnRseSBsaXN0ZWQuICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBjdXJyZW50Rm9sZGVySWQ6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKipcbiAgICAgKiBIaWRlIHRoZSBcIk15IEZpbGVzXCIgb3B0aW9uIGFkZGVkIHRvIHRoZSBzaXRlIGxpc3QgYnkgZGVmYXVsdC5cbiAgICAgKiBTZWUgdGhlIFtTaXRlcyBEcm9wZG93biBjb21wb25lbnRdKHNpdGVzLWRyb3Bkb3duLmNvbXBvbmVudC5tZClcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGRyb3Bkb3duSGlkZU15RmlsZXM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqIEN1c3RvbSBzaXRlIGZvciBzaXRlIGRyb3Bkb3duLiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBgc2l0ZUxpc3RgLlxuICAgICAqIHByb3BlcnR5IG9mIHRoZSBTaXRlcyBEcm9wZG93biBjb21wb25lbnQgKHNlZSBpdHMgZG9jIHBhZ2VcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbikuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBkcm9wZG93blNpdGVMaXN0OiBTaXRlUGFnaW5nID0gbnVsbDtcblxuICAgIF9yb3dGaWx0ZXI6IFJvd0ZpbHRlciA9IGRlZmF1bHRWYWxpZGF0aW9uO1xuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tICp3aGVyZSogZmlsdGVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogRG9jdW1lbnQgTGlzdCBjb21wb25lbnRcbiAgICAgKiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHdoZXJlOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gcm93IGZpbHRlciBmdW5jdGlvbi4gU2VlIHRoZVxuICAgICAqIFtSb3cgRmlsdGVyIE1vZGVsXShyb3ctZmlsdGVyLm1vZGVsLm1kKSBwYWdlXG4gICAgICogZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgcm93RmlsdGVyKHJvd0ZpbHRlcjogUm93RmlsdGVyKSB7XG4gICAgICAgIHRoaXMuY3JlYXRlUm93RmlsdGVyKHJvd0ZpbHRlcik7XG4gICAgfVxuXG4gICAgZ2V0IHJvd0ZpbHRlcigpOiBSb3dGaWx0ZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fcm93RmlsdGVyO1xuICAgIH1cblxuICAgIF9leGNsdWRlU2l0ZUNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKipcbiAgICAgKiBDdXN0b20gbGlzdCBvZiBzaXRlIGNvbnRlbnQgY29tcG9uZW50SWRzLlxuICAgICAqIFVzZWQgdG8gZmlsdGVyIG91dCB0aGUgY29ycmVzcG9uZGluZyBpdGVtcyBmcm9tIHRoZSBkaXNwbGF5ZWQgbm9kZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBleGNsdWRlU2l0ZUNvbnRlbnQoZXhjbHVkZVNpdGVDb250ZW50OiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQgPSBleGNsdWRlU2l0ZUNvbnRlbnQ7XG4gICAgICAgIHRoaXMuY3JlYXRlUm93RmlsdGVyKHRoaXMuX3Jvd0ZpbHRlcik7XG4gICAgfVxuXG4gICAgZ2V0IGV4Y2x1ZGVTaXRlQ29udGVudCgpOiBzdHJpbmdbXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3VzdG9tIGltYWdlIHJlc29sdmVyIGZ1bmN0aW9uLiBTZWUgdGhlXG4gICAgICogW0ltYWdlIFJlc29sdmVyIE1vZGVsXShpbWFnZS1yZXNvbHZlci5tb2RlbC5tZCkgcGFnZVxuICAgICAqIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgaW1hZ2VSZXNvbHZlcjogSW1hZ2VSZXNvbHZlciA9IG51bGw7XG5cbiAgICAvKiogTnVtYmVyIG9mIGl0ZW1zIHNob3duIHBlciBwYWdlIGluIHRoZSBsaXN0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcGFnZVNpemU6IG51bWJlciA9IHRoaXMuREVGQVVMVF9QQUdJTkFUSU9OLm1heEl0ZW1zO1xuXG4gICAgLyoqIERlZmluZSB0aGUgc2VsZWN0aW9uIG1vZGUgZm9yIGRvY3VtZW50IGxpc3QuIFRoZSBhbGxvd2VkIHZhbHVlcyBhcmUgc2luZ2xlIG9yIG11bHRpcGxlICovXG4gICAgQElucHV0KClcbiAgICBzZWxlY3Rpb25Nb2RlOiAnc2luZ2xlJyB8ICdtdWx0aXBsZScgPSAnc2luZ2xlJztcblxuICAgIC8qKlxuICAgICAqIEZ1bmN0aW9uIHVzZWQgdG8gZGVjaWRlIGlmIHRoZSBzZWxlY3RlZCBub2RlIGhhcyBwZXJtaXNzaW9uIHRvIGJlIHNlbGVjdGVkLlxuICAgICAqIERlZmF1bHQgdmFsdWUgaXMgYSBmdW5jdGlvbiB0aGF0IGFsd2F5cyByZXR1cm5zIHRydWUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc1NlbGVjdGlvblZhbGlkOiBWYWxpZGF0aW9uRnVuY3Rpb24gPSBkZWZhdWx0VmFsaWRhdGlvbjtcblxuICAgIC8qKlxuICAgICAqIFRyYW5zZm9ybWF0aW9uIHRvIGJlIHBlcmZvcm1lZCBvbiB0aGUgY2hvc2VuL2ZvbGRlciBub2RlIGJlZm9yZSBidWlsZGluZyB0aGVcbiAgICAgKiBicmVhZGNydW1iIFVJLiBDYW4gYmUgdXNlZnVsIHdoZW4gY3VzdG9tIGZvcm1hdHRpbmcgaXMgbmVlZGVkIGZvciB0aGUgYnJlYWRjcnVtYi5cbiAgICAgKiBZb3UgY2FuIGNoYW5nZSB0aGUgcGF0aCBlbGVtZW50cyBmcm9tIHRoZSBub2RlIHRoYXQgYXJlIHVzZWQgdG8gYnVpbGQgdGhlXG4gICAgICogYnJlYWRjcnVtYiB1c2luZyB0aGlzIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgYnJlYWRjcnVtYlRyYW5zZm9ybTogKG5vZGUpID0+IGFueTtcblxuICAgIC8qKiBUb2dnbGUgc2VhcmNoIGlucHV0IHJlbmRlcmluZyAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNob3dTZWFyY2godmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1NlYXJjaEZpZWxkID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXQgc2hvd1NlYXJjaCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NlYXJjaEZpZWxkO1xuICAgIH1cblxuICAgIC8qKiBUb2dnbGUgc2l0ZXMgbGlzdCBkcm9wZG93biByZW5kZXJpbmcgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93RHJvcGRvd25TaXRlTGlzdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zaG93U2l0ZUxpc3QgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBzaG93RHJvcGRvd25TaXRlTGlzdCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2hvd1NpdGVMaXN0O1xuICAgIH1cblxuICAgIC8qKiBTaG93cyB0aGUgZmlsZXMgYW5kIGZvbGRlcnMgaW4gdGhlIHNlYXJjaCByZXN1bHQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93RmlsZXNJblJlc3VsdCh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3Qgc2hvd0ZpbGVzUXVlcnkgPSBgVFlQRTonY206Zm9sZGVyJyR7dmFsdWUgPyBgIE9SIFRZUEU6J2NtOmNvbnRlbnQnYCA6ICcnfWA7XG4gICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuYWRkRmlsdGVyUXVlcnkoc2hvd0ZpbGVzUXVlcnkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIFNob3dzIHRoZSBub2RlIGNvdW50ZXIgaW4gdGhlIGJyZWFkY3J1bWIgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBzaG93Tm9kZUNvdW50ZXIodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5zaG93Q291bnRlciA9IHZhbHVlID8/IGZhbHNlO1xuICAgIH1cblxuICAgIGdldCBzaG93Tm9kZUNvdW50ZXIoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNob3dDb3VudGVyO1xuICAgIH1cblxuICAgIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgaGFzIGNob3NlbiBhbiBpdGVtLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8Tm9kZVtdPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBjaGFuZ2VzLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5hdmlnYXRpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPE5vZGVFbnRyeUV2ZW50PigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgc2VsZWN0IHNpdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBzaXRlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIHNlYXJjaCBpcyBydW5uaW5nLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHNob3dpbmdTZWFyY2ggPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgICAvKiogRW1pdHRlZCB3aGVuIGN1cnJlbnQgZm9sZGVyIGxvYWRlZC4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBjdXJyZW50Rm9sZGVyID0gbmV3IEV2ZW50RW1pdHRlcjxOb2RlPigpO1xuXG4gICAgLyoqIEVtaXR0ZWQgd2hlbiBmb2xkZXIgbG9hZGVkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGZvbGRlckxvYWRlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICAgIEBWaWV3Q2hpbGQoJ2RvY3VtZW50TGlzdCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgZG9jdW1lbnRMaXN0OiBEb2N1bWVudExpc3RDb21wb25lbnQ7XG5cbiAgICBAVmlld0NoaWxkKEhpZ2hsaWdodERpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBoaWdobGlnaHRlcjogSGlnaGxpZ2h0RGlyZWN0aXZlO1xuXG4gICAgbm9kZVBhZ2luZzogTm9kZVBhZ2luZyB8IG51bGwgPSBudWxsO1xuICAgIHNpdGVJZDogbnVsbCB8IHN0cmluZztcbiAgICBicmVhZGNydW1iUm9vdElkOiBudWxsIHwgc3RyaW5nO1xuICAgIHNlYXJjaFRlcm06IHN0cmluZyA9ICcnO1xuICAgIHNob3dpbmdTZWFyY2hSZXN1bHRzOiBib29sZWFuID0gZmFsc2U7XG4gICAgbG9hZGluZ1NlYXJjaFJlc3VsdHM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBpbkRpYWxvZzogYm9vbGVhbiA9IGZhbHNlO1xuICAgIF9jaG9zZW5Ob2RlOiBOb2RlW10gPSBudWxsO1xuICAgIHNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uOiBOb2RlW10gPSBudWxsO1xuICAgIGZvbGRlcklkVG9TaG93OiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBicmVhZGNydW1iRm9sZGVyVGl0bGU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHN0YXJ0U2l0ZUd1aWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIGhhc1ZhbGlkUXVlcnk6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBzaG93SGVhZGVyID0gU2hvd0hlYWRlck1vZGUuTmV2ZXI7XG5cbiAgICBAVmlld0NoaWxkKEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBpbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQ6IEluZmluaXRlUGFnaW5hdGlvbkNvbXBvbmVudDtcblxuICAgIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG4gICAgZGVib3VuY2VTZWFyY2g6IG51bWJlciA9IDIwMDtcbiAgICBzZWFyY2hJbnB1dDogVW50eXBlZEZvcm1Db250cm9sID0gbmV3IFVudHlwZWRGb3JtQ29udHJvbCgpO1xuXG4gICAgdGFyZ2V0OiBQYWdpbmF0ZWRDb21wb25lbnQ7XG4gICAgcHJlc2VsZWN0ZWROb2RlczogTm9kZUVudHJ5W10gPSBbXTtcbiAgICBjdXJyZW50VXBsb2FkQmF0Y2g6IE5vZGVFbnRyeVtdID0gW107XG5cbiAgICBzb3J0aW5nOiBzdHJpbmdbXSB8IERhdGFTb3J0aW5nID0gWydjcmVhdGVkQXQnLCAnZGVzYyddO1xuXG4gICAgc2VhcmNoUGFuZWxFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY3VzdG9tUmVzb3VyY2VzU2VydmljZTogQ3VzdG9tUmVzb3VyY2VzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBxdWVyeUJ1aWxkZXJTZXJ2aWNlOiBTZWFyY2hRdWVyeUJ1aWxkZXJTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHVzZXJQcmVmZXJlbmNlc1NlcnZpY2U6IFVzZXJQcmVmZXJlbmNlc1NlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgbm9kZXNBcGlTZXJ2aWNlOiBOb2Rlc0FwaVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgdXBsb2FkU2VydmljZTogVXBsb2FkU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBzaXRlc1NlcnZpY2U6IFNpdGVzU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlOiBDb250ZW50Tm9kZVNlbGVjdG9yUGFuZWxTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgc2V0IGNob3Nlbk5vZGUodmFsdWU6IE5vZGVbXSkge1xuICAgICAgICB0aGlzLl9jaG9zZW5Ob2RlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuc2VsZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIGdldCBjaG9zZW5Ob2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hvc2VuTm9kZTtcbiAgICB9XG5cbiAgICBnZXQgZW1wdHlMaXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW1wdHlMaXN0O1xuICAgIH1cblxuICAgIGdldFNlbGVjdGVkQ291bnQoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hvc2VuTm9kZT8ubGVuZ3RoIHx8IDA7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXQudmFsdWVDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZVNlYXJjaCksIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoc2VhcmNoVmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VhcmNoVGVybSA9IHNlYXJjaFZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51c2VyUXVlcnkgPSBzZWFyY2hWYWx1ZS5sZW5ndGggPiAwID8gYCR7c2VhcmNoVmFsdWV9KmAgOiBzZWFyY2hWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlKCk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKHNlYXJjaFJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgIGlmIChzZWFyY2hSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNWYWxpZFF1ZXJ5ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXBhcmVEaWFsb2dGb3JOZXdTZWFyY2goc2VhcmNoUmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLmV4ZWN1dGUoZmFsc2UsIHNlYXJjaFJlcXVlc3QpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1ZhbGlkUXVlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0Rm9sZGVyVG9TaG93KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuZXhlY3V0ZWQucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSkuc3Vic2NyaWJlKChyZXN1bHRzOiBOb2RlUGFnaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWxpZFF1ZXJ5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51c2VyUHJlZmVyZW5jZXNTZXJ2aWNlXG4gICAgICAgICAgICAuc2VsZWN0KFVzZXJQcmVmZXJlbmNlVmFsdWVzLlBhZ2luYXRpb25TaXplKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChwYWdTaXplKSA9PiAodGhpcy5wYWdlU2l6ZSA9IHBhZ1NpemUpKTtcblxuICAgICAgICB0aGlzLnRhcmdldCA9IHRoaXMuZG9jdW1lbnRMaXN0O1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2xkZXJJZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVzdHJpY3RSb290VG9DdXJyZW50Rm9sZGVySWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJyZWFkY3J1bWJSb290SWQgPSB0aGlzLmN1cnJlbnRGb2xkZXJJZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVJZCA9IHRoaXMuY3VycmVudEZvbGRlcklkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldFN0YXJ0U2l0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtID0gdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtID8gdGhpcy5icmVhZGNydW1iVHJhbnNmb3JtIDogbnVsbDtcbiAgICAgICAgdGhpcy5pc1NlbGVjdGlvblZhbGlkID0gdGhpcy5pc1NlbGVjdGlvblZhbGlkID8gdGhpcy5pc1NlbGVjdGlvblZhbGlkIDogZGVmYXVsdFZhbGlkYXRpb247XG4gICAgICAgIHRoaXMub25GaWxlVXBsb2FkRXZlbnQoKTtcbiAgICAgICAgdGhpcy5vbkZpbGVVcGxvYWREZWxldGVkRXZlbnQoKTtcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5zZXRTZWFyY2hTY29wZVRvTm9kZXMoKTtcblxuICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC4kZm9sZGVyTm9kZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGN1cnJlbnROb2RlOiBOb2RlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRGb2xkZXIuZW1pdChjdXJyZW50Tm9kZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlYXJjaFBhbmVsKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFBhbmVsRXhwYW5kZWQgPSAhdGhpcy5zZWFyY2hQYW5lbEV4cGFuZGVkO1xuICAgIH1cblxuICAgIGhhc0N1c3RvbU1vZGVscygpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGVudE5vZGVTZWxlY3RvclBhbmVsU2VydmljZT8uY3VzdG9tTW9kZWxzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25GaWxlVXBsb2FkRXZlbnQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkQ29tcGxldGVcbiAgICAgICAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGZpbGVVcGxvYWRFdmVudDogRmlsZVVwbG9hZENvbXBsZXRlRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaC5wdXNoKGZpbGVVcGxvYWRFdmVudC5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXBsb2FkU2VydmljZS5pc1VwbG9hZGluZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlc2VsZWN0ZWROb2RlcyA9IHRoaXMuZ2V0UHJlc2VsZWN0Tm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRvY3VtZW50TGlzdC5yZWxvYWRXaXRob3V0UmVzZXR0aW5nU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkZpbGVVcGxvYWREZWxldGVkRXZlbnQoKSB7XG4gICAgICAgIHRoaXMudXBsb2FkU2VydmljZS5maWxlVXBsb2FkRGVsZXRlZC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoKGRlbGV0ZWRGaWxlRXZlbnQ6IEZpbGVVcGxvYWREZWxldGVFdmVudCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QudW5zZWxlY3RSb3dGcm9tTm9kZUlkKGRlbGV0ZWRGaWxlRXZlbnQuZmlsZS5kYXRhLmVudHJ5LmlkKTtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRMaXN0LnJlbG9hZFdpdGhvdXRSZXNldHRpbmdTZWxlY3Rpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRTdGFydFNpdGUoKSB7XG4gICAgICAgIHRoaXMubm9kZXNBcGlTZXJ2aWNlLmdldE5vZGUodGhpcy5jdXJyZW50Rm9sZGVySWQpLnN1YnNjcmliZSgoc3RhcnROb2RlRW50cnkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRTaXRlR3VpZCA9IHRoaXMuc2l0ZXNTZXJ2aWNlLmdldFNpdGVOYW1lRnJvbU5vZGVQYXRoKHN0YXJ0Tm9kZUVudHJ5KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXJ0U2l0ZUd1aWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNpdGVzU2VydmljZS5nZXRTaXRlKHRoaXMuc3RhcnRTaXRlR3VpZCkuc3Vic2NyaWJlKChzdGFydFNpdGVFbnRyeSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRTaXRlRW50cnkgaW5zdGFuY2VvZiBTaXRlRW50cnkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2l0ZUNoYW5nZS5lbWl0KHN0YXJ0U2l0ZUVudHJ5LmVudHJ5LnRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZVJvd0ZpbHRlcihmaWx0ZXI/OiBSb3dGaWx0ZXIpIHtcbiAgICAgICAgaWYgKCFmaWx0ZXIpIHtcbiAgICAgICAgICAgIGZpbHRlciA9ICgpID0+IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcm93RmlsdGVyID0gKHZhbHVlOiBTaGFyZURhdGFSb3csIGluZGV4OiBudW1iZXIsIGFycmF5OiBTaGFyZURhdGFSb3dbXSkgPT5cbiAgICAgICAgICAgIGZpbHRlcih2YWx1ZSwgaW5kZXgsIGFycmF5KSAmJiAhdGhpcy5pc0V4Y2x1ZGVkU2l0ZUNvbnRlbnQodmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNFeGNsdWRlZFNpdGVDb250ZW50KHJvdzogU2hhcmVEYXRhUm93KTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gcm93Lm5vZGUuZW50cnk7XG4gICAgICAgIGlmICh0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQ/Lmxlbmd0aCAmJiBlbnRyeT8ucHJvcGVydGllcz8uWydzdDpjb21wb25lbnRJZCddKSB7XG4gICAgICAgICAgICBjb25zdCBleGNsdWRlZEl0ZW0gPSB0aGlzLl9leGNsdWRlU2l0ZUNvbnRlbnQuZmluZCgoaWQ6IHN0cmluZykgPT4gZW50cnkucHJvcGVydGllc1snc3Q6Y29tcG9uZW50SWQnXSA9PT0gaWQpO1xuICAgICAgICAgICAgcmV0dXJuICEhZXhjbHVkZWRJdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBzaXRlIGF0dHJpYnV0ZSBhbmQgc3RhcnRzIGEgbmV3IHNlYXJjaFxuICAgICAqXG4gICAgICogQHBhcmFtIGNob3NlblNpdGUgU2l0ZUVudHJ5IHRvIHNlYXJjaCB3aXRoaW5cbiAgICAgKi9cbiAgICBzaXRlQ2hhbmdlZChjaG9zZW5TaXRlOiBTaXRlRW50cnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zaXRlSWQgPSBjaG9zZW5TaXRlLmVudHJ5Lmd1aWQ7XG4gICAgICAgIHRoaXMuc2V0VGl0bGVJZkN1c3RvbVNpdGUoY2hvc2VuU2l0ZSk7XG4gICAgICAgIHRoaXMuc2l0ZUNoYW5nZS5lbWl0KGNob3NlblNpdGUuZW50cnkudGl0bGUpO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXBkYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0IGN1cnJlbnQgYnJlYWRjcnVtYiBmb2xkZXIgbm9kZVxuICAgICAqXG4gICAgICogQHJldHVybnMgdGhlIGFjdHVhbGx5IHNlbGVjdGVkfGVudGVyZWQgZm9sZGVyIG5vZGUgb3IgbnVsbCBpbiBjYXNlIG9mIHNlYXJjaGluZyBmb3IgdGhlIGJyZWFkY3J1bWJcbiAgICAgKi9cbiAgICBnZXQgYnJlYWRjcnVtYkZvbGRlck5vZGUoKTogTm9kZSB8IG51bGwge1xuICAgICAgICBsZXQgZm9sZGVyTm9kZTogTm9kZTtcblxuICAgICAgICBpZiAodGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyAmJiB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvbGRlck5vZGUgPSB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9sZGVyTm9kZSA9IHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9sZGVyTm9kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcmVwYXJlcyB0aGUgZGlhbG9nIGZvciBhIG5ldyBzZWFyY2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzZWFyY2hSZXF1ZXN0IHJlcXVlc3Qgb3B0aW9uc1xuICAgICAqL1xuICAgIHByZXBhcmVEaWFsb2dGb3JOZXdTZWFyY2goc2VhcmNoUmVxdWVzdDogU2VhcmNoUmVxdWVzdCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhcmdldCA9IHNlYXJjaFJlcXVlc3QgPyBudWxsIDogdGhpcy5kb2N1bWVudExpc3Q7XG4gICAgICAgIGlmICh0aGlzLnRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5pbmZpbml0ZVBhZ2luYXRpb25Db21wb25lbnQucmVzZXQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcmVzZWxlY3RlZE5vZGVzID0gW107XG4gICAgICAgIHRoaXMubG9hZGluZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmFkZENvcnJlc3BvbmRpbmdOb2RlSWRzUXVlcnkoKTtcbiAgICAgICAgdGhpcy5yZXNldENob3Nlbk5vZGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhciB0aGUgc2VhcmNoIGlucHV0IGFuZCByZXNldCB0byBsYXN0IGZvbGRlciBub2RlIGluIHdoaWNoIHNlYXJjaCB3YXMgcGVyZm9ybWVkXG4gICAgICovXG4gICAgY2xlYXIoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2VhcmNoVGVybSA9ICcnO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UudXNlclF1ZXJ5ID0gJyc7XG4gICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldHMgdGhlIGZvbGRlciB0byBiZSBzaG93biB3aXRoIHRoZSBzaXRlIHNlbGVjdGlvbiBvciB0aGUgaW5pdGlhbCBsYW5kaW5nIGZvbGRlclxuICAgICAqL1xuICAgIHJlc2V0Rm9sZGVyVG9TaG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gdGhpcy5zaXRlSWQgfHwgdGhpcy5jdXJyZW50Rm9sZGVySWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXIgdGhlIHNlYXJjaCBpbnB1dCBhbmQgc2VhcmNoIHJlbGF0ZWQgZGF0YVxuICAgICAqL1xuICAgIGNsZWFyU2VhcmNoKCkge1xuICAgICAgICB0aGlzLnNlYXJjaFRlcm0gPSAnJztcbiAgICAgICAgdGhpcy5ub2RlUGFnaW5nID0gbnVsbDtcbiAgICAgICAgdGhpcy5yZXNldFBhZ2luYXRpb24oKTtcbiAgICAgICAgdGhpcy5yZXNldENob3Nlbk5vZGUoKTtcbiAgICAgICAgdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2guZW1pdCh0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFkZENvcnJlc3BvbmRpbmdOb2RlSWRzUXVlcnkoKSB7XG4gICAgICAgIGxldCBleHRyYVBhcmVudEZpbHRlcmluZyA9ICcnO1xuXG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuaGFzQ29ycmVzcG9uZGluZ05vZGVJZHModGhpcy5zaXRlSWQpKSB7XG4gICAgICAgICAgICB0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuZ2V0Q29ycmVzcG9uZGluZ05vZGVJZHModGhpcy5zaXRlSWQpLnN1YnNjcmliZSgobm9kZUlkcykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChub2RlSWRzPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZUlkc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigoaWQpID0+IGlkICE9PSB0aGlzLnNpdGVJZClcbiAgICAgICAgICAgICAgICAgICAgICAgIC5mb3JFYWNoKChleHRyYUlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFQYXJlbnRGaWx0ZXJpbmcgKz0gYCBPUiBBTkNFU1RPUjond29ya3NwYWNlOi8vU3BhY2VzU3RvcmUvJHtleHRyYUlkfSdgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEZpbHRlcmluZyA9IHRoaXMuc2l0ZUlkID8gYEFOQ0VTVE9SOid3b3Jrc3BhY2U6Ly9TcGFjZXNTdG9yZS8ke3RoaXMuc2l0ZUlkfScke2V4dHJhUGFyZW50RmlsdGVyaW5nfWAgOiAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UuYWRkRmlsdGVyUXVlcnkocGFyZW50RmlsdGVyaW5nKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RmlsdGVyaW5nID0gdGhpcy5zaXRlSWQgPyBgQU5DRVNUT1I6J3dvcmtzcGFjZTovL1NwYWNlc1N0b3JlLyR7dGhpcy5zaXRlSWR9J2AgOiAnJztcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS5hZGRGaWx0ZXJRdWVyeShwYXJlbnRGaWx0ZXJpbmcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTZWFyY2hTY29wZVRvTm9kZXMoKSB7XG4gICAgICAgIGNvbnN0IHNjb3BlOiBSZXF1ZXN0U2NvcGUgPSB7XG4gICAgICAgICAgICBsb2NhdGlvbnM6ICdub2RlcydcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnNldFNjb3BlKHNjb3BlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG93IHRoZSByZXN1bHRzIG9mIHRoZSBzZWFyY2hcbiAgICAgKlxuICAgICAqIEBwYXJhbSByZXN1bHRzIFNlYXJjaCByZXN1bHRzXG4gICAgICovXG4gICAgcHJpdmF0ZSBzaG93U2VhcmNoUmVzdWx0cyhyZXN1bHRzOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMgPSB0cnVlO1xuICAgICAgICB0aGlzLmxvYWRpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc2hvd2luZ1NlYXJjaC5lbWl0KHRoaXMuc2hvd2luZ1NlYXJjaFJlc3VsdHMpO1xuXG4gICAgICAgIHRoaXMubm9kZVBhZ2luZyA9IHJlc3VsdHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyBzaG93aW5nU2VhcmNoUmVzdWx0cyBzdGF0ZSB0byBiZSBhYmxlIHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiBzZWFyY2ggcmVzdWx0cyBvciBmb2xkZXIgcmVzdWx0c1xuICAgICAqXG4gICAgICogQHBhcmFtICRldmVudCBub2RlIGV2ZW50XG4gICAgICovXG4gICAgb25Gb2xkZXJDaGFuZ2UoJGV2ZW50OiBOb2RlRW50cnlFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLmZvbGRlcklkVG9TaG93ID0gJGV2ZW50LnZhbHVlLmlkO1xuICAgICAgICB0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBudWxsO1xuICAgICAgICB0aGlzLnByZXNlbGVjdGVkTm9kZXMgPSBbXTtcbiAgICAgICAgdGhpcy5jbGVhclNlYXJjaCgpO1xuICAgICAgICB0aGlzLm5hdmlnYXRpb25DaGFuZ2UuZW1pdCgkZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEF0dGVtcHRzIHRvIHNldCB0aGUgY3VycmVudGx5IGxvYWRlZCBub2RlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbm9kZVBhZ2luZyBwYWdpbmF0aW9uIG1vZGVsXG4gICAgICovXG4gICAgb25Gb2xkZXJMb2FkZWQobm9kZVBhZ2luZzogTm9kZVBhZ2luZyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2VtcHR5TGlzdCA9ICF0aGlzLmRvY3VtZW50TGlzdC5kYXRhLmdldFJvd3MoKS5sZW5ndGg7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVBhZ2luYXRpb25BZnRlclJvd0ZpbHRlcihub2RlUGFnaW5nKTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3dpbmdTZWFyY2hSZXN1bHRzKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHROb2RlU2VsZWN0aW9uKHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZm9sZGVyTG9hZGVkLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zIHRvIGZhbHNlIGFmdGVyIGZpbHRlcmluZyBvbmx5IGZvbGRlcnMgZHVyaW5nICdDT1BZJyBhbmQgJ01PVkUnIGFjdGlvblxuICAgICAqXG4gICAgICogQHBhcmFtIG5vZGVQYWdpbmcgcGFnaW5hdGlvbiBtb2RlbFxuICAgICAqL1xuICAgIHVwZGF0ZVBhZ2luYXRpb25BZnRlclJvd0ZpbHRlcihub2RlUGFnaW5nOiBOb2RlUGFnaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50TGlzdC5kYXRhLmdldFJvd3MoKS5sZW5ndGggPCBub2RlUGFnaW5nLmxpc3QucGFnaW5hdGlvbi5tYXhJdGVtcykge1xuICAgICAgICAgICAgbm9kZVBhZ2luZy5saXN0LnBhZ2luYXRpb24uaGFzTW9yZUl0ZW1zID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgYnJlYWRjcnVtYiBoYXMgdG8gYmUgc2hvd24gb3Igbm90XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgbmVlZHMgdG8gc2hvdyB0aGUgYnJlYWRjcnVtYiwgb3RoZXJ3aXNlIGBmYWxzZWBcbiAgICAgKi9cbiAgICBzaG93QnJlYWRjcnVtYnMoKSB7XG4gICAgICAgIHJldHVybiAhdGhpcy5zaG93aW5nU2VhcmNoUmVzdWx0cyB8fCB0aGlzLmNob3Nlbk5vZGU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTG9hZHMgdGhlIG5leHQgYmF0Y2ggb2Ygc2VhcmNoIHJlc3VsdHNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBwYWdpbmF0aW9uIFBhZ2luYXRpb24gb2JqZWN0XG4gICAgICovXG4gICAgZ2V0TmV4dFBhZ2VPZlNlYXJjaChwYWdpbmF0aW9uOiBQYWdpbmF0aW9uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGwgPSB0cnVlO1xuICAgICAgICB0aGlzLnF1ZXJ5QnVpbGRlclNlcnZpY2UucGFnaW5nLm1heEl0ZW1zID0gcGFnaW5hdGlvbi5tYXhJdGVtcztcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnBhZ2luZy5za2lwQ291bnQgPSBwYWdpbmF0aW9uLnNraXBDb3VudDtcblxuICAgICAgICBpZiAodGhpcy5zZWFyY2hUZXJtLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMucXVlcnlCdWlsZGVyU2VydmljZS51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNlbGVjdHMgbm9kZSBhcyBjaG9zZW4gaWYgaXQgaGFzIHRoZSByaWdodCBwZXJtaXNzaW9uLCBjbGVhcnMgdGhlIHNlbGVjdGlvbiBvdGhlcndpc2VcbiAgICAgKlxuICAgICAqIEBwYXJhbSBlbnRyeSBub2RlIGVudHJ5XG4gICAgICovXG4gICAgcHJpdmF0ZSBhdHRlbXB0Tm9kZVNlbGVjdGlvbihlbnRyeTogTm9kZSk6IHZvaWQge1xuICAgICAgICBpZiAoZW50cnkgJiYgdGhpcy5pc1NlbGVjdGlvblZhbGlkKGVudHJ5KSAmJiAhdGhpcy5pc0FjdGlvbkRpc2FibGVkRm9yRm9sZGVyKHRoaXMuZG9jdW1lbnRMaXN0LmN1cnJlbnRGb2xkZXJJZCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2hvc2VuTm9kZSA9IFtlbnRyeV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQWN0aW9uRGlzYWJsZWRGb3JGb2xkZXIoZm9sZGVySWQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5kaXNhYmxlQWN0aW9uRm9sZGVyTGlzdC5pbmNsdWRlcyhmb2xkZXJJZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2xlYXJzIHRoZSBjaG9zZW4gbm9kZVxuICAgICAqL1xuICAgIHJlc2V0Q2hvc2VuTm9kZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJdCBmaWx0ZXJzIGFuZCBlbWl0IHRoZSBzZWxlY3Rpb24gY29taW5nIGZyb20gdGhlIGRvY3VtZW50IGxpc3RcbiAgICAgKlxuICAgICAqIEBwYXJhbSBub2Rlc0VudHJpZXMgc2VsZWN0ZWQgbm9kZXNcbiAgICAgKi9cbiAgICBvbkN1cnJlbnRTZWxlY3Rpb24obm9kZXNFbnRyaWVzOiBOb2RlRW50cnlbXSk6IHZvaWQge1xuICAgICAgICBjb25zdCB2YWxpZE5vZGVzRW50aXR5ID0gbm9kZXNFbnRyaWVzLmZpbHRlcigobm9kZSkgPT4gdGhpcy5pc1NlbGVjdGlvblZhbGlkKG5vZGUuZW50cnkpKTtcbiAgICAgICAgdGhpcy5jaG9zZW5Ob2RlID0gdmFsaWROb2Rlc0VudGl0eS5tYXAoKG5vZGUpID0+IG5vZGUuZW50cnkpO1xuICAgICAgICB0aGlzLnNlbGVjdGlvbldpdGhvdXRWYWxpZGF0aW9uID0gbm9kZXNFbnRyaWVzLm1hcCgobm9kZSkgPT4gbm9kZS5lbnRyeSk7XG4gICAgfVxuXG4gICAgc2V0VGl0bGVJZkN1c3RvbVNpdGUoc2l0ZTogU2l0ZUVudHJ5KSB7XG4gICAgICAgIGlmICh0aGlzLmN1c3RvbVJlc291cmNlc1NlcnZpY2UuaXNDdXN0b21Tb3VyY2Uoc2l0ZS5lbnRyeS5ndWlkKSkge1xuICAgICAgICAgICAgdGhpcy5icmVhZGNydW1iRm9sZGVyVGl0bGUgPSBzaXRlLmVudHJ5LnRpdGxlO1xuICAgICAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRMaXN0LmZvbGRlck5vZGUucGF0aC5lbGVtZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkZvbGRlck5vZGUubmFtZSA9IHNpdGUuZW50cnkudGl0bGU7XG4gICAgICAgICAgICAgICAgdGhpcy5kb2N1bWVudExpc3QuZm9sZGVyTm9kZS5wYXRoLmVsZW1lbnRzID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnJlYWRjcnVtYkZvbGRlclRpdGxlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhhc1ByZXNlbGVjdE5vZGVzKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5wcmVzZWxlY3RlZE5vZGVzPy5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGlzU2luZ2xlU2VsZWN0aW9uTW9kZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZSc7XG4gICAgfVxuXG4gICAgZ2V0UHJlc2VsZWN0Tm9kZXNCYXNlZE9uU2VsZWN0aW9uTW9kZSgpOiBOb2RlRW50cnlbXSB7XG4gICAgICAgIGxldCBzZWxlY3RlZE5vZGVzOiBOb2RlRW50cnlbXSA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVcGxvYWRCYXRjaD8ubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1NpbmdsZVNlbGVjdGlvbk1vZGUoKSkge1xuICAgICAgICAgICAgICAgIHNlbGVjdGVkTm9kZXMgPSBbdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2hbdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2gubGVuZ3RoIC0gMV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE5vZGVzID0gdGhpcy5jdXJyZW50VXBsb2FkQmF0Y2g7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc2VsZWN0ZWROb2RlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0UGFnaW5hdGlvbigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5xdWVyeUJ1aWxkZXJTZXJ2aWNlLnBhZ2luZyA9IHtcbiAgICAgICAgICAgIG1heEl0ZW1zOiB0aGlzLnBhZ2VTaXplLFxuICAgICAgICAgICAgc2tpcENvdW50OiB0aGlzLkRFRkFVTFRfUEFHSU5BVElPTi5za2lwQ291bnRcbiAgICAgICAgfTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50XCI+XG4gICAgPG1hdC1mb3JtLWZpZWxkIGZsb2F0UGxhY2Vob2xkZXI9XCJuZXZlclwiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJmaWxsXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRTaXppbmc9XCJkeW5hbWljXCJcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzaG93U2VhcmNoXCI+XG4gICAgICAgIDxtYXQtbGFiZWw+e3sgJ05PREVfU0VMRUNUT1IuU0VBUkNIJyB8IHRyYW5zbGF0ZSB9fTwvbWF0LWxhYmVsPlxuICAgICAgICA8aW5wdXQgbWF0SW5wdXRcbiAgICAgICAgICAgIGlkPVwic2VhcmNoSW5wdXRcIlxuICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cInNlYXJjaElucHV0XCJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZWFyY2hUZXJtXCJcbiAgICAgICAgICAgIGFkZi1hdXRvLWZvY3VzXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3Itc2VhcmNoLWlucHV0XCI+XG5cbiAgICAgICAgPG1hdC1pY29uICpuZ0lmPVwic2VhcmNoVGVybS5sZW5ndGggPiAwXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeCAoY2xpY2spPVwiY2xlYXIoKVwiXG4gICAgICAgICAgICBjbGFzcz1cImFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1pbnB1dC1pY29uXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtY2xlYXJcIj5jbGVhclxuICAgICAgICA8L21hdC1pY29uPlxuXG4gICAgICAgIDxtYXQtaWNvbiAqbmdJZj1cInNlYXJjaFRlcm0ubGVuZ3RoID09PSAwXCJcbiAgICAgICAgICAgIG1hdFN1ZmZpeFxuICAgICAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtaW5wdXQtaWNvblwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3Itc2VhcmNoLWljb25cIj5zZWFyY2hcbiAgICAgICAgPC9tYXQtaWNvbj5cblxuICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgPGFkZi1zaXRlcy1kcm9wZG93blxuICAgICAgICAqbmdJZj1cInNob3dEcm9wZG93blNpdGVMaXN0XCJcbiAgICAgICAgY2xhc3M9XCJmdWxsLXdpZHRoXCJcbiAgICAgICAgKGNoYW5nZSk9XCJzaXRlQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidOT0RFX1NFTEVDVE9SLlNFTEVDVF9MSUJSQVJZJ1wiXG4gICAgICAgIFtoaWRlTXlGaWxlc109XCJkcm9wZG93bkhpZGVNeUZpbGVzXCJcbiAgICAgICAgW3NpdGVMaXN0XT1cImRyb3Bkb3duU2l0ZUxpc3RcIlxuICAgICAgICBbdmFsdWVdPVwic3RhcnRTaXRlR3VpZFwiXG4gICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zaXRlcy1jb21ib1wiIC8+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImhhc0N1c3RvbU1vZGVscygpXCJcbiAgICAgICAgZGF0YS1hdXRvbWF0aW9uLWlkPVwiYWRmLXRvZ2dsZS1zZWFyY2gtcGFuZWwtYnV0dG9uXCJcbiAgICAgICAgbWF0LWljb24tYnV0dG9uXG4gICAgICAgIChjbGljayk9XCJ0b2dnbGVTZWFyY2hQYW5lbCgpXCI+XG4gICAgICAgIDxtYXQtaWNvbj5maWx0ZXJfbGlzdDwvbWF0LWljb24+XG4gICAgICAgIHt7ICdTRUFSQ0guU0VBUkNIX0hFQURFUi5USVRMRScgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8ZGl2IGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtcGFuZWwtY29udGFpbmVyXCI+XG4gICAgICAgIDxhZGYtc2VhcmNoLXBhbmVsICpuZ0lmPVwic2VhcmNoUGFuZWxFeHBhbmRlZFwiIC8+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWRvY3VtZW50LWxpc3QtY29udGFpbmVyXCI+XG4gICAgPGFkZi10b29sYmFyPlxuICAgICAgICA8YWRmLXRvb2xiYXItdGl0bGU+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dCcmVhZGNydW1icygpXCI+XG4gICAgICAgICAgICAgICAgPGgyIGNsYXNzPVwiYWRmLXNlYXJjaC1yZXN1bHRzLWxhYmVsXCI+e3sgJ05PREVfU0VMRUNUT1IuU0VBUkNIX1JFU1VMVFMnIHwgdHJhbnNsYXRlIH19PC9oMj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGFkZi1kcm9wZG93bi1icmVhZGNydW1iICpuZ0lmPVwic2hvd0JyZWFkY3J1bWJzKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYWRmLWNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWJyZWFkY3J1bWJcIlxuICAgICAgICAgICAgICAgIChuYXZpZ2F0ZSk9XCJjbGVhclNlYXJjaCgpXCJcbiAgICAgICAgICAgICAgICBbdGFyZ2V0XT1cImRvY3VtZW50TGlzdFwiXG4gICAgICAgICAgICAgICAgW3Jvb3RJZF09XCJicmVhZGNydW1iUm9vdElkXCJcbiAgICAgICAgICAgICAgICBbdHJhbnNmb3JtXT1cImJyZWFkY3J1bWJUcmFuc2Zvcm1cIlxuICAgICAgICAgICAgICAgIFtmb2xkZXJOb2RlXT1cImJyZWFkY3J1bWJGb2xkZXJOb2RlXCJcbiAgICAgICAgICAgICAgICBbcm9vdF09XCJicmVhZGNydW1iRm9sZGVyVGl0bGVcIlxuICAgICAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1jb250ZW50LWJyZWFkY3J1bWJcIiAvPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNob3dOb2RlQ291bnRlclwiIFthZGYtbm9kZS1jb3VudGVyXT1cImdldFNlbGVjdGVkQ291bnQoKVwiIC8+XG4gICAgICAgIDwvYWRmLXRvb2xiYXItdGl0bGU+XG4gICAgPC9hZGYtdG9vbGJhcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJhZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtbGlzdFwiXG4gICAgICAgIFtjbGFzcy5hZGYtY29udGVudC1ub2RlLXNlbGVjdG9yLWNvbnRlbnQtbGlzdC1zZWFyY2hMYXlvdXRdPVwic2hvd2luZ1NlYXJjaFJlc3VsdHNcIlxuICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0XCI+XG4gICAgICAgIDxhZGYtZG9jdW1lbnQtbGlzdFxuICAgICAgICAgICAgI2RvY3VtZW50TGlzdFxuICAgICAgICAgICAgW2FkZi1oaWdobGlnaHRdPVwic2VhcmNoVGVybVwiXG4gICAgICAgICAgICBhZGYtaGlnaGxpZ2h0LXNlbGVjdG9yPVwiLmFkZi1uYW1lLWxvY2F0aW9uLWNlbGwtbmFtZVwiXG4gICAgICAgICAgICBbc2hvd0hlYWRlcl09XCJzaG93SGVhZGVyXCJcbiAgICAgICAgICAgIFtub2RlXT1cIm5vZGVQYWdpbmdcIlxuICAgICAgICAgICAgW3ByZXNlbGVjdE5vZGVzXT1cInByZXNlbGVjdGVkTm9kZXNcIlxuICAgICAgICAgICAgW21heEl0ZW1zXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgIFtyb3dGaWx0ZXJdPVwiX3Jvd0ZpbHRlclwiXG4gICAgICAgICAgICBbaW1hZ2VSZXNvbHZlcl09XCJpbWFnZVJlc29sdmVyXCJcbiAgICAgICAgICAgIFtjdXJyZW50Rm9sZGVySWRdPVwiZm9sZGVySWRUb1Nob3dcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uTW9kZVwiXG4gICAgICAgICAgICBbY29udGV4dE1lbnVBY3Rpb25zXT1cImZhbHNlXCJcbiAgICAgICAgICAgIFtjb250ZW50QWN0aW9uc109XCJmYWxzZVwiXG4gICAgICAgICAgICBbYWxsb3dEcm9wRmlsZXNdPVwiZmFsc2VcIlxuICAgICAgICAgICAgW3NvcnRpbmddPVwic29ydGluZ1wiXG4gICAgICAgICAgICBzb3J0aW5nTW9kZT1cInNlcnZlclwiXG4gICAgICAgICAgICBbd2hlcmVdPVwid2hlcmVcIlxuICAgICAgICAgICAgKGZvbGRlckNoYW5nZSk9XCJvbkZvbGRlckNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChyZWFkeSk9XCJvbkZvbGRlckxvYWRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChub2RlU2VsZWN0ZWQpPVwib25DdXJyZW50U2VsZWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgW2NsYXNzLmFkZi1jb250ZW50LW5vZGUtc2VsZWN0b3ItY29udGVudC1saXN0LWVtcHR5XT1cImVtcHR5TGlzdFwiXG4gICAgICAgICAgICBkYXRhLWF1dG9tYXRpb24taWQ9XCJjb250ZW50LW5vZGUtc2VsZWN0b3ItZG9jdW1lbnQtbGlzdFwiPlxuXG4gICAgICAgICAgICA8YWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDxkaXYgYXJpYS1saXZlPVwicG9saXRlXCI+e3sgJ05PREVfU0VMRUNUT1IuTk9fUkVTVUxUUycgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvYWRmLWN1c3RvbS1lbXB0eS1jb250ZW50LXRlbXBsYXRlPlxuXG4gICAgICAgICAgICA8ZGF0YS1jb2x1bW5zPlxuICAgICAgICAgICAgICAgIDxkYXRhLWNvbHVtbiBrZXk9XCIkdGh1bWJuYWlsXCIgdHlwZT1cImltYWdlXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwibmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuTkFNRVwiIGNsYXNzPVwiYWRmLWZ1bGwtd2lkdGggYWRmLWVsbGlwc2lzLWNlbGxcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb250ZXh0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGFkZi1uYW1lLWxvY2F0aW9uLWNlbGwgW3Jvd109XCJjb250ZXh0LnJvd1wiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kYXRhLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwibW9kaWZpZWRBdFwiIHR5cGU9XCJkYXRlXCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuTU9ESUZJRURfT05cIiBmb3JtYXQ9XCJ0aW1lQWdvXCIgY2xhc3M9XCJhZGYtY29udGVudC1zZWxlY3Rvci1tb2RpZmllZC1jZWxsXCIgLz5cbiAgICAgICAgICAgICAgICA8ZGF0YS1jb2x1bW4ga2V5PVwiY3JlYXRlZEJ5VXNlci5kaXNwbGF5TmFtZVwiIHR5cGU9XCJ0ZXh0XCIgdGl0bGU9XCJBREYtRE9DVU1FTlQtTElTVC5MQVlPVVQuQ1JFQVRFRF9CWVwiIGNsYXNzPVwiYWRmLWNvbnRlbnQtc2VsZWN0b3ItbW9kaWZpZXItY2VsbFwiIC8+XG4gICAgICAgICAgICAgICAgPGRhdGEtY29sdW1uIGtleT1cInZpc2liaWxpdHlcIiB0eXBlPVwidGV4dFwiIHRpdGxlPVwiQURGLURPQ1VNRU5ULUxJU1QuTEFZT1VULlNUQVRVU1wiIGNsYXNzPVwiYWRmLWNvbnRlbnQtc2VsZWN0b3ItdmlzaWJpbGl0eS1jZWxsXCIgLz5cbiAgICAgICAgICAgIDwvZGF0YS1jb2x1bW5zPlxuXG4gICAgICAgIDwvYWRmLWRvY3VtZW50LWxpc3Q+XG5cbiAgICAgICAgPGFkZi1pbmZpbml0ZS1wYWdpbmF0aW9uXG4gICAgICAgICAgICBbdGFyZ2V0XT1cInRhcmdldFwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJsb2FkaW5nU2VhcmNoUmVzdWx0c1wiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwiZ2V0TmV4dFBhZ2VPZlNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIGRhdGEtYXV0b21hdGlvbi1pZD1cImNvbnRlbnQtbm9kZS1zZWxlY3Rvci1zZWFyY2gtcGFnaW5hdGlvblwiPlxuICAgICAgICAgICAge3sgJ0FERi1ET0NVTUVOVC1MSVNULkxBWU9VVC5MT0FEX01PUkUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgIDwvYWRmLWluZmluaXRlLXBhZ2luYXRpb24+XG4gICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|