@cqa-lib/cqa-ui 1.1.263 → 1.1.265

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.
@@ -7,6 +7,7 @@ import * as i3 from "../../../dynamic-select/dynamic-select-field.component";
7
7
  import * as i4 from "@angular/material/icon";
8
8
  import * as i5 from "../../../button/button.component";
9
9
  import * as i6 from "@angular/common";
10
+ import * as i7 from "@angular/material/tooltip";
10
11
  export class ElementFormComponent {
11
12
  constructor(fb, cdr) {
12
13
  this.cdr = cdr;
@@ -231,12 +232,23 @@ export class ElementFormComponent {
231
232
  this.addTag();
232
233
  }
233
234
  }
235
+ /** Tags to render as chips (limited) */
236
+ get visibleTags() {
237
+ if (!this.formLabels || this.formLabels.length) {
238
+ return this.formLabels || [];
239
+ }
240
+ return [];
241
+ }
242
+ /** Tooltip text showing all tags */
243
+ get allTagsTooltip() {
244
+ return (this.formLabels || []).join(', ');
245
+ }
234
246
  }
235
247
  ElementFormComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementFormComponent, deps: [{ token: i1.FormBuilder, optional: true }, { token: i0.ChangeDetectorRef, optional: true }], target: i0.ɵɵFactoryTarget.Component });
