mmhglobal-dynamicform 2.10.1 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/esm2020/lib/zselectmultiple/zselectmultiple.component.mjs +9 -9
- package/fesm2015/mmhglobal-dynamicform.mjs +8 -8
- package/fesm2015/mmhglobal-dynamicform.mjs.map +1 -1
- package/fesm2020/mmhglobal-dynamicform.mjs +8 -8
- package/fesm2020/mmhglobal-dynamicform.mjs.map +1 -1
- package/lib/zselectmultiple/zselectmultiple.component.d.ts +2 -2
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,8 +3,12 @@
|
|
|
3
3
|
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 11.2.13.
|
|
4
4
|
|
|
5
5
|
## Changelog
|
|
6
|
+
`2.10.2`<br/>
|
|
7
|
+
[zselectmultiple] Use InternalComponentType to control which kendo dropdown to use.<br/>
|
|
8
|
+
[zselectmultiple] Fix filtering issue in 2.10.1.
|
|
9
|
+
|
|
6
10
|
`2.10.1`<br/>
|
|
7
|
-
Added new component: ksplitter.<br/>
|
|
11
|
+
Added new component: ksplitter. (Require middleware 2.1.2).<br/>
|
|
8
12
|
[zdiv] Added onclick event.<br/>
|
|
9
13
|
[zselectmultiple] Added kendo-dropdownlist (data.Multiple == false && data.Filterable == false).<br/>
|
|
10
14
|
[zselectmultiple] Added configurable property: enableFiltering and ClearButton.<br/>
|
|
@@ -12,7 +16,7 @@ Added new component: ksplitter.<br/>
|
|
|
12
16
|
[mainservice] shifted removeTextEditorValueFromFormPatching function to zcore.
|
|
13
17
|
|
|
14
18
|
`2.10.0`<br/>
|
|
15
|
-
Added new component: zloop. That clone it's child components to simulate ngFor behaviour
|
|
19
|
+
Added new component: zloop. That clone it's child components to simulate ngFor behaviour. (Require middleware 2.1.1)<br/>
|
|
16
20
|
|
|
17
21
|
`2.9.1`<br/>
|
|
18
22
|
[sfquerybuilder] - added flag HideShowResultPanel to hide/show result panel.<br/>
|
|
@@ -5,7 +5,7 @@ import { of } from "rxjs";
|
|
|
5
5
|
import { tap, delay } from "rxjs/operators";
|
|
6
6
|
/********** Component & Service **********/
|
|
7
7
|
import { InputFieldBase } from "../components/inputfieldbase.component";
|
|
8
|
-
import { ZComponentHelper, ZSelectPostApiParams } from "mmhglobal-zcore";
|
|
8
|
+
import { ZComponentHelper, ZSelectPostApiParams, InternalComponentType_DropDown } from "mmhglobal-zcore";
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
import * as i1 from "../services/zcomponent.service";
|
|
11
11
|
import * as i2 from "mmhglobal-zcore";
|
|
@@ -489,25 +489,25 @@ export class ZselectmultipleComponent extends InputFieldBase {
|
|
|
489
489
|
return false;
|
|
490
490
|
}
|
|
491
491
|
setComponentToUse() {
|
|
492
|
-
if (
|
|
493
|
-
this.componentType =
|
|
492
|
+
if (this.data.InternalComponentType && Object.values(InternalComponentType_DropDown).includes(this.data.InternalComponentType)) {
|
|
493
|
+
this.componentType = this.data.InternalComponentType;
|
|
494
494
|
}
|
|
495
495
|
else if (!this.data.Multiple) {
|
|
496
|
-
this.componentType =
|
|
496
|
+
this.componentType = InternalComponentType_DropDown.combobox;
|
|
497
497
|
}
|
|
498
498
|
else if (this.data.Multiple && !this.data.EnableCheckbox) {
|
|
499
|
-
this.componentType =
|
|
499
|
+
this.componentType = InternalComponentType_DropDown.multiselect;
|
|
500
500
|
}
|
|
501
501
|
else if (this.data.Multiple && this.data.EnableCheckbox) {
|
|
502
|
-
this.componentType =
|
|
502
|
+
this.componentType = InternalComponentType_DropDown.multiselecttree;
|
|
503
503
|
}
|
|
504
504
|
}
|
|
505
505
|
}
|
|
506
506
|
ZselectmultipleComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZselectmultipleComponent, deps: [{ token: i1.ZComponentService }, { token: i2.ResourceApiService }, { token: i2.WebApiService }, { token: i2.CacheService }, { token: i2.FieldService }], target: i0.ɵɵFactoryTarget.Component });
|
|
507
|
-
ZselectmultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZselectmultipleComponent, selector: "app-zselectmultiple", viewQueries: [{ propertyName: "comboboxComponent", first: true, predicate: ["comboboxComponent"], descendants: true }, { propertyName: "dropdownlistComponent", first: true, predicate: ["dropdownlistComponent"], descendants: true }, { propertyName: "multiselect", first: true, predicate: ["multiselect"], descendants: true }, { propertyName: "multiselecttree", first: true, predicate: ["multiselecttree"], descendants: true }, { propertyName: "selectComponent", first: true, predicate: ["selectComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && componentType == 'combobox'\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && componentType == 'multiselect'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselect\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && componentType == 'multiselecttree'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselecttree\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"Value\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n <kendo-dropdownlist *ngIf=\"!isMobileScreen() && componentType == 'dropdownlist'\"\r\n class=\"input-field e1tag-style1\"\r\n #dropdownlistComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-dropdownlist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-dropdownlist.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-dropdownlist .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-dropdownlist .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-dropdownlist .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-dropdownlist.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-dropdownlist:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-combobox.no-border,:host ::ng-deep kendo-dropdownlist.no-border,:host ::ng-deep kendo-multiselect.no-border{box-shadow:none!important;border:none!important}:host ::ng-deep kendo-combobox.no-border>.k-input-button,:host ::ng-deep kendo-dropdownlist.no-border>.k-input-button,:host ::ng-deep kendo-multiselect.no-border>.k-input-button{background:none;border:none}:host ::ng-deep kendo-combobox.no-background,:host ::ng-deep kendo-dropdownlist.no-background,:host ::ng-deep kendo-multiselect.no-background{background:none}:host ::ng-deep kendo-combobox.right-align>kendo-searchbar>input,:host ::ng-deep kendo-dropdownlist.right-align>kendo-searchbar>input,:host ::ng-deep kendo-multiselect.right-align>kendo-searchbar>input{text-align:right}:host ::ng-deep kendo-combobox.right-align>.k-input-inner,:host ::ng-deep kendo-dropdownlist.right-align>.k-input-inner,:host ::ng-deep kendo-multiselect.right-align>.k-input-inner{text-align:right}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}.zselect-virtualization{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], components: [{ type: i3.IonicSelectableComponent, selector: "ionic-selectable", inputs: ["items", "modalCssClass", "modalEnterAnimation", "modalLeaveAnimation", "isConfirmButtonEnabled", "itemValueField", "itemTextField", "groupValueField", "groupTextField", "canSearch", "hasInfiniteScroll", "hasVirtualScroll", "virtualScrollApproxItemHeight", "searchPlaceholder", "placeholder", "searchFailText", "clearButtonText", "addButtonText", "confirmButtonText", "closeButtonText", "shouldFocusSearchbar", "headerColor", "groupColor", "closeButtonSlot", "itemIconSlot", "searchDebounce", "disabledItems", "shouldStoreItemValue", "canSaveItem", "canDeleteItem", "virtualScrollHeaderFn", "isEnabled", "shouldBackdropClose", "hasConfirmButton", "isOnSearchEnabled", "canClear", "isMultiple", "canAddItem"], outputs: ["itemsChange", "onChange", "onSearch", "onSearchFail", "onSearchSuccess", "onInfiniteScroll", "onOpen", "onClose", "onSelect", "onClear", "onSaveItem", "onDeleteItem", "onAddItem"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i6.ComboBoxComponent, selector: "kendo-combobox", inputs: ["focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "popupSettings", "listHeight", "iconClass", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoComboBox"] }, { type: i6.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: i6.MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: ["tabindex", "size", "rounded", "fillMode", "popupSettings", "checkableSettings", "data", "value", "dataItems", "textField", "valueField", "valueDepth", "loading", "placeholder", "listHeight", "disabled", "readonly", "valuePrimitive", "loadOnDemand", "focusableId", "clearButton", "filterable", "checkAll", "hasChildren", "fetchChildren", "isNodeExpanded", "isNodeVisible", "itemDisabled", "tagMapper"], outputs: ["focus", "blur", "open", "opened", "close", "closed", "nodeExpand", "nodeCollapse", "valueChange", "removeTag", "filterChange"], exportAs: ["kendoMultiSelectTree"] }, { type: i6.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.IonicSelectableItemIconTemplateDirective, selector: "[ionicSelectableItemIconTemplate]" }, { type: i3.IonicSelectableCloseButtonTemplateDirective, selector: "[ionicSelectableCloseButtonTemplate]" }, { type: i3.IonicSelectableTitleTemplateDirective, selector: "[ionicSelectableTitleTemplate]" }, { type: i3.IonicSelectableItemTemplateDirective, selector: "[ionicSelectableItemTemplate]" }, { type: i9.OpenOnFocusDirective, selector: "kendo-combobox[openOnFocus]", inputs: ["openOnFocus"] }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FilterDirective, selector: "[kendoDropDownFilter]", inputs: ["data", "kendoDropDownFilter", "filterable"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i6.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { type: i6.DropDownTreesExpandDirective, selector: "[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]", inputs: ["isNodeExpanded"] }, { type: i6.MultiSelectTreeHierarchyBindingDirective, selector: "[kendoMultiSelectTreeHierarchyBinding]", inputs: ["kendoMultiSelectTreeHierarchyBinding"] }, { type: i6.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }], pipes: { "async": i8.AsyncPipe, "zselectTranslationParser": i11.ZSelectTranslationParser } });
|
|
507
|
+
ZselectmultipleComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZselectmultipleComponent, selector: "app-zselectmultiple", viewQueries: [{ propertyName: "comboboxComponent", first: true, predicate: ["comboboxComponent"], descendants: true }, { propertyName: "dropdownlistComponent", first: true, predicate: ["dropdownlistComponent"], descendants: true }, { propertyName: "multiselect", first: true, predicate: ["multiselect"], descendants: true }, { propertyName: "multiselecttree", first: true, predicate: ["multiselecttree"], descendants: true }, { propertyName: "selectComponent", first: true, predicate: ["selectComponent"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && componentType == 'combobox'\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && componentType == 'multiselect'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselect\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && componentType == 'multiselecttree'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselecttree\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"Value\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n <kendo-dropdownlist *ngIf=\"!isMobileScreen() && componentType == 'dropdownlist'\"\r\n class=\"input-field e1tag-style1\"\r\n #dropdownlistComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-dropdownlist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-dropdownlist.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-dropdownlist .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-dropdownlist .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-dropdownlist .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-dropdownlist.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-dropdownlist:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-combobox.no-border,:host ::ng-deep kendo-dropdownlist.no-border,:host ::ng-deep kendo-multiselect.no-border{box-shadow:none!important;border:none!important}:host ::ng-deep kendo-combobox.no-border>.k-input-button,:host ::ng-deep kendo-dropdownlist.no-border>.k-input-button,:host ::ng-deep kendo-multiselect.no-border>.k-input-button{background:none;border:none}:host ::ng-deep kendo-combobox.no-background,:host ::ng-deep kendo-dropdownlist.no-background,:host ::ng-deep kendo-multiselect.no-background{background:none}:host ::ng-deep kendo-combobox.right-align>kendo-searchbar>input,:host ::ng-deep kendo-dropdownlist.right-align>kendo-searchbar>input,:host ::ng-deep kendo-multiselect.right-align>kendo-searchbar>input{text-align:right}:host ::ng-deep kendo-combobox.right-align>.k-input-inner,:host ::ng-deep kendo-dropdownlist.right-align>.k-input-inner,:host ::ng-deep kendo-multiselect.right-align>.k-input-inner{text-align:right}:host ::ng-deep kendo-dropdownlist{background:white}:host ::ng-deep kendo-dropdownlist>span.k-input-inner>.k-input-value-text{width:0px}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}.zselect-virtualization{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"], components: [{ type: i3.IonicSelectableComponent, selector: "ionic-selectable", inputs: ["items", "modalCssClass", "modalEnterAnimation", "modalLeaveAnimation", "isConfirmButtonEnabled", "itemValueField", "itemTextField", "groupValueField", "groupTextField", "canSearch", "hasInfiniteScroll", "hasVirtualScroll", "virtualScrollApproxItemHeight", "searchPlaceholder", "placeholder", "searchFailText", "clearButtonText", "addButtonText", "confirmButtonText", "closeButtonText", "shouldFocusSearchbar", "headerColor", "groupColor", "closeButtonSlot", "itemIconSlot", "searchDebounce", "disabledItems", "shouldStoreItemValue", "canSaveItem", "canDeleteItem", "virtualScrollHeaderFn", "isEnabled", "shouldBackdropClose", "hasConfirmButton", "isOnSearchEnabled", "canClear", "isMultiple", "canAddItem"], outputs: ["itemsChange", "onChange", "onSearch", "onSearchFail", "onSearchSuccess", "onInfiniteScroll", "onOpen", "onClose", "onSelect", "onClear", "onSaveItem", "onDeleteItem", "onAddItem"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }, { type: i5.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { type: i6.ComboBoxComponent, selector: "kendo-combobox", inputs: ["focusableId", "allowCustom", "data", "value", "textField", "valueField", "valuePrimitive", "valueNormalizer", "placeholder", "popupSettings", "listHeight", "iconClass", "loading", "suggest", "clearButton", "disabled", "itemDisabled", "readonly", "tabindex", "tabIndex", "filterable", "virtual", "size", "rounded", "fillMode"], outputs: ["valueChange", "selectionChange", "filterChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoComboBox"] }, { type: i6.MultiSelectComponent, selector: "kendo-multiselect", inputs: ["focusableId", "autoClose", "loading", "data", "value", "valueField", "textField", "tabindex", "tabIndex", "size", "rounded", "fillMode", "placeholder", "disabled", "itemDisabled", "checkboxes", "readonly", "filterable", "virtual", "popupSettings", "listHeight", "valuePrimitive", "clearButton", "tagMapper", "allowCustom", "valueNormalizer"], outputs: ["filterChange", "valueChange", "open", "opened", "close", "closed", "focus", "blur", "removeTag"], exportAs: ["kendoMultiSelect"] }, { type: i6.MultiSelectTreeComponent, selector: "kendo-multiselecttree", inputs: ["tabindex", "size", "rounded", "fillMode", "popupSettings", "checkableSettings", "data", "value", "dataItems", "textField", "valueField", "valueDepth", "loading", "placeholder", "listHeight", "disabled", "readonly", "valuePrimitive", "loadOnDemand", "focusableId", "clearButton", "filterable", "checkAll", "hasChildren", "fetchChildren", "isNodeExpanded", "isNodeVisible", "itemDisabled", "tagMapper"], outputs: ["focus", "blur", "open", "opened", "close", "closed", "nodeExpand", "nodeCollapse", "valueChange", "removeTag", "filterChange"], exportAs: ["kendoMultiSelectTree"] }, { type: i6.DropDownListComponent, selector: "kendo-dropdownlist", inputs: ["iconClass", "loading", "data", "value", "textField", "valueField", "popupSettings", "listHeight", "defaultItem", "disabled", "itemDisabled", "readonly", "filterable", "virtual", "ignoreCase", "delay", "valuePrimitive", "tabindex", "tabIndex", "size", "rounded", "fillMode", "id"], outputs: ["valueChange", "filterChange", "selectionChange", "open", "opened", "close", "closed", "focus", "blur"], exportAs: ["kendoDropDownList"] }], directives: [{ type: i7.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i7.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i7.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.IonicSelectableItemIconTemplateDirective, selector: "[ionicSelectableItemIconTemplate]" }, { type: i3.IonicSelectableCloseButtonTemplateDirective, selector: "[ionicSelectableCloseButtonTemplate]" }, { type: i3.IonicSelectableTitleTemplateDirective, selector: "[ionicSelectableTitleTemplate]" }, { type: i3.IonicSelectableItemTemplateDirective, selector: "[ionicSelectableItemTemplate]" }, { type: i9.OpenOnFocusDirective, selector: "kendo-combobox[openOnFocus]", inputs: ["openOnFocus"] }, { type: i7.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.FilterDirective, selector: "[kendoDropDownFilter]", inputs: ["data", "kendoDropDownFilter", "filterable"] }, { type: i8.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i6.ItemTemplateDirective, selector: "[kendoDropDownListItemTemplate],[kendoComboBoxItemTemplate],[kendoAutoCompleteItemTemplate],[kendoMultiSelectItemTemplate]" }, { type: i6.DropDownTreesExpandDirective, selector: "[kendoDropDownTreeExpandable], [kendoMultiSelectTreeExpandable]", inputs: ["isNodeExpanded"] }, { type: i6.MultiSelectTreeHierarchyBindingDirective, selector: "[kendoMultiSelectTreeHierarchyBinding]", inputs: ["kendoMultiSelectTreeHierarchyBinding"] }, { type: i6.NoDataTemplateDirective, selector: "[kendoDropDownListNoDataTemplate],[kendoDropDownTreeNoDataTemplate],[kendoComboBoxNoDataTemplate],[kendoMultiColumnComboBoxNoDataTemplate],[kendoAutoCompleteNoDataTemplate],[kendoMultiSelectNoDataTemplate],[kendoMultiSelectTreeNoDataTemplate]" }], pipes: { "async": i8.AsyncPipe, "zselectTranslationParser": i11.ZSelectTranslationParser } });
|
|
508
508
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZselectmultipleComponent, decorators: [{
|
|
509
509
|
type: Component,
|
|
510
|
-
args: [{ selector: "app-zselectmultiple", template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && componentType == 'combobox'\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && componentType == 'multiselect'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselect\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && componentType == 'multiselecttree'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselecttree\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"Value\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n <kendo-dropdownlist *ngIf=\"!isMobileScreen() && componentType == 'dropdownlist'\"\r\n class=\"input-field e1tag-style1\"\r\n #dropdownlistComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.enableFiltering == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-dropdownlist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-dropdownlist.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-dropdownlist .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-dropdownlist .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-dropdownlist .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-dropdownlist.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-dropdownlist:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-combobox.no-border,:host ::ng-deep kendo-dropdownlist.no-border,:host ::ng-deep kendo-multiselect.no-border{box-shadow:none!important;border:none!important}:host ::ng-deep kendo-combobox.no-border>.k-input-button,:host ::ng-deep kendo-dropdownlist.no-border>.k-input-button,:host ::ng-deep kendo-multiselect.no-border>.k-input-button{background:none;border:none}:host ::ng-deep kendo-combobox.no-background,:host ::ng-deep kendo-dropdownlist.no-background,:host ::ng-deep kendo-multiselect.no-background{background:none}:host ::ng-deep kendo-combobox.right-align>kendo-searchbar>input,:host ::ng-deep kendo-dropdownlist.right-align>kendo-searchbar>input,:host ::ng-deep kendo-multiselect.right-align>kendo-searchbar>input{text-align:right}:host ::ng-deep kendo-combobox.right-align>.k-input-inner,:host ::ng-deep kendo-dropdownlist.right-align>.k-input-inner,:host ::ng-deep kendo-multiselect.right-align>.k-input-inner{text-align:right}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}.zselect-virtualization{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
|
|
510
|
+
args: [{ selector: "app-zselectmultiple", template: "<div [formGroup]=\"form\" class=\"zselectmultiple-container e1tag-style\" [style]=\"componentProperties.style.style\">\r\n <ionic-selectable *ngIf=\"isMobileScreen()\" #selectComponent item-content searchFailText=\"Nothing found :(\"\r\n headerColor=\"primary\" clearButtonText=\"Clear\" [(ngModel)]=\"group.zModel[data.Value]\" [id]=\"data.Value\"\r\n [items]=\"getItemsData()\" [itemValueField]=\"itemValueField\" [itemTextField]=\"itemTextField\"\r\n [canAddItem]=\"!!data.OnAddItem\" [canClear]=\"true\" [placeholder]=\"data.PlaceHolder\"\r\n [canSearch]=\"!data['disable-search']\" [shouldFocusSearchbar]=\"!data['disable-search']\"\r\n [hasInfiniteScroll]=\"!!data.HasInfiniteScroll\" [isMultiple]=\"data.Multiple\"\r\n [isEnabled]=\"!(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [shouldStoreItemValue]=\"true\" (onSearch)=\"onSearch($event)\" (onInfiniteScroll)=\"getInfiniteData($event)\"\r\n (onAddItem)=\"onAddItem($event)\" (onChange)=\"onChange_mobile($event)\" [style]=\"componentProperties.style.style1\" class=\"e1tag-style1\">\r\n\r\n <ng-template ionicSelectableItemIconTemplate let-item=\"item\" let-isItemSelected=\"isItemSelected\">\r\n <fa-icon slot=\"start\" class=\"isItemSelected e1tag-style2\" size=\"sm\" [icon]=\"['far', isItemSelected ? 'check-circle': 'circle']\"\r\n [styles]=\"{'color': isItemSelected ? 'dodgerBlue' : 'lightGray'}\" [style]=\"componentProperties.style.style2\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableCloseButtonTemplate>\r\n <!-- <ion-icon name=\"close-circle\"></ion-icon> -->\r\n <fa-icon [icon]=\"'times-circle'\" size=\"md\" [style]=\"componentProperties.style.style3\" class=\"e1tag-style3\"></fa-icon>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableTitleTemplate>\r\n <span class=e1tag-style4 [style]=\"componentProperties.style.style4\">{{data.Label}}</span>\r\n <ion-text *ngIf=\"getIsRequiredValue()\" color=\"danger\">*</ion-text>\r\n </ng-template>\r\n\r\n <ng-template ionicSelectableItemTemplate let-item=\"item\">\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(item, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </ionic-selectable>\r\n <kendo-combobox *ngIf=\"!isMobileScreen() && componentType == 'combobox'\"\r\n class=\"input-field e1tag-style1\"\r\n #comboboxComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoComboBoxItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-combobox>\r\n <kendo-multiselect *ngIf=\"!isMobileScreen() && componentType == 'multiselect'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselect\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [checkboxes]=\"data.EnableCheckbox\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n </ng-template>\r\n </kendo-multiselect>\r\n <kendo-multiselecttree *ngIf=\"!isMobileScreen() && componentType == 'multiselecttree'\"\r\n class=\"input-field e1tag-style1\"\r\n #multiselecttree\r\n kendoMultiSelectTreeExpandable\r\n [placeholder]=\"data.PlaceHolder\"\r\n [kendoMultiSelectTreeHierarchyBinding]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n childrenField=\"Value\"\r\n [hasChildren]=\"hasChildren\"\r\n [textField]=\"itemTextField\"\r\n [valueField]=\"itemValueField\"\r\n [valuePrimitive]=\"true\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n [dataItems]=\"data.Value\"\r\n [loading]=\"isLoading\"\r\n [autoClose]=\"autoClose\"\r\n [expandOnFilter]=\"filterExpandSettings\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n (filterChange)=\"handleMultiSelectTreeFilter($event)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoMultiSelectTreeNoDataTemplate>\r\n <h4>\r\n <span class=\"k-icon k-i-warning\"></span><br /><br />\r\n No record found.\r\n </h4>\r\n </ng-template>\r\n </kendo-multiselecttree>\r\n <kendo-dropdownlist *ngIf=\"!isMobileScreen() && componentType == 'dropdownlist'\"\r\n class=\"input-field e1tag-style1\"\r\n #dropdownlistComponent\r\n [data]=\"getItemsData() | zselectTranslationParser : itemTextField : data : group | async\"\r\n [valueField]=\"itemValueField\"\r\n [textField]=\"itemTextField\"\r\n [formControlName]=\"data.Value\"\r\n [valuePrimitive]=\"true\"\r\n [placeholder]=\"data.PlaceHolder\"\r\n [allowCustom]=\"allowCustomValue\"\r\n [kendoDropDownFilter]=\"filterSettings\"\r\n [suggest]=\"true\"\r\n [filterable]=\"data.Filterable == false ? false : true\"\r\n [openOnFocus]=\"disableOpenOnFocus(comboboxComponent)\"\r\n [readonly]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [class.disabled]=\"(!!componentProperties.isReadOnlyField ? group[componentProperties.isReadOnlyField] : componentProperties.isReadOnly)\"\r\n [ngClass]=\"data.Class\"\r\n [loading]=\"isLoading\"\r\n (valueChange)=\"onChange_desktop($event)\"\r\n (filterChange)=\"handleFilter($event)\"\r\n [virtual]=\"data.IsEnableVirtualization == true ? virtual : null\"\r\n (open)=\"handleOpen()\"\r\n (close)=\"handleClose()\"\r\n (blur)=\"handleBlur()\"\r\n [style]=\"componentProperties.style.style1\"\r\n [clearButton]=\"data.ClearButton == false ? false : true\">\r\n <ng-template kendoDropDownListItemTemplate let-dataItem>\r\n <span class=\"e1tag-style5\" [class.zselect-virtualization]=\"data.IsEnableVirtualization\" [style]=\"componentProperties.style.style5\">{{ getItemTemplate(dataItem, data, group, itemValueField, itemTextField) }}</span>\r\n <!-- <span class=\"template\">{{ dataItem.value }}</span> {{ dataItem.text }} -->\r\n </ng-template>\r\n </kendo-dropdownlist>\r\n</div>\r\n", styles: [":host ::ng-deep kendo-combobox.k-multiselect,:host ::ng-deep kendo-dropdownlist.k-multiselect,:host ::ng-deep kendo-multiselect.k-multiselect{height:auto}:host ::ng-deep kendo-combobox .k-searchbar,:host ::ng-deep kendo-dropdownlist .k-searchbar,:host ::ng-deep kendo-multiselect .k-searchbar{margin:auto}:host ::ng-deep kendo-combobox .k-searchbar+.k-icon,:host ::ng-deep kendo-dropdownlist .k-searchbar+.k-icon,:host ::ng-deep kendo-multiselect .k-searchbar+.k-icon{margin:auto}:host ::ng-deep kendo-combobox .kendo-combobox-item-template,:host ::ng-deep kendo-dropdownlist .kendo-combobox-item-template,:host ::ng-deep kendo-multiselect .kendo-combobox-item-template{height:var(--input-field-height)!important}:host ::ng-deep kendo-combobox.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-dropdownlist.disabled>.k-dropdown-wrap,:host ::ng-deep kendo-multiselect.disabled>.k-dropdown-wrap{background:transparent}:host ::ng-deep kendo-combobox:focus-within,:host ::ng-deep kendo-dropdownlist:focus-within,:host ::ng-deep kendo-multiselect:focus-within{box-shadow:0 0 3px 1px var(--ion-color-primary)}:host ::ng-deep kendo-combobox.no-border,:host ::ng-deep kendo-dropdownlist.no-border,:host ::ng-deep kendo-multiselect.no-border{box-shadow:none!important;border:none!important}:host ::ng-deep kendo-combobox.no-border>.k-input-button,:host ::ng-deep kendo-dropdownlist.no-border>.k-input-button,:host ::ng-deep kendo-multiselect.no-border>.k-input-button{background:none;border:none}:host ::ng-deep kendo-combobox.no-background,:host ::ng-deep kendo-dropdownlist.no-background,:host ::ng-deep kendo-multiselect.no-background{background:none}:host ::ng-deep kendo-combobox.right-align>kendo-searchbar>input,:host ::ng-deep kendo-dropdownlist.right-align>kendo-searchbar>input,:host ::ng-deep kendo-multiselect.right-align>kendo-searchbar>input{text-align:right}:host ::ng-deep kendo-combobox.right-align>.k-input-inner,:host ::ng-deep kendo-dropdownlist.right-align>.k-input-inner,:host ::ng-deep kendo-multiselect.right-align>.k-input-inner{text-align:right}:host ::ng-deep kendo-dropdownlist{background:white}:host ::ng-deep kendo-dropdownlist>span.k-input-inner>.k-input-value-text{width:0px}fa-icon.isItemSelected{display:inline-block;width:1em;height:1em;contain:strict;fill:currentcolor;box-sizing:content-box!important;font-size:20px;margin-top:10px;margin-bottom:14px;margin-right:unset;margin-inline-end:20px}.gridInlineEdit{--background: transparent}.item.sc-ion-label-md-h,.item .sc-ion-label-md-h{font-weight:var(--z-label-weight);color:var(--z-label-color);text-shadow:var(--z-label-shadow)}.divselectmultiple{justify-content:space-between;width:99%;color:#000}.zselect-virtualization{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}\n"] }]
|
|
511
511
|
}], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.ResourceApiService }, { type: i2.WebApiService }, { type: i2.CacheService }, { type: i2.FieldService }]; }, propDecorators: { comboboxComponent: [{
|
|
512
512
|
type: ViewChild,
|
|
513
513
|
args: ["comboboxComponent"]
|
|
@@ -524,4 +524,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
|
|
|
524
524
|
type: ViewChild,
|
|
525
525
|
args: ["selectComponent"]
|
|
526
526
|
}] } });
|
|
527
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pzZWxlY3RtdWx0aXBsZS96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFLeEUsOEJBQThCO0FBQzlCLE9BQU8sRUFBNEIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUMsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxPQUFPLEVBRU8sZ0JBQWdCLEVBQ0csb0JBQW9CLEVBQ3BELE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTekIsTUFBTSxPQUFPLHdCQUF5QixTQUFRLGNBQWM7SUFxQzFELFlBQ1MsZ0JBQW1DLEVBQ2xDLGtCQUFzQyxFQUN0QyxhQUE0QixFQUM1QixZQUEwQixFQUMxQixZQUEwQjtRQUVsQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtRQU5oQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQW1CO1FBQ2xDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDNUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFqQ3BDLFVBQUssR0FBZSxF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SSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzVCLElBQUksQ0FBQyxhQUFhLEdBQUcsVUFBVSxDQUFDO1NBQ2pDO2FBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQ3hELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1NBQ3BDO2FBQ0ksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN2RCxJQUFJLENBQUMsYUFBYSxHQUFHLGlCQUFpQixDQUFDO1NBQ3hDO0lBQ0gsQ0FBQzs7cUhBdmtCVSx3QkFBd0I7eUdBQXhCLHdCQUF3QixrbUJDNUJyQyxvM1ZBMkpBOzJGRC9IYSx3QkFBd0I7a0JBTnBDLFNBQVM7K0JBQ0UscUJBQXFCOzJOQU1DLGlCQUFpQjtzQkFBaEQsU0FBUzt1QkFBQyxtQkFBbUI7Z0JBQ00scUJBQXFCO3NCQUF4RCxTQUFTO3VCQUFDLHVCQUF1QjtnQkFDUixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWE7Z0JBQ00sZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0UsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBWaWV3Q2hpbGQsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBJb25pY1NlbGVjdGFibGVDb21wb25lbnQgfSBmcm9tIFwiaW9uaWMtc2VsZWN0YWJsZVwiO1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyB0YXAsIGRlbGF5IH0gZnJvbSBcInJ4anMvb3BlcmF0b3JzXCI7XHJcbmltcG9ydCB7IEZpbHRlckV4cGFuZFNldHRpbmdzIH0gZnJvbSBcIkBwcm9ncmVzcy9rZW5kby1hbmd1bGFyLXRyZWV2aWV3XCI7XHJcbmltcG9ydCB7IENvbWJvQm94Q29tcG9uZW50LCBEcm9wRG93bkZpbHRlclNldHRpbmdzLCBEcm9wRG93bkxpc3RDb21wb25lbnQsIE11bHRpU2VsZWN0Q29tcG9uZW50LCBNdWx0aVNlbGVjdFRyZWVDb21wb25lbnQgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItZHJvcGRvd25zXCI7XHJcblxyXG4vKioqKioqKioqKiBDb21wb25lbnQgJiBTZXJ2aWNlICoqKioqKioqKiovXHJcbmltcG9ydCB7IElucHV0RmllbGRCYXNlIH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvaW5wdXRmaWVsZGJhc2UuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFpDb21wb25lbnRTZXJ2aWNlIH0gZnJvbSBcIi4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZVwiO1xyXG5pbXBvcnQge1xyXG4gIFJlc291cmNlQXBpU2VydmljZSwgV2ViQXBpU2VydmljZSwgQ2FjaGVTZXJ2aWNlLCBGaWVsZFNlcnZpY2UsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudE91dHB1dEV2ZW50LCBDbGlja2FibGVJY29ucyxcclxuICBaU2VsZWN0TXVsdGlwbGVUZW1wbGF0ZVBhcmFtcywgWlNlbGVjdFBvc3RBcGlQYXJhbXMsIHpTZWxlY3RNdWx0aXBsZVBhcmFtc1xyXG59IGZyb20gXCJtbWhnbG9iYWwtemNvcmVcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJhcHAtenNlbGVjdG11bHRpcGxlXCIsXHJcbiAgdGVtcGxhdGVVcmw6IFwiLi96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybHM6IFtcIi4venNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5zY3NzXCJdXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWnNlbGVjdG11bHRpcGxlQ29tcG9uZW50IGV4dGVuZHMgSW5wdXRGaWVsZEJhc2UgaW1wbGVtZW50cyBaQ29tcG9uZW50LCBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgQFZpZXdDaGlsZChcImNvbWJvYm94Q29tcG9uZW50XCIpIGNvbWJvYm94Q29tcG9uZW50OiBDb21ib0JveENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwiZHJvcGRvd25saXN0Q29tcG9uZW50XCIpIGRyb3Bkb3dubGlzdENvbXBvbmVudDogRHJvcERvd25MaXN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJtdWx0aXNlbGVjdFwiKSBtdWx0aXNlbGVjdDogTXVsdGlTZWxlY3RDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcIm11bHRpc2VsZWN0dHJlZVwiKSBtdWx0aXNlbGVjdHRyZWU6IE11bHRpU2VsZWN0VHJlZUNvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwic2VsZWN0Q29tcG9uZW50XCIpIHNlbGVjdENvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50O1xyXG5cclxuICBwdWJsaWMgY29tcG9uZW50VHlwZTogJ2NvbWJvYm94JyB8ICdtdWx0aXNlbGVjdCcgfCAnbXVsdGlzZWxlY3R0cmVlJyB8ICdkcm9wZG93bmxpc3QnO1xyXG4gIGljb25MaXN0OiBDbGlja2FibGVJY29uc1tdO1xyXG4gIGl0ZW1zOiBBcnJheTxhbnk+ID0gW107XHJcbiAgbW9kZWx6RGF0YTogQXJyYXk8YW55PjtcclxuICBpbmZpbml0ZXpEYXRhOiBBcnJheTxhbnk+ID0gW107XHJcbiAgaW5maW5pdGVTZWFyY2hUZXh0ID0gbnVsbDtcclxuICAvLyBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICB0b2dnbGVTZWxlY3RhYmxlID0gdHJ1ZTtcclxuICBpdGVtVmFsdWVGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICBpdGVtVGV4dEZpZWxkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGl0ZW1EYXRhRmllbGQ6IHN0cmluZyA9IG51bGw7XHJcbiAgaXRlbVRlbXBsYXRlID0gXCJ7e2l0ZW1baXRlbVRleHRGaWVsZF19fVwiO1xyXG4gIGluZmluaXRlU2Nyb2xsUGFnZU5vID0gMDtcclxuICBpc0xvYWRpbmcgPSB0cnVlO1xyXG4gIGFsbG93Q3VzdG9tVmFsdWUgPSBmYWxzZTtcclxuICBhdXRvQ2xvc2U6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIHB1YmxpYyBwYXJzZWRJdGVtc0RhdGE6IGFueVtdO1xyXG4gIGRhdGFJbmZvOiB7fSA9IHtcclxuICAgIFwiaXRlbXNSZXNvdXJjZVVSTFwiOiBcIlwiLFxyXG4gICAgXCJvcHRpb25GaWx0ZXJzXCI6IFwiXCIsXHJcbiAgICBcInRvdGFsQ291bnRcIjogMFxyXG4gIH07XHJcbiAgcHJpdmF0ZSBkZWJvdW5jZVN1YjogU3Vic2NyaXB0aW9uO1xyXG5cclxuICAvLyBwcml2YXRlIGxvYWRJbmZpbml0ZURhdGFTdWI6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIHB1YmxpYyBmaWx0ZXJTZXR0aW5nczogRHJvcERvd25GaWx0ZXJTZXR0aW5ncyA9IHtcclxuICAgIGNhc2VTZW5zaXRpdmU6IGZhbHNlLFxyXG4gICAgb3BlcmF0b3I6IFwiY29udGFpbnNcIixcclxuICB9O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHB1YmxpYyBjb21wb25lbnRTZXJ2aWNlOiBaQ29tcG9uZW50U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVzb3VyY2VBcGlTZXJ2aWNlOiBSZXNvdXJjZUFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNhY2hlU2VydmljZTogQ2FjaGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmaWVsZFNlcnZpY2U6IEZpZWxkU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyB2aXJ0dWFsOiBhbnkgPSB7XHJcbiAgICBpdGVtSGVpZ2h0OiAyOCxcclxuICAgIHBhZ2VTaXplOiAxNVxyXG4gIH07XHJcblxyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy5zZXRDb21wb25lbnRUb1VzZSgpO1xyXG4gICAgc3VwZXIuc2V0dXBJbm5lckZpZWxkKCk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldFNlbGVjdE11bHRpcGxlVGV4dFZhbHVlKHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zLCB0aGlzKTtcclxuXHJcbiAgICAvLyBbRHJvcGRvd25saXN0IE11bHRpcGxlXSAtIGF1dG8gY2xvc2UgbWVudSB3aGVuIGxvc2UgZm9jdXMuXHJcbiAgICBpZiAodGhpcy5kYXRhLkF1dG9DbG9zZSA9PT0gZmFsc2UpIHRoaXMuYXV0b0Nsb3NlID0gdGhpcy5kYXRhLkF1dG9DbG9zZTtcclxuXHJcbiAgICAvLyBIYW5kbGUgQ2xpY2thYmxlIEljb25zXHJcbiAgICB0aGlzLmljb25MaXN0ID0gdGhpcy5kYXRhLkNsaWNrYWJsZUljb25zO1xyXG4gICAgaWYgKHRoaXMuaWNvbkxpc3QpIHtcclxuICAgICAgaWYgKHRoaXMuaWNvbkxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuaWNvbkxpc3QuZm9yRWFjaCgoaTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoaS5Ub29sdGlwID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgaS5Ub29sdGlwID0gXCJcIjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGkuVG9vbHRpcCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBpLlRvb2x0aXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gRGVmYXVsdCBwb3NpdGlvbiB0b3AuIHJpZ2h0IHwgYm90dG9tIHwgdG9wIHwgbGVmdFxyXG4gICAgICAgICAgaWYgKGkuUG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpLlBvc2l0aW9uID0gXCJ0b3BcIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5hbGxvd0N1c3RvbVZhbHVlID0gdGhpcy5kYXRhLkFsbG93Q3VzdG9tVmFsdWUgfHwgZmFsc2U7IC8vIEFsbG93IGVudGVyIHRleHQgaW4gZHJvcGRvd25ib3hcclxuICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmRhdGEuVmFsdWU7XHJcbiAgICBjb25zdCBkYXRhID0gdGhpcy5kYXRhO1xyXG4gICAgY29uc3Qgek1vZGVsID0gdGhpcy5ncm91cC56TW9kZWw7XHJcblxyXG4gICAgLypcclxuICAgICAqIDQgU3R5bGVzIG9mIGRlY2xhcmUgdGhlIGNvbXBvbmVudO+/vXMgb3B0aW9uIGxpc3QgZGF0YSBzb3VyY2UuXHJcbiAgICAgKiBTdHlsZSAjMSAtIEZpZWxkLlNlbGVjdE9wdGlvbnMgZGVmaW5lZCBhcyBhbiBhcnJheSBvZiBvYmplY3QgdGhhdCBjb250YWluIHRleHQgYW5kIHZhbHVlLlxyXG4gICAgICogU3R5bGUgIzIgLSBGaWVsZC5TZWxlY3RPcHRpb25zIGRlZmluZWQgYXMgYSBwaGFzZSBsaWtlIO+/vWl0ZW0uSWQgYXMgaXRlbS5OYW1lIGZvciBpdGVtIGluIGdyb3VwLnpEYXRhLlByb2plY3RPcHRpb25z77+9LlxyXG4gICAgICogU3R5bGUgIzMgLSBGaWVsZC5PcHRpb25SZXNvdXJjZVVSTCBkZWZpbmVkIHRoZSBuYW1lIG9mIHJlc291cmNlIHNlcnZlciBhcGkuXHJcbiAgICAgKiBTdHlsZSAjNCAtIEZpZWxkLkluZmluaXRlU2Nyb2xsJCBkZWZpbmVkIHRoZSBtZXRob2QgbmFtZSBhcyDvv71ncm91cC5nZXRNb3JlRGF0YUFzU2Nyb2xs77+9LlxyXG4gICAgICovXHJcblxyXG4gICAgaWYgKGRhdGEuSGFzSW5maW5pdGVTY3JvbGwgJiYgZGF0YS5JbmZpbml0ZVNjcm9sbCQpIHtcclxuICAgICAgLy8gd2hlbiBpbmZpbml0aWUgc2Nyb2xsXHJcbiAgICAgIGxldCByZWNvcmRJZCA9IG51bGw7XHJcbiAgICAgIGlmICh6TW9kZWwgJiYgek1vZGVsW2ZpZWxkVmFsdWVdKSB7XHJcbiAgICAgICAgLy8gZ2V0IHpNb2RlbCBWYWx1ZVxyXG4gICAgICAgIHJlY29yZElkID0gek1vZGVsW2ZpZWxkVmFsdWVdLnRvU3RyaW5nKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBnZXR6RGF0YUZvcnpNb2RlbCQ6IE9ic2VydmFibGU8YW55PiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0SW5maW5pdGVEYXRhKG51bGwsICcnLCB0aGlzLCByZWNvcmRJZCk7XHJcbiAgICAgIGlmIChnZXR6RGF0YUZvcnpNb2RlbCQpIHtcclxuICAgICAgICBnZXR6RGF0YUZvcnpNb2RlbCQuc3Vic2NyaWJlKCh6ZGF0YSkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZGF0YS5OYW1lLCAnIC0gaW5pdGlhbCB6RGF0YSBsb2FkOiAnLCB6ZGF0YSk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghWkNvbXBvbmVudEhlbHBlci5pc01vYmlsZVNjcmVlbigpKSB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXIobnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBTdHlsZSAjMSwgIzIsICMzXHJcbiAgICAgIGNvbnN0IGlzUmVxdWlyZWQgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgZGF0YS5Jc1JlcXVpcmVkKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmRhdGEuT3B0aW9uUmVzb3VyY2VVUkwpIHtcclxuICAgICAgICB0aGlzLmxhenlMb2FkRGF0YU9wdGlvbnMoKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkRhdGEgPSByZXMuZGF0YVNldCA/IHJlcy5kYXRhU2V0IDogcmVzO1xyXG5cclxuICAgICAgICAgIGlmIChvcHRpb25EYXRhICYmIG9wdGlvbkRhdGEubGVuZ3RoID09PSAxICYmICF0aGlzLmRhdGEuRGlzYWJsZUF1dG9GaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICB0aGlzLmF1dG9TZWxlY3RGaXJzdE9wdGlvbihpc1JlcXVpcmVkLCBvcHRpb25EYXRhWzBdLCBmaWVsZFZhbHVlLCB6TW9kZWwuSWQpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykgJiYgdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgICAgIC8vc2tpcCBldmFsIGlmIHNlbGVjdG9wdGlvbnMgaXMgZXhpc3RcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvcHRpb25EYXRhID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuaXRlbURhdGFGaWVsZCk7XHJcbiAgICAgICAgICAvLyBhcHBlbmQgZGF0YSB2aWEgdGltZW91dCBhZnRlciBkYXRhIGlzIGxvYWRlZC5cclxuICAgICAgICAgIGlmIChvcHRpb25EYXRhICYmIG9wdGlvbkRhdGEubGVuZ3RoID09PSAxICYmICF0aGlzLmRhdGEuRGlzYWJsZUF1dG9GaXJzdFNlbGVjdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCB0aGlzQ29tcG9uZW50ID0gdGhpcztcclxuICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgdGhpc0NvbXBvbmVudC5hdXRvU2VsZWN0Rmlyc3RPcHRpb24oaXNSZXF1aXJlZCwgb3B0aW9uRGF0YVswXSwgZmllbGRWYWx1ZSwgdGhpc0NvbXBvbmVudC5ncm91cC56TW9kZWwuSWQpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc3VwZXIuZm9jdXNPbkRlZmF1bHQodGhpcy5mb2N1cy5iaW5kKHRoaXMpKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgLy8gaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAvLyAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAvLyB9XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZVN1Yikge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBBdXRvIHNlbGVjdCBmaXJzdCBvcHRpb24gKGlmIHJlcXVpcmVkICYgb25seSAxIG9wdGlvbilcclxuICBwcml2YXRlIGF1dG9TZWxlY3RGaXJzdE9wdGlvbihyZXF1aXJlZDogYm9vbGVhbiwgZGF0YTogYW55LCB6TW9kZWxQcm9wZXJ0eU5hbWU6IHN0cmluZywgaWQ6IGFueSkge1xyXG4gICAgaWYgKFpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoaWQpICYmIHJlcXVpcmVkKSB7XHJcbiAgICAgIHZhciBvcHRpb25JZCA9IGRhdGEuSWQ7XHJcbiAgICAgIGlmICh0aGlzLmRhdGEuTXVsdGlwbGUpIHtcclxuICAgICAgICBvcHRpb25JZCA9IFtvcHRpb25JZF07XHJcbiAgICAgIH1cclxuICAgICAgWkNvbXBvbmVudEhlbHBlci5zZXRNb2RlbFZhbHVlKHpNb2RlbFByb3BlcnR5TmFtZSwgb3B0aW9uSWQsIHRoaXMuZ3JvdXApO1xyXG5cclxuICAgICAgdGhpcy5ncm91cC5zdWJqZWN0Lm5leHQoe1xyXG4gICAgICAgIHR5cGU6IFwib25DaGFuZ2VcIixcclxuICAgICAgICB0YXJnZXQ6IHRoaXMuZGF0YS5PbkNoYW5nZSxcclxuICAgICAgICBldmVudCxcclxuICAgICAgICBkYXRhOiB7IFsndmFsdWUnXTogb3B0aW9uSWQsIGZpZWxkOiB0aGlzLmRhdGEgfVxyXG4gICAgICB9IGFzIFpDb21wb25lbnRPdXRwdXRFdmVudCk7XHJcblxyXG4gICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIFN0eWxlICMzXHJcbiAgbGF6eUxvYWREYXRhT3B0aW9ucygpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgY29uc3QgcmVzb3VyY2VVcmwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXHJcbiAgICAgIHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTFxyXG4gICAgKTtcclxuXHJcbiAgICBjb25zdCBmaWx0ZXJQYXJhbSA9IG5ldyBaU2VsZWN0UG9zdEFwaVBhcmFtcygpO1xyXG4gICAgZmlsdGVyUGFyYW0uc29ydHMgPSB0aGlzLmRhdGEuT3B0aW9uU29ydDtcclxuICAgIGZpbHRlclBhcmFtLmNvbHVtbnMgPSB0aGlzLmRhdGEuT3B0aW9uQ29sdW1ucztcclxuICAgIGZpbHRlclBhcmFtLmZpbHRlcnMgPSB0aGlzLmRhdGEuT3B0aW9uRmlsdGVyO1xyXG5cclxuICAgIHJldHVybiBaQ29tcG9uZW50SGVscGVyLmdldERhdGFPcHRpb25zKFxyXG4gICAgICB0aGlzLmRhdGEuT3B0aW9uTmFtZSxcclxuICAgICAgZmlsdGVyUGFyYW0sXHJcbiAgICAgIHRoaXMuZ3JvdXAsXHJcbiAgICAgIHJlc291cmNlVXJsLFxyXG4gICAgICB0aGlzLmNhY2hlU2VydmljZSxcclxuICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLFxyXG4gICAgICB0aGlzLmRhdGFbJ0Rpc2FibGVDYWNoZSddXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gU3R5bGUgIzQsIHVzZWQgaW4gaW9uaWMtc2VsZWN0YWJsZVxyXG4gIGdldEluZmluaXRlRGF0YShldmVudDoge1xyXG4gICAgY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQ7XHJcbiAgICB0ZXh0OiBzdHJpbmc7XHJcbiAgfSkge1xyXG4gICAgWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEoZXZlbnQuY29tcG9uZW50LCBldmVudC50ZXh0LCB0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldEl0ZW1zRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaW5maW5pdGV6RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBvcHRpb25OYW1lID0gdGhpcy5kYXRhLk9wdGlvbk5hbWUgfHwgdGhpcy5pdGVtRGF0YUZpZWxkIHx8ICdncm91cC56RGF0YS4nICsgdGhpcy5kYXRhLk5hbWU7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykgJiYgIXRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildKSB7XHJcbiAgICAgIC8vIHJldHVybiBzZWxlY3Rpb25PcHRpb25zO1xyXG4gICAgICAvLyByZXR1cm4gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgICAgIHRoaXMuaXRlbURhdGFGaWVsZCA9IG9wdGlvbk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKG9wdGlvbk5hbWUuc3RhcnRzV2l0aCgnekRhdGEuJykpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSg2KV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC56RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCdncm91cC4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cFtvcHRpb25OYW1lLnNsaWNlKDYpXSB8fCBbXTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25OYW1lKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwW29wdGlvbk5hbWVdIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS53YXJuKHRoaXMuZGF0YS5OYW1lLCAnIC0gSW52YWxpZCBzZXR0aW5nIGZvciBPcHRpb25OYW1lOiAnLCBvcHRpb25OYW1lKTtcclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKGV2ZW50OiB7IGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50OyB0ZXh0OiBzdHJpbmcgfSkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJBdCB6c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50IChvblNlYXJjaCk6IFwiLCBldmVudCk7XHJcbiAgICAvLyBldmVudC5jb21wb25lbnQgaXMgZm9yIG1vYmlsZSBvbmx5XHJcbiAgICBjb25zdCBjb21wb25lbnQgPSBldmVudC5jb21wb25lbnQ7XHJcbiAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgIGNvbXBvbmVudC5zdGFydFNlYXJjaCgpO1xyXG4gICAgICBjb21wb25lbnQuZW5hYmxlSW5maW5pdGVTY3JvbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAgIC8vIElmIHNlYXJjaCB0ZXh0LCByZXNldCBwYWdlIHRvIDAuIEdldCBpbmZpbml0ZSBkYXRhXHJcbiAgICAgIGlmIChldmVudC50ZXh0ICE9PSBudWxsICYmIGV2ZW50LnRleHQgIT09IHRoaXMuaW5maW5pdGVTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgdGhpcy5pbmZpbml0ZVNjcm9sbFBhZ2VObyA9IDA7XHJcbiAgICAgICAgdGhpcy5tb2RlbHpEYXRhID0gW107XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5nZXRJbmZpbml0ZURhdGEoZXZlbnQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFJlc2V0IHNjcm9sbCBwYWdlLCBlbXB0eSBpdGVtc1xyXG4gICAgICB0aGlzLmluZmluaXRlU2Nyb2xsUGFnZU5vID0gMDtcclxuICAgICAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBGaWx0ZXIgekRhdGEgYW5kIHB1c2ggdG8gaXRlbXNcclxuICAgICAgY29uc3QgcGFyYW1zOiB6U2VsZWN0TXVsdGlwbGVQYXJhbXMgPSB7XHJcbiAgICAgICAgcmVmZXJJZDogbnVsbCxcclxuICAgICAgICBwYWdlTm86IDAsXHJcbiAgICAgICAgcGFnZVNpemU6IDIwLFxyXG4gICAgICAgIHNvcnRDb2x1bW5OYW1lOiBcIlwiLFxyXG4gICAgICAgIHNvcnRPcmRlcjogXCJcIixcclxuICAgICAgICBzb3J0Q29sdW1uTmFtZXM6IFtdLFxyXG4gICAgICAgIHNvcnRPcmRlcnM6IFtdLFxyXG4gICAgICAgIGZpbHRlclBhcmFtczogW10sXHJcbiAgICAgICAgcGFyYW1ldGVyczogXCJcIlxyXG4gICAgICB9O1xyXG5cclxuICAgICAgY29uc3Qgc2VhcmNoRmllbGRzID0gdGhpcy5kYXRhLlNlYXJjaEZpZWxkcyA/IHRoaXMuZGF0YS5TZWFyY2hGaWVsZHMgOiB0aGlzLml0ZW1UZXh0RmllbGQ7XHJcbiAgICAgIGNvbnN0IGZpbHRlcml0ZW1zID0gWkNvbXBvbmVudEhlbHBlci5maWx0ZXJTZWFyY2hJdGVtcyhcclxuICAgICAgICB0aGlzLmdldEl0ZW1zRGF0YSgpLFxyXG4gICAgICAgIGV2ZW50LnRleHQsXHJcbiAgICAgICAgc2VhcmNoRmllbGRzLFxyXG4gICAgICAgIHBhcmFtcy5wYWdlTm8sXHJcbiAgICAgICAgcGFyYW1zLnBhZ2VTaXplXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChjb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBpdGVtcyA9IGNvbXBvbmVudC5pdGVtcy5jb25jYXQoZmlsdGVyaXRlbXMpO1xyXG4gICAgICAgIGNvbXBvbmVudC5pdGVtcyA9IGl0ZW1zO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRJbmZpbml0ZVNjcm9sbCgpO1xyXG4gICAgICAgIGNvbXBvbmVudC5lbmRTZWFyY2goKTtcclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVMYXp5TG9hZEZpbHRlcih2YWx1ZTogYW55LCBqdXN0T25lVGltZT86IGJvb2xlYW4pIHtcclxuICAgIGRlYnVnZ2VyO1xyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VTdWIpIHtcclxuICAgICAgdGhpcy5kZWJvdW5jZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGVib3VuY2VTdWIgPSBvZihbXSkucGlwZShkZWxheSg1MDApKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICAgIHRoaXMub25TZWFyY2goeyBjb21wb25lbnQ6IG51bGwsIHRleHQ6IHZhbHVlIH0pO1xyXG4gICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucykge1xyXG4gICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlRmlsdGVyKHZhbHVlOiBhbnksIGp1c3RPbmVUaW1lPzogYm9vbGVhbikge1xyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VTdWIpIHtcclxuICAgICAgdGhpcy5kZWJvdW5jZVN1Yi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHNraXAgZmlsdGVyaW5nIGlmIGhhdmUgaW5pZmluaXRlc2Nyb2xsP1xyXG4gICAgLy8gVG8gcmVzb2x2ZSBidWcgIzE5NzlcclxuICAgIC8vIGlmICghdGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICB0aGlzLmRlYm91bmNlU3ViID0gb2YoW10pXHJcbiAgICAgIC5waXBlKHRhcCgoKSA9PiAodGhpcy5pc0xvYWRpbmcgPSB0cnVlKSksIGRlbGF5KDUwMCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMub25TZWFyY2goeyBjb21wb25lbnQ6IG51bGwsIHRleHQ6IHZhbHVlIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgICAvLyB9XHJcblxyXG5cclxuICAgIC8vIGlmICh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpIHtcclxuICAgIC8vICAgdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIgPSBuZXcgU3ViamVjdChmYWxzZSk7XHJcbiAgICAvLyB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgIC8vIGludGVydmFsKDIwMDApLnBpcGUodGFrZVVudGlsKHRoaXMubG9hZEluZmluaXRlRGF0YVN1YikpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMub25TZWFyY2goeyBjb21wb25lbnQ6IG51bGwsIHRleHQ6IHZhbHVlIH0pO1xyXG4gICAgLy8gICBpZiAoanVzdE9uZVRpbWUpIHtcclxuICAgIC8vICAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gIH1cclxuXHJcbiAgaGFuZGxlT3BlbigpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXIobnVsbCk7XHJcbiAgICAgIC8vICAgLy8gaWYgKHRoaXMubG9hZEluZmluaXRlRGF0YVN1Yikge1xyXG4gICAgICAvLyAgIC8vICAgdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgIC8vICAgLy8gfVxyXG4gICAgICAvLyAgIC8vIHRoaXMubG9hZEluZmluaXRlRGF0YVN1YiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgICAgIC8vICAgLy8gLy8gdGhpcy5oYW5kbGVGaWx0ZXIobnVsbCk7XHJcbiAgICAgIC8vICAgLy8gaW50ZXJ2YWwoMzAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgLy8gICAvLyB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUNsb3NlKCkge1xyXG4gICAgLy8gaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgLy8gICBpZiAodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSB7XHJcbiAgICAvLyAgICAgdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViLm5leHQodHJ1ZSk7XHJcbiAgICAvLyAgICAgLy8gdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViLmNvbXBsZXRlKCk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUJsdXIoKSB7XHJcbiAgICAvLyB0aGlzLmhhbmRsZUNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0SXRlbVRlbXBsYXRlKFxyXG4gICAgaXRlbTogYW55LFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZ3JvdXA6IGFueSxcclxuICAgIGl0ZW1WYWx1ZUZpZWxkOiBzdHJpbmcsXHJcbiAgICBpdGVtVGV4dEZpZWxkOiBzdHJpbmdcclxuICApIHtcclxuICAgIC8vIFRvRE86IGl0ZW1WYWx1ZUZpZWxkIGFuZCBpdGVtVGV4dEZpZWxkXHJcbiAgICBpZiAodGhpcy5kYXRhLkl0ZW1UZW1wbGF0ZSkge1xyXG4gICAgICBjb25zdCBnZXRUZW1wbGF0ZUZ1bmMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5kYXRhLkl0ZW1UZW1wbGF0ZSk7XHJcblxyXG4gICAgICByZXR1cm4gZ2V0VGVtcGxhdGVGdW5jKHtcclxuICAgICAgICBpdGVtLFxyXG4gICAgICAgIGRhdGEsXHJcbiAgICAgICAgZ3JvdXAsXHJcbiAgICAgICAgaXRlbVZhbHVlRmllbGQsXHJcbiAgICAgICAgaXRlbVRleHRGaWVsZFxyXG4gICAgICB9IGFzIFpTZWxlY3RNdWx0aXBsZVRlbXBsYXRlUGFyYW1zKTtcclxuICAgIH0gZWxzZSBpZiAoaXRlbVRleHRGaWVsZCkge1xyXG4gICAgICByZXR1cm4gaXRlbVtpdGVtVGV4dEZpZWxkXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHJldHVybiBpdGVtW2l0ZW1UZXh0RmllbGRdO1xyXG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhpdGVtKS5qb2luKFwiLCBcIik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvbkFkZEl0ZW0oZXZlbnQ6IGFueSkge1xyXG4gICAgY29uc3QgZiA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuT25BZGRJdGVtKTtcclxuICAgIGlmICh0eXBlb2YgZiA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGYuYmluZCh0aGlzLmdyb3VwLmN0cmxTY29wZSk7XHJcbiAgICAgIHJldHVybiBjYWxsRnVuYygpO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGRlY2xhcmF0aW9uIG9mIE9uQWRkSXRlbTogJywgZik7XHJcbiAgICByZXR1cm47XHJcbiAgfVxyXG5cclxuICAvLyBDb21wb25lbnQgYmFzaWMgZnVuY3Rpb25cclxuICBjbGVhckRhdGEoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUodGhpcy5kYXRhLlZhbHVlLCBcIlwiLCB0aGlzLmdyb3VwKTtcclxuICB9XHJcblxyXG4gIGNsZWFySXRlbXMoKSB7XHJcbiAgICBpZiAodGhpcy5zZWxlY3RDb21wb25lbnQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY2xlYXIoKTtcclxuICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbmZpcm1JdGVtcygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jb25maXJtKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB0b2dnbGVJdGVtcygpIHtcclxuICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LnRvZ2dsZUl0ZW1zKHRoaXMudG9nZ2xlU2VsZWN0YWJsZSk7XHJcbiAgICB0aGlzLnRvZ2dsZVNlbGVjdGFibGUgPSAhdGhpcy50b2dnbGVTZWxlY3RhYmxlO1xyXG5cclxuICAgIC8vIENvbmZpcm0gaXRlbXMgYW5kIGNsb3NlIFNlbGVjdCBwYWdlXHJcbiAgICAvLyB3aXRob3V0IGhhdmluZyB0aGUgdXNlciB0byBjbGljayBDb25maXJtIGJ1dHRvbi5cclxuICAgIC8vIHRoaXMuY29uZmlybSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gRGlzYWJsZSBPcGVuIE9uIEZvY3VzXHJcbiAgZGlzYWJsZU9wZW5PbkZvY3VzKGNvbWJvYm94Q29tcG9uZW50OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuRGlzYWJsZU9wZW5PbkZvY3VzKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBjb21ib2JveENvbXBvbmVudDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE9uQ2hhbmdlXHJcbiAgcHVibGljIG9uQ2hhbmdlX2Rlc2t0b3AoZXZlbnQ6IGFueSkge1xyXG4gICAgc3VwZXIub25DaGFuZ2UobnVsbCwgZXZlbnQpXHJcbiAgICB0aGlzLmhhbmRsZUluZmluaXRlU2Nyb2xsT25DaGFuZ2UoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlX21vYmlsZShldmVudDogeyBjb21wb25lbnQ6IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudDsgdmFsdWU6IGFueSB9KSB7XHJcbiAgICBzdXBlci5vbkNoYW5nZShldmVudClcclxuICAgIGNvbnN0IGZjID0gdGhpcy5mb3JtLmNvbnRyb2xzW3RoaXMuZGF0YS5WYWx1ZV07XHJcbiAgICB0aGlzLmhhbmRsZUNsb3NlKCk7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBzdXBlci5nZXRJc1JlcXVpcmVkVmFsdWUoKSAmJiAoZXZlbnQudmFsdWUgPT09IG51bGwgfHwgZXZlbnQudmFsdWUubGVuZ3RoID09PSAwKVxyXG4gICAgKSB7XHJcbiAgICAgIGZjLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZmMuc2V0RXJyb3JzKG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaGFuZGxlSW5maW5pdGVTY3JvbGxPbkNoYW5nZShldmVudC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGhhbmRsZUluZmluaXRlU2Nyb2xsT25DaGFuZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCAmJiAhIXRoaXMuZGF0YS5JbmZpbml0ZVNjcm9sbCQpIHtcclxuICAgICAgY29uc3QgdGV4dEZpZWxkID0gdGhpcy5pdGVtVGV4dEZpZWxkLnRvU3RyaW5nKCk7XHJcbiAgICAgIGNvbnN0IHZhbHVlRmllbGQgPSB0aGlzLml0ZW1WYWx1ZUZpZWxkLnRvU3RyaW5nKCk7XHJcbiAgICAgIGxldCB6ZGF0YU1vZGVsID0gW107XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIHpkYXRhTW9kZWwgPSB0aGlzLmluZmluaXRlekRhdGEuZmlsdGVyKHggPT4geFt2YWx1ZUZpZWxkXSA9PT0gdmFsdWUpO1xyXG4gICAgICAgIHRoaXMubW9kZWx6RGF0YSA9IHpkYXRhTW9kZWwuc2xpY2UoKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5pdGVtRGF0YUZpZWxkLnN0YXJ0c1dpdGgoJ2dyb3VwLnpEYXRhLicpKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cC56RGF0YVt0aGlzLml0ZW1EYXRhRmllbGQuc2xpY2UoMTIpXSA9IHpkYXRhTW9kZWw7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5pdGVtRGF0YUZpZWxkLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cFt0aGlzLml0ZW1EYXRhRmllbGQuc2xpY2UoNildID0gemRhdGFNb2RlbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gTXVsdGkgU2VsZWN0aW9uIFRyZWVcclxuICBwdWJsaWMgZ2V0IGZpbHRlckV4cGFuZFNldHRpbmdzKCk6IEZpbHRlckV4cGFuZFNldHRpbmdzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGV4cGFuZE1hdGNoZXM6IHRydWUsXHJcbiAgICAgIGV4cGFuZGVkT25DbGVhcjogXCJpbml0aWFsXCJcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNDaGlsZHJlbiA9IChkYXRhaXRlbTogYW55KTogYm9vbGVhbiA9PiAhIWRhdGFpdGVtWydpdGVtcyddO1xyXG5cclxuICBwdWJsaWMgaGFuZGxlTXVsdGlTZWxlY3RUcmVlRmlsdGVyKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIHRoaXMucGFyc2VkSXRlbXNEYXRhID0gdGhpcy5vbk11bHRpU2VsZWN0VHJlZVNlYXJjaCh0aGlzLmdldEl0ZW1zRGF0YSgpLCB2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25NdWx0aVNlbGVjdFRyZWVTZWFyY2goaXRlbXM6IGFueVtdLCBzZWFyY2hlZFRleHQ6IHN0cmluZyk6IGFueVtdIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKGFjYywgaXRlbSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5jb250YWlucyhpdGVtW3RoaXMuaXRlbVRleHRGaWVsZF0sIHNlYXJjaGVkVGV4dCkpIHtcclxuICAgICAgICBhY2MucHVzaChpdGVtKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmIChpdGVtWydpdGVtcyddICYmIGl0ZW1bJ2l0ZW1zJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGNvbnN0IG5ld0l0ZW1zID0gdGhpcy5vbk11bHRpU2VsZWN0VHJlZVNlYXJjaChpdGVtWydpdGVtcyddLCBzZWFyY2hlZFRleHQpO1xyXG5cclxuICAgICAgICBpZiAobmV3SXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgY29uc3QgX2l0ZW0gPSBPYmplY3QuYXNzaWduKHt9LCBpdGVtKTtcclxuICAgICAgICAgIF9pdGVtWydpdGVtcyddID0gbmV3SXRlbXM7XHJcblxyXG4gICAgICAgICAgYWNjLnB1c2goX2l0ZW0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIGFjYztcclxuICAgIH0sIFtdKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBjb250YWlucyh0ZXh0OiBzdHJpbmcsIHNlYXJjaGVkVGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGV4dC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKChzZWFyY2hlZFRleHQgfHwgXCJcIikudG9Mb3dlckNhc2UoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2VsZWN0T3B0aW9uKHZhbHVlOiBhbnkpIHtcclxuICAgIGNvbnN0IG9wdGlvbk5hbWUgPSB0aGlzLmRhdGEuT3B0aW9uTmFtZSB8fCB0aGlzLml0ZW1EYXRhRmllbGQ7XHJcbiAgICB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oW10sIHZhbHVlKTtcclxuICAgIHRoaXMuZ3JvdXAuekRhdGFbb3B0aW9uTmFtZS5zbGljZSgxMildID0gdGhpcy5kYXRhLlNlbGVjdE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZm9jdXMoKSB7XHJcbiAgICBpZiAodGhpcy5jb21ib2JveENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmNvbWJvYm94Q29tcG9uZW50LmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubXVsdGlzZWxlY3QpIHtcclxuICAgICAgdGhpcy5tdWx0aXNlbGVjdC5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLm11bHRpc2VsZWN0dHJlZSkge1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0dHJlZS5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRyb3Bkb3dubGlzdENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLmRyb3Bkb3dubGlzdENvbXBvbmVudC5mb2N1cygpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc2V0Q29tcG9uZW50VG9Vc2UoKSB7XHJcbiAgICBpZiAoIXRoaXMuZGF0YS5NdWx0aXBsZSAmJiB0aGlzLmRhdGEuRmlsdGVyYWJsZSA9PSBmYWxzZSkge1xyXG4gICAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSAnZHJvcGRvd25saXN0JztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKCF0aGlzLmRhdGEuTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gJ2NvbWJvYm94JztcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YS5NdWx0aXBsZSAmJiAhdGhpcy5kYXRhLkVuYWJsZUNoZWNrYm94KSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9ICdtdWx0aXNlbGVjdCc7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmRhdGEuTXVsdGlwbGUgJiYgdGhpcy5kYXRhLkVuYWJsZUNoZWNrYm94KSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9ICdtdWx0aXNlbGVjdHRyZWUnO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwienNlbGVjdG11bHRpcGxlLWNvbnRhaW5lciBlMXRhZy1zdHlsZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPGlvbmljLXNlbGVjdGFibGUgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpXCIgI3NlbGVjdENvbXBvbmVudCBpdGVtLWNvbnRlbnQgc2VhcmNoRmFpbFRleHQ9XCJOb3RoaW5nIGZvdW5kIDooXCJcclxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJDb2xvcj1cInByaW1hcnlcIiBjbGVhckJ1dHRvblRleHQ9XCJDbGVhclwiIFsobmdNb2RlbCldPVwiZ3JvdXAuek1vZGVsW2RhdGEuVmFsdWVdXCIgW2lkXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJnZXRJdGVtc0RhdGEoKVwiIFtpdGVtVmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiIFtpdGVtVGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjYW5BZGRJdGVtXT1cIiEhZGF0YS5PbkFkZEl0ZW1cIiBbY2FuQ2xlYXJdPVwidHJ1ZVwiIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2FuU2VhcmNoXT1cIiFkYXRhWydkaXNhYmxlLXNlYXJjaCddXCIgW3Nob3VsZEZvY3VzU2VhcmNoYmFyXT1cIiFkYXRhWydkaXNhYmxlLXNlYXJjaCddXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGFzSW5maW5pdGVTY3JvbGxdPVwiISFkYXRhLkhhc0luZmluaXRlU2Nyb2xsXCIgW2lzTXVsdGlwbGVdPVwiZGF0YS5NdWx0aXBsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzRW5hYmxlZF09XCIhKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICBbc2hvdWxkU3RvcmVJdGVtVmFsdWVdPVwidHJ1ZVwiIChvblNlYXJjaCk9XCJvblNlYXJjaCgkZXZlbnQpXCIgKG9uSW5maW5pdGVTY3JvbGwpPVwiZ2V0SW5maW5pdGVEYXRhKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkFkZEl0ZW0pPVwib25BZGRJdGVtKCRldmVudClcIiAob25DaGFuZ2UpPVwib25DaGFuZ2VfbW9iaWxlKCRldmVudClcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIiBjbGFzcz1cImUxdGFnLXN0eWxlMVwiPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBpb25pY1NlbGVjdGFibGVJdGVtSWNvblRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pc0l0ZW1TZWxlY3RlZD1cImlzSXRlbVNlbGVjdGVkXCI+XHJcbiAgICAgIDxmYS1pY29uIHNsb3Q9XCJzdGFydFwiIGNsYXNzPVwiaXNJdGVtU2VsZWN0ZWQgZTF0YWctc3R5bGUyXCIgc2l6ZT1cInNtXCIgW2ljb25dPVwiWydmYXInLCBpc0l0ZW1TZWxlY3RlZCA/ICdjaGVjay1jaXJjbGUnOiAnY2lyY2xlJ11cIlxyXG4gICAgICAgICAgICAgICBbc3R5bGVzXT1cInsnY29sb3InOiBpc0l0ZW1TZWxlY3RlZCA/ICdkb2RnZXJCbHVlJyA6ICdsaWdodEdyYXknfVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMlwiPjwvZmEtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZUNsb3NlQnV0dG9uVGVtcGxhdGU+XHJcbiAgICAgIDwhLS0gPGlvbi1pY29uIG5hbWU9XCJjbG9zZS1jaXJjbGVcIj48L2lvbi1pY29uPiAtLT5cclxuICAgICAgPGZhLWljb24gW2ljb25dPVwiJ3RpbWVzLWNpcmNsZSdcIiBzaXplPVwibWRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTNcIiBjbGFzcz1cImUxdGFnLXN0eWxlM1wiPjwvZmEtaWNvbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZVRpdGxlVGVtcGxhdGU+XHJcbiAgICAgIDxzcGFuIGNsYXNzPWUxdGFnLXN0eWxlNCBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTRcIj57e2RhdGEuTGFiZWx9fTwvc3Bhbj5cclxuICAgICAgPGlvbi10ZXh0ICpuZ0lmPVwiZ2V0SXNSZXF1aXJlZFZhbHVlKClcIiBjb2xvcj1cImRhbmdlclwiPio8L2lvbi10ZXh0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgaW9uaWNTZWxlY3RhYmxlSXRlbVRlbXBsYXRlIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShpdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2lvbmljLXNlbGVjdGFibGU+XHJcbiAgPGtlbmRvLWNvbWJvYm94ICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgJiYgY29tcG9uZW50VHlwZSA9PSAnY29tYm9ib3gnXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAjY29tYm9ib3hDb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0SXRlbXNEYXRhKCkgfCB6c2VsZWN0VHJhbnNsYXRpb25QYXJzZXIgOiBpdGVtVGV4dEZpZWxkIDogZGF0YSA6IGdyb3VwIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0RmllbGRdPVwiaXRlbVRleHRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxsb3dDdXN0b21dPVwiYWxsb3dDdXN0b21WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0Ryb3BEb3duRmlsdGVyXT1cImZpbHRlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgW3N1Z2dlc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuZW5hYmxlRmlsdGVyaW5nID09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW29wZW5PbkZvY3VzXT1cImRpc2FibGVPcGVuT25Gb2N1cyhjb21ib2JveENvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VfZGVza3RvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2aXJ0dWFsXT1cImRhdGEuSXNFbmFibGVWaXJ0dWFsaXphdGlvbiA9PSB0cnVlID8gdmlydHVhbCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAob3Blbik9XCJoYW5kbGVPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJkYXRhLkNsZWFyQnV0dG9uID09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Db21ib0JveEl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW2NsYXNzLnpzZWxlY3QtdmlydHVhbGl6YXRpb25dPVwiZGF0YS5Jc0VuYWJsZVZpcnR1YWxpemF0aW9uXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCI+e3sgZ2V0SXRlbVRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGVtcGxhdGVcIj57eyBkYXRhSXRlbS52YWx1ZSB9fTwvc3Bhbj4ge3sgZGF0YUl0ZW0udGV4dCB9fSAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1jb21ib2JveD5cclxuICA8a2VuZG8tbXVsdGlzZWxlY3QgKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKSAmJiBjb21wb25lbnRUeXBlID09ICdtdWx0aXNlbGVjdCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICNtdWx0aXNlbGVjdFxyXG4gICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJnZXRJdGVtc0RhdGEoKSB8IHpzZWxlY3RUcmFuc2xhdGlvblBhcnNlciA6IGl0ZW1UZXh0RmllbGQgOiBkYXRhIDogZ3JvdXAgfCBhc3luY1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlUHJpbWl0aXZlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFthbGxvd0N1c3RvbV09XCJhbGxvd0N1c3RvbVZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hlc109XCJkYXRhLkVuYWJsZUNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICBba2VuZG9Ecm9wRG93bkZpbHRlcl09XCJmaWx0ZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKG9wZW4pPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGF0YS5DbGVhckJ1dHRvbiA9PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvTXVsdGlTZWxlY3RJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1tdWx0aXNlbGVjdD5cclxuICA8a2VuZG8tbXVsdGlzZWxlY3R0cmVlICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgICYmIGNvbXBvbmVudFR5cGUgPT0gJ211bHRpc2VsZWN0dHJlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgI211bHRpc2VsZWN0dHJlZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9NdWx0aVNlbGVjdFRyZWVFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBba2VuZG9NdWx0aVNlbGVjdFRyZWVIaWVyYXJjaHlCaW5kaW5nXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzQ2hpbGRyZW5dPVwiaGFzQ2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtc109XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImF1dG9DbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kT25GaWx0ZXJdPVwiZmlsdGVyRXhwYW5kU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5lbmFibGVGaWx0ZXJpbmcgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVNdWx0aVNlbGVjdFRyZWVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAob3Blbik9XCJoYW5kbGVPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGF0YS5DbGVhckJ1dHRvbiA9PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvTXVsdGlTZWxlY3RUcmVlTm9EYXRhVGVtcGxhdGU+XHJcbiAgICAgIDxoND5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cImstaWNvbiBrLWktd2FybmluZ1wiPjwvc3Bhbj48YnIgLz48YnIgLz5cclxuICAgICAgICBObyByZWNvcmQgZm91bmQuXHJcbiAgICAgIDwvaDQ+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tbXVsdGlzZWxlY3R0cmVlPlxyXG4gIDxrZW5kby1kcm9wZG93bmxpc3QgICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgICYmIGNvbXBvbmVudFR5cGUgPT0gJ2Ryb3Bkb3dubGlzdCdcIlxyXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWZpZWxkIGUxdGFnLXN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgICNkcm9wZG93bmxpc3RDb21wb25lbnRcclxuICAgICAgICAgICAgICAgICAgW2RhdGFdPVwiZ2V0SXRlbXNEYXRhKCkgfCB6c2VsZWN0VHJhbnNsYXRpb25QYXJzZXIgOiBpdGVtVGV4dEZpZWxkIDogZGF0YSA6IGdyb3VwIHwgYXN5bmNcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVGaWVsZF09XCJpdGVtVmFsdWVGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFt0ZXh0RmllbGRdPVwiaXRlbVRleHRGaWVsZFwiXHJcbiAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZGF0YS5WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cImRhdGEuUGxhY2VIb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICBbYWxsb3dDdXN0b21dPVwiYWxsb3dDdXN0b21WYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtrZW5kb0Ryb3BEb3duRmlsdGVyXT1cImZpbHRlclNldHRpbmdzXCJcclxuICAgICAgICAgICAgICAgICAgW3N1Z2dlc3RdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtmaWx0ZXJhYmxlXT1cImRhdGEuZW5hYmxlRmlsdGVyaW5nID09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgW29wZW5PbkZvY3VzXT1cImRpc2FibGVPcGVuT25Gb2N1cyhjb21ib2JveENvbXBvbmVudClcIlxyXG4gICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25DaGFuZ2VfZGVza3RvcCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgKGZpbHRlckNoYW5nZSk9XCJoYW5kbGVGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFt2aXJ0dWFsXT1cImRhdGEuSXNFbmFibGVWaXJ0dWFsaXphdGlvbiA9PSB0cnVlID8gdmlydHVhbCA6IG51bGxcIlxyXG4gICAgICAgICAgICAgICAgICAob3Blbik9XCJoYW5kbGVPcGVuKClcIlxyXG4gICAgICAgICAgICAgICAgICAoY2xvc2UpPVwiaGFuZGxlQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiXHJcbiAgICAgICAgICAgICAgICAgIFtjbGVhckJ1dHRvbl09XCJkYXRhLkNsZWFyQnV0dG9uID09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCI+XHJcbiAgICA8bmctdGVtcGxhdGUga2VuZG9Ecm9wRG93bkxpc3RJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtjbGFzcy56c2VsZWN0LXZpcnR1YWxpemF0aW9uXT1cImRhdGEuSXNFbmFibGVWaXJ0dWFsaXphdGlvblwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cInRlbXBsYXRlXCI+e3sgZGF0YUl0ZW0udmFsdWUgfX08L3NwYW4+IHt7IGRhdGFJdGVtLnRleHQgfX0gLS0+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG4gIDwva2VuZG8tZHJvcGRvd25saXN0PlxyXG48L2Rpdj5cclxuIl19
|
|
527
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoienNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL21taGdsb2JhbC1keW5hbWljZm9ybS9zcmMvbGliL3pzZWxlY3RtdWx0aXBsZS96c2VsZWN0bXVsdGlwbGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvenNlbGVjdG11bHRpcGxlL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwrQkFBK0I7QUFDL0IsT0FBTyxFQUFFLFNBQVMsRUFBVSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFLeEUsOEJBQThCO0FBQzlCLE9BQU8sRUFBNEIsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BELE9BQU8sRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJNUMsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxPQUFPLEVBRU8sZ0JBQWdCLEVBQ0csb0JBQW9CLEVBQXlCLDhCQUE4QixFQUMzRyxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBU3pCLE1BQU0sT0FBTyx3QkFBeUIsU0FBUSxjQUFjO0lBcUMxRCxZQUNTLGdCQUFtQyxFQUNsQyxrQkFBc0MsRUFDdEMsYUFBNEIsRUFDNUIsWUFBMEIsRUFDMUIsWUFBMEI7UUFFbEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFOaEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNsQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3RDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBakNw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QUFFO1lBQ3JJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBNEIsQ0FBQztTQUM3RDthQUNJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUM1QixJQUFJLENBQUMsYUFBYSxHQUFHLDhCQUE4QixDQUFDLFFBQVEsQ0FBQztTQUM5RDthQUNJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUN4RCxJQUFJLENBQUMsYUFBYSxHQUFHLDhCQUE4QixDQUFDLFdBQVcsQ0FBQztTQUNqRTthQUNJLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDdkQsSUFBSSxDQUFDLGFBQWEsR0FBRyw4QkFBOEIsQ0FBQyxlQUFlLENBQUM7U0FDckU7SUFDSCxDQUFDOztxSEF2a0JVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLGttQkM1QnJDLGcyVkEySkE7MkZEL0hhLHdCQUF3QjtrQkFOcEMsU0FBUzsrQkFDRSxxQkFBcUI7Mk5BTUMsaUJBQWlCO3NCQUFoRCxTQUFTO3VCQUFDLG1CQUFtQjtnQkFDTSxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNSLFdBQVc7c0JBQXBDLFNBQVM7dUJBQUMsYUFBYTtnQkFDTSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQjtnQkFDRSxlQUFlO3NCQUE1QyxTQUFTO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqIEFuZ3VsYXIgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIFZpZXdDaGlsZCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcbmltcG9ydCB7IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudCB9IGZyb20gXCJpb25pYy1zZWxlY3RhYmxlXCI7XHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IHRhcCwgZGVsYXkgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgRmlsdGVyRXhwYW5kU2V0dGluZ3MgfSBmcm9tIFwiQHByb2dyZXNzL2tlbmRvLWFuZ3VsYXItdHJlZXZpZXdcIjtcclxuaW1wb3J0IHsgQ29tYm9Cb3hDb21wb25lbnQsIERyb3BEb3duRmlsdGVyU2V0dGluZ3MsIERyb3BEb3duTGlzdENvbXBvbmVudCwgTXVsdGlTZWxlY3RDb21wb25lbnQsIE11bHRpU2VsZWN0VHJlZUNvbXBvbmVudCB9IGZyb20gXCJAcHJvZ3Jlc3Mva2VuZG8tYW5ndWxhci1kcm9wZG93bnNcIjtcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgSW5wdXRGaWVsZEJhc2UgfSBmcm9tIFwiLi4vY29tcG9uZW50cy9pbnB1dGZpZWxkYmFzZS5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tIFwiLi4vc2VydmljZXMvemNvbXBvbmVudC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7XHJcbiAgUmVzb3VyY2VBcGlTZXJ2aWNlLCBXZWJBcGlTZXJ2aWNlLCBDYWNoZVNlcnZpY2UsIEZpZWxkU2VydmljZSxcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaQ29tcG9uZW50T3V0cHV0RXZlbnQsIENsaWNrYWJsZUljb25zLFxyXG4gIFpTZWxlY3RNdWx0aXBsZVRlbXBsYXRlUGFyYW1zLCBaU2VsZWN0UG9zdEFwaVBhcmFtcywgelNlbGVjdE11bHRpcGxlUGFyYW1zLCBJbnRlcm5hbENvbXBvbmVudFR5cGVfRHJvcERvd25cclxufSBmcm9tIFwibW1oZ2xvYmFsLXpjb3JlXCI7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwiYXBwLXpzZWxlY3RtdWx0aXBsZVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4venNlbGVjdG11bHRpcGxlLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmxzOiBbXCIuL3pzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQuc2Nzc1wiXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFpzZWxlY3RtdWx0aXBsZUNvbXBvbmVudCBleHRlbmRzIElucHV0RmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoXCJjb21ib2JveENvbXBvbmVudFwiKSBjb21ib2JveENvbXBvbmVudDogQ29tYm9Cb3hDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcImRyb3Bkb3dubGlzdENvbXBvbmVudFwiKSBkcm9wZG93bmxpc3RDb21wb25lbnQ6IERyb3BEb3duTGlzdENvbXBvbmVudDtcclxuICBAVmlld0NoaWxkKFwibXVsdGlzZWxlY3RcIikgbXVsdGlzZWxlY3Q6IE11bHRpU2VsZWN0Q29tcG9uZW50O1xyXG4gIEBWaWV3Q2hpbGQoXCJtdWx0aXNlbGVjdHRyZWVcIikgbXVsdGlzZWxlY3R0cmVlOiBNdWx0aVNlbGVjdFRyZWVDb21wb25lbnQ7XHJcbiAgQFZpZXdDaGlsZChcInNlbGVjdENvbXBvbmVudFwiKSBzZWxlY3RDb21wb25lbnQ6IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudDtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFR5cGUgOiBJbnRlcm5hbENvbXBvbmVudFR5cGVfRHJvcERvd247XHJcbiAgaWNvbkxpc3Q6IENsaWNrYWJsZUljb25zW107XHJcbiAgaXRlbXM6IEFycmF5PGFueT4gPSBbXTtcclxuICBtb2RlbHpEYXRhOiBBcnJheTxhbnk+O1xyXG4gIGluZmluaXRlekRhdGE6IEFycmF5PGFueT4gPSBbXTtcclxuICBpbmZpbml0ZVNlYXJjaFRleHQgPSBudWxsO1xyXG4gIC8vIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHRvZ2dsZVNlbGVjdGFibGUgPSB0cnVlO1xyXG4gIGl0ZW1WYWx1ZUZpZWxkOiBzdHJpbmcgPSBudWxsO1xyXG4gIGl0ZW1UZXh0RmllbGQ6IHN0cmluZyA9IG51bGw7XHJcbiAgaXRlbURhdGFGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICBpdGVtVGVtcGxhdGUgPSBcInt7aXRlbVtpdGVtVGV4dEZpZWxkXX19XCI7XHJcbiAgaW5maW5pdGVTY3JvbGxQYWdlTm8gPSAwO1xyXG4gIGlzTG9hZGluZyA9IHRydWU7XHJcbiAgYWxsb3dDdXN0b21WYWx1ZSA9IGZhbHNlO1xyXG4gIGF1dG9DbG9zZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHBhcnNlZEl0ZW1zRGF0YTogYW55W107XHJcbiAgZGF0YUluZm86IHt9ID0ge1xyXG4gICAgXCJpdGVtc1Jlc291cmNlVVJMXCI6IFwiXCIsXHJcbiAgICBcIm9wdGlvbkZpbHRlcnNcIjogXCJcIixcclxuICAgIFwidG90YWxDb3VudFwiOiAwXHJcbiAgfTtcclxuICBwcml2YXRlIGRlYm91bmNlU3ViOiBTdWJzY3JpcHRpb247XHJcblxyXG4gIC8vIHByaXZhdGUgbG9hZEluZmluaXRlRGF0YVN1YjogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcbiAgcHVibGljIGZpbHRlclNldHRpbmdzOiBEcm9wRG93bkZpbHRlclNldHRpbmdzID0ge1xyXG4gICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsXHJcbiAgICBvcGVyYXRvcjogXCJjb250YWluc1wiLFxyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY2FjaGVTZXJ2aWNlOiBDYWNoZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBzdXBlcihjb21wb25lbnRTZXJ2aWNlKVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHZpcnR1YWw6IGFueSA9IHtcclxuICAgIGl0ZW1IZWlnaHQ6IDI4LFxyXG4gICAgcGFnZVNpemU6IDE1XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWU7XHJcbiAgICB0aGlzLnNldENvbXBvbmVudFRvVXNlKCk7XHJcbiAgICBzdXBlci5zZXR1cElubmVyRmllbGQoKTtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0U2VsZWN0TXVsdGlwbGVUZXh0VmFsdWUodGhpcy5kYXRhLlNlbGVjdE9wdGlvbnMsIHRoaXMpO1xyXG5cclxuICAgIC8vIFtEcm9wZG93bmxpc3QgTXVsdGlwbGVdIC0gYXV0byBjbG9zZSBtZW51IHdoZW4gbG9zZSBmb2N1cy5cclxuICAgIGlmICh0aGlzLmRhdGEuQXV0b0Nsb3NlID09PSBmYWxzZSkgdGhpcy5hdXRvQ2xvc2UgPSB0aGlzLmRhdGEuQXV0b0Nsb3NlO1xyXG5cclxuICAgIC8vIEhhbmRsZSBDbGlja2FibGUgSWNvbnNcclxuICAgIHRoaXMuaWNvbkxpc3QgPSB0aGlzLmRhdGEuQ2xpY2thYmxlSWNvbnM7XHJcbiAgICBpZiAodGhpcy5pY29uTGlzdCkge1xyXG4gICAgICBpZiAodGhpcy5pY29uTGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5pY29uTGlzdC5mb3JFYWNoKChpOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChpLlRvb2x0aXAgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBpLlRvb2x0aXAgPSBcIlwiO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaS5Ub29sdGlwID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIGkuVG9vbHRpcCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyBEZWZhdWx0IHBvc2l0aW9uIHRvcC4gcmlnaHQgfCBib3R0b20gfCB0b3AgfCBsZWZ0XHJcbiAgICAgICAgICBpZiAoaS5Qb3NpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGkuUG9zaXRpb24gPSBcInRvcFwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmFsbG93Q3VzdG9tVmFsdWUgPSB0aGlzLmRhdGEuQWxsb3dDdXN0b21WYWx1ZSB8fCBmYWxzZTsgLy8gQWxsb3cgZW50ZXIgdGV4dCBpbiBkcm9wZG93bmJveFxyXG4gICAgY29uc3QgZmllbGRWYWx1ZSA9IHRoaXMuZGF0YS5WYWx1ZTtcclxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmRhdGE7XHJcbiAgICBjb25zdCB6TW9kZWwgPSB0aGlzLmdyb3VwLnpNb2RlbDtcclxuXHJcbiAgICAvKlxyXG4gICAgICogNCBTdHlsZXMgb2YgZGVjbGFyZSB0aGUgY29tcG9uZW5077+9cyBvcHRpb24gbGlzdCBkYXRhIHNvdXJjZS5cclxuICAgICAqIFN0eWxlICMxIC0gRmllbGQuU2VsZWN0T3B0aW9ucyBkZWZpbmVkIGFzIGFuIGFycmF5IG9mIG9iamVjdCB0aGF0IGNvbnRhaW4gdGV4dCBhbmQgdmFsdWUuXHJcbiAgICAgKiBTdHlsZSAjMiAtIEZpZWxkLlNlbGVjdE9wdGlvbnMgZGVmaW5lZCBhcyBhIHBoYXNlIGxpa2Ug77+9aXRlbS5JZCBhcyBpdGVtLk5hbWUgZm9yIGl0ZW0gaW4gZ3JvdXAuekRhdGEuUHJvamVjdE9wdGlvbnPvv70uXHJcbiAgICAgKiBTdHlsZSAjMyAtIEZpZWxkLk9wdGlvblJlc291cmNlVVJMIGRlZmluZWQgdGhlIG5hbWUgb2YgcmVzb3VyY2Ugc2VydmVyIGFwaS5cclxuICAgICAqIFN0eWxlICM0IC0gRmllbGQuSW5maW5pdGVTY3JvbGwkIGRlZmluZWQgdGhlIG1ldGhvZCBuYW1lIGFzIO+/vWdyb3VwLmdldE1vcmVEYXRhQXNTY3JvbGzvv70uXHJcbiAgICAgKi9cclxuXHJcbiAgICBpZiAoZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCAmJiBkYXRhLkluZmluaXRlU2Nyb2xsJCkge1xyXG4gICAgICAvLyB3aGVuIGluZmluaXRpZSBzY3JvbGxcclxuICAgICAgbGV0IHJlY29yZElkID0gbnVsbDtcclxuICAgICAgaWYgKHpNb2RlbCAmJiB6TW9kZWxbZmllbGRWYWx1ZV0pIHtcclxuICAgICAgICAvLyBnZXQgek1vZGVsIFZhbHVlXHJcbiAgICAgICAgcmVjb3JkSWQgPSB6TW9kZWxbZmllbGRWYWx1ZV0udG9TdHJpbmcoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGdldHpEYXRhRm9yek1vZGVsJDogT2JzZXJ2YWJsZTxhbnk+ID0gWkNvbXBvbmVudEhlbHBlci5nZXRJbmZpbml0ZURhdGEobnVsbCwgJycsIHRoaXMsIHJlY29yZElkKTtcclxuICAgICAgaWYgKGdldHpEYXRhRm9yek1vZGVsJCkge1xyXG4gICAgICAgIGdldHpEYXRhRm9yek1vZGVsJC5zdWJzY3JpYmUoKHpkYXRhKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhLk5hbWUsICcgLSBpbml0aWFsIHpEYXRhIGxvYWQ6ICcsIHpkYXRhKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICB0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucyh0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCFaQ29tcG9uZW50SGVscGVyLmlzTW9iaWxlU2NyZWVuKCkpIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIFN0eWxlICMxLCAjMiwgIzNcclxuICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCBkYXRhLklzUmVxdWlyZWQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZGF0YS5PcHRpb25SZXNvdXJjZVVSTCkge1xyXG4gICAgICAgIHRoaXMubGF6eUxvYWREYXRhT3B0aW9ucygpLnN1YnNjcmliZShyZXMgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uRGF0YSA9IHJlcy5kYXRhU2V0ID8gcmVzLmRhdGFTZXQgOiByZXM7XHJcblxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdEZpcnN0T3B0aW9uKGlzUmVxdWlyZWQsIG9wdGlvbkRhdGFbMF0sIGZpZWxkVmFsdWUsIHpNb2RlbC5JZCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuZ3JvdXApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSAmJiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgLy9za2lwIGV2YWwgaWYgc2VsZWN0b3B0aW9ucyBpcyBleGlzdFxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkRhdGEgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwodGhpcywgdGhpcy5pdGVtRGF0YUZpZWxkKTtcclxuICAgICAgICAgIC8vIGFwcGVuZCBkYXRhIHZpYSB0aW1lb3V0IGFmdGVyIGRhdGEgaXMgbG9hZGVkLlxyXG4gICAgICAgICAgaWYgKG9wdGlvbkRhdGEgJiYgb3B0aW9uRGF0YS5sZW5ndGggPT09IDEgJiYgIXRoaXMuZGF0YS5EaXNhYmxlQXV0b0ZpcnN0U2VsZWN0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoaXNDb21wb25lbnQgPSB0aGlzO1xyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICB0aGlzQ29tcG9uZW50LmF1dG9TZWxlY3RGaXJzdE9wdGlvbihpc1JlcXVpcmVkLCBvcHRpb25EYXRhWzBdLCBmaWVsZFZhbHVlLCB0aGlzQ29tcG9uZW50Lmdyb3VwLnpNb2RlbC5JZCk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBzdXBlci5mb2N1c09uRGVmYXVsdCh0aGlzLmZvY3VzLmJpbmQodGhpcykpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAvLyBpZiAodGhpcy5zdWJzY3JpcHRpb24pIHtcclxuICAgIC8vICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLmRlYm91bmNlU3ViKSB7XHJcbiAgICAgIHRoaXMuZGVib3VuY2VTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIEF1dG8gc2VsZWN0IGZpcnN0IG9wdGlvbiAoaWYgcmVxdWlyZWQgJiBvbmx5IDEgb3B0aW9uKVxyXG4gIHByaXZhdGUgYXV0b1NlbGVjdEZpcnN0T3B0aW9uKHJlcXVpcmVkOiBib29sZWFuLCBkYXRhOiBhbnksIHpNb2RlbFByb3BlcnR5TmFtZTogc3RyaW5nLCBpZDogYW55KSB7XHJcbiAgICBpZiAoWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShpZCkgJiYgcmVxdWlyZWQpIHtcclxuICAgICAgdmFyIG9wdGlvbklkID0gZGF0YS5JZDtcclxuICAgICAgaWYgKHRoaXMuZGF0YS5NdWx0aXBsZSkge1xyXG4gICAgICAgIG9wdGlvbklkID0gW29wdGlvbklkXTtcclxuICAgICAgfVxyXG4gICAgICBaQ29tcG9uZW50SGVscGVyLnNldE1vZGVsVmFsdWUoek1vZGVsUHJvcGVydHlOYW1lLCBvcHRpb25JZCwgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgICB0aGlzLmdyb3VwLnN1YmplY3QubmV4dCh7XHJcbiAgICAgICAgdHlwZTogXCJvbkNoYW5nZVwiLFxyXG4gICAgICAgIHRhcmdldDogdGhpcy5kYXRhLk9uQ2hhbmdlLFxyXG4gICAgICAgIGV2ZW50LFxyXG4gICAgICAgIGRhdGE6IHsgWyd2YWx1ZSddOiBvcHRpb25JZCwgZmllbGQ6IHRoaXMuZGF0YSB9XHJcbiAgICAgIH0gYXMgWkNvbXBvbmVudE91dHB1dEV2ZW50KTtcclxuXHJcbiAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gU3R5bGUgIzNcclxuICBsYXp5TG9hZERhdGFPcHRpb25zKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICBjb25zdCByZXNvdXJjZVVybCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcclxuICAgICAgdGhpcy5kYXRhLk9wdGlvblJlc291cmNlVVJMXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGZpbHRlclBhcmFtID0gbmV3IFpTZWxlY3RQb3N0QXBpUGFyYW1zKCk7XHJcbiAgICBmaWx0ZXJQYXJhbS5zb3J0cyA9IHRoaXMuZGF0YS5PcHRpb25Tb3J0O1xyXG4gICAgZmlsdGVyUGFyYW0uY29sdW1ucyA9IHRoaXMuZGF0YS5PcHRpb25Db2x1bW5zO1xyXG4gICAgZmlsdGVyUGFyYW0uZmlsdGVycyA9IHRoaXMuZGF0YS5PcHRpb25GaWx0ZXI7XHJcblxyXG4gICAgcmV0dXJuIFpDb21wb25lbnRIZWxwZXIuZ2V0RGF0YU9wdGlvbnMoXHJcbiAgICAgIHRoaXMuZGF0YS5PcHRpb25OYW1lLFxyXG4gICAgICBmaWx0ZXJQYXJhbSxcclxuICAgICAgdGhpcy5ncm91cCxcclxuICAgICAgcmVzb3VyY2VVcmwsXHJcbiAgICAgIHRoaXMuY2FjaGVTZXJ2aWNlLFxyXG4gICAgICB0aGlzLndlYkFwaVNlcnZpY2UsXHJcbiAgICAgIHRoaXMuZGF0YVsnRGlzYWJsZUNhY2hlJ11cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyBTdHlsZSAjNCwgdXNlZCBpbiBpb25pYy1zZWxlY3RhYmxlXHJcbiAgZ2V0SW5maW5pdGVEYXRhKGV2ZW50OiB7XHJcbiAgICBjb21wb25lbnQ6IElvbmljU2VsZWN0YWJsZUNvbXBvbmVudDtcclxuICAgIHRleHQ6IHN0cmluZztcclxuICB9KSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLmdldEluZmluaXRlRGF0YShldmVudC5jb21wb25lbnQsIGV2ZW50LnRleHQsIHRoaXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SXRlbXNEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5pbmZpbml0ZXpEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG9wdGlvbk5hbWUgPSB0aGlzLmRhdGEuT3B0aW9uTmFtZSB8fCB0aGlzLml0ZW1EYXRhRmllbGQgfHwgJ2dyb3VwLnpEYXRhLicgKyB0aGlzLmRhdGEuTmFtZTtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zKSAmJiAhdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0pIHtcclxuICAgICAgLy8gcmV0dXJuIHNlbGVjdGlvbk9wdGlvbnM7XHJcbiAgICAgIC8vIHJldHVybiB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucztcclxuICAgICAgdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0gPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucztcclxuICAgICAgdGhpcy5pdGVtRGF0YUZpZWxkID0gb3B0aW9uTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAob3B0aW9uTmFtZS5zdGFydHNXaXRoKCd6RGF0YS4nKSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDYpXSB8fCBbXTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25OYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLnpEYXRhLicpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwLnpEYXRhW29wdGlvbk5hbWUuc2xpY2UoMTIpXSB8fCBbXTtcclxuICAgIH1cclxuICAgIGlmIChvcHRpb25OYW1lLnN0YXJ0c1dpdGgoJ2dyb3VwLicpKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdyb3VwW29wdGlvbk5hbWUuc2xpY2UoNildIHx8IFtdO1xyXG4gICAgfVxyXG4gICAgaWYgKG9wdGlvbk5hbWUpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBbb3B0aW9uTmFtZV0gfHwgW107XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLndhcm4odGhpcy5kYXRhLk5hbWUsICcgLSBJbnZhbGlkIHNldHRpbmcgZm9yIE9wdGlvbk5hbWU6ICcsIG9wdGlvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgb25TZWFyY2goZXZlbnQ6IHsgY29tcG9uZW50OiBJb25pY1NlbGVjdGFibGVDb21wb25lbnQ7IHRleHQ6IHN0cmluZyB9KSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIkF0IHpzZWxlY3RtdWx0aXBsZS5jb21wb25lbnQgKG9uU2VhcmNoKTogXCIsIGV2ZW50KTtcclxuICAgIC8vIGV2ZW50LmNvbXBvbmVudCBpcyBmb3IgbW9iaWxlIG9ubHlcclxuICAgIGNvbnN0IGNvbXBvbmVudCA9IGV2ZW50LmNvbXBvbmVudDtcclxuICAgIGlmIChjb21wb25lbnQpIHtcclxuICAgICAgY29tcG9uZW50LnN0YXJ0U2VhcmNoKCk7XHJcbiAgICAgIGNvbXBvbmVudC5lbmFibGVJbmZpbml0ZVNjcm9sbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgICAgLy8gSWYgc2VhcmNoIHRleHQsIHJlc2V0IHBhZ2UgdG8gMC4gR2V0IGluZmluaXRlIGRhdGFcclxuICAgICAgaWYgKGV2ZW50LnRleHQgIT09IG51bGwgJiYgZXZlbnQudGV4dCAhPT0gdGhpcy5pbmZpbml0ZVNlYXJjaFRleHQpIHtcclxuICAgICAgICB0aGlzLmluZmluaXRlU2Nyb2xsUGFnZU5vID0gMDtcclxuICAgICAgICB0aGlzLm1vZGVsekRhdGEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmdldEluZmluaXRlRGF0YShldmVudCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgLy8gUmVzZXQgc2Nyb2xsIHBhZ2UsIGVtcHR5IGl0ZW1zXHJcbiAgICAgIHRoaXMuaW5maW5pdGVTY3JvbGxQYWdlTm8gPSAwO1xyXG4gICAgICBpZiAoY29tcG9uZW50KSB7XHJcbiAgICAgICAgY29tcG9uZW50Lml0ZW1zID0gW107XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEZpbHRlciB6RGF0YSBhbmQgcHVzaCB0byBpdGVtc1xyXG4gICAgICBjb25zdCBwYXJhbXM6IHpTZWxlY3RNdWx0aXBsZVBhcmFtcyA9IHtcclxuICAgICAgICByZWZlcklkOiBudWxsLFxyXG4gICAgICAgIHBhZ2VObzogMCxcclxuICAgICAgICBwYWdlU2l6ZTogMjAsXHJcbiAgICAgICAgc29ydENvbHVtbk5hbWU6IFwiXCIsXHJcbiAgICAgICAgc29ydE9yZGVyOiBcIlwiLFxyXG4gICAgICAgIHNvcnRDb2x1bW5OYW1lczogW10sXHJcbiAgICAgICAgc29ydE9yZGVyczogW10sXHJcbiAgICAgICAgZmlsdGVyUGFyYW1zOiBbXSxcclxuICAgICAgICBwYXJhbWV0ZXJzOiBcIlwiXHJcbiAgICAgIH07XHJcblxyXG4gICAgICBjb25zdCBzZWFyY2hGaWVsZHMgPSB0aGlzLmRhdGEuU2VhcmNoRmllbGRzID8gdGhpcy5kYXRhLlNlYXJjaEZpZWxkcyA6IHRoaXMuaXRlbVRleHRGaWVsZDtcclxuICAgICAgY29uc3QgZmlsdGVyaXRlbXMgPSBaQ29tcG9uZW50SGVscGVyLmZpbHRlclNlYXJjaEl0ZW1zKFxyXG4gICAgICAgIHRoaXMuZ2V0SXRlbXNEYXRhKCksXHJcbiAgICAgICAgZXZlbnQudGV4dCxcclxuICAgICAgICBzZWFyY2hGaWVsZHMsXHJcbiAgICAgICAgcGFyYW1zLnBhZ2VObyxcclxuICAgICAgICBwYXJhbXMucGFnZVNpemVcclxuICAgICAgKTtcclxuICAgICAgaWYgKGNvbXBvbmVudCkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1zID0gY29tcG9uZW50Lml0ZW1zLmNvbmNhdChmaWx0ZXJpdGVtcyk7XHJcbiAgICAgICAgY29tcG9uZW50Lml0ZW1zID0gaXRlbXM7XHJcbiAgICAgICAgY29tcG9uZW50LmVuZEluZmluaXRlU2Nyb2xsKCk7XHJcbiAgICAgICAgY29tcG9uZW50LmVuZFNlYXJjaCgpO1xyXG4gICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGhhbmRsZUxhenlMb2FkRmlsdGVyKHZhbHVlOiBhbnksIGp1c3RPbmVUaW1lPzogYm9vbGVhbikge1xyXG4gICAgZGVidWdnZXI7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZVN1Yikge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZVN1YiA9IG9mKFtdKS5waXBlKGRlbGF5KDUwMCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vblNlYXJjaCh7IGNvbXBvbmVudDogbnVsbCwgdGV4dDogdmFsdWUgfSk7XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3JvdXAuYWZ0ZXJMb2FkekRhdGFPcHRpb25zKSB7XHJcbiAgICAgICAgICB0aGlzLmdyb3VwLmFmdGVyTG9hZHpEYXRhT3B0aW9ucyh0aGlzLmdyb3VwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVGaWx0ZXIodmFsdWU6IGFueSwganVzdE9uZVRpbWU/OiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5kZWJvdW5jZVN1Yikge1xyXG4gICAgICB0aGlzLmRlYm91bmNlU3ViLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2tpcCBmaWx0ZXJpbmcgaWYgaGF2ZSBpbmlmaW5pdGVzY3JvbGw/XHJcbiAgICAvLyBUbyByZXNvbHZlIGJ1ZyAjMTk3OVxyXG4gICAgLy8gaWYgKCF0aGlzLmRhdGEuSGFzSW5maW5pdGVTY3JvbGwpIHtcclxuICAgIHRoaXMuZGVib3VuY2VTdWIgPSBvZihbXSlcclxuICAgICAgLnBpcGUodGFwKCgpID0+ICh0aGlzLmlzTG9hZGluZyA9IHRydWUpKSwgZGVsYXkoNTAwKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5vblNlYXJjaCh7IGNvbXBvbmVudDogbnVsbCwgdGV4dDogdmFsdWUgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmdyb3VwKSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgdGhpcy5ncm91cC5hZnRlckxvYWR6RGF0YU9wdGlvbnModGhpcy5ncm91cCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIC8vIH1cclxuXHJcblxyXG4gICAgLy8gaWYgKHRoaXMubG9hZEluZmluaXRlRGF0YVN1Yikge1xyXG4gICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHRoaXMubG9hZEluZmluaXRlRGF0YVN1YiA9IG5ldyBTdWJqZWN0KGZhbHNlKTtcclxuICAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgLy8gaW50ZXJ2YWwoMjAwMCkucGlwZSh0YWtlVW50aWwodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSkuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5vblNlYXJjaCh7IGNvbXBvbmVudDogbnVsbCwgdGV4dDogdmFsdWUgfSk7XHJcbiAgICAvLyAgIGlmIChqdXN0T25lVGltZSkge1xyXG4gICAgLy8gICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG5cclxuICBoYW5kbGVPcGVuKCkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5IYXNJbmZpbml0ZVNjcm9sbCkge1xyXG4gICAgICB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpZiAodGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViKSB7XHJcbiAgICAgIC8vICAgLy8gICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIudW5zdWJzY3JpYmUoKTtcclxuICAgICAgLy8gICAvLyB9XHJcbiAgICAgIC8vICAgLy8gdGhpcy5sb2FkSW5maW5pdGVEYXRhU3ViID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgLy8gICAvLyAvLyB0aGlzLmhhbmRsZUZpbHRlcihudWxsKTtcclxuICAgICAgLy8gICAvLyBpbnRlcnZhbCgzMDAwKS5waXBlKHRha2VVbnRpbCh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAvLyAgIC8vIHRoaXMuaGFuZGxlRmlsdGVyKG51bGwpO1xyXG4gICAgICAvLyAgIC8vIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQ2xvc2UoKSB7XHJcbiAgICAvLyBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsKSB7XHJcbiAgICAvLyAgIGlmICh0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIpIHtcclxuICAgIC8vICAgICB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIubmV4dCh0cnVlKTtcclxuICAgIC8vICAgICAvLyB0aGlzLmxvYWRJbmZpbml0ZURhdGFTdWIuY29tcGxldGUoKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlQmx1cigpIHtcclxuICAgIC8vIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRJdGVtVGVtcGxhdGUoXHJcbiAgICBpdGVtOiBhbnksXHJcbiAgICBkYXRhOiBhbnksXHJcbiAgICBncm91cDogYW55LFxyXG4gICAgaXRlbVZhbHVlRmllbGQ6IHN0cmluZyxcclxuICAgIGl0ZW1UZXh0RmllbGQ6IHN0cmluZ1xyXG4gICkge1xyXG4gICAgLy8gVG9ETzogaXRlbVZhbHVlRmllbGQgYW5kIGl0ZW1UZXh0RmllbGRcclxuICAgIGlmICh0aGlzLmRhdGEuSXRlbVRlbXBsYXRlKSB7XHJcbiAgICAgIGNvbnN0IGdldFRlbXBsYXRlRnVuYyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbCh0aGlzLCB0aGlzLmRhdGEuSXRlbVRlbXBsYXRlKTtcclxuXHJcbiAgICAgIHJldHVybiBnZXRUZW1wbGF0ZUZ1bmMoe1xyXG4gICAgICAgIGl0ZW0sXHJcbiAgICAgICAgZGF0YSxcclxuICAgICAgICBncm91cCxcclxuICAgICAgICBpdGVtVmFsdWVGaWVsZCxcclxuICAgICAgICBpdGVtVGV4dEZpZWxkXHJcbiAgICAgIH0gYXMgWlNlbGVjdE11bHRpcGxlVGVtcGxhdGVQYXJhbXMpO1xyXG4gICAgfSBlbHNlIGlmIChpdGVtVGV4dEZpZWxkKSB7XHJcbiAgICAgIHJldHVybiBpdGVtW2l0ZW1UZXh0RmllbGRdO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gcmV0dXJuIGl0ZW1baXRlbVRleHRGaWVsZF07XHJcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGl0ZW0pLmpvaW4oXCIsIFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uQWRkSXRlbShldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBmID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKHRoaXMsIHRoaXMuZGF0YS5PbkFkZEl0ZW0pO1xyXG4gICAgaWYgKHR5cGVvZiBmID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZi5iaW5kKHRoaXMuZ3JvdXAuY3RybFNjb3BlKTtcclxuICAgICAgcmV0dXJuIGNhbGxGdW5jKCk7XHJcbiAgICB9XHJcbiAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgZGVjbGFyYXRpb24gb2YgT25BZGRJdGVtOiAnLCBmKTtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIC8vIENvbXBvbmVudCBiYXNpYyBmdW5jdGlvblxyXG4gIGNsZWFyRGF0YSgpIHtcclxuICAgIFpDb21wb25lbnRIZWxwZXIuc2V0TW9kZWxWYWx1ZSh0aGlzLmRhdGEuVmFsdWUsIFwiXCIsIHRoaXMuZ3JvdXApO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJJdGVtcygpIHtcclxuICAgIGlmICh0aGlzLnNlbGVjdENvbXBvbmVudCkge1xyXG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jbGVhcigpO1xyXG4gICAgICB0aGlzLnNlbGVjdENvbXBvbmVudC5jbG9zZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uZmlybUl0ZW1zKCkge1xyXG4gICAgaWYgKHRoaXMuc2VsZWN0Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0Q29tcG9uZW50LmNvbmZpcm0oKTtcclxuICAgICAgdGhpcy5zZWxlY3RDb21wb25lbnQuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRvZ2dsZUl0ZW1zKCkge1xyXG4gICAgdGhpcy5zZWxlY3RDb21wb25lbnQudG9nZ2xlSXRlbXModGhpcy50b2dnbGVTZWxlY3RhYmxlKTtcclxuICAgIHRoaXMudG9nZ2xlU2VsZWN0YWJsZSA9ICF0aGlzLnRvZ2dsZVNlbGVjdGFibGU7XHJcblxyXG4gICAgLy8gQ29uZmlybSBpdGVtcyBhbmQgY2xvc2UgU2VsZWN0IHBhZ2VcclxuICAgIC8vIHdpdGhvdXQgaGF2aW5nIHRoZSB1c2VyIHRvIGNsaWNrIENvbmZpcm0gYnV0dG9uLlxyXG4gICAgLy8gdGhpcy5jb25maXJtKCk7XHJcbiAgfVxyXG5cclxuICAvLyBEaXNhYmxlIE9wZW4gT24gRm9jdXNcclxuICBkaXNhYmxlT3Blbk9uRm9jdXMoY29tYm9ib3hDb21wb25lbnQ6IGFueSkge1xyXG4gICAgaWYgKHRoaXMuZGF0YS5EaXNhYmxlT3Blbk9uRm9jdXMpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIGNvbWJvYm94Q29tcG9uZW50O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gT25DaGFuZ2VcclxuICBwdWJsaWMgb25DaGFuZ2VfZGVza3RvcChldmVudDogYW55KSB7XHJcbiAgICBzdXBlci5vbkNoYW5nZShudWxsLCBldmVudClcclxuICAgIHRoaXMuaGFuZGxlSW5maW5pdGVTY3JvbGxPbkNoYW5nZShldmVudCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2VfbW9iaWxlKGV2ZW50OiB7IGNvbXBvbmVudDogSW9uaWNTZWxlY3RhYmxlQ29tcG9uZW50OyB2YWx1ZTogYW55IH0pIHtcclxuICAgIHN1cGVyLm9uQ2hhbmdlKGV2ZW50KVxyXG4gICAgY29uc3QgZmMgPSB0aGlzLmZvcm0uY29udHJvbHNbdGhpcy5kYXRhLlZhbHVlXTtcclxuICAgIHRoaXMuaGFuZGxlQ2xvc2UoKTtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIHN1cGVyLmdldElzUmVxdWlyZWRWYWx1ZSgpICYmIChldmVudC52YWx1ZSA9PT0gbnVsbCB8fCBldmVudC52YWx1ZS5sZW5ndGggPT09IDApXHJcbiAgICApIHtcclxuICAgICAgZmMuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmYy5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5oYW5kbGVJbmZpbml0ZVNjcm9sbE9uQ2hhbmdlKGV2ZW50LnZhbHVlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlSW5maW5pdGVTY3JvbGxPbkNoYW5nZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAodGhpcy5kYXRhLkhhc0luZmluaXRlU2Nyb2xsICYmICEhdGhpcy5kYXRhLkluZmluaXRlU2Nyb2xsJCkge1xyXG4gICAgICBjb25zdCB0ZXh0RmllbGQgPSB0aGlzLml0ZW1UZXh0RmllbGQudG9TdHJpbmcoKTtcclxuICAgICAgY29uc3QgdmFsdWVGaWVsZCA9IHRoaXMuaXRlbVZhbHVlRmllbGQudG9TdHJpbmcoKTtcclxuICAgICAgbGV0IHpkYXRhTW9kZWwgPSBbXTtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgemRhdGFNb2RlbCA9IHRoaXMuaW5maW5pdGV6RGF0YS5maWx0ZXIoeCA9PiB4W3ZhbHVlRmllbGRdID09PSB2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5tb2RlbHpEYXRhID0gemRhdGFNb2RlbC5zbGljZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLml0ZW1EYXRhRmllbGQuc3RhcnRzV2l0aCgnZ3JvdXAuekRhdGEuJykpIHtcclxuICAgICAgICB0aGlzLmdyb3VwLnpEYXRhW3RoaXMuaXRlbURhdGFGaWVsZC5zbGljZSgxMildID0gemRhdGFNb2RlbDtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLml0ZW1EYXRhRmllbGQuc3RhcnRzV2l0aCgnZ3JvdXAuJykpIHtcclxuICAgICAgICB0aGlzLmdyb3VwW3RoaXMuaXRlbURhdGFGaWVsZC5zbGljZSg2KV0gPSB6ZGF0YU1vZGVsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBNdWx0aSBTZWxlY3Rpb24gVHJlZVxyXG4gIHB1YmxpYyBnZXQgZmlsdGVyRXhwYW5kU2V0dGluZ3MoKTogRmlsdGVyRXhwYW5kU2V0dGluZ3Mge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZXhwYW5kTWF0Y2hlczogdHJ1ZSxcclxuICAgICAgZXhwYW5kZWRPbkNsZWFyOiBcImluaXRpYWxcIlxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0NoaWxkcmVuID0gKGRhdGFpdGVtOiBhbnkpOiBib29sZWFuID0+ICEhZGF0YWl0ZW1bJ2l0ZW1zJ107XHJcblxyXG4gIHB1YmxpYyBoYW5kbGVNdWx0aVNlbGVjdFRyZWVGaWx0ZXIodmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5wYXJzZWRJdGVtc0RhdGEgPSB0aGlzLm9uTXVsdGlTZWxlY3RUcmVlU2VhcmNoKHRoaXMuZ2V0SXRlbXNEYXRhKCksIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBvbk11bHRpU2VsZWN0VHJlZVNlYXJjaChpdGVtczogYW55W10sIHNlYXJjaGVkVGV4dDogc3RyaW5nKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5zKGl0ZW1bdGhpcy5pdGVtVGV4dEZpZWxkXSwgc2VhcmNoZWRUZXh0KSkge1xyXG4gICAgICAgIGFjYy5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKGl0ZW1bJ2l0ZW1zJ10gJiYgaXRlbVsnaXRlbXMnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgY29uc3QgbmV3SXRlbXMgPSB0aGlzLm9uTXVsdGlTZWxlY3RUcmVlU2VhcmNoKGl0ZW1bJ2l0ZW1zJ10sIHNlYXJjaGVkVGV4dCk7XHJcblxyXG4gICAgICAgIGlmIChuZXdJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICBjb25zdCBfaXRlbSA9IE9iamVjdC5hc3NpZ24oe30sIGl0ZW0pO1xyXG4gICAgICAgICAgX2l0ZW1bJ2l0ZW1zJ10gPSBuZXdJdGVtcztcclxuXHJcbiAgICAgICAgICBhY2MucHVzaChfaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gYWNjO1xyXG4gICAgfSwgW10pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnRhaW5zKHRleHQ6IHN0cmluZywgc2VhcmNoZWRUZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0ZXh0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaGVkVGV4dCB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTZWxlY3RPcHRpb24odmFsdWU6IGFueSkge1xyXG4gICAgY29uc3Qgb3B0aW9uTmFtZSA9IHRoaXMuZGF0YS5PcHRpb25OYW1lIHx8IHRoaXMuaXRlbURhdGFGaWVsZDtcclxuICAgIHRoaXMuZGF0YS5TZWxlY3RPcHRpb25zID0gT2JqZWN0LmFzc2lnbihbXSwgdmFsdWUpO1xyXG4gICAgdGhpcy5ncm91cC56RGF0YVtvcHRpb25OYW1lLnNsaWNlKDEyKV0gPSB0aGlzLmRhdGEuU2VsZWN0T3B0aW9ucztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmNvbWJvYm94Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuY29tYm9ib3hDb21wb25lbnQuZm9jdXMoKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5tdWx0aXNlbGVjdCkge1xyXG4gICAgICB0aGlzLm11bHRpc2VsZWN0LmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMubXVsdGlzZWxlY3R0cmVlKSB7XHJcbiAgICAgIHRoaXMubXVsdGlzZWxlY3R0cmVlLmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuZHJvcGRvd25saXN0Q29tcG9uZW50KSB7XHJcbiAgICAgIHRoaXMuZHJvcGRvd25saXN0Q29tcG9uZW50LmZvY3VzKCk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXRDb21wb25lbnRUb1VzZSgpIHtcclxuICAgIGlmICh0aGlzLmRhdGEuSW50ZXJuYWxDb21wb25lbnRUeXBlICYmIE9iamVjdC52YWx1ZXMoSW50ZXJuYWxDb21wb25lbnRUeXBlX0Ryb3BEb3duKS5pbmNsdWRlcyh0aGlzLmRhdGEuSW50ZXJuYWxDb21wb25lbnRUeXBlIGFzIGFueSkpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gdGhpcy5kYXRhLkludGVybmFsQ29tcG9uZW50VHlwZSBhcyBhbnk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICghdGhpcy5kYXRhLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IEludGVybmFsQ29tcG9uZW50VHlwZV9Ecm9wRG93bi5jb21ib2JveDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YS5NdWx0aXBsZSAmJiAhdGhpcy5kYXRhLkVuYWJsZUNoZWNrYm94KSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50VHlwZSA9IEludGVybmFsQ29tcG9uZW50VHlwZV9Ecm9wRG93bi5tdWx0aXNlbGVjdDtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZGF0YS5NdWx0aXBsZSAmJiB0aGlzLmRhdGEuRW5hYmxlQ2hlY2tib3gpIHtcclxuICAgICAgdGhpcy5jb21wb25lbnRUeXBlID0gSW50ZXJuYWxDb21wb25lbnRUeXBlX0Ryb3BEb3duLm11bHRpc2VsZWN0dHJlZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBbZm9ybUdyb3VwXT1cImZvcm1cIiBjbGFzcz1cInpzZWxlY3RtdWx0aXBsZS1jb250YWluZXIgZTF0YWctc3R5bGVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZVwiPlxyXG4gIDxpb25pYy1zZWxlY3RhYmxlICpuZ0lmPVwiaXNNb2JpbGVTY3JlZW4oKVwiICNzZWxlY3RDb21wb25lbnQgaXRlbS1jb250ZW50IHNlYXJjaEZhaWxUZXh0PVwiTm90aGluZyBmb3VuZCA6KFwiXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyQ29sb3I9XCJwcmltYXJ5XCIgY2xlYXJCdXR0b25UZXh0PVwiQ2xlYXJcIiBbKG5nTW9kZWwpXT1cImdyb3VwLnpNb2RlbFtkYXRhLlZhbHVlXVwiIFtpZF09XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiZ2V0SXRlbXNEYXRhKClcIiBbaXRlbVZhbHVlRmllbGRdPVwiaXRlbVZhbHVlRmllbGRcIiBbaXRlbVRleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICBbY2FuQWRkSXRlbV09XCIhIWRhdGEuT25BZGRJdGVtXCIgW2NhbkNsZWFyXT1cInRydWVcIiBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NhblNlYXJjaF09XCIhZGF0YVsnZGlzYWJsZS1zZWFyY2gnXVwiIFtzaG91bGRGb2N1c1NlYXJjaGJhcl09XCIhZGF0YVsnZGlzYWJsZS1zZWFyY2gnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hhc0luZmluaXRlU2Nyb2xsXT1cIiEhZGF0YS5IYXNJbmZpbml0ZVNjcm9sbFwiIFtpc011bHRpcGxlXT1cImRhdGEuTXVsdGlwbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpc0VuYWJsZWRdPVwiISghIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3VsZFN0b3JlSXRlbVZhbHVlXT1cInRydWVcIiAob25TZWFyY2gpPVwib25TZWFyY2goJGV2ZW50KVwiIChvbkluZmluaXRlU2Nyb2xsKT1cImdldEluZmluaXRlRGF0YSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAob25BZGRJdGVtKT1cIm9uQWRkSXRlbSgkZXZlbnQpXCIgKG9uQ2hhbmdlKT1cIm9uQ2hhbmdlX21vYmlsZSgkZXZlbnQpXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTFcIj5cclxuXHJcbiAgICA8bmctdGVtcGxhdGUgaW9uaWNTZWxlY3RhYmxlSXRlbUljb25UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXNJdGVtU2VsZWN0ZWQ9XCJpc0l0ZW1TZWxlY3RlZFwiPlxyXG4gICAgICA8ZmEtaWNvbiBzbG90PVwic3RhcnRcIiBjbGFzcz1cImlzSXRlbVNlbGVjdGVkIGUxdGFnLXN0eWxlMlwiIHNpemU9XCJzbVwiIFtpY29uXT1cIlsnZmFyJywgaXNJdGVtU2VsZWN0ZWQgPyAnY2hlY2stY2lyY2xlJzogJ2NpcmNsZSddXCJcclxuICAgICAgICAgICAgICAgW3N0eWxlc109XCJ7J2NvbG9yJzogaXNJdGVtU2VsZWN0ZWQgPyAnZG9kZ2VyQmx1ZScgOiAnbGlnaHRHcmF5J31cIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj48L2ZhLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBpb25pY1NlbGVjdGFibGVDbG9zZUJ1dHRvblRlbXBsYXRlPlxyXG4gICAgICA8IS0tIDxpb24taWNvbiBuYW1lPVwiY2xvc2UtY2lyY2xlXCI+PC9pb24taWNvbj4gLS0+XHJcbiAgICAgIDxmYS1pY29uIFtpY29uXT1cIid0aW1lcy1jaXJjbGUnXCIgc2l6ZT1cIm1kXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUzXCIgY2xhc3M9XCJlMXRhZy1zdHlsZTNcIj48L2ZhLWljb24+XHJcbiAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgIDxuZy10ZW1wbGF0ZSBpb25pY1NlbGVjdGFibGVUaXRsZVRlbXBsYXRlPlxyXG4gICAgICA8c3BhbiBjbGFzcz1lMXRhZy1zdHlsZTQgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+e3tkYXRhLkxhYmVsfX08L3NwYW4+XHJcbiAgICAgIDxpb24tdGV4dCAqbmdJZj1cImdldElzUmVxdWlyZWRWYWx1ZSgpXCIgY29sb3I9XCJkYW5nZXJcIj4qPC9pb24tdGV4dD5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgPG5nLXRlbXBsYXRlIGlvbmljU2VsZWN0YWJsZUl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlMXRhZy1zdHlsZTVcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIj57eyBnZXRJdGVtVGVtcGxhdGUoaXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9pb25pYy1zZWxlY3RhYmxlPlxyXG4gIDxrZW5kby1jb21ib2JveCAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpICYmIGNvbXBvbmVudFR5cGUgPT0gJ2NvbWJvYm94J1wiXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZmllbGQgZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgI2NvbWJvYm94Q29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwiaXRlbVZhbHVlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tXT1cImFsbG93Q3VzdG9tVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9Ecm9wRG93bkZpbHRlcl09XCJmaWx0ZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzdWdnZXN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGUgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbb3Blbk9uRm9jdXNdPVwiZGlzYWJsZU9wZW5PbkZvY3VzKGNvbWJvYm94Q29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3ZpcnR1YWxdPVwiZGF0YS5Jc0VuYWJsZVZpcnR1YWxpemF0aW9uID09IHRydWUgPyB2aXJ0dWFsIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIChvcGVuKT1cImhhbmRsZU9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJoYW5kbGVDbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRhdGEuQ2xlYXJCdXR0b24gPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0NvbWJvQm94SXRlbVRlbXBsYXRlIGxldC1kYXRhSXRlbT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJlMXRhZy1zdHlsZTVcIiBbY2xhc3MuenNlbGVjdC12aXJ0dWFsaXphdGlvbl09XCJkYXRhLklzRW5hYmxlVmlydHVhbGl6YXRpb25cIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTVcIj57eyBnZXRJdGVtVGVtcGxhdGUoZGF0YUl0ZW0sIGRhdGEsIGdyb3VwLCBpdGVtVmFsdWVGaWVsZCwgaXRlbVRleHRGaWVsZCkgfX08L3NwYW4+XHJcbiAgICAgIDwhLS0gPHNwYW4gY2xhc3M9XCJ0ZW1wbGF0ZVwiPnt7IGRhdGFJdGVtLnZhbHVlIH19PC9zcGFuPiB7eyBkYXRhSXRlbS50ZXh0IH19IC0tPlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLWNvbWJvYm94PlxyXG4gIDxrZW5kby1tdWx0aXNlbGVjdCAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpICYmIGNvbXBvbmVudFR5cGUgPT0gJ211bHRpc2VsZWN0J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtZmllbGQgZTF0YWctc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgICAgI211bHRpc2VsZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwiaXRlbVZhbHVlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tXT1cImFsbG93Q3VzdG9tVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGUgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2hlY2tib3hlc109XCJkYXRhLkVuYWJsZUNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaXNMb2FkaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJhdXRvQ2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICBba2VuZG9Ecm9wRG93bkZpbHRlcl09XCJmaWx0ZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKG9wZW4pPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgKGNsb3NlKT1cImhhbmRsZUNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAoYmx1cik9XCJoYW5kbGVCbHVyKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbY2xlYXJCdXR0b25dPVwiZGF0YS5DbGVhckJ1dHRvbiA9PSBmYWxzZSA/IGZhbHNlIDogdHJ1ZVwiPlxyXG4gICAgPG5nLXRlbXBsYXRlIGtlbmRvTXVsdGlTZWxlY3RJdGVtVGVtcGxhdGUgbGV0LWRhdGFJdGVtPlxyXG4gICAgICA8c3BhbiBjbGFzcz1cImUxdGFnLXN0eWxlNVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiPnt7IGdldEl0ZW1UZW1wbGF0ZShkYXRhSXRlbSwgZGF0YSwgZ3JvdXAsIGl0ZW1WYWx1ZUZpZWxkLCBpdGVtVGV4dEZpZWxkKSB9fTwvc3Bhbj5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1tdWx0aXNlbGVjdD5cclxuICA8a2VuZG8tbXVsdGlzZWxlY3R0cmVlICpuZ0lmPVwiIWlzTW9iaWxlU2NyZWVuKCkgICYmIGNvbXBvbmVudFR5cGUgPT0gJ211bHRpc2VsZWN0dHJlZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgI211bHRpc2VsZWN0dHJlZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAga2VuZG9NdWx0aVNlbGVjdFRyZWVFeHBhbmRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiZGF0YS5QbGFjZUhvbGRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBba2VuZG9NdWx0aVNlbGVjdFRyZWVIaWVyYXJjaHlCaW5kaW5nXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuRmllbGQ9XCJWYWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaGFzQ2hpbGRyZW5dPVwiaGFzQ2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRGaWVsZF09XCJpdGVtVGV4dEZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZUZpZWxkXT1cIml0ZW1WYWx1ZUZpZWxkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZVByaW1pdGl2ZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFJdGVtc109XCJkYXRhLlZhbHVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cImF1dG9DbG9zZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbZXhwYW5kT25GaWx0ZXJdPVwiZmlsdGVyRXhwYW5kU2V0dGluZ3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2ZpbHRlcmFibGVdPVwiZGF0YS5GaWx0ZXJhYmxlID09IGZhbHNlID8gZmFsc2UgOiB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJDaGFuZ2UpPVwiaGFuZGxlTXVsdGlTZWxlY3RUcmVlRmlsdGVyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImRhdGEuQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgKG9wZW4pPVwiaGFuZGxlT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJoYW5kbGVDbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIChibHVyKT1cImhhbmRsZUJsdXIoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRhdGEuQ2xlYXJCdXR0b24gPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb011bHRpU2VsZWN0VHJlZU5vRGF0YVRlbXBsYXRlPlxyXG4gICAgICA8aDQ+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJrLWljb24gay1pLXdhcm5pbmdcIj48L3NwYW4+PGJyIC8+PGJyIC8+XHJcbiAgICAgICAgTm8gcmVjb3JkIGZvdW5kLlxyXG4gICAgICA8L2g0PlxyXG4gICAgPC9uZy10ZW1wbGF0ZT5cclxuICA8L2tlbmRvLW11bHRpc2VsZWN0dHJlZT5cclxuICA8a2VuZG8tZHJvcGRvd25saXN0ICAqbmdJZj1cIiFpc01vYmlsZVNjcmVlbigpICAmJiBjb21wb25lbnRUeXBlID09ICdkcm9wZG93bmxpc3QnXCJcclxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1maWVsZCBlMXRhZy1zdHlsZTFcIlxyXG4gICAgICAgICAgICAgICAgICAjZHJvcGRvd25saXN0Q29tcG9uZW50XHJcbiAgICAgICAgICAgICAgICAgIFtkYXRhXT1cImdldEl0ZW1zRGF0YSgpIHwgenNlbGVjdFRyYW5zbGF0aW9uUGFyc2VyIDogaXRlbVRleHRGaWVsZCA6IGRhdGEgOiBncm91cCB8IGFzeW5jXCJcclxuICAgICAgICAgICAgICAgICAgW3ZhbHVlRmllbGRdPVwiaXRlbVZhbHVlRmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbdGV4dEZpZWxkXT1cIml0ZW1UZXh0RmllbGRcIlxyXG4gICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cImRhdGEuVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBbdmFsdWVQcmltaXRpdmVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJkYXRhLlBsYWNlSG9sZGVyXCJcclxuICAgICAgICAgICAgICAgICAgW2FsbG93Q3VzdG9tXT1cImFsbG93Q3VzdG9tVmFsdWVcIlxyXG4gICAgICAgICAgICAgICAgICBba2VuZG9Ecm9wRG93bkZpbHRlcl09XCJmaWx0ZXJTZXR0aW5nc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtzdWdnZXN0XT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbZmlsdGVyYWJsZV09XCJkYXRhLkZpbHRlcmFibGUgPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICBbb3Blbk9uRm9jdXNdPVwiZGlzYWJsZU9wZW5PbkZvY3VzKGNvbWJvYm94Q29tcG9uZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNSZWFkT25seSlcIlxyXG4gICAgICAgICAgICAgICAgICBbY2xhc3MuZGlzYWJsZWRdPVwiKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1JlYWRPbmx5RmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHlGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzUmVhZE9ubHkpXCJcclxuICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiZGF0YS5DbGFzc1wiXHJcbiAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzTG9hZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJvbkNoYW5nZV9kZXNrdG9wKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAoZmlsdGVyQ2hhbmdlKT1cImhhbmRsZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgW3ZpcnR1YWxdPVwiZGF0YS5Jc0VuYWJsZVZpcnR1YWxpemF0aW9uID09IHRydWUgPyB2aXJ0dWFsIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgIChvcGVuKT1cImhhbmRsZU9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJoYW5kbGVDbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgKGJsdXIpPVwiaGFuZGxlQmx1cigpXCJcclxuICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGUxXCJcclxuICAgICAgICAgICAgICAgICAgW2NsZWFyQnV0dG9uXT1cImRhdGEuQ2xlYXJCdXR0b24gPT0gZmFsc2UgPyBmYWxzZSA6IHRydWVcIj5cclxuICAgIDxuZy10ZW1wbGF0ZSBrZW5kb0Ryb3BEb3duTGlzdEl0ZW1UZW1wbGF0ZSBsZXQtZGF0YUl0ZW0+XHJcbiAgICAgIDxzcGFuIGNsYXNzPVwiZTF0YWctc3R5bGU1XCIgW2NsYXNzLnpzZWxlY3QtdmlydHVhbGl6YXRpb25dPVwiZGF0YS5Jc0VuYWJsZVZpcnR1YWxpemF0aW9uXCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU1XCI+e3sgZ2V0SXRlbVRlbXBsYXRlKGRhdGFJdGVtLCBkYXRhLCBncm91cCwgaXRlbVZhbHVlRmllbGQsIGl0ZW1UZXh0RmllbGQpIH19PC9zcGFuPlxyXG4gICAgICA8IS0tIDxzcGFuIGNsYXNzPVwidGVtcGxhdGVcIj57eyBkYXRhSXRlbS52YWx1ZSB9fTwvc3Bhbj4ge3sgZGF0YUl0ZW0udGV4dCB9fSAtLT5cclxuICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgPC9rZW5kby1kcm9wZG93bmxpc3Q+XHJcbjwvZGl2PlxyXG4iXX0=
|