kitsng-form-factory 0.4.35 → 0.4.37
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/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-multi-select/lookup-multi-select.component.mjs +28 -12
- package/esm2022/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.mjs +27 -11
- package/esm2022/lib/kitsng-form-factory/core/models/kitsng-form-factory.mjs +1 -1
- package/fesm2022/kitsng-form-factory.mjs +111 -81
- package/fesm2022/kitsng-form-factory.mjs.map +1 -1
- package/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-multi-select/lookup-multi-select.component.d.ts +2 -1
- package/lib/kitsng-form-factory/components/kitsng-form-fields/lookup-select/lookup-select.component.d.ts +2 -1
- package/lib/kitsng-form-factory/core/models/kitsng-form-factory.d.ts +3 -0
- package/package.json +1 -1
|
@@ -4,13 +4,14 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "../../../core/services/lookup-list.service";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
6
|
import * as i3 from "@angular/forms";
|
|
7
|
-
import * as i4 from "primeng/
|
|
8
|
-
import * as i5 from "primeng/
|
|
9
|
-
import * as i6 from "primeng/
|
|
10
|
-
import * as i7 from "primeng/
|
|
11
|
-
import * as i8 from "
|
|
12
|
-
import * as i9 from "../
|
|
13
|
-
import * as i10 from "
|
|
7
|
+
import * as i4 from "primeng/inputtext";
|
|
8
|
+
import * as i5 from "primeng/api";
|
|
9
|
+
import * as i6 from "primeng/multiselect";
|
|
10
|
+
import * as i7 from "primeng/button";
|
|
11
|
+
import * as i8 from "primeng/progressspinner";
|
|
12
|
+
import * as i9 from "../form-element-layout/form-element-layout.component";
|
|
13
|
+
import * as i10 from "../field-errors/field-errors.component";
|
|
14
|
+
import * as i11 from "@ngx-translate/core";
|
|
14
15
|
export class LookupMultiSelectComponent {
|
|
15
16
|
constructor(lookupListService) {
|
|
16
17
|
this.lookupListService = lookupListService;
|
|
@@ -154,6 +155,17 @@ export class LookupMultiSelectComponent {
|
|
|
154
155
|
updateOverlayDropdownoptions() {
|
|
155
156
|
if (this.multiSelect?.options) {
|
|
156
157
|
this.multiSelect.options = this.options().multiSelectOptions;
|
|
158
|
+
setTimeout(() => {
|
|
159
|
+
if (this.multiSelect && this.multiSelect.options && this.multiSelect.options.length > 0) {
|
|
160
|
+
let firstIndex = 0;
|
|
161
|
+
if (typeof this.multiSelect.findFirstFocusedOptionIndex === 'function') {
|
|
162
|
+
firstIndex = this.multiSelect.findFirstFocusedOptionIndex();
|
|
163
|
+
}
|
|
164
|
+
if (this.multiSelect.focusedOptionIndex) {
|
|
165
|
+
this.multiSelect.focusedOptionIndex.set(firstIndex);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
});
|
|
157
169
|
}
|
|
158
170
|
}
|
|
159
171
|
ensureSelectedOptions() {
|
|
@@ -190,10 +202,14 @@ export class LookupMultiSelectComponent {
|
|
|
190
202
|
}
|
|
191
203
|
});
|
|
192
204
|
}
|
|
193
|
-
|
|
194
|
-
this.filterWord = event.filter;
|
|
205
|
+
filterOptions() {
|
|
195
206
|
this.applyFilter();
|
|
196
207
|
}
|
|
208
|
+
onKeyDown(event) {
|
|
209
|
+
if (this.multiSelect) {
|
|
210
|
+
this.multiSelect.onFilterKeyDown(event);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
197
213
|
applyFilter() {
|
|
198
214
|
if (this.filterWord == '' ||
|
|
199
215
|
this.filterWord == null ||
|
|
@@ -245,11 +261,11 @@ export class LookupMultiSelectComponent {
|
|
|
245
261
|
this.destroy$.complete();
|
|
246
262
|
}
|
|
247
263
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LookupMultiSelectComponent, deps: [{ token: i1.LookupListService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
248
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: LookupMultiSelectComponent, selector: "app-lookup-multi-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: false, isRequired: false, transformFunction: null }, _formControl: { classPropertyName: "_formControl", publicName: "_formControl", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { handleChange: "handleChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "multiSelect", first: true, predicate: ["multiSelect"], descendants: true }], ngImport: i0, template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-multiSelect\n #multiSelect\n [options]=\"multiSelectOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? true\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onPanelHide)=\"resetFilter()\"\n
|
|
264
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.8", type: LookupMultiSelectComponent, selector: "app-lookup-multi-select", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: true, transformFunction: null }, field: { classPropertyName: "field", publicName: "field", isSignal: false, isRequired: false, transformFunction: null }, _formControl: { classPropertyName: "_formControl", publicName: "_formControl", isSignal: false, isRequired: false, transformFunction: null } }, outputs: { handleChange: "handleChange", modelChange: "modelChange" }, viewQueries: [{ propertyName: "multiSelect", first: true, predicate: ["multiSelect"], descendants: true }], ngImport: i0, template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-multiSelect\n #multiSelect\n [options]=\"multiSelectOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? true\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onPanelHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [showToggleAll]=\"options().showToggleAll ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions) ?? false}\"\n [display]=\"options().display ?? 'chip'\"\n (ngModelChange)=\"ngModelChange($event)\"\n >\n @if (options().filter) {\n <ng-template pTemplate=\"filter\" let-options=\"options\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: loadMore.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n [autofocus]=\"options().autofocusFilter ?? true\"\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (!loadingOptions) {\n @if (totalItems > (tempOptions.length || 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center\">\n <p-button type=\"button\" styleClass=\"p-button-outlined p-button-link\" label=\"Load More\" icon=\"pi pi-spinner\" (onClick)=\"loadMore()\"></p-button>\n </div>\n }\n } @else {\n @if (!firstTime && ((multiSelect?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n }\n </ng-template>\n </p-multiSelect>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions\"></app-field-errors>\n</ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n", dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.InputText, selector: "[pInputText]", inputs: ["variant"] }, { kind: "directive", type: i5.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "component", type: i6.MultiSelect, selector: "p-multiSelect", inputs: ["id", "ariaLabel", "style", "styleClass", "panelStyle", "panelStyleClass", "inputId", "disabled", "readonly", "group", "filter", "filterPlaceHolder", "filterLocale", "overlayVisible", "tabindex", "variant", "appendTo", "dataKey", "name", "ariaLabelledBy", "displaySelectedLabel", "maxSelectedLabels", "selectionLimit", "selectedItemsLabel", "showToggleAll", "emptyFilterMessage", "emptyMessage", "resetFilterOnHide", "dropdownIcon", "optionLabel", "optionValue", "optionDisabled", "optionGroupLabel", "optionGroupChildren", "showHeader", "filterBy", "scrollHeight", "lazy", "virtualScroll", "loading", "virtualScrollItemSize", "loadingIcon", "virtualScrollOptions", "overlayOptions", "ariaFilterLabel", "filterMatchMode", "tooltip", "tooltipPosition", "tooltipPositionStyle", "tooltipStyleClass", "autofocusFilter", "display", "autocomplete", "showClear", "autofocus", "autoZIndex", "baseZIndex", "showTransitionOptions", "hideTransitionOptions", "defaultLabel", "placeholder", "options", "filterValue", "itemSize", "selectAll", "focusOnHover", "filterFields", "selectOnFocus", "autoOptionFocus"], outputs: ["onChange", "onFilter", "onFocus", "onBlur", "onClick", "onClear", "onPanelShow", "onPanelHide", "onLazyLoad", "onRemove", "onSelectAllChange"] }, { kind: "component", type: i7.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "style", "styleClass", "badgeClass", "ariaLabel", "autofocus"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i8.ProgressSpinner, selector: "p-progressSpinner", inputs: ["styleClass", "style", "strokeWidth", "fill", "animationDuration", "ariaLabel"] }, { kind: "component", type: i9.FormElementLayoutComponent, selector: "app-form-element-layout", inputs: ["options", "field", "controlTemplateRef", "formControlRef", "customTemplate"] }, { kind: "component", type: i10.FieldErrorsComponent, selector: "app-field-errors", inputs: ["errors", "errorMessage", "controlName", "customErrorMessages", "showErrors"] }, { kind: "pipe", type: i11.TranslatePipe, name: "translate" }] }); }
|
|
249
265
|
}
|
|
250
266
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: LookupMultiSelectComponent, decorators: [{
|
|
251
267
|
type: Component,
|
|
252
|
-
args: [{ selector: 'app-lookup-multi-select', template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-multiSelect\n #multiSelect\n [options]=\"multiSelectOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? true\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onPanelHide)=\"resetFilter()\"\n
|
|
268
|
+
args: [{ selector: 'app-lookup-multi-select', template: "<app-form-element-layout\n [options]=\"options()\"\n [field]=\"field\"\n [controlTemplateRef]=\"controlTemplate\"\n [formControlRef]=\"_formControl\"\n></app-form-element-layout>\n<ng-template #controlTemplate>\n <p-multiSelect\n #multiSelect\n [options]=\"multiSelectOptions()\"\n [placeholder]=\"(options().placeholder??'') | translate\"\n [formControl]=\"_formControl\"\n [optionLabel]=\"options().optionLabel ?? 'text'\"\n [optionValue]=\"options().optionValue ?? 'id'\"\n [optionGroupLabel]=\"options().optionGroupLabel ?? 'text'\"\n [optionGroupChildren]=\"options().optionGroupChildren ?? 'items'\"\n [group]=\"options().group ?? false\"\n styleClass=\"{{options().class ?? 'w-full'}}\"\n [showClear]=\"options().showClear ?? false\"\n [appendTo]=\"options().appendTo ?? 'body'\"\n [filter]=\"options().filter ?? false\"\n [filterBy]=\"options().filterBy ?? 'text'\"\n [autofocusFilter]=\"options().autofocusFilter ?? true\"\n [autofocus]=\"options().autofocus ?? false\"\n [resetFilterOnHide]=\"true\"\n (onPanelHide)=\"resetFilter()\"\n [readonly]=\"options().readonly ?? false\"\n [showToggleAll]=\"options().showToggleAll ?? false\"\n [ngClass]=\"{'ng-invalid ng-dirty': (_formControl.errors && (_formControl.dirty || _formControl.touched) && !loadingOptions) ?? false}\"\n [display]=\"options().display ?? 'chip'\"\n (ngModelChange)=\"ngModelChange($event)\"\n >\n @if (options().filter) {\n <ng-template pTemplate=\"filter\" let-options=\"options\">\n <ng-container *ngIf=\"options().filterTemplate; else defaultFilterTemplate\">\n <ng-template\n [ngTemplateOutlet]=\"options().filterTemplate\"\n [ngTemplateOutletContext]=\"{\n $implicit: field,\n formControl: _formControl,\n options: options(),\n refresh: loadMore.bind(this),\n formGroup: _formControl.parent,\n defaultTemplate: defaultFilterTemplate\n }\">\n </ng-template>\n </ng-container>\n <ng-template #defaultFilterTemplate>\n <div class=\"p-inputgroup\" style=\"width: 100%;\">\n <span class=\"p-inputgroup-addon\"><i class=\"pi pi-search\"></i></span>\n <input\n pInputText\n [autofocus]=\"options().autofocusFilter ?? true\"\n placeholder=\"Search Item\"\n [(ngModel)]=\"filterWord\"\n [ngModelOptions]=\"{standalone: true}\"\n (ngModelChange)=\"filterOptions()\"\n (keydown)=\"onKeyDown($event)\"\n style=\"width: 100%;\" />\n </div>\n </ng-template>\n </ng-template>\n }\n <ng-template pTemplate=\"empty\">\n <ng-template [ngTemplateOutlet]=\"emptyTemplate\"></ng-template>\n </ng-template>\n <ng-template pTemplate=\"footer\">\n @if (!loadingOptions) {\n @if (totalItems > (tempOptions.length || 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center\">\n <p-button type=\"button\" styleClass=\"p-button-outlined p-button-link\" label=\"Load More\" icon=\"pi pi-spinner\" (onClick)=\"loadMore()\"></p-button>\n </div>\n }\n } @else {\n @if (!firstTime && ((multiSelect?.options?.length || 0) > 0)) {\n <div class=\"flex d-flex align-items-center justify-content-center text-primary fw-medium py-3 gap-2\">\n <i class=\"pi pi-spinner-dotted pi-spin \"></i>\n <span>{{'Loading Options'|translate}}...</span>\n </div>\n }\n }\n </ng-template>\n </p-multiSelect>\n <app-field-errors\n [customErrorMessages]=\"options()?.errorMessages || {}\"\n [controlName]=\"options()?.formControlName\"\n [errors]=\"getErrors()\"\n [errorMessage]=\"options().errorMessage || ''\"\n [showErrors]=\"(_formControl.dirty || _formControl.touched) && !loadingOptions\"></app-field-errors>\n</ng-template>\n\n <ng-template #emptyTemplate>\n <div class=\"text-center\">\n @if (loadingOptions) {\n <div>\n <p-progressSpinner styleClass=\"w-4rem h-4rem\"></p-progressSpinner>\n <p>{{'Loading Options'|translate}}</p>\n </div>\n } @else if (loadingError) {\n <div>\n <p>{{'Failed to load options.'|translate}}</p>\n <p-button\n label=\"Retry\"\n icon=\"pi pi-refresh\"\n (onClick)=\"getOptions()\"\n styleClass=\"p-button-outlined p-button-danger\" />\n </div>\n } @else {\n <p>\n {{'No Options Found'|translate}}\n </p>\n }\n </div>\n </ng-template>\n" }]
|
|
253
269
|
}], ctorParameters: () => [{ type: i1.LookupListService }], propDecorators: { field: [{
|
|
254
270
|
type: Input
|
|
255
271
|
}], handleChange: [{
|
|
@@ -260,4 +276,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImpor
|
|
|
260
276
|
type: ViewChild,
|
|
261
277
|
args: ['multiSelect']
|
|
262
278
|
}] } });
|
|
263
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtbXVsdGktc2VsZWN0L2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLW11bHRpLXNlbGVjdC9sb29rdXAtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7OztBQVlsRSxNQUFNLE9BQU8sMEJBQTBCO0lBOENyQyxZQUFvQixpQkFBb0M7UUFBcEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTdDeEQ7OztXQUdHO1FBQ0gsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQUNqQjs7O1dBR0c7UUFDSCxZQUFPLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBTyxDQUFDO1FBRWhDOzs7V0FHRztRQUNPLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVqRCxnQkFBVyxHQUFHLE1BQU0sRUFLaEIsQ0FBQztRQUVMLG1CQUFjLEdBQUcsSUFB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QUFXO1FBQ1QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNCLENBQUM7OEdBdlRVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLGtvQkN4QnZDLHduSUFrR0E7OzJGRDFFYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0UseUJBQXlCO3NGQWMxQixLQUFLO3NCQUFiLEtBQUs7Z0JBS0ksWUFBWTtzQkFBckIsTUFBTTtnQkFDRSxZQUFZO3NCQUFwQixLQUFLO2dCQTBCb0IsV0FBVztzQkFBcEMsU0FBUzt1QkFBQyxhQUFhIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBPbkluaXQsXG4gIElucHV0LFxuICBpbnB1dCxcbiAgY29tcHV0ZWQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBFdmVudEVtaXR0ZXIsXG4gIG91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Db250cm9sLCBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGZpbmFsaXplLCBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IExvb2t1cExpc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9sb29rdXAtbGlzdC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEtpdHNuZ0NvbnRyb2xGaWVsZE9wdGlvbnNNb2RlbCxcbiAgS2l0c25nRm9ybUZhY3RvcnlNb2RlbCxcbn0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMva2l0c25nLWZvcm0tZmFjdG9yeSc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdCB9IGZyb20gJ3ByaW1lbmcvbXVsdGlzZWxlY3QnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtbG9va3VwLW11bHRpLXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9sb29rdXAtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTG9va3VwTXVsdGlTZWxlY3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAvKipcbiAgICogKiBHZW5lcmFsXG4gICAqIEBlcnJvcnMgRm9ybSBjb250cm9sIGVycm9yc1xuICAgKi9cbiAgZXJyb3JzOiBhbnkgPSB7fTtcbiAgLyoqXG4gICAqICogSW5wdXRzXG4gICAqIEBvcHRpb25zIENvbmZpZ3VyYXRpb24gZm9yIHRoaXMgZm9ybSBmaWVsZFxuICAgKi9cbiAgb3B0aW9ucyA9IGlucHV0LnJlcXVpcmVkPGFueT4oKTtcbiAgQElucHV0KCkgZmllbGQ6IGFueTtcbiAgLyoqXG4gICAqICogT3V0cHV0c1xuICAgKiBAaGFuZGxlQ2hhbmdlIEV2ZW50IHdoZW4gaXRlbSBpbiBkcm9wZG93biBpcyBzZWxlY3RlZFxuICAgKi9cbiAgQE91dHB1dCgpIGhhbmRsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBASW5wdXQoKSBfZm9ybUNvbnRyb2whOiBGb3JtQ29udHJvbDxhbnk+O1xuICBtb2RlbENoYW5nZSA9IG91dHB1dDx7XG4gICAgZXZlbnQ6IGFueTtcbiAgICBwYXJlbnRGb3JtR3JvdXA/OiBGb3JtR3JvdXA8YW55PiB8IEZvcm1BcnJheTxhbnk+IHwgbnVsbDtcbiAgICBzZWxlY3RlZE9wdGlvbj86IGFueTtcbiAgICBmaWVsZD86IEtpdHNuZ0Zvcm1GYWN0b3J5TW9kZWw7XG4gIH0+KCk7XG5cbiAgbG9hZGluZ09wdGlvbnMgPSB0cnVlO1xuICBsb2FkaW5nRXJyb3IgPSBmYWxzZTtcblxuICBwYWdlSW5kZXggPSAxO1xuICB0b3RhbEl0ZW1zID0gMDtcbiAgYWxsVG90YWxJdGVtcyA9IDA7XG5cbiAgZmlsdGVyV29yZDogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgZmlyc3RUaW1lID0gdHJ1ZTtcbiAgdGVtcE9wdGlvbnM6IGFueVtdID0gW107XG4gIC8qKlxuICAgKiAqIFNlbGVjdGVkIG9wdGlvbnMgKGZ1bGwgb2JqZWN0cykgY29ycmVzcG9uZGluZyB0byB0aGUgY3VycmVudCBzZWxlY3RlZCB2YWx1ZXNcbiAgICovXG4gIHNlbGVjdGVkT3B0aW9uczogYW55W10gPSBbXTtcblxuICBwcml2YXRlIF9maWx0ZXJPcHRpb25zOiBTdWJqZWN0PHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+ID0gbmV3IFN1YmplY3QoKTtcbiAgZmlsdGVyT3B0aW9ucyQgPSB0aGlzLl9maWx0ZXJPcHRpb25zLmFzT2JzZXJ2YWJsZSgpO1xuXG4gIEBWaWV3Q2hpbGQoJ211bHRpU2VsZWN0JykgbXVsdGlTZWxlY3QhOiBNdWx0aVNlbGVjdDtcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBsb29rdXBMaXN0U2VydmljZTogTG9va3VwTGlzdFNlcnZpY2UpIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5vcHRpb25zKCkudmFsdWUgPSB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZTtcbiAgICB0aGlzLmdldE9wdGlvbnMoKTtcblxuICAgIHRoaXMuZmlsdGVyT3B0aW9ucyRcbiAgICAgIC5waXBlKGRlYm91bmNlVGltZSg1MDApLCB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChmaWx0ZXIpID0+IHtcbiAgICAgICAgdGhpcy5maWx0ZXJXb3JkID0gZmlsdGVyO1xuICAgICAgICB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgZ2V0RXJyb3JzKCkge1xuICAgIHJldHVybiB0aGlzLl9mb3JtQ29udHJvbC5lcnJvcnM7XG4gIH1cblxuICBuZ01vZGVsQ2hhbmdlKGV2ZW50OiBhbnkpIHtcbiAgICBsZXQgb3B0aW9uc0xpc3Q6IGFueVtdID0gW107XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9PSAnJyB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9PSBudWxsIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgb3B0aW9uc0xpc3QgPSBbXG4gICAgICAgIC4uLnRoaXMudGVtcE9wdGlvbnMsXG4gICAgICAgIC4uLnRoaXMub3B0aW9ucygpPy5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zTGlzdCA9IHRoaXMub3B0aW9ucygpPy5tdWx0aVNlbGVjdE9wdGlvbnM7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbnMgPSBldmVudD8ubWFwKChvcDogYW55KSA9PlxuICAgICAgb3B0aW9uc0xpc3QuZmluZChcbiAgICAgICAgKGNvOiBhbnkpID0+IGNvW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSBvcFxuICAgICAgKVxuICAgICk7XG5cbiAgICAvLyB1cGRhdGUgc2VsZWN0ZWRPcHRpb25zIHByb3BlcnR5IHdpdGggdGhlIGZ1bGwgb3B0aW9uIG9iamVjdHNcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IG9wdGlvbnMgPz8gW107XG5cbiAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoe1xuICAgICAgZXZlbnQ6IGV2ZW50LFxuICAgICAgcGFyZW50Rm9ybUdyb3VwOiB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICBzZWxlY3RlZE9wdGlvbjogb3B0aW9ucyxcbiAgICAgIGZpZWxkOiB0aGlzLmZpZWxkLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMub3B0aW9ucygpPy5uZ01vZGVsQ2hhbmdlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMoKT8ubmdNb2RlbENoYW5nZT8uKFxuICAgICAgICBldmVudCxcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wucGFyZW50IGFzIEZvcm1Hcm91cCxcbiAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgdGhpcy5maWVsZFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLm9uT3B0aW9uQ2hhbmdlKG9wdGlvbnMpO1xuICB9XG5cbiAgb25PcHRpb25DaGFuZ2UoZTogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMub3B0aW9ucygpPy5vbk9wdGlvblNlbGVjdGVkKSB7XG4gICAgICB0aGlzLm9wdGlvbnMoKT8ub25PcHRpb25TZWxlY3RlZD8uKGUpO1xuICAgIH1cbiAgfVxuXG4gIG11bHRpU2VsZWN0T3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpPy5tdWx0aVNlbGVjdE9wdGlvbnMgPz8gW10pO1xuXG4gIGdldE9wdGlvbnMoKSB7XG4gICAgdGhpcy5sb2FkaW5nT3B0aW9ucyA9IHRydWU7XG4gICAgdGhpcy5sb2FkaW5nRXJyb3IgPSBmYWxzZTtcblxuICAgIGxldCBxOiBhbnkgPSB7XG4gICAgICBwYWdlSW5kZXg6IHRoaXMucGFnZUluZGV4LFxuICAgICAgcGFnZVNpemU6IHRoaXMub3B0aW9ucygpPy5wYWdlU2l6ZSA/PyAxMDAsXG4gICAgICAuLi4odGhpcy5vcHRpb25zKCk/LnF1ZXJ5ID8/IHt9KSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuZmlsdGVyV29yZCkgcVsnc2VhcmNoJ10gPSB0aGlzLmZpbHRlcldvcmQ7XG5cbiAgICB0aGlzLmxvb2t1cExpc3RTZXJ2aWNlXG4gICAgICAuZ2V0TG9va3VwTGlzdHM8YW55PihcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmFwaUJhc2VVcmwhLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZW50aXR5ISxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHEsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tb2R1bGUsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy52ZXJzaW9uLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8ucGF0aCA/PyAncGFnZScsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tZW1vcnlDYWNoZSA/PyBmYWxzZVxuICAgICAgKVxuICAgICAgLnBpcGUoZmluYWxpemUoKCkgPT4gKHRoaXMubG9hZGluZ09wdGlvbnMgPSBmYWxzZSkpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IHJlc3BvbnNlPy5kYXRhPy5wYWdlSW5mbz8udG90YWxJdGVtcztcbiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyB8fCB0aGlzLnBhZ2VJbmRleCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zLnB1c2goXG4gICAgICAgICAgICAuLi4ocmVzcG9uc2UuZGF0YT8uaXRlbXM/Lm1hcCgoaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgICAgICAuLi5pdGVtLmt2LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkgPz8gW10pXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5sZW5ndGggPiAwICYmIHRoaXMuZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zKCk/LnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKHRoaXMub3B0aW9ucygpPy52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPSByZXNwb25zZT8uZGF0YT8ucGFnZUluZm8/LnRvdGFsSXRlbXM7XG4gICAgICAgICAgICB0aGlzLmZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSB0aGlzLmRlZHVwbGljYXRlKFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9uc1xuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2w/LnZhbHVlICYmXG4gICAgICAgICAgICAodGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVyV29yZCA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmVuc3VyZVNlbGVjdGVkT3B0aW9ucygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIXRoaXMuZmlsdGVyV29yZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoW1xuICAgICAgICAgICAgICAuLi50aGlzLnRlbXBPcHRpb25zLFxuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoW1xuICAgICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLnRoaXMuc2VsZWN0ZWRPcHRpb25zXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgb3B0aW9uczonLCBlcnIpO1xuICAgICAgICAgIHRoaXMubG9hZGluZ0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5tdWx0aVNlbGVjdD8ub3B0aW9ucykge1xuICAgICAgdGhpcy5tdWx0aVNlbGVjdC5vcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgIH1cbiAgfVxuICBlbnN1cmVTZWxlY3RlZE9wdGlvbnMoKSB7XG4gICAgY29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSB0aGlzLl9mb3JtQ29udHJvbC52YWx1ZSB8fCBbXTtcbiAgICBzZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWw6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5zb21lKFxuICAgICAgICAob3A6IGFueSkgPT4gb3BbdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IHZhbFxuICAgICAgKTtcbiAgICAgIGlmICghZXhpc3RzKSB7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uQnlJZCh2YWwpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHBvcHVsYXRlIHNlbGVjdGVkT3B0aW9ucyB3aXRoIGFueSBjdXJyZW50bHkgYXZhaWxhYmxlIGZ1bGwgb3B0aW9uIG9iamVjdHNcbiAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9IChzZWxlY3RlZFZhbHVlcyB8fCBbXSlcbiAgICAgIC5tYXAoKHZhbDogYW55KSA9PlxuICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgKG9wOiBhbnkpID0+IG9wW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSB2YWxcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLmZpbHRlcigobzogYW55KSA9PiAhIW8pO1xuICB9XG5cbiAgZ2V0T3B0aW9uQnlJZChpZDogYW55KSB7XG4gICAgdGhpcy5sb29rdXBMaXN0U2VydmljZVxuICAgICAgLmdldEJ5SWQoXG4gICAgICAgIGlkLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uZW50aXR5ISxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5hcGlCYXNlVXJsXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnZhbHVlLFxuICAgICAgICAgICAgICAuLi52YWx1ZS5rdixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAuLi50aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMsXG4gICAgICAgICAgXTtcbiAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgICAgICAgIC8vIHVwZGF0ZSBzZWxlY3RlZE9wdGlvbnMgaW4gY2FzZSB0aGlzIHdhcyBvbmUgb2YgdGhlIHNlbGVjdGVkIHZhbHVlc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gKHRoaXMuX2Zvcm1Db250cm9sPy52YWx1ZSB8fCBbXSlcbiAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PlxuICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/LmZpbmQoXG4gICAgICAgICAgICAgICAgKG9wOiBhbnkpID0+IG9wW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSB2YWxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmZpbHRlcigobzogYW55KSA9PiAhIW8pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIG9uRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmZpbHRlcldvcmQgPSBldmVudC5maWx0ZXI7XG4gICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucztcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuYWxsVG90YWxJdGVtcztcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPiB0aGlzLnRlbXBPcHRpb25zLmxlbmd0aCB8fFxuICAgICAgKCF0aGlzLmFsbFRvdGFsSXRlbXMgJiYgdGhpcy5vcHRpb25zKCkucGF0aCAhPT0gJ2FsbCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMubG9hZGluZ09wdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5uZXh0KHRoaXMuZmlsdGVyV29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleXdvcmQgPSAodGhpcy5maWx0ZXJXb3JkID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpbHRlckJ5ID0gdGhpcy5vcHRpb25zKCkuZmlsdGVyQnkgPz8gJ3RleHQnO1xuICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT57XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uPy5bZmlsdGVyQnldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKGtleXdvcmQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkZWR1cGxpY2F0ZShhcnI6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMub3B0aW9ucygpLm9wdGlvblZhbHVlID8/ICdpZCc7XG5cbiAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgIChpdGVtLCBpbmRleCwgc2VsZikgPT5cbiAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KCh0KSA9PiB0W2tleV0gPT09IGl0ZW1ba2V5XSlcbiAgICApO1xuICB9XG4gIHJlc2V0RmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSAnJyAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9ICcnO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRNb3JlKCkge1xuICAgIHRoaXMucGFnZUluZGV4Kys7XG4gICAgdGhpcy5nZXRPcHRpb25zKCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8YXBwLWZvcm0tZWxlbWVudC1sYXlvdXRcbiAgW29wdGlvbnNdPVwib3B0aW9ucygpXCJcbiAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgW2NvbnRyb2xUZW1wbGF0ZVJlZl09XCJjb250cm9sVGVtcGxhdGVcIlxuICBbZm9ybUNvbnRyb2xSZWZdPVwiX2Zvcm1Db250cm9sXCJcbj48L2FwcC1mb3JtLWVsZW1lbnQtbGF5b3V0PlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gIDxwLW11bHRpU2VsZWN0XG4gICAgI211bHRpU2VsZWN0XG4gICAgW29wdGlvbnNdPVwibXVsdGlTZWxlY3RPcHRpb25zKClcIlxuICAgIFtwbGFjZWhvbGRlcl09XCIob3B0aW9ucygpLnBsYWNlaG9sZGVyPz8nJykgfCB0cmFuc2xhdGVcIlxuICAgIFtmb3JtQ29udHJvbF09XCJfZm9ybUNvbnRyb2xcIlxuICAgIFtvcHRpb25MYWJlbF09XCJvcHRpb25zKCkub3B0aW9uTGFiZWwgPz8gJ3RleHQnXCJcbiAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9ucygpLm9wdGlvblZhbHVlID8/ICdpZCdcIlxuICAgIFtvcHRpb25Hcm91cExhYmVsXT1cIm9wdGlvbnMoKS5vcHRpb25Hcm91cExhYmVsID8/ICd0ZXh0J1wiXG4gICAgW29wdGlvbkdyb3VwQ2hpbGRyZW5dPVwib3B0aW9ucygpLm9wdGlvbkdyb3VwQ2hpbGRyZW4gPz8gJ2l0ZW1zJ1wiXG4gICAgW2dyb3VwXT1cIm9wdGlvbnMoKS5ncm91cCA/PyBmYWxzZVwiXG4gICAgc3R5bGVDbGFzcz1cInt7b3B0aW9ucygpLmNsYXNzID8/ICd3LWZ1bGwnfX1cIlxuICAgIFtzaG93Q2xlYXJdPVwib3B0aW9ucygpLnNob3dDbGVhciA/PyBmYWxzZVwiXG4gICAgW2FwcGVuZFRvXT1cIm9wdGlvbnMoKS5hcHBlbmRUbyA/PyAnYm9keSdcIlxuICAgIFtmaWx0ZXJdPVwib3B0aW9ucygpLmZpbHRlciA/PyBmYWxzZVwiXG4gICAgW2ZpbHRlckJ5XT1cIm9wdGlvbnMoKS5maWx0ZXJCeSA/PyAndGV4dCdcIlxuICAgIFthdXRvZm9jdXNGaWx0ZXJdPVwib3B0aW9ucygpLmF1dG9mb2N1c0ZpbHRlciA/PyB0cnVlXCJcbiAgICBbYXV0b2ZvY3VzXT1cIm9wdGlvbnMoKS5hdXRvZm9jdXMgPz8gZmFsc2VcIlxuICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcbiAgICAob25QYW5lbEhpZGUpPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgKG9uRmlsdGVyKT1cIm9uRmlsdGVyKCRldmVudClcIlxuICAgIFtyZWFkb25seV09XCJvcHRpb25zKCkucmVhZG9ubHkgPz8gZmFsc2VcIlxuICAgIFtzaG93VG9nZ2xlQWxsXT1cIm9wdGlvbnMoKS5zaG93VG9nZ2xlQWxsID8/IGZhbHNlXCJcbiAgICBbbmdDbGFzc109XCJ7J25nLWludmFsaWQgbmctZGlydHknOiAoX2Zvcm1Db250cm9sLmVycm9ycyAmJiAoX2Zvcm1Db250cm9sLmRpcnR5IHx8IF9mb3JtQ29udHJvbC50b3VjaGVkKSAmJiAhbG9hZGluZ09wdGlvbnMpID8/IGZhbHNlfVwiXG4gICAgW2Rpc3BsYXldPVwib3B0aW9ucygpLmRpc3BsYXkgPz8gJ2NoaXAnXCJcbiAgICAobmdNb2RlbENoYW5nZSk9XCJuZ01vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgID5cbiAgICAgICAgQGlmIChvcHRpb25zKCkuZmlsdGVyICYmIG9wdGlvbnMoKS5maWx0ZXJUZW1wbGF0ZSkge1xuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImZpbHRlclwiIGxldC1vcHRpb25zPVwib3B0aW9uc1wiPlxuICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJvcHRpb25zKCkuZmlsdGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBmaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sOiBfZm9ybUNvbnRyb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoOiBsb2FkTW9yZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwOiBfZm9ybUNvbnRyb2wucGFyZW50XG4gICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgfVxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJlbXB0eVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5VGVtcGxhdGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICBwVGVtcGxhdGU9XCJmb290ZXJcIj5cbiAgICAgICAgICAgIEBpZiAoIWxvYWRpbmdPcHRpb25zKSB7XG4gICAgICAgICAgICAgIEBpZiAodG90YWxJdGVtcyA+ICh0ZW1wT3B0aW9ucy5sZW5ndGggfHwgMCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgIDxwLWJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWxpbmtcIiBsYWJlbD1cIkxvYWQgTW9yZVwiIGljb249XCJwaSBwaS1zcGlubmVyXCIgKG9uQ2xpY2spPVwibG9hZE1vcmUoKVwiPjwvcC1idXR0b24+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICBAaWYgKCFmaXJzdFRpbWUgJiYgKChtdWx0aVNlbGVjdD8ub3B0aW9ucz8ubGVuZ3RoIHx8IDApID4gMCkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1jZW50ZXIgdGV4dC1wcmltYXJ5IGZ3LW1lZGl1bSBweS0zIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cInBpIHBpLXNwaW5uZXItZG90dGVkIHBpLXNwaW4gXCI+PC9pPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3snTG9hZGluZyBPcHRpb25zJ3x0cmFuc2xhdGV9fS4uLjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvcC1tdWx0aVNlbGVjdD5cbiAgPGFwcC1maWVsZC1lcnJvcnNcbiAgICBbY3VzdG9tRXJyb3JNZXNzYWdlc109XCJvcHRpb25zKCk/LmVycm9yTWVzc2FnZXMgfHwge31cIlxuICAgIFtjb250cm9sTmFtZV09XCJvcHRpb25zKCk/LmZvcm1Db250cm9sTmFtZVwiXG4gICAgW2Vycm9yc109XCJnZXRFcnJvcnMoKVwiXG4gICAgW2Vycm9yTWVzc2FnZV09XCJvcHRpb25zKCkuZXJyb3JNZXNzYWdlIHx8ICcnXCJcbiAgICBbc2hvd0Vycm9yc109XCIoX2Zvcm1Db250cm9sLmRpcnR5IHx8IF9mb3JtQ29udHJvbC50b3VjaGVkKSAmJiAhbG9hZGluZ09wdGlvbnNcIj48L2FwcC1maWVsZC1lcnJvcnM+XG48L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZW1wdHlUZW1wbGF0ZT5cbiAgICA8ZGl2IGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgIEBpZiAobG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cC1wcm9ncmVzc1NwaW5uZXIgc3R5bGVDbGFzcz1cInctNHJlbSBoLTRyZW1cIj48L3AtcHJvZ3Jlc3NTcGlubmVyPlxuICAgICAgICAgIDxwPnt7J0xvYWRpbmcgT3B0aW9ucyd8dHJhbnNsYXRlfX08L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSBpZiAobG9hZGluZ0Vycm9yKSB7XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgPHA+e3snRmFpbGVkIHRvIGxvYWQgb3B0aW9ucy4nfHRyYW5zbGF0ZX19PC9wPlxuICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgbGFiZWw9XCJSZXRyeVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktcmVmcmVzaFwiXG4gICAgICAgICAgICAob25DbGljayk9XCJnZXRPcHRpb25zKClcIlxuICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkIHAtYnV0dG9uLWRhbmdlclwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDxwPlxuICAgICAgICAgIHt7J05vIE9wdGlvbnMgRm91bmQnfHRyYW5zbGF0ZX19XG4gICAgICAgIDwvcD5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
279
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9va3VwLW11bHRpLXNlbGVjdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9raXRzbmctZm9ybS1mYWN0b3J5L3NyYy9saWIva2l0c25nLWZvcm0tZmFjdG9yeS9jb21wb25lbnRzL2tpdHNuZy1mb3JtLWZpZWxkcy9sb29rdXAtbXVsdGktc2VsZWN0L2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0c25nLWZvcm0tZmFjdG9yeS9zcmMvbGliL2tpdHNuZy1mb3JtLWZhY3RvcnkvY29tcG9uZW50cy9raXRzbmctZm9ybS1maWVsZHMvbG9va3VwLW11bHRpLXNlbGVjdC9sb29rdXAtbXVsdGktc2VsZWN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsS0FBSyxFQUNMLEtBQUssRUFDTCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFZbEUsTUFBTSxPQUFPLDBCQUEwQjtJQThDckMsWUFBb0IsaUJBQW9DO1FBQXBDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUE3Q3hEOzs7V0FHRztRQUNILFdBQU0sR0FBUSxFQUFFLENBQUM7UUFDakI7OztXQUdHO1FBQ0gsWUFBTyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQU8sQ0FBQztRQUVoQzs7O1dBR0c7UUFDTyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFFakQsZ0JBQVcsR0FBRyxNQUFNLEVBS2hCLENBQUM7UUFFTCxtQkFBYyxHQUFHLElB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QyxPQUFPLEVBQUUsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDO1FBRS9DLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FDZixDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FDcEIsS0FBSyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDeEQsQ0FBQztJQUNKLENBQUM7SUFDRCxXQUFXO1FBQ1QsSUFDRSxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUU7WUFDckIsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJO1lBQ3ZCLElBQUksQ0FBQyxVQUFVLElBQUksU0FBUyxFQUM1QixDQUFDO1lBQ0QsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUNELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzs4R0F2VVUsMEJBQTBCO2tHQUExQiwwQkFBMEIsa29CQ3hCdkMsdWdLQWtIQTs7MkZEMUZhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUI7c0ZBYzFCLEtBQUs7c0JBQWIsS0FBSztnQkFLSSxZQUFZO3NCQUFyQixNQUFNO2dCQUNFLFlBQVk7c0JBQXBCLEtBQUs7Z0JBMEJvQixXQUFXO3NCQUFwQyxTQUFTO3VCQUFDLGFBQWEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIE9uSW5pdCxcbiAgSW5wdXQsXG4gIGlucHV0LFxuICBjb21wdXRlZCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgb3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmluYWxpemUsIFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTG9va3VwTGlzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2VzL2xvb2t1cC1saXN0LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgS2l0c25nQ29udHJvbEZpZWxkT3B0aW9uc01vZGVsLFxuICBLaXRzbmdGb3JtRmFjdG9yeU1vZGVsLFxufSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9raXRzbmctZm9ybS1mYWN0b3J5JztcbmltcG9ydCB7IE11bHRpU2VsZWN0IH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1sb29rdXAtbXVsdGktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xvb2t1cC1tdWx0aS1zZWxlY3QuY29tcG9uZW50Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBMb29rdXBNdWx0aVNlbGVjdENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiAqIEdlbmVyYWxcbiAgICogQGVycm9ycyBGb3JtIGNvbnRyb2wgZXJyb3JzXG4gICAqL1xuICBlcnJvcnM6IGFueSA9IHt9O1xuICAvKipcbiAgICogKiBJbnB1dHNcbiAgICogQG9wdGlvbnMgQ29uZmlndXJhdGlvbiBmb3IgdGhpcyBmb3JtIGZpZWxkXG4gICAqL1xuICBvcHRpb25zID0gaW5wdXQucmVxdWlyZWQ8YW55PigpO1xuICBASW5wdXQoKSBmaWVsZDogYW55O1xuICAvKipcbiAgICogKiBPdXRwdXRzXG4gICAqIEBoYW5kbGVDaGFuZ2UgRXZlbnQgd2hlbiBpdGVtIGluIGRyb3Bkb3duIGlzIHNlbGVjdGVkXG4gICAqL1xuICBAT3V0cHV0KCkgaGFuZGxlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBJbnB1dCgpIF9mb3JtQ29udHJvbCE6IEZvcm1Db250cm9sPGFueT47XG4gIG1vZGVsQ2hhbmdlID0gb3V0cHV0PHtcbiAgICBldmVudDogYW55O1xuICAgIHBhcmVudEZvcm1Hcm91cD86IEZvcm1Hcm91cDxhbnk+IHwgRm9ybUFycmF5PGFueT4gfCBudWxsO1xuICAgIHNlbGVjdGVkT3B0aW9uPzogYW55O1xuICAgIGZpZWxkPzogS2l0c25nRm9ybUZhY3RvcnlNb2RlbDtcbiAgfT4oKTtcblxuICBsb2FkaW5nT3B0aW9ucyA9IHRydWU7XG4gIGxvYWRpbmdFcnJvciA9IGZhbHNlO1xuXG4gIHBhZ2VJbmRleCA9IDE7XG4gIHRvdGFsSXRlbXMgPSAwO1xuICBhbGxUb3RhbEl0ZW1zID0gMDtcblxuICBmaWx0ZXJXb3JkOiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBmaXJzdFRpbWUgPSB0cnVlO1xuICB0ZW1wT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqXG4gICAqICogU2VsZWN0ZWQgb3B0aW9ucyAoZnVsbCBvYmplY3RzKSBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IHNlbGVjdGVkIHZhbHVlc1xuICAgKi9cbiAgc2VsZWN0ZWRPcHRpb25zOiBhbnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgX2ZpbHRlck9wdGlvbnM6IFN1YmplY3Q8c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gPSBuZXcgU3ViamVjdCgpO1xuICBmaWx0ZXJPcHRpb25zJCA9IHRoaXMuX2ZpbHRlck9wdGlvbnMuYXNPYnNlcnZhYmxlKCk7XG5cbiAgQFZpZXdDaGlsZCgnbXVsdGlTZWxlY3QnKSBtdWx0aVNlbGVjdCE6IE11bHRpU2VsZWN0O1xuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGxvb2t1cExpc3RTZXJ2aWNlOiBMb29rdXBMaXN0U2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLm9wdGlvbnMoKS52YWx1ZSA9IHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlO1xuICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuXG4gICAgdGhpcy5maWx0ZXJPcHRpb25zJFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoKGZpbHRlcikgPT4ge1xuICAgICAgICB0aGlzLmZpbHRlcldvcmQgPSBmaWx0ZXI7XG4gICAgICAgIHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgICAgfSk7XG4gIH1cblxuICBnZXRFcnJvcnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1Db250cm9sLmVycm9ycztcbiAgfVxuXG4gIG5nTW9kZWxDaGFuZ2UoZXZlbnQ6IGFueSkge1xuICAgIGxldCBvcHRpb25zTGlzdDogYW55W10gPSBbXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT09ICcnIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgIT09IG51bGwgfHxcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICBvcHRpb25zTGlzdCA9IFtcbiAgICAgICAgLi4udGhpcy50ZW1wT3B0aW9ucyxcbiAgICAgICAgLi4udGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbnNMaXN0ID0gdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucztcbiAgICB9XG4gICAgY29uc3Qgb3B0aW9ucyA9IGV2ZW50Py5tYXAoKG9wOiBhbnkpID0+XG4gICAgICBvcHRpb25zTGlzdC5maW5kKFxuICAgICAgICAoY286IGFueSkgPT4gY29bdGhpcy5vcHRpb25zKCk/Lm9wdGlvblZhbHVlID8/ICdpZCddID09IG9wXG4gICAgICApXG4gICAgKTtcblxuICAgIC8vIHVwZGF0ZSBzZWxlY3RlZE9wdGlvbnMgcHJvcGVydHkgd2l0aCB0aGUgZnVsbCBvcHRpb24gb2JqZWN0c1xuICAgIHRoaXMuc2VsZWN0ZWRPcHRpb25zID0gb3B0aW9ucyA/PyBbXTtcblxuICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh7XG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICBwYXJlbnRGb3JtR3JvdXA6IHRoaXMuX2Zvcm1Db250cm9sLnBhcmVudCxcbiAgICAgIHNlbGVjdGVkT3B0aW9uOiBvcHRpb25zLFxuICAgICAgZmllbGQ6IHRoaXMuZmllbGQsXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5vcHRpb25zKCk/Lm5nTW9kZWxDaGFuZ2UpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5uZ01vZGVsQ2hhbmdlPy4oXG4gICAgICAgIGV2ZW50LFxuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5wYXJlbnQgYXMgRm9ybUdyb3VwLFxuICAgICAgICBvcHRpb25zLFxuICAgICAgICB0aGlzLmZpZWxkXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMub25PcHRpb25DaGFuZ2Uob3B0aW9ucyk7XG4gIH1cblxuICBvbk9wdGlvbkNoYW5nZShlOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5vcHRpb25zKCk/Lm9uT3B0aW9uU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMub3B0aW9ucygpPy5vbk9wdGlvblNlbGVjdGVkPy4oZSk7XG4gICAgfVxuICB9XG5cbiAgbXVsdGlTZWxlY3RPcHRpb25zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5vcHRpb25zKCk/Lm11bHRpU2VsZWN0T3B0aW9ucyA/PyBbXSk7XG5cbiAgZ2V0T3B0aW9ucygpIHtcbiAgICB0aGlzLmxvYWRpbmdPcHRpb25zID0gdHJ1ZTtcbiAgICB0aGlzLmxvYWRpbmdFcnJvciA9IGZhbHNlO1xuXG4gICAgbGV0IHE6IGFueSA9IHtcbiAgICAgIHBhZ2VJbmRleDogdGhpcy5wYWdlSW5kZXgsXG4gICAgICBwYWdlU2l6ZTogdGhpcy5vcHRpb25zKCk/LnBhZ2VTaXplID8/IDEwMCxcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMoKT8ucXVlcnkgPz8ge30pLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5maWx0ZXJXb3JkKSBxWydzZWFyY2gnXSA9IHRoaXMuZmlsdGVyV29yZDtcblxuICAgIHRoaXMubG9va3VwTGlzdFNlcnZpY2VcbiAgICAgIC5nZXRMb29rdXBMaXN0czxhbnk+KFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybCEsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5lbnRpdHkhLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgcSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1vZHVsZSxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LnZlcnNpb24sXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5wYXRoID8/ICdwYWdlJyxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/Lm1lbW9yeUNhY2hlID8/IGZhbHNlXG4gICAgICApXG4gICAgICAucGlwZShmaW5hbGl6ZSgoKSA9PiAodGhpcy5sb2FkaW5nT3B0aW9ucyA9IGZhbHNlKSkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gcmVzcG9uc2U/LmRhdGE/LnBhZ2VJbmZvPy50b3RhbEl0ZW1zO1xuICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zIHx8IHRoaXMucGFnZUluZGV4ID09IDEpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IFtdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMucHVzaChcbiAgICAgICAgICAgIC4uLihyZXNwb25zZS5kYXRhPy5pdGVtcz8ubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgICAgIC4uLml0ZW0ua3YsXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSA/PyBbXSlcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM/Lmxlbmd0aCA+IDAgJiYgdGhpcy5maXJzdFRpbWUpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMoKT8udmFsdWUpIHtcbiAgICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zKCk/LnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWxsVG90YWxJdGVtcyA9IHJlc3BvbnNlPy5kYXRhPy5wYWdlSW5mbz8udG90YWxJdGVtcztcbiAgICAgICAgICAgIHRoaXMuZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyA9IHRoaXMuZGVkdXBsaWNhdGUoXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMoKT8ubXVsdGlTZWxlY3RPcHRpb25zXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLl9mb3JtQ29udHJvbD8udmFsdWUgJiZcbiAgICAgICAgICAgICh0aGlzLmZpbHRlcldvcmQgPT0gJycgfHxcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJXb3JkID09IG51bGwgfHxcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJXb3JkID09IHVuZGVmaW5lZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMuZW5zdXJlU2VsZWN0ZWRPcHRpb25zKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghdGhpcy5maWx0ZXJXb3JkKSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRlbXBPcHRpb25zID0gdGhpcy5kZWR1cGxpY2F0ZShbXG4gICAgICAgICAgICAgIC4uLnRoaXMudGVtcE9wdGlvbnMsXG4gICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy5kZWR1cGxpY2F0ZShbXG4gICAgICAgICAgICAgIC4uLnRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4udGhpcy5zZWxlY3RlZE9wdGlvbnNcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBvcHRpb25zOicsIGVycik7XG4gICAgICAgICAgdGhpcy5sb2FkaW5nRXJyb3IgPSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICB1cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCkge1xuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0Py5vcHRpb25zKSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0Lm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnM7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlTZWxlY3QgJiYgdGhpcy5tdWx0aVNlbGVjdC5vcHRpb25zICYmIHRoaXMubXVsdGlTZWxlY3Qub3B0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgZmlyc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpZiAodHlwZW9mICh0aGlzLm11bHRpU2VsZWN0IGFzIGFueSkuZmluZEZpcnN0Rm9jdXNlZE9wdGlvbkluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICBmaXJzdEluZGV4ID0gKHRoaXMubXVsdGlTZWxlY3QgYXMgYW55KS5maW5kRmlyc3RGb2N1c2VkT3B0aW9uSW5kZXgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm11bHRpU2VsZWN0LmZvY3VzZWRPcHRpb25JbmRleCkge1xuICAgICAgICAgICAgICAgdGhpcy5tdWx0aVNlbGVjdC5mb2N1c2VkT3B0aW9uSW5kZXguc2V0KGZpcnN0SW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgZW5zdXJlU2VsZWN0ZWRPcHRpb25zKCkge1xuICAgIGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgfHwgW107XG4gICAgc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgodmFsOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucz8uc29tZShcbiAgICAgICAgKG9wOiBhbnkpID0+IG9wW3RoaXMub3B0aW9ucygpPy5vcHRpb25WYWx1ZSA/PyAnaWQnXSA9PSB2YWxcbiAgICAgICk7XG4gICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICB0aGlzLmdldE9wdGlvbkJ5SWQodmFsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBwb3B1bGF0ZSBzZWxlY3RlZE9wdGlvbnMgd2l0aCBhbnkgY3VycmVudGx5IGF2YWlsYWJsZSBmdWxsIG9wdGlvbiBvYmplY3RzXG4gICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMgPSAoc2VsZWN0ZWRWYWx1ZXMgfHwgW10pXG4gICAgICAubWFwKCh2YWw6IGFueSkgPT5cbiAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5maW5kKFxuICAgICAgICAgIChvcDogYW55KSA9PiBvcFt0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT0gdmFsXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIC5maWx0ZXIoKG86IGFueSkgPT4gISFvKTtcbiAgfVxuXG4gIGdldE9wdGlvbkJ5SWQoaWQ6IGFueSkge1xuICAgIHRoaXMubG9va3VwTGlzdFNlcnZpY2VcbiAgICAgIC5nZXRCeUlkKFxuICAgICAgICBpZCxcbiAgICAgICAgdGhpcy5vcHRpb25zKCk/LmVudGl0eSEsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy5tb2R1bGUsXG4gICAgICAgIHRoaXMub3B0aW9ucygpPy52ZXJzaW9uLFxuICAgICAgICB0aGlzLm9wdGlvbnMoKT8uYXBpQmFzZVVybFxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi52YWx1ZSxcbiAgICAgICAgICAgICAgLi4udmFsdWUua3YsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4udGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zLFxuICAgICAgICAgIF07XG4gICAgICAgICAgdGhpcy51cGRhdGVPdmVybGF5RHJvcGRvd25vcHRpb25zKCk7XG4gICAgICAgICAgdGhpcy50ZW1wT3B0aW9ucyA9IHRoaXMub3B0aW9ucygpLm11bHRpU2VsZWN0T3B0aW9ucztcbiAgICAgICAgICAvLyB1cGRhdGUgc2VsZWN0ZWRPcHRpb25zIGluIGNhc2UgdGhpcyB3YXMgb25lIG9mIHRoZSBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucyA9ICh0aGlzLl9mb3JtQ29udHJvbD8udmFsdWUgfHwgW10pXG4gICAgICAgICAgICAubWFwKCh2YWw6IGFueSkgPT5cbiAgICAgICAgICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zPy5maW5kKFxuICAgICAgICAgICAgICAgIChvcDogYW55KSA9PiBvcFt0aGlzLm9wdGlvbnMoKT8ub3B0aW9uVmFsdWUgPz8gJ2lkJ10gPT0gdmFsXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5maWx0ZXIoKG86IGFueSkgPT4gISFvKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBmaWx0ZXJPcHRpb25zKCkge1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCkge1xuICAgIGlmICh0aGlzLm11bHRpU2VsZWN0KSB7XG4gICAgICB0aGlzLm11bHRpU2VsZWN0Lm9uRmlsdGVyS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlGaWx0ZXIoKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09ICcnIHx8XG4gICAgICB0aGlzLmZpbHRlcldvcmQgPT0gbnVsbCB8fFxuICAgICAgdGhpcy5maWx0ZXJXb3JkID09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucztcbiAgICAgIHRoaXMudG90YWxJdGVtcyA9IHRoaXMuYWxsVG90YWxJdGVtcztcbiAgICAgIHRoaXMudXBkYXRlT3ZlcmxheURyb3Bkb3dub3B0aW9ucygpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLmFsbFRvdGFsSXRlbXMgPiB0aGlzLnRlbXBPcHRpb25zLmxlbmd0aCB8fFxuICAgICAgKCF0aGlzLmFsbFRvdGFsSXRlbXMgJiYgdGhpcy5vcHRpb25zKCkucGF0aCAhPT0gJ2FsbCcpXG4gICAgKSB7XG4gICAgICB0aGlzLnBhZ2VJbmRleCA9IDE7XG4gICAgICB0aGlzLm9wdGlvbnMoKS5tdWx0aVNlbGVjdE9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMubG9hZGluZ09wdGlvbnMgPSB0cnVlO1xuICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5uZXh0KHRoaXMuZmlsdGVyV29yZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGtleXdvcmQgPSAodGhpcy5maWx0ZXJXb3JkID8/ICcnKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGZpbHRlckJ5ID0gdGhpcy5vcHRpb25zKCkuZmlsdGVyQnkgPz8gJ3RleHQnO1xuICAgICAgdGhpcy5vcHRpb25zKCkubXVsdGlTZWxlY3RPcHRpb25zID0gdGhpcy50ZW1wT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT57XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uPy5bZmlsdGVyQnldO1xuICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpXG4gICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgLmluY2x1ZGVzKGtleXdvcmQpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwZGF0ZU92ZXJsYXlEcm9wZG93bm9wdGlvbnMoKTtcbiAgICB9XG4gIH1cbiAgcHJpdmF0ZSBkZWR1cGxpY2F0ZShhcnI6IGFueVtdKTogYW55W10ge1xuICAgIGNvbnN0IGtleSA9IHRoaXMub3B0aW9ucygpLm9wdGlvblZhbHVlID8/ICdpZCc7XG5cbiAgICByZXR1cm4gYXJyLmZpbHRlcihcbiAgICAgIChpdGVtLCBpbmRleCwgc2VsZikgPT5cbiAgICAgICAgaW5kZXggPT09IHNlbGYuZmluZEluZGV4KCh0KSA9PiB0W2tleV0gPT09IGl0ZW1ba2V5XSlcbiAgICApO1xuICB9XG4gIHJlc2V0RmlsdGVyKCkge1xuICAgIGlmIChcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSAnJyAmJlxuICAgICAgdGhpcy5maWx0ZXJXb3JkICE9IG51bGwgJiZcbiAgICAgIHRoaXMuZmlsdGVyV29yZCAhPSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIHRoaXMuZmlsdGVyV29yZCA9ICcnO1xuICAgICAgdGhpcy5hcHBseUZpbHRlcigpO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRNb3JlKCkge1xuICAgIHRoaXMucGFnZUluZGV4Kys7XG4gICAgdGhpcy5nZXRPcHRpb25zKCk7XG4gIH1cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG59XG4iLCI8YXBwLWZvcm0tZWxlbWVudC1sYXlvdXRcbiAgW29wdGlvbnNdPVwib3B0aW9ucygpXCJcbiAgW2ZpZWxkXT1cImZpZWxkXCJcbiAgW2NvbnRyb2xUZW1wbGF0ZVJlZl09XCJjb250cm9sVGVtcGxhdGVcIlxuICBbZm9ybUNvbnRyb2xSZWZdPVwiX2Zvcm1Db250cm9sXCJcbj48L2FwcC1mb3JtLWVsZW1lbnQtbGF5b3V0PlxuPG5nLXRlbXBsYXRlICNjb250cm9sVGVtcGxhdGU+XG4gIDxwLW11bHRpU2VsZWN0XG4gICAgI211bHRpU2VsZWN0XG4gICAgW29wdGlvbnNdPVwibXVsdGlTZWxlY3RPcHRpb25zKClcIlxuICAgIFtwbGFjZWhvbGRlcl09XCIob3B0aW9ucygpLnBsYWNlaG9sZGVyPz8nJykgfCB0cmFuc2xhdGVcIlxuICAgIFtmb3JtQ29udHJvbF09XCJfZm9ybUNvbnRyb2xcIlxuICAgIFtvcHRpb25MYWJlbF09XCJvcHRpb25zKCkub3B0aW9uTGFiZWwgPz8gJ3RleHQnXCJcbiAgICBbb3B0aW9uVmFsdWVdPVwib3B0aW9ucygpLm9wdGlvblZhbHVlID8/ICdpZCdcIlxuICAgIFtvcHRpb25Hcm91cExhYmVsXT1cIm9wdGlvbnMoKS5vcHRpb25Hcm91cExhYmVsID8/ICd0ZXh0J1wiXG4gICAgW29wdGlvbkdyb3VwQ2hpbGRyZW5dPVwib3B0aW9ucygpLm9wdGlvbkdyb3VwQ2hpbGRyZW4gPz8gJ2l0ZW1zJ1wiXG4gICAgW2dyb3VwXT1cIm9wdGlvbnMoKS5ncm91cCA/PyBmYWxzZVwiXG4gICAgc3R5bGVDbGFzcz1cInt7b3B0aW9ucygpLmNsYXNzID8/ICd3LWZ1bGwnfX1cIlxuICAgIFtzaG93Q2xlYXJdPVwib3B0aW9ucygpLnNob3dDbGVhciA/PyBmYWxzZVwiXG4gICAgW2FwcGVuZFRvXT1cIm9wdGlvbnMoKS5hcHBlbmRUbyA/PyAnYm9keSdcIlxuICAgIFtmaWx0ZXJdPVwib3B0aW9ucygpLmZpbHRlciA/PyBmYWxzZVwiXG4gICAgW2ZpbHRlckJ5XT1cIm9wdGlvbnMoKS5maWx0ZXJCeSA/PyAndGV4dCdcIlxuICAgIFthdXRvZm9jdXNGaWx0ZXJdPVwib3B0aW9ucygpLmF1dG9mb2N1c0ZpbHRlciA/PyB0cnVlXCJcbiAgICBbYXV0b2ZvY3VzXT1cIm9wdGlvbnMoKS5hdXRvZm9jdXMgPz8gZmFsc2VcIlxuICAgIFtyZXNldEZpbHRlck9uSGlkZV09XCJ0cnVlXCJcbiAgICAob25QYW5lbEhpZGUpPVwicmVzZXRGaWx0ZXIoKVwiXG4gICAgW3JlYWRvbmx5XT1cIm9wdGlvbnMoKS5yZWFkb25seSA/PyBmYWxzZVwiXG4gICAgW3Nob3dUb2dnbGVBbGxdPVwib3B0aW9ucygpLnNob3dUb2dnbGVBbGwgPz8gZmFsc2VcIlxuICAgIFtuZ0NsYXNzXT1cInsnbmctaW52YWxpZCBuZy1kaXJ0eSc6IChfZm9ybUNvbnRyb2wuZXJyb3JzICYmIChfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpICYmICFsb2FkaW5nT3B0aW9ucykgPz8gZmFsc2V9XCJcbiAgICBbZGlzcGxheV09XCJvcHRpb25zKCkuZGlzcGxheSA/PyAnY2hpcCdcIlxuICAgIChuZ01vZGVsQ2hhbmdlKT1cIm5nTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICBAaWYgKG9wdGlvbnMoKS5maWx0ZXIpIHtcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU9XCJmaWx0ZXJcIiBsZXQtb3B0aW9ucz1cIm9wdGlvbnNcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwib3B0aW9ucygpLmZpbHRlclRlbXBsYXRlOyBlbHNlIGRlZmF1bHRGaWx0ZXJUZW1wbGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbnMoKS5maWx0ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2w6IF9mb3JtQ29udHJvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zKCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaDogbG9hZE1vcmUuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXA6IF9mb3JtQ29udHJvbC5wYXJlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRlbXBsYXRlOiBkZWZhdWx0RmlsdGVyVGVtcGxhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cIj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRGaWx0ZXJUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLWlucHV0Z3JvdXBcIiBzdHlsZT1cIndpZHRoOiAxMDAlO1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInAtaW5wdXRncm91cC1hZGRvblwiPjxpIGNsYXNzPVwicGkgcGktc2VhcmNoXCI+PC9pPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgIFthdXRvZm9jdXNdPVwib3B0aW9ucygpLmF1dG9mb2N1c0ZpbHRlciA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBJdGVtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImZpbHRlcldvcmRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7c3RhbmRhbG9uZTogdHJ1ZX1cIlxuICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlck9wdGlvbnMoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICB9XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT1cImVtcHR5XCI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiZW1wdHlUZW1wbGF0ZVwiPjwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgIHBUZW1wbGF0ZT1cImZvb3RlclwiPlxuICAgICAgICAgICAgQGlmICghbG9hZGluZ09wdGlvbnMpIHtcbiAgICAgICAgICAgICAgQGlmICh0b3RhbEl0ZW1zID4gKHRlbXBPcHRpb25zLmxlbmd0aCB8fCAwKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgPHAtYnV0dG9uIHR5cGU9XCJidXR0b25cIiBzdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tbGlua1wiIGxhYmVsPVwiTG9hZCBNb3JlXCIgaWNvbj1cInBpIHBpLXNwaW5uZXJcIiAob25DbGljayk9XCJsb2FkTW9yZSgpXCI+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgIEBpZiAoIWZpcnN0VGltZSAmJiAoKG11bHRpU2VsZWN0Py5vcHRpb25zPy5sZW5ndGggfHwgMCkgPiAwKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIganVzdGlmeS1jb250ZW50LWNlbnRlciB0ZXh0LXByaW1hcnkgZnctbWVkaXVtIHB5LTMgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwicGkgcGktc3Bpbm5lci1kb3R0ZWQgcGktc3BpbiBcIj48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57eydMb2FkaW5nIE9wdGlvbnMnfHRyYW5zbGF0ZX19Li4uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9wLW11bHRpU2VsZWN0PlxuICA8YXBwLWZpZWxkLWVycm9yc1xuICAgIFtjdXN0b21FcnJvck1lc3NhZ2VzXT1cIm9wdGlvbnMoKT8uZXJyb3JNZXNzYWdlcyB8fCB7fVwiXG4gICAgW2NvbnRyb2xOYW1lXT1cIm9wdGlvbnMoKT8uZm9ybUNvbnRyb2xOYW1lXCJcbiAgICBbZXJyb3JzXT1cImdldEVycm9ycygpXCJcbiAgICBbZXJyb3JNZXNzYWdlXT1cIm9wdGlvbnMoKS5lcnJvck1lc3NhZ2UgfHwgJydcIlxuICAgIFtzaG93RXJyb3JzXT1cIihfZm9ybUNvbnRyb2wuZGlydHkgfHwgX2Zvcm1Db250cm9sLnRvdWNoZWQpICYmICFsb2FkaW5nT3B0aW9uc1wiPjwvYXBwLWZpZWxkLWVycm9ycz5cbjwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNlbXB0eVRlbXBsYXRlPlxuICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgQGlmIChsb2FkaW5nT3B0aW9ucykge1xuICAgICAgICA8ZGl2PlxuICAgICAgICAgIDxwLXByb2dyZXNzU3Bpbm5lciBzdHlsZUNsYXNzPVwidy00cmVtIGgtNHJlbVwiPjwvcC1wcm9ncmVzc1NwaW5uZXI+XG4gICAgICAgICAgPHA+e3snTG9hZGluZyBPcHRpb25zJ3x0cmFuc2xhdGV9fTwvcD5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIGlmIChsb2FkaW5nRXJyb3IpIHtcbiAgICAgICAgPGRpdj5cbiAgICAgICAgICA8cD57eydGYWlsZWQgdG8gbG9hZCBvcHRpb25zLid8dHJhbnNsYXRlfX08L3A+XG4gICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBsYWJlbD1cIlJldHJ5XCJcbiAgICAgICAgICAgIGljb249XCJwaSBwaS1yZWZyZXNoXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImdldE9wdGlvbnMoKVwiXG4gICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b24tb3V0bGluZWQgcC1idXR0b24tZGFuZ2VyXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgPHA+XG4gICAgICAgICAge3snTm8gT3B0aW9ucyBGb3VuZCd8dHJhbnNsYXRlfX1cbiAgICAgICAgPC9wPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L25nLXRlbXBsYXRlPlxuIl19
|