236
- ElementFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementFormComponent, selector: "cqa-element-form", inputs: { elementId: "elementId", element: "element", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", isElementLoading: "isElementLoading", isEditMode: "isEditMode", isCreateMode: "isCreateMode", isEditInDepthAvailable: "isEditInDepthAvailable" }, outputs: { createElement: "createElement", updateElement: "updateElement", createScreenNameRequest: "createScreenNameRequest", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", cancel: "cancel", editInDepth: "editInDepth" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n <div *ngIf=\"isElementLoading && isEditMode\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-8\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading element data...</span>\n </div>\n <div *ngIf=\"!isElementLoading\" class=\"cqa-flex cqa-gap-1.5\">\n <cqa-custom-input \n class=\"cqa-w-1/2\" \n label=\"Name\" \n placeholder=\"default-element\"\n [value]=\"getFormControlValue('name')\"\n [errors]=\"getFormControl('name')?.touched && getFormControl('name')?.invalid ? ['Name is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('name', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-1/2\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"screenNameSelectConfig\"\n (addCustomValue)=\"createScreenNameRequest.emit($event.value)\"\n class=\"cqa-w-full\">\n </cqa-dynamic-select>\n <div *ngIf=\"getFormControl('screenNameId')?.touched && getFormControl('screenNameId')?.invalid\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n Screen Name is required\n </span>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!isElementLoading\">\n <cqa-custom-input \n class=\"cqa-w-full\" \n label=\"Enter Value\" \n placeholder=\"#default_id or xpath\"\n [value]=\"getFormControlValue('value')\"\n [errors]=\"getFormControl('value')?.touched && getFormControl('value')?.invalid ? ['Value is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('value', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-full\">\n <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1\">Labels (tags)</label>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px]\">\n <span *ngFor=\"let tag of formLabels\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-bg-[#eff6ff] cqa-border cqa-border-[#c8e0ff] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#3F43EE]\">\n {{ tag }}\n <button type=\"button\" (click)=\"removeTag(tag)\" class=\"cqa-p-0.5 hover:cqa-bg-[#c8e0ff] cqa-rounded cqa-cursor-pointer cqa-h-[16px] cqa-w-[16px]\">\n <mat-icon class=\"!cqa-w-3 !cqa-h-3 !cqa-text-[14px]\">close</mat-icon>\n </button>\n </span>\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"(elementId ? 'Cancel' : 'Select from Element list')\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"saving ? 'Saving...' : (isEditMode ? 'Update' : 'Create')\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n </div>\n </div>\n <a href=\"#\" *ngIf=\"isEditInDepthAvailable\" (click)=\"onEditInDepth($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n Edit in depth (open detailed right panel)\n </a>\n </ng-container>\n</div>\n\n\n", components: [{ type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
248
+ ElementFormComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ElementFormComponent, selector: "cqa-element-form", inputs: { elementId: "elementId", element: "element", screenNameOptions: "screenNameOptions", hasMoreScreenNames: "hasMoreScreenNames", isLoadingScreenNames: "isLoadingScreenNames", isElementLoading: "isElementLoading", isEditMode: "isEditMode", isCreateMode: "isCreateMode", isEditInDepthAvailable: "isEditInDepthAvailable" }, outputs: { createElement: "createElement", updateElement: "updateElement", createScreenNameRequest: "createScreenNameRequest", searchScreenName: "searchScreenName", loadMoreScreenNames: "loadMoreScreenNames", cancel: "cancel", editInDepth: "editInDepth" }, host: { classAttribute: "cqa-ui-root" }, usesOnChanges: true, ngImport: i0, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n <div *ngIf=\"isElementLoading && isEditMode\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-8\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading element data...</span>\n </div>\n <div *ngIf=\"!isElementLoading\" class=\"cqa-flex cqa-gap-1.5\">\n <cqa-custom-input \n class=\"cqa-w-1/2\" \n label=\"Name\" \n placeholder=\"default-element\"\n [value]=\"getFormControlValue('name')\"\n [errors]=\"getFormControl('name')?.touched && getFormControl('name')?.invalid ? ['Name is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('name', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-1/2\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"screenNameSelectConfig\"\n (addCustomValue)=\"createScreenNameRequest.emit($event.value)\"\n class=\"cqa-w-full\">\n </cqa-dynamic-select>\n <div *ngIf=\"getFormControl('screenNameId')?.touched && getFormControl('screenNameId')?.invalid\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n Screen Name is required\n </span>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!isElementLoading\">\n <cqa-custom-input \n class=\"cqa-w-full\" \n label=\"Enter Value\" \n placeholder=\"#default_id or xpath\"\n [value]=\"getFormControlValue('value')\"\n [errors]=\"getFormControl('value')?.touched && getFormControl('value')?.invalid ? ['Value is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('value', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-full\">\n <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1\">Labels (tags)</label>\n <div\n class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px] cqa-max-h-[80px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\"\n *ngIf=\"formLabels?.length; else noTagsContainer\">\n <span *ngFor=\"let tag of visibleTags\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-bg-[#eff6ff] cqa-border cqa-border-[#c8e0ff] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#3F43EE]\"\n [matTooltip]=\"tag\"\n matTooltipPosition=\"above\"\n style=\"max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n <span class=\"cqa-max-w-full cqa-truncate\">{{ tag }}</span>\n <button type=\"button\" (click)=\"removeTag(tag)\" class=\"cqa-p-0.5 hover:cqa-bg-[#c8e0ff] cqa-rounded cqa-cursor-pointer cqa-h-[16px] cqa-w-[16px]\">\n <mat-icon class=\"!cqa-w-3 !cqa-h-3 !cqa-text-[14px]\">close</mat-icon>\n </button>\n </span>\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n <ng-template #noTagsContainer>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px]\">\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n </ng-template>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"(elementId ? 'Cancel' : 'Select from Element list')\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"saving ? 'Saving...' : (isEditMode ? 'Update' : 'Create')\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n </div>\n </div>\n <a href=\"#\" *ngIf=\"isEditInDepthAvailable\" (click)=\"onEditInDepth($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n Edit in depth (open detailed right panel)\n </a>\n </ng-container>\n</div>\n\n\n", components: [{ type: i2.CustomInputComponent, selector: "cqa-custom-input", inputs: ["label", "type", "placeholder", "value", "disabled", "errors", "required", "ariaLabel", "size", "fullWidth", "maxLength", "showCharCount", "inputInlineStyle", "labelInlineStyle"], outputs: ["valueChange", "blurred", "focused", "enterPressed"] }, { type: i3.DynamicSelectFieldComponent, selector: "cqa-dynamic-select", inputs: ["form", "config"], outputs: ["selectionChange", "selectClick", "searchChange", "loadMore", "addCustomValue"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.ButtonComponent, selector: "cqa-button", inputs: ["variant", "btnSize", "disabled", "icon", "iconPosition", "fullWidth", "iconColor", "type", "text", "customClass", "inlineStyles", "tooltip", "tooltipPosition"], outputs: ["clicked"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i7.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
237
249
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ElementFormComponent, decorators: [{
238
250
  type: Component,
239
- args: [{ selector: 'cqa-element-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n <div *ngIf=\"isElementLoading && isEditMode\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-8\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading element data...</span>\n </div>\n <div *ngIf=\"!isElementLoading\" class=\"cqa-flex cqa-gap-1.5\">\n <cqa-custom-input \n class=\"cqa-w-1/2\" \n label=\"Name\" \n placeholder=\"default-element\"\n [value]=\"getFormControlValue('name')\"\n [errors]=\"getFormControl('name')?.touched && getFormControl('name')?.invalid ? ['Name is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('name', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-1/2\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"screenNameSelectConfig\"\n (addCustomValue)=\"createScreenNameRequest.emit($event.value)\"\n class=\"cqa-w-full\">\n </cqa-dynamic-select>\n <div *ngIf=\"getFormControl('screenNameId')?.touched && getFormControl('screenNameId')?.invalid\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n Screen Name is required\n </span>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!isElementLoading\">\n <cqa-custom-input \n class=\"cqa-w-full\" \n label=\"Enter Value\" \n placeholder=\"#default_id or xpath\"\n [value]=\"getFormControlValue('value')\"\n [errors]=\"getFormControl('value')?.touched && getFormControl('value')?.invalid ? ['Value is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('value', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-full\">\n <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1\">Labels (tags)</label>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px]\">\n <span *ngFor=\"let tag of formLabels\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-bg-[#eff6ff] cqa-border cqa-border-[#c8e0ff] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#3F43EE]\">\n {{ tag }}\n <button type=\"button\" (click)=\"removeTag(tag)\" class=\"cqa-p-0.5 hover:cqa-bg-[#c8e0ff] cqa-rounded cqa-cursor-pointer cqa-h-[16px] cqa-w-[16px]\">\n <mat-icon class=\"!cqa-w-3 !cqa-h-3 !cqa-text-[14px]\">close</mat-icon>\n </button>\n </span>\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"(elementId ? 'Cancel' : 'Select from Element list')\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"saving ? 'Saving...' : (isEditMode ? 'Update' : 'Create')\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n </div>\n </div>\n <a href=\"#\" *ngIf=\"isEditInDepthAvailable\" (click)=\"onEditInDepth($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n Edit in depth (open detailed right panel)\n </a>\n </ng-container>\n</div>\n\n\n" }]
251
+ args: [{ selector: 'cqa-element-form', host: { class: 'cqa-ui-root' }, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"cqa-flex cqa-flex-col cqa-gap-4 cqa-px-1 cqa-pt-3\">\n <div *ngIf=\"isElementLoading && isEditMode\" class=\"cqa-flex cqa-flex-col cqa-items-center cqa-justify-center cqa-gap-3 cqa-py-8\">\n <svg class=\"cqa-animate-spin cqa-h-6 cqa-w-6 cqa-text-[#3F43EE]\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"cqa-opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"4\"></circle>\n <path class=\"cqa-opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n <span class=\"cqa-text-[#6B7280] cqa-text-sm\">Loading element data...</span>\n </div>\n <div *ngIf=\"!isElementLoading\" class=\"cqa-flex cqa-gap-1.5\">\n <cqa-custom-input \n class=\"cqa-w-1/2\" \n label=\"Name\" \n placeholder=\"default-element\"\n [value]=\"getFormControlValue('name')\"\n [errors]=\"getFormControl('name')?.touched && getFormControl('name')?.invalid ? ['Name is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('name', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-1/2\">\n <cqa-dynamic-select [form]=\"form\" [config]=\"screenNameSelectConfig\"\n (addCustomValue)=\"createScreenNameRequest.emit($event.value)\"\n class=\"cqa-w-full\">\n </cqa-dynamic-select>\n <div *ngIf=\"getFormControl('screenNameId')?.touched && getFormControl('screenNameId')?.invalid\" class=\"cqa-flex cqa-flex-col cqa-gap-1 cqa-mt-1.5\">\n <div class=\"cqa-flex cqa-items-start cqa-gap-1.5\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"14\"\n height=\"14\"\n viewBox=\"0 0 14 14\"\n fill=\"none\"\n class=\"cqa-flex-shrink-0 cqa-mt-0.5\">\n <path d=\"M7 1.75C4.1 1.75 1.75 4.1 1.75 7C1.75 9.9 4.1 12.25 7 12.25C9.9 12.25 12.25 9.9 12.25 7C12.25 4.1 9.9 1.75 7 1.75ZM7 9.625C6.65625 9.625 6.375 9.34375 6.375 9V7C6.375 6.65625 6.65625 6.375 7 6.375C7.34375 6.375 7.625 6.65625 7.625 7V9C7.625 9.34375 7.34375 9.625 7 9.625ZM7.625 5.25H6.375V4H7.625V5.25Z\" fill=\"#EF4444\"/>\n </svg>\n <span class=\"cqa-text-xs cqa-text-[#EF4444] cqa-font-medium cqa-leading-[18px]\">\n Screen Name is required\n </span>\n </div>\n </div>\n </div>\n </div>\n <ng-container *ngIf=\"!isElementLoading\">\n <cqa-custom-input \n class=\"cqa-w-full\" \n label=\"Enter Value\" \n placeholder=\"#default_id or xpath\"\n [value]=\"getFormControlValue('value')\"\n [errors]=\"getFormControl('value')?.touched && getFormControl('value')?.invalid ? ['Value is required'] : []\"\n [required]=\"true\"\n (valueChange)=\"onFormControlChange('value', $event)\">\n </cqa-custom-input>\n <div class=\"cqa-w-full\">\n <label class=\"cqa-block cqa-text-[14px] cqa-font-medium cqa-text-[#374151] cqa-mb-1\">Labels (tags)</label>\n <div\n class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px] cqa-max-h-[80px] cqa-overflow-y-auto cqa-scrollbar-thin cqa-scrollbar-track-transparent cqa-scrollbar-thumb-[#E5E7EB] cqa-scrollbar-thumb-rounded-full cqa-scrollbar-thumb-hover:cqa-bg-[#D1D5DB]\"\n *ngIf=\"formLabels?.length; else noTagsContainer\">\n <span *ngFor=\"let tag of visibleTags\"\n class=\"cqa-inline-flex cqa-items-center cqa-gap-1 cqa-px-2 cqa-py-1 cqa-bg-[#eff6ff] cqa-border cqa-border-[#c8e0ff] cqa-rounded-[8px] cqa-text-[12px] cqa-text-[#3F43EE]\"\n [matTooltip]=\"tag\"\n matTooltipPosition=\"above\"\n style=\"max-width: 140px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;\">\n <span class=\"cqa-max-w-full cqa-truncate\">{{ tag }}</span>\n <button type=\"button\" (click)=\"removeTag(tag)\" class=\"cqa-p-0.5 hover:cqa-bg-[#c8e0ff] cqa-rounded cqa-cursor-pointer cqa-h-[16px] cqa-w-[16px]\">\n <mat-icon class=\"!cqa-w-3 !cqa-h-3 !cqa-text-[14px]\">close</mat-icon>\n </button>\n </span>\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n <ng-template #noTagsContainer>\n <div class=\"cqa-flex cqa-flex-wrap cqa-gap-2 cqa-p-2 cqa-border cqa-border-solid cqa-border-gray-200 cqa-rounded-md cqa-min-h-[42px]\">\n <input type=\"text\"\n class=\"cqa-flex-1 cqa-min-w-[120px] cqa-px-2 cqa-py-1 cqa-text-sm cqa-border-0 cqa-outline-none cqa-bg-transparent\"\n placeholder=\"Type and press Enter to add\"\n [(ngModel)]=\"tagInputValue\"\n (keydown)=\"onTagInputKeydown($event)\"\n (blur)=\"addTag()\"\n [ngModelOptions]=\"{standalone: true}\">\n </div>\n </ng-template>\n </div>\n\n <div class=\"cqa-flex cqa-flex-col cqa-gap-3\">\n <div class=\"cqa-flex cqa-items-stretch cqa-gap-2 cqa-w-full\">\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"outlined\" btnSize=\"lg\" [text]=\"(elementId ? 'Cancel' : 'Select from Element list')\" [fullWidth]=\"true\" (clicked)=\"onCancel()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#414146]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n <div class=\"cqa-flex-1 cqa-min-w-0\">\n <cqa-button variant=\"filled\" btnSize=\"lg\" [text]=\"saving ? 'Saving...' : (isEditMode ? 'Update' : 'Create')\" [fullWidth]=\"true\" (clicked)=\"onApply()\"\n [customClass]=\"'cqa-text-[14px] cqa-py-[9px] cqa-border-[#3F43EE]'\" [disabled]=\"saving\"></cqa-button>\n </div>\n </div>\n </div>\n <a href=\"#\" *ngIf=\"isEditInDepthAvailable\" (click)=\"onEditInDepth($event)\"\n class=\"cqa-text-[#3F43EE] cqa-text-[12px] cqa-leading-[18px] cqa-font-medium cqa-flex cqa-items-center cqa-gap-1.5 cqa-no-underline hover:cqa-no-underline cqa-self-center\">\n <mat-icon class=\"!cqa-w-4 !cqa-h-4 !cqa-text-[16px]\">open_in_new</mat-icon>\n Edit in depth (open detailed right panel)\n </a>\n </ng-container>\n</div>\n\n\n" }]
240
252
  }], ctorParameters: function () { return [{ type: i1.FormBuilder, decorators: [{
241
253
  type: Optional
242
254
  }] }, { type: i0.ChangeDetectorRef, decorators: [{
@@ -274,4 +286,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
274
286
  }], editInDepth: [{
275
287
  type: Output
276
288
  }] } });
277
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1wb3B1cC9lbGVtZW50LWZvcm0vZWxlbWVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1wb3B1cC9lbGVtZW50LWZvcm0vZWxlbWVudC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7QUFXakYsTUFBTSxPQUFPLG9CQUFvQjtJQWdEL0IsWUFDYyxFQUFnQixFQUNDLEdBQXVCO1FBQXZCLFFBQUcsR0FBSCxHQUFHLENBQW9CO1FBL0N0RCwyQ0FBMkM7UUFDbEMsWUFBTyxHQUE2QixFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDckYsc0RBQXNEO1FBQzdDLHNCQUFpQixHQUF1QixFQUFFLENBQUM7UUFDcEQsa0VBQWtFO1FBQ3pELHVCQUFrQixHQUFZLEtBQUssQ0FBQztRQUM3QyxzRUFBc0U7UUFDN0QseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBQy9DLHVGQUF1RjtRQUM5RSxxQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDM0MsaUNBQWlDO1FBQ3hCLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFDckMsbUNBQW1DO1FBQzFCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBRXZDLHlDQUF5QztRQUNo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Z0JBRUcsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUVHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkFHRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBR0ksYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyxhQUFhO3NCQUF0QixNQUFNO2dCQUVHLHVCQUF1QjtzQkFBaEMsTUFBTTtnQkFFRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBRUcsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUVHLE1BQU07c0JBQWYsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtR3JvdXAsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnLCBTZWxlY3RPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9keW5hbWljLXNlbGVjdC9keW5hbWljLXNlbGVjdC1maWVsZC5jb21wb25lbnQnO1xuaW1wb3J0IHsgRWxlbWVudENyZWF0ZVBheWxvYWQsIEVsZW1lbnRVcGRhdGVQYXlsb2FkLCBTY3JlZW5OYW1lT3B0aW9uIH0gZnJvbSAnLi4vZWxlbWVudC1wb3B1cC1mb3JtLWRhdGEnO1xuaW1wb3J0IHsgRWxlbWVudFBvcHVwRGF0YUVsZW1lbnRzIH0gZnJvbSAnLi4vZWxlbWVudC1wb3B1cC1kYXRhJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLWVsZW1lbnQtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbGVtZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnLFxuICBob3N0OiB7IGNsYXNzOiAnY3FhLXVpLXJvb3QnIH0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBFbGVtZW50Rm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzIHtcbiAgLyoqIEVsZW1lbnQgSUQgd2hlbiBlZGl0aW5nIGV4aXN0aW5nIGVsZW1lbnQgKi9cbiAgQElucHV0KCkgZWxlbWVudElkPzogbnVtYmVyO1xuICAvKiogQ3VycmVudCBlbGVtZW50IGRhdGEgKGZvciBlZGl0IG1vZGUpICovXG4gIEBJbnB1dCgpIGVsZW1lbnQ6IEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyA9IHsgdGl0bGU6ICcnLCBzZWxlY3RvcjogJycsIGxhYmVsczogW10gfTtcbiAgLyoqIFNjcmVlbiBuYW1lIG9wdGlvbnMgZm9yIGF1dG9jb21wbGV0ZSAoZnJvbSBBUEkpICovXG4gIEBJbnB1dCgpIHNjcmVlbk5hbWVPcHRpb25zOiBTY3JlZW5OYW1lT3B0aW9uW10gPSBbXTtcbiAgLyoqIFdoZXRoZXIgbW9yZSBzY3JlZW4gbmFtZXMgYXJlIGF2YWlsYWJsZSBmb3IgaW5maW5pdGUgc2Nyb2xsICovXG4gIEBJbnB1dCgpIGhhc01vcmVTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgbG9hZGluZyBzY3JlZW4gbmFtZXMgKHNlYXJjaCBvciBsb2FkIG1vcmUpICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ1NjcmVlbk5hbWVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBUcnVlIHdoaWxlIHBhcmVudCBpcyBmZXRjaGluZyBsYXRlc3QgZWxlbWVudCBkYXRhIGZvciBlZGl0IChzaG93cyBsb2FkaW5nIHN0YXRlKSAqL1xuICBASW5wdXQoKSBpc0VsZW1lbnRMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGluIGVkaXQgbW9kZSAqL1xuICBASW5wdXQoKSBpc0VkaXRNb2RlOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIGluIGNyZWF0ZSBtb2RlICovXG4gIEBJbnB1dCgpIGlzQ3JlYXRlTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIGVkaXQgaW4gZGVwdGggaXMgYXZhaWxhYmxlICovXG4gIEBJbnB1dCgpIGlzRWRpdEluRGVwdGhBdmFpbGFibGU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjcmVhdGVzIGEgbmV3IGVsZW1lbnQgKHBhcmVudCBzaG91bGQgY2FsbCBBUEkpICovXG4gIEBPdXRwdXQoKSBjcmVhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50Q3JlYXRlUGF5bG9hZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHVwZGF0ZXMgYW4gZWxlbWVudCAocGFyZW50IHNob3VsZCBjYWxsIEFQSSkgKi9cbiAgQE91dHB1dCgpIHVwZGF0ZUVsZW1lbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEVsZW1lbnRVcGRhdGVQYXlsb2FkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgcmVxdWVzdHMgdG8gY3JlYXRlIGEgbmV3IHNjcmVlbiBuYW1lICovXG4gIEBPdXRwdXQoKSBjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2VhcmNoZXMgc2NyZWVuIG5hbWVzIChzZXJ2ZXIgc2VhcmNoKSAqL1xuICBAT3V0cHV0KCkgc2VhcmNoU2NyZWVuTmFtZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgc2Nyb2xscyB0byBsb2FkIG1vcmUgc2NyZWVuIG5hbWVzIChwYXNzZXMgY3VycmVudCBzZWFyY2ggcXVlcnkpICovXG4gIEBPdXRwdXQoKSBsb2FkTW9yZVNjcmVlbk5hbWVzID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgXCJTZWxlY3QgZnJvbSBFbGVtZW50IGxpc3RcIiBvciBcIkNhbmNlbFwiICovXG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBjbGlja3MgXCJFZGl0IGluIGRlcHRoXCIgKi9cbiAgQE91dHB1dCgpIGVkaXRJbkRlcHRoID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm0hOiBGb3JtR3JvdXA7XG4gIC8qKiBMYWJlbHMgKHRhZ3MpIGFzIHN0cmluZyBhcnJheSBmb3IgbXVsdGktdGFnIGlucHV0ICovXG4gIGZvcm1MYWJlbHM6IHN0cmluZ1tdID0gW107XG4gIC8qKiBDdXJyZW50IHRhZyBpbnB1dCB2YWx1ZSAqL1xuICB0YWdJbnB1dFZhbHVlID0gJyc7XG4gIC8qKiBDb25maWcgZm9yIHNjcmVlbiBuYW1lIGR5bmFtaWMtc2VsZWN0IChzZXJ2ZXIgc2VhcmNoLCBhbGxvd0N1c3RvbVZhbHVlLCBpbmZpbml0ZSBzY3JvbGwpICovXG4gIHNjcmVlbk5hbWVTZWxlY3RDb25maWchOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIHNhdmluZyAoZGlzYWJsZSBidXR0b25zKSAqL1xuICBzYXZpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBmYj86IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2RyPzogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5mYiA9IGZiIHx8IG5ldyBGb3JtQnVpbGRlcigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2NyZWVuTmFtZU9wdGlvbnMnXSB8fCBjaGFuZ2VzWydoYXNNb3JlU2NyZWVuTmFtZXMnXSB8fCBjaGFuZ2VzWydpc0xvYWRpbmdTY3JlZW5OYW1lcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNjcmVlbk5hbWVTZWxlY3RDb25maWcoKTtcbiAgICB9XG4gICAgaWYgKChjaGFuZ2VzWydlbGVtZW50J10gfHwgY2hhbmdlc1snZWxlbWVudElkJ10pICYmIHRoaXMuZWxlbWVudElkKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlRm9ybUZvckVkaXQoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2VsZW1lbnQnXSAmJiAhdGhpcy5lbGVtZW50SWQgJiYgdGhpcy5pc0NyZWF0ZU1vZGUpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVGb3JtRm9yQ3JlYXRlV2l0aEVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVGb3JtRm9yRWRpdCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0ZU1vZGUgJiYgdGhpcy5lbGVtZW50KSB7XG4gICAgICB0aGlzLnBvcHVsYXRlRm9ybUZvckNyZWF0ZVdpdGhFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHNjcmVlbk5hbWVJZDogW251bGwgYXMgbnVtYmVyIHwgbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHZhbHVlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcmVlbk5hbWVTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0czogU2VsZWN0T3B0aW9uW10gPSAodGhpcy5zY3JlZW5OYW1lT3B0aW9ucyB8fCBbXSkubWFwKChvKSA9PiAoe1xuICAgICAgaWQ6IG8uaWQsXG4gICAgICB2YWx1ZTogby5pZCxcbiAgICAgIG5hbWU6IG8ubmFtZSxcbiAgICAgIGxhYmVsOiBvLm5hbWUsXG4gICAgfSkpO1xuICAgIGNvbnN0IGN1cnJlbnRJZCA9IHRoaXMuZm9ybT8uZ2V0KCdzY3JlZW5OYW1lSWQnKT8udmFsdWU7XG4gICAgaWYgKGN1cnJlbnRJZCAmJiB0aGlzLmVsZW1lbnQ/LnNjcmVlbk5hbWVJZCA9PT0gY3VycmVudElkICYmIHRoaXMuZWxlbWVudD8uc2NyZWVuTmFtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gb3B0cy5zb21lKChvKSA9PiBvLmlkID09PSBjdXJyZW50SWQpO1xuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgb3B0cy51bnNoaWZ0KHtcbiAgICAgICAgICBpZDogY3VycmVudElkLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50SWQsXG4gICAgICAgICAgbmFtZTogU3RyaW5nKHRoaXMuZWxlbWVudC5zY3JlZW5OYW1lKSxcbiAgICAgICAgICBsYWJlbDogU3RyaW5nKHRoaXMuZWxlbWVudC5zY3JlZW5OYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2NyZWVuTmFtZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3NjcmVlbk5hbWVJZCcsXG4gICAgICBsYWJlbDogJ1NjcmVlbiBOYW1lJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IG9yIGNyZWF0ZSBzY3JlZW4nLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlU2NyZWVuTmFtZXMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU2NyZWVuTmFtZXMsXG4gICAgICBvblNlYXJjaDogKHEpID0+IHRoaXMuc2VhcmNoU2NyZWVuTmFtZS5lbWl0KHEgfHwgJycpLFxuICAgICAgb25Mb2FkTW9yZTogKHEpID0+IHRoaXMubG9hZE1vcmVTY3JlZW5OYW1lcy5lbWl0KHEgfHwgJycpLFxuICAgIH07XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUZvcm1Gb3JFZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50SWQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIG5hbWU6IHRoaXMuZWxlbWVudC50aXRsZSA/PyAnJyxcbiAgICAgICAgc2NyZWVuTmFtZUlkOiB0aGlzLmVsZW1lbnQuc2NyZWVuTmFtZUlkID8/IG51bGwsXG4gICAgICAgIHZhbHVlOiB0aGlzLmVsZW1lbnQuc2VsZWN0b3IgPz8gJycsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFsuLi4odGhpcy5lbGVtZW50LmxhYmVscyB8fCBbXSldO1xuICAgICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlRm9ybUZvckNyZWF0ZVdpdGhFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBuYW1lOiB0aGlzLmVsZW1lbnQudGl0bGUgPz8gJycsXG4gICAgICAgIHNjcmVlbk5hbWVJZDogdGhpcy5lbGVtZW50LnNjcmVlbk5hbWVJZCA/PyBudWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5lbGVtZW50LnNlbGVjdG9yID8/ICcnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm1MYWJlbHMgPSBbLi4uKHRoaXMuZWxlbWVudC5sYWJlbHMgfHwgW10pXTtcbiAgICAgIHRoaXMudXBkYXRlU2NyZWVuTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLmlzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogQ2FsbGVkIGJ5IHBhcmVudCB3aGVuIGEgbmV3IHNjcmVlbiBuYW1lIHdhcyBjcmVhdGVkIChzbyB3ZSBjYW4gc2V0IHRoZSBzZWxlY3RlZCB2YWx1ZSkgKi9cbiAgc2V0Q3JlYXRlZFNjcmVlbk5hbWUob3B0OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/LnNldFZhbHVlKG9wdC5pZCk7XG4gICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BcHBseSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/Lm1hcmtBc1RvdWNoZWQoKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgY29uc3Qgc2NyZWVuTmFtZUlkID0gZm9ybVZhbHVlLnNjcmVlbk5hbWVJZDtcbiAgICBjb25zdCBzZWxlY3RlZE9wdCA9IHRoaXMuc2NyZWVuTmFtZU9wdGlvbnMuZmluZCgobykgPT4gby5pZCA9PT0gc2NyZWVuTmFtZUlkKTtcbiAgICBjb25zdCBzY3JlZW5OYW1lTmFtZSA9IHNlbGVjdGVkT3B0Py5uYW1lID8gU3RyaW5nKHNlbGVjdGVkT3B0Lm5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIGlmICghc2NyZWVuTmFtZUlkIHx8ICFzY3JlZW5OYW1lTmFtZSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLnRyaW0oKSxcbiAgICAgIHNjcmVlbk5hbWVJZCxcbiAgICAgIHNjcmVlbk5hbWVOYW1lLFxuICAgICAgbG9jYXRvclZhbHVlOiBmb3JtVmFsdWUudmFsdWUudHJpbSgpLFxuICAgICAgbGFiZWxzOiBbLi4udGhpcy5mb3JtTGFiZWxzXSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50LmVtaXQoe1xuICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudElkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlRWxlbWVudC5lbWl0KHBheWxvYWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ3JlYXRlT3JVcGRhdGVTdWNjZXNzKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DcmVhdGVPclVwZGF0ZUVycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25FZGl0SW5EZXB0aChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldChjb250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRGb3JtQ29udHJvbFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGNvbnRyb2xOYW1lKT8udmFsdWUgfHwgJyc7XG4gIH1cblxuICBvbkZvcm1Db250cm9sQ2hhbmdlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IFtjb250cm9sTmFtZV06IHZhbHVlIH0pO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSB0YWcgKGxhYmVsKSAqL1xuICBhZGRUYWcodGFnPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdCA9ICh0YWcgfHwgdGhpcy50YWdJbnB1dFZhbHVlIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKHQgJiYgIXRoaXMuZm9ybUxhYmVscy5pbmNsdWRlcyh0KSkge1xuICAgICAgdGhpcy5mb3JtTGFiZWxzID0gWy4uLnRoaXMuZm9ybUxhYmVscywgdF07XG4gICAgICB0aGlzLnRhZ0lucHV0VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVUYWcodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1MYWJlbHMgPSB0aGlzLmZvcm1MYWJlbHMuZmlsdGVyKChsKSA9PiBsICE9PSB0YWcpO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uVGFnSW5wdXRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuYWRkVGFnKCk7XG4gICAgfVxuICB9XG59XG5cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXB4LTEgY3FhLXB0LTNcIj5cbiAgPGRpdiAqbmdJZj1cImlzRWxlbWVudExvYWRpbmcgJiYgaXNFZGl0TW9kZVwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS1nYXAtMyBjcWEtcHktOFwiPlxuICAgIDxzdmcgY2xhc3M9XCJjcWEtYW5pbWF0ZS1zcGluIGNxYS1oLTYgY3FhLXctNiBjcWEtdGV4dC1bIzNGNDNFRV1cIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgZmlsbD1cIm5vbmVcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCI+XG4gICAgICA8Y2lyY2xlIGNsYXNzPVwiY3FhLW9wYWNpdHktMjVcIiBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxMFwiIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjRcIj48L2NpcmNsZT5cbiAgICAgIDxwYXRoIGNsYXNzPVwiY3FhLW9wYWNpdHktNzVcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgZD1cIk00IDEyYTggOCAwIDAxOC04VjBDNS4zNzMgMCAwIDUuMzczIDAgMTJoNHptMiA1LjI5MUE3Ljk2MiA3Ljk2MiAwIDAxNCAxMkgwYzAgMy4wNDIgMS4xMzUgNS44MjQgMyA3LjkzOGwzLTIuNjQ3elwiPjwvcGF0aD5cbiAgICA8L3N2Zz5cbiAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1zbVwiPkxvYWRpbmcgZWxlbWVudCBkYXRhLi4uPC9zcGFuPlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cIiFpc0VsZW1lbnRMb2FkaW5nXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZ2FwLTEuNVwiPlxuICAgIDxjcWEtY3VzdG9tLWlucHV0IFxuICAgICAgY2xhc3M9XCJjcWEtdy0xLzJcIiBcbiAgICAgIGxhYmVsPVwiTmFtZVwiIFxuICAgICAgcGxhY2Vob2xkZXI9XCJkZWZhdWx0LWVsZW1lbnRcIlxuICAgICAgW3ZhbHVlXT1cImdldEZvcm1Db250cm9sVmFsdWUoJ25hbWUnKVwiXG4gICAgICBbZXJyb3JzXT1cImdldEZvcm1Db250cm9sKCduYW1lJyk/LnRvdWNoZWQgJiYgZ2V0Rm9ybUNvbnRyb2woJ25hbWUnKT8uaW52YWxpZCA/IFsnTmFtZSBpcyByZXF1aXJlZCddIDogW11cIlxuICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRm9ybUNvbnRyb2xDaGFuZ2UoJ25hbWUnLCAkZXZlbnQpXCI+XG4gICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtdy0xLzJcIj5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3QgW2Zvcm1dPVwiZm9ybVwiIFtjb25maWddPVwic2NyZWVuTmFtZVNlbGVjdENvbmZpZ1wiXG4gICAgICAgIChhZGRDdXN0b21WYWx1ZSk9XCJjcmVhdGVTY3JlZW5OYW1lUmVxdWVzdC5lbWl0KCRldmVudC52YWx1ZSlcIlxuICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICAgIDwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgPGRpdiAqbmdJZj1cImdldEZvcm1Db250cm9sKCdzY3JlZW5OYW1lSWQnKT8udG91Y2hlZCAmJiBnZXRGb3JtQ29udHJvbCgnc2NyZWVuTmFtZUlkJyk/LmludmFsaWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEgY3FhLW10LTEuNVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLXN0YXJ0IGNxYS1nYXAtMS41XCI+XG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiXG4gICAgICAgICAgICB3aWR0aD1cIjE0XCJcbiAgICAgICAgICAgIGhlaWdodD1cIjE0XCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMTQgMTRcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC1zaHJpbmstMCBjcWEtbXQtMC41XCI+XG4gICAgICAgICAgICA8cGF0aCBkPVwiTTcgMS43NUM0LjEgMS43NSAxLjc1IDQuMSAxLjc1IDdDMS43NSA5LjkgNC4xIDEyLjI1IDcgMTIuMjVDOS45IDEyLjI1IDEyLjI1IDkuOSAxMi4yNSA3QzEyLjI1IDQuMSA5LjkgMS43NSA3IDEuNzVaTTcgOS42MjVDNi42NTYyNSA5LjYyNSA2LjM3NSA5LjM0Mzc1IDYuMzc1IDlWN0M2LjM3NSA2LjY1NjI1IDYuNjU2MjUgNi4zNzUgNyA2LjM3NUM3LjM0Mzc1IDYuMzc1IDcuNjI1IDYuNjU2MjUgNy42MjUgN1Y5QzcuNjI1IDkuMzQzNzUgNy4zNDM3NSA5LjYyNSA3IDkuNjI1Wk03LjYyNSA1LjI1SDYuMzc1VjRINy42MjVWNS4yNVpcIiBmaWxsPVwiI0VGNDQ0NFwiLz5cbiAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjRUY0NDQ0XSBjcWEtZm9udC1tZWRpdW0gY3FhLWxlYWRpbmctWzE4cHhdXCI+XG4gICAgICAgICAgICBTY3JlZW4gTmFtZSBpcyByZXF1aXJlZFxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFbGVtZW50TG9hZGluZ1wiPlxuICAgIDxjcWEtY3VzdG9tLWlucHV0IFxuICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCIgIFxuICAgICAgbGFiZWw9XCJFbnRlciBWYWx1ZVwiIFxuICAgICAgcGxhY2Vob2xkZXI9XCIjZGVmYXVsdF9pZCBvciB4cGF0aFwiXG4gICAgICBbdmFsdWVdPVwiZ2V0Rm9ybUNvbnRyb2xWYWx1ZSgndmFsdWUnKVwiXG4gICAgICBbZXJyb3JzXT1cImdldEZvcm1Db250cm9sKCd2YWx1ZScpPy50b3VjaGVkICYmIGdldEZvcm1Db250cm9sKCd2YWx1ZScpPy5pbnZhbGlkID8gWydWYWx1ZSBpcyByZXF1aXJlZCddIDogW11cIlxuICAgICAgW3JlcXVpcmVkXT1cInRydWVcIlxuICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uRm9ybUNvbnRyb2xDaGFuZ2UoJ3ZhbHVlJywgJGV2ZW50KVwiPlxuICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctZnVsbFwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWJsb2NrIGNxYS10ZXh0LVsxNHB4XSBjcWEtZm9udC1tZWRpdW0gY3FhLXRleHQtWyMzNzQxNTFdIGNxYS1tYi0xXCI+TGFiZWxzICh0YWdzKTwvbGFiZWw+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTIgY3FhLXAtMiBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1ncmF5LTIwMCBjcWEtcm91bmRlZC1tZCBjcWEtbWluLWgtWzQycHhdXCI+XG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB0YWcgb2YgZm9ybUxhYmVsc1wiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEgY3FhLXB4LTIgY3FhLXB5LTEgY3FhLWJnLVsjZWZmNmZmXSBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNjOGUwZmZdIGNxYS1yb3VuZGVkLVs4cHhdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdGV4dC1bIzNGNDNFRV1cIj5cbiAgICAgICAgICB7eyB0YWcgfX1cbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwicmVtb3ZlVGFnKHRhZylcIiBjbGFzcz1cImNxYS1wLTAuNSBob3ZlcjpjcWEtYmctWyNjOGUwZmZdIGNxYS1yb3VuZGVkIGNxYS1jdXJzb3ItcG9pbnRlciBjcWEtaC1bMTZweF0gY3FhLXctWzE2cHhdXCI+XG4gICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCIhY3FhLXctMyAhY3FhLWgtMyAhY3FhLXRleHQtWzE0cHhdXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy1bMTIwcHhdIGNxYS1weC0yIGNxYS1weS0xIGNxYS10ZXh0LXNtIGNxYS1ib3JkZXItMCBjcWEtb3V0bGluZS1ub25lIGNxYS1iZy10cmFuc3BhcmVudFwiXG4gICAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIGFuZCBwcmVzcyBFbnRlciB0byBhZGRcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwidGFnSW5wdXRWYWx1ZVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25UYWdJbnB1dEtleWRvd24oJGV2ZW50KVwiXG4gICAgICAgICAgKGJsdXIpPVwiYWRkVGFnKClcIlxuICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLXctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIFt0ZXh0XT1cIihlbGVtZW50SWQgPyAnQ2FuY2VsJyA6ICdTZWxlY3QgZnJvbSBFbGVtZW50IGxpc3QnKVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyM0MTQxNDZdJ1wiIFtkaXNhYmxlZF09XCJzYXZpbmdcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiBbdGV4dF09XCJzYXZpbmcgPyAnU2F2aW5nLi4uJyA6IChpc0VkaXRNb2RlID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJylcIiBbZnVsbFdpZHRoXT1cInRydWVcIiAoY2xpY2tlZCk9XCJvbkFwcGx5KClcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyMzRjQzRUVdJ1wiIFtkaXNhYmxlZF09XCJzYXZpbmdcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGEgaHJlZj1cIiNcIiAqbmdJZj1cImlzRWRpdEluRGVwdGhBdmFpbGFibGVcIiAoY2xpY2spPVwib25FZGl0SW5EZXB0aCgkZXZlbnQpXCJcbiAgICAgIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLW5vLXVuZGVybGluZSBob3ZlcjpjcWEtbm8tdW5kZXJsaW5lIGNxYS1zZWxmLWNlbnRlclwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XVwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cbiAgICAgIEVkaXQgaW4gZGVwdGggKG9wZW4gZGV0YWlsZWQgcmlnaHQgcGFuZWwpXG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG5cbiJdfQ==
289
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudC1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1wb3B1cC9lbGVtZW50LWZvcm0vZWxlbWVudC1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvdGVzdC1jYXNlLWRldGFpbHMvZWxlbWVudC1wb3B1cC9lbGVtZW50LWZvcm0vZWxlbWVudC1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsUUFBUSxFQUNSLE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUEwQixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBV2pGLE1BQU0sT0FBTyxvQkFBb0I7SUFpRC9CLFlBQ2MsRUFBZ0IsRUFDQyxHQUF1QjtRQUF2QixRQUFHLEdBQUgsR0FBRyxDQUFvQjtRQWhEdEQsMkNBQTJDO1FBQ2xDLFlBQU8sR0FBNkIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBQ3JGLHNEQUFzRDtRQUM3QyxzQkFBaUIsR0FBdUIsRUFBRSxDQUFDO1FBQ3BELGtFQUFrRTtRQUN6RCx1QkFBa0IsR0FBWSxLQUFLLENBQUM7UUFDN0Msc0VBQXNFO1FBQzdELHlCQUFvQixHQUFZLEtBQUssQ0FBQztRQUMvQyx1RkFBdUY7UUFDOUUscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBQzNDLGlDQUFpQztRQUN4QixlQUFVLEdBQVksS0FBSyxDQUFDO1FBQ3JDLG1DQUFtQztRQUMxQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQUV2Qyx5Q0FBeUM7UUFD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O2lIQTdRVSxvQkFBb0I7cUdBQXBCLG9CQUFvQiwrckJDdkJqQyw2OE1BNEdBOzJGRHJGYSxvQkFBb0I7a0JBTmhDLFNBQVM7K0JBQ0Usa0JBQWtCLFFBRXRCLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxtQkFDYix1QkFBdUIsQ0FBQyxNQUFNOzswQkFvRDVDLFFBQVE7OzBCQUNSLFFBQVE7NENBakRGLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRUcsT0FBTztzQkFBZixLQUFLO2dCQUVHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFFRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsb0JBQW9CO3NCQUE1QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFFRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBR0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdJLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUcsYUFBYTtzQkFBdEIsTUFBTTtnQkFFRyx1QkFBdUI7c0JBQWhDLE1BQU07Z0JBRUcsZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFFRyxNQUFNO3NCQUFmLE1BQU07Z0JBRUcsV0FBVztzQkFBcEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZywgU2VsZWN0T3B0aW9uIH0gZnJvbSAnLi4vLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IEVsZW1lbnRDcmVhdGVQYXlsb2FkLCBFbGVtZW50VXBkYXRlUGF5bG9hZCwgU2NyZWVuTmFtZU9wdGlvbiB9IGZyb20gJy4uL2VsZW1lbnQtcG9wdXAtZm9ybS1kYXRhJztcbmltcG9ydCB7IEVsZW1lbnRQb3B1cERhdGFFbGVtZW50cyB9IGZyb20gJy4uL2VsZW1lbnQtcG9wdXAtZGF0YSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NxYS1lbGVtZW50LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZWxlbWVudC1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRWxlbWVudEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKiBFbGVtZW50IElEIHdoZW4gZWRpdGluZyBleGlzdGluZyBlbGVtZW50ICovXG4gIEBJbnB1dCgpIGVsZW1lbnRJZD86IG51bWJlcjtcbiAgLyoqIEN1cnJlbnQgZWxlbWVudCBkYXRhIChmb3IgZWRpdCBtb2RlKSAqL1xuICBASW5wdXQoKSBlbGVtZW50OiBFbGVtZW50UG9wdXBEYXRhRWxlbWVudHMgPSB7IHRpdGxlOiAnJywgc2VsZWN0b3I6ICcnLCBsYWJlbHM6IFtdIH07XG4gIC8qKiBTY3JlZW4gbmFtZSBvcHRpb25zIGZvciBhdXRvY29tcGxldGUgKGZyb20gQVBJKSAqL1xuICBASW5wdXQoKSBzY3JlZW5OYW1lT3B0aW9uczogU2NyZWVuTmFtZU9wdGlvbltdID0gW107XG4gIC8qKiBXaGV0aGVyIG1vcmUgc2NyZWVuIG5hbWVzIGFyZSBhdmFpbGFibGUgZm9yIGluZmluaXRlIHNjcm9sbCAqL1xuICBASW5wdXQoKSBoYXNNb3JlU2NyZWVuTmFtZXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFRydWUgd2hpbGUgcGFyZW50IGlzIGxvYWRpbmcgc2NyZWVuIG5hbWVzIChzZWFyY2ggb3IgbG9hZCBtb3JlKSAqL1xuICBASW5wdXQoKSBpc0xvYWRpbmdTY3JlZW5OYW1lczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogVHJ1ZSB3aGlsZSBwYXJlbnQgaXMgZmV0Y2hpbmcgbGF0ZXN0IGVsZW1lbnQgZGF0YSBmb3IgZWRpdCAoc2hvd3MgbG9hZGluZyBzdGF0ZSkgKi9cbiAgQElucHV0KCkgaXNFbGVtZW50TG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hldGhlciB3ZSdyZSBpbiBlZGl0IG1vZGUgKi9cbiAgQElucHV0KCkgaXNFZGl0TW9kZTogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogV2hldGhlciB3ZSdyZSBpbiBjcmVhdGUgbW9kZSAqL1xuICBASW5wdXQoKSBpc0NyZWF0ZU1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogV2hldGhlciBlZGl0IGluIGRlcHRoIGlzIGF2YWlsYWJsZSAqL1xuICBASW5wdXQoKSBpc0VkaXRJbkRlcHRoQXZhaWxhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY3JlYXRlcyBhIG5ldyBlbGVtZW50IChwYXJlbnQgc2hvdWxkIGNhbGwgQVBJKSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlRWxlbWVudCA9IG5ldyBFdmVudEVtaXR0ZXI8RWxlbWVudENyZWF0ZVBheWxvYWQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciB1cGRhdGVzIGFuIGVsZW1lbnQgKHBhcmVudCBzaG91bGQgY2FsbCBBUEkpICovXG4gIEBPdXRwdXQoKSB1cGRhdGVFbGVtZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxFbGVtZW50VXBkYXRlUGF5bG9hZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHJlcXVlc3RzIHRvIGNyZWF0ZSBhIG5ldyBzY3JlZW4gbmFtZSAqL1xuICBAT3V0cHV0KCkgY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNlYXJjaGVzIHNjcmVlbiBuYW1lcyAoc2VydmVyIHNlYXJjaCkgKi9cbiAgQE91dHB1dCgpIHNlYXJjaFNjcmVlbk5hbWUgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIHNjcm9sbHMgdG8gbG9hZCBtb3JlIHNjcmVlbiBuYW1lcyAocGFzc2VzIGN1cnJlbnQgc2VhcmNoIHF1ZXJ5KSAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVTY3JlZW5OYW1lcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIFwiU2VsZWN0IGZyb20gRWxlbWVudCBsaXN0XCIgb3IgXCJDYW5jZWxcIiAqL1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICAvKiogRW1pdHRlZCB3aGVuIHVzZXIgY2xpY2tzIFwiRWRpdCBpbiBkZXB0aFwiICovXG4gIEBPdXRwdXQoKSBlZGl0SW5EZXB0aCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcblxuICBmb3JtITogRm9ybUdyb3VwO1xuICAvKiogTGFiZWxzICh0YWdzKSBhcyBzdHJpbmcgYXJyYXkgZm9yIG11bHRpLXRhZyBpbnB1dCAqL1xuICBmb3JtTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKiBDdXJyZW50IHRhZyBpbnB1dCB2YWx1ZSAqL1xuICB0YWdJbnB1dFZhbHVlID0gJyc7XG4gIC8qKiBDb25maWcgZm9yIHNjcmVlbiBuYW1lIGR5bmFtaWMtc2VsZWN0IChzZXJ2ZXIgc2VhcmNoLCBhbGxvd0N1c3RvbVZhbHVlLCBpbmZpbml0ZSBzY3JvbGwpICovXG4gIHNjcmVlbk5hbWVTZWxlY3RDb25maWchOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWc7XG4gIC8qKiBXaGV0aGVyIHdlJ3JlIHNhdmluZyAoZGlzYWJsZSBidXR0b25zKSAqL1xuICBzYXZpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBAT3B0aW9uYWwoKSBmYj86IEZvcm1CdWlsZGVyLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgY2RyPzogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7XG4gICAgdGhpcy5mYiA9IGZiIHx8IG5ldyBGb3JtQnVpbGRlcigpO1xuICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snc2NyZWVuTmFtZU9wdGlvbnMnXSB8fCBjaGFuZ2VzWydoYXNNb3JlU2NyZWVuTmFtZXMnXSB8fCBjaGFuZ2VzWydpc0xvYWRpbmdTY3JlZW5OYW1lcyddKSB7XG4gICAgICB0aGlzLnVwZGF0ZVNjcmVlbk5hbWVTZWxlY3RDb25maWcoKTtcbiAgICB9XG4gICAgaWYgKChjaGFuZ2VzWydlbGVtZW50J10gfHwgY2hhbmdlc1snZWxlbWVudElkJ10pICYmIHRoaXMuZWxlbWVudElkKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlRm9ybUZvckVkaXQoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2VsZW1lbnQnXSAmJiAhdGhpcy5lbGVtZW50SWQgJiYgdGhpcy5pc0NyZWF0ZU1vZGUpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVGb3JtRm9yQ3JlYXRlV2l0aEVsZW1lbnQoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbGVtZW50SWQpIHtcbiAgICAgIHRoaXMucG9wdWxhdGVGb3JtRm9yRWRpdCgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0ZU1vZGUgJiYgdGhpcy5lbGVtZW50KSB7XG4gICAgICB0aGlzLnBvcHVsYXRlRm9ybUZvckNyZWF0ZVdpdGhFbGVtZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplRm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcbiAgICAgIG5hbWU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHNjcmVlbk5hbWVJZDogW251bGwgYXMgbnVtYmVyIHwgbnVsbCwgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAgICAgIHZhbHVlOiBbJycsIFtWYWxpZGF0b3JzLnJlcXVpcmVkXV0sXG4gICAgfSk7XG4gICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVNjcmVlbk5hbWVTZWxlY3RDb25maWcoKTogdm9pZCB7XG4gICAgY29uc3Qgb3B0czogU2VsZWN0T3B0aW9uW10gPSAodGhpcy5zY3JlZW5OYW1lT3B0aW9ucyB8fCBbXSkubWFwKChvKSA9PiAoe1xuICAgICAgaWQ6IG8uaWQsXG4gICAgICB2YWx1ZTogby5pZCxcbiAgICAgIG5hbWU6IG8ubmFtZSxcbiAgICAgIGxhYmVsOiBvLm5hbWUsXG4gICAgfSkpO1xuICAgIGNvbnN0IGN1cnJlbnRJZCA9IHRoaXMuZm9ybT8uZ2V0KCdzY3JlZW5OYW1lSWQnKT8udmFsdWU7XG4gICAgaWYgKGN1cnJlbnRJZCAmJiB0aGlzLmVsZW1lbnQ/LnNjcmVlbk5hbWVJZCA9PT0gY3VycmVudElkICYmIHRoaXMuZWxlbWVudD8uc2NyZWVuTmFtZSkge1xuICAgICAgY29uc3QgZXhpc3RzID0gb3B0cy5zb21lKChvKSA9PiBvLmlkID09PSBjdXJyZW50SWQpO1xuICAgICAgaWYgKCFleGlzdHMpIHtcbiAgICAgICAgb3B0cy51bnNoaWZ0KHtcbiAgICAgICAgICBpZDogY3VycmVudElkLFxuICAgICAgICAgIHZhbHVlOiBjdXJyZW50SWQsXG4gICAgICAgICAgbmFtZTogU3RyaW5nKHRoaXMuZWxlbWVudC5zY3JlZW5OYW1lKSxcbiAgICAgICAgICBsYWJlbDogU3RyaW5nKHRoaXMuZWxlbWVudC5zY3JlZW5OYW1lKSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2NyZWVuTmFtZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgIGtleTogJ3NjcmVlbk5hbWVJZCcsXG4gICAgICBsYWJlbDogJ1NjcmVlbiBOYW1lJyxcbiAgICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0IG9yIGNyZWF0ZSBzY3JlZW4nLFxuICAgICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICAgIHNlcnZlclNlYXJjaDogdHJ1ZSxcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWUsXG4gICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgaGFzTW9yZTogdGhpcy5oYXNNb3JlU2NyZWVuTmFtZXMsXG4gICAgICBpc0xvYWRpbmc6IHRoaXMuaXNMb2FkaW5nU2NyZWVuTmFtZXMsXG4gICAgICBvblNlYXJjaDogKHEpID0+IHRoaXMuc2VhcmNoU2NyZWVuTmFtZS5lbWl0KHEgfHwgJycpLFxuICAgICAgb25Mb2FkTW9yZTogKHEpID0+IHRoaXMubG9hZE1vcmVTY3JlZW5OYW1lcy5lbWl0KHEgfHwgJycpLFxuICAgIH07XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBwb3B1bGF0ZUZvcm1Gb3JFZGl0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnQgJiYgdGhpcy5lbGVtZW50SWQgIT0gbnVsbCkge1xuICAgICAgdGhpcy5pc0VkaXRNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIG5hbWU6IHRoaXMuZWxlbWVudC50aXRsZSA/PyAnJyxcbiAgICAgICAgc2NyZWVuTmFtZUlkOiB0aGlzLmVsZW1lbnQuc2NyZWVuTmFtZUlkID8/IG51bGwsXG4gICAgICAgIHZhbHVlOiB0aGlzLmVsZW1lbnQuc2VsZWN0b3IgPz8gJycsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFsuLi4odGhpcy5lbGVtZW50LmxhYmVscyB8fCBbXSldO1xuICAgICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5pc0NyZWF0ZU1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHBvcHVsYXRlRm9ybUZvckNyZWF0ZVdpdGhFbGVtZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVsZW1lbnQpIHtcbiAgICAgIHRoaXMuaXNDcmVhdGVNb2RlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNFZGl0TW9kZSA9IGZhbHNlO1xuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICBuYW1lOiB0aGlzLmVsZW1lbnQudGl0bGUgPz8gJycsXG4gICAgICAgIHNjcmVlbk5hbWVJZDogdGhpcy5lbGVtZW50LnNjcmVlbk5hbWVJZCA/PyBudWxsLFxuICAgICAgICB2YWx1ZTogdGhpcy5lbGVtZW50LnNlbGVjdG9yID8/ICcnLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmZvcm1MYWJlbHMgPSBbLi4uKHRoaXMuZWxlbWVudC5sYWJlbHMgfHwgW10pXTtcbiAgICAgIHRoaXMudXBkYXRlU2NyZWVuTmFtZVNlbGVjdENvbmZpZygpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzQ3JlYXRlTW9kZSA9IHRydWU7XG4gICAgICB0aGlzLmlzRWRpdE1vZGUgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybUxhYmVscyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNkcj8ubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICAvKiogQ2FsbGVkIGJ5IHBhcmVudCB3aGVuIGEgbmV3IHNjcmVlbiBuYW1lIHdhcyBjcmVhdGVkIChzbyB3ZSBjYW4gc2V0IHRoZSBzZWxlY3RlZCB2YWx1ZSkgKi9cbiAgc2V0Q3JlYXRlZFNjcmVlbk5hbWUob3B0OiB7IGlkOiBudW1iZXI7IG5hbWU6IHN0cmluZyB9KTogdm9pZCB7XG4gICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/LnNldFZhbHVlKG9wdC5pZCk7XG4gICAgdGhpcy51cGRhdGVTY3JlZW5OYW1lU2VsZWN0Q29uZmlnKCk7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25BcHBseSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5mb3JtLmludmFsaWQpIHtcbiAgICAgIE9iamVjdC5rZXlzKHRoaXMuZm9ybS5jb250cm9scykuZm9yRWFjaCgoa2V5KSA9PlxuICAgICAgICB0aGlzLmZvcm0uZ2V0KGtleSk/Lm1hcmtBc1RvdWNoZWQoKVxuICAgICAgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLmZvcm0udmFsdWU7XG4gICAgY29uc3Qgc2NyZWVuTmFtZUlkID0gZm9ybVZhbHVlLnNjcmVlbk5hbWVJZDtcbiAgICBjb25zdCBzZWxlY3RlZE9wdCA9IHRoaXMuc2NyZWVuTmFtZU9wdGlvbnMuZmluZCgobykgPT4gby5pZCA9PT0gc2NyZWVuTmFtZUlkKTtcbiAgICBjb25zdCBzY3JlZW5OYW1lTmFtZSA9IHNlbGVjdGVkT3B0Py5uYW1lID8gU3RyaW5nKHNlbGVjdGVkT3B0Lm5hbWUpLnRyaW0oKSA6ICcnO1xuICAgIGlmICghc2NyZWVuTmFtZUlkIHx8ICFzY3JlZW5OYW1lTmFtZSkge1xuICAgICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/LnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgdGhpcy5mb3JtLmdldCgnc2NyZWVuTmFtZUlkJyk/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNhdmluZyA9IHRydWU7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIG5hbWU6IGZvcm1WYWx1ZS5uYW1lLnRyaW0oKSxcbiAgICAgIHNjcmVlbk5hbWVJZCxcbiAgICAgIHNjcmVlbk5hbWVOYW1lLFxuICAgICAgbG9jYXRvclZhbHVlOiBmb3JtVmFsdWUudmFsdWUudHJpbSgpLFxuICAgICAgbGFiZWxzOiBbLi4udGhpcy5mb3JtTGFiZWxzXSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuaXNFZGl0TW9kZSAmJiB0aGlzLmVsZW1lbnRJZCkge1xuICAgICAgdGhpcy51cGRhdGVFbGVtZW50LmVtaXQoe1xuICAgICAgICAuLi5wYXlsb2FkLFxuICAgICAgICBlbGVtZW50SWQ6IHRoaXMuZWxlbWVudElkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY3JlYXRlRWxlbWVudC5lbWl0KHBheWxvYWQpO1xuICAgIH1cbiAgfVxuXG4gIG9uQ3JlYXRlT3JVcGRhdGVTdWNjZXNzKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DcmVhdGVPclVwZGF0ZUVycm9yKCk6IHZvaWQge1xuICAgIHRoaXMuc2F2aW5nID0gZmFsc2U7XG4gICAgdGhpcy5jZHI/Lm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DYW5jZWwoKTogdm9pZCB7XG4gICAgdGhpcy5jYW5jZWwuZW1pdCgpO1xuICB9XG5cbiAgb25FZGl0SW5EZXB0aChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuZWRpdEluRGVwdGguZW1pdCgpO1xuICB9XG5cbiAgZ2V0Rm9ybUNvbnRyb2woY29udHJvbE5hbWU6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldChjb250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gIH1cblxuICBnZXRGb3JtQ29udHJvbFZhbHVlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KGNvbnRyb2xOYW1lKT8udmFsdWUgfHwgJyc7XG4gIH1cblxuICBvbkZvcm1Db250cm9sQ2hhbmdlKGNvbnRyb2xOYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZSh7IFtjb250cm9sTmFtZV06IHZhbHVlIH0pO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBBZGQgYSB0YWcgKGxhYmVsKSAqL1xuICBhZGRUYWcodGFnPzogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgdCA9ICh0YWcgfHwgdGhpcy50YWdJbnB1dFZhbHVlIHx8ICcnKS50cmltKCk7XG4gICAgaWYgKHQgJiYgIXRoaXMuZm9ybUxhYmVscy5pbmNsdWRlcyh0KSkge1xuICAgICAgdGhpcy5mb3JtTGFiZWxzID0gWy4uLnRoaXMuZm9ybUxhYmVscywgdF07XG4gICAgICB0aGlzLnRhZ0lucHV0VmFsdWUgPSAnJztcbiAgICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVUYWcodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1MYWJlbHMgPSB0aGlzLmZvcm1MYWJlbHMuZmlsdGVyKChsKSA9PiBsICE9PSB0YWcpO1xuICAgIHRoaXMuY2RyPy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uVGFnSW5wdXRLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJyB8fCBldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuYWRkVGFnKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFRhZ3MgdG8gcmVuZGVyIGFzIGNoaXBzIChsaW1pdGVkKSAqL1xuICBnZXQgdmlzaWJsZVRhZ3MoKTogc3RyaW5nW10ge1xuICAgIGlmICghdGhpcy5mb3JtTGFiZWxzIHx8IHRoaXMuZm9ybUxhYmVscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1MYWJlbHMgfHwgW107XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8qKiBUb29sdGlwIHRleHQgc2hvd2luZyBhbGwgdGFncyAqL1xuICBnZXQgYWxsVGFnc1Rvb2x0aXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHRoaXMuZm9ybUxhYmVscyB8fCBbXSkuam9pbignLCAnKTtcbiAgfVxufVxuXG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC00IGNxYS1weC0xIGNxYS1wdC0zXCI+XG4gIDxkaXYgKm5nSWY9XCJpc0VsZW1lbnRMb2FkaW5nICYmIGlzRWRpdE1vZGVcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtZ2FwLTMgY3FhLXB5LThcIj5cbiAgICA8c3ZnIGNsYXNzPVwiY3FhLWFuaW1hdGUtc3BpbiBjcWEtaC02IGNxYS13LTYgY3FhLXRleHQtWyMzRjQzRUVdXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGZpbGw9XCJub25lXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiPlxuICAgICAgPGNpcmNsZSBjbGFzcz1cImNxYS1vcGFjaXR5LTI1XCIgY3g9XCIxMlwiIGN5PVwiMTJcIiByPVwiMTBcIiBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCI0XCI+PC9jaXJjbGU+XG4gICAgICA8cGF0aCBjbGFzcz1cImNxYS1vcGFjaXR5LTc1XCIgZmlsbD1cImN1cnJlbnRDb2xvclwiIGQ9XCJNNCAxMmE4IDggMCAwMTgtOFYwQzUuMzczIDAgMCA1LjM3MyAwIDEyaDR6bTIgNS4yOTFBNy45NjIgNy45NjIgMCAwMTQgMTJIMGMwIDMuMDQyIDEuMTM1IDUuODI0IDMgNy45MzhsMy0yLjY0N3pcIj48L3BhdGg+XG4gICAgPC9zdmc+XG4gICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtc21cIj5Mb2FkaW5nIGVsZW1lbnQgZGF0YS4uLjwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxkaXYgKm5nSWY9XCIhaXNFbGVtZW50TG9hZGluZ1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0xLjVcIj5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dCBcbiAgICAgIGNsYXNzPVwiY3FhLXctMS8yXCIgXG4gICAgICBsYWJlbD1cIk5hbWVcIiBcbiAgICAgIHBsYWNlaG9sZGVyPVwiZGVmYXVsdC1lbGVtZW50XCJcbiAgICAgIFt2YWx1ZV09XCJnZXRGb3JtQ29udHJvbFZhbHVlKCduYW1lJylcIlxuICAgICAgW2Vycm9yc109XCJnZXRGb3JtQ29udHJvbCgnbmFtZScpPy50b3VjaGVkICYmIGdldEZvcm1Db250cm9sKCduYW1lJyk/LmludmFsaWQgPyBbJ05hbWUgaXMgcmVxdWlyZWQnXSA6IFtdXCJcbiAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkZvcm1Db250cm9sQ2hhbmdlKCduYW1lJywgJGV2ZW50KVwiPlxuICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLXctMS8yXCI+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0IFtmb3JtXT1cImZvcm1cIiBbY29uZmlnXT1cInNjcmVlbk5hbWVTZWxlY3RDb25maWdcIlxuICAgICAgICAoYWRkQ3VzdG9tVmFsdWUpPVwiY3JlYXRlU2NyZWVuTmFtZVJlcXVlc3QuZW1pdCgkZXZlbnQudmFsdWUpXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgIDxkaXYgKm5nSWY9XCJnZXRGb3JtQ29udHJvbCgnc2NyZWVuTmFtZUlkJyk/LnRvdWNoZWQgJiYgZ2V0Rm9ybUNvbnRyb2woJ3NjcmVlbk5hbWVJZCcpPy5pbnZhbGlkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xIGNxYS1tdC0xLjVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1zdGFydCBjcWEtZ2FwLTEuNVwiPlxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIlxuICAgICAgICAgICAgd2lkdGg9XCIxNFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIxNFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDE0IDE0XCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXgtc2hyaW5rLTAgY3FhLW10LTAuNVwiPlxuICAgICAgICAgICAgPHBhdGggZD1cIk03IDEuNzVDNC4xIDEuNzUgMS43NSA0LjEgMS43NSA3QzEuNzUgOS45IDQuMSAxMi4yNSA3IDEyLjI1QzkuOSAxMi4yNSAxMi4yNSA5LjkgMTIuMjUgN0MxMi4yNSA0LjEgOS45IDEuNzUgNyAxLjc1Wk03IDkuNjI1QzYuNjU2MjUgOS42MjUgNi4zNzUgOS4zNDM3NSA2LjM3NSA5VjdDNi4zNzUgNi42NTYyNSA2LjY1NjI1IDYuMzc1IDcgNi4zNzVDNy4zNDM3NSA2LjM3NSA3LjYyNSA2LjY1NjI1IDcuNjI1IDdWOUM3LjYyNSA5LjM0Mzc1IDcuMzQzNzUgOS42MjUgNyA5LjYyNVpNNy42MjUgNS4yNUg2LjM3NVY0SDcuNjI1VjUuMjVaXCIgZmlsbD1cIiNFRjQ0NDRcIi8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0VGNDQ0NF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1sZWFkaW5nLVsxOHB4XVwiPlxuICAgICAgICAgICAgU2NyZWVuIE5hbWUgaXMgcmVxdWlyZWRcbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWxlbWVudExvYWRpbmdcIj5cbiAgICA8Y3FhLWN1c3RvbS1pbnB1dCBcbiAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiICBcbiAgICAgIGxhYmVsPVwiRW50ZXIgVmFsdWVcIiBcbiAgICAgIHBsYWNlaG9sZGVyPVwiI2RlZmF1bHRfaWQgb3IgeHBhdGhcIlxuICAgICAgW3ZhbHVlXT1cImdldEZvcm1Db250cm9sVmFsdWUoJ3ZhbHVlJylcIlxuICAgICAgW2Vycm9yc109XCJnZXRGb3JtQ29udHJvbCgndmFsdWUnKT8udG91Y2hlZCAmJiBnZXRGb3JtQ29udHJvbCgndmFsdWUnKT8uaW52YWxpZCA/IFsnVmFsdWUgaXMgcmVxdWlyZWQnXSA6IFtdXCJcbiAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkZvcm1Db250cm9sQ2hhbmdlKCd2YWx1ZScsICRldmVudClcIj5cbiAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgPGRpdiBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1ibG9jayBjcWEtdGV4dC1bMTRweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtbWItMVwiPkxhYmVscyAodGFncyk8L2xhYmVsPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLW1pbi1oLVs0MnB4XSBjcWEtbWF4LWgtWzgwcHhdIGNxYS1vdmVyZmxvdy15LWF1dG8gY3FhLXNjcm9sbGJhci10aGluIGNxYS1zY3JvbGxiYXItdHJhY2stdHJhbnNwYXJlbnQgY3FhLXNjcm9sbGJhci10aHVtYi1bI0U1RTdFQl0gY3FhLXNjcm9sbGJhci10aHVtYi1yb3VuZGVkLWZ1bGwgY3FhLXNjcm9sbGJhci10aHVtYi1ob3ZlcjpjcWEtYmctWyNEMUQ1REJdXCJcbiAgICAgICAgKm5nSWY9XCJmb3JtTGFiZWxzPy5sZW5ndGg7IGVsc2Ugbm9UYWdzQ29udGFpbmVyXCI+XG4gICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCB0YWcgb2YgdmlzaWJsZVRhZ3NcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xIGNxYS1weC0yIGNxYS1weS0xIGNxYS1iZy1bI2VmZjZmZl0gY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjYzhlMGZmXSBjcWEtcm91bmRlZC1bOHB4XSBjcWEtdGV4dC1bMTJweF0gY3FhLXRleHQtWyMzRjQzRUVdXCJcbiAgICAgICAgICBbbWF0VG9vbHRpcF09XCJ0YWdcIlxuICAgICAgICAgIG1hdFRvb2x0aXBQb3NpdGlvbj1cImFib3ZlXCJcbiAgICAgICAgICBzdHlsZT1cIm1heC13aWR0aDogMTQwcHg7IG92ZXJmbG93OiBoaWRkZW47IHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOyB3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLW1heC13LWZ1bGwgY3FhLXRydW5jYXRlXCI+e3sgdGFnIH19PC9zcGFuPlxuICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVUYWcodGFnKVwiIGNsYXNzPVwiY3FhLXAtMC41IGhvdmVyOmNxYS1iZy1bI2M4ZTBmZl0gY3FhLXJvdW5kZWQgY3FhLWN1cnNvci1wb2ludGVyIGNxYS1oLVsxNnB4XSBjcWEtdy1bMTZweF1cIj5cbiAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIiFjcWEtdy0zICFjcWEtaC0zICFjcWEtdGV4dC1bMTRweF1cIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LVsxMjBweF0gY3FhLXB4LTIgY3FhLXB5LTEgY3FhLXRleHQtc20gY3FhLWJvcmRlci0wIGNxYS1vdXRsaW5lLW5vbmUgY3FhLWJnLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgYW5kIHByZXNzIEVudGVyIHRvIGFkZFwiXG4gICAgICAgICAgWyhuZ01vZGVsKV09XCJ0YWdJbnB1dFZhbHVlXCJcbiAgICAgICAgICAoa2V5ZG93bik9XCJvblRhZ0lucHV0S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAoYmx1cik9XCJhZGRUYWcoKVwiXG4gICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiPlxuICAgICAgPC9kaXY+XG4gICAgICA8bmctdGVtcGxhdGUgI25vVGFnc0NvbnRhaW5lcj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yIGNxYS1wLTIgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDAgY3FhLXJvdW5kZWQtbWQgY3FhLW1pbi1oLVs0MnB4XVwiPlxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LVsxMjBweF0gY3FhLXB4LTIgY3FhLXB5LTEgY3FhLXRleHQtc20gY3FhLWJvcmRlci0wIGNxYS1vdXRsaW5lLW5vbmUgY3FhLWJnLXRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkXCJcbiAgICAgICAgICAgIFsobmdNb2RlbCldPVwidGFnSW5wdXRWYWx1ZVwiXG4gICAgICAgICAgICAoa2V5ZG93bik9XCJvblRhZ0lucHV0S2V5ZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChibHVyKT1cImFkZFRhZygpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTNcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtc3RyZXRjaCBjcWEtZ2FwLTIgY3FhLXctZnVsbFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJvdXRsaW5lZFwiIGJ0blNpemU9XCJsZ1wiIFt0ZXh0XT1cIihlbGVtZW50SWQgPyAnQ2FuY2VsJyA6ICdTZWxlY3QgZnJvbSBFbGVtZW50IGxpc3QnKVwiIFtmdWxsV2lkdGhdPVwidHJ1ZVwiIChjbGlja2VkKT1cIm9uQ2FuY2VsKClcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyM0MTQxNDZdJ1wiIFtkaXNhYmxlZF09XCJzYXZpbmdcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgICAgIDxjcWEtYnV0dG9uIHZhcmlhbnQ9XCJmaWxsZWRcIiBidG5TaXplPVwibGdcIiBbdGV4dF09XCJzYXZpbmcgPyAnU2F2aW5nLi4uJyA6IChpc0VkaXRNb2RlID8gJ1VwZGF0ZScgOiAnQ3JlYXRlJylcIiBbZnVsbFdpZHRoXT1cInRydWVcIiAoY2xpY2tlZCk9XCJvbkFwcGx5KClcIlxuICAgICAgICAgICAgW2N1c3RvbUNsYXNzXT1cIidjcWEtdGV4dC1bMTRweF0gY3FhLXB5LVs5cHhdIGNxYS1ib3JkZXItWyMzRjQzRUVdJ1wiIFtkaXNhYmxlZF09XCJzYXZpbmdcIj48L2NxYS1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGEgaHJlZj1cIiNcIiAqbmdJZj1cImlzRWRpdEluRGVwdGhBdmFpbGFibGVcIiAoY2xpY2spPVwib25FZGl0SW5EZXB0aCgkZXZlbnQpXCJcbiAgICAgIGNsYXNzPVwiY3FhLXRleHQtWyMzRjQzRUVdIGNxYS10ZXh0LVsxMnB4XSBjcWEtbGVhZGluZy1bMThweF0gY3FhLWZvbnQtbWVkaXVtIGNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLW5vLXVuZGVybGluZSBob3ZlcjpjcWEtbm8tdW5kZXJsaW5lIGNxYS1zZWxmLWNlbnRlclwiPlxuICAgICAgPG1hdC1pY29uIGNsYXNzPVwiIWNxYS13LTQgIWNxYS1oLTQgIWNxYS10ZXh0LVsxNnB4XVwiPm9wZW5faW5fbmV3PC9tYXQtaWNvbj5cbiAgICAgIEVkaXQgaW4gZGVwdGggKG9wZW4gZGV0YWlsZWQgcmlnaHQgcGFuZWwpXG4gICAgPC9hPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG5cbiJdfQ==