@vendure/admin-ui 2.2.6 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/catalog/components/product-variant-list/product-variant-list.component.d.ts +1 -1
  2. package/core/common/generated-types.d.ts +6 -1
  3. package/core/common/version.d.ts +1 -1
  4. package/core/extension/components/angular-route.component.d.ts +20 -0
  5. package/core/extension/components/route.component.d.ts +9 -2
  6. package/core/extension/register-route-component.d.ts +4 -0
  7. package/core/shared/components/order-state-label/order-state-label.component.d.ts +1 -1
  8. package/core/shared/dynamic-form-inputs/default-form-inputs.d.ts +1 -1
  9. package/core/shared/providers/routing/can-deactivate-detail-guard.d.ts +2 -4
  10. package/esm2022/catalog/components/create-product-variant-dialog/create-product-variant-dialog.component.mjs +2 -2
  11. package/esm2022/catalog/components/facet-detail/facet-detail.component.mjs +8 -8
  12. package/esm2022/catalog/components/generate-product-variants/generate-product-variants.component.mjs +2 -1
  13. package/esm2022/core/common/generated-types.mjs +1 -1
  14. package/esm2022/core/common/introspection-result.mjs +1 -1
  15. package/esm2022/core/common/version.mjs +2 -2
  16. package/esm2022/core/data/utils/is-entity-create-or-update-mutation.mjs +1 -1
  17. package/esm2022/core/data/utils/remove-readonly-custom-fields.mjs +1 -1
  18. package/esm2022/core/extension/components/angular-route.component.mjs +51 -6
  19. package/esm2022/core/extension/components/route.component.mjs +32 -11
  20. package/esm2022/core/extension/register-data-table-component.mjs +1 -1
  21. package/esm2022/core/extension/register-route-component.mjs +4 -2
  22. package/esm2022/core/shared/components/facet-value-selector/facet-value-selector.component.mjs +1 -1
  23. package/esm2022/core/shared/components/rich-text-editor/rich-text-editor.component.mjs +2 -2
  24. package/esm2022/core/shared/components/timeline-entry/timeline-entry.component.mjs +1 -1
  25. package/esm2022/core/shared/providers/routing/can-deactivate-detail-guard.mjs +6 -8
  26. package/esm2022/core/shared/shared.module.mjs +1 -1
  27. package/esm2022/customer/customer.routes.mjs +1 -1
  28. package/esm2022/react/components/react-route.component.mjs +2 -2
  29. package/esm2022/react/react-components/RichTextEditor.mjs +8 -4
  30. package/esm2022/react/react-hooks/use-query.mjs +22 -8
  31. package/fesm2022/vendure-admin-ui-catalog.mjs +9 -8
  32. package/fesm2022/vendure-admin-ui-catalog.mjs.map +1 -1
  33. package/fesm2022/vendure-admin-ui-core.mjs +84 -19
  34. package/fesm2022/vendure-admin-ui-core.mjs.map +1 -1
  35. package/fesm2022/vendure-admin-ui-customer.mjs.map +1 -1
  36. package/fesm2022/vendure-admin-ui-react.mjs +29 -11
  37. package/fesm2022/vendure-admin-ui-react.mjs.map +1 -1
  38. package/package.json +15 -15
  39. package/react/react-components/RichTextEditor.d.ts +2 -0
  40. package/react/react-hooks/use-query.d.ts +9 -5
  41. package/static/styles/component/prosemirror.scss +511 -0
  42. package/static/styles/styles.scss +2 -0
@@ -7,7 +7,7 @@ export declare class ProductVariantListComponent extends TypedBaseListComponent<
7
7
  dataTableId: DataTableLocationId | undefined;
8
8
  readonly customFields: import("@vendure/admin-ui/core").CustomFieldConfig[];
9
9
  readonly filters: import("@vendure/admin-ui/core").DataTableFilterCollection<ProductVariantFilterParameter>;
10
- readonly sorts: import("@vendure/admin-ui/core").DataTableSortCollection<import("@vendure/admin-ui/core").ProductVariantSortParameter, ["name" | "price" | "sku" | "id" | "createdAt" | "updatedAt" | "priceWithTax"]>;
10
+ readonly sorts: import("@vendure/admin-ui/core").DataTableSortCollection<import("@vendure/admin-ui/core").ProductVariantSortParameter, ["name" | "id" | "createdAt" | "updatedAt" | "price" | "priceWithTax" | "sku"]>;
11
11
  constructor();
12
12
  static ɵfac: i0.ɵɵFactoryDeclaration<ProductVariantListComponent, never>;
13
13
  static ɵcmp: i0.ɵɵComponentDeclaration<ProductVariantListComponent, "vdr-product-variant-list", never, { "productId": { "alias": "productId"; "required": false; }; "hideLanguageSelect": { "alias": "hideLanguageSelect"; "required": false; }; "dataTableId": { "alias": "dataTableId"; "required": false; }; }, {}, never, never, false, never>;
@@ -2676,7 +2676,12 @@ export type Mutation = {
2676
2676
  duplicateEntity: DuplicateEntityResult;
2677
2677
  flushBufferedJobs: Success;
2678
2678
  importProducts?: Maybe<ImportInfo>;
2679
- /** Authenticates the user using the native authentication strategy. This mutation is an alias for `authenticate({ native: { ... }})` */
2679
+ /**
2680
+ * Authenticates the user using the native authentication strategy. This mutation is an alias for authenticate({ native: { ... }})
2681
+ *
2682
+ * The `rememberMe` option applies when using cookie-based sessions, and if `true` it will set the maxAge of the session cookie
2683
+ * to 1 year.
2684
+ */
2680
2685
  login: NativeAuthenticationResult;
2681
2686
  logout: Success;
2682
2687
  /**
@@ -1 +1 @@
1
- export declare const ADMIN_UI_VERSION = "2.2.6";
1
+ export declare const ADMIN_UI_VERSION = "2.3.0";
@@ -1,6 +1,26 @@
1
+ import { ComponentRef, EventEmitter, OnInit, ViewContainerRef } from '@angular/core';
1
2
  import * as i0 from "@angular/core";
3
+ /**
4
+ * @description
5
+ * This component is used internally to allow us to dynamically load a component
6
+ * like with `*ngComponentOutlet`, but with the ability to get a reference to the
7
+ * created ComponentRef. This can then be used to delegate lifecycle events like
8
+ * `canDeactivate` to the loaded component.
9
+ */
10
+ export declare class DynamicComponentLoaderComponent implements OnInit {
11
+ private viewContainer;
12
+ componentType: any;
13
+ loaded: EventEmitter<ComponentRef<any>>;
14
+ constructor(viewContainer: ViewContainerRef);
15
+ ngOnInit(): void;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<DynamicComponentLoaderComponent, never>;
17
+ static ɵcmp: i0.ɵɵComponentDeclaration<DynamicComponentLoaderComponent, "vdr-dynamic-component-loader", never, { "componentType": { "alias": "componentType"; "required": false; }; }, { "loaded": "loaded"; }, never, never, true, never>;
18
+ }
2
19
  export declare class AngularRouteComponent {
3
20
  protected component: import("@angular/core").Type<any>;
21
+ protected componentRef: ComponentRef<any>;
22
+ componentLoaded(componentRef: ComponentRef<any>): void;
23
+ canDeactivate(): any;
4
24
  static ɵfac: i0.ɵɵFactoryDeclaration<AngularRouteComponent, never>;
5
25
  static ɵcmp: i0.ɵɵComponentDeclaration<AngularRouteComponent, "vdr-angular-route-component", never, {}, {}, never, never, true, never>;
6
26
  }
@@ -2,12 +2,19 @@ import { InjectionToken } from '@angular/core';
2
2
  import { ActivatedRoute } from '@angular/router';
3
3
  import { Observable } from 'rxjs';
4
4
  import { AngularRouteComponentOptions } from '../types';
5
+ import { HeaderTab } from '../../shared/components/page-header-tabs/page-header-tabs.component';
6
+ import { PageService } from '../../providers/page/page.service';
7
+ import { PageLocationId } from '../../common/component-registry-types';
5
8
  import * as i0 from "@angular/core";
6
9
  export declare const ROUTE_COMPONENT_OPTIONS: InjectionToken<AngularRouteComponentOptions>;
7
10
  export declare class RouteComponent {
8
11
  private route;
12
+ private pageService;
9
13
  protected title$: Observable<string | undefined>;
10
- constructor(route: ActivatedRoute);
14
+ protected locationId: PageLocationId;
15
+ protected description: string;
16
+ headerTabs: HeaderTab[];
17
+ constructor(route: ActivatedRoute, pageService: PageService);
11
18
  static ɵfac: i0.ɵɵFactoryDeclaration<RouteComponent, never>;
12
- static ɵcmp: i0.ɵɵComponentDeclaration<RouteComponent, "vdr-route-component", never, {}, {}, never, ["*"], true, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<RouteComponent, "vdr-route-component", never, { "locationId": { "alias": "locationId"; "required": false; }; "description": { "alias": "description"; "required": false; }; }, {}, never, ["*"], true, never>;
13
20
  }
@@ -20,6 +20,8 @@ export type RegisterRouteComponentOptions<Component extends any | BaseDetailComp
20
20
  }>, Field extends keyof ResultOf<T>, R extends Field> = {
21
21
  component: Type<Component> | Component;
22
22
  title?: string;
23
+ locationId?: string;
24
+ description?: string;
23
25
  breadcrumb?: BreadcrumbValue;
24
26
  path?: string;
25
27
  query?: T;
@@ -84,6 +86,8 @@ export declare function registerRouteComponent<Component extends any | BaseDetai
84
86
  };
85
87
  data: {
86
88
  breadcrumb: BehaviorSubject<BreadcrumbValue> | ((data: any) => any);
89
+ locationId: string | undefined;
90
+ description: string | undefined;
87
91
  };
88
92
  component: typeof AngularRouteComponent;
89
93
  title?: string | Type<import("@angular/router").Resolve<string>> | ResolveFn<string> | undefined;
@@ -11,7 +11,7 @@ import * as i0 from "@angular/core";
11
11
  */
12
12
  export declare class OrderStateLabelComponent {
13
13
  state: string;
14
- get chipColorType(): "error" | "success" | "" | "warning";
14
+ get chipColorType(): "" | "success" | "error" | "warning";
15
15
  static ɵfac: i0.ɵɵFactoryDeclaration<OrderStateLabelComponent, never>;
16
16
  static ɵcmp: i0.ɵɵComponentDeclaration<OrderStateLabelComponent, "vdr-order-state-label", never, { "state": { "alias": "state"; "required": false; }; }, {}, never, ["*"], false, never>;
17
17
  }
@@ -12,7 +12,7 @@ import { RelationFormInputComponent } from './relation-form-input/relation-form-
12
12
  import { SelectFormInputComponent } from './select-form-input/select-form-input.component';
13
13
  import { TextFormInputComponent } from './text-form-input/text-form-input.component';
14
14
  import { TextareaFormInputComponent } from './textarea-form-input/textarea-form-input.component';
15
- export declare const defaultFormInputs: (typeof HtmlEditorFormInputComponent | typeof JsonEditorFormInputComponent | typeof CombinationModeFormInputComponent | typeof CurrencyFormInputComponent | typeof CustomerGroupFormInputComponent | typeof DateFormInputComponent | typeof PasswordFormInputComponent | typeof ProductMultiSelectorFormInputComponent | typeof ProductSelectorFormInputComponent | typeof RelationFormInputComponent | typeof SelectFormInputComponent | typeof TextFormInputComponent | typeof TextareaFormInputComponent)[];
15
+ export declare const defaultFormInputs: (typeof HtmlEditorFormInputComponent | typeof SelectFormInputComponent | typeof RelationFormInputComponent | typeof ProductSelectorFormInputComponent | typeof CustomerGroupFormInputComponent | typeof CurrencyFormInputComponent | typeof JsonEditorFormInputComponent | typeof CombinationModeFormInputComponent | typeof DateFormInputComponent | typeof PasswordFormInputComponent | typeof ProductMultiSelectorFormInputComponent | typeof TextFormInputComponent | typeof TextareaFormInputComponent)[];
16
16
  /**
17
17
  * Registers the default form input components.
18
18
  */
@@ -1,13 +1,11 @@
1
- import { ActivatedRouteSnapshot, Router, RouterStateSnapshot } from '@angular/router';
2
1
  import { Observable } from 'rxjs';
3
2
  import { DeactivateAware } from '../../../common/deactivate-aware';
4
3
  import { ModalService } from '../../../providers/modal/modal.service';
5
4
  import * as i0 from "@angular/core";
6
5
  export declare class CanDeactivateDetailGuard {
7
6
  private modalService;
8
- private router;
9
- constructor(modalService: ModalService, router: Router);
10
- canDeactivate(component: DeactivateAware, currentRoute: ActivatedRouteSnapshot, currentState: RouterStateSnapshot, nextState?: RouterStateSnapshot): boolean | Observable<boolean>;
7
+ constructor(modalService: ModalService);
8
+ canDeactivate(component: DeactivateAware): boolean | Observable<boolean>;
11
9
  static ɵfac: i0.ɵɵFactoryDeclaration<CanDeactivateDetailGuard, never>;
12
10
  static ɵprov: i0.ɵɵInjectableDeclaration<CanDeactivateDetailGuard>;
13
11
  }
@@ -44,7 +44,7 @@ export class CreateProductVariantDialogComponent {
44
44
  }
