@sumaris-net/ngx-components 18.7.4-rc4 → 18.7.4
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/doc/changelog.md +2 -1
- package/esm2022/src/app/admin/users/users.mjs +2 -2
- package/esm2022/src/app/core/account/new-token.form.mjs +1 -1
- package/esm2022/src/app/core/account/token.table.mjs +1 -1
- package/esm2022/src/app/core/form/properties/properties.table.mjs +3 -3
- package/esm2022/src/app/core/table/column/actions-column.component.mjs +7 -7
- package/esm2022/src/app/core/table/testing/table2.testing.mjs +3 -3
- package/esm2022/src/app/shared/form/field.component.mjs +1 -1
- package/esm2022/src/app/shared/material/chips/material.chips.mjs +14 -6
- package/esm2022/src/app/shared/material/chips/testing/chips.test.mjs +5 -3
- package/esm2022/src/app/shared/material/duration/material.duration.mjs +11 -7
- package/esm2022/src/app/shared/material/swipe/material.swipe.mjs +6 -5
- package/esm2022/src/app/social/message/message.form.mjs +1 -1
- package/fesm2022/sumaris-net.ngx-components.mjs +44 -30
- package/fesm2022/sumaris-net.ngx-components.mjs.map +1 -1
- package/package.json +1 -1
- package/src/app/core/table/column/actions-column.component.d.ts +3 -3
- package/src/app/shared/material/chips/material.chips.d.ts +5 -2
- package/src/app/shared/material/duration/material.duration.d.ts +4 -0
- package/src/app/shared/material/swipe/material.swipe.d.ts +1 -0
- package/src/assets/manifest.json +1 -1
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Component } from '@angular/core';
|
|
2
|
+
import { Validators } from '@angular/forms';
|
|
2
3
|
import { BehaviorSubject } from 'rxjs';
|
|
3
4
|
import { SharedValidators } from '../../../validator/validators';
|
|
4
5
|
import { isNil, isNotNil, sleep } from '../../../functions';
|
|
@@ -55,6 +56,7 @@ export class ChipsTestPage {
|
|
|
55
56
|
entityInitial: [null, SharedValidators.entity],
|
|
56
57
|
disableEntity: [null, SharedValidators.entity],
|
|
57
58
|
farEntity: [null, SharedValidators.entity],
|
|
59
|
+
requiredEntity: [null, Validators.compose([Validators.required, SharedValidators.entity])],
|
|
58
60
|
});
|
|
59
61
|
this.form.get('disableEntity').disable();
|
|
60
62
|
}
|
|
@@ -138,10 +140,10 @@ export class ChipsTestPage {
|
|
|
138
140
|
return JSON.stringify(value);
|
|
139
141
|
}
|
|
140
142
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChipsTestPage, deps: [{ token: i1.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
|
|
141
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChipsTestPage, selector: "app-chips-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Chips field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"12\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">Suggest() function</ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"A chip field\"\n [appearance]=\"appearance\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [logPrefix]=\"'[mat-chips-empty] '\"\n chipColor=\"accent\"\n [debug]=\"true\"\n ></mat-chips-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>Another field</mat-label>\n <input matInput type=\"text\" />\n </mat-form-field>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n {{ form.controls.entity.value | json }}\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest() function with initial value</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entityInitial\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n placeholder=\"A suggestFn field\"\n [logPrefix]=\"'[mat-chips-initialized] '\"\n chipColor=\"primary\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entityInitial.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A disabled field\"\n [logPrefix]=\"'[mat-chips-disabled] '\"\n chipColor=\"warn\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.disableEntity.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Readonly control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A readonly field\"\n [logPrefix]=\"'[mat-chips-readonly] '\"\n [readonly]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest with length threshold</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>\n suggest: (value, filter) => LoadResult<any>\n suggestLengthThreshold: '3'</pre\n >\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"Entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n [suggestLengthThreshold]=\"3\"\n [logPrefix]=\"'[mat-chips-suggestLengthThreshold] '\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatChipsField, selector: "mat-chips-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "mobile", "readonly", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "itemSize", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "chipColor", "debug", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "class", "filter", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keyup.enter"] }, { kind: "pipe", type: i6.JsonPipe, name: "json" }] });
|
|
143
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChipsTestPage, selector: "app-chips-test", ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Chips field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">Suggest() function</ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"A chip field\"\n [appearance]=\"appearance\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [logPrefix]=\"'[mat-chips-empty] '\"\n chipColor=\"accent\"\n [debug]=\"true\"\n ></mat-chips-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>Another field</mat-label>\n <input matInput type=\"text\" />\n </mat-form-field>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n {{ form.controls.entity.value | json }}\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">Required</ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>required: true</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-chips-field\n formControlName=\"requiredEntity\"\n placeholder=\"A required chip field\"\n [appearance]=\"appearance\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[mat-chips-required] '\"\n chipColor=\"accent\"\n required\n [debug]=\"true\"\n ></mat-chips-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>Another required field</mat-label>\n <input matInput type=\"text\" required />\n </mat-form-field>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n {{ form.controls.entity.value | json }}\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest() function with initial value</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entityInitial\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n placeholder=\"A suggestFn field\"\n [logPrefix]=\"'[mat-chips-initialized] '\"\n chipColor=\"primary\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entityInitial.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A disabled field\"\n [logPrefix]=\"'[mat-chips-disabled] '\"\n chipColor=\"warn\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.disableEntity.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Readonly control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A readonly field\"\n [logPrefix]=\"'[mat-chips-readonly] '\"\n [readonly]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest with length threshold</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>\n suggest: (value, filter) => LoadResult<any>\n suggestLengthThreshold: '3'</pre\n >\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"Entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n [suggestLengthThreshold]=\"3\"\n [logPrefix]=\"'[mat-chips-suggestLengthThreshold] '\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n", dependencies: [{ kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardSubtitle, selector: "ion-card-subtitle", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonBackButton, selector: "ion-back-button" }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i3.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i3.MatLabel, selector: "mat-label" }, { kind: "directive", type: i4.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i5.MatChipsField, selector: "mat-chips-field", inputs: ["equals", "logPrefix", "formControl", "formControlName", "floatLabel", "appearance", "subscriptSizing", "placeholder", "suggestFn", "required", "mobile", "readonly", "clearable", "debounceTime", "displaySeparator", "displayWith", "displayAttributes", "displayColumnSizes", "displayColumnNames", "highlightAccent", "showAllOnFocus", "showPanelOnFocus", "autofocus", "config", "i18nPrefix", "noResultMessage", "panelClass", "panelWidth", "disableRipple", "matAutocompletePosition", "itemSize", "fetchMoreThreshold", "suggestLengthThreshold", "showLoadingSpinner", "chipColor", "debug", "applyImplicitValue", "dropButtonTitle", "clearButtonTitle", "trimSearchText", "hideRequiredMarker", "class", "filter", "tabindex", "items"], outputs: ["click", "blur", "focus", "dropButtonClick", "keydown.escape", "keyup.enter"] }, { kind: "pipe", type: i6.JsonPipe, name: "json" }] });
|
|
142
144
|
}
|
|
143
145
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChipsTestPage, decorators: [{
|
|
144
146
|
type: Component,
|
|
145
|
-
args: [{ selector: 'app-chips-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Chips field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"
|
|
147
|
+
args: [{ selector: 'app-chips-test', template: "<ion-header>\n <ion-toolbar color=\"primary\">\n <ion-buttons slot=\"start\">\n <ion-back-button></ion-back-button>\n </ion-buttons>\n\n <ion-title>Chips field test page</ion-title>\n </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n <form class=\"form-container\" [formGroup]=\"form\" (ngSubmit)=\"doSubmit($event)\">\n <ion-grid>\n <ion-row>\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">Suggest() function</ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"A chip field\"\n [appearance]=\"appearance\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [logPrefix]=\"'[mat-chips-empty] '\"\n chipColor=\"accent\"\n [debug]=\"true\"\n ></mat-chips-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>Another field</mat-label>\n <input matInput type=\"text\" />\n </mat-form-field>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n {{ form.controls.entity.value | json }}\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col size=\"6\">\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-text color=\"primary\">Required</ion-text>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>required: true</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <ion-grid class=\"ion-no-padding\">\n <ion-row>\n <ion-col>\n <mat-chips-field\n formControlName=\"requiredEntity\"\n placeholder=\"A required chip field\"\n [appearance]=\"appearance\"\n [config]=\"autocompleteFields.get('entity-items')\"\n [logPrefix]=\"'[mat-chips-required] '\"\n chipColor=\"accent\"\n required\n [debug]=\"true\"\n ></mat-chips-field>\n </ion-col>\n\n <ion-col>\n <mat-form-field [appearance]=\"appearance\">\n <mat-label>Another required field</mat-label>\n <input matInput type=\"text\" required />\n </mat-form-field>\n </ion-col>\n </ion-row>\n <ion-row>\n <ion-col>\n {{ form.controls.entity.value | json }}\n </ion-col>\n </ion-row>\n </ion-grid>\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest() function with initial value</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <pre><small>suggestFn: (searchText, filter) => any[]</small></pre>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entityInitial\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n placeholder=\"A suggestFn field\"\n [logPrefix]=\"'[mat-chips-initialized] '\"\n chipColor=\"primary\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entityInitial.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Disabled control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"disableEntity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A disabled field\"\n [logPrefix]=\"'[mat-chips-disabled] '\"\n chipColor=\"warn\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.disableEntity.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Readonly control</ion-label>\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n placeholder=\"A readonly field\"\n [logPrefix]=\"'[mat-chips-readonly] '\"\n [readonly]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n\n <ion-col>\n <ion-card>\n <ion-card-header>\n <ion-card-title>\n <ion-label color=\"primary\">Suggest with length threshold</ion-label>\n </ion-card-title>\n <ion-card-subtitle>\n <ion-text color=\"medium\">\n <small>\n <pre>\n suggest: (value, filter) => LoadResult<any>\n suggestLengthThreshold: '3'</pre\n >\n </small>\n </ion-text>\n </ion-card-subtitle>\n </ion-card-header>\n <ion-card-content>\n <mat-chips-field\n formControlName=\"entity\"\n placeholder=\"Entity\"\n [config]=\"autocompleteFields.get('entity-suggestFn')\"\n [equals]=\"equals\"\n [suggestLengthThreshold]=\"3\"\n [logPrefix]=\"'[mat-chips-suggestLengthThreshold] '\"\n [debug]=\"true\"\n ></mat-chips-field>\n {{ form.controls.entity?.value | json }}\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n </form>\n</ion-content>\n" }]
|
|
146
148
|
}], ctorParameters: () => [{ type: i1.UntypedFormBuilder }] });
|
|
147
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL3Rlc3RpbmcvY2hpcHMudGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL3Rlc3RpbmcvY2hpcHMudGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFbEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN2QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOENBQThDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDckQsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saURBQWlELENBQUM7Ozs7Ozs7O0FBRzlGLE1BQU0sZUFBZTtJQUNuQixFQUFFLENBQVM7SUFDWCxLQUFLLENBQVM7SUFDZCxJQUFJLENBQVM7Q0FDZDtBQUVELE1BQU0sYUFBYSxHQUFzQjtJQUN2QyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3ZDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDdkMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN2QyxFQUFFLEVBQUUsRUFBRSxDQUFD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QyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0IsQ0FBQzt3R0FySFUsYUFBYTs0RkFBYixhQUFhLHNEQ2pEMUIsdTRMQWtLQTs7NEZEakhhLGFBQWE7a0JBSnpCLFNBQVM7K0JBQ0UsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFVudHlwZWRGb3JtQnVpbGRlciwgVW50eXBlZEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgU2hhcmVkVmFsaWRhdG9ycyB9IGZyb20gJy4uLy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7IGlzTmlsLCBpc05vdE5pbCwgc2xlZXAgfSBmcm9tICcuLi8uLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgTG9hZFJlc3VsdCB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL2VudGl0eS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEVudGl0eVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zZXJ2aWNlcy9tb2RlbC9lbnRpdHkubW9kZWwnO1xuaW1wb3J0IHsgc3VnZ2VzdEZyb21BcnJheSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZUNvbmZpZ0hvbGRlciB9IGZyb20gJy4uLy4uL2F1dG9jb21wbGV0ZS9tYXRlcmlhbC5hdXRvY29tcGxldGUuY29uZmlnJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcblxuY2xhc3MgRW50aXR5VGVzdENsYXNzIHtcbiAgaWQ6IG51bWJlcjtcbiAgbGFiZWw6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5jb25zdCBGQUtFX0VOVElUSUVTOiBFbnRpdHlUZXN0Q2xhc3NbXSA9IFtcbiAgeyBpZDogMSwgbGFiZWw6ICdBQUEnLCBuYW1lOiAnSXRlbSBBJyB9LFxuICB7IGlkOiAyLCBsYWJlbDogJ0JCQicsIG5hbWU6ICdJdGVtIEInIH0sXG4gIHsgaWQ6IDMsIGxhYmVsOiAnQ0NDJywgbmFtZTogJ0l0ZW0gQycgfSxcbiAgeyBpZDogNCwgbGFiZWw6ICdEREQnLCBuYW1lOiAnSXRlbSBEJyB9LFxuICB7IGlkOiA1LCBsYWJlbDogJ0VFRScsIG5hbWU6ICdJdGVtIEUnIH0sXG4gIHsgaWQ6IDYsIGxhYmVsOiAnRkZGJywgbmFtZTogJ0l0ZW0gRicgfSxcbiAgeyBpZDogNywgbGFiZWw6ICdHR0cnLCBuYW1lOiAnSXRlbSBHJyB9LFxuXTtcblxuZnVuY3Rpb24gZGVlcENvcHkodmFsdWVzPzogRW50aXR5VGVzdENsYXNzW10sIHNpemU/OiBudW1iZXIpOiBFbnRpdHlUZXN0Q2xhc3NbXSB7XG4gIGlmIChpc05pbChzaXplKSkge1xuICAgIHJldHVybiAodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcCgoZW50aXR5KSA9PiBPYmplY3QuYXNzaWduKHt9LCBlbnRpdHkpKTtcbiAgfVxuXG4gIGxldCByZXN1bHQgPSBbXTtcbiAgbGV0IGkgPSAxO1xuICB3aGlsZSAocmVzdWx0Lmxlbmd0aCA8IHNpemUpIHtcbiAgICByZXN1bHQgPSByZXN1bHQuY29uY2F0KFxuICAgICAgKHZhbHVlcyB8fCBGQUtFX0VOVElUSUVTKS5tYXAoKGVudGl0eSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gZW50aXR5Lm5hbWUgKyAnICMnICsgaTtcbiAgICAgICAgcmV0dXJuIHsgLi4uZW50aXR5LCBpZDogaSsrLCBuYW1lIH07XG4gICAgICB9KVxuICAgICk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdC5zbGljZSgwLCBzaXplKTtcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWNoaXBzLXRlc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hpcHMudGVzdC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgQ2hpcHNUZXN0UGFnZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHByaXZhdGUgX2l0ZW1zID0gZGVlcENvcHkoRkFLRV9FTlRJVElFUywgMTAwKTtcbiAgcHJpdmF0ZSBfJGl0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxFbnRpdHlUZXN0Q2xhc3NbXT4odW5kZWZpbmVkKTtcblxuICBmb3JtOiBVbnR5cGVkRm9ybUdyb3VwO1xuICBhdXRvY29tcGxldGVGaWVsZHMgPSBuZXcgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyKCk7XG4gIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgPSAnZmlsbCc7XG4gIG1vYmlsZSA9IHRydWU7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIpIHtcbiAgICB0aGlzLmZvcm0gPSBmb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBlbnRpdHk6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBlbnRpdHlJbml0aWFsOiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgICAgZGlzYWJsZUVudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIGZhckVudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICB9KTtcblxuICAgIHRoaXMuZm9ybS5nZXQoJ2Rpc2FibGVFbnRpdHknKS5kaXNhYmxlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBGcm9tIHN1Z2dlc3RcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1zdWdnZXN0Rm4nLCB7XG4gICAgICBzdWdnZXN0Rm46ICh2YWx1ZSwgZmlsdGVyKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIGZpbHRlciksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nLFxuICAgICAgZXF1YWxzOiAobzEsIG8yKSA9PiBFbnRpdHlVdGlscy5jb21wYXJlKG8xLCBvMiwgMSwgJ2lkJykgPT09IDAsXG4gICAgfSk7XG5cbiAgICAvLyBGcm9tIGl0ZW1zXG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktaXRlbXMnLCB7XG4gICAgICBpdGVtczogdGhpcy5faXRlbXMuc2xpY2UoKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmcsXG4gICAgICBlcXVhbHM6IChvMSwgbzIpID0+IEVudGl0eVV0aWxzLmNvbXBhcmUobzEsIG8yLCAxLCAnaWQnKSA9PT0gMCxcbiAgICB9KTtcblxuICAgIC8vIEZhciBlbnRpdHksIGluIHRoZSBsaXN0XG4gICAgdGhpcy5hdXRvY29tcGxldGVGaWVsZHMuYWRkKCdlbnRpdHktZmFyJywge1xuICAgICAgc3VnZ2VzdEZuOiAodmFsdWUsIGZpbHRlcikgPT4gdGhpcy5zdWdnZXN0KHZhbHVlLCBmaWx0ZXIpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZyxcbiAgICB9KTtcblxuICAgIC8vIEZyb20gJGl0ZW1zIG9ic2VydmFibGVcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS0kaXRlbXMnLCB7XG4gICAgICBpdGVtczogdGhpcy5fJGl0ZW1zLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZyxcbiAgICB9KTtcblxuICAgIHRoaXMubG9hZERhdGEoKTtcbiAgfVxuXG4gIC8vIExvYWQgdGhlIGZvcm0gd2l0aCBkYXRhXG4gIGFzeW5jIGxvYWREYXRhKCkge1xuICAgIGNvbnN0IGl0ZW1zID0gZGVlcENvcHkoRkFLRV9FTlRJVElFUyk7XG4gICAgY29uc3QgZGF0YSA9IHtcbiAgICAgIGVudGl0eTogaXRlbXMuc2xpY2UoMCwgMSksIC8vIFNlbGVjdCB0aGUgZmlyc3RcblxuICAgICAgZW50aXR5SW5pdGlhbDogaXRlbXMuc2xpY2UoMSwgMiksXG5cbiAgICAgIGRpc2FibGVFbnRpdHk6IGl0ZW1zLnNsaWNlKDEsIDIpLFxuICAgIH07XG5cbiAgICB0aGlzLmZvcm0uc2V0VmFsdWUoZGF0YSk7XG5cbiAgICAvLyBMb2FkIG9ic2VydmFibGVzXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmxvYWRJdGVtcygpLCAxMDAwKTtcbiAgfVxuXG4gIGFzeW5jIGxvYWRJdGVtcygpIHtcbiAgICB0aGlzLl8kaXRlbXMubmV4dCh0aGlzLl9pdGVtcy5zbGljZSgpKTtcbiAgfVxuXG4gIGVudGl0eVRvU3RyaW5nKGl0ZW06IGFueSkge1xuICAgIHJldHVybiBbKGl0ZW0gJiYgaXRlbS5sYWJlbCkgfHwgdW5kZWZpbmVkLCAoaXRlbSAmJiBpdGVtLm5hbWUpIHx8IHVuZGVmaW5lZF0uZmlsdGVyKGlzTm90TmlsKS5qb2luKCcgLSAnKTtcbiAgfVxuXG4gIGFzeW5jIHN1Z2dlc3QodmFsdWU6IGFueSwgZmlsdGVyPzogYW55KTogUHJvbWlzZTxMb2FkUmVzdWx0PEVudGl0eVRlc3RDbGFzcz4+IHtcbiAgICBmaWx0ZXIgPSB7IG9mZnNldDogMCwgc2l6ZTogMzAsIC4uLmZpbHRlciB9O1xuICAgIGNvbnN0IHJlcyA9IHN1Z2dlc3RGcm9tQXJyYXkodGhpcy5faXRlbXMsIHZhbHVlLCB7XG4gICAgICAuLi5maWx0ZXIsXG4gICAgICBzZWFyY2hBdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICB9KTtcblxuICAgIC8vIFNpbXVsYXRlIGEgc2l6ZSA9IDMwXG4gICAgY29uc3QgdG90YWwgPSByZXMudG90YWwgfHwgcmVzLmRhdGEubGVuZ3RoO1xuXG4gICAgY29uc3QgbmV4dE9mZnNldCA9IGZpbHRlci5vZmZzZXQgKyByZXMuZGF0YS5sZW5ndGg7XG4gICAgaWYgKG5leHRPZmZzZXQgPCB0b3RhbCkge1xuICAgICAgZmlsdGVyID0geyAuLi5maWx0ZXIsIG9mZnNldDogbmV4dE9mZnNldCB9O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG90YWwsXG4gICAgICAgIGRhdGE6IHJlcy5kYXRhLFxuICAgICAgICBmZXRjaE1vcmU6IGFzeW5jICh2YXJpYWJsZXMpID0+IHtcbiAgICAgICAgICBhd2FpdCBzbGVlcCgxMDAwKTsgLy8gU2ltdWxhdGUgYWNjZXNzIHRvIHNlcnZlclxuICAgICAgICAgIHJldHVybiB0aGlzLnN1Z2dlc3QodmFsdWUsIHsgLi4uZmlsdGVyLCAuLi52YXJpYWJsZXMgfSk7XG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cblxuICBkb1N1Ym1pdChfKSB7XG4gICAgY29uc29sZS5kZWJ1ZygnVmFsaWRhdGUgZm9ybTogJywgdGhpcy5mb3JtLnZhbHVlKTtcbiAgfVxuXG4gIGVxdWFscyhvMTogRW50aXR5VGVzdENsYXNzLCBvMjogRW50aXR5VGVzdENsYXNzKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG8xICYmIG8yICYmIG8xLmlkID09PSBvMi5pZDtcbiAgfVxuXG4gIC8qIC0tIHByb3RlY3RlZCBtZXRob2RzIC0tICovXG5cbiAgc3RyaW5naWZ5KHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICB9XG59XG4iLCI8aW9uLWhlYWRlcj5cbiAgPGlvbi10b29sYmFyIGNvbG9yPVwicHJpbWFyeVwiPlxuICAgIDxpb24tYnV0dG9ucyBzbG90PVwic3RhcnRcIj5cbiAgICAgIDxpb24tYmFjay1idXR0b24+PC9pb24tYmFjay1idXR0b24+XG4gICAgPC9pb24tYnV0dG9ucz5cblxuICAgIDxpb24tdGl0bGU+Q2hpcHMgZmllbGQgdGVzdCBwYWdlPC9pb24tdGl0bGU+XG4gIDwvaW9uLXRvb2xiYXI+XG48L2lvbi1oZWFkZXI+XG5cbjxpb24tY29udGVudCBjbGFzcz1cImlvbi1wYWRkaW5nXCI+XG4gIDxmb3JtIGNsYXNzPVwiZm9ybS1jb250YWluZXJcIiBbZm9ybUdyb3VwXT1cImZvcm1cIiAobmdTdWJtaXQpPVwiZG9TdWJtaXQoJGV2ZW50KVwiPlxuICAgIDxpb24tZ3JpZD5cbiAgICAgIDxpb24tcm93PlxuICAgICAgICA8aW9uLWNvbCBzaXplPVwiMTJcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlN1Z2dlc3QoKSBmdW5jdGlvbjwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwcmU+PHNtYWxsPnN1Z2dlc3RGbjogKHNlYXJjaFRleHQsIGZpbHRlcikgPSZndDsgYW55W108L3NtYWxsPjwvcHJlPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcHMtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJlbnRpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSBjaGlwIGZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY29uZmlnXT1cImF1dG9jb21wbGV0ZUZpZWxkcy5nZXQoJ2VudGl0eS1zdWdnZXN0Rm4nKVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2xvZ1ByZWZpeF09XCInW21hdC1jaGlwcy1lbXB0eV0gJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgY2hpcENvbG9yPVwiYWNjZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBbZGVidWddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L21hdC1jaGlwcy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm90aGVyIGZpZWxkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybS5jb250cm9scy5lbnRpdHkudmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5TdWdnZXN0KCkgZnVuY3Rpb24gd2l0aCBpbml0aWFsIHZhbHVlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwcmU+PHNtYWxsPnN1Z2dlc3RGbjogKHNlYXJjaFRleHQsIGZpbHRlcikgPSZndDsgYW55W108L3NtYWxsPjwvcHJlPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50aXR5SW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSBzdWdnZXN0Rm4gZmllbGRcIlxuICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtaW5pdGlhbGl6ZWRdICdcIlxuICAgICAgICAgICAgICAgIGNoaXBDb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eUluaXRpYWwudmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGNvbnRyb2w8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcHMtZmllbGRcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlRW50aXR5XCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImF1dG9jb21wbGV0ZUZpZWxkcy5nZXQoJ2VudGl0eS1zdWdnZXN0Rm4nKVwiXG4gICAgICAgICAgICAgICAgW2VxdWFsc109XCJlcXVhbHNcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSBkaXNhYmxlZCBmaWVsZFwiXG4gICAgICAgICAgICAgICAgW2xvZ1ByZWZpeF09XCInW21hdC1jaGlwcy1kaXNhYmxlZF0gJ1wiXG4gICAgICAgICAgICAgICAgY2hpcENvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInRydWVcIlxuICAgICAgICAgICAgICA+PC9tYXQtY2hpcHMtZmllbGQ+XG4gICAgICAgICAgICAgIHt7IGZvcm0uY29udHJvbHMuZGlzYWJsZUVudGl0eS52YWx1ZSB8IGpzb24gfX1cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+UmVhZG9ubHkgY29udHJvbDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwcy1maWVsZFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIFtlcXVhbHNdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkEgcmVhZG9ubHkgZmllbGRcIlxuICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtcmVhZG9ubHldICdcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eT8udmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlN1Z2dlc3Qgd2l0aCBsZW5ndGggdGhyZXNob2xkPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdDogKHZhbHVlLCBmaWx0ZXIpID0+IExvYWRSZXN1bHQmbHQ7YW55Jmd0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkOiAnMyc8L3ByZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIFtlcXVhbHNdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgICBbc3VnZ2VzdExlbmd0aFRocmVzaG9sZF09XCIzXCJcbiAgICAgICAgICAgICAgICBbbG9nUHJlZml4XT1cIidbbWF0LWNoaXBzLXN1Z2dlc3RMZW5ndGhUaHJlc2hvbGRdICdcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eT8udmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
149
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hpcHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL3Rlc3RpbmcvY2hpcHMudGVzdC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2NoaXBzL3Rlc3RpbmcvY2hpcHMudGVzdC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUF3QyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7Ozs7Ozs7QUFHOUYsTUFBTSxlQUFlO0lBQ25CLEVBQUUsQ0FBUztJQUNYLEtBQUssQ0FBUztJQUNkLElBQUksQ0FBUztDQUNkO0FBRUQsTUFBTSxhQUFhLEdBQXNCO0lBQ3ZDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDdkMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN2QyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3ZDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7SUFDdkMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtJQUN2QyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0lBQ3ZDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Q0FDeEMsQ0FBQztBQUVGLFNBQVMsUUFBUSxDQUFDLE1BQTBCLEVBQUUsSUFBYTtJQUN6RCxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFFRCxJQUFJLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsT0FBTyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQzVCLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNwQixDQUFDLE1BQU0sSUFBSSxhQUFhLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEMsT0FBTyxFQUFFLEdBQUcsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN0QyxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUNELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDL0IsQ0FBQztBQU1ELE1BQU0sT0FBTyxhQUFhO0lBU0Y7SUFSZCxNQUFNLEdBQUcsUUFBUSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUN0QyxPQUFPLEdBQUcsSUFBSSxlQUFlLENBQW9CLFNBQVMsQ0FBQyxDQUFDO0lBRXBFLElBQUksQ0FBbUI7SUFDdkIsa0JBQWtCLEdBQUcsSUFBSSwyQkFBMkIsRUFBRSxDQUFDO0lBQ3ZELFVBQVUsR0FBMkIsTUFBTSxDQUFDO0lBQzVDLE1BQU0sR0FBRyxJQUFJLENBQUM7SUFFZCxZQUFzQixXQUErQjtRQUEvQixnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFDbkQsSUFBSSxDQUFDLElBQUksR0FBRyxXQUFXLENBQUMsS0FBSyxDQUFDO1lBQzVCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDdkMsYUFBYSxFQUFFLENBQUMsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQztZQUM5QyxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDO1lBQzlDLFNBQVMsRUFBRSxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7WUFDMUMsY0FBYyxFQUFFLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDM0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0MsQ0FBQztJQUVELFFBQVE7UUFDTixlQUFlO1FBQ2YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTtZQUM5QyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7WUFDekQsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDaEMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQy9ELENBQUMsQ0FBQztRQUVILGFBQWE7UUFDYixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLGNBQWMsRUFBRTtZQUMxQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7WUFDMUIsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDaEMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQy9ELENBQUMsQ0FBQztRQUVILDBCQUEwQjtRQUMxQixJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRTtZQUN4QyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUM7WUFDekQsVUFBVSxFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUM3QixXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDakMsQ0FBQyxDQUFDO1FBRUgseUJBQXlCO1FBQ3pCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsZUFBZSxFQUFFO1lBQzNDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTztZQUNuQixVQUFVLEVBQUUsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDO1lBQzdCLFdBQVcsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNqQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUVELDBCQUEwQjtJQUMxQixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxNQUFNLElBQUksR0FBRztZQUNYLE1BQU0sRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxtQkFBbUI7WUFFOUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUVoQyxhQUFhLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ2pDLENBQUM7UUFFRixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6QixtQkFBbUI7UUFDbkIsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELGNBQWMsQ0FBQyxJQUFTO1FBQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVHLENBQUM7SUFFRCxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQVUsRUFBRSxNQUFZO1FBQ3BDLE1BQU0sR0FBRyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQzVDLE1BQU0sR0FBRyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFO1lBQy9DLEdBQUcsTUFBTTtZQUNULGdCQUFnQixFQUFFLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUNwQyxDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUUzQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO1FBQ25ELElBQUksVUFBVSxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sR0FBRyxFQUFFLEdBQUcsTUFBTSxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQztZQUMzQyxPQUFPO2dCQUNMLEtBQUs7Z0JBQ0wsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO2dCQUNkLFNBQVMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUU7b0JBQzdCLE1BQU0sS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsNEJBQTRCO29CQUMvQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsR0FBRyxNQUFNLEVBQUUsR0FBRyxTQUFTLEVBQUUsQ0FBQyxDQUFDO2dCQUMxRCxDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxRQUFRLENBQUMsQ0FBQztRQUNSLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRUQsTUFBTSxDQUFDLEVBQW1CLEVBQUUsRUFBbUI7UUFDN0MsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsNkJBQTZCO0lBRTdCLFNBQVMsQ0FBQyxLQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMvQixDQUFDO3dHQXRIVSxhQUFhOzRGQUFiLGFBQWEsc0RDakQxQix3a1BBK01BOzs0RkQ5SmEsYUFBYTtrQkFKekIsU0FBUzsrQkFDRSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVW50eXBlZEZvcm1CdWlsZGVyLCBVbnR5cGVkRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTaGFyZWRWYWxpZGF0b3JzIH0gZnJvbSAnLi4vLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCBzbGVlcCB9IGZyb20gJy4uLy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBMb2FkUmVzdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvZW50aXR5LXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgRW50aXR5VXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3NlcnZpY2VzL21vZGVsL2VudGl0eS5tb2RlbCc7XG5pbXBvcnQgeyBzdWdnZXN0RnJvbUFycmF5IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlQ29uZmlnSG9sZGVyIH0gZnJvbSAnLi4vLi4vYXV0b2NvbXBsZXRlL21hdGVyaWFsLmF1dG9jb21wbGV0ZS5jb25maWcnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuXG5jbGFzcyBFbnRpdHlUZXN0Q2xhc3Mge1xuICBpZDogbnVtYmVyO1xuICBsYWJlbDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IEZBS0VfRU5USVRJRVM6IEVudGl0eVRlc3RDbGFzc1tdID0gW1xuICB7IGlkOiAxLCBsYWJlbDogJ0FBQScsIG5hbWU6ICdJdGVtIEEnIH0sXG4gIHsgaWQ6IDIsIGxhYmVsOiAnQkJCJywgbmFtZTogJ0l0ZW0gQicgfSxcbiAgeyBpZDogMywgbGFiZWw6ICdDQ0MnLCBuYW1lOiAnSXRlbSBDJyB9LFxuICB7IGlkOiA0LCBsYWJlbDogJ0RERCcsIG5hbWU6ICdJdGVtIEQnIH0sXG4gIHsgaWQ6IDUsIGxhYmVsOiAnRUVFJywgbmFtZTogJ0l0ZW0gRScgfSxcbiAgeyBpZDogNiwgbGFiZWw6ICdGRkYnLCBuYW1lOiAnSXRlbSBGJyB9LFxuICB7IGlkOiA3LCBsYWJlbDogJ0dHRycsIG5hbWU6ICdJdGVtIEcnIH0sXG5dO1xuXG5mdW5jdGlvbiBkZWVwQ29weSh2YWx1ZXM/OiBFbnRpdHlUZXN0Q2xhc3NbXSwgc2l6ZT86IG51bWJlcik6IEVudGl0eVRlc3RDbGFzc1tdIHtcbiAgaWYgKGlzTmlsKHNpemUpKSB7XG4gICAgcmV0dXJuICh2YWx1ZXMgfHwgRkFLRV9FTlRJVElFUykubWFwKChlbnRpdHkpID0+IE9iamVjdC5hc3NpZ24oe30sIGVudGl0eSkpO1xuICB9XG5cbiAgbGV0IHJlc3VsdCA9IFtdO1xuICBsZXQgaSA9IDE7XG4gIHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgc2l6ZSkge1xuICAgIHJlc3VsdCA9IHJlc3VsdC5jb25jYXQoXG4gICAgICAodmFsdWVzIHx8IEZBS0VfRU5USVRJRVMpLm1hcCgoZW50aXR5KSA9PiB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBlbnRpdHkubmFtZSArICcgIycgKyBpO1xuICAgICAgICByZXR1cm4geyAuLi5lbnRpdHksIGlkOiBpKyssIG5hbWUgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0LnNsaWNlKDAsIHNpemUpO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hpcHMtdGVzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9jaGlwcy50ZXN0Lmh0bWwnLFxufSlcbmV4cG9ydCBjbGFzcyBDaGlwc1Rlc3RQYWdlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSBfaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTLCAxMDApO1xuICBwcml2YXRlIF8kaXRlbXMgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEVudGl0eVRlc3RDbGFzc1tdPih1bmRlZmluZWQpO1xuXG4gIGZvcm06IFVudHlwZWRGb3JtR3JvdXA7XG4gIGF1dG9jb21wbGV0ZUZpZWxkcyA9IG5ldyBNYXRBdXRvY29tcGxldGVDb25maWdIb2xkZXIoKTtcbiAgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZSA9ICdmaWxsJztcbiAgbW9iaWxlID0gdHJ1ZTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcikge1xuICAgIHRoaXMuZm9ybSA9IGZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGVudGl0eTogW251bGwsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSxcbiAgICAgIGVudGl0eUluaXRpYWw6IFtudWxsLCBTaGFyZWRWYWxpZGF0b3JzLmVudGl0eV0sXG4gICAgICBkaXNhYmxlRW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgICAgZmFyRW50aXR5OiBbbnVsbCwgU2hhcmVkVmFsaWRhdG9ycy5lbnRpdHldLFxuICAgICAgcmVxdWlyZWRFbnRpdHk6IFtudWxsLCBWYWxpZGF0b3JzLmNvbXBvc2UoW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMuZW50aXR5XSldLFxuICAgIH0pO1xuXG4gICAgdGhpcy5mb3JtLmdldCgnZGlzYWJsZUVudGl0eScpLmRpc2FibGUoKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIEZyb20gc3VnZ2VzdFxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LXN1Z2dlc3RGbicsIHtcbiAgICAgIHN1Z2dlc3RGbjogKHZhbHVlLCBmaWx0ZXIpID0+IHRoaXMuc3VnZ2VzdCh2YWx1ZSwgZmlsdGVyKSxcbiAgICAgIGF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgICAgZGlzcGxheVdpdGg6IHRoaXMuZW50aXR5VG9TdHJpbmcsXG4gICAgICBlcXVhbHM6IChvMSwgbzIpID0+IEVudGl0eVV0aWxzLmNvbXBhcmUobzEsIG8yLCAxLCAnaWQnKSA9PT0gMCxcbiAgICB9KTtcblxuICAgIC8vIEZyb20gaXRlbXNcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1pdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl9pdGVtcy5zbGljZSgpLFxuICAgICAgYXR0cmlidXRlczogWydsYWJlbCcsICduYW1lJ10sXG4gICAgICBkaXNwbGF5V2l0aDogdGhpcy5lbnRpdHlUb1N0cmluZyxcbiAgICAgIGVxdWFsczogKG8xLCBvMikgPT4gRW50aXR5VXRpbHMuY29tcGFyZShvMSwgbzIsIDEsICdpZCcpID09PSAwLFxuICAgIH0pO1xuXG4gICAgLy8gRmFyIGVudGl0eSwgaW4gdGhlIGxpc3RcbiAgICB0aGlzLmF1dG9jb21wbGV0ZUZpZWxkcy5hZGQoJ2VudGl0eS1mYXInLCB7XG4gICAgICBzdWdnZXN0Rm46ICh2YWx1ZSwgZmlsdGVyKSA9PiB0aGlzLnN1Z2dlc3QodmFsdWUsIGZpbHRlciksXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nLFxuICAgIH0pO1xuXG4gICAgLy8gRnJvbSAkaXRlbXMgb2JzZXJ2YWJsZVxuICAgIHRoaXMuYXV0b2NvbXBsZXRlRmllbGRzLmFkZCgnZW50aXR5LSRpdGVtcycsIHtcbiAgICAgIGl0ZW1zOiB0aGlzLl8kaXRlbXMsXG4gICAgICBhdHRyaWJ1dGVzOiBbJ2xhYmVsJywgJ25hbWUnXSxcbiAgICAgIGRpc3BsYXlXaXRoOiB0aGlzLmVudGl0eVRvU3RyaW5nLFxuICAgIH0pO1xuXG4gICAgdGhpcy5sb2FkRGF0YSgpO1xuICB9XG5cbiAgLy8gTG9hZCB0aGUgZm9ybSB3aXRoIGRhdGFcbiAgYXN5bmMgbG9hZERhdGEoKSB7XG4gICAgY29uc3QgaXRlbXMgPSBkZWVwQ29weShGQUtFX0VOVElUSUVTKTtcbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgZW50aXR5OiBpdGVtcy5zbGljZSgwLCAxKSwgLy8gU2VsZWN0IHRoZSBmaXJzdFxuXG4gICAgICBlbnRpdHlJbml0aWFsOiBpdGVtcy5zbGljZSgxLCAyKSxcblxuICAgICAgZGlzYWJsZUVudGl0eTogaXRlbXMuc2xpY2UoMSwgMiksXG4gICAgfTtcblxuICAgIHRoaXMuZm9ybS5zZXRWYWx1ZShkYXRhKTtcblxuICAgIC8vIExvYWQgb2JzZXJ2YWJsZXNcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMubG9hZEl0ZW1zKCksIDEwMDApO1xuICB9XG5cbiAgYXN5bmMgbG9hZEl0ZW1zKCkge1xuICAgIHRoaXMuXyRpdGVtcy5uZXh0KHRoaXMuX2l0ZW1zLnNsaWNlKCkpO1xuICB9XG5cbiAgZW50aXR5VG9TdHJpbmcoaXRlbTogYW55KSB7XG4gICAgcmV0dXJuIFsoaXRlbSAmJiBpdGVtLmxhYmVsKSB8fCB1bmRlZmluZWQsIChpdGVtICYmIGl0ZW0ubmFtZSkgfHwgdW5kZWZpbmVkXS5maWx0ZXIoaXNOb3ROaWwpLmpvaW4oJyAtICcpO1xuICB9XG5cbiAgYXN5bmMgc3VnZ2VzdCh2YWx1ZTogYW55LCBmaWx0ZXI/OiBhbnkpOiBQcm9taXNlPExvYWRSZXN1bHQ8RW50aXR5VGVzdENsYXNzPj4ge1xuICAgIGZpbHRlciA9IHsgb2Zmc2V0OiAwLCBzaXplOiAzMCwgLi4uZmlsdGVyIH07XG4gICAgY29uc3QgcmVzID0gc3VnZ2VzdEZyb21BcnJheSh0aGlzLl9pdGVtcywgdmFsdWUsIHtcbiAgICAgIC4uLmZpbHRlcixcbiAgICAgIHNlYXJjaEF0dHJpYnV0ZXM6IFsnbGFiZWwnLCAnbmFtZSddLFxuICAgIH0pO1xuXG4gICAgLy8gU2ltdWxhdGUgYSBzaXplID0gMzBcbiAgICBjb25zdCB0b3RhbCA9IHJlcy50b3RhbCB8fCByZXMuZGF0YS5sZW5ndGg7XG5cbiAgICBjb25zdCBuZXh0T2Zmc2V0ID0gZmlsdGVyLm9mZnNldCArIHJlcy5kYXRhLmxlbmd0aDtcbiAgICBpZiAobmV4dE9mZnNldCA8IHRvdGFsKSB7XG4gICAgICBmaWx0ZXIgPSB7IC4uLmZpbHRlciwgb2Zmc2V0OiBuZXh0T2Zmc2V0IH07XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b3RhbCxcbiAgICAgICAgZGF0YTogcmVzLmRhdGEsXG4gICAgICAgIGZldGNoTW9yZTogYXN5bmMgKHZhcmlhYmxlcykgPT4ge1xuICAgICAgICAgIGF3YWl0IHNsZWVwKDEwMDApOyAvLyBTaW11bGF0ZSBhY2Nlc3MgdG8gc2VydmVyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3VnZ2VzdCh2YWx1ZSwgeyAuLi5maWx0ZXIsIC4uLnZhcmlhYmxlcyB9KTtcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuXG4gIGRvU3VibWl0KF8pIHtcbiAgICBjb25zb2xlLmRlYnVnKCdWYWxpZGF0ZSBmb3JtOiAnLCB0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgZXF1YWxzKG8xOiBFbnRpdHlUZXN0Q2xhc3MsIG8yOiBFbnRpdHlUZXN0Q2xhc3MpOiBib29sZWFuIHtcbiAgICByZXR1cm4gbzEgJiYgbzIgJiYgbzEuaWQgPT09IG8yLmlkO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZHMgLS0gKi9cblxuICBzdHJpbmdpZnkodmFsdWU6IGFueSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cbn1cbiIsIjxpb24taGVhZGVyPlxuICA8aW9uLXRvb2xiYXIgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgPGlvbi1idXR0b25zIHNsb3Q9XCJzdGFydFwiPlxuICAgICAgPGlvbi1iYWNrLWJ1dHRvbj48L2lvbi1iYWNrLWJ1dHRvbj5cbiAgICA8L2lvbi1idXR0b25zPlxuXG4gICAgPGlvbi10aXRsZT5DaGlwcyBmaWVsZCB0ZXN0IHBhZ2U8L2lvbi10aXRsZT5cbiAgPC9pb24tdG9vbGJhcj5cbjwvaW9uLWhlYWRlcj5cblxuPGlvbi1jb250ZW50IGNsYXNzPVwiaW9uLXBhZGRpbmdcIj5cbiAgPGZvcm0gY2xhc3M9XCJmb3JtLWNvbnRhaW5lclwiIFtmb3JtR3JvdXBdPVwiZm9ybVwiIChuZ1N1Ym1pdCk9XCJkb1N1Ym1pdCgkZXZlbnQpXCI+XG4gICAgPGlvbi1ncmlkPlxuICAgICAgPGlvbi1yb3c+XG4gICAgICAgIDxpb24tY29sIHNpemU9XCI2XCI+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cInByaW1hcnlcIj5TdWdnZXN0KCkgZnVuY3Rpb248L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwibWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICA8cHJlPjxzbWFsbD5zdWdnZXN0Rm46IChzZWFyY2hUZXh0LCBmaWx0ZXIpID0mZ3Q7IGFueVtdPC9zbWFsbD48L3ByZT5cbiAgICAgICAgICAgICAgICA8L2lvbi10ZXh0PlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPGlvbi1ncmlkIGNsYXNzPVwiaW9uLW5vLXBhZGRpbmdcIj5cbiAgICAgICAgICAgICAgICA8aW9uLXJvdz5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkEgY2hpcCBmaWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtZW1wdHldICdcIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaXBDb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RlYnVnXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICA+PC9tYXQtY2hpcHMtZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgICAgICAgICAgIDxpb24tY29sPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtbGFiZWw+QW5vdGhlciBmaWVsZDwvbWF0LWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBtYXRJbnB1dCB0eXBlPVwidGV4dFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIHt7IGZvcm0uY29udHJvbHMuZW50aXR5LnZhbHVlIHwganNvbiB9fVxuICAgICAgICAgICAgICAgICAgPC9pb24tY29sPlxuICAgICAgICAgICAgICAgIDwvaW9uLXJvdz5cbiAgICAgICAgICAgICAgPC9pb24tZ3JpZD5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPGlvbi1jb2wgc2l6ZT1cIjZcIj5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi10ZXh0IGNvbG9yPVwicHJpbWFyeVwiPlJlcXVpcmVkPC9pb24tdGV4dD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXN1YnRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tdGV4dCBjb2xvcj1cIm1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgPHByZT48c21hbGw+cmVxdWlyZWQ6IHRydWU8L3NtYWxsPjwvcHJlPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8aW9uLWdyaWQgY2xhc3M9XCJpb24tbm8tcGFkZGluZ1wiPlxuICAgICAgICAgICAgICAgIDxpb24tcm93PlxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtY2hpcHMtZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJyZXF1aXJlZEVudGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJBIHJlcXVpcmVkIGNoaXAgZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb25maWddPVwiYXV0b2NvbXBsZXRlRmllbGRzLmdldCgnZW50aXR5LWl0ZW1zJylcIlxuICAgICAgICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtcmVxdWlyZWRdICdcIlxuICAgICAgICAgICAgICAgICAgICAgIGNoaXBDb2xvcj1cImFjY2VudFwiXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWRcbiAgICAgICAgICAgICAgICAgICAgICBbZGVidWddPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgID48L21hdC1jaGlwcy1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICAgICAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1sYWJlbD5Bbm90aGVyIHJlcXVpcmVkIGZpZWxkPC9tYXQtbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IHR5cGU9XCJ0ZXh0XCIgcmVxdWlyZWQgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICAgIDwvaW9uLWNvbD5cbiAgICAgICAgICAgICAgICA8L2lvbi1yb3c+XG4gICAgICAgICAgICAgICAgPGlvbi1yb3c+XG4gICAgICAgICAgICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICAgICAgICAgICAge3sgZm9ybS5jb250cm9scy5lbnRpdHkudmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICAgICAgICA8L2lvbi1jb2w+XG4gICAgICAgICAgICAgICAgPC9pb24tcm93PlxuICAgICAgICAgICAgICA8L2lvbi1ncmlkPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgIDwvaW9uLWNhcmQ+XG4gICAgICAgIDwvaW9uLWNvbD5cblxuICAgICAgICA8aW9uLWNvbD5cbiAgICAgICAgICA8aW9uLWNhcmQ+XG4gICAgICAgICAgICA8aW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgICA8aW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgICAgPGlvbi1sYWJlbCBjb2xvcj1cInByaW1hcnlcIj5TdWdnZXN0KCkgZnVuY3Rpb24gd2l0aCBpbml0aWFsIHZhbHVlPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxwcmU+PHNtYWxsPnN1Z2dlc3RGbjogKHNlYXJjaFRleHQsIGZpbHRlcikgPSZndDsgYW55W108L3NtYWxsPjwvcHJlPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50aXR5SW5pdGlhbFwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSBzdWdnZXN0Rm4gZmllbGRcIlxuICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtaW5pdGlhbGl6ZWRdICdcIlxuICAgICAgICAgICAgICAgIGNoaXBDb2xvcj1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eUluaXRpYWwudmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPkRpc2FibGVkIGNvbnRyb2w8L2lvbi1sYWJlbD5cbiAgICAgICAgICAgICAgPC9pb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtaGVhZGVyPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgICAgIDxtYXQtY2hpcHMtZmllbGRcbiAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJkaXNhYmxlRW50aXR5XCJcbiAgICAgICAgICAgICAgICBbY29uZmlnXT1cImF1dG9jb21wbGV0ZUZpZWxkcy5nZXQoJ2VudGl0eS1zdWdnZXN0Rm4nKVwiXG4gICAgICAgICAgICAgICAgW2VxdWFsc109XCJlcXVhbHNcIlxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiQSBkaXNhYmxlZCBmaWVsZFwiXG4gICAgICAgICAgICAgICAgW2xvZ1ByZWZpeF09XCInW21hdC1jaGlwcy1kaXNhYmxlZF0gJ1wiXG4gICAgICAgICAgICAgICAgY2hpcENvbG9yPVwid2FyblwiXG4gICAgICAgICAgICAgICAgW2RlYnVnXT1cInRydWVcIlxuICAgICAgICAgICAgICA+PC9tYXQtY2hpcHMtZmllbGQ+XG4gICAgICAgICAgICAgIHt7IGZvcm0uY29udHJvbHMuZGlzYWJsZUVudGl0eS52YWx1ZSB8IGpzb24gfX1cbiAgICAgICAgICAgIDwvaW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICA8L2lvbi1jYXJkPlxuICAgICAgICA8L2lvbi1jb2w+XG5cbiAgICAgICAgPGlvbi1jb2w+XG4gICAgICAgICAgPGlvbi1jYXJkPlxuICAgICAgICAgICAgPGlvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgICAgPGlvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgICAgIDxpb24tbGFiZWwgY29sb3I9XCJwcmltYXJ5XCI+UmVhZG9ubHkgY29udHJvbDwvaW9uLWxhYmVsPlxuICAgICAgICAgICAgICA8L2lvbi1jYXJkLXRpdGxlPlxuICAgICAgICAgICAgPC9pb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICA8aW9uLWNhcmQtY29udGVudD5cbiAgICAgICAgICAgICAgPG1hdC1jaGlwcy1maWVsZFxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIFtlcXVhbHNdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkEgcmVhZG9ubHkgZmllbGRcIlxuICAgICAgICAgICAgICAgIFtsb2dQcmVmaXhdPVwiJ1ttYXQtY2hpcHMtcmVhZG9ubHldICdcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eT8udmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuXG4gICAgICAgIDxpb24tY29sPlxuICAgICAgICAgIDxpb24tY2FyZD5cbiAgICAgICAgICAgIDxpb24tY2FyZC1oZWFkZXI+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC10aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLWxhYmVsIGNvbG9yPVwicHJpbWFyeVwiPlN1Z2dlc3Qgd2l0aCBsZW5ndGggdGhyZXNob2xkPC9pb24tbGFiZWw+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtdGl0bGU+XG4gICAgICAgICAgICAgIDxpb24tY2FyZC1zdWJ0aXRsZT5cbiAgICAgICAgICAgICAgICA8aW9uLXRleHQgY29sb3I9XCJtZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgIDxzbWFsbD5cbiAgICAgICAgICAgICAgICAgICAgPHByZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdDogKHZhbHVlLCBmaWx0ZXIpID0+IExvYWRSZXN1bHQmbHQ7YW55Jmd0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0TGVuZ3RoVGhyZXNob2xkOiAnMyc8L3ByZVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgICAgICAgIDwvaW9uLXRleHQ+XG4gICAgICAgICAgICAgIDwvaW9uLWNhcmQtc3VidGl0bGU+XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWhlYWRlcj5cbiAgICAgICAgICAgIDxpb24tY2FyZC1jb250ZW50PlxuICAgICAgICAgICAgICA8bWF0LWNoaXBzLWZpZWxkXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZW50aXR5XCJcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGl0eVwiXG4gICAgICAgICAgICAgICAgW2NvbmZpZ109XCJhdXRvY29tcGxldGVGaWVsZHMuZ2V0KCdlbnRpdHktc3VnZ2VzdEZuJylcIlxuICAgICAgICAgICAgICAgIFtlcXVhbHNdPVwiZXF1YWxzXCJcbiAgICAgICAgICAgICAgICBbc3VnZ2VzdExlbmd0aFRocmVzaG9sZF09XCIzXCJcbiAgICAgICAgICAgICAgICBbbG9nUHJlZml4XT1cIidbbWF0LWNoaXBzLXN1Z2dlc3RMZW5ndGhUaHJlc2hvbGRdICdcIlxuICAgICAgICAgICAgICAgIFtkZWJ1Z109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvbWF0LWNoaXBzLWZpZWxkPlxuICAgICAgICAgICAgICB7eyBmb3JtLmNvbnRyb2xzLmVudGl0eT8udmFsdWUgfCBqc29uIH19XG4gICAgICAgICAgICA8L2lvbi1jYXJkLWNvbnRlbnQ+XG4gICAgICAgICAgPC9pb24tY2FyZD5cbiAgICAgICAgPC9pb24tY29sPlxuICAgICAgPC9pb24tcm93PlxuICAgIDwvaW9uLWdyaWQ+XG4gIDwvZm9ybT5cbjwvaW9uLWNvbnRlbnQ+XG4iXX0=
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, forwardRef, Input, Optional, ViewChildren, } from '@angular/core';
|
|
1
|
+
import { booleanAttribute, ChangeDetectionStrategy, Component, forwardRef, Input, Optional, ViewChildren, } from '@angular/core';
|
|
2
2
|
import { NG_VALUE_ACCESSOR, Validators, } from '@angular/forms';
|
|
3
3
|
import { DEFAULT_PLACEHOLDER_CHAR } from '../../constants';
|
|
4
4
|
import { isBlankString, isNil, isNilOrBlank, isNotNilBoolean } from '../../functions';
|
|
@@ -239,7 +239,7 @@ export class MatDuration {
|
|
|
239
239
|
this.cd.markForCheck();
|
|
240
240
|
}
|
|
241
241
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatDuration, deps: [{ token: i1.Platform }, { token: i2.DateAdapter }, { token: i3.TranslateService }, { token: i4.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i4.FormGroupDirective, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
242
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatDuration, selector: "mat-duration-field", inputs: { disabled: "disabled", formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", readonly: "readonly", required: "required", compact: "compact", maxDecimals: "maxDecimals", placeholderChar: "placeholderChar", tabindex: "tabindex", clearable: "clearable" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "matInputs", predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | duration }}</ion-text>\n </mat-form-field>\n} @else {\n <!-- writable -->\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n <input\n matInput\n #matInput\n type=\"text\"\n autocomplete=\"off\"\n [maskito]=\"'COMMON.DURATION_PLACEHOLDER' | translate | maskitoPlaceholder: durationMask\"\n [formControl]=\"textControl\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER' | translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\"\n />\n <!-- errors -->\n @if (!formControl.hasError('required') && textControl.hasError('pattern')) {\n <mat-error translate>\n ERROR.FIELD_NOT_VALID_PATTERN\n </mat-error>\n }\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('min')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate: formControl.errors.min }}\n </mat-error>\n }\n @if (formControl.hasError('max')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate: formControl.errors.max }}\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n}\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input\n matInput\n #matInput\n type=\"text\"\n autocomplete=\"off\"\n [maskito]=\"'COMMON.DURATION_PLACEHOLDER' | translate | maskitoPlaceholder: durationMask\"\n [formControl]=\"textControl\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER' | translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\"\n />\n\n <!-- errors -->\n @if (!formControl.hasError('required') && textControl.hasError('pattern')) {\n <mat-error translate>\n ERROR.FIELD_NOT_VALID_PATTERN\n </mat-error>\n }\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('min')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate: formControl.errors.min }}\n </mat-error>\n }\n @if (formControl.hasError('max')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate: formControl.errors.max }}\n </mat-error>\n }\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}\n"], dependencies: [{ kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i7.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "pipe", type: i8.DurationPipe, name: "duration" }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i10.MaskitoPlaceholderPipe, name: "maskitoPlaceholder" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
242
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: MatDuration, selector: "mat-duration-field", inputs: { disabled: ["disabled", "disabled", booleanAttribute], formControl: "formControl", formControlName: "formControlName", placeholder: "placeholder", floatLabel: "floatLabel", appearance: "appearance", readonly: ["readonly", "readonly", booleanAttribute], required: ["required", "required", booleanAttribute], compact: ["compact", "compact", booleanAttribute], maxDecimals: "maxDecimals", placeholderChar: "placeholderChar", tabindex: "tabindex", clearable: "clearable" }, providers: [DEFAULT_VALUE_ACCESSOR], viewQueries: [{ propertyName: "matInputs", predicate: ["matInput"], descendants: true }], ngImport: i0, template: "<!-- readonly -->\n@if (readonly) {\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n class=\"mat-form-field-disabled\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n <input matInput hidden type=\"text\" readonly=\"true\" [formControl]=\"formControl\" />\n <ion-text>{{ formControl.value | duration }}</ion-text>\n </mat-form-field>\n} @else {\n <!-- writable -->\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n <input\n matInput\n #matInput\n type=\"text\"\n autocomplete=\"off\"\n [maskito]=\"'COMMON.DURATION_PLACEHOLDER' | translate | maskitoPlaceholder: durationMask\"\n [formControl]=\"textControl\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER' | translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\"\n />\n <!-- errors -->\n @if (!formControl.hasError('required') && textControl.hasError('pattern')) {\n <mat-error translate>\n ERROR.FIELD_NOT_VALID_PATTERN\n </mat-error>\n }\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('min')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate: formControl.errors.min }}\n </mat-error>\n }\n @if (formControl.hasError('max')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate: formControl.errors.max }}\n </mat-error>\n }\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n}\n\n<!-- writable -->\n<ng-template #writable>\n <mat-form-field\n [floatLabel]=\"floatLabel | asFloatLabelType\"\n [appearance]=\"appearance\"\n [class.mat-form-field-disabled]=\"formControl.disabled\"\n [class.mat-form-field-invalid]=\"formControl.touched && formControl.invalid\"\n >\n @if (floatLabel !== 'never' && !!placeholder) {\n <mat-label translate>COMMON.TIME</mat-label>\n }\n\n <div matPrefix><ng-content select=\"[matPrefix]\"></ng-content></div>\n\n <input\n matInput\n #matInput\n type=\"text\"\n autocomplete=\"off\"\n [maskito]=\"'COMMON.DURATION_PLACEHOLDER' | translate | maskitoPlaceholder: durationMask\"\n [formControl]=\"textControl\"\n [placeholder]=\"'COMMON.DURATION_PLACEHOLDER' | translate\"\n [required]=\"required\"\n (keydown.tab)=\"moveCaretToSeparator($event, true)\"\n (keydown.shift.tab)=\"moveCaretToSeparator($event, false)\"\n (keyup.escape)=\"preventEvent($event)\"\n (blur)=\"checkIfTouched()\"\n [tabindex]=\"tabindex !== undefined ? tabindex + 1 : undefined\"\n />\n\n <!-- errors -->\n @if (!formControl.hasError('required') && textControl.hasError('pattern')) {\n <mat-error translate>\n ERROR.FIELD_NOT_VALID_PATTERN\n </mat-error>\n }\n @if (formControl.hasError('required')) {\n <mat-error translate>ERROR.FIELD_REQUIRED</mat-error>\n }\n @if (formControl.hasError('min')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MIN_COMPACT' : 'ERROR.FIELD_MIN') | translate: formControl.errors.min }}\n </mat-error>\n }\n @if (formControl.hasError('max')) {\n <mat-error>\n {{ (compact ? 'ERROR.FIELD_MAX_COMPACT' : 'ERROR.FIELD_MAX') | translate: formControl.errors.max }}\n </mat-error>\n }\n\n <ng-content select=\"mat-error\"></ng-content>\n </mat-form-field>\n</ng-template>\n", styles: [":host{display:inline-block;width:100%;min-width:140px;position:relative;--ion-grid-column-padding: 0}mat-form-field{width:100%}mat-form-field .mat-form-field-subscript-wrapper{overflow:visible;top:100%}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper{display:flex}mat-form-field .mat-form-field-subscript-wrapper .mat-form-field-hint-wrapper .mat-form-field-hint-spacer{flex:1 0 1em}mat-error{text-align:right;width:100%}\n"], dependencies: [{ kind: "component", type: i1.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatLabel, selector: "mat-label" }, { kind: "directive", type: i5.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatPrefix, selector: "[matPrefix], [matIconPrefix], [matTextPrefix]", inputs: ["matTextPrefix"] }, { kind: "directive", type: i6.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: i3.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "directive", type: i7.MaskitoDirective, selector: "[maskito]", inputs: ["maskito", "maskitoElement"] }, { kind: "pipe", type: i8.DurationPipe, name: "duration" }, { kind: "pipe", type: i9.AsFloatLabelTypePipe, name: "asFloatLabelType" }, { kind: "pipe", type: i10.MaskitoPlaceholderPipe, name: "maskitoPlaceholder" }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
243
243
|
}
|
|
244
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MatDuration, decorators: [{
|
|
245
245
|
type: Component,
|
|
@@ -247,7 +247,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
247
247
|
}], ctorParameters: () => [{ type: i1.Platform }, { type: i2.DateAdapter }, { type: i3.TranslateService }, { type: i4.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i4.FormGroupDirective, decorators: [{
|
|
248
248
|
type: Optional
|
|
249
249
|
}] }], propDecorators: { disabled: [{
|
|
250
|
-
type: Input
|
|
250
|
+
type: Input,
|
|
251
|
+
args: [{ transform: booleanAttribute }]
|
|
251
252
|
}], formControl: [{
|
|
252
253
|
type: Input
|
|
253
254
|
}], formControlName: [{
|
|
@@ -259,11 +260,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
259
260
|
}], appearance: [{
|
|
260
261
|
type: Input
|
|
261
262
|
}], readonly: [{
|
|
262
|
-
type: Input
|
|
263
|
+
type: Input,
|
|
264
|
+
args: [{ transform: booleanAttribute }]
|
|
263
265
|
}], required: [{
|
|
264
|
-
type: Input
|
|
266
|
+
type: Input,
|
|
267
|
+
args: [{ transform: booleanAttribute }]
|
|
265
268
|
}], compact: [{
|
|
266
|
-
type: Input
|
|
269
|
+
type: Input,
|
|
270
|
+
args: [{ transform: booleanAttribute }]
|
|
267
271
|
}], maxDecimals: [{
|
|
268
272
|
type: Input
|
|
269
273
|
}], placeholderChar: [{
|
|
@@ -276,4 +280,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
276
280
|
type: ViewChildren,
|
|
277
281
|
args: ['matInput']
|
|
278
282
|
}] } });
|
|
279
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZHVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kdXJhdGlvbi9tYXRlcmlhbC5kdXJhdGlvbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2R1cmF0aW9uL21hdGVyaWFsLmR1cmF0aW9uLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFHTCxRQUFRLEVBR1IsWUFBWSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFHTCxpQkFBaUIsRUFJakIsVUFBVSxHQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEIsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RGLE9BQU8sRUFBZ0IseUJBQXlCLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3JELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHeEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7O0FBRXhDLE1BQU0sc0JBQXNCLEdBQWE7SUFDdkMsT0FBTyxFQUFFLGlCQUFpQjtJQUMxQixXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxD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c0IsQ0FBQyxtQkFDbEIsdUJBQXVCLENBQUMsTUFBTTs7MEJBc0Q1QyxRQUFRO3lDQXZDRixRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFFTyxRQUFRO3NCQUFwQixLQUFLO2dCQVdHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRW9CLFNBQVM7c0JBQWxDLFlBQVk7dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLFxuICBQcm92aWRlcixcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGRyZW4sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2NvcmUnO1xuaW1wb3J0IHtcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFVudHlwZWRGb3JtQnVpbGRlcixcbiAgVW50eXBlZEZvcm1Db250cm9sLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3JzLFxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHsgREVGQVVMVF9QTEFDRUhPTERFUl9DSEFSIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IGlzQmxhbmtTdHJpbmcsIGlzTmlsLCBpc05pbE9yQmxhbmssIGlzTm90TmlsQm9vbGVhbiB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQsIG1vdmVJbnB1dENhcmV0VG9TZXBhcmF0b3IsIHNldFRhYkluZGV4IH0gZnJvbSAnLi4vLi4vaW5wdXRzJztcbmltcG9ydCB7IGlzRm9jdXNhYmxlRWxlbWVudCB9IGZyb20gJy4uLy4uL2ZvY3VzYWJsZSc7XG5pbXBvcnQgeyBERUZBVUxUX01BWF9ERUNJTUFMUywgcGFyc2VEdXJhdGlvbiB9IGZyb20gJy4vZHVyYXRpb24udXRpbHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2UgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IEFwcEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnLi4vLi4vZm9ybS9maWVsZC5tb2RlbCc7XG5pbXBvcnQgeyBEYXRlVXRpbHMgfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RHVyYXRpb24pLFxuICBtdWx0aTogdHJ1ZSxcbn07XG5cbmNvbnN0IEhPVVJfVElNRV9QQVRURVJOID0gL1swLTldXFxkXFxkOlswLTVdXFxkLztcbmNvbnN0IERVUkFUSU9OX01BU0sgPSBbL1xcZC8sIC9cXGQvLCAvXFxkLywgJzonLCAvWzAtNV0vLCAvXFxkL107XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWR1cmF0aW9uLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmR1cmF0aW9uLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5kdXJhdGlvbi5zY3NzJ10sXG4gIHByb3ZpZGVyczogW0RFRkFVTFRfVkFMVUVfQUNDRVNTT1JdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTWF0RHVyYXRpb24gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIElucHV0RWxlbWVudCB7XG4gIHByaXZhdGUgX3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSB3cml0aW5nID0gdHJ1ZTtcbiAgcHJpdmF0ZSBkaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGFiaW5kZXg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmFsdWU6IG51bWJlcjtcblxuICB0ZXh0Q29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBtYXNraXRvUGxhY2Vob2xkZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgZHVyYXRpb25NYXNrID0gRFVSQVRJT05fTUFTSztcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogVW50eXBlZEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogQXBwRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IE1hdEZvcm1GaWVsZEFwcGVhcmFuY2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcXVpcmVkOiBib29sZWFuO1xuICBASW5wdXQoKSBjb21wYWN0ID0gZmFsc2U7XG4gIEBJbnB1dCgpIG1heERlY2ltYWxzOiBudW1iZXIgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ21hdElucHV0JykgbWF0SW5wdXRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgcHJvdGVjdGVkIGRheVVuaXQ6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8TW9tZW50PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZVxuICApIHtcbiAgICB0aGlzLmRheVVuaXQgPSB0cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRBWV9VTklUJyk7XG4gICAgdGhpcy5tYXNraXRvUGxhY2Vob2xkZXIgPSB0cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRVUkFUSU9OX1BMQUNFSE9MREVSJyk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5tYXhEZWNpbWFscykge1xuICAgICAgaWYgKHRoaXMubWF4RGVjaW1hbHMgPCAwKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIGF0dHJpYnV0ZSAnbWF4RGVjaW1hbHMnLiBNdXN0IGEgcG9zaXRpdmUgdmFsdWUuXCIpO1xuICAgICAgICB0aGlzLm1heERlY2ltYWxzID0gREVGQVVMVF9NQVhfREVDSU1BTFM7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMubWF4RGVjaW1hbHMgPCBERUZBVUxUX01BWF9ERUNJTUFMUykge1xuICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgYEludmFsaWQgYXR0cmlidXRlICdtYXhEZWNpbWFscycgLSBWYWx1ZSBzaG91bGQgYmUgbW9yZSB0aGFuICR7REVGQVVMVF9NQVhfREVDSU1BTFN9LCBvdGhlcndpc2UgdGhlIHJvdW5kIHRyaXAgY29udmVyc2lvbiB3aWxsIGxvc2UgbWludXRlcy5gXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZvcm1Db250cm9sID1cbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgfHwgKHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmICh0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgVW50eXBlZEZvcm1Db250cm9sKSk7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgJ2Zvcm1Db250cm9sJyBvciAnZm9ybUNvbnRyb2xOYW1lJyBpbiA8bWF0LWR1cmF0aW9uLWZpZWxkPi5cIik7XG5cbiAgICB0aGlzLnJlcXVpcmVkID0gaXNOb3ROaWxCb29sZWFuKHRoaXMucmVxdWlyZWQpXG4gICAgICA/IHRoaXMucmVxdWlyZWRcbiAgICAgIDogdGhpcy5mb3JtQ29udHJvbC52YWxpZGF0b3IgPT09IFZhbGlkYXRvcnMucmVxdWlyZWQgfHwgaXNCbGFua1N0cmluZyh0aGlzLnJlcXVpcmVkKTtcblxuICAgIC8vIFJlZGlyZWN0IGVycm9ycyBmcm9tIG1haW4gY29udHJvbCwgaW50byBkYXkgc3ViIGNvbnRyb2xcbiAgICBjb25zdCAkZXJyb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbGlkYXRpb25FcnJvcnM+KG51bGwpO1xuICAgIHRoaXMudGV4dENvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgbnVsbCk7XG4gICAgdGhpcy50ZXh0Q29udHJvbC5zZXRWYWxpZGF0b3JzKFxuICAgICAgdGhpcy5yZXF1aXJlZFxuICAgICAgICA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCAoKSA9PiAkZXJyb3IuZ2V0VmFsdWUoKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKEhPVVJfVElNRV9QQVRURVJOKV1cbiAgICAgICAgOiBbKCkgPT4gJGVycm9yLmdldFZhbHVlKCksIFZhbGlkYXRvcnMucGF0dGVybihIT1VSX1RJTUVfUEFUVEVSTildXG4gICAgKTtcblxuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi5hZGQodGhpcy50ZXh0Q29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkZvcm1DaGFuZ2UodmFsdWUpKSk7XG5cbiAgICAvLyBMaXN0ZW4gc3RhdHVzIGNoYW5nZXMgb3V0c2lkZSB0aGUgY29tcG9uZW50IChlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMud3JpdGluZyAmJiAhdGhpcy5kaXNhYmxpbmcpKSAvLyBTa2lwXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICAgICAgJGVycm9yLm5leHQodGhpcy5mb3JtQ29udHJvbC5lcnJvcnMpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSAnVkFMSUQnKSB7XG4gICAgICAgICAgICAkZXJyb3IubmV4dChudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy50ZXh0Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuXG4gICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAodGhpcy53cml0aW5nKSByZXR1cm47XG5cbiAgICAvLyBjb25zb2xlLmRlYnVnKCdbbWF0LWR1cmF0aW9uXSB3cml0ZVZhbHVlOicsIG9iaik7XG5cbiAgICBpZiAoaXNOaWwob2JqKSkge1xuICAgICAgdGhpcy53cml0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICB0aGlzLl92YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSBvYmo7XG4gICAgaWYgKGlzTmFOKHRoaXMuX3ZhbHVlKSkge1xuICAgICAgLy8gaW52YWxpZCB2YWx1ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZyhgW21hdC1kdXJhdGlvbl0gRm9ybWF0dGVkIGhvdXI6ICR7dGhpcy5fdmFsdWV9IHRvICR7Zm9ybWF0RHVyYXRpb24odGhpcy5fdmFsdWUpfWApO1xuXG4gICAgLy8gU2V0IGZvcm0gdmFsdWVcblxuICAgIHRoaXMudGV4dENvbnRyb2wucGF0Y2hWYWx1ZShEYXRlVXRpbHMuZHVyYXRpb25Ub1N0cmluZyh0aGlzLl92YWx1ZSwgdGhpcy5kYXlVbml0KSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5kaXNhYmxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLnRleHRDb250cm9sLmRpc2FibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50ZXh0Q29udHJvbC5lbmFibGUoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIG9uRm9ybUNoYW5nZSh2YWx1ZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyaXRpbmcgfHwgdmFsdWUgPT09IHRoaXMubWFza2l0b1BsYWNlaG9sZGVyIHx8IGlzTmlsT3JCbGFuayh2YWx1ZSkpIHJldHVybjsgLy8gU2tpcFxuICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW21hdC1kdXJhdGlvbl0gb25Gb3JtQ2hhbmdlOicsIHZhbHVlKTtcblxuICAgIGlmICh0aGlzLnRleHRDb250cm9sLmhhc0Vycm9yKCdwYXR0ZXJuJykgfHwgdGhpcy50ZXh0Q29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgdGhpcy5mb3JtQ29udHJvbC5tYXJrQXNQZW5kaW5nKCk7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldEVycm9ycyh7XG4gICAgICAgIHBhdHRlcm46IHRoaXMudGV4dENvbnRyb2wuZXJyb3JzLnBhdHRlcm4sXG4gICAgICAgIHJlcXVpcmVkOiB0aGlzLnRleHRDb250cm9sLmVycm9ycy5yZXF1aXJlZCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSBwYXJzZUR1cmF0aW9uKHZhbHVlIHx8ICcnLCB0aGlzLm1heERlY2ltYWxzLCB0aGlzLnBsYWNlaG9sZGVyQ2hhcik7XG5cbiAgICAvLyBERUJVR1xuICAgIC8vY29uc29sZS5kZWJ1ZygnW21hdC1kdXJhdGlvbl0gU2V0dGluZyBkdXJhdGlvbjogJywgdGhpcy5fdmFsdWUpO1xuXG4gICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHRoaXMuX3ZhbHVlLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgLy90aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy50ZXh0Q29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBwcmV2ZW50RXZlbnQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICghdGhpcy5tYXRJbnB1dHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB0aGlzLm1hdElucHV0c1swXTsgLy8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KGVsZW1lbnRSZWYpKSB7XG4gICAgICAgIGVsZW1lbnRSZWYuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG1vdmVDYXJldFRvU2VwYXJhdG9yKGV2ZW50OiBhbnksIGZvcndhcmQ6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IHNlcGFyYXRvclxuICAgIHJldHVybiBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yKGV2ZW50LCAnOicsIGZvcndhcmQpO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuOyAvLyBza2lwXG5cbiAgICAvLyBGb2N1cyB0byBmaXJzdCBpbnB1dFxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tYXRJbnB1dHMuZm9yRWFjaCgoZWxlbWVudFJlZiwgaW5kZXgpID0+IHtcbiAgICAgICAgc2V0VGFiSW5kZXgoZWxlbWVudFJlZiwgdGhpcy5fdGFiaW5kZXggKyBpbmRleCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgbWFya0ZvckNoZWNrKCkge1xuICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gIH1cbn1cbiIsIjwhLS0gcmVhZG9ubHkgLS0+XG5AaWYgKHJlYWRvbmx5KSB7XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICBjbGFzcz1cIm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXCJcbiAgICA+XG4gICAgQGlmIChmbG9hdExhYmVsICE9PSAnbmV2ZXInICYmICEhcGxhY2Vob2xkZXIpIHtcbiAgICAgIDxtYXQtbGFiZWwgdHJhbnNsYXRlPkNPTU1PTi5USU1FPC9tYXQtbGFiZWw+XG4gICAgfVxuICAgIDxpbnB1dCBtYXRJbnB1dCBoaWRkZW4gdHlwZT1cInRleHRcIiByZWFkb25seT1cInRydWVcIiBbZm9ybUNvbnRyb2xdPVwiZm9ybUNvbnRyb2xcIiAvPlxuICAgIDxpb24tdGV4dD57eyBmb3JtQ29udHJvbC52YWx1ZSB8IGR1cmF0aW9uIH19PC9pb24tdGV4dD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbn0gQGVsc2Uge1xuICA8IS0tIHdyaXRhYmxlIC0tPlxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtaW52YWxpZF09XCJmb3JtQ29udHJvbC50b3VjaGVkICYmIGZvcm1Db250cm9sLmludmFsaWRcIlxuICAgID5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLlRJTUU8L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPGRpdiBtYXRQcmVmaXg+PG5nLWNvbnRlbnQgc2VsZWN0PVwiW21hdFByZWZpeF1cIj48L25nLWNvbnRlbnQ+PC9kaXY+XG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgI21hdElucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW21hc2tpdG9dPVwiJ0NPTU1PTi5EVVJBVElPTl9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfCBtYXNraXRvUGxhY2Vob2xkZXI6IGR1cmF0aW9uTWFza1wiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidDT01NT04uRFVSQVRJT05fUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAoa2V5ZG93bi50YWIpPVwibW92ZUNhcmV0VG9TZXBhcmF0b3IoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwibW92ZUNhcmV0VG9TZXBhcmF0b3IoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgKGtleXVwLmVzY2FwZSk9XCJwcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICAoYmx1cik9XCJjaGVja0lmVG91Y2hlZCgpXCJcbiAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleCAhPT0gdW5kZWZpbmVkID8gdGFiaW5kZXggKyAxIDogdW5kZWZpbmVkXCJcbiAgICAgIC8+XG4gICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgQGlmICghZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgdGV4dENvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKSkge1xuICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+XG4gICAgICAgIEVSUk9SLkZJRUxEX05PVF9WQUxJRF9QQVRURVJOXG4gICAgICA8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJykpIHtcbiAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01JTl9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NSU4nKSB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1pbiB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgfVxuICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpKSB7XG4gICAgICA8bWF0LWVycm9yPlxuICAgICAgICB7eyAoY29tcGFjdCA/ICdFUlJPUi5GSUVMRF9NQVhfQ09NUEFDVCcgOiAnRVJST1IuRklFTERfTUFYJykgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tYXggfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtYXQtZXJyb3JcIj48L25nLWNvbnRlbnQ+XG4gIDwvbWF0LWZvcm0tZmllbGQ+XG59XG5cbjwhLS0gd3JpdGFibGUgLS0+XG48bmctdGVtcGxhdGUgI3dyaXRhYmxlPlxuICA8bWF0LWZvcm0tZmllbGRcbiAgICBbZmxvYXRMYWJlbF09XCJmbG9hdExhYmVsIHwgYXNGbG9hdExhYmVsVHlwZVwiXG4gICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgW2NsYXNzLm1hdC1mb3JtLWZpZWxkLWRpc2FibGVkXT1cImZvcm1Db250cm9sLmRpc2FibGVkXCJcbiAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtaW52YWxpZF09XCJmb3JtQ29udHJvbC50b3VjaGVkICYmIGZvcm1Db250cm9sLmludmFsaWRcIlxuICAgID5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLlRJTUU8L21hdC1sYWJlbD5cbiAgICB9XG5cbiAgICA8ZGl2IG1hdFByZWZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD48L2Rpdj5cblxuICAgIDxpbnB1dFxuICAgICAgbWF0SW5wdXRcbiAgICAgICNtYXRJbnB1dFxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIFttYXNraXRvXT1cIidDT01NT04uRFVSQVRJT05fUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlIHwgbWFza2l0b1BsYWNlaG9sZGVyOiBkdXJhdGlvbk1hc2tcIlxuICAgICAgW2Zvcm1Db250cm9sXT1cInRleHRDb250cm9sXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCInQ09NTU9OLkRVUkFUSU9OX1BMQUNFSE9MREVSJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBbcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgICAgKGtleWRvd24udGFiKT1cIm1vdmVDYXJldFRvU2VwYXJhdG9yKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgKGtleWRvd24uc2hpZnQudGFiKT1cIm1vdmVDYXJldFRvU2VwYXJhdG9yKCRldmVudCwgZmFsc2UpXCJcbiAgICAgIChrZXl1cC5lc2NhcGUpPVwicHJldmVudEV2ZW50KCRldmVudClcIlxuICAgICAgKGJsdXIpPVwiY2hlY2tJZlRvdWNoZWQoKVwiXG4gICAgICBbdGFiaW5kZXhdPVwidGFiaW5kZXggIT09IHVuZGVmaW5lZCA/IHRhYmluZGV4ICsgMSA6IHVuZGVmaW5lZFwiXG4gICAgICAvPlxuXG4gICAgPCEtLSBlcnJvcnMgLS0+XG4gICAgQGlmICghZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgdGV4dENvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKSkge1xuICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+XG4gICAgICAgIEVSUk9SLkZJRUxEX05PVF9WQUxJRF9QQVRURVJOXG4gICAgICA8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSkge1xuICAgICAgPG1hdC1lcnJvciB0cmFuc2xhdGU+RVJST1IuRklFTERfUkVRVUlSRUQ8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignbWluJykpIHtcbiAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01JTl9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NSU4nKSB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1pbiB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgfVxuICAgIEBpZiAoZm9ybUNvbnRyb2wuaGFzRXJyb3IoJ21heCcpKSB7XG4gICAgICA8bWF0LWVycm9yPlxuICAgICAgICB7eyAoY29tcGFjdCA/ICdFUlJPUi5GSUVMRF9NQVhfQ09NUEFDVCcgOiAnRVJST1IuRklFTERfTUFYJykgfCB0cmFuc2xhdGU6IGZvcm1Db250cm9sLmVycm9ycy5tYXggfX1cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIH1cblxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZHVyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9tYXRlcmlhbC9kdXJhdGlvbi9tYXRlcmlhbC5kdXJhdGlvbi50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2R1cmF0aW9uL21hdGVyaWFsLmR1cmF0aW9uLmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGdCQUFnQixFQUNoQix1QkFBdUIsRUFFdkIsU0FBUyxFQUVULFVBQVUsRUFDVixLQUFLLEVBR0wsUUFBUSxFQUdSLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBR0wsaUJBQWlCLEVBSWpCLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBR3hCLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RixPQUFPLEVBQWdCLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3hDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7Ozs7Ozs7Ozs7OztBQUV4QyxNQUFNLHNCQUFzQixHQUFhO0lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FB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SEN0RHJDLGlxSUFvSEE7OzRGRDNEYSxXQUFXO2tCQVB2QixTQUFTOytCQUNFLG9CQUFvQixhQUduQixDQUFDLHNCQUFzQixDQUFDLG1CQUNsQix1QkFBdUIsQ0FBQyxNQUFNOzswQkFzRDVDLFFBQVE7eUNBdkM2QixRQUFRO3NCQUEvQyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ2tDLFFBQVE7c0JBQS9DLEtBQUs7dUJBQUMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBQ0UsUUFBUTtzQkFBL0MsS0FBSzt1QkFBQyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRTtnQkFDRSxPQUFPO3NCQUE5QyxLQUFLO3VCQUFDLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFO2dCQUM3QixXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRU8sUUFBUTtzQkFBcEIsS0FBSztnQkFXRyxTQUFTO3NCQUFqQixLQUFLO2dCQUVvQixTQUFTO3NCQUFsQyxZQUFZO3VCQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBib29sZWFuQXR0cmlidXRlLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgUHJvdmlkZXIsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkcmVuLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBsYXRmb3JtIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7XG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXG4gIE5HX1ZBTFVFX0FDQ0VTU09SLFxuICBVbnR5cGVkRm9ybUJ1aWxkZXIsXG4gIFVudHlwZWRGb3JtQ29udHJvbCxcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9ycyxcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUiB9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBpc0JsYW5rU3RyaW5nLCBpc05pbCwgaXNOaWxPckJsYW5rLCBpc05vdE5pbEJvb2xlYW4gfSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHsgSW5wdXRFbGVtZW50LCBtb3ZlSW5wdXRDYXJldFRvU2VwYXJhdG9yLCBzZXRUYWJJbmRleCB9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQgeyBpc0ZvY3VzYWJsZUVsZW1lbnQgfSBmcm9tICcuLi8uLi9mb2N1c2FibGUnO1xuaW1wb3J0IHsgREVGQVVMVF9NQVhfREVDSU1BTFMsIHBhcnNlRHVyYXRpb24gfSBmcm9tICcuL2R1cmF0aW9uLnV0aWxzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBBcHBGbG9hdExhYmVsVHlwZSB9IGZyb20gJy4uLy4uL2Zvcm0vZmllbGQubW9kZWwnO1xuaW1wb3J0IHsgRGF0ZVV0aWxzIH0gZnJvbSAnLi4vLi4vZGF0ZXMnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdER1cmF0aW9uKSxcbiAgbXVsdGk6IHRydWUsXG59O1xuXG5jb25zdCBIT1VSX1RJTUVfUEFUVEVSTiA9IC9bMC05XVxcZFxcZDpbMC01XVxcZC87XG5jb25zdCBEVVJBVElPTl9NQVNLID0gWy9cXGQvLCAvXFxkLywgL1xcZC8sICc6JywgL1swLTVdLywgL1xcZC9dO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kdXJhdGlvbi1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kdXJhdGlvbi5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuZHVyYXRpb24uc2NzcyddLFxuICBwcm92aWRlcnM6IFtERUZBVUxUX1ZBTFVFX0FDQ0VTU09SXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE1hdER1cmF0aW9uIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQge1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgX29uQ2hhbmdlQ2FsbGJhY2s6IChfOiBhbnkpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9vblRvdWNoZWRDYWxsYmFjazogKCkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgd3JpdGluZyA9IHRydWU7XG4gIHByaXZhdGUgZGlzYWJsaW5nID0gZmFsc2U7XG4gIHByaXZhdGUgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByaXZhdGUgX3ZhbHVlOiBudW1iZXI7XG5cbiAgdGV4dENvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbDtcbiAgbWFza2l0b1BsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGR1cmF0aW9uTWFzayA9IERVUkFUSU9OX01BU0s7XG5cbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBBcHBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCh7IHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZSB9KSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KHsgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlIH0pIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgbWF4RGVjaW1hbHM6IG51bWJlciA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckNoYXI6IHN0cmluZyA9IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUjtcblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZHJlbignbWF0SW5wdXQnKSBtYXRJbnB1dHM6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPjtcblxuICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwcm90ZWN0ZWQgZGF5VW5pdDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHBsYXRmb3JtOiBQbGF0Zm9ybSxcbiAgICBwcml2YXRlIGRhdGVBZGFwdGVyOiBEYXRlQWRhcHRlcjxNb21lbnQ+LFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IFVudHlwZWRGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkge1xuICAgIHRoaXMuZGF5VW5pdCA9IHRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uREFZX1VOSVQnKTtcbiAgICB0aGlzLm1hc2tpdG9QbGFjZWhvbGRlciA9IHRyYW5zbGF0ZS5pbnN0YW50KCdDT01NT04uRFVSQVRJT05fUExBQ0VIT0xERVInKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm1heERlY2ltYWxzKSB7XG4gICAgICBpZiAodGhpcy5tYXhEZWNpbWFscyA8IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihcIkludmFsaWQgYXR0cmlidXRlICdtYXhEZWNpbWFscycuIE11c3QgYSBwb3NpdGl2ZSB2YWx1ZS5cIik7XG4gICAgICAgIHRoaXMubWF4RGVjaW1hbHMgPSBERUZBVUxUX01BWF9ERUNJTUFMUztcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5tYXhEZWNpbWFscyA8IERFRkFVTFRfTUFYX0RFQ0lNQUxTKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICBgSW52YWxpZCBhdHRyaWJ1dGUgJ21heERlY2ltYWxzJyAtIFZhbHVlIHNob3VsZCBiZSBtb3JlIHRoYW4gJHtERUZBVUxUX01BWF9ERUNJTUFMU30sIG90aGVyd2lzZSB0aGUgcm91bmQgdHJpcCBjb252ZXJzaW9uIHdpbGwgbG9zZSBtaW51dGVzLmBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5tYXhEZWNpbWFscyA9IERFRkFVTFRfTUFYX0RFQ0lNQUxTO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuZm9ybUNvbnRyb2wgPVxuICAgICAgdGhpcy5mb3JtQ29udHJvbCB8fCAodGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgKHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBVbnR5cGVkRm9ybUNvbnRyb2wpKTtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcihcIk1pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSAnZm9ybUNvbnRyb2wnIG9yICdmb3JtQ29udHJvbE5hbWUnIGluIDxtYXQtZHVyYXRpb24tZmllbGQ+LlwiKTtcblxuICAgIHRoaXMucmVxdWlyZWQgPSBpc05vdE5pbEJvb2xlYW4odGhpcy5yZXF1aXJlZClcbiAgICAgID8gdGhpcy5yZXF1aXJlZFxuICAgICAgOiB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCB8fCBpc0JsYW5rU3RyaW5nKHRoaXMucmVxdWlyZWQpO1xuXG4gICAgLy8gUmVkaXJlY3QgZXJyb3JzIGZyb20gbWFpbiBjb250cm9sLCBpbnRvIGRheSBzdWIgY29udHJvbFxuICAgIGNvbnN0ICRlcnJvciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8VmFsaWRhdGlvbkVycm9ycz4obnVsbCk7XG4gICAgdGhpcy50ZXh0Q29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCBudWxsKTtcbiAgICB0aGlzLnRleHRDb250cm9sLnNldFZhbGlkYXRvcnMoXG4gICAgICB0aGlzLnJlcXVpcmVkXG4gICAgICAgID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsICgpID0+ICRlcnJvci5nZXRWYWx1ZSgpLCBWYWxpZGF0b3JzLnBhdHRlcm4oSE9VUl9USU1FX1BBVFRFUk4pXVxuICAgICAgICA6IFsoKSA9PiAkZXJyb3IuZ2V0VmFsdWUoKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKEhPVVJfVElNRV9QQVRURVJOKV1cbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZCh0aGlzLnRleHRDb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSh2YWx1ZSkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyBvdXRzaWRlIHRoZSBjb21wb25lbnQgKGUuZy4gd2hlbiBzZXRFcnJvcnMoKSBpcyBjYWxsaW5nIG9uIHRoZSBmb3JtQ29udHJvbClcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5yZWFkb25seSAmJiAhdGhpcy53cml0aW5nICYmICF0aGlzLmRpc2FibGluZykpIC8vIFNraXBcbiAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ0lOVkFMSUQnKSB7XG4gICAgICAgICAgICAkZXJyb3IubmV4dCh0aGlzLmZvcm1Db250cm9sLmVycm9ycyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICAgICRlcnJvci5uZXh0KG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnRleHRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG5cbiAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyaXRpbmcpIHJldHVybjtcblxuICAgIC8vIGNvbnNvbGUuZGVidWcoJ1ttYXQtZHVyYXRpb25dIHdyaXRlVmFsdWU6Jywgb2JqKTtcblxuICAgIGlmIChpc05pbChvYmopKSB7XG4gICAgICB0aGlzLndyaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IG9iajtcbiAgICBpZiAoaXNOYU4odGhpcy5fdmFsdWUpKSB7XG4gICAgICAvLyBpbnZhbGlkIHZhbHVlXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy53cml0aW5nID0gdHJ1ZTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKGBbbWF0LWR1cmF0aW9uXSBGb3JtYXR0ZWQgaG91cjogJHt0aGlzLl92YWx1ZX0gdG8gJHtmb3JtYXREdXJhdGlvbih0aGlzLl92YWx1ZSl9YCk7XG5cbiAgICAvLyBTZXQgZm9ybSB2YWx1ZVxuXG4gICAgdGhpcy50ZXh0Q29udHJvbC5wYXRjaFZhbHVlKERhdGVVdGlscy5kdXJhdGlvblRvU3RyaW5nKHRoaXMuX3ZhbHVlLCB0aGlzLmRheVVuaXQpLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLmRpc2FibGluZyA9IHRydWU7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudGV4dENvbnRyb2wuZGlzYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnRleHRDb250cm9sLmVuYWJsZSh7IG9ubHlTZWxmOiB0cnVlLCBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgb25Gb3JtQ2hhbmdlKHZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3JpdGluZyB8fCB2YWx1ZSA9PT0gdGhpcy5tYXNraXRvUGxhY2Vob2xkZXIgfHwgaXNOaWxPckJsYW5rKHZhbHVlKSkgcmV0dXJuOyAvLyBTa2lwXG4gICAgdGhpcy53cml0aW5nID0gdHJ1ZTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWR1cmF0aW9uXSBvbkZvcm1DaGFuZ2U6JywgdmFsdWUpO1xuXG4gICAgaWYgKHRoaXMudGV4dENvbnRyb2wuaGFzRXJyb3IoJ3BhdHRlcm4nKSB8fCB0aGlzLnRleHRDb250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICB0aGlzLmZvcm1Db250cm9sLm1hcmtBc1BlbmRpbmcoKTtcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0RXJyb3JzKHtcbiAgICAgICAgcGF0dGVybjogdGhpcy50ZXh0Q29udHJvbC5lcnJvcnMucGF0dGVybixcbiAgICAgICAgcmVxdWlyZWQ6IHRoaXMudGV4dENvbnRyb2wuZXJyb3JzLnJlcXVpcmVkLFxuICAgICAgfSk7XG4gICAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHBhcnNlRHVyYXRpb24odmFsdWUgfHwgJycsIHRoaXMubWF4RGVjaW1hbHMsIHRoaXMucGxhY2Vob2xkZXJDaGFyKTtcblxuICAgIC8vIERFQlVHXG4gICAgLy9jb25zb2xlLmRlYnVnKCdbbWF0LWR1cmF0aW9uXSBTZXR0aW5nIGR1cmF0aW9uOiAnLCB0aGlzLl92YWx1ZSk7XG5cbiAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUodGhpcy5fdmFsdWUsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAvL3RoaXMuZm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xuICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHRoaXMuX3ZhbHVlKTtcbiAgfVxuXG4gIGNoZWNrSWZUb3VjaGVkKCkge1xuICAgIGlmICh0aGlzLnRleHRDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByZXZlbnRFdmVudChldmVudDogRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLm1hdElucHV0cy5sZW5ndGgpIHJldHVybjtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMubWF0SW5wdXRzWzBdOyAvLyBnZXQgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgIGlmIChpc0ZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudFJlZikpIHtcbiAgICAgICAgZWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbW92ZUNhcmV0VG9TZXBhcmF0b3IoZXZlbnQ6IGFueSwgZm9yd2FyZDogYm9vbGVhbik6IGJvb2xlYW4ge1xuICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgc2VwYXJhdG9yXG4gICAgcmV0dXJuIG1vdmVJbnB1dENhcmV0VG9TZXBhcmF0b3IoZXZlbnQsICc6JywgZm9yd2FyZCk7XG4gIH1cblxuICAvKiAtLSBwcm90ZWN0ZWQgbWV0aG9kIC0tICovXG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hdElucHV0cy5mb3JFYWNoKChlbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUYWJJbmRleChlbGVtZW50UmVmLCB0aGlzLl90YWJpbmRleCArIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuIiwiPCEtLSByZWFkb25seSAtLT5cbkBpZiAocmVhZG9ubHkpIHtcbiAgPG1hdC1mb3JtLWZpZWxkXG4gICAgW2Zsb2F0TGFiZWxdPVwiZmxvYXRMYWJlbCB8IGFzRmxvYXRMYWJlbFR5cGVcIlxuICAgIFthcHBlYXJhbmNlXT1cImFwcGVhcmFuY2VcIlxuICAgIGNsYXNzPVwibWF0LWZvcm0tZmllbGQtZGlzYWJsZWRcIlxuICAgID5cbiAgICBAaWYgKGZsb2F0TGFiZWwgIT09ICduZXZlcicgJiYgISFwbGFjZWhvbGRlcikge1xuICAgICAgPG1hdC1sYWJlbCB0cmFuc2xhdGU+Q09NTU9OLlRJTUU8L21hdC1sYWJlbD5cbiAgICB9XG4gICAgPGlucHV0IG1hdElucHV0IGhpZGRlbiB0eXBlPVwidGV4dFwiIHJlYWRvbmx5PVwidHJ1ZVwiIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiIC8+XG4gICAgPGlvbi10ZXh0Pnt7IGZvcm1Db250cm9sLnZhbHVlIHwgZHVyYXRpb24gfX08L2lvbi10ZXh0PlxuICA8L21hdC1mb3JtLWZpZWxkPlxufSBAZWxzZSB7XG4gIDwhLS0gd3JpdGFibGUgLS0+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5tYXQtZm9ybS1maWVsZC1pbnZhbGlkXT1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuaW52YWxpZFwiXG4gICAgPlxuICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uVElNRTwvbWF0LWxhYmVsPlxuICAgIH1cbiAgICA8ZGl2IG1hdFByZWZpeD48bmctY29udGVudCBzZWxlY3Q9XCJbbWF0UHJlZml4XVwiPjwvbmctY29udGVudD48L2Rpdj5cbiAgICA8aW5wdXRcbiAgICAgIG1hdElucHV0XG4gICAgICAjbWF0SW5wdXRcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICBbbWFza2l0b109XCInQ09NTU9OLkRVUkFUSU9OX1BMQUNFSE9MREVSJyB8IHRyYW5zbGF0ZSB8IG1hc2tpdG9QbGFjZWhvbGRlcjogZHVyYXRpb25NYXNrXCJcbiAgICAgIFtmb3JtQ29udHJvbF09XCJ0ZXh0Q29udHJvbFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0NPTU1PTi5EVVJBVElPTl9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGVcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIChrZXlkb3duLnRhYik9XCJtb3ZlQ2FyZXRUb1NlcGFyYXRvcigkZXZlbnQsIHRydWUpXCJcbiAgICAgIChrZXlkb3duLnNoaWZ0LnRhYik9XCJtb3ZlQ2FyZXRUb1NlcGFyYXRvcigkZXZlbnQsIGZhbHNlKVwiXG4gICAgICAoa2V5dXAuZXNjYXBlKT1cInByZXZlbnRFdmVudCgkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cImNoZWNrSWZUb3VjaGVkKClcIlxuICAgICAgW3RhYmluZGV4XT1cInRhYmluZGV4ICE9PSB1bmRlZmluZWQgPyB0YWJpbmRleCArIDEgOiB1bmRlZmluZWRcIlxuICAgICAgLz5cbiAgICA8IS0tIGVycm9ycyAtLT5cbiAgICBAaWYgKCFmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB0ZXh0Q29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5cbiAgICAgICAgRVJST1IuRklFTERfTk9UX1ZBTElEX1BBVFRFUk5cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdtaW4nKSkge1xuICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAge3sgKGNvbXBhY3QgPyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01JTicpIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMubWluIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignbWF4JykpIHtcbiAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1heCB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgfVxuICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIm1hdC1lcnJvclwiPjwvbmctY29udGVudD5cbiAgPC9tYXQtZm9ybS1maWVsZD5cbn1cblxuPCEtLSB3cml0YWJsZSAtLT5cbjxuZy10ZW1wbGF0ZSAjd3JpdGFibGU+XG4gIDxtYXQtZm9ybS1maWVsZFxuICAgIFtmbG9hdExhYmVsXT1cImZsb2F0TGFiZWwgfCBhc0Zsb2F0TGFiZWxUeXBlXCJcbiAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICBbY2xhc3MubWF0LWZvcm0tZmllbGQtZGlzYWJsZWRdPVwiZm9ybUNvbnRyb2wuZGlzYWJsZWRcIlxuICAgIFtjbGFzcy5tYXQtZm9ybS1maWVsZC1pbnZhbGlkXT1cImZvcm1Db250cm9sLnRvdWNoZWQgJiYgZm9ybUNvbnRyb2wuaW52YWxpZFwiXG4gICAgPlxuICAgIEBpZiAoZmxvYXRMYWJlbCAhPT0gJ25ldmVyJyAmJiAhIXBsYWNlaG9sZGVyKSB7XG4gICAgICA8bWF0LWxhYmVsIHRyYW5zbGF0ZT5DT01NT04uVElNRTwvbWF0LWxhYmVsPlxuICAgIH1cblxuICAgIDxkaXYgbWF0UHJlZml4PjxuZy1jb250ZW50IHNlbGVjdD1cIlttYXRQcmVmaXhdXCI+PC9uZy1jb250ZW50PjwvZGl2PlxuXG4gICAgPGlucHV0XG4gICAgICBtYXRJbnB1dFxuICAgICAgI21hdElucHV0XG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgW21hc2tpdG9dPVwiJ0NPTU1PTi5EVVJBVElPTl9QTEFDRUhPTERFUicgfCB0cmFuc2xhdGUgfCBtYXNraXRvUGxhY2Vob2xkZXI6IGR1cmF0aW9uTWFza1wiXG4gICAgICBbZm9ybUNvbnRyb2xdPVwidGV4dENvbnRyb2xcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidDT01NT04uRFVSQVRJT05fUExBQ0VIT0xERVInIHwgdHJhbnNsYXRlXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAoa2V5ZG93bi50YWIpPVwibW92ZUNhcmV0VG9TZXBhcmF0b3IoJGV2ZW50LCB0cnVlKVwiXG4gICAgICAoa2V5ZG93bi5zaGlmdC50YWIpPVwibW92ZUNhcmV0VG9TZXBhcmF0b3IoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgKGtleXVwLmVzY2FwZSk9XCJwcmV2ZW50RXZlbnQoJGV2ZW50KVwiXG4gICAgICAoYmx1cik9XCJjaGVja0lmVG91Y2hlZCgpXCJcbiAgICAgIFt0YWJpbmRleF09XCJ0YWJpbmRleCAhPT0gdW5kZWZpbmVkID8gdGFiaW5kZXggKyAxIDogdW5kZWZpbmVkXCJcbiAgICAgIC8+XG5cbiAgICA8IS0tIGVycm9ycyAtLT5cbiAgICBAaWYgKCFmb3JtQ29udHJvbC5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiB0ZXh0Q29udHJvbC5oYXNFcnJvcigncGF0dGVybicpKSB7XG4gICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5cbiAgICAgICAgRVJST1IuRklFTERfTk9UX1ZBTElEX1BBVFRFUk5cbiAgICAgIDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdyZXF1aXJlZCcpKSB7XG4gICAgICA8bWF0LWVycm9yIHRyYW5zbGF0ZT5FUlJPUi5GSUVMRF9SRVFVSVJFRDwvbWF0LWVycm9yPlxuICAgIH1cbiAgICBAaWYgKGZvcm1Db250cm9sLmhhc0Vycm9yKCdtaW4nKSkge1xuICAgICAgPG1hdC1lcnJvcj5cbiAgICAgICAge3sgKGNvbXBhY3QgPyAnRVJST1IuRklFTERfTUlOX0NPTVBBQ1QnIDogJ0VSUk9SLkZJRUxEX01JTicpIHwgdHJhbnNsYXRlOiBmb3JtQ29udHJvbC5lcnJvcnMubWluIH19XG4gICAgICA8L21hdC1lcnJvcj5cbiAgICB9XG4gICAgQGlmIChmb3JtQ29udHJvbC5oYXNFcnJvcignbWF4JykpIHtcbiAgICAgIDxtYXQtZXJyb3I+XG4gICAgICAgIHt7IChjb21wYWN0ID8gJ0VSUk9SLkZJRUxEX01BWF9DT01QQUNUJyA6ICdFUlJPUi5GSUVMRF9NQVgnKSB8IHRyYW5zbGF0ZTogZm9ybUNvbnRyb2wuZXJyb3JzLm1heCB9fVxuICAgICAgPC9tYXQtZXJyb3I+XG4gICAgfVxuXG4gICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWF0LWVycm9yXCI+PC9uZy1jb250ZW50PlxuICA8L21hdC1mb3JtLWZpZWxkPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|