@vendure/admin-ui 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/components/move-collections-dialog/move-collections-dialog.component.d.ts +3 -2
- package/catalog/components/product-options-editor/product-options-editor.component.d.ts +6 -0
- package/core/common/base-detail.component.d.ts +28 -0
- package/core/common/version.d.ts +1 -1
- package/core/data/providers/interceptor.d.ts +11 -1
- package/core/providers/page/page.service.d.ts +7 -0
- package/core/shared/components/chart/chart.component.d.ts +3 -1
- package/esm2022/catalog/catalog.module.mjs +2 -2
- package/esm2022/catalog/components/asset-list/asset-list.component.mjs +3 -3
- package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +3 -3
- package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs +34 -8
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +13 -5
- package/esm2022/core/common/base-detail.component.mjs +29 -1
- package/esm2022/core/common/base-list.component.mjs +1 -1
- package/esm2022/core/common/component-registry-types.mjs +1 -1
- package/esm2022/core/common/generated-types.mjs +1 -1
- package/esm2022/core/common/introspection-result.mjs +1 -1
- package/esm2022/core/common/title-setter.mjs +1 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/components/app-shell/app-shell.component.mjs +3 -3
- package/esm2022/core/components/breadcrumb/breadcrumb.component.mjs +3 -3
- package/esm2022/core/data/providers/interceptor.mjs +32 -11
- package/esm2022/core/providers/bulk-action-registry/bulk-action-types.mjs +1 -1
- package/esm2022/core/providers/custom-field-component/custom-field-component.service.mjs +1 -1
- package/esm2022/core/providers/local-storage/local-storage.service.mjs +1 -4
- package/esm2022/core/providers/page/page.service.mjs +5 -2
- package/esm2022/core/shared/components/action-bar-items/action-bar-items.component.mjs +1 -1
- package/esm2022/core/shared/components/asset-file-input/asset-file-input.component.mjs +1 -1
- package/esm2022/core/shared/components/asset-gallery/asset-gallery.component.mjs +2 -2
- package/esm2022/core/shared/components/asset-search-input/asset-search-input.component.mjs +3 -3
- package/esm2022/core/shared/components/assign-to-channel-dialog/assign-to-channel-dialog.component.mjs +1 -1
- package/esm2022/core/shared/components/chart/chart.component.mjs +6 -2
- package/esm2022/core/shared/components/chip/chip.component.mjs +2 -2
- package/esm2022/core/shared/components/currency-code-selector/currency-code-selector.component.mjs +1 -1
- package/esm2022/core/shared/components/data-table/data-table.component.mjs +1 -1
- package/esm2022/core/shared/components/language-code-selector/language-code-selector.component.mjs +1 -1
- package/esm2022/core/shared/components/select-toggle/select-toggle.component.mjs +3 -3
- package/esm2022/core/shared/dynamic-form-inputs/register-dynamic-input-components.mjs +1 -1
- package/esm2022/core/shared/pipes/state-i18n-token.pipe.mjs +1 -1
- package/esm2022/customer/components/address-card/address-card.component.mjs +3 -3
- package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +3 -3
- package/esm2022/customer/components/customer-list/customer-list.component.mjs +14 -10
- package/esm2022/customer/customer.module.mjs +1 -1
- package/esm2022/customer/customer.routes.mjs +2 -2
- package/esm2022/dashboard/components/dashboard/dashboard.component.mjs +1 -1
- package/esm2022/dashboard/widgets/order-chart-widget/order-chart-widget.component.mjs +13 -13
- package/esm2022/marketing/marketing.module.mjs +1 -1
- package/esm2022/order/components/add-manual-payment-dialog/add-manual-payment-dialog.component.mjs +3 -3
- package/esm2022/order/components/draft-order-detail/draft-order-detail.component.mjs +3 -3
- package/esm2022/order/components/order-detail/order-detail.component.mjs +2 -4
- package/esm2022/order/components/select-customer-dialog/select-customer-dialog.component.mjs +3 -3
- package/esm2022/order/order.module.mjs +1 -1
- package/esm2022/order/order.routes.mjs +1 -1
- package/esm2022/settings/components/channel-detail/channel-detail.component.mjs +12 -12
- package/esm2022/settings/components/tax-rate-detail/tax-rate-detail.component.mjs +8 -8
- package/esm2022/settings/settings.module.mjs +1 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +49 -15
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +80 -27
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +18 -14
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-dashboard.mjs +12 -12
- package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +7 -9
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +18 -18
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/package.json +13 -13
- package/static/i18n-messages/cs.json +770 -768
- package/static/i18n-messages/de.json +771 -769
- package/static/i18n-messages/en.json +771 -769
- package/static/i18n-messages/es.json +770 -768
- package/static/i18n-messages/fr.json +770 -768
- package/static/i18n-messages/it.json +770 -768
- package/static/i18n-messages/pl.json +770 -768
- package/static/i18n-messages/pt_BR.json +770 -768
- package/static/i18n-messages/pt_PT.json +770 -768
- package/static/i18n-messages/ru.json +770 -768
- package/static/i18n-messages/uk.json +770 -768
- package/static/i18n-messages/zh_Hans.json +770 -768
- package/static/i18n-messages/zh_Hant.json +770 -768
- package/static/styles/global/_buttons.scss +24 -0
- package/static/theme.min.css +1 -1
package/esm2022/catalog/components/move-collections-dialog/move-collections-dialog.component.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
2
2
|
import { FormControl } from '@angular/forms';
|
|
3
3
|
import { BehaviorSubject, combineLatest, of, Subject } from 'rxjs';
|
|
4
|
-
import { debounceTime, distinctUntilChanged, startWith, switchMap, tap } from 'rxjs/operators';
|
|
4
|
+
import { debounceTime, distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "@vendure/admin-ui/core";
|
|
7
7
|
import * as i2 from "@clr/angular";
|
|
@@ -10,8 +10,9 @@ import * as i4 from "../collection-data-table/collection-data-table.component";
|
|
|
10
10
|
import * as i5 from "@ngx-translate/core";
|
|
11
11
|
import * as i6 from "../collection-list/collection-breadcrumb.pipe";
|
|
12
12
|
export class MoveCollectionsDialogComponent {
|
|
13
|
-
constructor(dataService) {
|
|
13
|
+
constructor(dataService, i18nService) {
|
|
14
14
|
this.dataService = dataService;
|
|
15
|
+
this.i18nService = i18nService;
|
|
15
16
|
this.searchTermControl = new FormControl('');
|
|
16
17
|
this.currentPage$ = new BehaviorSubject(1);
|
|
17
18
|
this.itemsPerPage$ = new BehaviorSubject(10);
|
|
@@ -36,7 +37,32 @@ export class MoveCollectionsDialogComponent {
|
|
|
36
37
|
},
|
|
37
38
|
});
|
|
38
39
|
});
|
|
39
|
-
|
|
40
|
+
const rootCollectionId$ = this.dataService.collection
|
|
41
|
+
.getCollections({
|
|
42
|
+
take: 1,
|
|
43
|
+
topLevelOnly: true,
|
|
44
|
+
})
|
|
45
|
+
.mapSingle(data => data.collections.items[0].parentId);
|
|
46
|
+
this.items$ = combineLatest(getCollectionsResult.mapStream(({ collections }) => collections), rootCollectionId$).pipe(map(([collections, rootCollectionId]) => [
|
|
47
|
+
...(rootCollectionId
|
|
48
|
+
? [
|
|
49
|
+
{
|
|
50
|
+
id: rootCollectionId,
|
|
51
|
+
name: this.i18nService.translate('catalog.root-collection'),
|
|
52
|
+
slug: '',
|
|
53
|
+
parentId: '__',
|
|
54
|
+
position: 0,
|
|
55
|
+
featuredAsset: null,
|
|
56
|
+
children: [],
|
|
57
|
+
breadcrumbs: [],
|
|
58
|
+
isPrivate: false,
|
|
59
|
+
createdAt: '',
|
|
60
|
+
updatedAt: '',
|
|
61
|
+
},
|
|
62
|
+
]
|
|
63
|
+
: []),
|
|
64
|
+
...collections.items,
|
|
65
|
+
]));
|
|
40
66
|
this.totalItems$ = getCollectionsResult.mapStream(data => data.collections.totalItems);
|
|
41
67
|
this.subCollections$ = this.expandedIds$.pipe(tap(val => (this.expandedIds = val)), switchMap(ids => {
|
|
42
68
|
if (ids.length) {
|
|
@@ -64,11 +90,11 @@ export class MoveCollectionsDialogComponent {
|
|
|
64
90
|
}
|
|
65
91
|
this.expandedIds$.next(expandedIds);
|
|
66
92
|
}
|
|
67
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MoveCollectionsDialogComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
68
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: MoveCollectionsDialogComponent, selector: "vdr-move-collections-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {
|
|
93
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MoveCollectionsDialogComponent, deps: [{ token: i1.DataService }, { token: i1.I18nService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
94
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: MoveCollectionsDialogComponent, selector: "vdr-move-collections-dialog", ngImport: i0, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length && collection.parentId !== '__'\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"icon-button folder-button\" *ngIf=\"collection.parentId === '__'\" disabled>\r\n <clr-icon shape=\"folder\" class=\"is-solid\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {name: collection.name} }}</span>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-collection-data-table>\r\n", styles: ["", ":host{--indent-spacing: 18px}.indent-1{padding-left:var(--indent-spacing)}.indent-2{padding-left:calc(var(--indent-spacing) * 2)}.indent-3{padding-left:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-left:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.DialogTitleDirective, selector: "[vdrDialogTitle]" }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i4.CollectionDataTableComponent, selector: "vdr-collection-data-table", inputs: ["subCollections"], outputs: ["changeOrder"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i6.CollectionBreadcrumbPipe, name: "collectionBreadcrumb" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
69
95
|
}
|
|
70
96
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: MoveCollectionsDialogComponent, decorators: [{
|
|
71
97
|
type: Component,
|
|
72
|
-
args: [{ selector: 'vdr-move-collections-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {
|
|
73
|
-
}], ctorParameters: function () { return [{ type: i1.DataService }]; } });
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1jb2xsZWN0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL21vdmUtY29sbGVjdGlvbnMtZGlhbG9nL21vdmUtY29sbGVjdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFRL0YsTUFBTSxPQUFPLDhCQUE4QjtJQWF2QyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQVQ1QyxzQkFBaUIsR0FBRyxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUd4QyxpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLGtCQUFhLEdBQUcsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEMsaUJBQVksR0FBRyxJQUFJLE9BQU8sRUFBWSxDQUFDO1FBQ3ZDLGdCQUFXLEdBQWEsRUFBRSxDQUFDO0lBR29CLENBQUM7SUFFaEQsUUFBUTtRQUNKLE1BQU0sb0JBQW9C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QUE4QixtRUNaM0Msc2dHQWlFQTs7MkZEckRhLDhCQUE4QjtrQkFOMUMsU0FBUzsrQkFDSSw2QkFBNkIsbUJBR3RCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEaWFsb2csIEdldENvbGxlY3Rpb25MaXN0UXVlcnksIEl0ZW1PZiB9IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLW1vdmUtY29sbGVjdGlvbnMtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy5jb21wb25lbnQuc2NzcycsICcuLi9jb2xsZWN0aW9uLWxpc3QvY29sbGVjdGlvbi1saXN0LWNvbW1vbi5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIE1vdmVDb2xsZWN0aW9uc0RpYWxvZ0NvbXBvbmVudFxyXG4gICAgaW1wbGVtZW50cyBPbkluaXQsIERpYWxvZzxJdGVtT2Y8R2V0Q29sbGVjdGlvbkxpc3RRdWVyeSwgJ2NvbGxlY3Rpb25zJz4+XHJcbntcclxuICAgIHJlc29sdmVXaXRoOiAocmVzdWx0PzogSXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+KSA9PiB2b2lkO1xyXG4gICAgc2VhcmNoVGVybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xyXG4gICAgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj4+O1xyXG4gICAgdG90YWxJdGVtcyQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIGN1cnJlbnRQYWdlJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoMSk7XHJcbiAgICBpdGVtc1BlclBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgxMCk7XHJcbiAgICBleHBhbmRlZElkcyQgPSBuZXcgU3ViamVjdDxzdHJpbmdbXT4oKTtcclxuICAgIGV4cGFuZGVkSWRzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgc3ViQ29sbGVjdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj4+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGNvbnN0IGdldENvbGxlY3Rpb25zUmVzdWx0ID0gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb25zKCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHNlYXJjaFRlcm0kID0gdGhpcy5zZWFyY2hUZXJtQ29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShcclxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXHJcbiAgICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXHJcbiAgICAgICAgICAgIHN0YXJ0V2l0aCgnJyksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50UGFnZSQgPSB0aGlzLmN1cnJlbnRQYWdlJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zUGVyUGFnZSQgPSB0aGlzLml0ZW1zUGVyUGFnZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHNlYXJjaFRlcm0kLCBjdXJyZW50UGFnZSQsIGl0ZW1zUGVyUGFnZSQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgKFtzZWFyY2hUZXJtLCBjdXJyZW50UGFnZSwgaXRlbXNQZXJQYWdlXSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdG9wTGV2ZWxPbmx5ID0gc2VhcmNoVGVybSA9PT0gJyc7XHJcbiAgICAgICAgICAgICAgICBnZXRDb2xsZWN0aW9uc1Jlc3VsdC5yZWYucmVmZXRjaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwOiAoY3VycmVudFBhZ2UgLSAxKSAqIGl0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHsgY29udGFpbnM6IHNlYXJjaFRlcm0gfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9wTGV2ZWxPbmx5LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLml0ZW1zJCA9IGdldENvbGxlY3Rpb25zUmVzdWx0Lm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpO1xyXG4gICAgICAgIHRoaXMudG90YWxJdGVtcyQgPSBnZXRDb2xsZWN0aW9uc1Jlc3VsdC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLnRvdGFsSXRlbXMpO1xyXG5cclxuICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCA9IHRoaXMuZXhwYW5kZWRJZHMkLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCh2YWwgPT4gKHRoaXMuZXhwYW5kZWRJZHMgPSB2YWwpKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKGlkcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldENvbGxlY3Rpb25zKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDk5OSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiB7IGluOiBpZHMgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXBTdHJlYW0oZGF0YSA9PiBkYXRhLmNvbGxlY3Rpb25zLml0ZW1zKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVFeHBhbmRlZChjb2xsZWN0aW9uOiBJdGVtT2Y8R2V0Q29sbGVjdGlvbkxpc3RRdWVyeSwgJ2NvbGxlY3Rpb25zJz4pIHtcclxuICAgICAgICBsZXQgZXhwYW5kZWRJZHMgPSB0aGlzLmV4cGFuZGVkSWRzO1xyXG4gICAgICAgIGlmICghZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZCkpIHtcclxuICAgICAgICAgICAgZXhwYW5kZWRJZHMucHVzaChjb2xsZWN0aW9uLmlkKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBleHBhbmRlZElkcyA9IGV4cGFuZGVkSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gY29sbGVjdGlvbi5pZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZXhwYW5kZWRJZHMkLm5leHQoZXhwYW5kZWRJZHMpO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dUaXRsZT5cclxuICAgIHt7ICdjYXRhbG9nLm1vdmUtY29sbGVjdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbjwvbmctdGVtcGxhdGU+XHJcbjx2ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlXHJcbiAgICBjbGFzcz1cIm10LTJcIlxyXG4gICAgaWQ9XCJtb3ZlLWNvbGxlY3Rpb24tbGlzdFwiXHJcbiAgICBbaXRlbXNdPVwiaXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgW3N1YkNvbGxlY3Rpb25zXT1cInN1YkNvbGxlY3Rpb25zJCB8IGFzeW5jXCJcclxuICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlJCB8IGFzeW5jXCJcclxuICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXMkIHwgYXN5bmNcIlxyXG4gICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlJCB8IGFzeW5jXCJcclxuICAgIChwYWdlQ2hhbmdlKT1cImN1cnJlbnRQYWdlJC5uZXh0KCRldmVudClcIlxyXG4gICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2UkLm5leHQoJGV2ZW50KVwiXHJcbj5cclxuICAgIDx2ZHItZHQyLXNlYXJjaFxyXG4gICAgICAgIFtzZWFyY2hUZXJtQ29udHJvbF09XCJzZWFyY2hUZXJtQ29udHJvbFwiXHJcbiAgICAgICAgW3NlYXJjaFRlcm1QbGFjZWhvbGRlcl09XCInY29tbW9uLnNlYXJjaC1ieS1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICA+PC92ZHItZHQyLXNlYXJjaD5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmlkJyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAge3sgY29sbGVjdGlvbi5pZCB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24ubmFtZScgfCB0cmFuc2xhdGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCIgbGV0LWRlcHRoPVwiZGVwdGhcIj5cclxuICAgICAgICAgICAgPGRpdiBbbmdDbGFzc109XCInaW5kZW50LScgKyBkZXB0aFwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8Y2xyLWljb25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hpbGQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLnRyYW5zcGFyZW50XT1cImRlcHRoID09PSAwXCJcclxuICAgICAgICAgICAgICAgIHNoYXBlPVwiY2hpbGQtYXJyb3dcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhY29sbGVjdGlvbi5jaGlsZHJlbj8ubGVuZ3RoXCJcclxuICAgICAgICAgICAgPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1idXR0b24gZm9sZGVyLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImNvbGxlY3Rpb24uY2hpbGRyZW4/Lmxlbmd0aFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlRXhwYW5kZWQoY29sbGVjdGlvbilcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXJcIiAqbmdJZj1cIiFleHBhbmRlZElkcy5pbmNsdWRlcyhjb2xsZWN0aW9uLmlkKVwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXItb3BlblwiICpuZ0lmPVwiZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZClcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvbi1naG9zdFwiIChjbGljayk9XCJyZXNvbHZlV2l0aChjb2xsZWN0aW9uKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgJ2NhdGFsb2cubW92ZS1jb2xsZWN0aW9uLXRvJyB8IHRyYW5zbGF0ZSA6IHsgbmFtZTogY29sbGVjdGlvbi5uYW1lIH0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uYnJlYWRjcnVtYicgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJicmVhZGNydW1iXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sbGVjdGlvbiB8IGNvbGxlY3Rpb25CcmVhZGNydW1iIGFzIGJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJyZWFkY3J1bWJzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGJyZWFkY3J1bWJzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNlcGFyYXRvclwiPi88L3NwYW4+e3sgaXRlbS5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCIgKm5nSWY9XCIhYnJlYWRjcnVtYnMubGVuZ3RoXCI+Lzwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLnNsdWcnIHwgdHJhbnNsYXRlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBjb2xsZWN0aW9uLnNsdWcgfX1cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC92ZHItZHQyLWNvbHVtbj5cclxuPC92ZHItY29sbGVjdGlvbi1kYXRhLXRhYmxlPlxyXG4iXX0=
|
|
98
|
+
args: [{ selector: 'vdr-move-collections-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.move-collections' | translate }}\r\n</ng-template>\r\n<vdr-collection-data-table\r\n class=\"mt-2\"\r\n id=\"move-collection-list\"\r\n [items]=\"items$ | async\"\r\n [subCollections]=\"subCollections$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n (pageChange)=\"currentPage$.next($event)\"\r\n (itemsPerPageChange)=\"itemsPerPage$.next($event)\"\r\n>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'common.search-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-collection=\"item\" let-depth=\"depth\">\r\n <div [ngClass]=\"'indent-' + depth\"></div>\r\n <clr-icon\r\n class=\"child-arrow\"\r\n [class.transparent]=\"depth === 0\"\r\n shape=\"child-arrow\"\r\n *ngIf=\"!collection.children?.length && collection.parentId !== '__'\"\r\n ></clr-icon>\r\n <button\r\n class=\"icon-button folder-button\"\r\n *ngIf=\"collection.children?.length\"\r\n (click)=\"toggleExpanded(collection)\"\r\n >\r\n <clr-icon shape=\"folder\" *ngIf=\"!expandedIds.includes(collection.id)\"></clr-icon>\r\n <clr-icon shape=\"folder-open\" *ngIf=\"expandedIds.includes(collection.id)\"></clr-icon>\r\n </button>\r\n <button class=\"icon-button folder-button\" *ngIf=\"collection.parentId === '__'\" disabled>\r\n <clr-icon shape=\"folder\" class=\"is-solid\"></clr-icon>\r\n </button>\r\n <button class=\"button-ghost\" (click)=\"resolveWith(collection)\">\r\n <span>{{ 'catalog.move-collection-to' | translate : {name: collection.name} }}</span>\r\n </button>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.breadcrumb' | translate\">\r\n <ng-template let-collection=\"item\">\r\n <div class=\"breadcrumb\">\r\n <ng-container *ngIf=\"collection | collectionBreadcrumb as breadcrumbs\">\r\n <ng-container *ngIf=\"breadcrumbs.length\">\r\n <div *ngFor=\"let item of breadcrumbs\">\r\n <span class=\"separator\">/</span>{{ item.name }}\r\n </div>\r\n </ng-container>\r\n <span class=\"separator\" *ngIf=\"!breadcrumbs.length\">/</span>\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\">\r\n <ng-template let-collection=\"item\">\r\n {{ collection.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n</vdr-collection-data-table>\r\n", styles: [":host{--indent-spacing: 18px}.indent-1{padding-left:var(--indent-spacing)}.indent-2{padding-left:calc(var(--indent-spacing) * 2)}.indent-3{padding-left:calc(var(--indent-spacing) * 3)}.indent-4,.indent-5,.indent-6,.indent-7,.indent-8,.indent-9{padding-left:calc(var(--indent-spacing) * 4)}.child-arrow{margin:1px 6px}.child-arrow.transparent{opacity:0}.breadcrumb{display:flex}.separator{color:var(--color-weight-500);margin:0 3px}\n"] }]
|
|
99
|
+
}], ctorParameters: function () { return [{ type: i1.DataService }, { type: i1.I18nService }]; } });
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW92ZS1jb2xsZWN0aW9ucy1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL21vdmUtY29sbGVjdGlvbnMtZGlhbG9nL21vdmUtY29sbGVjdGlvbnMtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3QyxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7O0FBUXBHLE1BQU0sT0FBTyw4QkFBOEI7SUFhdkMsWUFBb0IsV0FBd0IsRUFBVSxXQUF3QjtRQUExRCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVDlFLHNCQUFpQixHQUFHLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBR3hDLGlCQUFZLEdBQUcsSUFBSSxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsa0JBQWEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QyxpQkFBWSxHQUFHLElBQUksT0FBTyxFQUFZLENBQUM7UUFDdkMsZ0JBQVcsR0FBYSxF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dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IERhdGFTZXJ2aWNlLCBEaWFsb2csIEdldENvbGxlY3Rpb25MaXN0UXVlcnksIEkxOG5TZXJ2aWNlLCBJdGVtT2YgfSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd2ZHItbW92ZS1jb2xsZWN0aW9ucy1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9tb3ZlLWNvbGxlY3Rpb25zLWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vbW92ZS1jb2xsZWN0aW9ucy1kaWFsb2cuY29tcG9uZW50LnNjc3MnLCAnLi4vY29sbGVjdGlvbi1saXN0L2NvbGxlY3Rpb24tbGlzdC1jb21tb24uc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBNb3ZlQ29sbGVjdGlvbnNEaWFsb2dDb21wb25lbnRcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgRGlhbG9nPEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj5cbntcbiAgICByZXNvbHZlV2l0aDogKHJlc3VsdD86IEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPikgPT4gdm9pZDtcbiAgICBzZWFyY2hUZXJtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG4gICAgaXRlbXMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj4+O1xuICAgIHRvdGFsSXRlbXMkOiBPYnNlcnZhYmxlPG51bWJlcj47XG4gICAgY3VycmVudFBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgxKTtcbiAgICBpdGVtc1BlclBhZ2UkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgxMCk7XG4gICAgZXhwYW5kZWRJZHMkID0gbmV3IFN1YmplY3Q8c3RyaW5nW10+KCk7XG4gICAgZXhwYW5kZWRJZHM6IHN0cmluZ1tdID0gW107XG4gICAgc3ViQ29sbGVjdGlvbnMkOiBPYnNlcnZhYmxlPEFycmF5PEl0ZW1PZjxHZXRDb2xsZWN0aW9uTGlzdFF1ZXJ5LCAnY29sbGVjdGlvbnMnPj4+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsIHByaXZhdGUgaTE4blNlcnZpY2U6IEkxOG5TZXJ2aWNlKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIGNvbnN0IGdldENvbGxlY3Rpb25zUmVzdWx0ID0gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uLmdldENvbGxlY3Rpb25zKCk7XG5cbiAgICAgICAgY29uc3Qgc2VhcmNoVGVybSQgPSB0aGlzLnNlYXJjaFRlcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZGVib3VuY2VUaW1lKDI1MCksXG4gICAgICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICAgICAgc3RhcnRXaXRoKCcnKSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgY3VycmVudFBhZ2UkID0gdGhpcy5jdXJyZW50UGFnZSQucGlwZShkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKTtcbiAgICAgICAgY29uc3QgaXRlbXNQZXJQYWdlJCA9IHRoaXMuaXRlbXNQZXJQYWdlJC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpO1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHNlYXJjaFRlcm0kLCBjdXJyZW50UGFnZSQsIGl0ZW1zUGVyUGFnZSQpLnN1YnNjcmliZShcbiAgICAgICAgICAgIChbc2VhcmNoVGVybSwgY3VycmVudFBhZ2UsIGl0ZW1zUGVyUGFnZV0pID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b3BMZXZlbE9ubHkgPSBzZWFyY2hUZXJtID09PSAnJztcbiAgICAgICAgICAgICAgICBnZXRDb2xsZWN0aW9uc1Jlc3VsdC5yZWYucmVmZXRjaCh7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXA6IChjdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZTogaXRlbXNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogeyBjb250YWluczogc2VhcmNoVGVybSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvcExldmVsT25seSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgcm9vdENvbGxlY3Rpb25JZCQgPSB0aGlzLmRhdGFTZXJ2aWNlLmNvbGxlY3Rpb25cbiAgICAgICAgICAgIC5nZXRDb2xsZWN0aW9ucyh7XG4gICAgICAgICAgICAgICAgdGFrZTogMSxcbiAgICAgICAgICAgICAgICB0b3BMZXZlbE9ubHk6IHRydWUsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcFNpbmdsZShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXNbMF0ucGFyZW50SWQpO1xuXG4gICAgICAgIHRoaXMuaXRlbXMkID0gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgIGdldENvbGxlY3Rpb25zUmVzdWx0Lm1hcFN0cmVhbSgoeyBjb2xsZWN0aW9ucyB9KSA9PiBjb2xsZWN0aW9ucyksXG4gICAgICAgICAgICByb290Q29sbGVjdGlvbklkJCxcbiAgICAgICAgKS5waXBlKFxuICAgICAgICAgICAgbWFwKChbY29sbGVjdGlvbnMsIHJvb3RDb2xsZWN0aW9uSWRdKSA9PiBbXG4gICAgICAgICAgICAgICAgLi4uKHJvb3RDb2xsZWN0aW9uSWRcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiByb290Q29sbGVjdGlvbklkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5pMThuU2VydmljZS50cmFuc2xhdGUoJ2NhdGFsb2cucm9vdC1jb2xsZWN0aW9uJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbHVnOiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudElkOiAnX18nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlZEFzc2V0OiBudWxsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWRjcnVtYnM6IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQcml2YXRlOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWRBdDogJycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBJdGVtT2Y8R2V0Q29sbGVjdGlvbkxpc3RRdWVyeSwgJ2NvbGxlY3Rpb25zJz4sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAuLi5jb2xsZWN0aW9ucy5pdGVtcyxcbiAgICAgICAgICAgIF0pLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMkID0gZ2V0Q29sbGVjdGlvbnNSZXN1bHQubWFwU3RyZWFtKGRhdGEgPT4gZGF0YS5jb2xsZWN0aW9ucy50b3RhbEl0ZW1zKTtcblxuICAgICAgICB0aGlzLnN1YkNvbGxlY3Rpb25zJCA9IHRoaXMuZXhwYW5kZWRJZHMkLnBpcGUoXG4gICAgICAgICAgICB0YXAodmFsID0+ICh0aGlzLmV4cGFuZGVkSWRzID0gdmFsKSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaWRzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5jb2xsZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0Q29sbGVjdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2U6IDk5OSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50SWQ6IHsgaW46IGlkcyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcFN0cmVhbShkYXRhID0+IGRhdGEuY29sbGVjdGlvbnMuaXRlbXMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdG9nZ2xlRXhwYW5kZWQoY29sbGVjdGlvbjogSXRlbU9mPEdldENvbGxlY3Rpb25MaXN0UXVlcnksICdjb2xsZWN0aW9ucyc+KSB7XG4gICAgICAgIGxldCBleHBhbmRlZElkcyA9IHRoaXMuZXhwYW5kZWRJZHM7XG4gICAgICAgIGlmICghZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZCkpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkSWRzLnB1c2goY29sbGVjdGlvbi5pZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBleHBhbmRlZElkcyA9IGV4cGFuZGVkSWRzLmZpbHRlcihpZCA9PiBpZCAhPT0gY29sbGVjdGlvbi5pZCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5leHBhbmRlZElkcyQubmV4dChleHBhbmRlZElkcyk7XG4gICAgfVxufVxuIiwiPG5nLXRlbXBsYXRlIHZkckRpYWxvZ1RpdGxlPlxyXG4gICAge3sgJ2NhdGFsb2cubW92ZS1jb2xsZWN0aW9ucycgfCB0cmFuc2xhdGUgfX1cclxuPC9uZy10ZW1wbGF0ZT5cclxuPHZkci1jb2xsZWN0aW9uLWRhdGEtdGFibGVcclxuICAgIGNsYXNzPVwibXQtMlwiXHJcbiAgICBpZD1cIm1vdmUtY29sbGVjdGlvbi1saXN0XCJcclxuICAgIFtpdGVtc109XCJpdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbc3ViQ29sbGVjdGlvbnNdPVwic3ViQ29sbGVjdGlvbnMkIHwgYXN5bmNcIlxyXG4gICAgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtcyQgfCBhc3luY1wiXHJcbiAgICBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2UkIHwgYXN5bmNcIlxyXG4gICAgKHBhZ2VDaGFuZ2UpPVwiY3VycmVudFBhZ2UkLm5leHQoJGV2ZW50KVwiXHJcbiAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cIml0ZW1zUGVyUGFnZSQubmV4dCgkZXZlbnQpXCJcclxuPlxyXG4gICAgPHZkci1kdDItc2VhcmNoXHJcbiAgICAgICAgW3NlYXJjaFRlcm1Db250cm9sXT1cInNlYXJjaFRlcm1Db250cm9sXCJcclxuICAgICAgICBbc2VhcmNoVGVybVBsYWNlaG9sZGVyXT1cIidjb21tb24uc2VhcmNoLWJ5LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgID48L3Zkci1kdDItc2VhcmNoPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1jb2xsZWN0aW9uPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICB7eyBjb2xsZWN0aW9uLmlkIH19XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIiBsZXQtZGVwdGg9XCJkZXB0aFwiPlxyXG4gICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cIidpbmRlbnQtJyArIGRlcHRoXCI+PC9kaXY+XHJcbiAgICAgICAgICAgIDxjbHItaWNvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjaGlsZC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MudHJhbnNwYXJlbnRdPVwiZGVwdGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgc2hhcGU9XCJjaGlsZC1hcnJvd1wiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFjb2xsZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGggJiYgY29sbGVjdGlvbi5wYXJlbnRJZCAhPT0gJ19fJ1wiXHJcbiAgICAgICAgICAgID48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImljb24tYnV0dG9uIGZvbGRlci1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb2xsZWN0aW9uLmNoaWxkcmVuPy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUV4cGFuZGVkKGNvbGxlY3Rpb24pXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyXCIgKm5nSWY9XCIhZXhwYW5kZWRJZHMuaW5jbHVkZXMoY29sbGVjdGlvbi5pZClcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZm9sZGVyLW9wZW5cIiAqbmdJZj1cImV4cGFuZGVkSWRzLmluY2x1ZGVzKGNvbGxlY3Rpb24uaWQpXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpY29uLWJ1dHRvbiBmb2xkZXItYnV0dG9uXCIgKm5nSWY9XCJjb2xsZWN0aW9uLnBhcmVudElkID09PSAnX18nXCIgZGlzYWJsZWQ+XHJcbiAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJmb2xkZXJcIiBjbGFzcz1cImlzLXNvbGlkXCI+PC9jbHItaWNvbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b24tZ2hvc3RcIiAoY2xpY2spPVwicmVzb2x2ZVdpdGgoY29sbGVjdGlvbilcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuPnt7ICdjYXRhbG9nLm1vdmUtY29sbGVjdGlvbi10bycgfCB0cmFuc2xhdGUgOiB7bmFtZTogY29sbGVjdGlvbi5uYW1lfSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5icmVhZGNydW1iJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtY29sbGVjdGlvbj1cIml0ZW1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJyZWFkY3J1bWJcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjb2xsZWN0aW9uIHwgY29sbGVjdGlvbkJyZWFkY3J1bWIgYXMgYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYnJlYWRjcnVtYnMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYnJlYWRjcnVtYnNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2VwYXJhdG9yXCI+Lzwvc3Bhbj57eyBpdGVtLm5hbWUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZXBhcmF0b3JcIiAqbmdJZj1cIiFicmVhZGNydW1icy5sZW5ndGhcIj4vPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uc2x1ZycgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICA8bmctdGVtcGxhdGUgbGV0LWNvbGxlY3Rpb249XCJpdGVtXCI+XHJcbiAgICAgICAgICAgIHt7IGNvbGxlY3Rpb24uc2x1ZyB9fVxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L3Zkci1kdDItY29sdW1uPlxyXG48L3Zkci1jb2xsZWN0aW9uLWRhdGEtdGFibGU+XHJcbiJdfQ==
|
package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { UntypedFormArray, UntypedFormGroup } from '@angular/forms';
|
|
|
3
3
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|
4
4
|
import { BaseDetailComponent, createUpdatedTranslatable, findTranslation, Permission, } from '@vendure/admin-ui/core';
|
|
5
5
|
import { combineLatest, forkJoin } from 'rxjs';
|
|
6
|
-
import { map, mergeMap, take } from 'rxjs/operators';
|
|
6
|
+
import { map, mergeMap, take, tap } from 'rxjs/operators';
|
|
7
7
|
import * as i0 from "@angular/core";
|
|
8
8
|
import * as i1 from "@angular/router";
|
|
9
9
|
import * as i2 from "@vendure/admin-ui/core";
|
|
@@ -24,12 +24,20 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
|
|
|
24
24
|
this.changeDetector = changeDetector;
|
|
25
25
|
this.notificationService = notificationService;
|
|
26
26
|
this.autoUpdateVariantNames = true;
|
|
27
|
+
this.paginationSettings = {};
|
|
27
28
|
this.updatePermission = [Permission.UpdateCatalog, Permission.UpdateProduct];
|
|
28
29
|
this.optionGroupCustomFields = this.getCustomFieldConfig('ProductOptionGroup');
|
|
29
30
|
this.optionCustomFields = this.getCustomFieldConfig('ProductOption');
|
|
30
31
|
}
|
|
31
32
|
ngOnInit() {
|
|
32
|
-
this.optionGroups$ = this.route.snapshot.data.entity.pipe(map((product) => product.optionGroups))
|
|
33
|
+
this.optionGroups$ = this.route.snapshot.data.entity.pipe(map((product) => product.optionGroups), tap((optionGroups) => {
|
|
34
|
+
for (const group of optionGroups) {
|
|
35
|
+
this.paginationSettings[group.id] = {
|
|
36
|
+
currentPage: 1,
|
|
37
|
+
itemsPerPage: 10,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
}));
|
|
33
41
|
this.detailForm = new UntypedFormGroup({
|
|
34
42
|
optionGroups: new UntypedFormArray([]),
|
|
35
43
|
});
|
|
@@ -185,10 +193,10 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
|
|
|
185
193
|
return optionForm;
|
|
186
194
|
}
|
|
187
195
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ProductOptionsEditorComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ServerConfigService }, { token: i2.DataService }, { token: i3.ProductDetailService }, { token: i4.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
188
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: ProductOptionsEditorComponent, selector: "vdr-product-options-editor", usesInheritance: true, ngImport: i0, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"10\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"], dependencies: [{ kind: "directive", type: i5.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i5.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i5.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.PageHeaderComponent, selector: "vdr-page-header" }, { kind: "component", type: i2.PageTitleComponent, selector: "vdr-page-title", inputs: ["title"] }, { kind: "component", type: i2.PageHeaderDescriptionComponent, selector: "vdr-page-header-description" }, { kind: "component", type: i2.PageBodyComponent, selector: "vdr-page-body" }, { kind: "component", type: i2.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i2.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i2.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
196
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.3", type: ProductOptionsEditorComponent, selector: "vdr-product-options-editor", usesInheritance: true, ngImport: i0, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"], dependencies: [{ kind: "directive", type: i5.ClrLabel, selector: "label", inputs: ["for"] }, { kind: "directive", type: i5.ClrCheckbox, selector: "[clrCheckbox],[clrToggle]" }, { kind: "component", type: i5.ClrCheckboxWrapper, selector: "clr-checkbox-wrapper,clr-toggle-wrapper" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.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: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i4.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i4.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "component", type: i2.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i2.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i2.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i2.FormFieldComponent, selector: "vdr-form-field", inputs: ["label", "for", "tooltip", "errors", "readOnlyToggle"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select" }, { kind: "component", type: i2.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i2.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i2.TabbedCustomFieldsComponent, selector: "vdr-tabbed-custom-fields", inputs: ["entityName", "customFields", "customFieldsFormGroup", "readonly", "compact", "showLabel"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.PageHeaderComponent, selector: "vdr-page-header" }, { kind: "component", type: i2.PageTitleComponent, selector: "vdr-page-title", inputs: ["title"] }, { kind: "component", type: i2.PageHeaderDescriptionComponent, selector: "vdr-page-header-description" }, { kind: "component", type: i2.PageBodyComponent, selector: "vdr-page-body" }, { kind: "component", type: i2.PageBlockComponent, selector: "vdr-page-block" }, { kind: "component", type: i2.PageEntityInfoComponent, selector: "vdr-page-entity-info", inputs: ["entity"] }, { kind: "component", type: i2.CardComponent, selector: "vdr-card", inputs: ["title", "paddingX"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.HasPermissionPipe, name: "hasPermission" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
189
197
|
}
|
|
190
198
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.3", ngImport: i0, type: ProductOptionsEditorComponent, decorators: [{
|
|
191
199
|
type: Component,
|
|
192
|
-
args: [{ selector: 'vdr-product-options-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"
|
|
200
|
+
args: [{ selector: 'vdr-product-options-editor', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-header>\r\n <vdr-page-title></vdr-page-title>\r\n <vdr-page-header-description>{{ 'catalog.page-description-options-editor' | translate }}</vdr-page-header-description>\r\n</vdr-page-header>\r\n<vdr-page-body>\r\n <vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [availableLanguageCodes]=\"availableLanguages$ | async\"\r\n [currentLanguageCode]=\"languageCode$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n\r\n <vdr-ab-right>\r\n <div class=\"flex center\">\r\n <div class=\"mr-2\">\r\n <clr-checkbox-wrapper>\r\n <input\r\n clrCheckbox\r\n type=\"checkbox\"\r\n id=\"auto-update\"\r\n [(ngModel)]=\"autoUpdateVariantNames\"\r\n />\r\n <label>{{ 'catalog.auto-update-product-variant-name' | translate }}</label>\r\n </clr-checkbox-wrapper>\r\n </div>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.pristine || detailForm.invalid\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </div>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n </vdr-page-block>\r\n <vdr-page-block>\r\n <form class=\"form\" [formGroup]=\"detailForm\" *ngIf=\"optionGroups$ | async as optionGroups\">\r\n <div formGroupName=\"optionGroups\">\r\n <vdr-card\r\n *ngFor=\"let optionGroup of getOptionGroups(); index as i\"\r\n [formArrayName]=\"i\"\r\n [title]=\"optionGroup.value.code\"\r\n >\r\n <vdr-page-entity-info [entity]=\"optionGroup.value\"></vdr-page-entity-info>\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n [id]=\"'name-' + i\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'common.code' | translate\" for=\"code\">\r\n <input\r\n [id]=\"'code-' + i\"\r\n type=\"text\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"code\"\r\n />\r\n </vdr-form-field>\r\n </div>\r\n <ng-container formGroupName=\"customFields\" *ngIf=\"optionGroupCustomFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOptionGroup\"\r\n [customFields]=\"optionGroupCustomFields\"\r\n [customFieldsFormGroup]=\"optionGroup.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-container>\r\n\r\n <vdr-data-table-2\r\n id=\"edit-options-list\"\r\n *ngIf=\"getOptions(optionGroup) as options\"\r\n [items]=\"options\"\r\n [itemsPerPage]=\"paginationSettings[optionGroup.value.id]?.itemsPerPage\"\r\n [currentPage]=\"paginationSettings[optionGroup.value.id]?.currentPage\"\r\n (pageChange)=\"paginationSettings[optionGroup.value.id].currentPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" [hiddenByDefault]=\"true\">\r\n <ng-template let-optionControl=\"item\">\r\n {{ optionControl.value.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input\r\n type=\"text\"\r\n [formControl]=\"optionControl.get('name')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" [optional]=\"false\">\r\n <ng-template let-optionControl=\"item\">\r\n <input type=\"text\" [formControl]=\"optionControl.get('code')\" />\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.custom-fields' | translate\"\r\n [hiddenByDefault]=\"optionCustomFields.length === 0\"\r\n >\r\n <ng-template let-optionControl=\"item\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"ProductOption\"\r\n [customFields]=\"optionCustomFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"optionControl.get('customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n </vdr-card>\r\n </div>\r\n </form>\r\n </vdr-page-block>\r\n</vdr-page-body>\r\n", styles: [".option-group-header{display:flex;align-items:baseline}\n"] }]
|
|
193
201
|
}], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i2.DataService }, { type: i3.ProductDetailService }, { type: i4.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.NotificationService }]; } });
|
|
194
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFlLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJHLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFZckQsTUFBTSxPQUFPLDZCQUE4QixTQUFRLG1CQUF1QztJQVV0RixZQUNjLEtBQXFCLEVBQ3JCLE1BQWMsRUFDZCxtQkFBd0MsRUFDeEMsV0FBd0IsRUFDMUIsb0JBQTBDLEVBQzFDLFdBQStCLEVBQy9CLGNBQWlDLEVBQ2pDLG1CQUF3QztRQUVoRCxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQVQ3QyxVQUFL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QyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQzs4R0F0UFEsNkJBQTZCO2tHQUE3Qiw2QkFBNkIseUZDbkMxQyw2c09Bb0lBOzsyRkRqR2EsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXAsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXBGcmFnbWVudCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUcmFuc2xhdGlvbk9mLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG5pbXBvcnQgeyBQcm9kdWN0RGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycy9wcm9kdWN0LWRldGFpbC9wcm9kdWN0LWRldGFpbC5zZXJ2aWNlJztcclxuXHJcbnR5cGUgUHJvZHVjdFdpdGhPcHRpb25zID0gTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT47XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLXByb2R1Y3Qtb3B0aW9ucy1lZGl0b3InLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQcm9kdWN0T3B0aW9uc0VkaXRvckNvbXBvbmVudCBleHRlbmRzIEJhc2VEZXRhaWxDb21wb25lbnQ8UHJvZHVjdFdpdGhPcHRpb25zPiBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBkZXRhaWxGb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xyXG4gICAgb3B0aW9uR3JvdXBzJDogT2JzZXJ2YWJsZTxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddPjtcclxuICAgIGxhbmd1YWdlQ29kZSQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlPjtcclxuICAgIGF2YWlsYWJsZUxhbmd1YWdlcyQ6IE9ic2VydmFibGU8TGFuZ3VhZ2VDb2RlW10+O1xyXG4gICAgb3B0aW9uR3JvdXBDdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBvcHRpb25DdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW107XHJcbiAgICBhdXRvVXBkYXRlVmFyaWFudE5hbWVzID0gdHJ1ZTtcclxuICAgIHJlYWRvbmx5IHVwZGF0ZVBlcm1pc3Npb24gPSBbUGVybWlzc2lvbi5VcGRhdGVDYXRhbG9nLCBQZXJtaXNzaW9uLlVwZGF0ZVByb2R1Y3RdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByb3RlY3RlZCBzZXJ2ZXJDb25maWdTZXJ2aWNlOiBTZXJ2ZXJDb25maWdTZXJ2aWNlLFxyXG4gICAgICAgIHByb3RlY3RlZCBkYXRhU2VydmljZTogRGF0YVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbkdyb3VwJyk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25DdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25Hcm91cHMkID0gdGhpcy5yb3V0ZS5zbmFwc2hvdC5kYXRhLmVudGl0eS5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKHByb2R1Y3Q6IFByb2R1Y3RXaXRoT3B0aW9ucykgPT4gcHJvZHVjdC5vcHRpb25Hcm91cHMpLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe1xyXG4gICAgICAgICAgICBvcHRpb25Hcm91cHM6IG5ldyBVbnR5cGVkRm9ybUFycmF5KFtdKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdXBlci5pbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9uR3JvdXBzKCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBzID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJyk7XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25Hcm91cHMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbnMob3B0aW9uR3JvdXA6IFVudHlwZWRGb3JtR3JvdXApOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBvcHRpb25Hcm91cC5nZXQoJ29wdGlvbnMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbnMgYXMgVW50eXBlZEZvcm1BcnJheSkuY29udHJvbHMgYXMgVW50eXBlZEZvcm1Hcm91cFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGV0YWlsRm9ybS5pbnZhbGlkIHx8IHRoaXMuZGV0YWlsRm9ybS5wcmlzdGluZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXHJcbiAgICAgICAgY29uc3QgJHByb2R1Y3QgPSB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QuZ2V0UHJvZHVjdCh0aGlzLmlkKS5tYXBTaW5nbGUoZGF0YSA9PiBkYXRhLnByb2R1Y3QhKTtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkLCAkcHJvZHVjdClcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxyXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFt7IG9wdGlvbkdyb3VwcyB9LCBsYW5ndWFnZUNvZGUsIHByb2R1Y3RdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlT3BlcmF0aW9uczogQXJyYXk8T2JzZXJ2YWJsZTxhbnk+PiA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXBGb3JtIG9mIHRoaXMuZ2V0T3B0aW9uR3JvdXBzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXBFbnRpdHkgPSBvcHRpb25Hcm91cHMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZyA9PiBvZy5pZCA9PT0gb3B0aW9uR3JvdXBGb3JtLnZhbHVlLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cEVudGl0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRW50aXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cEZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LnVwZGF0ZVByb2R1Y3RPcHRpb25Hcm91cChpbnB1dCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Gb3JtIG9mIHRoaXMuZ2V0T3B0aW9ucyhvcHRpb25Hcm91cEZvcm0pKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uRm9ybS5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwID0gb3B0aW9uR3JvdXBzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8ub3B0aW9ucy5maW5kKG8gPT4gby5pZCA9PT0gb3B0aW9uRm9ybS52YWx1ZS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5nZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Gb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnByb2R1Y3REZXRhaWxTZXJ2aWNlLnVwZGF0ZVByb2R1Y3RPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAuLi5pbnB1dCwgYXV0b1VwZGF0ZTogdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvZHVjdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4odXBkYXRlT3BlcmF0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsRm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ1Byb2R1Y3RPcHRpb25Hcm91cCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICBvcHRpb25Hcm91cDogUHJvZHVjdE9wdGlvbkdyb3VwRnJhZ21lbnQsXHJcbiAgICAgICAgb3B0aW9uR3JvdXBGb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogb3B0aW9uR3JvdXBGb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uR3JvdXAubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaW5wdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uKFxyXG4gICAgICAgIG9wdGlvbjogUHJvZHVjdE9wdGlvbkZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCB7XHJcbiAgICAgICAgY29uc3QgaW5wdXQgPSBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcclxuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBvcHRpb24sXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkZvcm1Hcm91cC52YWx1ZSxcclxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMub3B0aW9uQ3VzdG9tRmllbGRzLFxyXG4gICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zLCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGdyb3Vwc0Zvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKSBhcyBVbnR5cGVkRm9ybUFycmF5O1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXAgb2YgZW50aXR5Lm9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICBjb25zdCBncm91cFRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbkdyb3VwLCBsYW5ndWFnZUNvZGUpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBGb3JtID0gdGhpcy5zZXRPcHRpb25Hcm91cEZvcm0ob3B0aW9uR3JvdXAsIGdyb3Vwc0Zvcm0sIGdyb3VwVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcywgZ3JvdXBGb3JtLCBvcHRpb25Hcm91cCwgZ3JvdXBUcmFuc2xhdGlvbik7XHJcblxyXG4gICAgICAgICAgICBsZXQgb3B0aW9uc0Zvcm0gPSBncm91cEZvcm0uZ2V0KCdvcHRpb25zJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICAgICAgaWYgKCFvcHRpb25zRm9ybSkge1xyXG4gICAgICAgICAgICAgICAgb3B0aW9uc0Zvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKTtcclxuICAgICAgICAgICAgICAgIGdyb3VwRm9ybS5hZGRDb250cm9sKCdvcHRpb25zJywgb3B0aW9uc0Zvcm0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbkdyb3VwLm9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvblRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKG9wdGlvbiwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkZvcm0gPSB0aGlzLnNldE9wdGlvbkZvcm0ob3B0aW9uLCBvcHRpb25zRm9ybSwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRzRm9ybSh0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcywgb3B0aW9uRm9ybSwgb3B0aW9uLCBvcHRpb25UcmFuc2xhdGlvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldEN1c3RvbUZpZWxkc0Zvcm08XHJcbiAgICAgICAgVCBleHRlbmRzIFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF0gfCBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICA+KFxyXG4gICAgICAgIGN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXSxcclxuICAgICAgICBmb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgZW50aXR5OiBULFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8VD4sXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoY3VzdG9tRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IGZvcm1Hcm91cC5nZXQoWydjdXN0b21GaWVsZHMnXSk7XHJcbiAgICAgICAgICAgIGlmICghY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoXHJcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzLnJlZHVjZSgoaGFzaCwgZmllbGQpID0+ICh7IC4uLmhhc2gsIFtmaWVsZC5uYW1lXTogJycgfSksIHt9KSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBmb3JtR3JvdXAuYWRkQ29udHJvbCgnY3VzdG9tRmllbGRzJywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoY3VzdG9tRmllbGRzLCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLCBlbnRpdHksIGN1cnJlbnRUcmFuc2xhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRPcHRpb25Hcm91cEZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdLFxyXG4gICAgICAgIGdyb3Vwc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdPixcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0ge1xyXG4gICAgICAgICAgICBpZDogZW50aXR5LmlkLFxyXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IGVudGl0eS5jcmVhdGVkQXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRBdDogZW50aXR5LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgY29kZTogZW50aXR5LmNvZGUsXHJcbiAgICAgICAgICAgIG5hbWU6IGN1cnJlbnRUcmFuc2xhdGlvbj8ubmFtZSA/PyAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCBncm91cEZvcm0gPSBncm91cHNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAoZ3JvdXBGb3JtKSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnbmFtZScpPy5zZXRWYWx1ZShncm91cC5uYW1lKTtcclxuICAgICAgICAgICAgZ3JvdXBGb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xyXG4gICAgICAgICAgICBncm91cHNGb3JtLnB1c2goZ3JvdXBGb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGdyb3VwRm9ybTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uRm9ybShcclxuICAgICAgICBlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXSxcclxuICAgICAgICBvcHRpb25zRm9ybTogVW50eXBlZEZvcm1BcnJheSxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ11bMF1bJ29wdGlvbnMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgb3B0aW9uRm9ybSA9IG9wdGlvbnNGb3JtLmNvbnRyb2xzLmZpbmQoY29udHJvbCA9PiBjb250cm9sLnZhbHVlLmlkID09PSBlbnRpdHkuaWQpIGFzXHJcbiAgICAgICAgICAgIHwgVW50eXBlZEZvcm1Hcm91cFxyXG4gICAgICAgICAgICB8IHVuZGVmaW5lZDtcclxuICAgICAgICBpZiAob3B0aW9uRm9ybSkge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnaWQnKT8uc2V0VmFsdWUoZ3JvdXAuaWQpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY29kZScpPy5zZXRWYWx1ZShncm91cC5jb2RlKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCdjcmVhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAuY3JlYXRlZEF0KTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ3VwZGF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC51cGRhdGVkQXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgb3B0aW9uc0Zvcm0ucHVzaChvcHRpb25Gb3JtKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbkZvcm07XHJcbiAgICB9XHJcbn1cclxuIiwiPHZkci1wYWdlLWhlYWRlcj5cclxuICAgIDx2ZHItcGFnZS10aXRsZT48L3Zkci1wYWdlLXRpdGxlPlxyXG4gICAgPHZkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj57eyAnY2F0YWxvZy5wYWdlLWRlc2NyaXB0aW9uLW9wdGlvbnMtZWRpdG9yJyB8IHRyYW5zbGF0ZSB9fTwvdmRyLXBhZ2UtaGVhZGVyLWRlc2NyaXB0aW9uPlxyXG48L3Zkci1wYWdlLWhlYWRlcj5cclxuPHZkci1wYWdlLWJvZHk+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgICAgICA8dmRyLWFiLWxlZnQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICAgIChsYW5ndWFnZUNvZGVDaGFuZ2UpPVwic2V0TGFuZ3VhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgICAgICA8dmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1yLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiYXV0by11cGRhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiYXV0b1VwZGF0ZVZhcmlhbnROYW1lc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsPnt7ICdjYXRhbG9nLmF1dG8tdXBkYXRlLXByb2R1Y3QtdmFyaWFudC1uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xyLWNoZWNrYm94LXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJzYXZlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5wcmlzdGluZSB8fCBkZXRhaWxGb3JtLmludmFsaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3sgJ2NvbW1vbi51cGRhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgPC92ZHItYWN0aW9uLWJhcj5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICAgICAgPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCIgKm5nSWY9XCJvcHRpb25Hcm91cHMkIHwgYXN5bmMgYXMgb3B0aW9uR3JvdXBzXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZm9ybUdyb3VwTmFtZT1cIm9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbkdyb3VwIG9mIGdldE9wdGlvbkdyb3VwcygpOyBpbmRleCBhcyBpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZm9ybUFycmF5TmFtZV09XCJpXCJcclxuICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwib3B0aW9uR3JvdXAudmFsdWUuY29kZVwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvIFtlbnRpdHldPVwib3B0aW9uR3JvdXAudmFsdWVcIj48L3Zkci1wYWdlLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cIiduYW1lLScgKyBpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cImNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInY29kZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUdyb3VwTmFtZT1cImN1c3RvbUZpZWxkc1wiICpuZ0lmPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJQcm9kdWN0T3B0aW9uR3JvdXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJvcHRpb25Hcm91cEN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkdyb3VwLmdldCgnY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWRhdGEtdGFibGUtMlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZD1cImVkaXQtb3B0aW9ucy1saXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJnZXRPcHRpb25zKG9wdGlvbkdyb3VwKSBhcyBvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnY29kZScpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cIm9wdGlvbkN1c3RvbUZpZWxkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtYm9keT5cclxuIl19
|
|
202
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FPYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQzFCLG9CQUEwQyxFQUMxQyxXQUErQixFQUMvQixjQUFpQyxFQUNqQyxtQkFBd0M7UUFFaEQsS0FBSyxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFUN0MsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFDckIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDMUIseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFzQjtRQUMxQyxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDL0IsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ2pDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFacEQsMkJBQXNCLEdBQUcsSUFBSSxDQUFDO1FBQzlCLHVCQUFrQixHQUF5RSxFQUFFLENBQUM7UUFDckYscUJBQWdCLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQWE3RSxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDL0UsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRUQsUUFBUTtRQUNKLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3JELEdBQUcsQ0FBQyxDQUFDLE9BQTJCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsRUFDMUQsR0FBRyxDQUFDLENBQUMsWUFBZ0QsRUFBRSxFQUFFO1lBQ3JELEtBQUssTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFO2dCQUM5QixJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHO29CQUNoQyxXQUFXLEVBQUUsQ0FBQztvQkFDZCxZQUFZLEVBQUUsRUFBRTtpQkFDbkIsQ0FBQzthQUNMO1FBQ0wsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztZQUNuQyxZQUFZLEVBQUUsSUFBSSxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7U0FDekMsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxlQUFlO1FBQ1gsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDekQsT0FBUSxZQUFpQyxDQUFDLFFBQThCLENBQUM7SUFDN0UsQ0FBQztJQUVELFVBQVUsQ0FBQyxXQUE2QjtRQUNwQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzNDLE9BQVEsT0FBNEIsQ0FBQyxRQUE4QixDQUFDO0lBQ3hFLENBQUM7SUFFRCxJQUFJO1FBQ0EsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRTtZQUNyRCxPQUFPO1NBQ1Y7UUFDRCxvRUFBb0U7UUFDcEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBUSxDQUFDLENBQUM7UUFDL0YsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7YUFDcEQsSUFBSSxDQUNELElBQUksQ0FBQyxDQUFDLENBQUMsRUFDUCxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxFQUFFLEVBQUUsWUFBWSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUU7WUFDbkQsTUFBTSxnQkFBZ0IsR0FBMkIsRUFBRSxDQUFDO1lBQ3BELEtBQUssTUFBTSxlQUFlLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLGVBQWUsQ0FBQyxLQUFLLEVBQUU7b0JBQ3ZCLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FDdkMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUMzQyxDQUFDO29CQUNGLElBQUksaUJBQWlCLEVBQUU7d0JBQ25CLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDcEMsaUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixZQUFZLENBQ2YsQ0FBQzt3QkFDRixnQkFBZ0IsQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUMzRCxDQUFDO3FCQUNMO2lCQUNKO2dCQUVELEtBQUssTUFBTSxVQUFVLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRTtvQkFDdkQsSUFBSSxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUNsQixNQUFNLFdBQVcsR0FBRyxZQUFZOzZCQUMzQixJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDOzRCQUMvQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3RELElBQUksV0FBVyxFQUFFOzRCQUNiLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FDL0IsV0FBVyxFQUNYLFVBQVUsRUFDVixZQUFZLENBQ2YsQ0FBQzs0QkFDRixnQkFBZ0IsQ0FBQyxJQUFJLENBQ2pCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsQ0FDekMsRUFBRSxHQUFHLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixFQUFFLEVBQ3JELE9BQU8sRUFDUCxZQUFZLENBQ2YsQ0FDSixDQUFDO3lCQUNMO3FCQUNKO2lCQUNKO2FBQ0o7WUFDRCxPQUFPLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxDQUNMO2FBQ0EsU0FBUyxDQUNOLEdBQUcsRUFBRTtZQUNELElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFO2dCQUNoRSxNQUFNLEVBQUUsb0JBQW9CO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUMsRUFDRCxHQUFHLENBQUMsRUFBRTtZQUNGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLEVBQUU7Z0JBQzVELE1BQU0sRUFBRSxvQkFBb0I7YUFDL0IsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUNKLENBQUM7SUFDVixDQUFDO0lBRU8scUJBQXFCLENBQ3pCLFdBQXVDLEVBQ3ZDLG9CQUFzQyxFQUN0QyxZQUEwQjtRQUUxQixNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQztZQUNwQyxZQUFZLEVBQUUsV0FBVztZQUN6QixhQUFhLEVBQUUsb0JBQW9CLENBQUMsS0FBSztZQUN6QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1lBQy9DLFlBQVk7WUFDWixrQkFBa0IsRUFBRTtnQkFDaEIsWUFBWTtnQkFDWixJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFO2FBQy9CO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVPLGdCQUFnQixDQUNwQixNQUE2QixFQUM3QixlQUFpQyxFQUNqQyxZQUEwQjtRQUUxQixNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQztZQUNwQyxZQUFZLEVBQUUsTUFBTTtZQUNwQixhQUFhLEVBQUUsZUFBZSxDQUFDLEtBQUs7WUFDcEMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGtCQUFrQjtZQUMxQyxZQUFZO1lBQ1osa0JBQWtCLEVBQUU7Z0JBQ2hCLFlBQVk7Z0JBQ1osSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLElBQUksRUFBRTthQUMxQjtTQUNKLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFUyxhQUFhLENBQUMsTUFBMEIsRUFBRSxZQUEwQjtRQUMxRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQXFCLENBQUM7UUFDM0UsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO1lBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsZUFBZSxDQUFDLFdBQVcsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUVwRSxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRWpHLElBQUksV0FBVyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFxQixDQUFDO1lBQy9ELElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsV0FBVyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxTQUFTLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxXQUFXLENBQUMsQ0FBQzthQUNoRDtZQUNELEtBQUssTUFBTSxNQUFNLElBQUksV0FBVyxDQUFDLE9BQU8sRUFBRTtnQkFDdEMsTUFBTSxpQkFBaUIsR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztnQkFFOUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUM7YUFDNUY7U0FDSjtJQUNMLENBQUM7SUFFUyxtQkFBbUIsQ0FHekIsWUFBaUMsRUFDakMsU0FBMkIsRUFDM0IsTUFBUyxFQUNULGtCQUFxQztRQUVyQyxJQUFJLFlBQVksQ0FBQyxNQUFNLEVBQUU7WUFDckIsSUFBSSxzQkFBc0IsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztZQUM3RCxJQUFJLENBQUMsc0JBQXNCLEVBQUU7Z0JBQ3pCLHNCQUFzQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUMzQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQzVFLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLFVBQVUsQ0FBQyxjQUFjLEVBQUUsc0JBQXNCLENBQUMsQ0FBQzthQUNoRTtZQUNELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLENBQUM7U0FDbkc7SUFDTCxDQUFDO0lBRVMsa0JBQWtCLENBQ3hCLE1BQTZDLEVBQzdDLFVBQTRCLEVBQzVCLGtCQUF5RTtRQUV6RSxNQUFNLEtBQUssR0FBRztZQUNWLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNiLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxrQkFBa0IsRUFBRSxJQUFJLElBQUksRUFBRTtTQUN2QyxDQUFDO1FBQ0YsSUFBSSxTQUFTLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSyxNQUFNLENBQUMsRUFBRSxDQUVuRSxDQUFDO1FBQ2hCLElBQUksU0FBUyxFQUFFO1lBQ1gsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ3hDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3RELFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN6RDthQUFNO1lBQ0gsU0FBUyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDOUI7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRVMsYUFBYSxDQUNuQixNQUEyRCxFQUMzRCxXQUE2QixFQUM3QixrQkFBdUY7UUFFdkYsTUFBTSxLQUFLLEdBQUc7WUFDVixFQUFFLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDYixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxJQUFJLEVBQUU7U0FDdkMsQ0FBQztRQUNGLElBQUksVUFBVSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLEVBQUUsQ0FFckUsQ0FBQztRQUNoQixJQUFJLFVBQVUsRUFBRTtZQUNaLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsVUFBVSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdDLFVBQVUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDMUQ7YUFBTTtZQUNILFVBQVUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMzQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQzs4R0EvUFEsNkJBQTZCO2tHQUE3Qiw2QkFBNkIseUZDbEMxQyw4OE9Bc0lBOzsyRkRwR2EsNkJBQTZCO2tCQU56QyxTQUFTOytCQUNJLDRCQUE0QixtQkFHckIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVW50eXBlZEZvcm1BcnJheSwgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xyXG5pbXBvcnQge1xyXG4gICAgQmFzZURldGFpbENvbXBvbmVudCxcclxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXHJcbiAgICBDdXN0b21GaWVsZENvbmZpZyxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgZmluZFRyYW5zbGF0aW9uLFxyXG4gICAgR2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnksXHJcbiAgICBMYW5ndWFnZUNvZGUsXHJcbiAgICBOb3RpZmljYXRpb25TZXJ2aWNlLFxyXG4gICAgUGVybWlzc2lvbixcclxuICAgIFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgIFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgIFRyYW5zbGF0aW9uT2YsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uR3JvdXBJbnB1dCxcclxuICAgIFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dCxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgdGFrZSwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHsgUHJvZHVjdERldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9wcm92aWRlcnMvcHJvZHVjdC1kZXRhaWwvcHJvZHVjdC1kZXRhaWwuc2VydmljZSc7XHJcblxyXG50eXBlIFByb2R1Y3RXaXRoT3B0aW9ucyA9IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Zkci1wcm9kdWN0LW9wdGlvbnMtZWRpdG9yJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUHJvZHVjdE9wdGlvbnNFZGl0b3JDb21wb25lbnQgZXh0ZW5kcyBCYXNlRGV0YWlsQ29tcG9uZW50PFByb2R1Y3RXaXRoT3B0aW9ucz4gaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgZGV0YWlsRm9ybTogVW50eXBlZEZvcm1Hcm91cDtcclxuICAgIG9wdGlvbkdyb3VwcyQ6IE9ic2VydmFibGU8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXT47XHJcbiAgICBsYW5ndWFnZUNvZGUkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZT47XHJcbiAgICBhdmFpbGFibGVMYW5ndWFnZXMkOiBPYnNlcnZhYmxlPExhbmd1YWdlQ29kZVtdPjtcclxuICAgIG9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgb3B0aW9uQ3VzdG9tRmllbGRzOiBDdXN0b21GaWVsZENvbmZpZ1tdO1xyXG4gICAgYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyA9IHRydWU7XHJcbiAgICBwYWdpbmF0aW9uU2V0dGluZ3M6IHsgW2dyb3VwSWQ6IHN0cmluZ106IHsgY3VycmVudFBhZ2U6IG51bWJlcjsgaXRlbXNQZXJQYWdlOiBudW1iZXIgfSB9ID0ge307XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVQcm9kdWN0XTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxyXG4gICAgICAgIHByb3RlY3RlZCByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcm90ZWN0ZWQgc2VydmVyQ29uZmlnU2VydmljZTogU2VydmVyQ29uZmlnU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvZHVjdERldGFpbFNlcnZpY2U6IFByb2R1Y3REZXRhaWxTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihyb3V0ZSwgcm91dGVyLCBzZXJ2ZXJDb25maWdTZXJ2aWNlLCBkYXRhU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb25Hcm91cCcpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uQ3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnUHJvZHVjdE9wdGlvbicpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMub3B0aW9uR3JvdXBzJCA9IHRoaXMucm91dGUuc25hcHNob3QuZGF0YS5lbnRpdHkucGlwZShcclxuICAgICAgICAgICAgbWFwKChwcm9kdWN0OiBQcm9kdWN0V2l0aE9wdGlvbnMpID0+IHByb2R1Y3Qub3B0aW9uR3JvdXBzKSxcclxuICAgICAgICAgICAgdGFwKChvcHRpb25Hcm91cHM6IFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ10pID0+IHtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2Ygb3B0aW9uR3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wYWdpbmF0aW9uU2V0dGluZ3NbZ3JvdXAuaWRdID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50UGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXNQZXJQYWdlOiAxMCxcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybSA9IG5ldyBVbnR5cGVkRm9ybUdyb3VwKHtcclxuICAgICAgICAgICAgb3B0aW9uR3JvdXBzOiBuZXcgVW50eXBlZEZvcm1BcnJheShbXSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3VwZXIuaW5pdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE9wdGlvbkdyb3VwcygpOiBVbnR5cGVkRm9ybUdyb3VwW10ge1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwcyA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ29wdGlvbkdyb3VwcycpO1xyXG4gICAgICAgIHJldHVybiAob3B0aW9uR3JvdXBzIGFzIFVudHlwZWRGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIFVudHlwZWRGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25zKG9wdGlvbkdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0gb3B0aW9uR3JvdXAuZ2V0KCdvcHRpb25zJyk7XHJcbiAgICAgICAgcmV0dXJuIChvcHRpb25zIGFzIFVudHlwZWRGb3JtQXJyYXkpLmNvbnRyb2xzIGFzIFVudHlwZWRGb3JtR3JvdXBbXTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRldGFpbEZvcm0uaW52YWxpZCB8fCB0aGlzLmRldGFpbEZvcm0ucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxyXG4gICAgICAgIGNvbnN0ICRwcm9kdWN0ID0gdGhpcy5kYXRhU2VydmljZS5wcm9kdWN0LmdldFByb2R1Y3QodGhpcy5pZCkubWFwU2luZ2xlKGRhdGEgPT4gZGF0YS5wcm9kdWN0ISk7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJCwgJHByb2R1Y3QpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFrZSgxKSxcclxuICAgICAgICAgICAgICAgIG1lcmdlTWFwKChbeyBvcHRpb25Hcm91cHMgfSwgbGFuZ3VhZ2VDb2RlLCBwcm9kdWN0XSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZU9wZXJhdGlvbnM6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwRm9ybSBvZiB0aGlzLmdldE9wdGlvbkdyb3VwcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkdyb3VwRW50aXR5ID0gb3B0aW9uR3JvdXBzLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2cgPT4gb2cuaWQgPT09IG9wdGlvbkdyb3VwRm9ybS52YWx1ZS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBFbnRpdHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbkdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cEVudGl0eSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBGb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC51cGRhdGVQcm9kdWN0T3B0aW9uR3JvdXAoaW5wdXQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uRm9ybSBvZiB0aGlzLmdldE9wdGlvbnMob3B0aW9uR3JvdXBGb3JtKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Hcm91cCA9IG9wdGlvbkdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZChvZyA9PiBvZy5pZCA9PT0gb3B0aW9uR3JvdXBGb3JtLnZhbHVlLmlkKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IG9wdGlvbkZvcm0udmFsdWUuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0RGV0YWlsU2VydmljZS51cGRhdGVQcm9kdWN0T3B0aW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLi4uaW5wdXQsIGF1dG9VcGRhdGU6IHRoaXMuYXV0b1VwZGF0ZVZhcmlhbnROYW1lcyB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbkdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgb3B0aW9uR3JvdXA6IFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkdyb3VwRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkdyb3VwRm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbkdyb3VwLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICBvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgICAgICBvcHRpb25Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uLFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBvcHRpb25Gb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9ucywgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cHNGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIGVudGl0eS5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb25Hcm91cCwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRm9ybSA9IHRoaXMuc2V0T3B0aW9uR3JvdXBGb3JtKG9wdGlvbkdyb3VwLCBncm91cHNGb3JtLCBncm91cFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZHNGb3JtKHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMsIGdyb3VwRm9ybSwgb3B0aW9uR3JvdXAsIGdyb3VwVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNGb3JtID0gZ3JvdXBGb3JtLmdldCgnb3B0aW9ucycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnNGb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cC5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25UcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb24sIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Gb3JtID0gdGhpcy5zZXRPcHRpb25Gb3JtKG9wdGlvbiwgb3B0aW9uc0Zvcm0sIG9wdGlvblRyYW5zbGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25DdXN0b21GaWVsZHMsIG9wdGlvbkZvcm0sIG9wdGlvbiwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRDdXN0b21GaWVsZHNGb3JtPFxyXG4gICAgICAgIFQgZXh0ZW5kcyBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdIHwgUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXVsnb3B0aW9ucyddWzBdLFxyXG4gICAgPihcclxuICAgICAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW10sXHJcbiAgICAgICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGVudGl0eTogVCxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFQ+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBmb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbVZhbHVlRmllbGRzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKGN1c3RvbUZpZWxkcywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCwgZW50aXR5LCBjdXJyZW50VHJhbnNsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uR3JvdXBGb3JtKFxyXG4gICAgICAgIGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXSxcclxuICAgICAgICBncm91cHNGb3JtOiBVbnR5cGVkRm9ybUFycmF5LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZ3JvdXBGb3JtID0gZ3JvdXBzRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGdyb3VwRm9ybSkge1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCdpZCcpPy5zZXRWYWx1ZShncm91cC5pZCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NyZWF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgZ3JvdXBzRm9ybS5wdXNoKGdyb3VwRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncm91cEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbkZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICAgICAgb3B0aW9uc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGlkOiBlbnRpdHkuaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZW50aXR5LmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBlbnRpdHkudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICBjb2RlOiBlbnRpdHkuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG9wdGlvbkZvcm0gPSBvcHRpb25zRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNGb3JtLnB1c2gob3B0aW9uRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25Gb3JtO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1oZWFkZXI+XHJcbiAgICA8dmRyLXBhZ2UtdGl0bGU+PC92ZHItcGFnZS10aXRsZT5cclxuICAgIDx2ZHItcGFnZS1oZWFkZXItZGVzY3JpcHRpb24+e3sgJ2NhdGFsb2cucGFnZS1kZXNjcmlwdGlvbi1vcHRpb25zLWVkaXRvcicgfCB0cmFuc2xhdGUgfX08L3Zkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj5cclxuPC92ZHItcGFnZS1oZWFkZXI+XHJcbjx2ZHItcGFnZS1ib2R5PlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0ucHJpc3RpbmUgfHwgZGV0YWlsRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwib3B0aW9uR3JvdXBzJCB8IGFzeW5jIGFzIG9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvcHRpb25Hcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBnZXRPcHRpb25Hcm91cHMoKTsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1BcnJheU5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbkdyb3VwLnZhbHVlLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cIm9wdGlvbkdyb3VwLnZhbHVlXCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInbmFtZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvZGUtJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIiAqbmdJZj1cIm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvbkdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcHRpb25Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlZGl0LW9wdGlvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3B0aW9ucyhvcHRpb25Hcm91cCkgYXMgb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5pdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnaW5hdGlvblNldHRpbmdzW29wdGlvbkdyb3VwLnZhbHVlLmlkXT8uY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdLmN1cnJlbnRQYWdlID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5pZCB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY3JlYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLmNyZWF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi51cGRhdGVkLWF0JyB8IHRyYW5zbGF0ZVwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUudXBkYXRlZEF0IHwgbG9jYWxlRGF0ZSA6ICdzaG9ydCcgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgW29wdGlvbmFsXT1cImZhbHNlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCduYW1lJylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnY29kZScpXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlYWRpbmddPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQnlEZWZhdWx0XT1cIm9wdGlvbkN1c3RvbUZpZWxkcy5sZW5ndGggPT09IDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uQ3VzdG9tRmllbGRzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWRhdGEtdGFibGUtMj5cclxuICAgICAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZm9ybT5cclxuICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbjwvdmRyLXBhZ2UtYm9keT5cclxuIl19
|