45
45
  confirm() {
46
46
  const { name, sku, options, price } = this.form.value;
47
- if (!name || !sku || !options || !price) {
47
+ if (!name || !sku || !options || price == null) {
48
48
  return;
49
49
  }
50
50
  const optionIds = Object.values(options).filter(notNullOrUndefined);
@@ -77,4 +77,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
77
77
  type: Component,
78
78
  args: [{ selector: 'vdr-create-product-variant-dialog', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template vdrDialogTitle>\r\n {{ 'catalog.create-product-variant' | translate }}\r\n</ng-template>\r\n<form [formGroup]=\"form\">\r\n <div formGroupName=\"options\" class=\"form-grid\">\r\n <vdr-form-field [label]=\"optionGroup.name\" *ngFor=\"let optionGroup of product.optionGroups\">\r\n <ng-select [items]=\"optionGroup.options\" [formControlName]=\"optionGroup.code\" bindLabel=\"name\"\r\n bindValue=\"id\" appendTo=\"body\">\r\n </ng-select>\r\n </vdr-form-field>\r\n <clr-alert *ngIf=\"product.optionGroups.length === 0\" clrAlertType=\"warning\" [clrAlertClosable]=\"false\"\r\n class=\"form-grid-span\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.cannot-create-variants-without-options' | translate }}\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div *ngIf=\"existingVariant\" class=\"mt-2\">\r\n <clr-alert clrAlertType=\"warning\" [clrAlertClosable]=\"false\" class=\"\">\r\n <clr-alert-item>\r\n <span class=\"alert-text\">\r\n {{ 'catalog.product-variant-exists' | translate }}: {{ existingVariant.name }} ({{\r\n existingVariant.sku\r\n }})\r\n </span>\r\n </clr-alert-item>\r\n </clr-alert>\r\n </div>\r\n <div class=\"form-grid mt-2\">\r\n <vdr-form-field [label]=\"'common.name' | translate\">\r\n <input type=\"text\" formControlName=\"name\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.sku' | translate\">\r\n <input type=\"text\" formControlName=\"sku\" />\r\n </vdr-form-field>\r\n <vdr-form-field [label]=\"'catalog.price' | translate\">\r\n <vdr-currency-input name=\"price\" [currencyCode]=\"currencyCode\" formControlName=\"price\" />\r\n </vdr-form-field>\r\n </div>\r\n</form>\r\n<ng-template vdrDialogButtons>\r\n <button type=\"button\" class=\"btn\" (click)=\"cancel()\">{{ 'common.cancel' | translate }}</button>\r\n <button type=\"submit\" (click)=\"confirm()\" class=\"btn btn-primary\"\r\n [disabled]=\"form.invalid || existingVariant || product.optionGroups.length === 0\">\r\n {{ 'common.confirm' | translate }}\r\n </button>\r\n</ng-template>" }]
79
79
  }], ctorParameters: () => [{ type: i1.FormBuilder }] });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBZSxXQUFXLEVBQXlCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTzdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQVN0RSxNQUFNLE9BQU8sbUNBQW1DO0lBWTVDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVDVDLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUMvQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQVMsRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztJQUk0QyxDQUFDO0lBRWhELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENB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TSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUU7WUFDMUIsR0FBRztZQUNILEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ3BCLFNBQVM7WUFDVCxZQUFZLEVBQUU7Z0JBQ1Y7b0JBQ0ksWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtvQkFDdkMsSUFBSTtpQkFDUDthQUNKO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE1BQU07UUFDRixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDdkIsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEVBQVU7UUFDakMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksSUFBSSxFQUFFLENBQUM7SUFDMUUsQ0FBQztJQUVPLGtCQUFrQixDQUFDLElBQVk7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUM7SUFDNUUsQ0FBQzs4R0FqRlEsbUNBQW1DO2tHQUFuQyxtQ0FBbUMseUVDakJoRCwwNEVBZ0RjOzsyRkQvQkQsbUNBQW1DO2tCQU4vQyxTQUFTOytCQUNJLG1DQUFtQyxtQkFHNUIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybVJlY29yZCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHtcclxuICAgIENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQsXHJcbiAgICBDdXJyZW5jeUNvZGUsXHJcbiAgICBEaWFsb2csXHJcbiAgICBHZXRQcm9kdWN0VmFyaWFudE9wdGlvbnNRdWVyeSxcclxufSBmcm9tICdAdmVuZHVyZS9hZG1pbi11aS9jb3JlJztcclxuaW1wb3J0IHsgbm90TnVsbE9yVW5kZWZpbmVkIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9zaGFyZWQtdXRpbHMnO1xyXG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAndmRyLWNyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDcmVhdGVQcm9kdWN0VmFyaWFudERpYWxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIERpYWxvZzxDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0PiwgT25Jbml0IHtcclxuICAgIHJlc29sdmVXaXRoOiAocmVzdWx0PzogQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCkgPT4gdm9pZDtcclxuICAgIHByb2R1Y3Q6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+O1xyXG4gICAgZm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIG5hbWU6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc2t1OiBbJycsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHByaWNlOiBbJyddLFxyXG4gICAgICAgIG9wdGlvbnM6IHRoaXMuZm9ybUJ1aWxkZXIucmVjb3JkPHN0cmluZz4oe30pLFxyXG4gICAgfSk7XHJcbiAgICBleGlzdGluZ1ZhcmlhbnQ6IE5vbk51bGxhYmxlPEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5Wydwcm9kdWN0J10+Wyd2YXJpYW50cyddW251bWJlcl0gfCB1bmRlZmluZWQ7XHJcbiAgICBjdXJyZW5jeUNvZGU6IEN1cnJlbmN5Q29kZTtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcikge31cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbmN5Q29kZSA9IHRoaXMucHJvZHVjdC52YXJpYW50c1swXT8uY3VycmVuY3lDb2RlO1xyXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uR3JvdXAgb2YgdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwcykge1xyXG4gICAgICAgICAgICAodGhpcy5mb3JtLmdldCgnb3B0aW9ucycpIGFzIEZvcm1SZWNvcmQpLmFkZENvbnRyb2woXHJcbiAgICAgICAgICAgICAgICBvcHRpb25Hcm91cC5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3B0aW9uc1JlY29yZCA9IHRoaXMuZm9ybS5nZXQoJ29wdGlvbnMnKSBhcyBGb3JtUmVjb3JkO1xyXG4gICAgICAgIG9wdGlvbnNSZWNvcmQudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hbWVDb250cm9sID0gdGhpcy5mb3JtLmdldCgnbmFtZScpO1xyXG4gICAgICAgICAgICBjb25zdCBhbGxOdWxsID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZXZlcnkodiA9PiB2ID09IG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoIWFsbE51bGwgJiYgdmFsdWUgJiYgbmFtZUNvbnRyb2wgJiYgIW5hbWVDb250cm9sLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuYW1lID0gT2JqZWN0LmVudHJpZXModmFsdWUpXHJcbiAgICAgICAgICAgICAgICAgICAgLm1hcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKFtncm91cENvZGUsIG9wdGlvbklkXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvZHVjdC5vcHRpb25Hcm91cHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZmluZChvZyA9PiBvZy5jb2RlID09PSBncm91cENvZGUpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPy5vcHRpb25zLmZpbmQobyA9PiBvLmlkID09PSBvcHRpb25JZCk/Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyk7XHJcbiAgICAgICAgICAgICAgICBuYW1lQ29udHJvbC5zZXRWYWx1ZShgJHt0aGlzLnByb2R1Y3QubmFtZX0gJHtuYW1lfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbFNlbGVjdGVkID0gT2JqZWN0LnZhbHVlcyh2YWx1ZSkuZXZlcnkodiA9PiB2ICE9IG51bGwpO1xyXG4gICAgICAgICAgICBpZiAoYWxsU2VsZWN0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhpc3RpbmdWYXJpYW50ID0gdGhpcy5wcm9kdWN0LnZhcmlhbnRzLmZpbmQodiA9PlxyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHZhbHVlKS5ldmVyeShcclxuICAgICAgICAgICAgICAgICAgICAgICAgKFtncm91cENvZGUsIG9wdGlvbklkXSkgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYub3B0aW9ucy5maW5kKG8gPT4gby5ncm91cElkID09PSB0aGlzLmdldEdyb3VwSWRGcm9tQ29kZShncm91cENvZGUpKT8uaWQgPT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbmZpcm0oKSB7XHJcbiAgICAgICAgY29uc3QgeyBuYW1lLCBza3UsIG9wdGlvbnMsIHByaWNlIH0gPSB0aGlzLmZvcm0udmFsdWU7XHJcbiAgICAgICAgaWYgKCFuYW1lIHx8ICFza3UgfHwgIW9wdGlvbnMgfHwgIXByaWNlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbklkcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucykuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCh7XHJcbiAgICAgICAgICAgIHByb2R1Y3RJZDogdGhpcy5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBza3UsXHJcbiAgICAgICAgICAgIHByaWNlOiBOdW1iZXIocHJpY2UpLFxyXG4gICAgICAgICAgICBvcHRpb25JZHMsXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9kdWN0Lmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBDb2RlRnJvbUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzLmZpbmQob2cgPT4gb2cuaWQgPT09IGlkKT8uY29kZSA/PyAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEdyb3VwSWRGcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzLmZpbmQob2cgPT4gb2cuY29kZSA9PT0gY29kZSk/LmlkID8/ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dUaXRsZT5cclxuICAgIHt7ICdjYXRhbG9nLmNyZWF0ZS1wcm9kdWN0LXZhcmlhbnQnIHwgdHJhbnNsYXRlIH19XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwib3B0aW9uc1wiIGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCJvcHRpb25Hcm91cC5uYW1lXCIgKm5nRm9yPVwibGV0IG9wdGlvbkdyb3VwIG9mIHByb2R1Y3Qub3B0aW9uR3JvdXBzXCI+XHJcbiAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cIm9wdGlvbkdyb3VwLm9wdGlvbnNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIm9wdGlvbkdyb3VwLmNvZGVcIiBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGNsci1hbGVydCAqbmdJZj1cInByb2R1Y3Qub3B0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMFwiIGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIiBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIj5cclxuICAgICAgICAgICAgPGNsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGVydC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY2Fubm90LWNyZWF0ZS12YXJpYW50cy13aXRob3V0LW9wdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJleGlzdGluZ1ZhcmlhbnRcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8Y2xyLWFsZXJ0IGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIiBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnByb2R1Y3QtdmFyaWFudC1leGlzdHMnIHwgdHJhbnNsYXRlIH19OiB7eyBleGlzdGluZ1ZhcmlhbnQubmFtZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1ZhcmlhbnQuc2t1XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWQgbXQtMlwiPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cuc2t1JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJza3VcIiAvPlxyXG4gICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dCBuYW1lPVwicHJpY2VcIiBbY3VycmVuY3lDb2RlXT1cImN1cnJlbmN5Q29kZVwiIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICdjb21tb24uY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGV4aXN0aW5nVmFyaWFudCB8fCBwcm9kdWN0Lm9wdGlvbkdyb3Vwcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICB7eyAnY29tbW9uLmNvbmZpcm0nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jYXRhbG9nL3NyYy9jb21wb25lbnRzL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy9jcmVhdGUtcHJvZHVjdC12YXJpYW50LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBQzNFLE9BQU8sRUFBZSxXQUFXLEVBQXlCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTzdGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDOzs7Ozs7OztBQVN0RSxNQUFNLE9BQU8sbUNBQW1DO0lBWTVDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVDVDLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUMxQixJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUMvQixHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDWCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQVMsRUFBRSxDQUFDO1NBQy9DLENBQUMsQ0FBQztJQUk0QyxDQUFDO0lBRWhELFFBQVE7UUFDSixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxPQUFPLENB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QyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMxQixHQUFHO1lBQ0gsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUM7WUFDcEIsU0FBUztZQUNULFlBQVksRUFBRTtnQkFDVjtvQkFDSSxZQUFZLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZO29CQUN2QyxJQUFJO2lCQUNQO2FBQ0o7U0FDSixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsTUFBTTtRQUNGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBVTtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUMxRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsSUFBWTtRQUNuQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztJQUM1RSxDQUFDOzhHQWpGUSxtQ0FBbUM7a0dBQW5DLG1DQUFtQyx5RUNqQmhELDA0RUFnRGM7OzJGRC9CRCxtQ0FBbUM7a0JBTi9DLFNBQVM7K0JBQ0ksbUNBQW1DLG1CQUc1Qix1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3JtUmVjb3JkLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQge1xyXG4gICAgQ3JlYXRlUHJvZHVjdFZhcmlhbnRJbnB1dCxcclxuICAgIEN1cnJlbmN5Q29kZSxcclxuICAgIERpYWxvZyxcclxuICAgIEdldFByb2R1Y3RWYXJpYW50T3B0aW9uc1F1ZXJ5LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBub3ROdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL3NoYXJlZC11dGlscyc7XHJcbmltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICdyeGpzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItY3JlYXRlLXByb2R1Y3QtdmFyaWFudC1kaWFsb2cnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NyZWF0ZS1wcm9kdWN0LXZhcmlhbnQtZGlhbG9nLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIENyZWF0ZVByb2R1Y3RWYXJpYW50RGlhbG9nQ29tcG9uZW50IGltcGxlbWVudHMgRGlhbG9nPENyZWF0ZVByb2R1Y3RWYXJpYW50SW5wdXQ+LCBPbkluaXQge1xyXG4gICAgcmVzb2x2ZVdpdGg6IChyZXN1bHQ/OiBDcmVhdGVQcm9kdWN0VmFyaWFudElucHV0KSA9PiB2b2lkO1xyXG4gICAgcHJvZHVjdDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT47XHJcbiAgICBmb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XHJcbiAgICAgICAgbmFtZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBza3U6IFsnJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgcHJpY2U6IFsnJ10sXHJcbiAgICAgICAgb3B0aW9uczogdGhpcy5mb3JtQnVpbGRlci5yZWNvcmQ8c3RyaW5nPih7fSksXHJcbiAgICB9KTtcclxuICAgIGV4aXN0aW5nVmFyaWFudDogTm9uTnVsbGFibGU8R2V0UHJvZHVjdFZhcmlhbnRPcHRpb25zUXVlcnlbJ3Byb2R1Y3QnXT5bJ3ZhcmlhbnRzJ11bbnVtYmVyXSB8IHVuZGVmaW5lZDtcclxuICAgIGN1cnJlbmN5Q29kZTogQ3VycmVuY3lDb2RlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVuY3lDb2RlID0gdGhpcy5wcm9kdWN0LnZhcmlhbnRzWzBdPy5jdXJyZW5jeUNvZGU7XHJcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb25Hcm91cCBvZiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzKSB7XHJcbiAgICAgICAgICAgICh0aGlzLmZvcm0uZ2V0KCdvcHRpb25zJykgYXMgRm9ybVJlY29yZCkuYWRkQ29udHJvbChcclxuICAgICAgICAgICAgICAgIG9wdGlvbkdyb3VwLmNvZGUsXHJcbiAgICAgICAgICAgICAgICBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBvcHRpb25zUmVjb3JkID0gdGhpcy5mb3JtLmdldCgnb3B0aW9ucycpIGFzIEZvcm1SZWNvcmQ7XHJcbiAgICAgICAgb3B0aW9uc1JlY29yZC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbmFtZUNvbnRyb2wgPSB0aGlzLmZvcm0uZ2V0KCduYW1lJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGFsbE51bGwgPSBPYmplY3QudmFsdWVzKHZhbHVlKS5ldmVyeSh2ID0+IHYgPT0gbnVsbCk7XHJcbiAgICAgICAgICAgIGlmICghYWxsTnVsbCAmJiB2YWx1ZSAmJiBuYW1lQ29udHJvbCAmJiAhbmFtZUNvbnRyb2wuZGlydHkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBPYmplY3QuZW50cmllcyh2YWx1ZSlcclxuICAgICAgICAgICAgICAgICAgICAubWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2dyb3VwQ29kZSwgb3B0aW9uSWRdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9kdWN0Lm9wdGlvbkdyb3Vwc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5maW5kKG9nID0+IG9nLmNvZGUgPT09IGdyb3VwQ29kZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/Lm9wdGlvbnMuZmluZChvID0+IG8uaWQgPT09IG9wdGlvbklkKT8ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcclxuICAgICAgICAgICAgICAgIG5hbWVDb250cm9sLnNldFZhbHVlKGAke3RoaXMucHJvZHVjdC5uYW1lfSAke25hbWV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWxsU2VsZWN0ZWQgPSBPYmplY3QudmFsdWVzKHZhbHVlKS5ldmVyeSh2ID0+IHYgIT0gbnVsbCk7XHJcbiAgICAgICAgICAgIGlmIChhbGxTZWxlY3RlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leGlzdGluZ1ZhcmlhbnQgPSB0aGlzLnByb2R1Y3QudmFyaWFudHMuZmluZCh2ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXModmFsdWUpLmV2ZXJ5KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoW2dyb3VwQ29kZSwgb3B0aW9uSWRdKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdi5vcHRpb25zLmZpbmQobyA9PiBvLmdyb3VwSWQgPT09IHRoaXMuZ2V0R3JvdXBJZEZyb21Db2RlKGdyb3VwQ29kZSkpPy5pZCA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbklkLFxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uZmlybSgpIHtcclxuICAgICAgICBjb25zdCB7IG5hbWUsIHNrdSwgb3B0aW9ucywgcHJpY2UgfSA9IHRoaXMuZm9ybS52YWx1ZTtcclxuICAgICAgICBpZiAoIW5hbWUgfHwgIXNrdSB8fCAhb3B0aW9ucyB8fCBwcmljZSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG9wdGlvbklkcyA9IE9iamVjdC52YWx1ZXMob3B0aW9ucykuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCh7XHJcbiAgICAgICAgICAgIHByb2R1Y3RJZDogdGhpcy5wcm9kdWN0LmlkLFxyXG4gICAgICAgICAgICBza3UsXHJcbiAgICAgICAgICAgIHByaWNlOiBOdW1iZXIocHJpY2UpLFxyXG4gICAgICAgICAgICBvcHRpb25JZHMsXHJcbiAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZTogdGhpcy5wcm9kdWN0Lmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjYW5jZWwoKSB7XHJcbiAgICAgICAgdGhpcy5yZXNvbHZlV2l0aCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0R3JvdXBDb2RlRnJvbUlkKGlkOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzLmZpbmQob2cgPT4gb2cuaWQgPT09IGlkKT8uY29kZSA/PyAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEdyb3VwSWRGcm9tQ29kZShjb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb2R1Y3Qub3B0aW9uR3JvdXBzLmZpbmQob2cgPT4gb2cuY29kZSA9PT0gY29kZSk/LmlkID8/ICcnO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSB2ZHJEaWFsb2dUaXRsZT5cclxuICAgIHt7ICdjYXRhbG9nLmNyZWF0ZS1wcm9kdWN0LXZhcmlhbnQnIHwgdHJhbnNsYXRlIH19XHJcbjwvbmctdGVtcGxhdGU+XHJcbjxmb3JtIFtmb3JtR3JvdXBdPVwiZm9ybVwiPlxyXG4gICAgPGRpdiBmb3JtR3JvdXBOYW1lPVwib3B0aW9uc1wiIGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCJvcHRpb25Hcm91cC5uYW1lXCIgKm5nRm9yPVwibGV0IG9wdGlvbkdyb3VwIG9mIHByb2R1Y3Qub3B0aW9uR3JvdXBzXCI+XHJcbiAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cIm9wdGlvbkdyb3VwLm9wdGlvbnNcIiBbZm9ybUNvbnRyb2xOYW1lXT1cIm9wdGlvbkdyb3VwLmNvZGVcIiBiaW5kTGFiZWw9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgIGJpbmRWYWx1ZT1cImlkXCIgYXBwZW5kVG89XCJib2R5XCI+XHJcbiAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPGNsci1hbGVydCAqbmdJZj1cInByb2R1Y3Qub3B0aW9uR3JvdXBzLmxlbmd0aCA9PT0gMFwiIGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIiBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1ncmlkLXNwYW5cIj5cclxuICAgICAgICAgICAgPGNsci1hbGVydC1pdGVtPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhbGVydC10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgJ2NhdGFsb2cuY2Fubm90LWNyZWF0ZS12YXJpYW50cy13aXRob3V0LW9wdGlvbnMnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJleGlzdGluZ1ZhcmlhbnRcIiBjbGFzcz1cIm10LTJcIj5cclxuICAgICAgICA8Y2xyLWFsZXJ0IGNsckFsZXJ0VHlwZT1cIndhcm5pbmdcIiBbY2xyQWxlcnRDbG9zYWJsZV09XCJmYWxzZVwiIGNsYXNzPVwiXCI+XHJcbiAgICAgICAgICAgIDxjbHItYWxlcnQtaXRlbT5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWxlcnQtdGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLnByb2R1Y3QtdmFyaWFudC1leGlzdHMnIHwgdHJhbnNsYXRlIH19OiB7eyBleGlzdGluZ1ZhcmlhbnQubmFtZSB9fSAoe3tcclxuICAgICAgICAgICAgICAgICAgICBleGlzdGluZ1ZhcmlhbnQuc2t1XHJcbiAgICAgICAgICAgICAgICAgICAgfX0pXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvY2xyLWFsZXJ0LWl0ZW0+XHJcbiAgICAgICAgPC9jbHItYWxlcnQ+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyaWQgbXQtMlwiPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cuc2t1JyB8IHRyYW5zbGF0ZVwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJza3VcIiAvPlxyXG4gICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY2F0YWxvZy5wcmljZScgfCB0cmFuc2xhdGVcIj5cclxuICAgICAgICAgICAgPHZkci1jdXJyZW5jeS1pbnB1dCBuYW1lPVwicHJpY2VcIiBbY3VycmVuY3lDb2RlXT1cImN1cnJlbmN5Q29kZVwiIGZvcm1Db250cm9sTmFtZT1cInByaWNlXCIgLz5cclxuICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgPC9kaXY+XHJcbjwvZm9ybT5cclxuPG5nLXRlbXBsYXRlIHZkckRpYWxvZ0J1dHRvbnM+XHJcbiAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0blwiIChjbGljayk9XCJjYW5jZWwoKVwiPnt7ICdjb21tb24uY2FuY2VsJyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkIHx8IGV4aXN0aW5nVmFyaWFudCB8fCBwcm9kdWN0Lm9wdGlvbkdyb3Vwcy5sZW5ndGggPT09IDBcIj5cclxuICAgICAgICB7eyAnY29tbW9uLmNvbmZpcm0nIHwgdHJhbnNsYXRlIH19XHJcbiAgICA8L2J1dHRvbj5cclxuPC9uZy10ZW1wbGF0ZT4iXX0=
