@gravitee/ui-particles-angular 7.26.0 → 7.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2,8 +2,8 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
2
  import { Component, HostBinding, Input, Optional, Self, ViewChild } from '@angular/core';
3
3
  import { MatFormFieldControl } from '@angular/material/form-field';
4
4
  import { isEmpty } from 'lodash';
5
- import { fromEvent, Subject } from 'rxjs';
6
- import { distinctUntilChanged, map, startWith } from 'rxjs/operators';
5
+ import { fromEvent, of, Subject } from 'rxjs';
6
+ import { distinctUntilChanged, map, startWith, switchMap, tap } from 'rxjs/operators';
7
7
  import * as i0 from "@angular/core";
8
8
  import * as i1 from "@angular/forms";
9
9
  import * as i2 from "@angular/cdk/a11y";
@@ -47,6 +47,7 @@ export class GioFormTagsInputComponent {
47
47
  this.focused = false;
48
48
  this._required = false;
49
49
  this._disabled = false;
50
+ this.displayValueCache = {};
50
51
  // From ControlValueAccessor interface
51
52
  this.describedBy = '';
52
53
  // Replace the provider from above with this.
@@ -66,6 +67,21 @@ export class GioFormTagsInputComponent {
66
67
  this._autocompleteOptions = v;
67
68
  this.initAutocomplete();
68
69
  }
70
+ /**
71
+ * Get the label of an option value.
72
+ * To use with autocompleteOptions label & value mode.
73
+ * Function called each time a tag needs to be displayed id defined.
74
+ */
75
+ set displayValueWith(displayValueWith) {
76
+ this._displayValueWith = (value) => {
77
+ if (this.displayValueCache[value]) {
78
+ return of(this.displayValueCache[value]);
79
+ }
80
+ return displayValueWith(value).pipe(tap(label => {
81
+ this.displayValueCache[value] = label;
82
+ }));
83
+ };
84
+ }
69
85
  set tagInput(v) {
70
86
  this._tagInput = v;
71
87
  this.initAutocomplete();
@@ -186,8 +202,17 @@ export class GioFormTagsInputComponent {
186
202
  }
187
203
  initAutocomplete() {
188
204
  if (this._autocompleteOptions && this._tagInput?.nativeElement) {
189
- this.autocompleteFilteredOptions$ = fromEvent(this._tagInput.nativeElement, 'keyup').pipe(startWith([]), map(() => {
190
- return (this._autocompleteOptions ?? []).filter(defaultHeader => defaultHeader.toLowerCase().includes((this._tagInput?.nativeElement.value ?? '').toLowerCase()));
205
+ this.autocompleteFilteredOptions$ = fromEvent(this._tagInput.nativeElement, 'keyup').pipe(startWith([]), switchMap(() => {
206
+ if (typeof this._autocompleteOptions === 'function') {
207
+ return this._autocompleteOptions(this._tagInput?.nativeElement.value ?? '').pipe(map(options => sanitizeAutocompleteOptions(options)),
208
+ // Add options to displayValueCache to avoid call on select
209
+ tap(options => {
210
+ options.forEach(option => {
211
+ this.displayValueCache[option.value] = option.label;
212
+ });
213
+ }));
214
+ }
215
+ return of(defaultAutocompleteFilter(this._autocompleteOptions ?? [], this._tagInput?.nativeElement.value ?? ''));
191
216
  }), distinctUntilChanged());
192
217
  this.changeDetectorRef.detectChanges();
193
218
  }
@@ -195,12 +220,12 @@ export class GioFormTagsInputComponent {
195
220
  }
196
221
  GioFormTagsInputComponent.nextId = 0;
197
222
  GioFormTagsInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormTagsInputComponent, deps: [{ token: i1.NgControl, optional: true, self: true }, { token: i0.ElementRef }, { token: i2.FocusMonitor }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
198
- GioFormTagsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioFormTagsInputComponent, selector: "gio-form-tags-input", inputs: { ariaLabel: ["aria-label", "ariaLabel"], addOnBlur: "addOnBlur", tagValidationHook: "tagValidationHook", autocompleteOptions: "autocompleteOptions", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, providers: [
223
+ GioFormTagsInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: GioFormTagsInputComponent, selector: "gio-form-tags-input", inputs: { ariaLabel: ["aria-label", "ariaLabel"], addOnBlur: "addOnBlur", tagValidationHook: "tagValidationHook", autocompleteOptions: "autocompleteOptions", displayValueWith: "displayValueWith", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, providers: [
199
224
  {
200
225
  provide: MatFormFieldControl,
201
226
  useExisting: GioFormTagsInputComponent,
202
227
  },
203
- ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let value of autocompleteFilteredOptions$ | async\" [value]=\"value\">\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i7.AsyncPipe } });
228
+ ], viewQueries: [{ propertyName: "tagInput", first: true, predicate: ["tagInput"], descendants: true }], ngImport: i0, template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""], components: [{ type: i3.MatChipList, selector: "mat-chip-list", inputs: ["errorStateMatcher", "multiple", "compareWith", "value", "required", "placeholder", "disabled", "aria-orientation", "selectable", "tabIndex"], outputs: ["change", "valueChange"], exportAs: ["matChipList"] }, { type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i5.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple"], exportAs: ["matAutocomplete"] }, { type: i6.MatOption, selector: "mat-option", exportAs: ["matOption"] }], directives: [{ type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatChip, selector: "mat-basic-chip, [mat-basic-chip], mat-chip, [mat-chip]", inputs: ["color", "disableRipple", "tabIndex", "selected", "value", "selectable", "disabled", "removable"], outputs: ["selectionChange", "destroyed", "removed"], exportAs: ["matChip"] }, { type: i3.MatChipRemove, selector: "[matChipRemove]" }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { type: i3.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }], pipes: { "async": i7.AsyncPipe } });
204
229
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: GioFormTagsInputComponent, decorators: [{
205
230
  type: Component,
206
231
  args: [{ selector: 'gio-form-tags-input', providers: [
@@ -208,7 +233,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
208
233
  provide: MatFormFieldControl,
209
234
  useExisting: GioFormTagsInputComponent,
210
235
  },
211
- ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let value of autocompleteFilteredOptions$ | async\" [value]=\"value\">\n {{ value }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
236
+ ], template: "<!--\n\n Copyright (C) 2015 The Gravitee team (http://gravitee.io)\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n-->\n<mat-chip-list #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip *ngFor=\"let tag of value\" [selectable]=\"false\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip>\n <input\n *ngIf=\"!disabled\"\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions\"\n [matAutocomplete]=\"auto\"\n [placeholder]=\"placeholder\"\n [matChipInputFor]=\"tagChipList\"\n [matChipInputAddOnBlur]=\"addOnBlur\"\n (matChipInputTokenEnd)=\"onMatChipTokenEnd()\"\n />\n <mat-autocomplete #auto=\"matAutocomplete\" (optionSelected)=\"onAutocompleteSelect($event)\">\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-list>\n", styles: [""] }]
212
237
  }], ctorParameters: function () { return [{ type: i1.NgControl, decorators: [{
213
238
  type: Optional
214
239
  }, {
@@ -222,6 +247,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
222
247
  type: Input
223
248
  }], autocompleteOptions: [{
224
249
  type: Input
250
+ }], displayValueWith: [{
251
+ type: Input
225
252
  }], tagInput: [{
226
253
  type: ViewChild,
227
254
  args: ['tagInput']
@@ -241,4 +268,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImpo
241
268
  type: HostBinding,
242
269
  args: ['attr.aria-describedby']
243
270
  }] } });
244
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFxQixTQUFTLEVBQXVCLFdBQVcsRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFldEUsTUFBTSxPQUFPLHlCQUF5QjtJQXdJcEM7SUFDRSxzQ0FBc0M7SUFDRixTQUFvQixFQUN2QyxLQUFpQixFQUNqQixFQUFnQixFQUN6QixpQkFBb0M7UUFIUixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3ZDLFVBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsT0FBRSxHQUFGLEVBQUUsQ0FBYztRQUN6QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBMUl2QyxjQUFTLEdBQWlDLEdBQUcsRUFBRSxD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O2dJQWpJWixTQUFTO3NCQURmLEtBQUs7dUJBQUMsWUFBWTtnQkFJWixTQUFTO3NCQURmLEtBQUs7Z0JBY0MsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUlLLG1CQUFtQjtzQkFEN0IsS0FBSztnQkFRSyxRQUFRO3NCQURsQixTQUFTO3VCQUFDLFVBQVU7Z0JBeUJkLEVBQUU7c0JBRFIsV0FBVzt1QkFBQyxJQUFJO2dCQUtOLFdBQVc7c0JBRHJCLEtBQUs7Z0JBd0JLLGdCQUFnQjtzQkFEMUIsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBT2xCLFFBQVE7c0JBRGxCLEtBQUs7Z0JBY0ssUUFBUTtzQkFEbEIsS0FBSztnQkFvRkMsV0FBVztzQkFEakIsV0FBVzt1QkFBQyx1QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tZW1iZXItYWNjZXNzaWJpbGl0eVxuXG5pbXBvcnQgeyBGb2N1c01vbml0b3IgfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSc7XG5pbXBvcnQgeyBjb2VyY2VCb29sZWFuUHJvcGVydHkgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRG9DaGVjaywgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIElucHV0LCBPbkRlc3Ryb3ksIE9wdGlvbmFsLCBTZWxmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOZ0NvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVTZWxlY3RlZEV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlJztcbmltcG9ydCB7IE1hdEZvcm1GaWVsZENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGggfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIFRhZ3MgPSBBcnJheTxzdHJpbmc+O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZm9ybS10YWdzLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLXRhZ3MtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9naW8tZm9ybS10YWdzLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IE1hdEZvcm1GaWVsZENvbnRyb2wsXG4gICAgICB1c2VFeGlzdGluZzogR2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudCxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxUYWdzPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHVibGljIF9vbkNoYW5nZTogKF90YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG5cbiAgcHVibGljIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFkZE9uQmx1ciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCBlYWNoIHRpbWUgYSB0YWcgaXMgYWRkZWQsIGl0IGNhbiBiZSB1c2VkIHRvIGhvb2sgaW5zaWRlIHRoZVxuICAgKiBhZGRpdGlvbiBwcm9jZXNzIHRvLCBmb3IgaW5zdGFuY2UsIGhhdmUgY3VzdG9tIHZhbGlkYXRpb24gaW4gdGhlIGNvbXBvbmVudHNcbiAgICogdXNpbmcgYGdpby1mb3JtLXRhZ3MtaW5wdXRgLlxuICAgKlxuICAgKiBQYXJhbWV0ZXJzIGFyZTpcbiAgICogLSBgdGFnYDogVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gYWRkXG4gICAqIC0gYHZhbGlkYXRpb25DYmA6IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdmFsaWRhdGlvbiBpcyBkb25lLiBJZlxuICAgKiBjYWxsZWQgd2l0aCBgdHJ1ZWAgaXQgd2lsbCBhZGQgdGhlIHRhZywgb3RoZXJ3aXNlIGl0IHdpbGwganVzdCBpZ25vcmUgaXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWdWYWxpZGF0aW9uSG9vazogKCh0YWc6IHN0cmluZywgdmFsaWRhdGlvbkNiOiAoc2hvdWxkQWRkVGFnOiBib29sZWFuKSA9PiB2b2lkKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZU9wdGlvbnModjogc3RyaW5nW10gfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID0gdjtcbiAgICB0aGlzLmluaXRBdXRvY29tcGxldGUoKTtcbiAgfVxuICBwdWJsaWMgX2F1dG9jb21wbGV0ZU9wdGlvbnM/OiBzdHJpbmdbXTtcblxuICBAVmlld0NoaWxkKCd0YWdJbnB1dCcpXG4gIHB1YmxpYyBzZXQgdGFnSW5wdXQodjogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB8IG51bGwpIHtcbiAgICB0aGlzLl90YWdJbnB1dCA9IHY7XG4gICAgdGhpcy5pbml0QXV0b2NvbXBsZXRlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfdGFnSW5wdXQ6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFRhZ3MgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgc2V0IHZhbHVlKF90YWdzOiBUYWdzIHwgbnVsbCkge1xuICAgIHRoaXMuX3ZhbHVlID0gX3RhZ3M7XG4gICAgdGhpcy5fb25DaGFuZ2UoX3RhZ3MpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlOiBUYWdzIHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHN0YXRlQ2hhbmdlcyA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXG4gIHB1YmxpYyBpZCA9IGBnaW8tZm9ybS10YWdzLWlucHV0LSR7R2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fcGxhY2Vob2xkZXI7XG4gIH1cblxuICBwdWJsaWMgc2V0IHBsYWNlaG9sZGVyKHBsaDogc3RyaW5nKSB7XG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSBwbGg7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcGxhY2Vob2xkZXIgPSAnJztcblxuICBwdWJsaWMgYXV0b2NvbXBsZXRlRmlsdGVyZWRPcHRpb25zJD86IE9ic2VydmFibGU8c3RyaW5nW10+O1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLnZhbHVlKSAmJiBpc0VtcHR5KHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50Py52YWx1ZSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpczogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGRpcyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBjb250cm9sVHlwZT86IHN0cmluZztcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgYXV0b2ZpbGxlZD86IGJvb2xlYW47XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JylcbiAgcHVibGljIGRlc2NyaWJlZEJ5ID0gJyc7XG5cbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25Db250YWluZXJDbGljayhfZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHt9XG5cbiAgcHVibGljIGFkZENoaXBUb0Zvcm1Db250cm9sKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnVG9BZGQgPSAoZXZlbnQudmFsdWUgPz8gJycpLnRyaW0oKTtcblxuICAgIGlmIChpc0VtcHR5KHRhZ1RvQWRkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgdGFnIG9ubHkgaWYgc2hvdWxkQWRkVGFnIGluIHZhbGlkYXRpb25DYiByZXR1cm4gdHJ1ZVxuICAgIC8vIFNldCBkZWZhdWx0IGNhbGxiYWNrIGlmIG5vdCBkZWZpbmVkXG4gICAgY29uc3QgdGFnVmFsaWRhdGlvbkhvb2sgPSB0aGlzLnRhZ1ZhbGlkYXRpb25Ib29rID8/ICgoXywgdmFsaWRhdGlvbkNiKSA9PiB2YWxpZGF0aW9uQ2IodHJ1ZSkpO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbkNiID0gKHNob3VsZEFkZFRhZzogYm9vbGVhbikgPT4ge1xuICAgICAgLy8gQWRkIG5ldyBUYWcgaW4gZm9ybSBjb250cm9sXG4gICAgICBpZiAoc2hvdWxkQWRkVGFnKSB7XG4gICAgICAgIC8vIERlbGV0ZSBUYWcgaWYgYWxyZWFkeSBleGlzdGluZ1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbFZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnVG9BZGQpO1xuXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4uZm9ybUNvbnRyb2xWYWx1ZSwgdGFnVG9BZGRdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdmFsdWVcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdGFnVmFsaWRhdGlvbkhvb2sodGFnVG9BZGQsIHZhbGlkYXRpb25DYik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ2hpcFRvRm9ybUNvbnRyb2wodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9jb21wbGV0ZVNlbGVjdChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogZXZlbnQub3B0aW9uLnZhbHVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uTWF0Q2hpcFRva2VuRW5kKCk6IHZvaWQge1xuICAgIC8vIEdpdmUgcHJpb3JpdHkgdG8gdGhlIGBvbkF1dG9jb21wbGV0ZVNlbGVjdGAgd2hlbiB2YWxpZGF0aW5nIHdpdGggdGhlIGJsdXIgZXZlbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyAmJiB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkID0gZnJvbUV2ZW50KHRoaXMuX3RhZ0lucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSBhcyBzdHJpbmdbXSksXG4gICAgICAgIG1hcCgoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuICh0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID8/IFtdKS5maWx0ZXIoZGVmYXVsdEhlYWRlciA9PlxuICAgICAgICAgICAgZGVmYXVsdEhlYWRlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJykudG9Mb3dlckNhc2UoKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG4iLCI8IS0tXG5cbiAgICBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcblxuICAgIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gICAgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuXG4gICAgICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcblxuICAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gICAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICAgIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuXG4tLT5cbjxtYXQtY2hpcC1saXN0ICN0YWdDaGlwTGlzdCBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiIG11bHRpcGxlIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiPlxuICA8bWF0LWNoaXAgKm5nRm9yPVwibGV0IHRhZyBvZiB2YWx1ZVwiIFtzZWxlY3RhYmxlXT1cImZhbHNlXCIgW3JlbW92YWJsZV09XCIhZGlzYWJsZWRcIiAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwVG9Gb3JtQ29udHJvbCh0YWcpXCI+XG4gICAge3sgdGFnIH19XG4gICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgPC9tYXQtY2hpcD5cbiAgPGlucHV0XG4gICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgICN0YWdJbnB1dFxuICAgIFttYXRBdXRvY29tcGxldGVEaXNhYmxlZF09XCIhX2F1dG9jb21wbGV0ZU9wdGlvbnNcIlxuICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInRhZ0NoaXBMaXN0XCJcbiAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImFkZE9uQmx1clwiXG4gICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cIm9uTWF0Q2hpcFRva2VuRW5kKClcIlxuICAvPlxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVNlbGVjdCgkZXZlbnQpXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHZhbHVlIG9mIGF1dG9jb21wbGV0ZUZpbHRlcmVkT3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJ2YWx1ZVwiPlxuICAgICAge3sgdmFsdWUgfX1cbiAgICA8L21hdC1vcHRpb24+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cbjwvbWF0LWNoaXAtbGlzdD5cbiJdfQ==
271
+ const defaultAutocompleteFilter = (options, search) => {
272
+ return sanitizeAutocompleteOptions(options).filter(defaultHeader => defaultHeader.label.toLowerCase().includes((search ?? '').toLowerCase()) ||
273
+ defaultHeader.value.toLowerCase().includes((search ?? '').toLowerCase()));
274
+ };
275
+ const sanitizeAutocompleteOptions = (options) => {
276
+ return options.map(option => {
277
+ if (option && typeof option !== 'string' && 'value' in option && 'label' in option) {
278
+ return option;
279
+ }
280
+ return { value: option, label: option };
281
+ });
282
+ };
283
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUFxQixTQUFTLEVBQXVCLFdBQVcsRUFBRSxLQUFLLEVBQWEsUUFBUSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHNUksT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbkUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsU0FBUyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7QUFtQnRGLE1BQU0sT0FBTyx5QkFBeUI7SUErSnBDO0lBQ0Usc0NBQXNDO0lBQ0YsU0FBb0IsRUFDdkMsS0FBaUIsRUFDakIsRUFBZ0IsRUFDekIsaUJBQW9DO1FBSFIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUN2QyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLE9BQUUsR0FBRixFQUFFLENBQWM7UUFDekIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFt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cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5XG5cbmltcG9ydCB7IEZvY3VzTW9uaXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBEb0NoZWNrLCBFbGVtZW50UmVmLCBIb3N0QmluZGluZywgSW5wdXQsIE9uRGVzdHJveSwgT3B0aW9uYWwsIFNlbGYsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBUYWdzID0gQXJyYXk8c3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgQXV0b2NvbXBsZXRlT3B0aW9ucyA9IChzdHJpbmcgfCB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSlbXTtcblxuZXhwb3J0IHR5cGUgRGlzcGxheVZhbHVlV2l0aEZuID0gKHZhbHVlOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2lvLWZvcm0tdGFncy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tZm9ybS10YWdzLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxuICAgICAgdXNlRXhpc3Rpbmc6IEdpb0Zvcm1UYWdzSW5wdXRDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE1hdEZvcm1GaWVsZENvbnRyb2w8VGFncz4sIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBEb0NoZWNrLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHN0YXRpYyBuZXh0SWQgPSAwO1xuXG4gIHB1YmxpYyBfb25DaGFuZ2U6IChfdGFnczogVGFncyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHB1YmxpYyBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcbiAgcHJpdmF0ZSB0b3VjaGVkID0gZmFsc2U7XG5cbiAgQElucHV0KCdhcmlhLWxhYmVsJylcbiAgcHVibGljIGFyaWFMYWJlbCA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhZGRPbkJsdXIgPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgZWFjaCB0aW1lIGEgdGFnIGlzIGFkZGVkLCBpdCBjYW4gYmUgdXNlZCB0byBob29rIGluc2lkZSB0aGVcbiAgICogYWRkaXRpb24gcHJvY2VzcyB0bywgZm9yIGluc3RhbmNlLCBoYXZlIGN1c3RvbSB2YWxpZGF0aW9uIGluIHRoZSBjb21wb25lbnRzXG4gICAqIHVzaW5nIGBnaW8tZm9ybS10YWdzLWlucHV0YC5cbiAgICpcbiAgICogUGFyYW1ldGVycyBhcmU6XG4gICAqIC0gYHRhZ2A6IFRoZSB2YWx1ZSBvZiB0aGUgdGFnIHRvIGFkZFxuICAgKiAtIGB2YWxpZGF0aW9uQ2JgOiBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gY2FsbCB3aGVuIHZhbGlkYXRpb24gaXMgZG9uZS4gSWZcbiAgICogY2FsbGVkIHdpdGggYHRydWVgIGl0IHdpbGwgYWRkIHRoZSB0YWcsIG90aGVyd2lzZSBpdCB3aWxsIGp1c3QgaWdub3JlIGl0XG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdGFnVmFsaWRhdGlvbkhvb2s6ICgodGFnOiBzdHJpbmcsIHZhbGlkYXRpb25DYjogKHNob3VsZEFkZFRhZzogYm9vbGVhbikgPT4gdm9pZCkgPT4gdm9pZCkgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhdXRvY29tcGxldGVPcHRpb25zKHY6IEF1dG9jb21wbGV0ZU9wdGlvbnMgfCAoKHNlYXJjaDogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEF1dG9jb21wbGV0ZU9wdGlvbnM+KSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgPSB2O1xuICAgIHRoaXMuaW5pdEF1dG9jb21wbGV0ZSgpO1xuICB9XG4gIHB1YmxpYyBfYXV0b2NvbXBsZXRlT3B0aW9ucz86IEF1dG9jb21wbGV0ZU9wdGlvbnMgfCAoKHNlYXJjaDogc3RyaW5nKSA9PiBPYnNlcnZhYmxlPEF1dG9jb21wbGV0ZU9wdGlvbnM+KTtcblxuICAvKipcbiAgICogR2V0IHRoZSBsYWJlbCBvZiBhbiBvcHRpb24gdmFsdWUuXG4gICAqIFRvIHVzZSB3aXRoIGF1dG9jb21wbGV0ZU9wdGlvbnMgbGFiZWwgJiB2YWx1ZSBtb2RlLlxuICAgKiBGdW5jdGlvbiBjYWxsZWQgZWFjaCB0aW1lIGEgdGFnIG5lZWRzIHRvIGJlIGRpc3BsYXllZCBpZCBkZWZpbmVkLlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNwbGF5VmFsdWVXaXRoKGRpc3BsYXlWYWx1ZVdpdGg6IERpc3BsYXlWYWx1ZVdpdGhGbikge1xuICAgIHRoaXMuX2Rpc3BsYXlWYWx1ZVdpdGggPSAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbdmFsdWVdKSB7XG4gICAgICAgIHJldHVybiBvZih0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGlzcGxheVZhbHVlV2l0aCh2YWx1ZSkucGlwZShcbiAgICAgICAgdGFwKGxhYmVsID0+IHtcbiAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSA9IGxhYmVsO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfTtcbiAgfVxuXG4gIEBWaWV3Q2hpbGQoJ3RhZ0lucHV0JylcbiAgcHVibGljIHNldCB0YWdJbnB1dCh2OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgbnVsbCkge1xuICAgIHRoaXMuX3RhZ0lucHV0ID0gdjtcbiAgICB0aGlzLmluaXRBdXRvY29tcGxldGUoKTtcbiAgfVxuICBwcml2YXRlIF90YWdJbnB1dDogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PiB8IG51bGwgPSBudWxsO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVGFncyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUoX3RhZ3M6IFRhZ3MgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBfdGFncztcbiAgICB0aGlzLl9vbkNoYW5nZShfdGFncyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IFRhZ3MgfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgc3RhdGVDaGFuZ2VzID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2lkJylcbiAgcHVibGljIGlkID0gYGdpby1mb3JtLXRhZ3MtaW5wdXQtJHtHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50Lm5leHRJZCsrfWA7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnO1xuXG4gIHB1YmxpYyBhdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkPzogT2JzZXJ2YWJsZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+W10+O1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBmb2N1c2VkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIGdldCBlbXB0eSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNFbXB0eSh0aGlzLnZhbHVlKSAmJiBpc0VtcHR5KHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50Py52YWx1ZSk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9yZXF1aXJlZDtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcmVxdWlyZWQocmVxOiBib29sZWFuKSB7XG4gICAgdGhpcy5fcmVxdWlyZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkocmVxKTtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXF1aXJlZCA9IGZhbHNlO1xuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgZGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkIHx8ICh0aGlzLm5nQ29udHJvbCAmJiB0aGlzLm5nQ29udHJvbC5kaXNhYmxlZCA9PT0gdHJ1ZSk7XG4gIH1cblxuICBwdWJsaWMgc2V0IGRpc2FibGVkKGRpczogYm9vbGVhbikge1xuICAgIHRoaXMuX2Rpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KGRpcyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcblxuICBwdWJsaWMgX2Rpc3BsYXlWYWx1ZVdpdGg/OiAodmFsdWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG4gIHByaXZhdGUgZGlzcGxheVZhbHVlQ2FjaGU6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBjb250cm9sVHlwZT86IHN0cmluZztcblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgYXV0b2ZpbGxlZD86IGJvb2xlYW47XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIEBIb3N0QmluZGluZygnYXR0ci5hcmlhLWRlc2NyaWJlZGJ5JylcbiAgcHVibGljIGRlc2NyaWJlZEJ5ID0gJyc7XG5cbiAgcHVibGljIHNldERlc2NyaWJlZEJ5SWRzKGlkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLmRlc2NyaWJlZEJ5ID0gaWRzLmpvaW4oJyAnKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnMsIEB0eXBlc2NyaXB0LWVzbGludC9uby1lbXB0eS1mdW5jdGlvblxuICBwdWJsaWMgb25Db250YWluZXJDbGljayhfZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHt9XG5cbiAgcHVibGljIGFkZENoaXBUb0Zvcm1Db250cm9sKGV2ZW50OiB7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgdGFnVG9BZGQgPSAoZXZlbnQudmFsdWUgPz8gJycpLnRyaW0oKTtcblxuICAgIGlmIChpc0VtcHR5KHRhZ1RvQWRkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZCB0aGUgdGFnIG9ubHkgaWYgc2hvdWxkQWRkVGFnIGluIHZhbGlkYXRpb25DYiByZXR1cm4gdHJ1ZVxuICAgIC8vIFNldCBkZWZhdWx0IGNhbGxiYWNrIGlmIG5vdCBkZWZpbmVkXG4gICAgY29uc3QgdGFnVmFsaWRhdGlvbkhvb2sgPSB0aGlzLnRhZ1ZhbGlkYXRpb25Ib29rID8/ICgoXywgdmFsaWRhdGlvbkNiKSA9PiB2YWxpZGF0aW9uQ2IodHJ1ZSkpO1xuXG4gICAgY29uc3QgdmFsaWRhdGlvbkNiID0gKHNob3VsZEFkZFRhZzogYm9vbGVhbikgPT4ge1xuICAgICAgLy8gQWRkIG5ldyBUYWcgaW4gZm9ybSBjb250cm9sXG4gICAgICBpZiAoc2hvdWxkQWRkVGFnKSB7XG4gICAgICAgIC8vIERlbGV0ZSBUYWcgaWYgYWxyZWFkeSBleGlzdGluZ1xuICAgICAgICBjb25zdCBmb3JtQ29udHJvbFZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnVG9BZGQpO1xuXG4gICAgICAgIHRoaXMudmFsdWUgPSBbLi4uZm9ybUNvbnRyb2xWYWx1ZSwgdGFnVG9BZGRdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBSZXNldCB0aGUgaW5wdXQgdmFsdWVcbiAgICBpZiAoaW5wdXQpIHtcbiAgICAgIGlucHV0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgdGFnVmFsaWRhdGlvbkhvb2sodGFnVG9BZGQsIHZhbGlkYXRpb25DYik7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlQ2hpcFRvRm9ybUNvbnRyb2wodGFnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gWy4uLih0aGlzLnZhbHVlID8/IFtdKV0uZmlsdGVyKHYgPT4gdiAhPT0gdGFnKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkF1dG9jb21wbGV0ZVNlbGVjdChldmVudDogTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogZXZlbnQub3B0aW9uLnZhbHVlIH0pO1xuICB9XG5cbiAgcHVibGljIG9uTWF0Q2hpcFRva2VuRW5kKCk6IHZvaWQge1xuICAgIC8vIEdpdmUgcHJpb3JpdHkgdG8gdGhlIGBvbkF1dG9jb21wbGV0ZVNlbGVjdGAgd2hlbiB2YWxpZGF0aW5nIHdpdGggdGhlIGJsdXIgZXZlbnRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycgfSk7XG4gICAgfSwgMTAwKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdEF1dG9jb21wbGV0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyAmJiB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5hdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkID0gZnJvbUV2ZW50KHRoaXMuX3RhZ0lucHV0Lm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpLnBpcGUoXG4gICAgICAgIHN0YXJ0V2l0aChbXSBhcyBzdHJpbmdbXSksXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJykucGlwZShcbiAgICAgICAgICAgICAgbWFwKG9wdGlvbnMgPT4gc2FuaXRpemVBdXRvY29tcGxldGVPcHRpb25zKG9wdGlvbnMpKSxcbiAgICAgICAgICAgICAgLy8gQWRkIG9wdGlvbnMgdG8gZGlzcGxheVZhbHVlQ2FjaGUgdG8gYXZvaWQgY2FsbCBvbiBzZWxlY3RcbiAgICAgICAgICAgICAgdGFwKG9wdGlvbnMgPT4ge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVDYWNoZVtvcHRpb24udmFsdWVdID0gb3B0aW9uLmxhYmVsO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvZihkZWZhdWx0QXV0b2NvbXBsZXRlRmlsdGVyKHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgPz8gW10sIHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50LnZhbHVlID8/ICcnKSk7XG4gICAgICAgIH0pLFxuXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlZmF1bHRBdXRvY29tcGxldGVGaWx0ZXIgPSAoXG4gIG9wdGlvbnM6IEF1dG9jb21wbGV0ZU9wdGlvbnMsXG4gIHNlYXJjaDogc3RyaW5nLFxuKToge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xufVtdID0+IHtcbiAgcmV0dXJuIHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyhvcHRpb25zKS5maWx0ZXIoXG4gICAgZGVmYXVsdEhlYWRlciA9PlxuICAgICAgZGVmYXVsdEhlYWRlci5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKChzZWFyY2ggPz8gJycpLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICBkZWZhdWx0SGVhZGVyLnZhbHVlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaCA/PyAnJykudG9Mb3dlckNhc2UoKSksXG4gICk7XG59O1xuXG5jb25zdCBzYW5pdGl6ZUF1dG9jb21wbGV0ZU9wdGlvbnMgPSAoXG4gIG9wdGlvbnM6IEF1dG9jb21wbGV0ZU9wdGlvbnMsXG4pOiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59W10gPT4ge1xuICByZXR1cm4gb3B0aW9ucy5tYXAob3B0aW9uID0+IHtcbiAgICBpZiAob3B0aW9uICYmIHR5cGVvZiBvcHRpb24gIT09ICdzdHJpbmcnICYmICd2YWx1ZScgaW4gb3B0aW9uICYmICdsYWJlbCcgaW4gb3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH1cbiAgICByZXR1cm4geyB2YWx1ZTogb3B0aW9uLCBsYWJlbDogb3B0aW9uIH07XG4gIH0pO1xufTtcbiIsIjwhLS1cblxuICAgIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuXG4gICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG5cbiAgICAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG4gICAgVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAgICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gICAgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG5cbi0tPlxuPG1hdC1jaGlwLWxpc3QgI3RhZ0NoaXBMaXN0IFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCIgbXVsdGlwbGUgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gIDxtYXQtY2hpcCAqbmdGb3I9XCJsZXQgdGFnIG9mIHZhbHVlXCIgW3NlbGVjdGFibGVdPVwiZmFsc2VcIiBbcmVtb3ZhYmxlXT1cIiFkaXNhYmxlZFwiIChyZW1vdmVkKT1cInJlbW92ZUNoaXBUb0Zvcm1Db250cm9sKHRhZylcIj5cbiAgICB7eyBfZGlzcGxheVZhbHVlV2l0aCA/IChfZGlzcGxheVZhbHVlV2l0aCh0YWcpIHwgYXN5bmMpIDogdGFnIH19XG4gICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgPC9tYXQtY2hpcD5cbiAgPGlucHV0XG4gICAgKm5nSWY9XCIhZGlzYWJsZWRcIlxuICAgICN0YWdJbnB1dFxuICAgIFttYXRBdXRvY29tcGxldGVEaXNhYmxlZF09XCIhX2F1dG9jb21wbGV0ZU9wdGlvbnNcIlxuICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInRhZ0NoaXBMaXN0XCJcbiAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImFkZE9uQmx1clwiXG4gICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cIm9uTWF0Q2hpcFRva2VuRW5kKClcIlxuICAvPlxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVNlbGVjdCgkZXZlbnQpXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L21hdC1vcHRpb24+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cbjwvbWF0LWNoaXAtbGlzdD5cbiJdfQ==