@vendure/admin-ui 3.1.3 → 3.1.5
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/core/common/generated-types.d.ts +1 -0
- package/core/common/version.d.ts +1 -1
- package/core/extension/register-route-component.d.ts +1 -1
- package/core/shared/components/data-table-2/data-table2.component.d.ts +2 -1
- package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +1 -1
- package/esm2022/catalog/components/collection-contents/collection-contents.component.mjs +1 -1
- package/esm2022/catalog/components/facet-list/facet-list.component.mjs +1 -1
- package/esm2022/catalog/components/product-list/product-list.component.mjs +1 -1
- package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs +3 -3
- package/esm2022/catalog/components/product-variant-list/product-variant-list.component.mjs +1 -1
- package/esm2022/catalog/components/product-variants-editor/product-variants-editor.component.mjs +1 -1
- package/esm2022/core/common/generated-types.mjs +1 -1
- package/esm2022/core/common/version.mjs +2 -2
- package/esm2022/core/core.module.mjs +8 -6
- package/esm2022/core/shared/components/data-table-2/data-table2.component.mjs +9 -9
- package/esm2022/customer/components/customer-detail/customer-detail.component.mjs +1 -1
- package/esm2022/customer/components/customer-group-list/customer-group-list.component.mjs +1 -1
- package/esm2022/customer/components/customer-group-member-list/customer-group-member-list.component.mjs +1 -1
- package/esm2022/customer/components/customer-list/customer-list.component.mjs +1 -1
- package/esm2022/dashboard/widgets/latest-orders-widget/latest-orders-widget.component.mjs +1 -1
- package/esm2022/marketing/components/promotion-list/promotion-list.component.mjs +1 -1
- package/esm2022/order/components/order-editor/order-editor.component.mjs +1 -1
- package/esm2022/order/components/order-list/order-list.component.mjs +1 -1
- package/esm2022/order/components/refund-order-dialog/refund-order-dialog.component.mjs +1 -1
- package/esm2022/settings/components/administrator-list/administrator-list.component.mjs +1 -1
- package/esm2022/settings/components/channel-list/channel-list.component.mjs +1 -1
- package/esm2022/settings/components/country-list/country-list.component.mjs +1 -1
- package/esm2022/settings/components/payment-method-list/payment-method-list.component.mjs +1 -1
- package/esm2022/settings/components/role-list/role-list.component.mjs +1 -1
- package/esm2022/settings/components/seller-list/seller-list.component.mjs +1 -1
- package/esm2022/settings/components/shipping-method-list/shipping-method-list.component.mjs +1 -1
- package/esm2022/settings/components/stock-location-list/stock-location-list.component.mjs +1 -1
- package/esm2022/settings/components/tax-category-list/tax-category-list.component.mjs +1 -1
- package/esm2022/settings/components/tax-rate-list/tax-rate-list.component.mjs +1 -1
- package/esm2022/settings/components/zone-list/zone-list.component.mjs +1 -1
- package/esm2022/settings/components/zone-member-list/zone-member-list.component.mjs +1 -1
- package/esm2022/system/components/job-list/job-list.component.mjs +1 -1
- package/fesm2022/vendure-admin-ui-catalog.mjs +7 -7
- package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-core.mjs +16 -14
- package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-customer.mjs +4 -4
- package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-dashboard.mjs +1 -1
- package/fesm2022/vendure-admin-ui-dashboard.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs +1 -1
- package/fesm2022/vendure-admin-ui-marketing.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-order.mjs +3 -3
- package/fesm2022/vendure-admin-ui-order.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-settings.mjs +12 -12
- package/fesm2022/vendure-admin-ui-settings.mjs.map +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs +1 -1
- package/fesm2022/vendure-admin-ui-system.mjs.map +1 -1
- package/package.json +8 -8
|
@@ -831,6 +831,7 @@ export type CreateProductOptionInput = {
|
|
|
831
831
|
export type CreateProductVariantInput = {
|
|
832
832
|
assetIds?: InputMaybe<Array<Scalars['ID']['input']>>;
|
|
833
833
|
customFields?: InputMaybe<Scalars['JSON']['input']>;
|
|
834
|
+
enabled?: InputMaybe<Scalars['Boolean']['input']>;
|
|
834
835
|
facetValueIds?: InputMaybe<Array<Scalars['ID']['input']>>;
|
|
835
836
|
featuredAssetId?: InputMaybe<Scalars['ID']['input']>;
|
|
836
837
|
optionIds?: InputMaybe<Array<Scalars['ID']['input']>>;
|
package/core/common/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const ADMIN_UI_VERSION = "3.1.
|
|
1
|
+
export declare const ADMIN_UI_VERSION = "3.1.5";
|
|
@@ -92,7 +92,7 @@ export declare function registerRouteComponent<Component extends any | BaseDetai
|
|
|
92
92
|
component: typeof AngularRouteComponent;
|
|
93
93
|
title?: string | Type<import("@angular/router").Resolve<string>> | ResolveFn<string> | undefined;
|
|
94
94
|
path: string;
|
|
95
|
-
pathMatch?: "
|
|
95
|
+
pathMatch?: "full" | "prefix" | undefined;
|
|
96
96
|
matcher?: import("@angular/router").UrlMatcher | undefined;
|
|
97
97
|
loadComponent?: (() => Type<unknown> | Observable<Type<unknown> | import("@angular/router").DefaultExport<Type<unknown>>> | Promise<Type<unknown> | import("@angular/router").DefaultExport<Type<unknown>>>) | undefined;
|
|
98
98
|
redirectTo?: string | undefined;
|
|
@@ -85,6 +85,7 @@ export declare class DataTable2Component<T> implements AfterContentInit, OnChang
|
|
|
85
85
|
emptyStateLabel: string;
|
|
86
86
|
filters: DataTableFilterCollection;
|
|
87
87
|
activeIndex: number;
|
|
88
|
+
trackByPath: string;
|
|
88
89
|
pageChange: EventEmitter<number>;
|
|
89
90
|
itemsPerPageChange: EventEmitter<number>;
|
|
90
91
|
visibleColumnsChange: EventEmitter<DataTable2ColumnComponent<T>[]>;
|
|
@@ -130,5 +131,5 @@ export declare class DataTable2Component<T> implements AfterContentInit, OnChang
|
|
|
130
131
|
onToggleAllClick(): void;
|
|
131
132
|
onRowClick(item: T, event: MouseEvent): void;
|
|
132
133
|
static ɵfac: i0.ɵɵFactoryDeclaration<DataTable2Component<any>, never>;
|
|
133
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<DataTable2Component<any>, "vdr-data-table-2", never, { "id": { "alias": "id"; "required": false; }; "items": { "alias": "items"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "totalItems": { "alias": "totalItems"; "required": false; }; "emptyStateLabel": { "alias": "emptyStateLabel"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "activeIndex": { "alias": "activeIndex"; "required": false; }; }, { "pageChange": "pageChange"; "itemsPerPageChange": "itemsPerPageChange"; "visibleColumnsChange": "visibleColumnsChange"; }, ["searchComponent", "bulkActionMenuComponent", "customSearchTemplate", "columns", "customFieldColumns", "templateRefs"], ["vdr-bulk-action-menu"], false, never>;
|
|
134
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DataTable2Component<any>, "vdr-data-table-2", never, { "id": { "alias": "id"; "required": false; }; "items": { "alias": "items"; "required": false; }; "itemsPerPage": { "alias": "itemsPerPage"; "required": false; }; "currentPage": { "alias": "currentPage"; "required": false; }; "totalItems": { "alias": "totalItems"; "required": false; }; "emptyStateLabel": { "alias": "emptyStateLabel"; "required": false; }; "filters": { "alias": "filters"; "required": false; }; "activeIndex": { "alias": "activeIndex"; "required": false; }; "trackByPath": { "alias": "trackByPath"; "required": false; }; }, { "pageChange": "pageChange"; "itemsPerPageChange": "itemsPerPageChange"; "visibleColumnsChange": "visibleColumnsChange"; }, ["searchComponent", "bulkActionMenuComponent", "customSearchTemplate", "columns", "customFieldColumns", "templateRefs"], ["vdr-bulk-action-menu"], false, never>;
|
|
134
135
|
}
|
|
@@ -13,7 +13,7 @@ import { SelectFormInputComponent } from './select-form-input/select-form-input.
|
|
|
13
13
|
import { StructFormInputComponent } from './struct-form-input/struct-form-input.component';
|
|
14
14
|
import { TextFormInputComponent } from './text-form-input/text-form-input.component';
|
|
15
15
|
import { TextareaFormInputComponent } from './textarea-form-input/textarea-form-input.component';
|
|
16
|
-
export declare const defaultFormInputs: (typeof
|
|
16
|
+
export declare const defaultFormInputs: (typeof ProductSelectorFormInputComponent | typeof CustomerGroupFormInputComponent | typeof TextFormInputComponent | typeof PasswordFormInputComponent | typeof DateFormInputComponent | typeof CurrencyFormInputComponent | typeof SelectFormInputComponent | typeof RelationFormInputComponent | typeof TextareaFormInputComponent | typeof JsonEditorFormInputComponent | typeof HtmlEditorFormInputComponent | typeof ProductMultiSelectorFormInputComponent | typeof CombinationModeFormInputComponent | typeof StructFormInputComponent)[];
|
|
17
17
|
/**
|
|
18
18
|
* Registers the default form input components.
|
|
19
19
|
*/
|
|
@@ -102,7 +102,7 @@ export class CollectionContentsComponent {
|
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
104
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CollectionContentsComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: CollectionContentsComponent, selector: "vdr-collection-contents", inputs: { collectionId: "collectionId", parentId: "parentId", inheritFilters: "inheritFilters", updatedFilters: "updatedFilters", previewUpdatedFilters: "previewUpdatedFilters" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-wrapper\">\r\n <div class=\"progress loop\" [class.visible]=\"isLoading\"></div>\r\n <div class=\"header-title-row\">\r\n <ng-container\r\n *ngTemplateOutlet=\"headerTemplate; context: { $implicit: contentsTotalItems$ | async }\"\r\n ></ng-container>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"collection-contents\"\r\n [class.loading]=\"isLoading\"\r\n [items]=\"contents$ | async\"\r\n [itemsPerPage]=\"contentsItemsPerPage$ | async\"\r\n [totalItems]=\"contentsTotalItems$ | async\"\r\n [currentPage]=\"contentsCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/catalog/products', variant.productId]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep table{margin-top:-1px}vdr-data-table{opacity:1;transition:opacity .3s}vdr-data-table.loading{opacity:.5}.table-wrapper{position:relative}.progress{position:absolute;top:0;left:0;overflow:hidden;height:6px;opacity:0;transition:opacity .1s}.progress.visible{opacity:1}.sku{color:var(--color-text-200)}\n"], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
105
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: CollectionContentsComponent, selector: "vdr-collection-contents", inputs: { collectionId: "collectionId", parentId: "parentId", inheritFilters: "inheritFilters", updatedFilters: "updatedFilters", previewUpdatedFilters: "previewUpdatedFilters" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: TemplateRef, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-wrapper\">\r\n <div class=\"progress loop\" [class.visible]=\"isLoading\"></div>\r\n <div class=\"header-title-row\">\r\n <ng-container\r\n *ngTemplateOutlet=\"headerTemplate; context: { $implicit: contentsTotalItems$ | async }\"\r\n ></ng-container>\r\n </div>\r\n <vdr-data-table-2\r\n id=\"collection-contents\"\r\n [class.loading]=\"isLoading\"\r\n [items]=\"contents$ | async\"\r\n [itemsPerPage]=\"contentsItemsPerPage$ | async\"\r\n [totalItems]=\"contentsTotalItems$ | async\"\r\n [currentPage]=\"contentsCurrentPage$ | async\"\r\n (pageChange)=\"setContentsPageNumber($event)\"\r\n (itemsPerPageChange)=\"setContentsItemsPerPage($event)\"\r\n >\r\n <vdr-dt2-search\r\n [searchTermControl]=\"filterTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.created-at' | translate\" id=\"created-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.updated-at' | translate\" id=\"updated-at\" [hiddenByDefault]=\"true\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['/catalog/products', variant.productId]\"\r\n ><span>{{ variant.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.sku' | translate\" id=\"sku\" [optional]=\"false\">\r\n <ng-template let-variant=\"item\">\r\n {{ variant.sku }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n </vdr-data-table-2>\r\n</div>\r\n", styles: [":host{display:block}:host ::ng-deep table{margin-top:-1px}vdr-data-table{opacity:1;transition:opacity .3s}vdr-data-table.loading{opacity:.5}.table-wrapper{position:relative}.progress{position:absolute;top:0;left:0;overflow:hidden;height:6px;opacity:0;transition:opacity .1s}.progress.visible{opacity:1}.sku{color:var(--color-text-200)}\n"], dependencies: [{ kind: "directive", type: i3.ClrIconCustomTag, selector: "clr-icon" }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i2.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex", "trackByPath"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i2.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i2.LocaleDatePipe, name: "localeDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
106
106
|
}
|
|
107
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: CollectionContentsComponent, decorators: [{
|
|
108
108
|
type: Component,
|
|
@@ -83,7 +83,7 @@ export class FacetListComponent extends TypedBaseListComponent {
|
|
|
83
83
|
this.dataService.client.setContentLanguage(code).subscribe();
|
|
84
84
|
}
|
|
85
85
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FacetListComponent, deps: [{ token: i1.DataService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
86
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FacetListComponent, selector: "vdr-facet-list", usesInheritance: true, ngImport: i0, template: "<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]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-facet' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"facet-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-facet=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', facet.id]\"\r\n ><span>{{ facet.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-facet=\"item\">\r\n <vdr-chip *ngIf=\"facet.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!facet.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.values' | translate\" id=\"values\">\r\n <ng-template let-facet=\"item\">\r\n <div class=\"facet-values-list\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let value of facet.valueList.items | slice : 0 : displayLimit[facet.id] || 3\"\r\n [facetValue]=\"value\"\r\n [removable]=\"false\"\r\n [displayFacetName]=\"false\"\r\n ></vdr-facet-value-chip>\r\n <vdr-chip *ngIf=\"displayLimit[facet.id] < facet.valueList.totalItems && (displayLimit[facet.id] || 0) === facet.valueList.items.length\">\r\n ... + {{ facet.valueList.totalItems - facet.valueList.items.length }}\r\n </vdr-chip>\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"facet.valueList.items.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(facet)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[facet.id] || 0) < facet.valueList.items.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ facet.valueList.totalItems - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".facet-values-list{max-width:500px;display:flex;flex-wrap:wrap;align-items:center;gap:4px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { 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: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarDropdownMenuComponent, selector: "vdr-action-bar-dropdown-menu", inputs: ["alwaysShow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items" }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }] }); }
|
|
86
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: FacetListComponent, selector: "vdr-facet-list", usesInheritance: true, ngImport: i0, template: "<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]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items locationId=\"facet-list\" />\r\n <a\r\n class=\"btn btn-primary\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-facet' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-list\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n locationId=\"facet-list\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'catalog.filter-by-name' | translate\"\r\n ></vdr-dt2-search>\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-facet=\"item\">\r\n {{ facet.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-facet=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', facet.id]\"\r\n ><span>{{ facet.name }}</span>\r\n <clr-icon shape=\"arrow right\"></clr-icon>\r\n </a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.code' | translate\" id=\"code\">\r\n <ng-template let-facet=\"item\">\r\n {{ facet.code }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.visibility' | translate\" id=\"visibility\">\r\n <ng-template let-facet=\"item\">\r\n <vdr-chip *ngIf=\"facet.isPrivate\" colorType=\"warning\">{{\r\n 'common.private' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!facet.isPrivate\" colorType=\"success\">{{\r\n 'common.public' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.values' | translate\" id=\"values\">\r\n <ng-template let-facet=\"item\">\r\n <div class=\"facet-values-list\">\r\n <vdr-facet-value-chip\r\n *ngFor=\"let value of facet.valueList.items | slice : 0 : displayLimit[facet.id] || 3\"\r\n [facetValue]=\"value\"\r\n [removable]=\"false\"\r\n [displayFacetName]=\"false\"\r\n ></vdr-facet-value-chip>\r\n <vdr-chip *ngIf=\"displayLimit[facet.id] < facet.valueList.totalItems && (displayLimit[facet.id] || 0) === facet.valueList.items.length\">\r\n ... + {{ facet.valueList.totalItems - facet.valueList.items.length }}\r\n </vdr-chip>\r\n <button\r\n class=\"button-small\"\r\n *ngIf=\"facet.valueList.items.length > initialLimit\"\r\n (click)=\"toggleDisplayLimit(facet)\"\r\n >\r\n <ng-container *ngIf=\"(displayLimit[facet.id] || 0) < facet.valueList.items.length; else collapse\">\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ facet.valueList.totalItems - initialLimit }}\r\n </ng-container>\r\n <ng-template #collapse>\r\n <clr-icon shape=\"minus\"></clr-icon>\r\n </ng-template>\r\n </button>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column *ngFor=\"let customField of customFields\" [customField]=\"customField\" [sorts]=\"sorts\" />\r\n</vdr-data-table-2>\r\n", styles: [".facet-values-list{max-width:500px;display:flex;flex-wrap:wrap;align-items:center;gap:4px}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { 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: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarDropdownMenuComponent, selector: "vdr-action-bar-dropdown-menu", inputs: ["alwaysShow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.FacetValueChipComponent, selector: "vdr-facet-value-chip", inputs: ["facetValue", "removable", "displayFacetName"], outputs: ["remove"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items" }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex", "trackByPath"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.SlicePipe, name: "slice" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }] }); }
|
|
87
87
|
}
|
|
88
88
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: FacetListComponent, decorators: [{
|
|
89
89
|
type: Component,
|
|
@@ -152,7 +152,7 @@ export class ProductListComponent extends TypedBaseListComponent {
|
|
|
152
152
|
});
|
|
153
153
|
}
|
|
154
154
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProductListComponent, deps: [{ token: i1.DataService }, { token: i1.ModalService }, { token: i1.NotificationService }, { token: i1.JobQueueService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
155
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ProductListComponent, selector: "vdr-products-list", usesInheritance: true, ngImport: i0, template: "<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]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items [locationId]=\"pageLocationId\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary mr-1\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-product' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu [alwaysShow]=\"true\" [locationId]=\"pageLocationId\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\r\n <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"dataTableListId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-product=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-product=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\r\n ><span>{{ product.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-product=\"item\">\r\n <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\" id=\"number-of-variants\">\r\n <ng-template let-product=\"item\">\r\n {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n", styles: [".image-col{width:70px}.image-placeholder{width:50px;height:50px;margin-top:calc(var(--space-unit) * -1);margin-bottom:calc(var(--space-unit) * -1);background-color:var(--color-component-bg-200)}.image-placeholder img{border-radius:var(--border-radius-img)}.image-placeholder .placeholder{text-align:center;color:var(--color-grey-300)}.search-form{display:flex;align-items:center;width:100%}vdr-product-search-input{min-width:300px}@media screen and (max-width: 768px){vdr-product-search-input{min-width:100px}}.search-settings-menu{margin:0 12px}td.disabled{background-color:var(--color-component-bg-200)}.search-index-button{position:relative}.search-index-button vdr-status-badge{right:0;top:0}.run-updates-button{position:relative}.run-updates-button vdr-status-badge{left:10px;top:10px}.edit-button{margin-inline-end:24px}.sku{color:var(--color-text-300)}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { 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: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarDropdownMenuComponent, selector: "vdr-action-bar-dropdown-menu", inputs: ["alwaysShow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items" }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.AssetPreviewPipe, name: "assetPreview" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }] }); }
|
|
155
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ProductListComponent, selector: "vdr-products-list", usesInheritance: true, ngImport: i0, template: "<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]=\"contentLanguage$ | async\"\r\n (languageCodeChange)=\"setLanguage($event)\"\r\n ></vdr-language-selector>\r\n </vdr-ab-left>\r\n <vdr-ab-right>\r\n <vdr-action-bar-items [locationId]=\"pageLocationId\"></vdr-action-bar-items>\r\n <a\r\n class=\"button primary mr-1\"\r\n [routerLink]=\"['./create']\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateProduct']\"\r\n >\r\n <clr-icon shape=\"plus\"></clr-icon>\r\n {{ 'catalog.create-new-product' | translate }}\r\n </a>\r\n <vdr-action-bar-dropdown-menu [alwaysShow]=\"true\" [locationId]=\"pageLocationId\">\r\n <button type=\"button\" vdrDropdownItem (click)=\"rebuildSearchIndex()\">\r\n <clr-icon shape=\"refresh\" class=\"\"></clr-icon>\r\n {{ 'catalog.rebuild-search-index' | translate }}\r\n </button>\r\n </vdr-action-bar-dropdown-menu>\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<vdr-data-table-2\r\n class=\"mt-2\"\r\n [id]=\"dataTableListId\"\r\n [items]=\"items$ | async\"\r\n [itemsPerPage]=\"itemsPerPage$ | async\"\r\n [totalItems]=\"totalItems$ | async\"\r\n [currentPage]=\"currentPage$ | async\"\r\n [filters]=\"filters\"\r\n (pageChange)=\"setPageNumber($event)\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n (visibleColumnsChange)=\"setVisibleColumns($event)\"\r\n>\r\n <vdr-bulk-action-menu\r\n [locationId]=\"dataTableListId\"\r\n [hostComponent]=\"this\"\r\n [selectionManager]=\"selectionManager\"\r\n ></vdr-bulk-action-menu>\r\n <vdr-dt2-search\r\n [searchTermControl]=\"searchTermControl\"\r\n [searchTermPlaceholder]=\"'settings.search-by-product-name-or-sku' | translate\"\r\n />\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [hiddenByDefault]=\"true\" [sort]=\"sorts.get('id')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.id }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.created-at' | translate\" id=\"created-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('createdAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.createdAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column\r\n [heading]=\"'common.updated-at' | translate\" id=\"updated-at\"\r\n [hiddenByDefault]=\"true\"\r\n [sort]=\"sorts.get('updatedAt')\"\r\n >\r\n <ng-template let-product=\"item\">\r\n {{ product.updatedAt | localeDate : 'short' }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.image' | translate\" id=\"image\">\r\n <ng-template let-product=\"item\">\r\n <div class=\"image-placeholder\">\r\n <img\r\n *ngIf=\"product.featuredAsset as asset; else imagePlaceholder\"\r\n [src]=\"asset | assetPreview : 'tiny'\"\r\n />\r\n <ng-template #imagePlaceholder>\r\n <div class=\"placeholder\">\r\n <clr-icon shape=\"image\" size=\"48\"></clr-icon>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.name' | translate\" id=\"name\" [optional]=\"false\" [sort]=\"sorts.get('name')\">\r\n <ng-template let-product=\"item\">\r\n <a class=\"button-ghost\" [routerLink]=\"['./', product.id]\"\r\n ><span>{{ product.name }}</span\r\n ><clr-icon shape=\"arrow right\"\r\n /></a>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.slug' | translate\" id=\"slug\" [sort]=\"sorts.get('slug')\">\r\n <ng-template let-product=\"item\">\r\n {{ product.slug }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'common.enabled' | translate\" id=\"enabled\">\r\n <ng-template let-product=\"item\">\r\n <vdr-chip *ngIf=\"product.enabled\" colorType=\"success\">{{\r\n 'common.enabled' | translate\r\n }}</vdr-chip>\r\n <vdr-chip *ngIf=\"!product.enabled\" colorType=\"warning\">{{\r\n 'common.disabled' | translate\r\n }}</vdr-chip>\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-column [heading]=\"'catalog.number-of-variants' | translate\" id=\"number-of-variants\">\r\n <ng-template let-product=\"item\">\r\n {{ 'catalog.variant-count' | translate : { count: product.variantList?.totalItems } }}\r\n </ng-template>\r\n </vdr-dt2-column>\r\n <vdr-dt2-custom-field-column\r\n *ngFor=\"let customField of customFields\"\r\n [customField]=\"customField\"\r\n [sorts]=\"sorts\"\r\n />\r\n</vdr-data-table-2>\r\n", styles: [".image-col{width:70px}.image-placeholder{width:50px;height:50px;margin-top:calc(var(--space-unit) * -1);margin-bottom:calc(var(--space-unit) * -1);background-color:var(--color-component-bg-200)}.image-placeholder img{border-radius:var(--border-radius-img)}.image-placeholder .placeholder{text-align:center;color:var(--color-grey-300)}.search-form{display:flex;align-items:center;width:100%}vdr-product-search-input{min-width:300px}@media screen and (max-width: 768px){vdr-product-search-input{min-width:100px}}.search-settings-menu{margin:0 12px}td.disabled{background-color:var(--color-component-bg-200)}.search-index-button{position:relative}.search-index-button vdr-status-badge{right:0;top:0}.run-updates-button{position:relative}.run-updates-button vdr-status-badge{left:10px;top:10px}.edit-button{margin-inline-end:24px}.sku{color:var(--color-text-300)}\n"], dependencies: [{ kind: "directive", type: i2.ClrIconCustomTag, selector: "clr-icon" }, { 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: i4.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: i1.ActionBarComponent, selector: "vdr-action-bar" }, { kind: "component", type: i1.ActionBarLeftComponent, selector: "vdr-ab-left", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarRightComponent, selector: "vdr-ab-right", inputs: ["grow"] }, { kind: "component", type: i1.ActionBarDropdownMenuComponent, selector: "vdr-action-bar-dropdown-menu", inputs: ["alwaysShow"] }, { kind: "component", type: i1.ChipComponent, selector: "vdr-chip", inputs: ["icon", "invert", "colorFrom", "colorType"], outputs: ["iconClick"] }, { kind: "component", type: i1.LanguageSelectorComponent, selector: "vdr-language-selector", inputs: ["currentLanguageCode", "availableLanguageCodes", "disabled"], outputs: ["languageCodeChange"] }, { kind: "directive", type: i1.DropdownItemDirective, selector: "[vdrDropdownItem]" }, { kind: "directive", type: i1.IfPermissionsDirective, selector: "[vdrIfPermissions]", inputs: ["vdrIfPermissions", "vdrIfPermissionsElse"] }, { kind: "component", type: i1.ActionBarItemsComponent, selector: "vdr-action-bar-items" }, { kind: "component", type: i1.BulkActionMenuComponent, selector: "vdr-bulk-action-menu", inputs: ["locationId", "selectionManager", "hostComponent"] }, { kind: "component", type: i1.DataTable2Component, selector: "vdr-data-table-2", inputs: ["id", "items", "itemsPerPage", "currentPage", "totalItems", "emptyStateLabel", "filters", "activeIndex", "trackByPath"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i1.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "expand", "heading", "align", "sort", "optional", "hiddenByDefault", "orderable"], exportAs: ["row"] }, { kind: "component", type: i1.DataTable2SearchComponent, selector: "vdr-dt2-search", inputs: ["searchTermControl", "searchTermPlaceholder"] }, { kind: "component", type: i1.DataTableCustomFieldColumnComponent, selector: "vdr-dt2-custom-field-column", inputs: ["customField", "sorts"], exportAs: ["row"] }, { kind: "component", type: i1.PageBlockComponent, selector: "vdr-page-block" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i1.AssetPreviewPipe, name: "assetPreview" }, { kind: "pipe", type: i1.LocaleDatePipe, name: "localeDate" }] }); }
|
|
156
156
|
}
|
|
157
157
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProductListComponent, decorators: [{
|
|
158
158
|
type: Component,
|
package/esm2022/catalog/components/product-options-editor/product-options-editor.component.mjs
CHANGED
|
@@ -198,10 +198,10 @@ export class ProductOptionsEditorComponent extends BaseDetailComponent {
|
|
|
198
198
|
return optionForm;
|
|
199
199
|
}
|
|
200
200
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProductOptionsEditorComponent, deps: [{ token: i1.ActivatedRoute }, { token: i1.Router }, { token: i2.ServerConfigService }, { token: i2.DataService }, { token: i2.PermissionsService }, { token: i3.ProductDetailService }, { token: i4.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i2.NotificationService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
201
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", 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\" id=\"id\" [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\" id=\"created-at\" [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\" id=\"updated-at\" [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\" id=\"name\" [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\" id=\"code\" [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\" id=\"custom-fields\"\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"], outputs: ["readOnlyToggleChange"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select, vdr-currency-input" }, { 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", "visibleColumnsChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "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 }); }
|
|
201
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", 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 [trackByPath]=\"'value.id'\"\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 (itemsPerPageChange)=\"paginationSettings[optionGroup.value.id].itemsPerPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [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\" id=\"created-at\" [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\" id=\"updated-at\" [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\" id=\"name\" [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\" id=\"code\" [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\" id=\"custom-fields\"\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"], outputs: ["readOnlyToggleChange"] }, { kind: "directive", type: i2.FormFieldControlDirective, selector: "input, textarea, select, vdr-currency-input" }, { 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", "trackByPath"], outputs: ["pageChange", "itemsPerPageChange", "visibleColumnsChange"] }, { kind: "component", type: i2.DataTable2ColumnComponent, selector: "vdr-dt2-column", inputs: ["id", "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 }); }
|
|
202
202
|
}
|
|
203
203
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ProductOptionsEditorComponent, decorators: [{
|
|
204
204
|
type: Component,
|
|
205
|
-
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\" id=\"id\" [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\" id=\"created-at\" [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\" id=\"updated-at\" [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\" id=\"name\" [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\" id=\"code\" [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\" id=\"custom-fields\"\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"] }]
|
|
205
|
+
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 [trackByPath]=\"'value.id'\"\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 (itemsPerPageChange)=\"paginationSettings[optionGroup.value.id].itemsPerPage = $event\"\r\n [totalItems]=\"options.length\"\r\n >\r\n <vdr-dt2-column [heading]=\"'common.id' | translate\" id=\"id\" [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\" id=\"created-at\" [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\" id=\"updated-at\" [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\" id=\"name\" [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\" id=\"code\" [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\" id=\"custom-fields\"\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"] }]
|
|
206
206
|
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i1.Router }, { type: i2.ServerConfigService }, { type: i2.DataService }, { type: i2.PermissionsService }, { type: i3.ProductDetailService }, { type: i4.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i2.NotificationService }] });
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN4QyxvQkFBMEMsRUFDMUMsV0FBK0IsRUFDL0IsY0FBaUMsRUFDakMsbUJBQXdDO1FBRWhELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFdB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QyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7OEdBclFRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25DMUMseWlQQXNJQTs7MkZEbkdhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDSSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXBGcmFnbWVudCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUcmFuc2xhdGlvbk9mLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFByb2R1Y3REZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UnO1xyXG5cclxudHlwZSBQcm9kdWN0V2l0aE9wdGlvbnMgPSBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeVsncHJvZHVjdCddPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1vcHRpb25zLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RPcHRpb25zRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxQcm9kdWN0V2l0aE9wdGlvbnM+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGRldGFpbEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICBvcHRpb25Hcm91cHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ10+O1xyXG4gICAgbGFuZ3VhZ2VDb2RlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGVbXT47XHJcbiAgICBvcHRpb25Hcm91cEN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIG9wdGlvbkN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGF1dG9VcGRhdGVWYXJpYW50TmFtZXMgPSB0cnVlO1xyXG4gICAgcGFnaW5hdGlvblNldHRpbmdzOiB7IFtncm91cElkOiBzdHJpbmddOiB7IGN1cnJlbnRQYWdlOiBudW1iZXI7IGl0ZW1zUGVyUGFnZTogbnVtYmVyIH0gfSA9IHt9O1xyXG4gICAgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbiA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlUHJvZHVjdF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlLCBwZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uR3JvdXAnKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwcyQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZW50aXR5LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocHJvZHVjdDogUHJvZHVjdFdpdGhPcHRpb25zKSA9PiBwcm9kdWN0Lm9wdGlvbkdyb3VwcyksXHJcbiAgICAgICAgICAgIHRhcCgob3B0aW9uR3JvdXBzOiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIG9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNldHRpbmdzW2dyb3VwLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZTogMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIG9wdGlvbkdyb3VwczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25Hcm91cHMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcclxuICAgICAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbkdyb3VwcyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9ucyhvcHRpb25Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbkdyb3VwLmdldCgnb3B0aW9ucycpO1xyXG4gICAgICAgIHJldHVybiAob3B0aW9ucyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxGb3JtLmludmFsaWQgfHwgdGhpcy5kZXRhaWxGb3JtLnByaXN0aW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjb25zdCAkcHJvZHVjdCA9IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5nZXRQcm9kdWN0KHRoaXMuaWQpLm1hcFNpbmdsZShkYXRhID0+IGRhdGEucHJvZHVjdCEpO1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQsICRwcm9kdWN0KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3sgb3B0aW9uR3JvdXBzIH0sIGxhbmd1YWdlQ29kZSwgcHJvZHVjdF0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHM6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dFtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Hcm91cEZvcm0gb2YgdGhpcy5nZXRPcHRpb25Hcm91cHMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Hcm91cEVudGl0eSA9IG9wdGlvbkdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBFbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QudXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwKGlucHV0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkZvcm0gb2YgdGhpcy5nZXRPcHRpb25zKG9wdGlvbkdyb3VwRm9ybSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Gb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQob2cgPT4gb2cuaWQgPT09IG9wdGlvbkdyb3VwRm9ybS52YWx1ZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb25Gb3JtLnZhbHVlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQcm9kdWN0T3B0aW9uSW5wdXRzLnB1c2goaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdE9wdGlvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbkdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgb3B0aW9uR3JvdXA6IFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkdyb3VwRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkdyb3VwRm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbkdyb3VwLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICBvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgICAgICBvcHRpb25Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uLFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBvcHRpb25Gb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9ucywgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cHNGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIGVudGl0eS5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb25Hcm91cCwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRm9ybSA9IHRoaXMuc2V0T3B0aW9uR3JvdXBGb3JtKG9wdGlvbkdyb3VwLCBncm91cHNGb3JtLCBncm91cFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZHNGb3JtKHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMsIGdyb3VwRm9ybSwgb3B0aW9uR3JvdXAsIGdyb3VwVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNGb3JtID0gZ3JvdXBGb3JtLmdldCgnb3B0aW9ucycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnNGb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cC5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25UcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb24sIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Gb3JtID0gdGhpcy5zZXRPcHRpb25Gb3JtKG9wdGlvbiwgb3B0aW9uc0Zvcm0sIG9wdGlvblRyYW5zbGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25DdXN0b21GaWVsZHMsIG9wdGlvbkZvcm0sIG9wdGlvbiwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRDdXN0b21GaWVsZHNGb3JtPFxyXG4gICAgICAgIFQgZXh0ZW5kcyBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdIHwgUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXVsnb3B0aW9ucyddWzBdLFxyXG4gICAgPihcclxuICAgICAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW10sXHJcbiAgICAgICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGVudGl0eTogVCxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFQ+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBmb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbVZhbHVlRmllbGRzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKGN1c3RvbUZpZWxkcywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCwgZW50aXR5LCBjdXJyZW50VHJhbnNsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uR3JvdXBGb3JtKFxyXG4gICAgICAgIGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXSxcclxuICAgICAgICBncm91cHNGb3JtOiBVbnR5cGVkRm9ybUFycmF5LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZ3JvdXBGb3JtID0gZ3JvdXBzRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGdyb3VwRm9ybSkge1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCdpZCcpPy5zZXRWYWx1ZShncm91cC5pZCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NyZWF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgZ3JvdXBzRm9ybS5wdXNoKGdyb3VwRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncm91cEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbkZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICAgICAgb3B0aW9uc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGlkOiBlbnRpdHkuaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZW50aXR5LmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBlbnRpdHkudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICBjb2RlOiBlbnRpdHkuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG9wdGlvbkZvcm0gPSBvcHRpb25zRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNGb3JtLnB1c2gob3B0aW9uRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25Gb3JtO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1oZWFkZXI+XHJcbiAgICA8dmRyLXBhZ2UtdGl0bGU+PC92ZHItcGFnZS10aXRsZT5cclxuICAgIDx2ZHItcGFnZS1oZWFkZXItZGVzY3JpcHRpb24+e3sgJ2NhdGFsb2cucGFnZS1kZXNjcmlwdGlvbi1vcHRpb25zLWVkaXRvcicgfCB0cmFuc2xhdGUgfX08L3Zkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj5cclxuPC92ZHItcGFnZS1oZWFkZXI+XHJcbjx2ZHItcGFnZS1ib2R5PlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0ucHJpc3RpbmUgfHwgZGV0YWlsRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwib3B0aW9uR3JvdXBzJCB8IGFzeW5jIGFzIG9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvcHRpb25Hcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBnZXRPcHRpb25Hcm91cHMoKTsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1BcnJheU5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbkdyb3VwLnZhbHVlLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cIm9wdGlvbkdyb3VwLnZhbHVlXCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInbmFtZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvZGUtJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIiAqbmdJZj1cIm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvbkdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcHRpb25Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlZGl0LW9wdGlvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3B0aW9ucyhvcHRpb25Hcm91cCkgYXMgb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zUGVyUGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5pdGVtc1BlclBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY3VycmVudFBhZ2VdPVwicGFnaW5hdGlvblNldHRpbmdzW29wdGlvbkdyb3VwLnZhbHVlLmlkXT8uY3VycmVudFBhZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdLmN1cnJlbnRQYWdlID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJpZFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUuaWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJjcmVhdGVkLWF0XCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cInVwZGF0ZWQtYXRcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGlkPVwibmFtZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBpZD1cImNvZGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2NvZGUnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIiBpZD1cImN1c3RvbS1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJvcHRpb25DdXN0b21GaWVsZHMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cIm9wdGlvbkN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG48L3Zkci1wYWdlLWJvZHk+XHJcbiJdfQ==
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NhdGFsb2cvc3JjL2NvbXBvbmVudHMvcHJvZHVjdC1vcHRpb25zLWVkaXRvci9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yL3Byb2R1Y3Qtb3B0aW9ucy1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFxQixTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLGdCQUFnQixFQUFzQixnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDdEUsT0FBTyxFQUNILG1CQUFtQixFQUNuQix5QkFBeUIsRUFHekIsZUFBZSxFQUlmLFVBQVUsR0FRYixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBWTFELE1BQU0sT0FBTyw2QkFBOEIsU0FBUSxtQkFBdUM7SUFXdEYsWUFDYyxLQUFxQixFQUNyQixNQUFjLEVBQ2QsbUJBQXdDLEVBQ3hDLFdBQXdCLEVBQ3hCLGtCQUFzQyxFQUN4QyxvQkFBMEMsRUFDMUMsV0FBK0IsRUFDL0IsY0FBaUMsRUFDakMsbUJBQXdDO1FBRWhELEtBQUssQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLG1CQUFtQixFQUFFLFdB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QyxXQUFXLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLFdBQVcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsQ0FBQztRQUNELE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7OEdBclFRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLHlGQ25DMUMsb3RQQXdJQTs7MkZEckdhLDZCQUE2QjtrQkFOekMsU0FBUzsrQkFDSSw0QkFBNEIsbUJBR3JCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFVudHlwZWRGb3JtQXJyYXksIFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IG1hcmtlciBhcyBfIH0gZnJvbSAnQGJpZXNiamVyZy9uZ3gtdHJhbnNsYXRlLWV4dHJhY3QtbWFya2VyJztcclxuaW1wb3J0IHtcclxuICAgIEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlLFxyXG4gICAgQ3VzdG9tRmllbGRDb25maWcsXHJcbiAgICBEYXRhU2VydmljZSxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICBQcm9kdWN0T3B0aW9uRnJhZ21lbnQsXHJcbiAgICBQcm9kdWN0T3B0aW9uR3JvdXBGcmFnbWVudCxcclxuICAgIFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICBUcmFuc2xhdGlvbk9mLFxyXG4gICAgVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQsXHJcbiAgICBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQsXHJcbn0gZnJvbSAnQHZlbmR1cmUvYWRtaW4tdWkvY29yZSc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QsIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgbWVyZ2VNYXAsIHRha2UsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7IFByb2R1Y3REZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzL3Byb2R1Y3QtZGV0YWlsL3Byb2R1Y3QtZGV0YWlsLnNlcnZpY2UnO1xyXG5cclxudHlwZSBQcm9kdWN0V2l0aE9wdGlvbnMgPSBOb25OdWxsYWJsZTxHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeVsncHJvZHVjdCddPjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItcHJvZHVjdC1vcHRpb25zLWVkaXRvcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vcHJvZHVjdC1vcHRpb25zLWVkaXRvci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9wcm9kdWN0LW9wdGlvbnMtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFByb2R1Y3RPcHRpb25zRWRpdG9yQ29tcG9uZW50IGV4dGVuZHMgQmFzZURldGFpbENvbXBvbmVudDxQcm9kdWN0V2l0aE9wdGlvbnM+IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgIGRldGFpbEZvcm06IFVudHlwZWRGb3JtR3JvdXA7XHJcbiAgICBvcHRpb25Hcm91cHMkOiBPYnNlcnZhYmxlPFByb2R1Y3RXaXRoT3B0aW9uc1snb3B0aW9uR3JvdXBzJ10+O1xyXG4gICAgbGFuZ3VhZ2VDb2RlJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGU+O1xyXG4gICAgYXZhaWxhYmxlTGFuZ3VhZ2VzJDogT2JzZXJ2YWJsZTxMYW5ndWFnZUNvZGVbXT47XHJcbiAgICBvcHRpb25Hcm91cEN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIG9wdGlvbkN1c3RvbUZpZWxkczogQ3VzdG9tRmllbGRDb25maWdbXTtcclxuICAgIGF1dG9VcGRhdGVWYXJpYW50TmFtZXMgPSB0cnVlO1xyXG4gICAgcGFnaW5hdGlvblNldHRpbmdzOiB7IFtncm91cElkOiBzdHJpbmddOiB7IGN1cnJlbnRQYWdlOiBudW1iZXI7IGl0ZW1zUGVyUGFnZTogbnVtYmVyIH0gfSA9IHt9O1xyXG4gICAgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbiA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlUHJvZHVjdF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJvdGVjdGVkIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJvdGVjdGVkIHNlcnZlckNvbmZpZ1NlcnZpY2U6IFNlcnZlckNvbmZpZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgcGVybWlzc2lvbnNTZXJ2aWNlOiBQZXJtaXNzaW9uc1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9kdWN0RGV0YWlsU2VydmljZTogUHJvZHVjdERldGFpbFNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogVW50eXBlZEZvcm1CdWlsZGVyLFxyXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgICAgIHByaXZhdGUgbm90aWZpY2F0aW9uU2VydmljZTogTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKHJvdXRlLCByb3V0ZXIsIHNlcnZlckNvbmZpZ1NlcnZpY2UsIGRhdGFTZXJ2aWNlLCBwZXJtaXNzaW9uc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdQcm9kdWN0T3B0aW9uR3JvdXAnKTtcclxuICAgICAgICB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyA9IHRoaXMuZ2V0Q3VzdG9tRmllbGRDb25maWcoJ1Byb2R1Y3RPcHRpb24nKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLm9wdGlvbkdyb3VwcyQgPSB0aGlzLnJvdXRlLnNuYXBzaG90LmRhdGEuZW50aXR5LnBpcGUoXHJcbiAgICAgICAgICAgIG1hcCgocHJvZHVjdDogUHJvZHVjdFdpdGhPcHRpb25zKSA9PiBwcm9kdWN0Lm9wdGlvbkdyb3VwcyksXHJcbiAgICAgICAgICAgIHRhcCgob3B0aW9uR3JvdXBzOiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGdyb3VwIG9mIG9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGFnaW5hdGlvblNldHRpbmdzW2dyb3VwLmlkXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IDEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZTogMTAsXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLmRldGFpbEZvcm0gPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7XHJcbiAgICAgICAgICAgIG9wdGlvbkdyb3VwczogbmV3IFVudHlwZWRGb3JtQXJyYXkoW10pLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHN1cGVyLmluaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRPcHRpb25Hcm91cHMoKTogVW50eXBlZEZvcm1Hcm91cFtdIHtcclxuICAgICAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCdvcHRpb25Hcm91cHMnKTtcclxuICAgICAgICByZXR1cm4gKG9wdGlvbkdyb3VwcyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0T3B0aW9ucyhvcHRpb25Hcm91cDogVW50eXBlZEZvcm1Hcm91cCk6IFVudHlwZWRGb3JtR3JvdXBbXSB7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IG9wdGlvbkdyb3VwLmdldCgnb3B0aW9ucycpO1xyXG4gICAgICAgIHJldHVybiAob3B0aW9ucyBhcyBVbnR5cGVkRm9ybUFycmF5KS5jb250cm9scyBhcyBVbnR5cGVkRm9ybUdyb3VwW107XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5kZXRhaWxGb3JtLmludmFsaWQgfHwgdGhpcy5kZXRhaWxGb3JtLnByaXN0aW5lKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cclxuICAgICAgICBjb25zdCAkcHJvZHVjdCA9IHRoaXMuZGF0YVNlcnZpY2UucHJvZHVjdC5nZXRQcm9kdWN0KHRoaXMuaWQpLm1hcFNpbmdsZShkYXRhID0+IGRhdGEucHJvZHVjdCEpO1xyXG4gICAgICAgIGNvbWJpbmVMYXRlc3QodGhpcy5lbnRpdHkkLCB0aGlzLmxhbmd1YWdlQ29kZSQsICRwcm9kdWN0KVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW3sgb3B0aW9uR3JvdXBzIH0sIGxhbmd1YWdlQ29kZSwgcHJvZHVjdF0pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHM6IFVwZGF0ZVByb2R1Y3RPcHRpb25JbnB1dFtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBvcHRpb25Hcm91cEZvcm0gb2YgdGhpcy5nZXRPcHRpb25Hcm91cHMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXBGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Hcm91cEVudGl0eSA9IG9wdGlvbkdyb3Vwcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9nID0+IG9nLmlkID09PSBvcHRpb25Hcm91cEZvcm0udmFsdWUuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbkdyb3VwRW50aXR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb25Hcm91cChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uR3JvdXBFbnRpdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwRm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFTZXJ2aWNlLnByb2R1Y3QudXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwKGlucHV0KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkZvcm0gb2YgdGhpcy5nZXRPcHRpb25zKG9wdGlvbkdyb3VwRm9ybSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25Gb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uR3JvdXAgPSBvcHRpb25Hcm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbmQob2cgPT4gb2cuaWQgPT09IG9wdGlvbkdyb3VwRm9ybS52YWx1ZS5pZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb25Gb3JtLnZhbHVlLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRPcHRpb24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25Hcm91cCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkZvcm0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZWRQcm9kdWN0T3B0aW9uSW5wdXRzLnB1c2goaW5wdXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdERldGFpbFNlcnZpY2UudXBkYXRlUHJvZHVjdE9wdGlvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlZFByb2R1Y3RPcHRpb25JbnB1dHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hdXRvVXBkYXRlVmFyaWFudE5hbWVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2R1Y3QsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdQcm9kdWN0T3B0aW9uR3JvdXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnUHJvZHVjdE9wdGlvbkdyb3VwJyxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkT3B0aW9uR3JvdXAoXHJcbiAgICAgICAgb3B0aW9uR3JvdXA6IFByb2R1Y3RPcHRpb25Hcm91cEZyYWdtZW50LFxyXG4gICAgICAgIG9wdGlvbkdyb3VwRm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogVXBkYXRlUHJvZHVjdE9wdGlvbkdyb3VwSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uR3JvdXAsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IG9wdGlvbkdyb3VwRm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5vcHRpb25Hcm91cEN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbkdyb3VwLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VXBkYXRlZE9wdGlvbihcclxuICAgICAgICBvcHRpb246IFByb2R1Y3RPcHRpb25GcmFnbWVudCxcclxuICAgICAgICBvcHRpb25Gb3JtR3JvdXA6IFVudHlwZWRGb3JtR3JvdXAsXHJcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICApOiBVcGRhdGVQcm9kdWN0T3B0aW9uSW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogb3B0aW9uLFxyXG4gICAgICAgICAgICB1cGRhdGVkRmllbGRzOiBvcHRpb25Gb3JtR3JvdXAudmFsdWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLm9wdGlvbkN1c3RvbUZpZWxkcyxcclxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNsYXRpb246IHtcclxuICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Rm9ybVZhbHVlcyhlbnRpdHk6IFByb2R1Y3RXaXRoT3B0aW9ucywgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBncm91cHNGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldCgnb3B0aW9uR3JvdXBzJykgYXMgVW50eXBlZEZvcm1BcnJheTtcclxuICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbkdyb3VwIG9mIGVudGl0eS5vcHRpb25Hcm91cHMpIHtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXBUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb25Hcm91cCwgbGFuZ3VhZ2VDb2RlKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGdyb3VwRm9ybSA9IHRoaXMuc2V0T3B0aW9uR3JvdXBGb3JtKG9wdGlvbkdyb3VwLCBncm91cHNGb3JtLCBncm91cFRyYW5zbGF0aW9uKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZHNGb3JtKHRoaXMub3B0aW9uR3JvdXBDdXN0b21GaWVsZHMsIGdyb3VwRm9ybSwgb3B0aW9uR3JvdXAsIGdyb3VwVHJhbnNsYXRpb24pO1xyXG5cclxuICAgICAgICAgICAgbGV0IG9wdGlvbnNGb3JtID0gZ3JvdXBGb3JtLmdldCgnb3B0aW9ucycpIGFzIFVudHlwZWRGb3JtQXJyYXk7XHJcbiAgICAgICAgICAgIGlmICghb3B0aW9uc0Zvcm0pIHtcclxuICAgICAgICAgICAgICAgIG9wdGlvbnNGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSk7XHJcbiAgICAgICAgICAgICAgICBncm91cEZvcm0uYWRkQ29udHJvbCgnb3B0aW9ucycsIG9wdGlvbnNGb3JtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25Hcm91cC5vcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25UcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbihvcHRpb24sIGxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25Gb3JtID0gdGhpcy5zZXRPcHRpb25Gb3JtKG9wdGlvbiwgb3B0aW9uc0Zvcm0sIG9wdGlvblRyYW5zbGF0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldEN1c3RvbUZpZWxkc0Zvcm0odGhpcy5vcHRpb25DdXN0b21GaWVsZHMsIG9wdGlvbkZvcm0sIG9wdGlvbiwgb3B0aW9uVHJhbnNsYXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRDdXN0b21GaWVsZHNGb3JtPFxyXG4gICAgICAgIFQgZXh0ZW5kcyBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdIHwgUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXVsnb3B0aW9ucyddWzBdLFxyXG4gICAgPihcclxuICAgICAgICBjdXN0b21GaWVsZHM6IEN1c3RvbUZpZWxkQ29uZmlnW10sXHJcbiAgICAgICAgZm9ybUdyb3VwOiBVbnR5cGVkRm9ybUdyb3VwLFxyXG4gICAgICAgIGVudGl0eTogVCxcclxuICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24/OiBUcmFuc2xhdGlvbk9mPFQ+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGN1c3RvbUZpZWxkcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBmb3JtR3JvdXAuZ2V0KFsnY3VzdG9tRmllbGRzJ10pO1xyXG4gICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKFxyXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkcy5yZWR1Y2UoKGhhc2gsIGZpZWxkKSA9PiAoeyAuLi5oYXNoLCBbZmllbGQubmFtZV06ICcnIH0pLCB7fSksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZm9ybUdyb3VwLmFkZENvbnRyb2woJ2N1c3RvbUZpZWxkcycsIGN1c3RvbVZhbHVlRmllbGRzR3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKGN1c3RvbUZpZWxkcywgY3VzdG9tVmFsdWVGaWVsZHNHcm91cCwgZW50aXR5LCBjdXJyZW50VHJhbnNsYXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0T3B0aW9uR3JvdXBGb3JtKFxyXG4gICAgICAgIGVudGl0eTogUHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXSxcclxuICAgICAgICBncm91cHNGb3JtOiBVbnR5cGVkRm9ybUFycmF5LFxyXG4gICAgICAgIGN1cnJlbnRUcmFuc2xhdGlvbj86IFRyYW5zbGF0aW9uT2Y8UHJvZHVjdFdpdGhPcHRpb25zWydvcHRpb25Hcm91cHMnXVswXT4sXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBncm91cCA9IHtcclxuICAgICAgICAgICAgaWQ6IGVudGl0eS5pZCxcclxuICAgICAgICAgICAgY3JlYXRlZEF0OiBlbnRpdHkuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGVudGl0eS51cGRhdGVkQXQsXHJcbiAgICAgICAgICAgIGNvZGU6IGVudGl0eS5jb2RlLFxyXG4gICAgICAgICAgICBuYW1lOiBjdXJyZW50VHJhbnNsYXRpb24/Lm5hbWUgPz8gJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBsZXQgZ3JvdXBGb3JtID0gZ3JvdXBzRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKGdyb3VwRm9ybSkge1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCdpZCcpPy5zZXRWYWx1ZShncm91cC5pZCk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ25hbWUnKT8uc2V0VmFsdWUoZ3JvdXAubmFtZSk7XHJcbiAgICAgICAgICAgIGdyb3VwRm9ybS5nZXQoJ2NyZWF0ZWRBdCcpPy5zZXRWYWx1ZShncm91cC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICBncm91cEZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBncm91cEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcclxuICAgICAgICAgICAgZ3JvdXBzRm9ybS5wdXNoKGdyb3VwRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBncm91cEZvcm07XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHNldE9wdGlvbkZvcm0oXHJcbiAgICAgICAgZW50aXR5OiBQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0sXHJcbiAgICAgICAgb3B0aW9uc0Zvcm06IFVudHlwZWRGb3JtQXJyYXksXHJcbiAgICAgICAgY3VycmVudFRyYW5zbGF0aW9uPzogVHJhbnNsYXRpb25PZjxQcm9kdWN0V2l0aE9wdGlvbnNbJ29wdGlvbkdyb3VwcyddWzBdWydvcHRpb25zJ11bMF0+LFxyXG4gICAgKSB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgIGlkOiBlbnRpdHkuaWQsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZW50aXR5LmNyZWF0ZWRBdCxcclxuICAgICAgICAgICAgdXBkYXRlZEF0OiBlbnRpdHkudXBkYXRlZEF0LFxyXG4gICAgICAgICAgICBjb2RlOiBlbnRpdHkuY29kZSxcclxuICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgbGV0IG9wdGlvbkZvcm0gPSBvcHRpb25zRm9ybS5jb250cm9scy5maW5kKGNvbnRyb2wgPT4gY29udHJvbC52YWx1ZS5pZCA9PT0gZW50aXR5LmlkKSBhc1xyXG4gICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcclxuICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgaWYgKG9wdGlvbkZvcm0pIHtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2lkJyk/LnNldFZhbHVlKGdyb3VwLmlkKTtcclxuICAgICAgICAgICAgb3B0aW9uRm9ybS5nZXQoJ2NvZGUnKT8uc2V0VmFsdWUoZ3JvdXAuY29kZSk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCduYW1lJyk/LnNldFZhbHVlKGdyb3VwLm5hbWUpO1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtLmdldCgnY3JlYXRlZEF0Jyk/LnNldFZhbHVlKGdyb3VwLmNyZWF0ZWRBdCk7XHJcbiAgICAgICAgICAgIG9wdGlvbkZvcm0uZ2V0KCd1cGRhdGVkQXQnKT8uc2V0VmFsdWUoZ3JvdXAudXBkYXRlZEF0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBvcHRpb25Gb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChncm91cCk7XHJcbiAgICAgICAgICAgIG9wdGlvbnNGb3JtLnB1c2gob3B0aW9uRm9ybSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvcHRpb25Gb3JtO1xyXG4gICAgfVxyXG59XHJcbiIsIjx2ZHItcGFnZS1oZWFkZXI+XHJcbiAgICA8dmRyLXBhZ2UtdGl0bGU+PC92ZHItcGFnZS10aXRsZT5cclxuICAgIDx2ZHItcGFnZS1oZWFkZXItZGVzY3JpcHRpb24+e3sgJ2NhdGFsb2cucGFnZS1kZXNjcmlwdGlvbi1vcHRpb25zLWVkaXRvcicgfCB0cmFuc2xhdGUgfX08L3Zkci1wYWdlLWhlYWRlci1kZXNjcmlwdGlvbj5cclxuPC92ZHItcGFnZS1oZWFkZXI+XHJcbjx2ZHItcGFnZS1ib2R5PlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDx2ZHItYWN0aW9uLWJhcj5cclxuICAgICAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRMYW5ndWFnZUNvZGVdPVwibGFuZ3VhZ2VDb2RlJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgICAgICA8L3Zkci1hYi1sZWZ0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtci0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItY2hlY2tib3gtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsckNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImF1dG8tdXBkYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF1dG9VcGRhdGVWYXJpYW50TmFtZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbD57eyAnY2F0YWxvZy5hdXRvLXVwZGF0ZS1wcm9kdWN0LXZhcmlhbnQtbmFtZScgfCB0cmFuc2xhdGUgfX08L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Nsci1jaGVja2JveC13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0ucHJpc3RpbmUgfHwgZGV0YWlsRm9ybS5pbnZhbGlkXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgIDxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiICpuZ0lmPVwib3B0aW9uR3JvdXBzJCB8IGFzeW5jIGFzIG9wdGlvbkdyb3Vwc1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGZvcm1Hcm91cE5hbWU9XCJvcHRpb25Hcm91cHNcIj5cclxuICAgICAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb25Hcm91cCBvZiBnZXRPcHRpb25Hcm91cHMoKTsgaW5kZXggYXMgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1BcnJheU5hbWVdPVwiaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIm9wdGlvbkdyb3VwLnZhbHVlLmNvZGVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnZS1lbnRpdHktaW5mbyBbZW50aXR5XT1cIm9wdGlvbkdyb3VwLnZhbHVlXCI+PC92ZHItcGFnZS1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpZF09XCInbmFtZS0nICsgaVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiJ2NvZGUtJyArIGlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1Hcm91cE5hbWU9XCJjdXN0b21GaWVsZHNcIiAqbmdJZj1cIm9wdGlvbkdyb3VwQ3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHlOYW1lPVwiUHJvZHVjdE9wdGlvbkdyb3VwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwib3B0aW9uR3JvdXBDdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJvcHRpb25Hcm91cC5nZXQoJ2N1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1kYXRhLXRhYmxlLTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJlZGl0LW9wdGlvbnMtbGlzdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiZ2V0T3B0aW9ucyhvcHRpb25Hcm91cCkgYXMgb3B0aW9uc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RyYWNrQnlQYXRoXT1cIid2YWx1ZS5pZCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cInBhZ2luYXRpb25TZXR0aW5nc1tvcHRpb25Hcm91cC52YWx1ZS5pZF0/Lml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJwYWdpbmF0aW9uU2V0dGluZ3Nbb3B0aW9uR3JvdXAudmFsdWUuaWRdPy5jdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInBhZ2luYXRpb25TZXR0aW5nc1tvcHRpb25Hcm91cC52YWx1ZS5pZF0uY3VycmVudFBhZ2UgPSAkZXZlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInBhZ2luYXRpb25TZXR0aW5nc1tvcHRpb25Hcm91cC52YWx1ZS5pZF0uaXRlbXNQZXJQYWdlID0gJGV2ZW50XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwib3B0aW9ucy5sZW5ndGhcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uaWQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJpZFwiIFtoaWRkZW5CeURlZmF1bHRdPVwidHJ1ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IG9wdGlvbkNvbnRyb2wudmFsdWUuaWQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWR0Mi1jb2x1bW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHQyLWNvbHVtbiBbaGVhZGluZ109XCInY29tbW9uLmNyZWF0ZWQtYXQnIHwgdHJhbnNsYXRlXCIgaWQ9XCJjcmVhdGVkLWF0XCIgW2hpZGRlbkJ5RGVmYXVsdF09XCJ0cnVlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbGV0LW9wdGlvbkNvbnRyb2w9XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uQ29udHJvbC52YWx1ZS5jcmVhdGVkQXQgfCBsb2NhbGVEYXRlIDogJ3Nob3J0JyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24udXBkYXRlZC1hdCcgfCB0cmFuc2xhdGVcIiBpZD1cInVwZGF0ZWQtYXRcIiBbaGlkZGVuQnlEZWZhdWx0XT1cInRydWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb25Db250cm9sLnZhbHVlLnVwZGF0ZWRBdCB8IGxvY2FsZURhdGUgOiAnc2hvcnQnIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW4gW2hlYWRpbmddPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGlkPVwibmFtZVwiIFtvcHRpb25hbF09XCJmYWxzZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJvcHRpb25Db250cm9sLmdldCgnbmFtZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kdDItY29sdW1uIFtoZWFkaW5nXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBpZD1cImNvZGVcIiBbb3B0aW9uYWxdPVwiZmFsc2VcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBsZXQtb3B0aW9uQ29udHJvbD1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBbZm9ybUNvbnRyb2xdPVwib3B0aW9uQ29udHJvbC5nZXQoJ2NvZGUnKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Zkci1kdDItY29sdW1uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWR0Mi1jb2x1bW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWFkaW5nXT1cIidjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGVcIiBpZD1cImN1c3RvbS1maWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hpZGRlbkJ5RGVmYXVsdF09XCJvcHRpb25DdXN0b21GaWVsZHMubGVuZ3RoID09PSAwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGxldC1vcHRpb25Db250cm9sPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIlByb2R1Y3RPcHRpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cIm9wdGlvbkN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjb21wYWN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIm9wdGlvbkNvbnRyb2wuZ2V0KCdjdXN0b21GaWVsZHMnKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLXRhYmJlZC1jdXN0b20tZmllbGRzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHQyLWNvbHVtbj5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1kYXRhLXRhYmxlLTI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Zvcm0+XHJcbiAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG48L3Zkci1wYWdlLWJvZHk+XHJcbiJdfQ==
|