@@ -16,13 +16,13 @@ import * as i3 from "@clr/angular";
16
16
  import * as i4 from "@angular/common";
17
17
  import * as i5 from "ngx-pagination";
18
18
  import * as i6 from "@ngx-translate/core";
19
- export const FACET_DETAIL_QUERY = gql `
20
- query GetFacetDetail($id: ID!, $facetValueListOptions: FacetValueListOptions) {
21
- facet(id: $id) {
22
- ...FacetWithValueList
23
- }
24
- }
25
- ${FACET_WITH_VALUE_LIST_FRAGMENT}
19
+ export const FACET_DETAIL_QUERY = gql `
20
+ query GetFacetDetail($id: ID!, $facetValueListOptions: FacetValueListOptions) {
21
+ facet(id: $id) {
22
+ ...FacetWithValueList
23
+ }
24
+ }
25
+ ${FACET_WITH_VALUE_LIST_FRAGMENT}
26
26
  `;
27
27
  export class FacetDetailComponent extends TypedBaseDetailComponent {
28
28
  constructor(changeDetector, dataService, formBuilder, notificationService, modalService) {
@@ -335,4 +335,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImpor
335
335
  type: Component,
336
336
  args: [{ selector: 'vdr-facet-detail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<vdr-page-block>\r\n <vdr-action-bar>\r\n <vdr-ab-left>\r\n <vdr-language-selector\r\n [disabled]=\"isNew$ | async\"\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 <vdr-action-bar-items locationId=\"facet-detail\" />\r\n <button\r\n class=\"btn btn-primary\"\r\n *ngIf=\"isNew$ | async; else updateButton\"\r\n (click)=\"create()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.create' | translate }}\r\n </button>\r\n <ng-template #updateButton>\r\n <button\r\n *vdrIfPermissions=\"updatePermission\"\r\n class=\"btn btn-primary\"\r\n (click)=\"save()\"\r\n [disabled]=\"detailForm.invalid || detailForm.pristine\"\r\n >\r\n {{ 'common.update' | translate }}\r\n </button>\r\n </ng-template>\r\n <vdr-action-bar-dropdown-menu locationId=\"facet-detail\" />\r\n </vdr-ab-right>\r\n </vdr-action-bar>\r\n</vdr-page-block>\r\n<form class=\"form\" [formGroup]=\"detailForm\">\r\n <vdr-page-detail-layout>\r\n <vdr-page-detail-sidebar formGroupName=\"facet\">\r\n <vdr-card>\r\n <vdr-form-field [label]=\"'catalog.visibility' | translate\" for=\"visibility\">\r\n <clr-toggle-wrapper>\r\n <input\r\n type=\"checkbox\"\r\n clrToggle\r\n [vdrDisabled]=\"!(updatePermission | hasPermission)\"\r\n formControlName=\"visible\"\r\n id=\"visibility\"\r\n />\r\n <label class=\"visible-toggle\">\r\n <ng-container *ngIf=\"detailForm.value.facet?.visible; else private\">{{\r\n 'catalog.public' | translate\r\n }}</ng-container>\r\n <ng-template #private>{{ 'catalog.private' | translate }}</ng-template>\r\n </label>\r\n </clr-toggle-wrapper>\r\n </vdr-form-field>\r\n </vdr-card>\r\n <vdr-card>\r\n <vdr-page-entity-info *ngIf=\"entity$ | async as entity\" [entity]=\"entity\" />\r\n </vdr-card>\r\n </vdr-page-detail-sidebar>\r\n <vdr-page-block>\r\n <vdr-card formGroupName=\"facet\">\r\n <div class=\"form-grid\">\r\n <vdr-form-field [label]=\"'common.name' | translate\" for=\"name\">\r\n <input\r\n id=\"name\"\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateCode(entity?.code, $event.target.value)\"\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\"\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 </vdr-card>\r\n <vdr-card [title]=\"'common.custom-fields' | translate\" *ngIf=\"customFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"Facet\"\r\n [customFields]=\"customFields\"\r\n [customFieldsFormGroup]=\"detailForm.get('facet.customFields')\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n />\r\n </vdr-card>\r\n\r\n <vdr-custom-detail-component-host\r\n locationId=\"facet-detail\"\r\n [entity$]=\"entity$\"\r\n [detailForm]=\"detailForm\"\r\n ></vdr-custom-detail-component-host>\r\n\r\n <vdr-card\r\n *ngIf=\"!(isNew$ | async)\"\r\n [title]=\"'catalog.facet-values' | translate\"\r\n [paddingX]=\"false\"\r\n >\r\n <ng-template vdrCardControls>\r\n <input\r\n type=\"text\"\r\n class=\"mr-3\"\r\n [formControl]=\"filterControl\"\r\n [placeholder]=\"'catalog.filter-by-name' | translate\"\r\n />\r\n </ng-template>\r\n <ng-container *ngIf=\"values$ | async as filteredValues\">\r\n <table class=\"facet-values-list table\" formArrayName=\"values\">\r\n <thead>\r\n <tr>\r\n <th></th>\r\n <th>{{ 'common.name' | translate }}</th>\r\n <th>{{ 'common.code' | translate }}</th>\r\n <ng-container *ngIf=\"customValueFields.length\">\r\n <th>{{ 'common.custom-fields' | translate }}</th>\r\n </ng-container>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr\r\n class=\"facet-value\"\r\n *ngFor=\"\r\n let value of filteredValues\r\n | paginate\r\n : {\r\n currentPage: currentPage,\r\n itemsPerPage: itemsPerPage,\r\n totalItems: totalItems,\r\n };\r\n let i = index\r\n \"\r\n [formGroup]=\"detailForm.get(['values', value.id])\"\r\n >\r\n <td class=\"align-middle\">\r\n <vdr-entity-info [entity]=\"value\"></vdr-entity-info>\r\n </td>\r\n <td class=\"align-middle\">\r\n <input\r\n type=\"text\"\r\n formControlName=\"name\"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n (input)=\"updateValueCode(value.code, $event.target.value, value.id)\"\r\n />\r\n </td>\r\n <td class=\"align-middle\">\r\n <input type=\"text\" formControlName=\"code\" />\r\n </td>\r\n <td class=\"\" *ngIf=\"customValueFields.length\">\r\n <vdr-tabbed-custom-fields\r\n entityName=\"FacetValue\"\r\n [customFields]=\"customValueFields\"\r\n [compact]=\"true\"\r\n [customFieldsFormGroup]=\"\r\n detailForm.get(['values', value.id, 'customFields'])\r\n \"\r\n [readonly]=\"!(updatePermission | hasPermission)\"\r\n ></vdr-tabbed-custom-fields>\r\n </td>\r\n <td class=\"align-middle\">\r\n <vdr-dropdown>\r\n <button type=\"button\" class=\"icon-button\" vdrDropdownTrigger>\r\n <clr-icon shape=\"ellipsis-vertical\"></clr-icon>\r\n </button>\r\n <vdr-dropdown-menu vdrPosition=\"bottom-right\">\r\n <button\r\n type=\"button\"\r\n class=\"delete-button\"\r\n (click)=\"deleteFacetValue(value.id)\"\r\n [disabled]=\"!(updatePermission | hasPermission)\"\r\n vdrDropdownItem\r\n >\r\n <clr-icon shape=\"trash\" class=\"is-danger\"></clr-icon>\r\n {{ 'common.delete' | translate }}\r\n </button>\r\n </vdr-dropdown-menu>\r\n </vdr-dropdown>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n <div class=\"pagination-wrapper\">\r\n <vdr-items-per-page-controls\r\n [itemsPerPage]=\"itemsPerPage\"\r\n (itemsPerPageChange)=\"setItemsPerPage($event)\"\r\n ></vdr-items-per-page-controls>\r\n <vdr-pagination-controls\r\n [currentPage]=\"currentPage\"\r\n [itemsPerPage]=\"itemsPerPage\"\r\n [totalItems]=\"totalItems\"\r\n (pageChange)=\"setCurrentPage($event)\"\r\n ></vdr-pagination-controls>\r\n </div>\r\n </ng-container>\r\n <div>\r\n <button\r\n type=\"button\"\r\n class=\"button m-3\"\r\n *vdrIfPermissions=\"['CreateCatalog', 'CreateFacet']\"\r\n (click)=\"addFacetValue()\"\r\n >\r\n <clr-icon shape=\"add\"></clr-icon>\r\n {{ 'catalog.add-facet-value' | translate }}\r\n </button>\r\n </div>\r\n </vdr-card>\r\n </vdr-page-block>\r\n </vdr-page-detail-layout>\r\n</form>\r\n", styles: [".visible-toggle{margin-top:-3px!important}tr.facet-value td{vertical-align:middle}.pagination-wrapper{display:flex;justify-content:space-between;padding:var(--card-padding)}\n"] }]
337
337
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.DataService }, { type: i2.FormBuilder }, { type: i1.NotificationService }, { type: i1.ModalService }] });
338
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBRUgsV0FBVyxFQUdYLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBRXpCLGNBQWMsRUFDZCw4QkFBOEIsRUFFOUIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixzQkFBc0IsRUFNdEIsVUFBVSxFQUNWLHdCQUF3QixHQUczQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUs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RUFBRSxLQUFLO1lBQ3BCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsWUFBWTtZQUNaLGtCQUFrQixFQUFFO2dCQUNoQixZQUFZO2dCQUNaLElBQUksRUFBRSxFQUFFO2FBQ1g7U0FDSixDQUFDLENBQ0w7YUFDQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNwQyxDQUFDOzhHQXBZUSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrRUMxRGpDLGltV0FzTkE7OzJGRDVKYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgRm9ybUJ1aWxkZXIsXG4gICAgRm9ybUNvbnRyb2wsXG4gICAgRm9ybUdyb3VwLFxuICAgIEZvcm1SZWNvcmQsXG4gICAgVW50eXBlZEZvcm1Db250cm9sLFxuICAgIFVudHlwZWRGb3JtR3JvdXAsXG4gICAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgbWFya2VyIGFzIF8gfSBmcm9tICdAYmllc2JqZXJnL25neC10cmFuc2xhdGUtZXh0cmFjdC1tYXJrZXInO1xuaW1wb3J0IHtcbiAgICBDcmVhdGVGYWNldElucHV0LFxuICAgIGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUsXG4gICAgRGF0YVNlcnZpY2UsXG4gICAgRGVsZXRpb25SZXN1bHQsXG4gICAgRkFDRVRfV0lUSF9WQUxVRV9MSVNUX0ZSQUdNRU5ULFxuICAgIEZhY2V0V2l0aFZhbHVlTGlzdEZyYWdtZW50LFxuICAgIGZpbmRUcmFuc2xhdGlvbixcbiAgICBnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyxcbiAgICBHZXRGYWNldERldGFpbERvY3VtZW50LFxuICAgIEdldEZhY2V0RGV0YWlsUXVlcnksXG4gICAgR2V0RmFjZXREZXRhaWxRdWVyeVZhcmlhYmxlcyxcbiAgICBMYW5ndWFnZUNvZGUsXG4gICAgTW9kYWxTZXJ2aWNlLFxuICAgIE5vdGlmaWNhdGlvblNlcnZpY2UsXG4gICAgUGVybWlzc2lvbixcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXG4gICAgVXBkYXRlRmFjZXRJbnB1dCxcbiAgICBVcGRhdGVGYWNldFZhbHVlSW5wdXQsXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9nZW5lcmF0ZWQtdHlwZXMnO1xuaW1wb3J0IHsgbm9ybWFsaXplU3RyaW5nIH0gZnJvbSAnQHZlbmR1cmUvY29tbW9uL2xpYi9ub3JtYWxpemUtc3RyaW5nJztcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcbmltcG9ydCB7IGdxbCB9IGZyb20gJ2Fwb2xsby1hbmd1bGFyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgRU1QVFksIGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQ3JlYXRlRmFjZXRWYWx1ZURpYWxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2NyZWF0ZS1mYWNldC12YWx1ZS1kaWFsb2cvY3JlYXRlLWZhY2V0LXZhbHVlLWRpYWxvZy5jb21wb25lbnQnO1xuXG5leHBvcnQgY29uc3QgRkFDRVRfREVUQUlMX1FVRVJZID0gZ3FsYFxuICAgIHF1ZXJ5IEdldEZhY2V0RGV0YWlsKCRpZDogSUQhLCAkZmFjZXRWYWx1ZUxpc3RPcHRpb25zOiBGYWNldFZhbHVlTGlzdE9wdGlvbnMpIHtcbiAgICAgICAgZmFjZXQoaWQ6ICRpZCkge1xuICAgICAgICAgICAgLi4uRmFjZXRXaXRoVmFsdWVMaXN0XG4gICAgICAgIH1cbiAgICB9XG4gICAgJHtGQUNFVF9XSVRIX1ZBTFVFX0xJU1RfRlJBR01FTlR9XG5gO1xuXG50eXBlIFZhbHVlSXRlbSA9XG4gICAgfCBGYWNldFdpdGhWYWx1ZUxpc3RGcmFnbWVudFsndmFsdWVMaXN0J11bJ2l0ZW1zJ11bbnVtYmVyXVxuICAgIHwgeyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9O1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3Zkci1mYWNldC1kZXRhaWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYWNldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZhY2V0LWRldGFpbC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGYWNldERldGFpbENvbXBvbmVudFxuICAgIGV4dGVuZHMgVHlwZWRCYXNlRGV0YWlsQ29tcG9uZW50PHR5cGVvZiBHZXRGYWNldERldGFpbERvY3VtZW50LCAnZmFjZXQnPlxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcbntcbiAgICByZWFkb25seSBjdXN0b21GaWVsZHMgPSB0aGlzLmdldEN1c3RvbUZpZWxkQ29uZmlnKCdGYWNldCcpO1xuICAgIHJlYWRvbmx5IGN1c3RvbVZhbHVlRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnRmFjZXRWYWx1ZScpO1xuICAgIGRldGFpbEZvcm0gPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgICAgZmFjZXQ6IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgICAgICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcbiAgICAgICAgICAgIG5hbWU6ICcnLFxuICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyh0aGlzLmN1c3RvbUZpZWxkcykpLFxuICAgICAgICB9KSxcbiAgICAgICAgdmFsdWVzOiB0aGlzLmZvcm1CdWlsZGVyLnJlY29yZDxcbiAgICAgICAgICAgIEZvcm1Hcm91cDx7XG4gICAgICAgICAgICAgICAgaWQ6IEZvcm1Db250cm9sPHN0cmluZz47XG4gICAgICAgICAgICAgICAgbmFtZTogRm9ybUNvbnRyb2w8c3RyaW5nPjtcbiAgICAgICAgICAgICAgICBjb2RlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xuICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkczogRm9ybUdyb3VwO1xuICAgICAgICAgICAgfT5cbiAgICAgICAgPih7fSksXG4gICAgfSk7XG4gICAgY3VycmVudFBhZ2UgPSAxO1xuICAgIGl0ZW1zUGVyUGFnZSA9IDEwO1xuICAgIHRvdGFsSXRlbXMgPSAwO1xuICAgIGZpbHRlckNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woJycpO1xuICAgIHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHVlSXRlbVtdPihbXSk7XG4gICAgcmVhZG9ubHkgdXBkYXRlUGVybWlzc2lvbiA9IFtQZXJtaXNzaW9uLlVwZGF0ZUNhdGFsb2csIFBlcm1pc3Npb24uVXBkYXRlRmFjZXRdO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICBwcm90ZWN0ZWQgZGF0YVNlcnZpY2U6IERhdGFTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICAgICAgcHJpdmF0ZSBub3RpZmljYXRpb25TZXJ2aWNlOiBOb3RpZmljYXRpb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTW9kYWxTZXJ2aWNlLFxuICAgICkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmluaXQoKTtcbiAgICAgICAgdGhpcy5maWx0ZXJDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDIwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoZmlsdGVyVGVybSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlLCBmaWx0ZXJUZXJtKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB1cGRhdGVDb2RlKGN1cnJlbnRDb2RlOiBzdHJpbmcsIG5hbWVWYWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICghY3VycmVudENvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ2ZhY2V0JywgJ2NvZGUnXSk7XG4gICAgICAgICAgICBpZiAoY29kZUNvbnRyb2wgJiYgY29kZUNvbnRyb2wucHJpc3RpbmUpIHtcbiAgICAgICAgICAgICAgICBjb2RlQ29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVTdHJpbmcobmFtZVZhbHVlLCAnLScpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVZhbHVlQ29kZShjdXJyZW50Q29kZTogc3RyaW5nLCBuYW1lVmFsdWU6IHN0cmluZywgdmFsdWVJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICghY3VycmVudENvZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvZGVDb250cm9sID0gdGhpcy5kZXRhaWxGb3JtLmdldChbJ3ZhbHVlcycsIHZhbHVlSWQsICdjb2RlJ10pO1xuICAgICAgICAgICAgaWYgKGNvZGVDb250cm9sICYmIGNvZGVDb250cm9sLnByaXN0aW5lKSB7XG4gICAgICAgICAgICAgICAgY29kZUNvbnRyb2wuc2V0VmFsdWUobm9ybWFsaXplU3RyaW5nKG5hbWVWYWx1ZSwgJy0nKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjdXN0b21WYWx1ZUZpZWxkSXNTZXQoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCBpbmRleCwgJ2N1c3RvbUZpZWxkcycsIG5hbWVdKTtcbiAgICB9XG5cbiAgICBhZGRGYWNldFZhbHVlKCkge1xuICAgICAgICB0aGlzLm1vZGFsU2VydmljZVxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQ3JlYXRlRmFjZXRWYWx1ZURpYWxvZ0NvbXBvbmVudCwge1xuICAgICAgICAgICAgICAgIGxvY2Fsczoge1xuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICBmYWNldElkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3VsdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhU2VydmljZS5mYWNldC5jcmVhdGVGYWNldFZhbHVlcyhbcmVzdWx0XSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNyZWF0ZUZhY2V0VmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXRWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjcmVhdGUoKSB7XG4gICAgICAgIGNvbnN0IGZhY2V0Rm9ybSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZhY2V0JykgYXMgKHR5cGVvZiB0aGlzLmRldGFpbEZvcm0pWydjb250cm9scyddWydmYWNldCddO1xuICAgICAgICBpZiAoIWZhY2V0Rm9ybSB8fCAhZmFjZXRGb3JtLmRpcnR5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3RmFjZXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZDogJycsXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0OiAnJyxcbiAgICAgICAgICAgICAgICB1cGRhdGVkQXQ6ICcnLFxuICAgICAgICAgICAgICAgIGlzUHJpdmF0ZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZhY2V0Rm9ybSxcbiAgICAgICAgICAgIHRoaXMubGFuZ3VhZ2VDb2RlLFxuICAgICAgICApIGFzIENyZWF0ZUZhY2V0SW5wdXQ7XG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQuY3JlYXRlRmFjZXQobmV3RmFjZXQpLnN1YnNjcmliZShcbiAgICAgICAgICAgIGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLXN1Y2Nlc3MnKSwgeyBlbnRpdHk6ICdGYWNldCcgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy4uLycsIGRhdGEuY3JlYXRlRmFjZXQuaWRdLCB7IHJlbGF0aXZlVG86IHRoaXMucm91dGUgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS1jcmVhdGUtZXJyb3InKSwge1xuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdGYWNldCcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIHNhdmUoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlc0Zvcm1SZWNvcmQgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFxuICAgICAgICAgICAgJ3ZhbHVlcycsXG4gICAgICAgICkgYXMgKHR5cGVvZiB0aGlzLmRldGFpbEZvcm0pWydjb250cm9scyddWyd2YWx1ZXMnXTtcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLmVudGl0eSQsIHRoaXMubGFuZ3VhZ2VDb2RlJClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgbWVyZ2VNYXAoKFtmYWNldCwgbGFuZ3VhZ2VDb2RlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmYWNldEZvcm0gPSB0aGlzLmRldGFpbEZvcm0uZ2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2V0JyxcbiAgICAgICAgICAgICAgICAgICAgKSBhcyAodHlwZW9mIHRoaXMuZGV0YWlsRm9ybSlbJ2NvbnRyb2xzJ11bJ2ZhY2V0J107XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZU9wZXJhdGlvbnM6IEFycmF5PE9ic2VydmFibGU8YW55Pj4gPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoZmFjZXRGb3JtICYmIGZhY2V0Rm9ybS5kaXJ0eSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZEZhY2V0SW5wdXQgPSB0aGlzLmdldFVwZGF0ZWRGYWNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldEZvcm0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVGYWNldElucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRGYWNldElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlT3BlcmF0aW9ucy5wdXNoKHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQudXBkYXRlRmFjZXQodXBkYXRlZEZhY2V0SW5wdXQpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWVzRm9ybVJlY29yZCAmJiB2YWx1ZXNGb3JtUmVjb3JkLmRpcnR5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWVzID0gdGhpcy5nZXRVcGRhdGVkRmFjZXRWYWx1ZXModmFsdWVzRm9ybVJlY29yZCwgbGFuZ3VhZ2VDb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cGRhdGVkVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaCh0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LnVwZGF0ZUZhY2V0VmFsdWVzKHVwZGF0ZWRWYWx1ZXMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9ya0pvaW4odXBkYXRlT3BlcmF0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwgeyBlbnRpdHk6ICdGYWNldCcgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXQnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBkZWxldGVGYWNldFZhbHVlKGZhY2V0VmFsdWVJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXNwb25zZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHQgPT09IERlbGV0aW9uUmVzdWx0LkRFTEVURUQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZV07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zaG93TW9kYWxBbmREZWxldGUoZmFjZXRWYWx1ZUlkLCByZXNwb25zZS5tZXNzYWdlIHx8ICcnKS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyID0+IHIucmVzdWx0ID09PSBEZWxldGlvblJlc3VsdC5ERUxFVEVEKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoZGVsZXRlZCA9PlxuICAgICAgICAgICAgICAgICAgICBkZWxldGVkXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucXVlcnkoR2V0RmFjZXREZXRhaWxEb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0pLnNpbmdsZSRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10sXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1zdWNjZXNzJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLmZpbHRlckNvbnRyb2wudmFsdWUpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktZGVsZXRlLWVycm9yJyksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNob3dNb2RhbEFuZERlbGV0ZShmYWNldFZhbHVlSWQ6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RhbFNlcnZpY2VcbiAgICAgICAgICAgIC5kaWFsb2coe1xuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLmNvbmZpcm0tZGVsZXRlLWZhY2V0LXZhbHVlJyksXG4gICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcbiAgICAgICAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcbiAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZGFuZ2VyJywgbGFiZWw6IF8oJ2NvbW1vbi5kZWxldGUnKSwgcmV0dXJuVmFsdWU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT5cbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID8gdGhpcy5kYXRhU2VydmljZS5mYWNldC5kZWxldGVGYWNldFZhbHVlcyhbZmFjZXRWYWx1ZUlkXSwgISFtZXNzYWdlKSA6IEVNUFRZLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHQuZGVsZXRlRmFjZXRWYWx1ZXNbMF0pLFxuICAgICAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2V0Q3VycmVudFBhZ2UobmV3UGFnZTogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSBuZXdQYWdlO1xuICAgICAgICB0aGlzLmZldGNoRmFjZXRWYWx1ZXModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5pdGVtc1BlclBhZ2UsIHRoaXMuZmlsdGVyQ29udHJvbC52YWx1ZSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHNldEl0ZW1zUGVyUGFnZShpdGVtc1BlclBhZ2U6IG51bWJlcikge1xuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IGl0ZW1zUGVyUGFnZTtcbiAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLmZpbHRlckNvbnRyb2wudmFsdWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmV0Y2hGYWNldFZhbHVlcyhjdXJyZW50UGFnZTogbnVtYmVyLCBpdGVtc1BlclBhZ2U6IG51bWJlciwgZmlsdGVyVGVybT86IHN0cmluZyB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5kYXRhU2VydmljZVxuICAgICAgICAgICAgLnF1ZXJ5PEdldEZhY2V0RGV0YWlsUXVlcnksIEdldEZhY2V0RGV0YWlsUXVlcnlWYXJpYWJsZXM+KEZBQ0VUX0RFVEFJTF9RVUVSWSwge1xuICAgICAgICAgICAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgICAgICAgICAgIGZhY2V0VmFsdWVMaXN0T3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICB0YWtlOiBpdGVtc1BlclBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIHNraXA6IChjdXJyZW50UGFnZSAtIDEpICogaXRlbXNQZXJQYWdlLFxuICAgICAgICAgICAgICAgICAgICBzb3J0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAuLi4oZmlsdGVyVGVybSA/IHsgZmlsdGVyOiB7IG5hbWU6IHsgY29udGFpbnM6IGZpbHRlclRlcm0gfSB9IH0gOiB7fSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc2luZ2xlJC5zdWJzY3JpYmUoKHsgZmFjZXQgfSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChmYWNldCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZhbHVlcyQubmV4dChbLi4uZmFjZXQudmFsdWVMaXN0Lml0ZW1zXSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGZhY2V0LnZhbHVlTGlzdC50b3RhbEl0ZW1zO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZhY2V0VmFsdWVGb3JtVmFsdWVzKGZhY2V0LCB0aGlzLmxhbmd1YWdlQ29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGZhY2V0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNldEZvcm1WYWx1ZXMoZmFjZXQ6IEZhY2V0V2l0aFZhbHVlTGlzdEZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24oZmFjZXQsIGxhbmd1YWdlQ29kZSk7XG5cbiAgICAgICAgdGhpcy5kZXRhaWxGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgZmFjZXQ6IHtcbiAgICAgICAgICAgICAgICBjb2RlOiBmYWNldC5jb2RlLFxuICAgICAgICAgICAgICAgIHZpc2libGU6ICFmYWNldC5pc1ByaXZhdGUsXG4gICAgICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRoaXMuY3VzdG9tRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZXRDdXN0b21GaWVsZEZvcm1WYWx1ZXMoXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLmdldChbJ2ZhY2V0JywgJ2N1c3RvbUZpZWxkcyddKSxcbiAgICAgICAgICAgICAgICBmYWNldCxcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24sXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KFsuLi5mYWNldC52YWx1ZUxpc3QuaXRlbXNdKTtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gZmFjZXQudmFsdWVMaXN0LnRvdGFsSXRlbXM7XG4gICAgICAgIHRoaXMuc2V0RmFjZXRWYWx1ZUZvcm1WYWx1ZXMoZmFjZXQsIGxhbmd1YWdlQ29kZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGYWNldFZhbHVlRm9ybVZhbHVlcyhmYWNldDogRmFjZXRXaXRoVmFsdWVMaXN0RnJhZ21lbnQsIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXNGb3JtR3JvdXAgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCd2YWx1ZXMnKSBhcyBGb3JtUmVjb3JkO1xuICAgICAgICBmYWNldC52YWx1ZUxpc3QuaXRlbXMuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZVRyYW5zbGF0aW9uID0gZmluZFRyYW5zbGF0aW9uKHZhbHVlLCBsYW5ndWFnZUNvZGUpO1xuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHZhbHVlLmlkLFxuICAgICAgICAgICAgICAgIGNvZGU6IHZhbHVlLmNvZGUsXG4gICAgICAgICAgICAgICAgbmFtZTogdmFsdWVUcmFuc2xhdGlvbiA/IHZhbHVlVHJhbnNsYXRpb24ubmFtZSA6ICcnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGxldCB2YWx1ZUNvbnRyb2wgPSBjdXJyZW50VmFsdWVzRm9ybUdyb3VwLmdldCh2YWx1ZS5pZCkgYXMgRm9ybUdyb3VwO1xuICAgICAgICAgICAgaWYgKCF2YWx1ZUNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKGdyb3VwKTtcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVzRm9ybUdyb3VwLmFkZENvbnRyb2wodmFsdWUuaWQsIHZhbHVlQ29udHJvbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5wYXRjaFZhbHVlKGdyb3VwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlRmllbGRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGxldCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwID0gdmFsdWVDb250cm9sLmdldChbJ2N1c3RvbUZpZWxkcyddKSBhc1xuICAgICAgICAgICAgICAgICAgICB8IFVudHlwZWRGb3JtR3JvdXBcbiAgICAgICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaWYgKCFjdXN0b21WYWx1ZUZpZWxkc0dyb3VwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSBuZXcgVW50eXBlZEZvcm1Hcm91cCh7fSk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkRGVmIG9mIHRoaXMuY3VzdG9tVmFsdWVGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGZpZWxkRGVmLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZERlZi50eXBlID09PSAnbG9jYWxlU3RyaW5nJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICh2YWx1ZVRyYW5zbGF0aW9uIGFzIGFueSB8IHVuZGVmaW5lZCk/LmN1c3RvbUZpZWxkcz8uW2tleV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodmFsdWUgYXMgYW55KS5jdXN0b21GaWVsZHNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLmdldChrZXkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGZpZWxkVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwLmFkZENvbnRyb2woa2V5LCBuZXcgVW50eXBlZEZvcm1Db250cm9sKGZpZWxkVmFsdWUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2l2ZW4gYSBmYWNldCBhbmQgdGhlIHZhbHVlIG9mIHRoZSBkZXRhaWxGb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGFuIHVwZGF0ZWQgY29weSBvZiB0aGUgZmFjZXQgd2hpY2hcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFVwZGF0ZWRGYWNldChcbiAgICAgICAgZmFjZXQ6IE9taXQ8RmFjZXRXaXRoVmFsdWVMaXN0RnJhZ21lbnQsICd2YWx1ZUxpc3QnPixcbiAgICAgICAgZmFjZXRGb3JtR3JvdXA6ICh0eXBlb2YgdGhpcy5kZXRhaWxGb3JtKVsnY29udHJvbHMnXVsnZmFjZXQnXSxcbiAgICAgICAgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUsXG4gICAgKTogQ3JlYXRlRmFjZXRJbnB1dCB8IFVwZGF0ZUZhY2V0SW5wdXQge1xuICAgICAgICBjb25zdCBpbnB1dCA9IGNyZWF0ZVVwZGF0ZWRUcmFuc2xhdGFibGUoe1xuICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiBmYWNldCxcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZhY2V0Rm9ybUdyb3VwLnZhbHVlLFxuICAgICAgICAgICAgY3VzdG9tRmllbGRDb25maWc6IHRoaXMuY3VzdG9tRmllbGRzLFxuICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XG4gICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgIG5hbWU6IGZhY2V0Lm5hbWUgfHwgJycsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgaW5wdXQuaXNQcml2YXRlID0gIWZhY2V0Rm9ybUdyb3VwLnZhbHVlLnZpc2libGU7XG4gICAgICAgIHJldHVybiBpbnB1dDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHaXZlbiBhbiBhcnJheSBvZiBmYWNldCB2YWx1ZXMgYW5kIHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhIG5ldyBhcnJheVxuICAgICAqIHdoaWNoIGNhbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSSB2aWEgYW4gdXBkYXRlRmFjZXRWYWx1ZXMgbXV0YXRpb24uXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkRmFjZXRWYWx1ZXMoXG4gICAgICAgIHZhbHVlc0Zvcm1Hcm91cDogRm9ybUdyb3VwLFxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcbiAgICApOiBVcGRhdGVGYWNldFZhbHVlSW5wdXRbXSB7XG4gICAgICAgIGNvbnN0IGRpcnR5VmFsdWVWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHZhbHVlc0Zvcm1Hcm91cC5jb250cm9scylcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpcnR5KVxuICAgICAgICAgICAgLm1hcChjID0+IGMudmFsdWUpO1xuXG4gICAgICAgIHJldHVybiBkaXJ0eVZhbHVlVmFsdWVzXG4gICAgICAgICAgICAubWFwKCh2YWx1ZSwgaSkgPT5cbiAgICAgICAgICAgICAgICBjcmVhdGVVcGRhdGVkVHJhbnNsYXRhYmxlKHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlZEZpZWxkczogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbUZpZWxkQ29uZmlnOiB0aGlzLmN1c3RvbVZhbHVlRmllbGRzLFxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRUcmFuc2xhdGlvbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJycsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZmlsdGVyKG5vdE51bGxPclVuZGVmaW5lZCk7XG4gICAgfVxufVxuIiwiPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgPHZkci1hY3Rpb24tYmFyPlxyXG4gICAgICAgIDx2ZHItYWItbGVmdD5cclxuICAgICAgICAgICAgPHZkci1sYW5ndWFnZS1zZWxlY3RvclxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTmV3JCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFthdmFpbGFibGVMYW5ndWFnZUNvZGVzXT1cImF2YWlsYWJsZUxhbmd1YWdlcyQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICBbY3VycmVudExhbmd1YWdlQ29kZV09XCJsYW5ndWFnZUNvZGUkIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgKGxhbmd1YWdlQ29kZUNoYW5nZSk9XCJzZXRMYW5ndWFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgPjwvdmRyLWxhbmd1YWdlLXNlbGVjdG9yPlxyXG4gICAgICAgIDwvdmRyLWFiLWxlZnQ+XHJcblxyXG4gICAgICAgIDx2ZHItYWItcmlnaHQ+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1pdGVtcyBsb2NhdGlvbklkPVwiZmFjZXQtZGV0YWlsXCIgLz5cclxuICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc05ldyQgfCBhc3luYzsgZWxzZSB1cGRhdGVCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cImNyZWF0ZSgpXCJcclxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkZXRhaWxGb3JtLmludmFsaWQgfHwgZGV0YWlsRm9ybS5wcmlzdGluZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIHt7ICdjb21tb24uY3JlYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN1cGRhdGVCdXR0b24+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKnZkcklmUGVybWlzc2lvbnM9XCJ1cGRhdGVQZXJtaXNzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lXCJcclxuICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLnVwZGF0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICA8dmRyLWFjdGlvbi1iYXItZHJvcGRvd24tbWVudSBsb2NhdGlvbklkPVwiZmFjZXQtZGV0YWlsXCIgLz5cclxuICAgICAgICA8L3Zkci1hYi1yaWdodD5cclxuICAgIDwvdmRyLWFjdGlvbi1iYXI+XHJcbjwvdmRyLXBhZ2UtYmxvY2s+XHJcbjxmb3JtIGNsYXNzPVwiZm9ybVwiIFtmb3JtR3JvdXBdPVwiZGV0YWlsRm9ybVwiPlxyXG4gICAgPHZkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbiAgICAgICAgPHZkci1wYWdlLWRldGFpbC1zaWRlYmFyIGZvcm1Hcm91cE5hbWU9XCJmYWNldFwiPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjYXRhbG9nLnZpc2liaWxpdHknIHwgdHJhbnNsYXRlXCIgZm9yPVwidmlzaWJpbGl0eVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxjbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsclRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZkckRpc2FibGVkXT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInZpc2libGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ2aXNpYmlsaXR5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwidmlzaWJsZS10b2dnbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkZXRhaWxGb3JtLnZhbHVlLmZhY2V0Py52aXNpYmxlOyBlbHNlIHByaXZhdGVcIj57e1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjYXRhbG9nLnB1YmxpYycgfCB0cmFuc2xhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3ByaXZhdGU+e3sgJ2NhdGFsb2cucHJpdmF0ZScgfCB0cmFuc2xhdGUgfX08L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvY2xyLXRvZ2dsZS13cmFwcGVyPlxyXG4gICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkPlxyXG4gICAgICAgICAgICAgICAgPHZkci1wYWdlLWVudGl0eS1pbmZvICpuZ0lmPVwiZW50aXR5JCB8IGFzeW5jIGFzIGVudGl0eVwiIFtlbnRpdHldPVwiZW50aXR5XCIgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWRldGFpbC1zaWRlYmFyPlxyXG4gICAgICAgIDx2ZHItcGFnZS1ibG9jaz5cclxuICAgICAgICAgICAgPHZkci1jYXJkIGZvcm1Hcm91cE5hbWU9XCJmYWNldFwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZVwiIGZvcj1cIm5hbWVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZUNvZGUoZW50aXR5Py5jb2RlLCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgPC92ZHItZm9ybS1maWVsZD5cclxuICAgICAgICAgICAgICAgICAgICA8dmRyLWZvcm0tZmllbGQgW2xhYmVsXT1cIidjb21tb24uY29kZScgfCB0cmFuc2xhdGVcIiBmb3I9XCJjb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdmRyLWNhcmQ+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZCBbdGl0bGVdPVwiJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZVwiICpuZ0lmPVwiY3VzdG9tRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJGYWNldFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21GaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiZGV0YWlsRm9ybS5nZXQoJ2ZhY2V0LmN1c3RvbUZpZWxkcycpXCJcclxuICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdFxyXG4gICAgICAgICAgICAgICAgbG9jYXRpb25JZD1cImZhY2V0LWRldGFpbFwiXHJcbiAgICAgICAgICAgICAgICBbZW50aXR5JF09XCJlbnRpdHkkXCJcclxuICAgICAgICAgICAgICAgIFtkZXRhaWxGb3JtXT1cImRldGFpbEZvcm1cIlxyXG4gICAgICAgICAgICA+PC92ZHItY3VzdG9tLWRldGFpbC1jb21wb25lbnQtaG9zdD5cclxuXHJcbiAgICAgICAgICAgIDx2ZHItY2FyZFxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhKGlzTmV3JCB8IGFzeW5jKVwiXHJcbiAgICAgICAgICAgICAgICBbdGl0bGVdPVwiJ2NhdGFsb2cuZmFjZXQtdmFsdWVzJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICBbcGFkZGluZ1hdPVwiZmFsc2VcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgdmRyQ2FyZENvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibXItM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmaWx0ZXJDb250cm9sXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidjYXRhbG9nLmZpbHRlci1ieS1uYW1lJyB8IHRyYW5zbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidmFsdWVzJCB8IGFzeW5jIGFzIGZpbHRlcmVkVmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwiZmFjZXQtdmFsdWVzLWxpc3QgdGFibGVcIiBmb3JtQXJyYXlOYW1lPVwidmFsdWVzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ2NvbW1vbi5uYW1lJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdjb21tb24uY29kZScgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjdXN0b21WYWx1ZUZpZWxkcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPnt7ICdjb21tb24uY3VzdG9tLWZpZWxkcycgfCB0cmFuc2xhdGUgfX08L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC90aGVhZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmYWNldC12YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSBvZiBmaWx0ZXJlZFZhbHVlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwYWdpbmF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQYWdlOiBjdXJyZW50UGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtc1BlclBhZ2U6IGl0ZW1zUGVyUGFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3RhbEl0ZW1zOiB0b3RhbEl0ZW1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSBpbmRleFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldChbJ3ZhbHVlcycsIHZhbHVlLmlkXSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWVudGl0eS1pbmZvIFtlbnRpdHldPVwidmFsdWVcIj48L3Zkci1lbnRpdHktaW5mbz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cIm5hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJ1cGRhdGVWYWx1ZUNvZGUodmFsdWUuY29kZSwgJGV2ZW50LnRhcmdldC52YWx1ZSwgdmFsdWUuaWQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBmb3JtQ29udHJvbE5hbWU9XCJjb2RlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cIlwiICpuZ0lmPVwiY3VzdG9tVmFsdWVGaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItdGFiYmVkLWN1c3RvbS1maWVsZHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU5hbWU9XCJGYWNldFZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNdPVwiY3VzdG9tVmFsdWVGaWVsZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbXBhY3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzRm9ybUdyb3VwXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGFpbEZvcm0uZ2V0KFsndmFsdWVzJywgdmFsdWUuaWQsICdjdXN0b21GaWVsZHMnXSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItdGFiYmVkLWN1c3RvbS1maWVsZHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhbGlnbi1taWRkbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci1kcm9wZG93bj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiaWNvbi1idXR0b25cIiB2ZHJEcm9wZG93blRyaWdnZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwiZWxsaXBzaXMtdmVydGljYWxcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duLW1lbnUgdmRyUG9zaXRpb249XCJib3R0b20tcmlnaHRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImRlbGV0ZS1idXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlRmFjZXRWYWx1ZSh2YWx1ZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZHJEcm9wZG93bkl0ZW1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cInRyYXNoXCIgY2xhc3M9XCJpcy1kYW5nZXJcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnY29tbW9uLmRlbGV0ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duLW1lbnU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBhZ2luYXRpb24td3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaXRlbXNQZXJQYWdlQ2hhbmdlKT1cInNldEl0ZW1zUGVyUGFnZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvdmRyLWl0ZW1zLXBlci1wYWdlLWNvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dmRyLXBhZ2luYXRpb24tY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cInNldEN1cnJlbnRQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItcGFnaW5hdGlvbi1jb250cm9scz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ1dHRvbiBtLTNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cIlsnQ3JlYXRlQ2F0YWxvZycsICdDcmVhdGVGYWNldCddXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImFkZEZhY2V0VmFsdWUoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJhZGRcIj48L2Nsci1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAnY2F0YWxvZy5hZGQtZmFjZXQtdmFsdWUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICA8L3Zkci1wYWdlLWJsb2NrPlxyXG4gICAgPC92ZHItcGFnZS1kZXRhaWwtbGF5b3V0PlxyXG48L2Zvcm0+XHJcbiJdfQ==
338
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvY2F0YWxvZy9zcmMvY29tcG9uZW50cy9mYWNldC1kZXRhaWwvZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBcUIsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBRUgsV0FBVyxFQUdYLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsVUFBVSxHQUNiLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUN0RSxPQUFPLEVBRUgseUJBQXlCLEVBRXpCLGNBQWMsRUFDZCw4QkFBOEIsRUFFOUIsZUFBZSxFQUNmLHVCQUF1QixFQUN2QixzQkFBc0IsRUFNdEIsVUFBVSxFQUNWLHdCQUF3QixHQUczQixNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbkYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUs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RUFBRSxLQUFLO1lBQ3BCLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7WUFDekMsWUFBWTtZQUNaLGtCQUFrQixFQUFFO2dCQUNoQixZQUFZO2dCQUNaLElBQUksRUFBRSxFQUFFO2FBQ1g7U0FDSixDQUFDLENBQ0w7YUFDQSxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNwQyxDQUFDOzhHQXBZUSxvQkFBb0I7a0dBQXBCLG9CQUFvQiwrRUMxRGpDLGltV0FzTkE7OzJGRDVKYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgIEZvcm1CdWlsZGVyLFxyXG4gICAgRm9ybUNvbnRyb2wsXHJcbiAgICBGb3JtR3JvdXAsXHJcbiAgICBGb3JtUmVjb3JkLFxyXG4gICAgVW50eXBlZEZvcm1Db250cm9sLFxyXG4gICAgVW50eXBlZEZvcm1Hcm91cCxcclxuICAgIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBtYXJrZXIgYXMgXyB9IGZyb20gJ0BiaWVzYmplcmcvbmd4LXRyYW5zbGF0ZS1leHRyYWN0LW1hcmtlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDcmVhdGVGYWNldElucHV0LFxyXG4gICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSxcclxuICAgIERhdGFTZXJ2aWNlLFxyXG4gICAgRGVsZXRpb25SZXN1bHQsXHJcbiAgICBGQUNFVF9XSVRIX1ZBTFVFX0xJU1RfRlJBR01FTlQsXHJcbiAgICBGYWNldFdpdGhWYWx1ZUxpc3RGcmFnbWVudCxcclxuICAgIGZpbmRUcmFuc2xhdGlvbixcclxuICAgIGdldEN1c3RvbUZpZWxkc0RlZmF1bHRzLFxyXG4gICAgR2V0RmFjZXREZXRhaWxEb2N1bWVudCxcclxuICAgIEdldEZhY2V0RGV0YWlsUXVlcnksXHJcbiAgICBHZXRGYWNldERldGFpbFF1ZXJ5VmFyaWFibGVzLFxyXG4gICAgTGFuZ3VhZ2VDb2RlLFxyXG4gICAgTW9kYWxTZXJ2aWNlLFxyXG4gICAgTm90aWZpY2F0aW9uU2VydmljZSxcclxuICAgIFBlcm1pc3Npb24sXHJcbiAgICBUeXBlZEJhc2VEZXRhaWxDb21wb25lbnQsXHJcbiAgICBVcGRhdGVGYWNldElucHV0LFxyXG4gICAgVXBkYXRlRmFjZXRWYWx1ZUlucHV0LFxyXG59IGZyb20gJ0B2ZW5kdXJlL2FkbWluLXVpL2NvcmUnO1xyXG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tICdAdmVuZHVyZS9jb21tb24vbGliL2dlbmVyYXRlZC10eXBlcyc7XHJcbmltcG9ydCB7IG5vcm1hbGl6ZVN0cmluZyB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvbm9ybWFsaXplLXN0cmluZyc7XHJcbmltcG9ydCB7IG5vdE51bGxPclVuZGVmaW5lZCB9IGZyb20gJ0B2ZW5kdXJlL2NvbW1vbi9saWIvc2hhcmVkLXV0aWxzJztcclxuaW1wb3J0IHsgZ3FsIH0gZnJvbSAnYXBvbGxvLWFuZ3VsYXInO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIEVNUFRZLCBmb3JrSm9pbiwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgbWVyZ2VNYXAsIHN3aXRjaE1hcCwgdGFrZSwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBDcmVhdGVGYWNldFZhbHVlRGlhbG9nQ29tcG9uZW50IH0gZnJvbSAnLi4vY3JlYXRlLWZhY2V0LXZhbHVlLWRpYWxvZy9jcmVhdGUtZmFjZXQtdmFsdWUtZGlhbG9nLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY29uc3QgRkFDRVRfREVUQUlMX1FVRVJZID0gZ3FsYFxyXG4gICAgcXVlcnkgR2V0RmFjZXREZXRhaWwoJGlkOiBJRCEsICRmYWNldFZhbHVlTGlzdE9wdGlvbnM6IEZhY2V0VmFsdWVMaXN0T3B0aW9ucykge1xyXG4gICAgICAgIGZhY2V0KGlkOiAkaWQpIHtcclxuICAgICAgICAgICAgLi4uRmFjZXRXaXRoVmFsdWVMaXN0XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgJHtGQUNFVF9XSVRIX1ZBTFVFX0xJU1RfRlJBR01FTlR9XHJcbmA7XHJcblxyXG50eXBlIFZhbHVlSXRlbSA9XHJcbiAgICB8IEZhY2V0V2l0aFZhbHVlTGlzdEZyYWdtZW50Wyd2YWx1ZUxpc3QnXVsnaXRlbXMnXVtudW1iZXJdXHJcbiAgICB8IHsgaWQ6IHN0cmluZzsgbmFtZTogc3RyaW5nOyBjb2RlOiBzdHJpbmcgfTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICd2ZHItZmFjZXQtZGV0YWlsJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9mYWNldC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vZmFjZXQtZGV0YWlsLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEZhY2V0RGV0YWlsQ29tcG9uZW50XHJcbiAgICBleHRlbmRzIFR5cGVkQmFzZURldGFpbENvbXBvbmVudDx0eXBlb2YgR2V0RmFjZXREZXRhaWxEb2N1bWVudCwgJ2ZhY2V0Jz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3lcclxue1xyXG4gICAgcmVhZG9ubHkgY3VzdG9tRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnRmFjZXQnKTtcclxuICAgIHJlYWRvbmx5IGN1c3RvbVZhbHVlRmllbGRzID0gdGhpcy5nZXRDdXN0b21GaWVsZENvbmZpZygnRmFjZXRWYWx1ZScpO1xyXG4gICAgZGV0YWlsRm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xyXG4gICAgICAgIGZhY2V0OiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcclxuICAgICAgICAgICAgY29kZTogWycnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgIHZpc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgIGN1c3RvbUZpZWxkczogdGhpcy5mb3JtQnVpbGRlci5ncm91cChnZXRDdXN0b21GaWVsZHNEZWZhdWx0cyh0aGlzLmN1c3RvbUZpZWxkcykpLFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIHZhbHVlczogdGhpcy5mb3JtQnVpbGRlci5yZWNvcmQ8XHJcbiAgICAgICAgICAgIEZvcm1Hcm91cDx7XHJcbiAgICAgICAgICAgICAgICBpZDogRm9ybUNvbnRyb2w8c3RyaW5nPjtcclxuICAgICAgICAgICAgICAgIG5hbWU6IEZvcm1Db250cm9sPHN0cmluZz47XHJcbiAgICAgICAgICAgICAgICBjb2RlOiBGb3JtQ29udHJvbDxzdHJpbmc+O1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tRmllbGRzOiBGb3JtR3JvdXA7XHJcbiAgICAgICAgICAgIH0+XHJcbiAgICAgICAgPih7fSksXHJcbiAgICB9KTtcclxuICAgIGN1cnJlbnRQYWdlID0gMTtcclxuICAgIGl0ZW1zUGVyUGFnZSA9IDEwO1xyXG4gICAgdG90YWxJdGVtcyA9IDA7XHJcbiAgICBmaWx0ZXJDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCcnKTtcclxuICAgIHZhbHVlcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbHVlSXRlbVtdPihbXSk7XHJcbiAgICByZWFkb25seSB1cGRhdGVQZXJtaXNzaW9uID0gW1Blcm1pc3Npb24uVXBkYXRlQ2F0YWxvZywgUGVybWlzc2lvbi5VcGRhdGVGYWNldF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIGRhdGFTZXJ2aWNlOiBEYXRhU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcclxuICAgICAgICBwcml2YXRlIG5vdGlmaWNhdGlvblNlcnZpY2U6IE5vdGlmaWNhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE1vZGFsU2VydmljZSxcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5pbml0KCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJDb250cm9sLnZhbHVlQ2hhbmdlc1xyXG4gICAgICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoMjAwKSwgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGZpbHRlclRlcm0gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZldGNoRmFjZXRWYWx1ZXModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5pdGVtc1BlclBhZ2UsIGZpbHRlclRlcm0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICB0aGlzLmRlc3Ryb3koKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDb2RlKGN1cnJlbnRDb2RlOiBzdHJpbmcsIG5hbWVWYWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWydmYWNldCcsICdjb2RlJ10pO1xyXG4gICAgICAgICAgICBpZiAoY29kZUNvbnRyb2wgJiYgY29kZUNvbnRyb2wucHJpc3RpbmUpIHtcclxuICAgICAgICAgICAgICAgIGNvZGVDb250cm9sLnNldFZhbHVlKG5vcm1hbGl6ZVN0cmluZyhuYW1lVmFsdWUsICctJykpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVZhbHVlQ29kZShjdXJyZW50Q29kZTogc3RyaW5nLCBuYW1lVmFsdWU6IHN0cmluZywgdmFsdWVJZDogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKCFjdXJyZW50Q29kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBjb2RlQ29udHJvbCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCB2YWx1ZUlkLCAnY29kZSddKTtcclxuICAgICAgICAgICAgaWYgKGNvZGVDb250cm9sICYmIGNvZGVDb250cm9sLnByaXN0aW5lKSB7XHJcbiAgICAgICAgICAgICAgICBjb2RlQ29udHJvbC5zZXRWYWx1ZShub3JtYWxpemVTdHJpbmcobmFtZVZhbHVlLCAnLScpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjdXN0b21WYWx1ZUZpZWxkSXNTZXQoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5kZXRhaWxGb3JtLmdldChbJ3ZhbHVlcycsIGluZGV4LCAnY3VzdG9tRmllbGRzJywgbmFtZV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZhY2V0VmFsdWUoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RhbFNlcnZpY2VcclxuICAgICAgICAgICAgLmZyb21Db21wb25lbnQoQ3JlYXRlRmFjZXRWYWx1ZURpYWxvZ0NvbXBvbmVudCwge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGFuZ3VhZ2VDb2RlOiB0aGlzLmxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICBmYWNldElkOiB0aGlzLmlkLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQuY3JlYXRlRmFjZXRWYWx1ZXMoW3Jlc3VsdF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY3JlYXRlRmFjZXRWYWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5OiAnRmFjZXRWYWx1ZScsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3JlYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IGZhY2V0Rm9ybSA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoJ2ZhY2V0JykgYXMgKHR5cGVvZiB0aGlzLmRldGFpbEZvcm0pWydjb250cm9scyddWydmYWNldCddO1xyXG4gICAgICAgIGlmICghZmFjZXRGb3JtIHx8ICFmYWNldEZvcm0uZGlydHkpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXdGYWNldCA9IHRoaXMuZ2V0VXBkYXRlZEZhY2V0KFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBpZDogJycsXHJcbiAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6ICcnLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlZEF0OiAnJyxcclxuICAgICAgICAgICAgICAgIGlzUHJpdmF0ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGU6IHRoaXMubGFuZ3VhZ2VDb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiAnJyxcclxuICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uczogW10sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZhY2V0Rm9ybSxcclxuICAgICAgICAgICAgdGhpcy5sYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgKSBhcyBDcmVhdGVGYWNldElucHV0O1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2UuZmFjZXQuY3JlYXRlRmFjZXQobmV3RmFjZXQpLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2Uuc3VjY2VzcyhfKCdjb21tb24ubm90aWZ5LWNyZWF0ZS1zdWNjZXNzJyksIHsgZW50aXR5OiAnRmFjZXQnIH0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxGb3JtLm1hcmtBc1ByaXN0aW5lKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoWycuLi8nLCBkYXRhLmNyZWF0ZUZhY2V0LmlkXSwgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLmVycm9yKF8oJ2NvbW1vbi5ub3RpZnktY3JlYXRlLWVycm9yJyksIHtcclxuICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdGYWNldCcsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmUoKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWVzRm9ybVJlY29yZCA9IHRoaXMuZGV0YWlsRm9ybS5nZXQoXHJcbiAgICAgICAgICAgICd2YWx1ZXMnLFxyXG4gICAgICAgICkgYXMgKHR5cGVvZiB0aGlzLmRldGFpbEZvcm0pWydjb250cm9scyddWyd2YWx1ZXMnXTtcclxuICAgICAgICBjb21iaW5lTGF0ZXN0KHRoaXMuZW50aXR5JCwgdGhpcy5sYW5ndWFnZUNvZGUkKVxyXG4gICAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgICAgIHRha2UoMSksXHJcbiAgICAgICAgICAgICAgICBtZXJnZU1hcCgoW2ZhY2V0LCBsYW5ndWFnZUNvZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmFjZXRGb3JtID0gdGhpcy5kZXRhaWxGb3JtLmdldChcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2ZhY2V0JyxcclxuICAgICAgICAgICAgICAgICAgICApIGFzICh0eXBlb2YgdGhpcy5kZXRhaWxGb3JtKVsnY29udHJvbHMnXVsnZmFjZXQnXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVPcGVyYXRpb25zOiBBcnJheTxPYnNlcnZhYmxlPGFueT4+ID0gW107XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmYWNldEZvcm0gJiYgZmFjZXRGb3JtLmRpcnR5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVwZGF0ZWRGYWNldElucHV0ID0gdGhpcy5nZXRVcGRhdGVkRmFjZXQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhY2V0Rm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSBhcyBVcGRhdGVGYWNldElucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodXBkYXRlZEZhY2V0SW5wdXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZU9wZXJhdGlvbnMucHVzaCh0aGlzLmRhdGFTZXJ2aWNlLmZhY2V0LnVwZGF0ZUZhY2V0KHVwZGF0ZWRGYWNldElucHV0KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlc0Zvcm1SZWNvcmQgJiYgdmFsdWVzRm9ybVJlY29yZC5kaXJ0eSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkVmFsdWVzID0gdGhpcy5nZXRVcGRhdGVkRmFjZXRWYWx1ZXModmFsdWVzRm9ybVJlY29yZCwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVwZGF0ZWRWYWx1ZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVPcGVyYXRpb25zLnB1c2godGhpcy5kYXRhU2VydmljZS5mYWNldC51cGRhdGVGYWNldFZhbHVlcyh1cGRhdGVkVmFsdWVzKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luKHVwZGF0ZU9wZXJhdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5zdWNjZXNzKF8oJ2NvbW1vbi5ub3RpZnktdXBkYXRlLXN1Y2Nlc3MnKSwgeyBlbnRpdHk6ICdGYWNldCcgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgZXJyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5vdGlmaWNhdGlvblNlcnZpY2UuZXJyb3IoXygnY29tbW9uLm5vdGlmeS11cGRhdGUtZXJyb3InKSwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbnRpdHk6ICdGYWNldCcsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGRlbGV0ZUZhY2V0VmFsdWUoZmFjZXRWYWx1ZUlkOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLnNob3dNb2RhbEFuZERlbGV0ZShmYWNldFZhbHVlSWQpXHJcbiAgICAgICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0ID09PSBEZWxldGlvblJlc3VsdC5ERUxFVEVEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbdHJ1ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2hvd01vZGFsQW5kRGVsZXRlKGZhY2V0VmFsdWVJZCwgcmVzcG9uc2UubWVzc2FnZSB8fCAnJykucGlwZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcChyID0+IHIucmVzdWx0ID09PSBEZWxldGlvblJlc3VsdC5ERUxFVEVEKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChkZWxldGVkID0+XHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMuZGF0YVNlcnZpY2UucXVlcnkoR2V0RmFjZXREZXRhaWxEb2N1bWVudCwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogdGhpcy5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KS5zaW5nbGUkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogW10sXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZmljYXRpb25TZXJ2aWNlLnN1Y2Nlc3MoXygnY29tbW9uLm5vdGlmeS1kZWxldGUtc3VjY2VzcycpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmV0Y2hGYWNldFZhbHVlcyh0aGlzLmN1cnJlbnRQYWdlLCB0aGlzLml0ZW1zUGVyUGFnZSwgdGhpcy5maWx0ZXJDb250cm9sLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9uU2VydmljZS5lcnJvcihfKCdjb21tb24ubm90aWZ5LWRlbGV0ZS1lcnJvcicpLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eTogJ0ZhY2V0VmFsdWUnLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNob3dNb2RhbEFuZERlbGV0ZShmYWNldFZhbHVlSWQ6IHN0cmluZywgbWVzc2FnZT86IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1vZGFsU2VydmljZVxyXG4gICAgICAgICAgICAuZGlhbG9nKHtcclxuICAgICAgICAgICAgICAgIHRpdGxlOiBfKCdjYXRhbG9nLmNvbmZpcm0tZGVsZXRlLWZhY2V0LXZhbHVlJyksXHJcbiAgICAgICAgICAgICAgICBib2R5OiBtZXNzYWdlLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ3NlY29uZGFyeScsIGxhYmVsOiBfKCdjb21tb24uY2FuY2VsJykgfSxcclxuICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdkYW5nZXInLCBsYWJlbDogXygnY29tbW9uLmRlbGV0ZScpLCByZXR1cm5WYWx1ZTogdHJ1ZSB9LFxyXG4gICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID8gdGhpcy5kYXRhU2VydmljZS5mYWNldC5kZWxldGVGYWNldFZhbHVlcyhbZmFjZXRWYWx1ZUlkXSwgISFtZXNzYWdlKSA6IEVNUFRZLFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIG1hcChyZXN1bHQgPT4gcmVzdWx0LmRlbGV0ZUZhY2V0VmFsdWVzWzBdKSxcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgc2V0Q3VycmVudFBhZ2UobmV3UGFnZTogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IG5ld1BhZ2U7XHJcbiAgICAgICAgdGhpcy5mZXRjaEZhY2V0VmFsdWVzKHRoaXMuY3VycmVudFBhZ2UsIHRoaXMuaXRlbXNQZXJQYWdlLCB0aGlzLmZpbHRlckNvbnRyb2wudmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBzZXRJdGVtc1BlclBhZ2UoaXRlbXNQZXJQYWdlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLml0ZW1zUGVyUGFnZSA9IGl0ZW1zUGVyUGFnZTtcclxuICAgICAgICB0aGlzLmZldGNoRmFjZXRWYWx1ZXModGhpcy5jdXJyZW50UGFnZSwgdGhpcy5pdGVtc1BlclBhZ2UsIHRoaXMuZmlsdGVyQ29udHJvbC52YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmZXRjaEZhY2V0VmFsdWVzKGN1cnJlbnRQYWdlOiBudW1iZXIsIGl0ZW1zUGVyUGFnZTogbnVtYmVyLCBmaWx0ZXJUZXJtPzogc3RyaW5nIHwgbnVsbCkge1xyXG4gICAgICAgIHRoaXMuZGF0YVNlcnZpY2VcclxuICAgICAgICAgICAgLnF1ZXJ5PEdldEZhY2V0RGV0YWlsUXVlcnksIEdldEZhY2V0RGV0YWlsUXVlcnlWYXJpYWJsZXM+KEZBQ0VUX0RFVEFJTF9RVUVSWSwge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuaWQsXHJcbiAgICAgICAgICAgICAgICBmYWNldFZhbHVlTGlzdE9wdGlvbnM6IHtcclxuICAgICAgICAgICAgICAgICAgICB0YWtlOiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc2tpcDogKGN1cnJlbnRQYWdlIC0gMSkgKiBpdGVtc1BlclBhZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkQXQ6IFNvcnRPcmRlci5ERVNDLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgLi4uKGZpbHRlclRlcm0gPyB7IGZpbHRlcjogeyBuYW1lOiB7IGNvbnRhaW5zOiBmaWx0ZXJUZXJtIH0gfSB9IDoge30pLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnNpbmdsZSQuc3Vic2NyaWJlKCh7IGZhY2V0IH0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChmYWNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KFsuLi5mYWNldC52YWx1ZUxpc3QuaXRlbXNdKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBmYWNldC52YWx1ZUxpc3QudG90YWxJdGVtcztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEZhY2V0VmFsdWVGb3JtVmFsdWVzKGZhY2V0LCB0aGlzLmxhbmd1YWdlQ29kZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdmFsdWVzIG9mIHRoZSBmb3JtIG9uIGNoYW5nZXMgdG8gdGhlIGZhY2V0IG9yIGN1cnJlbnQgbGFuZ3VhZ2UuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBzZXRGb3JtVmFsdWVzKGZhY2V0OiBGYWNldFdpdGhWYWx1ZUxpc3RGcmFnbWVudCwgbGFuZ3VhZ2VDb2RlOiBMYW5ndWFnZUNvZGUpIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VHJhbnNsYXRpb24gPSBmaW5kVHJhbnNsYXRpb24oZmFjZXQsIGxhbmd1YWdlQ29kZSk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV0YWlsRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZmFjZXQ6IHtcclxuICAgICAgICAgICAgICAgIGNvZGU6IGZhY2V0LmNvZGUsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhZmFjZXQuaXNQcml2YXRlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogY3VycmVudFRyYW5zbGF0aW9uPy5uYW1lID8/ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXN0b21GaWVsZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q3VzdG9tRmllbGRGb3JtVmFsdWVzKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRldGFpbEZvcm0uZ2V0KFsnZmFjZXQnLCAnY3VzdG9tRmllbGRzJ10pLFxyXG4gICAgICAgICAgICAgICAgZmFjZXQsXHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VHJhbnNsYXRpb24sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmFsdWVzJC5uZXh0KFsuLi5mYWNldC52YWx1ZUxpc3QuaXRlbXNdKTtcclxuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBmYWNldC52YWx1ZUxpc3QudG90YWxJdGVtcztcclxuICAgICAgICB0aGlzLnNldEZhY2V0VmFsdWVGb3JtVmFsdWVzKGZhY2V0LCBsYW5ndWFnZUNvZGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0RmFjZXRWYWx1ZUZvcm1WYWx1ZXMoZmFjZXQ6IEZhY2V0V2l0aFZhbHVlTGlzdEZyYWdtZW50LCBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZXNGb3JtR3JvdXAgPSB0aGlzLmRldGFpbEZvcm0uZ2V0KCd2YWx1ZXMnKSBhcyBGb3JtUmVjb3JkO1xyXG4gICAgICAgIGZhY2V0LnZhbHVlTGlzdC5pdGVtcy5mb3JFYWNoKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWVUcmFuc2xhdGlvbiA9IGZpbmRUcmFuc2xhdGlvbih2YWx1ZSwgbGFuZ3VhZ2VDb2RlKTtcclxuICAgICAgICAgICAgY29uc3QgZ3JvdXAgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogdmFsdWUuaWQsXHJcbiAgICAgICAgICAgICAgICBjb2RlOiB2YWx1ZS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdmFsdWVUcmFuc2xhdGlvbiA/IHZhbHVlVHJhbnNsYXRpb24ubmFtZSA6ICcnLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBsZXQgdmFsdWVDb250cm9sID0gY3VycmVudFZhbHVlc0Zvcm1Hcm91cC5nZXQodmFsdWUuaWQpIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgaWYgKCF2YWx1ZUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlc0Zvcm1Hcm91cC5hZGRDb250cm9sKHZhbHVlLmlkLCB2YWx1ZUNvbnRyb2wpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sLnBhdGNoVmFsdWUoZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1c3RvbVZhbHVlRmllbGRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAgPSB2YWx1ZUNvbnRyb2wuZ2V0KFsnY3VzdG9tRmllbGRzJ10pIGFzXHJcbiAgICAgICAgICAgICAgICAgICAgfCBVbnR5cGVkRm9ybUdyb3VwXHJcbiAgICAgICAgICAgICAgICAgICAgfCB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWN1c3RvbVZhbHVlRmllbGRzR3JvdXApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwID0gbmV3IFVudHlwZWRGb3JtR3JvdXAoe30pO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbC5hZGRDb250cm9sKCdjdXN0b21GaWVsZHMnLCBjdXN0b21WYWx1ZUZpZWxkc0dyb3VwKTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY3VzdG9tVmFsdWVGaWVsZHNHcm91cCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGREZWYgb2YgdGhpcy5jdXN0b21WYWx1ZUZpZWxkcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBmaWVsZERlZi5uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRGVmLnR5cGUgPT09ICdsb2NhbGVTdHJpbmcnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAodmFsdWVUcmFuc2xhdGlvbiBhcyBhbnkgfCB1bmRlZmluZWQpPy5jdXN0b21GaWVsZHM/LltrZXldXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAodmFsdWUgYXMgYW55KS5jdXN0b21GaWVsZHNba2V5XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udHJvbCA9IGN1c3RvbVZhbHVlRmllbGRzR3JvdXAuZ2V0KGtleSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sLnNldFZhbHVlKGZpZWxkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tVmFsdWVGaWVsZHNHcm91cC5hZGRDb250cm9sKGtleSwgbmV3IFVudHlwZWRGb3JtQ29udHJvbChmaWVsZFZhbHVlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgZmFjZXQgYW5kIHRoZSB2YWx1ZSBvZiB0aGUgZGV0YWlsRm9ybSwgdGhpcyBtZXRob2QgY3JlYXRlcyBhbiB1cGRhdGVkIGNvcHkgb2YgdGhlIGZhY2V0IHdoaWNoXHJcbiAgICAgKiBjYW4gdGhlbiBiZSBwZXJzaXN0ZWQgdG8gdGhlIEFQSS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBnZXRVcGRhdGVkRmFjZXQoXHJcbiAgICAgICAgZmFjZXQ6IE9taXQ8RmFjZXRXaXRoVmFsdWVMaXN0RnJhZ21lbnQsICd2YWx1ZUxpc3QnPixcclxuICAgICAgICBmYWNldEZvcm1Hcm91cDogKHR5cGVvZiB0aGlzLmRldGFpbEZvcm0pWydjb250cm9scyddWydmYWNldCddLFxyXG4gICAgICAgIGxhbmd1YWdlQ29kZTogTGFuZ3VhZ2VDb2RlLFxyXG4gICAgKTogQ3JlYXRlRmFjZXRJbnB1dCB8IFVwZGF0ZUZhY2V0SW5wdXQge1xyXG4gICAgICAgIGNvbnN0IGlucHV0ID0gY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgIHRyYW5zbGF0YWJsZTogZmFjZXQsXHJcbiAgICAgICAgICAgIHVwZGF0ZWRGaWVsZHM6IGZhY2V0Rm9ybUdyb3VwLnZhbHVlLFxyXG4gICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21GaWVsZHMsXHJcbiAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBmYWNldC5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlucHV0LmlzUHJpdmF0ZSA9ICFmYWNldEZvcm1Hcm91cC52YWx1ZS52aXNpYmxlO1xyXG4gICAgICAgIHJldHVybiBpbnB1dDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGFuIGFycmF5IG9mIGZhY2V0IHZhbHVlcyBhbmQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXRhaWxGb3JtLCB0aGlzIG1ldGhvZCBjcmVhdGVzIGEgbmV3IGFycmF5XHJcbiAgICAgKiB3aGljaCBjYW4gYmUgcGVyc2lzdGVkIHRvIHRoZSBBUEkgdmlhIGFuIHVwZGF0ZUZhY2V0VmFsdWVzIG11dGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGdldFVwZGF0ZWRGYWNldFZhbHVlcyhcclxuICAgICAgICB2YWx1ZXNGb3JtR3JvdXA6IEZvcm1Hcm91cCxcclxuICAgICAgICBsYW5ndWFnZUNvZGU6IExhbmd1YWdlQ29kZSxcclxuICAgICk6IFVwZGF0ZUZhY2V0VmFsdWVJbnB1dFtdIHtcclxuICAgICAgICBjb25zdCBkaXJ0eVZhbHVlVmFsdWVzID0gT2JqZWN0LnZhbHVlcyh2YWx1ZXNGb3JtR3JvdXAuY29udHJvbHMpXHJcbiAgICAgICAgICAgIC5maWx0ZXIoYyA9PiBjLmRpcnR5KVxyXG4gICAgICAgICAgICAubWFwKGMgPT4gYy52YWx1ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBkaXJ0eVZhbHVlVmFsdWVzXHJcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlLCBpKSA9PlxyXG4gICAgICAgICAgICAgICAgY3JlYXRlVXBkYXRlZFRyYW5zbGF0YWJsZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRhYmxlOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVkRmllbGRzOiB2YWx1ZSxcclxuICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWVsZENvbmZpZzogdGhpcy5jdXN0b21WYWx1ZUZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRyYW5zbGF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5maWx0ZXIobm90TnVsbE9yVW5kZWZpbmVkKTtcclxuICAgIH1cclxufVxyXG4iLCI8dmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8dmRyLWFjdGlvbi1iYXI+XHJcbiAgICAgICAgPHZkci1hYi1sZWZ0PlxyXG4gICAgICAgICAgICA8dmRyLWxhbmd1YWdlLXNlbGVjdG9yXHJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNOZXckIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgW2F2YWlsYWJsZUxhbmd1YWdlQ29kZXNdPVwiYXZhaWxhYmxlTGFuZ3VhZ2VzJCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgIFtjdXJyZW50TGFuZ3VhZ2VDb2RlXT1cImxhbmd1YWdlQ29kZSQgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAobGFuZ3VhZ2VDb2RlQ2hhbmdlKT1cInNldExhbmd1YWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICA+PC92ZHItbGFuZ3VhZ2Utc2VsZWN0b3I+XHJcbiAgICAgICAgPC92ZHItYWItbGVmdD5cclxuXHJcbiAgICAgICAgPHZkci1hYi1yaWdodD5cclxuICAgICAgICAgICAgPHZkci1hY3Rpb24tYmFyLWl0ZW1zIGxvY2F0aW9uSWQ9XCJmYWNldC1kZXRhaWxcIiAvPlxyXG4gICAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImlzTmV3JCB8IGFzeW5jOyBlbHNlIHVwZGF0ZUJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiY3JlYXRlKClcIlxyXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRldGFpbEZvcm0uaW52YWxpZCB8fCBkZXRhaWxGb3JtLnByaXN0aW5lXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAge3sgJ2NvbW1vbi5jcmVhdGUnIHwgdHJhbnNsYXRlIH19XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3VwZGF0ZUJ1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAqdmRySWZQZXJtaXNzaW9ucz1cInVwZGF0ZVBlcm1pc3Npb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGV0YWlsRm9ybS5pbnZhbGlkIHx8IGRldGFpbEZvcm0ucHJpc3RpbmVcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24udXBkYXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgIDx2ZHItYWN0aW9uLWJhci1kcm9wZG93bi1tZW51IGxvY2F0aW9uSWQ9XCJmYWNldC1kZXRhaWxcIiAvPlxyXG4gICAgICAgIDwvdmRyLWFiLXJpZ2h0PlxyXG4gICAgPC92ZHItYWN0aW9uLWJhcj5cclxuPC92ZHItcGFnZS1ibG9jaz5cclxuPGZvcm0gY2xhc3M9XCJmb3JtXCIgW2Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtXCI+XHJcbiAgICA8dmRyLXBhZ2UtZGV0YWlsLWxheW91dD5cclxuICAgICAgICA8dmRyLXBhZ2UtZGV0YWlsLXNpZGViYXIgZm9ybUdyb3VwTmFtZT1cImZhY2V0XCI+XHJcbiAgICAgICAgICAgIDx2ZHItY2FyZD5cclxuICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NhdGFsb2cudmlzaWJpbGl0eScgfCB0cmFuc2xhdGVcIiBmb3I9XCJ2aXNpYmlsaXR5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGNsci10b2dnbGUtd3JhcHBlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xyVG9nZ2xlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmRyRGlzYWJsZWRdPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwidmlzaWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpc2liaWxpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJ2aXNpYmxlLXRvZ2dsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImRldGFpbEZvcm0udmFsdWUuZmFjZXQ/LnZpc2libGU7IGVsc2UgcHJpdmF0ZVwiPnt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdGFsb2cucHVibGljJyB8IHRyYW5zbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfX08L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjcHJpdmF0ZT57eyAnY2F0YWxvZy5wcml2YXRlJyB8IHRyYW5zbGF0ZSB9fTwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9jbHItdG9nZ2xlLXdyYXBwZXI+XHJcbiAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQ+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXBhZ2UtZW50aXR5LWluZm8gKm5nSWY9XCJlbnRpdHkkIHwgYXN5bmMgYXMgZW50aXR5XCIgW2VudGl0eV09XCJlbnRpdHlcIiAvPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtZGV0YWlsLXNpZGViYXI+XHJcbiAgICAgICAgPHZkci1wYWdlLWJsb2NrPlxyXG4gICAgICAgICAgICA8dmRyLWNhcmQgZm9ybUdyb3VwTmFtZT1cImZhY2V0XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1ncmlkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHZkci1mb3JtLWZpZWxkIFtsYWJlbF09XCInY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlXCIgZm9yPVwibmFtZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW5wdXQpPVwidXBkYXRlQ29kZShlbnRpdHk/LmNvZGUsICRldmVudC50YXJnZXQudmFsdWUpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3Zkci1mb3JtLWZpZWxkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx2ZHItZm9ybS1maWVsZCBbbGFiZWxdPVwiJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZVwiIGZvcj1cImNvZGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIiEodXBkYXRlUGVybWlzc2lvbiB8IGhhc1Blcm1pc3Npb24pXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdmRyLWZvcm0tZmllbGQ+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC92ZHItY2FyZD5cclxuICAgICAgICAgICAgPHZkci1jYXJkIFt0aXRsZV09XCInY29tbW9uLmN1c3RvbS1maWVsZHMnIHwgdHJhbnNsYXRlXCIgKm5nSWY9XCJjdXN0b21GaWVsZHMubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICA8dmRyLXRhYmJlZC1jdXN0b20tZmllbGRzXHJcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIkZhY2V0XCJcclxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9tRmllbGRzXT1cImN1c3RvbUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc0Zvcm1Hcm91cF09XCJkZXRhaWxGb3JtLmdldCgnZmFjZXQuY3VzdG9tRmllbGRzJylcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG5cclxuICAgICAgICAgICAgPHZkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbklkPVwiZmFjZXQtZGV0YWlsXCJcclxuICAgICAgICAgICAgICAgIFtlbnRpdHkkXT1cImVudGl0eSRcIlxyXG4gICAgICAgICAgICAgICAgW2RldGFpbEZvcm1dPVwiZGV0YWlsRm9ybVwiXHJcbiAgICAgICAgICAgID48L3Zkci1jdXN0b20tZGV0YWlsLWNvbXBvbmVudC1ob3N0PlxyXG5cclxuICAgICAgICAgICAgPHZkci1jYXJkXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiEoaXNOZXckIHwgYXN5bmMpXCJcclxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCInY2F0YWxvZy5mYWNldC12YWx1ZXMnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgIFtwYWRkaW5nWF09XCJmYWxzZVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSB2ZHJDYXJkQ29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtci0zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sXT1cImZpbHRlckNvbnRyb2xcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ2NhdGFsb2cuZmlsdGVyLWJ5LW5hbWUnIHwgdHJhbnNsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2YWx1ZXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRWYWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJmYWNldC12YWx1ZXMtbGlzdCB0YWJsZVwiIGZvcm1BcnJheU5hbWU9XCJ2YWx1ZXNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD48L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD57eyAnY29tbW9uLm5hbWUnIHwgdHJhbnNsYXRlIH19PC90aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ2NvbW1vbi5jb2RlJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImN1c3RvbVZhbHVlRmllbGRzLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+e3sgJ2NvbW1vbi5jdXN0b20tZmllbGRzJyB8IHRyYW5zbGF0ZSB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoPjwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZhY2V0LXZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdGb3I9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlIG9mIGZpbHRlcmVkVmFsdWVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBhZ2luYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFBhZ2U6IGN1cnJlbnRQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zUGVyUGFnZTogaXRlbXNQZXJQYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsSXRlbXM6IHRvdGFsSXRlbXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaSA9IGluZGV4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUdyb3VwXT1cImRldGFpbEZvcm0uZ2V0KFsndmFsdWVzJywgdmFsdWUuaWRdKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZW50aXR5LWluZm8gW2VudGl0eV09XCJ2YWx1ZVwiPjwvdmRyLWVudGl0eS1pbmZvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiISh1cGRhdGVQZXJtaXNzaW9uIHwgaGFzUGVybWlzc2lvbilcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlucHV0KT1cInVwZGF0ZVZhbHVlQ29kZSh2YWx1ZS5jb2RlLCAkZXZlbnQudGFyZ2V0LnZhbHVlLCB2YWx1ZS5pZClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiYWxpZ24tbWlkZGxlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGZvcm1Db250cm9sTmFtZT1cImNvZGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwiXCIgKm5nSWY9XCJjdXN0b21WYWx1ZUZpZWxkcy5sZW5ndGhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHZkci10YWJiZWQtY3VzdG9tLWZpZWxkc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50aXR5TmFtZT1cIkZhY2V0VmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1c3RvbUZpZWxkc109XCJjdXN0b21WYWx1ZUZpZWxkc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29tcGFjdF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXN0b21GaWVsZHNGb3JtR3JvdXBdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV0YWlsRm9ybS5nZXQoWyd2YWx1ZXMnLCB2YWx1ZS5pZCwgJ2N1c3RvbUZpZWxkcyddKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci10YWJiZWQtY3VzdG9tLWZpZWxkcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cImFsaWduLW1pZGRsZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dmRyLWRyb3Bkb3duPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJpY29uLWJ1dHRvblwiIHZkckRyb3Bkb3duVHJpZ2dlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xyLWljb24gc2hhcGU9XCJlbGxpcHNpcy12ZXJ0aWNhbFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItZHJvcGRvd24tbWVudSB2ZHJQb3NpdGlvbj1cImJvdHRvbS1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZGVsZXRlLWJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVGYWNldFZhbHVlKHZhbHVlLmlkKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhKHVwZGF0ZVBlcm1pc3Npb24gfCBoYXNQZXJtaXNzaW9uKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZkckRyb3Bkb3duSXRlbVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsci1pY29uIHNoYXBlPVwidHJhc2hcIiBjbGFzcz1cImlzLWRhbmdlclwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjb21tb24uZGVsZXRlJyB8IHRyYW5zbGF0ZSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24tbWVudT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC92ZHItZHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGFnaW5hdGlvbi13cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpdGVtc1BlclBhZ2VDaGFuZ2UpPVwic2V0SXRlbXNQZXJQYWdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC92ZHItaXRlbXMtcGVyLXBhZ2UtY29udHJvbHM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx2ZHItcGFnaW5hdGlvbi1jb250cm9sc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwic2V0Q3VycmVudFBhZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID48L3Zkci1wYWdpbmF0aW9uLWNvbnRyb2xzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxidXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uIG0tM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICp2ZHJJZlBlcm1pc3Npb25zPVwiWydDcmVhdGVDYXRhbG9nJywgJ0NyZWF0ZUZhY2V0J11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYWRkRmFjZXRWYWx1ZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbHItaWNvbiBzaGFwZT1cImFkZFwiPjwvY2xyLWljb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdjYXRhbG9nLmFkZC1mYWNldC12YWx1ZScgfCB0cmFuc2xhdGUgfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3Zkci1jYXJkPlxyXG4gICAgICAgIDwvdmRyLXBhZ2UtYmxvY2s+XHJcbiAgICA8L3Zkci1wYWdlLWRldGFpbC1sYXlvdXQ+XHJcbjwvZm9ybT5cclxuIl19