@gravitee/ui-particles-angular 15.8.0 → 15.8.1-click-tag-35d619f

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.
@@ -1,5 +1,5 @@
1
1
  import { coerceBooleanProperty } from '@angular/cdk/coercion';
2
- import { ChangeDetectionStrategy, Component, HostBinding, Input, Optional, Self, ViewChild, } from '@angular/core';
2
+ import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, Input, Optional, Output, Self, ViewChild, } from '@angular/core';
3
3
  import { MatFormFieldControl } from '@angular/material/form-field';
4
4
  import { isEmpty } from 'lodash';
5
5
  import { fromEvent, of, Subject } from 'rxjs';
@@ -117,6 +117,7 @@ export class GioFormTagsInputComponent {
117
117
  * called with `true` it will add the tag, otherwise it will just ignore it
118
118
  */
119
119
  this.tagValidationHook = undefined;
120
+ this.clickOnTag = new EventEmitter();
120
121
  /**
121
122
  * Set to true to force the chip to be part of the autocomplete options.
122
123
  */
@@ -247,12 +248,12 @@ export class GioFormTagsInputComponent {
247
248
  }
248
249
  }
249
250
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", 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 }); }
250
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GioFormTagsInputComponent, isStandalone: false, selector: "gio-form-tags-input", inputs: { ariaLabel: ["aria-label", "ariaLabel"], addOnBlur: "addOnBlur", tagValidationHook: "tagValidationHook", autocompleteOptions: "autocompleteOptions", displayValueWith: "displayValueWith", useAutocompleteOptionValueOnly: "useAutocompleteOptionValueOnly", placeholder: "placeholder", required: "required", disabled: "disabled" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, providers: [
251
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GioFormTagsInputComponent, isStandalone: false, selector: "gio-form-tags-input", inputs: { ariaLabel: ["aria-label", "ariaLabel"], addOnBlur: "addOnBlur", tagValidationHook: "tagValidationHook", autocompleteOptions: "autocompleteOptions", displayValueWith: "displayValueWith", useAutocompleteOptionValueOnly: "useAutocompleteOptionValueOnly", placeholder: "placeholder", required: "required", disabled: "disabled" }, outputs: { clickOnTag: "clickOnTag" }, host: { properties: { "id": "this.id", "class.floating": "this.shouldLabelFloat", "attr.aria-describedby": "this.describedBy" } }, providers: [
251
252
  {
252
253
  provide: MatFormFieldControl,
253
254
  useExisting: GioFormTagsInputComponent,
254
255
  },
255
- ], 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-grid #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip-row *ngFor=\"let tag of value\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\" [disabled]=\"disabled\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n <input\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\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 *ngIf=\"loading\" disabled id=\"loader\">\n <div class=\"loader-option\"><gio-loader></gio-loader></div>\n </mat-option>\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: ["::ng-deep gio-form-tags-input .mat-mdc-standard-chip{height:unset!important;min-height:var(--mdc-chip-container-height)}::ng-deep gio-form-tags-input .mat-mdc-standard-chip .mdc-evolution-chip__text-label{white-space:normal}.loader-option{display:flex}.loader-option gio-loader{width:24px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i7.GioLoaderComponent, selector: "gio-loader" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
256
+ ], 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-grid #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip-row\n *ngFor=\"let tag of value\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n (click)=\"clickOnTag.emit(tag)\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n <input\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\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 *ngIf=\"loading\" disabled id=\"loader\">\n <div class=\"loader-option\"><gio-loader></gio-loader></div>\n </mat-option>\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: ["::ng-deep gio-form-tags-input .mat-mdc-standard-chip{height:unset!important;min-height:var(--mdc-chip-container-height)}::ng-deep gio-form-tags-input .mat-mdc-standard-chip .mdc-evolution-chip__text-label{white-space:normal}.loader-option{display:flex}.loader-option gio-loader{width:24px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.MatChipGrid, selector: "mat-chip-grid", inputs: ["disabled", "placeholder", "required", "value", "errorStateMatcher"], outputs: ["change", "valueChange"] }, { kind: "directive", type: i4.MatChipInput, selector: "input[matChipInputFor]", inputs: ["matChipInputFor", "matChipInputAddOnBlur", "matChipInputSeparatorKeyCodes", "placeholder", "id", "disabled"], outputs: ["matChipInputTokenEnd"], exportAs: ["matChipInput", "matChipInputFor"] }, { kind: "directive", type: i4.MatChipRemove, selector: "[matChipRemove]" }, { kind: "component", type: i4.MatChipRow, selector: "mat-chip-row, [mat-chip-row], mat-basic-chip-row, [mat-basic-chip-row]", inputs: ["editable"], outputs: ["edited"] }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i6.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i6.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i7.GioLoaderComponent, selector: "gio-loader" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
256
257
  }
257
258
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GioFormTagsInputComponent, decorators: [{
258
259
  type: Component,
@@ -261,7 +262,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
261
262
  provide: MatFormFieldControl,
262
263
  useExisting: GioFormTagsInputComponent,
263
264
  },
264
- ], standalone: false, 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-grid #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip-row *ngFor=\"let tag of value\" [removable]=\"!disabled\" (removed)=\"removeChipToFormControl(tag)\" [disabled]=\"disabled\">\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n <input\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\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 *ngIf=\"loading\" disabled id=\"loader\">\n <div class=\"loader-option\"><gio-loader></gio-loader></div>\n </mat-option>\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: ["::ng-deep gio-form-tags-input .mat-mdc-standard-chip{height:unset!important;min-height:var(--mdc-chip-container-height)}::ng-deep gio-form-tags-input .mat-mdc-standard-chip .mdc-evolution-chip__text-label{white-space:normal}.loader-option{display:flex}.loader-option gio-loader{width:24px}\n"] }]
265
+ ], standalone: false, 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-grid #tagChipList [attr.aria-label]=\"ariaLabel\" multiple [disabled]=\"disabled\">\n <mat-chip-row\n *ngFor=\"let tag of value\"\n [removable]=\"!disabled\"\n (removed)=\"removeChipToFormControl(tag)\"\n [disabled]=\"disabled\"\n (click)=\"clickOnTag.emit(tag)\"\n >\n {{ _displayValueWith ? (_displayValueWith(tag) | async) : tag }}\n <mat-icon matChipRemove>cancel</mat-icon>\n </mat-chip-row>\n <input\n #tagInput\n [matAutocompleteDisabled]=\"!_autocompleteOptions || disabled\"\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 *ngIf=\"loading\" disabled id=\"loader\">\n <div class=\"loader-option\"><gio-loader></gio-loader></div>\n </mat-option>\n <mat-option *ngFor=\"let option of autocompleteFilteredOptions$ | async\" [value]=\"option.value\">\n {{ option.label }}\n </mat-option>\n </mat-autocomplete>\n</mat-chip-grid>\n", styles: ["::ng-deep gio-form-tags-input .mat-mdc-standard-chip{height:unset!important;min-height:var(--mdc-chip-container-height)}::ng-deep gio-form-tags-input .mat-mdc-standard-chip .mdc-evolution-chip__text-label{white-space:normal}.loader-option{display:flex}.loader-option gio-loader{width:24px}\n"] }]
265
266
  }], ctorParameters: () => [{ type: i1.NgControl, decorators: [{
266
267
  type: Optional
267
268
  }, {
@@ -275,6 +276,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImpor
275
276
  type: Input
276
277
  }], autocompleteOptions: [{
277
278
  type: Input
279
+ }], clickOnTag: [{
280
+ type: Output
278
281
  }], displayValueWith: [{
279
282
  type: Input
280
283
  }], useAutocompleteOptionValueOnly: [{
@@ -310,4 +313,4 @@ const sanitizeAutocompleteOptions = (options) => {
310
313
  return { value: option, label: option };
311
314
  });
312
315
  };
313
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsV0FBVyxFQUNYLEtBQUssRUFFTCxRQUFRLEVBQ1IsSUFBSSxFQUNKLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxTQUFTLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7OztBQXFCdEYsTUFBTSxPQUFPLHlCQUF5QjthQUNyQixXQUFNLEdBQUcsQ0FBQyxBQUFKLENBQUs7SUEwQjFCLElBQ1csbUJBQW1CLENBQUMsQ0FBMEY7UUFDdkgsSUFBSSxDQUFDLG9CQUFvQixHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBR0Q7Ozs7T0FJRztJQUNILElBQ1csZ0JBQWdCLENBQUMsZ0JBQW9DO1FBQzlELElBQUks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QU0sRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHlcblxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBIb3N0QmluZGluZyxcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0QXV0b2NvbXBsZXRlU2VsZWN0ZWRFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZSc7XG5pbXBvcnQgeyBNYXRGb3JtRmllbGRDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGZyb21FdmVudCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBtYXAsIHN0YXJ0V2l0aCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCB0eXBlIFRhZ3MgPSBBcnJheTxzdHJpbmc+O1xuXG5leHBvcnQgdHlwZSBBdXRvY29tcGxldGVPcHRpb25zID0gKHN0cmluZyB8IHsgdmFsdWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9KVtdO1xuXG5leHBvcnQgdHlwZSBEaXNwbGF5VmFsdWVXaXRoRm4gPSAodmFsdWU6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxzdHJpbmc+O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tZm9ybS10YWdzLWlucHV0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dpby1mb3JtLXRhZ3MtaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9naW8tZm9ybS10YWdzLWlucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBNYXRGb3JtRmllbGRDb250cm9sLFxuICAgICAgdXNlRXhpc3Rpbmc6IEdpb0Zvcm1UYWdzSW5wdXRDb21wb25lbnQsXG4gICAgfSxcbiAgXSxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEdpb0Zvcm1UYWdzSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBNYXRGb3JtRmllbGRDb250cm9sPFRhZ3M+LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgRG9DaGVjaywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBzdGF0aWMgbmV4dElkID0gMDtcblxuICBwdWJsaWMgX29uQ2hhbmdlOiAoX3RhZ3M6IFRhZ3MgfCBudWxsKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcblxuICBwdWJsaWMgX29uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG4gIHByaXZhdGUgdG91Y2hlZCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgnYXJpYS1sYWJlbCcpXG4gIHB1YmxpYyBhcmlhTGFiZWwgPSAnJztcblxuICBASW5wdXQoKVxuICBwdWJsaWMgYWRkT25CbHVyID0gdHJ1ZTtcblxuICAvKipcbiAgICogRnVuY3Rpb24gY2FsbGVkIGVhY2ggdGltZSBhIHRhZyBpcyBhZGRlZCwgaXQgY2FuIGJlIHVzZWQgdG8gaG9vayBpbnNpZGUgdGhlXG4gICAqIGFkZGl0aW9uIHByb2Nlc3MgdG8sIGZvciBpbnN0YW5jZSwgaGF2ZSBjdXN0b20gdmFsaWRhdGlvbiBpbiB0aGUgY29tcG9uZW50c1xuICAgKiB1c2luZyBgZ2lvLWZvcm0tdGFncy1pbnB1dGAuXG4gICAqXG4gICAqIFBhcmFtZXRlcnMgYXJlOlxuICAgKiAtIGB0YWdgOiBUaGUgdmFsdWUgb2YgdGhlIHRhZyB0byBhZGRcbiAgICogLSBgdmFsaWRhdGlvbkNiYDogVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgd2hlbiB2YWxpZGF0aW9uIGlzIGRvbmUuIElmXG4gICAqIGNhbGxlZCB3aXRoIGB0cnVlYCBpdCB3aWxsIGFkZCB0aGUgdGFnLCBvdGhlcndpc2UgaXQgd2lsbCBqdXN0IGlnbm9yZSBpdFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHRhZ1ZhbGlkYXRpb25Ib29rOiAoKHRhZzogc3RyaW5nLCB2YWxpZGF0aW9uQ2I6IChzaG91bGRBZGRUYWc6IGJvb2xlYW4pID0+IHZvaWQpID0+IHZvaWQpIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgYXV0b2NvbXBsZXRlT3B0aW9ucyh2OiBBdXRvY29tcGxldGVPcHRpb25zIHwgKChzZWFyY2g6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBdXRvY29tcGxldGVPcHRpb25zPikgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID0gdjtcbiAgfVxuICBwdWJsaWMgX2F1dG9jb21wbGV0ZU9wdGlvbnM/OiBBdXRvY29tcGxldGVPcHRpb25zIHwgKChzZWFyY2g6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBdXRvY29tcGxldGVPcHRpb25zPik7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGFiZWwgb2YgYW4gb3B0aW9uIHZhbHVlLlxuICAgKiBUbyB1c2Ugd2l0aCBhdXRvY29tcGxldGVPcHRpb25zIGxhYmVsICYgdmFsdWUgbW9kZS5cbiAgICogRnVuY3Rpb24gY2FsbGVkIGVhY2ggdGltZSBhIHRhZyBuZWVkcyB0byBiZSBkaXNwbGF5ZWQgaWQgZGVmaW5lZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVZhbHVlV2l0aChkaXNwbGF5VmFsdWVXaXRoOiBEaXNwbGF5VmFsdWVXaXRoRm4pIHtcbiAgICB0aGlzLl9kaXNwbGF5VmFsdWVXaXRoID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSkge1xuICAgICAgICByZXR1cm4gb2YodGhpcy5kaXNwbGF5VmFsdWVDYWNoZVt2YWx1ZV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZVdpdGgodmFsdWUpLnBpcGUoXG4gICAgICAgIHRhcChsYWJlbCA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVDYWNoZVt2YWx1ZV0gPSBsYWJlbDtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZm9yY2UgdGhlIGNoaXAgdG8gYmUgcGFydCBvZiB0aGUgYXV0b2NvbXBsZXRlIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdXNlQXV0b2NvbXBsZXRlT3B0aW9uVmFsdWVPbmx5ID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndGFnSW5wdXQnKVxuICBwdWJsaWMgc2V0IHRhZ0lucHV0KHY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCBudWxsKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuZm0ubW9uaXRvcih2Lm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgdGhpcy5pbml0QXV0b2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fdGFnSW5wdXQpIHtcbiAgICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5fdGFnSW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFnSW5wdXQgPSB2O1xuICB9XG4gIHByaXZhdGUgX3RhZ0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZUZpbHRlcmVkT3B0aW9ucyQ/OiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXT47XG5cbiAgcHVibGljIF9kaXNwbGF5VmFsdWVXaXRoPzogKHZhbHVlOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIGRpc3BsYXlWYWx1ZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVGFncyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUoX3RhZ3M6IFRhZ3MgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBfdGFncztcbiAgICB0aGlzLl9vbkNoYW5nZShfdGFncyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IFRhZ3MgfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXG4gIHB1YmxpYyBpZCA9IGBnaW8tZm9ybS10YWdzLWlucHV0LSR7R2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy52YWx1ZSkgJiYgaXNFbXB0eSh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudD8udmFsdWUpO1xuICB9XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgcHVibGljIHNldCByZXF1aXJlZChyZXE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgPT09IHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGNvbnRyb2xUeXBlPzogc3RyaW5nO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGF1dG9maWxsZWQ/OiBib29sZWFuO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgaWYgKHRoaXMuX3RhZ0lucHV0KSB7XG4gICAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuX3RhZ0lucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzIGludGVyZmFjZVxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICBwdWJsaWMgZGVzY3JpYmVkQnkgPSAnJztcblxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uQ29udGFpbmVyQ2xpY2soX2V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7fVxuXG4gIHB1YmxpYyBhZGRDaGlwVG9Gb3JtQ29udHJvbChldmVudDogeyB2YWx1ZTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRhZ1RvQWRkID0gKGV2ZW50LnZhbHVlID8/ICcnKS50cmltKCk7XG5cbiAgICBpZiAoaXNFbXB0eSh0YWdUb0FkZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIHRhZyBvbmx5IGlmIHNob3VsZEFkZFRhZyBpbiB2YWxpZGF0aW9uQ2IgcmV0dXJuIHRydWVcbiAgICAvLyBTZXQgZGVmYXVsdCBjYWxsYmFjayBpZiBub3QgZGVmaW5lZFxuICAgIGNvbnN0IHRhZ1ZhbGlkYXRpb25Ib29rID0gdGhpcy50YWdWYWxpZGF0aW9uSG9vayA/PyAoKF8sIHZhbGlkYXRpb25DYikgPT4gdmFsaWRhdGlvbkNiKHRydWUpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25DYiA9IChzaG91bGRBZGRUYWc6IGJvb2xlYW4pID0+IHtcbiAgICAgIC8vIEFkZCBuZXcgVGFnIGluIGZvcm0gY29udHJvbFxuICAgICAgaWYgKHNob3VsZEFkZFRhZykge1xuICAgICAgICAvLyBEZWxldGUgVGFnIGlmIGFscmVhZHkgZXhpc3RpbmdcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2xWYWx1ZSA9IFsuLi4odGhpcy52YWx1ZSA/PyBbXSldLmZpbHRlcih2ID0+IHYgIT09IHRhZ1RvQWRkKTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLmZvcm1Db250cm9sVmFsdWUsIHRhZ1RvQWRkXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRhZ1ZhbGlkYXRpb25Ib29rKHRhZ1RvQWRkLCB2YWxpZGF0aW9uQ2IpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNoaXBUb0Zvcm1Db250cm9sKHRhZzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IFsuLi4odGhpcy52YWx1ZSA/PyBbXSldLmZpbHRlcih2ID0+IHYgIT09IHRhZyk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25BdXRvY29tcGxldGVTZWxlY3QoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENoaXBUb0Zvcm1Db250cm9sKHsgdmFsdWU6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1hdENoaXBUb2tlbkVuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51c2VBdXRvY29tcGxldGVPcHRpb25WYWx1ZU9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gR2l2ZSBwcmlvcml0eSB0byB0aGUgYG9uQXV0b2NvbXBsZXRlU2VsZWN0YCB3aGVuIHZhbGlkYXRpbmcgd2l0aCB0aGUgYmx1ciBldmVudFxuICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgJiYgdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmlsdGVyZWRPcHRpb25zJCA9IGZyb21FdmVudCh0aGlzLl90YWdJbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10gYXMgc3RyaW5nW10pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnModGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChvcHRpb25zID0+IHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgICAgICAgIC8vIEFkZCBvcHRpb25zIHRvIGRpc3BsYXlWYWx1ZUNhY2hlIHRvIGF2b2lkIGNhbGwgb24gc2VsZWN0XG4gICAgICAgICAgICAgIHRhcChvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbb3B0aW9uLnZhbHVlXSA9IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2YoZGVmYXVsdEF1dG9jb21wbGV0ZUZpbHRlcih0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID8/IFtdLCB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJykpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSksXG5cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdEF1dG9jb21wbGV0ZUZpbHRlciA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbiAgc2VhcmNoOiBzdHJpbmcsXG4pOiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59W10gPT4ge1xuICByZXR1cm4gc2FuaXRpemVBdXRvY29tcGxldGVPcHRpb25zKG9wdGlvbnMpLmZpbHRlcihcbiAgICBkZWZhdWx0SGVhZGVyID0+XG4gICAgICBkZWZhdWx0SGVhZGVyLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaCA/PyAnJykudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIGRlZmF1bHRIZWFkZXIudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygoc2VhcmNoID8/ICcnKS50b0xvd2VyQ2FzZSgpKSxcbiAgKTtcbn07XG5cbmNvbnN0IHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbik6IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1bXSA9PiB7XG4gIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgIGlmIChvcHRpb24gJiYgdHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgJ3ZhbHVlJyBpbiBvcHRpb24gJiYgJ2xhYmVsJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvcHRpb24sIGxhYmVsOiBvcHRpb24gfTtcbiAgfSk7XG59O1xuIiwiPCEtLVxuXG4gICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuLS0+XG48bWF0LWNoaXAtZ3JpZCAjdGFnQ2hpcExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIiBtdWx0aXBsZSBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgPG1hdC1jaGlwLXJvdyAqbmdGb3I9XCJsZXQgdGFnIG9mIHZhbHVlXCIgW3JlbW92YWJsZV09XCIhZGlzYWJsZWRcIiAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwVG9Gb3JtQ29udHJvbCh0YWcpXCIgW2Rpc2FibGVkXT1cImRpc2FibGVkXCI+XG4gICAge3sgX2Rpc3BsYXlWYWx1ZVdpdGggPyAoX2Rpc3BsYXlWYWx1ZVdpdGgodGFnKSB8IGFzeW5jKSA6IHRhZyB9fVxuICAgIDxtYXQtaWNvbiBtYXRDaGlwUmVtb3ZlPmNhbmNlbDwvbWF0LWljb24+XG4gIDwvbWF0LWNoaXAtcm93PlxuICA8aW5wdXRcbiAgICAjdGFnSW5wdXRcbiAgICBbbWF0QXV0b2NvbXBsZXRlRGlzYWJsZWRdPVwiIV9hdXRvY29tcGxldGVPcHRpb25zIHx8IGRpc2FibGVkXCJcbiAgICBbbWF0QXV0b2NvbXBsZXRlXT1cImF1dG9cIlxuICAgIFtwbGFjZWhvbGRlcl09XCJwbGFjZWhvbGRlclwiXG4gICAgW21hdENoaXBJbnB1dEZvcl09XCJ0YWdDaGlwTGlzdFwiXG4gICAgW21hdENoaXBJbnB1dEFkZE9uQmx1cl09XCJhZGRPbkJsdXJcIlxuICAgIChtYXRDaGlwSW5wdXRUb2tlbkVuZCk9XCJvbk1hdENoaXBUb2tlbkVuZCgpXCJcbiAgLz5cbiAgPG1hdC1hdXRvY29tcGxldGUgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIiAob3B0aW9uU2VsZWN0ZWQpPVwib25BdXRvY29tcGxldGVTZWxlY3QoJGV2ZW50KVwiPlxuICAgIDxtYXQtb3B0aW9uICpuZ0lmPVwibG9hZGluZ1wiIGRpc2FibGVkIGlkPVwibG9hZGVyXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibG9hZGVyLW9wdGlvblwiPjxnaW8tbG9hZGVyPjwvZ2lvLWxvYWRlcj48L2Rpdj5cbiAgICA8L21hdC1vcHRpb24+XG4gICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhdXRvY29tcGxldGVGaWx0ZXJlZE9wdGlvbnMkIHwgYXN5bmNcIiBbdmFsdWVdPVwib3B0aW9uLnZhbHVlXCI+XG4gICAgICB7eyBvcHRpb24ubGFiZWwgfX1cbiAgICA8L21hdC1vcHRpb24+XG4gIDwvbWF0LWF1dG9jb21wbGV0ZT5cbjwvbWF0LWNoaXAtZ3JpZD5cbiJdfQ==
316
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1mb3JtLXRhZ3MtaW5wdXQvZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFrQkEsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDOUQsT0FBTyxFQUNMLHVCQUF1QixFQUV2QixTQUFTLEVBR1QsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixJQUFJLEVBQ0osU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ25FLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFNBQVMsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBcUJ0RixNQUFNLE9BQU8seUJBQXlCO2FBQ3JCLFdBQU0sR0FBRyxDQUFDLEFBQUosQ0FBSztJQTBCMUIsSUFDVyxtQkFBbUIsQ0FBQyxDQUEwRjtRQUN2SCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFPRDs7OztPQUlHO0lBQ0gsSUFDVyxnQkFBZ0IsQ0FB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QUNuRixPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDO1FBQ0QsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQzFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoQykgMjAxNSBUaGUgR3Jhdml0ZWUgdGVhbSAoaHR0cDovL2dyYXZpdGVlLmlvKVxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbWVtYmVyLWFjY2Vzc2liaWxpdHlcblxuaW1wb3J0IHsgRm9jdXNNb25pdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcbmltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgT3V0cHV0LFxuICBTZWxmLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9hdXRvY29tcGxldGUnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5leHBvcnQgdHlwZSBUYWdzID0gQXJyYXk8c3RyaW5nPjtcblxuZXhwb3J0IHR5cGUgQXV0b2NvbXBsZXRlT3B0aW9ucyA9IChzdHJpbmcgfCB7IHZhbHVlOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfSlbXTtcblxuZXhwb3J0IHR5cGUgRGlzcGxheVZhbHVlV2l0aEZuID0gKHZhbHVlOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2lvLWZvcm0tdGFncy1pbnB1dCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9naW8tZm9ybS10YWdzLWlucHV0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLWZvcm0tdGFncy1pbnB1dC5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTWF0Rm9ybUZpZWxkQ29udHJvbCxcbiAgICAgIHVzZUV4aXN0aW5nOiBHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50LFxuICAgIH0sXG4gIF0sXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Gb3JtVGFnc0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgTWF0Rm9ybUZpZWxkQ29udHJvbDxUYWdzPiwgQ29udHJvbFZhbHVlQWNjZXNzb3IsIERvQ2hlY2ssIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3RhdGljIG5leHRJZCA9IDA7XG5cbiAgcHVibGljIF9vbkNoYW5nZTogKF90YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG5cbiAgcHVibGljIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuICBwcml2YXRlIHRvdWNoZWQgPSBmYWxzZTtcblxuICBASW5wdXQoJ2FyaWEtbGFiZWwnKVxuICBwdWJsaWMgYXJpYUxhYmVsID0gJyc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGFkZE9uQmx1ciA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIGNhbGxlZCBlYWNoIHRpbWUgYSB0YWcgaXMgYWRkZWQsIGl0IGNhbiBiZSB1c2VkIHRvIGhvb2sgaW5zaWRlIHRoZVxuICAgKiBhZGRpdGlvbiBwcm9jZXNzIHRvLCBmb3IgaW5zdGFuY2UsIGhhdmUgY3VzdG9tIHZhbGlkYXRpb24gaW4gdGhlIGNvbXBvbmVudHNcbiAgICogdXNpbmcgYGdpby1mb3JtLXRhZ3MtaW5wdXRgLlxuICAgKlxuICAgKiBQYXJhbWV0ZXJzIGFyZTpcbiAgICogLSBgdGFnYDogVGhlIHZhbHVlIG9mIHRoZSB0YWcgdG8gYWRkXG4gICAqIC0gYHZhbGlkYXRpb25DYmA6IFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0byBjYWxsIHdoZW4gdmFsaWRhdGlvbiBpcyBkb25lLiBJZlxuICAgKiBjYWxsZWQgd2l0aCBgdHJ1ZWAgaXQgd2lsbCBhZGQgdGhlIHRhZywgb3RoZXJ3aXNlIGl0IHdpbGwganVzdCBpZ25vcmUgaXRcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyB0YWdWYWxpZGF0aW9uSG9vazogKCh0YWc6IHN0cmluZywgdmFsaWRhdGlvbkNiOiAoc2hvdWxkQWRkVGFnOiBib29sZWFuKSA9PiB2b2lkKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGF1dG9jb21wbGV0ZU9wdGlvbnModjogQXV0b2NvbXBsZXRlT3B0aW9ucyB8ICgoc2VhcmNoOiBzdHJpbmcpID0+IE9ic2VydmFibGU8QXV0b2NvbXBsZXRlT3B0aW9ucz4pIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyA9IHY7XG4gIH1cblxuICBAT3V0cHV0KClcbiAgcHVibGljIGNsaWNrT25UYWcgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICBwdWJsaWMgX2F1dG9jb21wbGV0ZU9wdGlvbnM/OiBBdXRvY29tcGxldGVPcHRpb25zIHwgKChzZWFyY2g6IHN0cmluZykgPT4gT2JzZXJ2YWJsZTxBdXRvY29tcGxldGVPcHRpb25zPik7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbGFiZWwgb2YgYW4gb3B0aW9uIHZhbHVlLlxuICAgKiBUbyB1c2Ugd2l0aCBhdXRvY29tcGxldGVPcHRpb25zIGxhYmVsICYgdmFsdWUgbW9kZS5cbiAgICogRnVuY3Rpb24gY2FsbGVkIGVhY2ggdGltZSBhIHRhZyBuZWVkcyB0byBiZSBkaXNwbGF5ZWQgaWQgZGVmaW5lZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzcGxheVZhbHVlV2l0aChkaXNwbGF5VmFsdWVXaXRoOiBEaXNwbGF5VmFsdWVXaXRoRm4pIHtcbiAgICB0aGlzLl9kaXNwbGF5VmFsdWVXaXRoID0gKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh0aGlzLmRpc3BsYXlWYWx1ZUNhY2hlW3ZhbHVlXSkge1xuICAgICAgICByZXR1cm4gb2YodGhpcy5kaXNwbGF5VmFsdWVDYWNoZVt2YWx1ZV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRpc3BsYXlWYWx1ZVdpdGgodmFsdWUpLnBpcGUoXG4gICAgICAgIHRhcChsYWJlbCA9PiB7XG4gICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWVDYWNoZVt2YWx1ZV0gPSBsYWJlbDtcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRvIHRydWUgdG8gZm9yY2UgdGhlIGNoaXAgdG8gYmUgcGFydCBvZiB0aGUgYXV0b2NvbXBsZXRlIG9wdGlvbnMuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgdXNlQXV0b2NvbXBsZXRlT3B0aW9uVmFsdWVPbmx5ID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgndGFnSW5wdXQnKVxuICBwdWJsaWMgc2V0IHRhZ0lucHV0KHY6IEVsZW1lbnRSZWY8SFRNTElucHV0RWxlbWVudD4gfCBudWxsKSB7XG4gICAgaWYgKHYpIHtcbiAgICAgIHRoaXMuZm0ubW9uaXRvcih2Lm5hdGl2ZUVsZW1lbnQpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgICBpZiAob3JpZ2luKSB7XG4gICAgICAgICAgdGhpcy5pbml0QXV0b2NvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fdGFnSW5wdXQpIHtcbiAgICAgIHRoaXMuZm0uc3RvcE1vbml0b3JpbmcodGhpcy5fdGFnSW5wdXQubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFnSW5wdXQgPSB2O1xuICB9XG4gIHByaXZhdGUgX3RhZ0lucHV0OiBFbGVtZW50UmVmPEhUTUxJbnB1dEVsZW1lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgcHVibGljIGF1dG9jb21wbGV0ZUZpbHRlcmVkT3B0aW9ucyQ/OiBPYnNlcnZhYmxlPFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXT47XG5cbiAgcHVibGljIF9kaXNwbGF5VmFsdWVXaXRoPzogKHZhbHVlOiBzdHJpbmcpID0+IE9ic2VydmFibGU8c3RyaW5nPjtcblxuICBwcml2YXRlIGRpc3BsYXlWYWx1ZUNhY2hlOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgcHVibGljIGxvYWRpbmcgPSBmYWxzZTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogVGFncyB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgdmFsdWUoX3RhZ3M6IFRhZ3MgfCBudWxsKSB7XG4gICAgdGhpcy5fdmFsdWUgPSBfdGFncztcbiAgICB0aGlzLl9vbkNoYW5nZShfdGFncyk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWU6IFRhZ3MgfCBudWxsID0gbnVsbDtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBzdGF0ZUNoYW5nZXMgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdpZCcpXG4gIHB1YmxpYyBpZCA9IGBnaW8tZm9ybS10YWdzLWlucHV0LSR7R2lvRm9ybVRhZ3NJbnB1dENvbXBvbmVudC5uZXh0SWQrK31gO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQElucHV0KClcbiAgcHVibGljIGdldCBwbGFjZWhvbGRlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHB1YmxpYyBzZXQgcGxhY2Vob2xkZXIocGxoOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9wbGFjZWhvbGRlciA9IHBsaDtcbiAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gIH1cblxuICBwcml2YXRlIF9wbGFjZWhvbGRlciA9ICcnO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGZvY3VzZWQgPSBmYWxzZTtcblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIHB1YmxpYyBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzRW1wdHkodGhpcy52YWx1ZSkgJiYgaXNFbXB0eSh0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudD8udmFsdWUpO1xuICB9XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmZsb2F0aW5nJylcbiAgcHVibGljIGdldCBzaG91bGRMYWJlbEZsb2F0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmZvY3VzZWQgfHwgIXRoaXMuZW1wdHk7XG4gIH1cblxuICAvLyBGcm9tIE1hdEZvcm1GaWVsZENvbnRyb2wgaW50ZXJmYWNlXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBnZXQgcmVxdWlyZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVpcmVkO1xuICB9XG5cbiAgcHVibGljIHNldCByZXF1aXJlZChyZXE6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9yZXF1aXJlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShyZXEpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlcXVpcmVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBASW5wdXQoKVxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wuZGlzYWJsZWQgPT09IHRydWUpO1xuICB9XG5cbiAgcHVibGljIHNldCBkaXNhYmxlZChkaXM6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eShkaXMpO1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICBwdWJsaWMgZ2V0IGVycm9yU3RhdGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMudG91Y2hlZCAmJlxuICAgICAgLy8gaWYgcmVxdWlyZWQgY2hlY2sgaWYgaXMgZW1wdHlcbiAgICAgICgodGhpcy5yZXF1aXJlZCAmJiB0aGlzLmVtcHR5KSB8fFxuICAgICAgICAvLyBpZiB0aGVyZSBpcyBhIHRvdWNoZWQgY29udHJvbCBjaGVjayBpZiB0aGVyZSBpcyBhbiBlcnJvclxuICAgICAgICAodGhpcy5uZ0NvbnRyb2wgJiYgdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZSAmJiAhIXRoaXMubmdDb250cm9sLmVycm9ycykpXG4gICAgKTtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGNvbnRyb2xUeXBlPzogc3RyaW5nO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIGF1dG9maWxsZWQ/OiBib29sZWFuO1xuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgcHVibGljIHVzZXJBcmlhRGVzY3JpYmVkQnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsUmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZm06IEZvY3VzTW9uaXRvcixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7XG4gICAgLy8gUmVwbGFjZSB0aGUgcHJvdmlkZXIgZnJvbSBhYm92ZSB3aXRoIHRoaXMuXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9IG51bGwpIHtcbiAgICAgIC8vIFNldHRpbmcgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHVzaW5nXG4gICAgICAvLyB0aGUgcHJvdmlkZXJzKSB0byBhdm9pZCBydW5uaW5nIGludG8gYSBjaXJjdWxhciBpbXBvcnQuXG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG5cbiAgICBmbS5tb25pdG9yKGVsUmVmLm5hdGl2ZUVsZW1lbnQsIHRydWUpLnN1YnNjcmliZShvcmlnaW4gPT4ge1xuICAgICAgdGhpcy5mb2N1c2VkID0gISFvcmlnaW47XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMudG91Y2hlZCA9IHRydWU7XG4gICAgICB0aGlzLnN0YXRlQ2hhbmdlcy5uZXh0KCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbmdEb0NoZWNrKCk6IHZvaWQge1xuICAgIC8vIHN5bmMgY29udHJvbCB0b3VjaGVkIHdpdGggbG9jYWwgdG91Y2hlZFxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPSBudWxsICYmIHRoaXMudG91Y2hlZCAhPT0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy50b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZCA9PT0gdHJ1ZTtcbiAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLm5leHQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMuY29tcGxldGUoKTtcbiAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgaWYgKHRoaXMuX3RhZ0lucHV0KSB7XG4gICAgICB0aGlzLmZtLnN0b3BNb25pdG9yaW5nKHRoaXMuX3RhZ0lucHV0Lm5hdGl2ZUVsZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzIGludGVyZmFjZVxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogc3RyaW5nW10pOiB2b2lkIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgdGhpcy5zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh0YWdzOiBUYWdzIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gTWF0Rm9ybUZpZWxkQ29udHJvbCBpbnRlcmZhY2VcbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmFyaWEtZGVzY3JpYmVkYnknKVxuICBwdWJsaWMgZGVzY3JpYmVkQnkgPSAnJztcblxuICBwdWJsaWMgc2V0RGVzY3JpYmVkQnlJZHMoaWRzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIHRoaXMuZGVzY3JpYmVkQnkgPSBpZHMuam9pbignICcpO1xuICB9XG5cbiAgLy8gRnJvbSBNYXRGb3JtRmllbGRDb250cm9sIGludGVyZmFjZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZW1wdHktZnVuY3Rpb25cbiAgcHVibGljIG9uQ29udGFpbmVyQ2xpY2soX2V2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7fVxuXG4gIHB1YmxpYyBhZGRDaGlwVG9Gb3JtQ29udHJvbChldmVudDogeyB2YWx1ZTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICBjb25zdCBpbnB1dCA9IHRoaXMuX3RhZ0lucHV0Py5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHRhZ1RvQWRkID0gKGV2ZW50LnZhbHVlID8/ICcnKS50cmltKCk7XG5cbiAgICBpZiAoaXNFbXB0eSh0YWdUb0FkZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGQgdGhlIHRhZyBvbmx5IGlmIHNob3VsZEFkZFRhZyBpbiB2YWxpZGF0aW9uQ2IgcmV0dXJuIHRydWVcbiAgICAvLyBTZXQgZGVmYXVsdCBjYWxsYmFjayBpZiBub3QgZGVmaW5lZFxuICAgIGNvbnN0IHRhZ1ZhbGlkYXRpb25Ib29rID0gdGhpcy50YWdWYWxpZGF0aW9uSG9vayA/PyAoKF8sIHZhbGlkYXRpb25DYikgPT4gdmFsaWRhdGlvbkNiKHRydWUpKTtcblxuICAgIGNvbnN0IHZhbGlkYXRpb25DYiA9IChzaG91bGRBZGRUYWc6IGJvb2xlYW4pID0+IHtcbiAgICAgIC8vIEFkZCBuZXcgVGFnIGluIGZvcm0gY29udHJvbFxuICAgICAgaWYgKHNob3VsZEFkZFRhZykge1xuICAgICAgICAvLyBEZWxldGUgVGFnIGlmIGFscmVhZHkgZXhpc3RpbmdcbiAgICAgICAgY29uc3QgZm9ybUNvbnRyb2xWYWx1ZSA9IFsuLi4odGhpcy52YWx1ZSA/PyBbXSldLmZpbHRlcih2ID0+IHYgIT09IHRhZ1RvQWRkKTtcblxuICAgICAgICB0aGlzLnZhbHVlID0gWy4uLmZvcm1Db250cm9sVmFsdWUsIHRhZ1RvQWRkXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gUmVzZXQgdGhlIGlucHV0IHZhbHVlXG4gICAgaWYgKGlucHV0KSB7XG4gICAgICBpbnB1dC52YWx1ZSA9ICcnO1xuICAgIH1cblxuICAgIHRhZ1ZhbGlkYXRpb25Ib29rKHRhZ1RvQWRkLCB2YWxpZGF0aW9uQ2IpO1xuICB9XG5cbiAgcHVibGljIHJlbW92ZUNoaXBUb0Zvcm1Db250cm9sKHRhZzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IFsuLi4odGhpcy52YWx1ZSA/PyBbXSldLmZpbHRlcih2ID0+IHYgIT09IHRhZyk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBwdWJsaWMgb25BdXRvY29tcGxldGVTZWxlY3QoZXZlbnQ6IE1hdEF1dG9jb21wbGV0ZVNlbGVjdGVkRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENoaXBUb0Zvcm1Db250cm9sKHsgdmFsdWU6IGV2ZW50Lm9wdGlvbi52YWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1hdENoaXBUb2tlbkVuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy51c2VBdXRvY29tcGxldGVPcHRpb25WYWx1ZU9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gR2l2ZSBwcmlvcml0eSB0byB0aGUgYG9uQXV0b2NvbXBsZXRlU2VsZWN0YCB3aGVuIHZhbGlkYXRpbmcgd2l0aCB0aGUgYmx1ciBldmVudFxuICAgIHRoaXMuYWRkQ2hpcFRvRm9ybUNvbnRyb2woeyB2YWx1ZTogdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRBdXRvY29tcGxldGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnMgJiYgdGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHRoaXMuYXV0b2NvbXBsZXRlRmlsdGVyZWRPcHRpb25zJCA9IGZyb21FdmVudCh0aGlzLl90YWdJbnB1dC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICBzdGFydFdpdGgoW10gYXMgc3RyaW5nW10pLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgICAgIH0pLFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdGhpcy5fYXV0b2NvbXBsZXRlT3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2F1dG9jb21wbGV0ZU9wdGlvbnModGhpcy5fdGFnSW5wdXQ/Lm5hdGl2ZUVsZW1lbnQudmFsdWUgPz8gJycpLnBpcGUoXG4gICAgICAgICAgICAgIG1hcChvcHRpb25zID0+IHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyhvcHRpb25zKSksXG4gICAgICAgICAgICAgIC8vIEFkZCBvcHRpb25zIHRvIGRpc3BsYXlWYWx1ZUNhY2hlIHRvIGF2b2lkIGNhbGwgb24gc2VsZWN0XG4gICAgICAgICAgICAgIHRhcChvcHRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlQ2FjaGVbb3B0aW9uLnZhbHVlXSA9IG9wdGlvbi5sYWJlbDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gb2YoZGVmYXVsdEF1dG9jb21wbGV0ZUZpbHRlcih0aGlzLl9hdXRvY29tcGxldGVPcHRpb25zID8/IFtdLCB0aGlzLl90YWdJbnB1dD8ubmF0aXZlRWxlbWVudC52YWx1ZSA/PyAnJykpO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgfSksXG5cbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgZGVmYXVsdEF1dG9jb21wbGV0ZUZpbHRlciA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbiAgc2VhcmNoOiBzdHJpbmcsXG4pOiB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG59W10gPT4ge1xuICByZXR1cm4gc2FuaXRpemVBdXRvY29tcGxldGVPcHRpb25zKG9wdGlvbnMpLmZpbHRlcihcbiAgICBkZWZhdWx0SGVhZGVyID0+XG4gICAgICBkZWZhdWx0SGVhZGVyLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoKHNlYXJjaCA/PyAnJykudG9Mb3dlckNhc2UoKSkgfHxcbiAgICAgIGRlZmF1bHRIZWFkZXIudmFsdWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygoc2VhcmNoID8/ICcnKS50b0xvd2VyQ2FzZSgpKSxcbiAgKTtcbn07XG5cbmNvbnN0IHNhbml0aXplQXV0b2NvbXBsZXRlT3B0aW9ucyA9IChcbiAgb3B0aW9uczogQXV0b2NvbXBsZXRlT3B0aW9ucyxcbik6IHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbn1bXSA9PiB7XG4gIHJldHVybiBvcHRpb25zLm1hcChvcHRpb24gPT4ge1xuICAgIGlmIChvcHRpb24gJiYgdHlwZW9mIG9wdGlvbiAhPT0gJ3N0cmluZycgJiYgJ3ZhbHVlJyBpbiBvcHRpb24gJiYgJ2xhYmVsJyBpbiBvcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb247XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlOiBvcHRpb24sIGxhYmVsOiBvcHRpb24gfTtcbiAgfSk7XG59O1xuIiwiPCEtLVxuXG4gICAgQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG5cbiAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICAgIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcblxuICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbiAgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICAgIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cblxuLS0+XG48bWF0LWNoaXAtZ3JpZCAjdGFnQ2hpcExpc3QgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIiBtdWx0aXBsZSBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj5cbiAgPG1hdC1jaGlwLXJvd1xuICAgICpuZ0Zvcj1cImxldCB0YWcgb2YgdmFsdWVcIlxuICAgIFtyZW1vdmFibGVdPVwiIWRpc2FibGVkXCJcbiAgICAocmVtb3ZlZCk9XCJyZW1vdmVDaGlwVG9Gb3JtQ29udHJvbCh0YWcpXCJcbiAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgIChjbGljayk9XCJjbGlja09uVGFnLmVtaXQodGFnKVwiXG4gID5cbiAgICB7eyBfZGlzcGxheVZhbHVlV2l0aCA/IChfZGlzcGxheVZhbHVlV2l0aCh0YWcpIHwgYXN5bmMpIDogdGFnIH19XG4gICAgPG1hdC1pY29uIG1hdENoaXBSZW1vdmU+Y2FuY2VsPC9tYXQtaWNvbj5cbiAgPC9tYXQtY2hpcC1yb3c+XG4gIDxpbnB1dFxuICAgICN0YWdJbnB1dFxuICAgIFttYXRBdXRvY29tcGxldGVEaXNhYmxlZF09XCIhX2F1dG9jb21wbGV0ZU9wdGlvbnMgfHwgZGlzYWJsZWRcIlxuICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICBbbWF0Q2hpcElucHV0Rm9yXT1cInRhZ0NoaXBMaXN0XCJcbiAgICBbbWF0Q2hpcElucHV0QWRkT25CbHVyXT1cImFkZE9uQmx1clwiXG4gICAgKG1hdENoaXBJbnB1dFRva2VuRW5kKT1cIm9uTWF0Q2hpcFRva2VuRW5kKClcIlxuICAvPlxuICA8bWF0LWF1dG9jb21wbGV0ZSAjYXV0bz1cIm1hdEF1dG9jb21wbGV0ZVwiIChvcHRpb25TZWxlY3RlZCk9XCJvbkF1dG9jb21wbGV0ZVNlbGVjdCgkZXZlbnQpXCI+XG4gICAgPG1hdC1vcHRpb24gKm5nSWY9XCJsb2FkaW5nXCIgZGlzYWJsZWQgaWQ9XCJsb2FkZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJsb2FkZXItb3B0aW9uXCI+PGdpby1sb2FkZXI+PC9naW8tbG9hZGVyPjwvZGl2PlxuICAgIDwvbWF0LW9wdGlvbj5cbiAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGF1dG9jb21wbGV0ZUZpbHRlcmVkT3B0aW9ucyQgfCBhc3luY1wiIFt2YWx1ZV09XCJvcHRpb24udmFsdWVcIj5cbiAgICAgIHt7IG9wdGlvbi5sYWJlbCB9fVxuICAgIDwvbWF0LW9wdGlvbj5cbiAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuPC9tYXQtY2hpcC1ncmlkPlxuIl19
@@ -13,25 +13,32 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { Component } from '@angular/core';
16
+ import { Component, ContentChild } from '@angular/core';
17
+ import { GioMonacoEditorComponent } from './gio-monaco-editor.component';
17
18
  import * as i0 from "@angular/core";
18
19
  import * as i1 from "../gio-clipboard/gio-clipboard-copy-icon.component";
19
20
  export class GioMonacoClipboardCopyComponent {
21
+ constructor() {
22
+ this.monacoEditor = null;
23
+ }
20
24
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GioMonacoClipboardCopyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
21
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GioMonacoClipboardCopyComponent, isStandalone: false, selector: "[gioMonacoClipboardCopy]", ngImport: i0, template: `
25
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GioMonacoClipboardCopyComponent, isStandalone: false, selector: "[gioMonacoClipboardCopy]", queries: [{ propertyName: "monacoEditor", first: true, predicate: GioMonacoEditorComponent, descendants: true }], ngImport: i0, template: `
22
26
  <div class="editor-wrapper">
23
27
  <ng-content></ng-content>
24
- <gio-clipboard-copy-icon class="copy-btn"></gio-clipboard-copy-icon>
28
+ <gio-clipboard-copy-icon class="copy-btn" [contentToCopy]="monacoEditor?.value ?? ''"></gio-clipboard-copy-icon>
25
29
  </div>
26
- `, isInline: true, styles: [".editor-wrapper{position:relative;overflow:auto;min-height:420px;flex:1 1 50%}.copy-btn{position:absolute;top:8px;right:8px}\n"], dependencies: [{ kind: "component", type: i1.GioClipboardCopyIconComponent, selector: "gio-clipboard-copy-icon" }] }); }
30
+ `, isInline: true, styles: [".editor-wrapper{position:relative;overflow:auto;flex:1 1 50%}.copy-btn{position:absolute;z-index:10;top:8px;right:8px}\n"], dependencies: [{ kind: "component", type: i1.GioClipboardCopyIconComponent, selector: "gio-clipboard-copy-icon" }] }); }
27
31
  }
28
32
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GioMonacoClipboardCopyComponent, decorators: [{
29
33
  type: Component,
30
34
  args: [{ selector: '[gioMonacoClipboardCopy]', template: `
31
35
  <div class="editor-wrapper">
32
36
  <ng-content></ng-content>
33
- <gio-clipboard-copy-icon class="copy-btn"></gio-clipboard-copy-icon>
37
+ <gio-clipboard-copy-icon class="copy-btn" [contentToCopy]="monacoEditor?.value ?? ''"></gio-clipboard-copy-icon>
34
38
  </div>
35
- `, standalone: false, styles: [".editor-wrapper{position:relative;overflow:auto;min-height:420px;flex:1 1 50%}.copy-btn{position:absolute;top:8px;right:8px}\n"] }]
36
- }] });
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLW1vbmFjby1jbGlwYm9hcmQtY29weS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1tb25hY28tZWRpdG9yL2dpby1tb25hY28tY2xpcGJvYXJkLWNvcHkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBYzFDLE1BQU0sT0FBTywrQkFBK0I7OEdBQS9CLCtCQUErQjtrR0FBL0IsK0JBQStCLHFGQVJoQzs7Ozs7R0FLVDs7MkZBR1UsK0JBQStCO2tCQVozQyxTQUFTOytCQUVFLDBCQUEwQixZQUUxQjs7Ozs7R0FLVCxjQUNXLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDE1IFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tnaW9Nb25hY29DbGlwYm9hcmRDb3B5XScsXG4gIHN0eWxlVXJsczogWycuL2dpby1tb25hY28tY2xpcGJvYXJkLWNvcHkuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXdyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxnaW8tY2xpcGJvYXJkLWNvcHktaWNvbiBjbGFzcz1cImNvcHktYnRuXCI+PC9naW8tY2xpcGJvYXJkLWNvcHktaWNvbj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3RhbmRhbG9uZTogZmFsc2UsXG59KVxuZXhwb3J0IGNsYXNzIEdpb01vbmFjb0NsaXBib2FyZENvcHlDb21wb25lbnQge31cbiJdfQ==
39
+ `, standalone: false, styles: [".editor-wrapper{position:relative;overflow:auto;flex:1 1 50%}.copy-btn{position:absolute;z-index:10;top:8px;right:8px}\n"] }]
40
+ }], propDecorators: { monacoEditor: [{
41
+ type: ContentChild,
42
+ args: [GioMonacoEditorComponent, { static: false }]
43
+ }] } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLW1vbmFjby1jbGlwYm9hcmQtY29weS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1wYXJ0aWNsZXMtYW5ndWxhci9zcmMvbGliL2dpby1tb25hY28tZWRpdG9yL2dpby1tb25hY28tY2xpcGJvYXJkLWNvcHkuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sK0JBQStCLENBQUM7OztBQWN6RSxNQUFNLE9BQU8sK0JBQStCO0lBWjVDO1FBY1MsaUJBQVksR0FBb0MsSUFBSSxDQUFDO0tBQzdEOzhHQUhZLCtCQUErQjtrR0FBL0IsK0JBQStCLCtIQUM1Qix3QkFBd0IsZ0RBVDVCOzs7OztHQUtUOzsyRkFHVSwrQkFBK0I7a0JBWjNDLFNBQVM7K0JBRUUsMEJBQTBCLFlBRTFCOzs7OztHQUtULGNBQ1csS0FBSzs4QkFJVixZQUFZO3NCQURsQixZQUFZO3VCQUFDLHdCQUF3QixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUgVGhlIEdyYXZpdGVlIHRlYW0gKGh0dHA6Ly9ncmF2aXRlZS5pbylcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5pbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBHaW9Nb25hY29FZGl0b3JDb21wb25lbnQgfSBmcm9tICcuL2dpby1tb25hY28tZWRpdG9yLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQGFuZ3VsYXItZXNsaW50L2NvbXBvbmVudC1zZWxlY3RvclxuICBzZWxlY3RvcjogJ1tnaW9Nb25hY29DbGlwYm9hcmRDb3B5XScsXG4gIHN0eWxlVXJsczogWycuL2dpby1tb25hY28tY2xpcGJvYXJkLWNvcHkuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwiZWRpdG9yLXdyYXBwZXJcIj5cbiAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDxnaW8tY2xpcGJvYXJkLWNvcHktaWNvbiBjbGFzcz1cImNvcHktYnRuXCIgW2NvbnRlbnRUb0NvcHldPVwibW9uYWNvRWRpdG9yPy52YWx1ZSA/PyAnJ1wiPjwvZ2lvLWNsaXBib2FyZC1jb3B5LWljb24+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Nb25hY29DbGlwYm9hcmRDb3B5Q29tcG9uZW50IHtcbiAgQENvbnRlbnRDaGlsZChHaW9Nb25hY29FZGl0b3JDb21wb25lbnQsIHsgc3RhdGljOiBmYWxzZSB9KVxuICBwdWJsaWMgbW9uYWNvRWRpdG9yOiBHaW9Nb25hY29FZGl0b3JDb21wb25lbnQgfCBudWxsID0gbnVsbDtcbn1cbiJdfQ==
@@ -13,7 +13,7 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- import { ChangeDetectionStrategy, Component, HostBinding, Inject, Input, Optional, Self, } from '@angular/core';
16
+ import { ChangeDetectionStrategy, Component, effect, HostBinding, Inject, Input, Optional, Self, signal, } from '@angular/core';
17
17
  import { isEqual, isString, uniqueId } from 'lodash';
18
18
  import { ReplaySubject, Subject } from 'rxjs';
19
19
  import { takeUntil } from 'rxjs/operators';
@@ -50,6 +50,10 @@ export class GioMonacoEditorComponent {
50
50
  this.value = '';
51
51
  this.readOnly = false;
52
52
  this.toDisposes = [];
53
+ this.isMonacoEditorReady = signal({
54
+ isSetup: false,
55
+ hasFirstValue: false,
56
+ });
53
57
  this._onChange = () => ({});
54
58
  this._onTouched = () => ({});
55
59
  this.unsubscribe$ = new Subject();
@@ -59,11 +63,22 @@ export class GioMonacoEditorComponent {
59
63
  this.ngControl.valueAccessor = this;
60
64
  }
61
65
  this.monacoEditorService.loadEditor();
66
+ effect(() => {
67
+ const { isSetup, hasFirstValue } = this.isMonacoEditorReady();
68
+ if (isSetup && hasFirstValue) {
69
+ if (this.textModel) {
70
+ this.textModel.setValue(this.value);
71
+ }
72
+ this.updateModelLanguage();
73
+ this.autoformatValue();
74
+ }
75
+ });
62
76
  }
63
77
  ngAfterViewInit() {
64
78
  // Wait until monaco editor is available
65
79
  this.monacoEditorService.loaded$.pipe(takeUntil(this.unsubscribe$)).subscribe(({ monaco }) => {
66
80
  this.setupEditor(monaco);
81
+ this.isMonacoEditorReady.update(({ hasFirstValue }) => ({ isSetup: true, hasFirstValue }));
67
82
  this.loaded$.next(false);
68
83
  this.changeDetectorRef.detectChanges();
69
84
  });
@@ -85,9 +100,7 @@ export class GioMonacoEditorComponent {
85
100
  writeValue(_value) {
86
101
  if (_value) {
87
102
  this.value = isString(_value) ? _value : JSON.stringify(_value);
88
- }
89
- if (this.textModel) {
90
- this.textModel.setValue(this.value);
103
+ this.isMonacoEditorReady.update(({ isSetup }) => ({ isSetup, hasFirstValue: true }));
91
104
  }
92
105
  }
93
106
  // From ControlValueAccessor interface
@@ -131,11 +144,6 @@ export class GioMonacoEditorComponent {
131
144
  this.standaloneCodeEditor = monaco.editor.create(domElement, {
132
145
  ...options,
133
146
  });
134
- if (!this.disableAutoFormat) {
135
- setTimeout(() => {
136
- this.standaloneCodeEditor?.getAction('editor.action.formatDocument')?.run();
137
- }, 80);
138
- }
139
147
  if (this.singleLineMode) {
140
148
  this.standaloneCodeEditor?.addAction({
141
149
  id: 'custom.action',
@@ -246,6 +254,27 @@ export class GioMonacoEditorComponent {
246
254
  break;
247
255
  }
248
256
  }
257
+ updateModelLanguage() {
258
+ const languageId = this.languageConfig?.language ?? (isJsonString(this.value) ? 'json' : 'plaintext');
259
+ if (this.textModel && window.monaco) {
260
+ window.monaco.editor.setModelLanguage(this.textModel, languageId);
261
+ }
262
+ }
263
+ autoformatValue() {
264
+ if (!this.disableAutoFormat) {
265
+ setTimeout(() => {
266
+ const previousReadOnlyState = this.options.readOnly || this.readOnly;
267
+ this.standaloneCodeEditor?.updateOptions({ readOnly: false });
268
+ this.standaloneCodeEditor
269
+ ?.getAction('editor.action.formatDocument')
270
+ ?.run()
271
+ .finally(() => {
272
+ this.standaloneCodeEditor?.updateOptions({ readOnly: previousReadOnlyState });
273
+ this.changeDetectorRef.detectChanges();
274
+ });
275
+ }, 80);
276
+ }
277
+ }
249
278
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.4", ngImport: i0, type: GioMonacoEditorComponent, deps: [{ token: i0.ElementRef }, { token: GIO_MONACO_EDITOR_CONFIG }, { token: i1.GioMonacoEditorService }, { token: i2.GioLanguageJsonService }, { token: i3.GioLanguageElService }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }, { token: i4.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component }); }
250
279
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.4", type: GioMonacoEditorComponent, isStandalone: false, selector: "gio-monaco-editor", inputs: { languageConfig: "languageConfig", options: "options", disableMiniMap: "disableMiniMap", disableAutoFormat: "disableAutoFormat", singleLineMode: "singleLineMode" }, host: { properties: { "class.single-line": "this.singleLineMode" } }, ngImport: i0, template: ` <div *ngIf="loaded$ | async">Loading...</div>`, isInline: true, styles: [":host{display:block;height:100%;min-height:150px;pointer-events:auto;transition:opacity .2s ease-out}:host.single-line{display:flex;height:24px;min-height:24px;align-items:center}:host-context(.hidden){opacity:0}\n"], dependencies: [{ kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i5.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
251
280
  }
@@ -282,4 +311,4 @@ const isJsonString = (str) => {
282
311
  }
283
312
  return true;
284
313
  };
285
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tbW9uYWNvLWVkaXRvci9naW8tbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFFVCxXQUFXLEVBQ1gsTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsSUFBSSxHQUNMLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUVyRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLHdCQUF3QixFQUF5QixNQUFNLGdDQUFnQyxDQUFDOzs7Ozs7O0FBbUNqRyxNQUFNLE9BQU8sd0JBQXdCO0lBdUNuQyxZQUNrQixXQUF1QixFQUNZLE1BQTZCLEVBQy9ELG1CQUEyQyxFQUMzQyxtQkFBMkMsRUFDM0MsbUJBQXlDLEVBQ3pDLGlCQUFvQyxFQUNwQyxNQUFjLEVBQ0ssU0FBb0I7UUFQeEMsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDWSxXQUFNLEdBQU4sTUFBTSxDQUF1QjtRQUMvRCx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXdCO1FBQzNDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFzQjtRQUN6QyxzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDSyxjQUFTLEdBQVQsU0FBUyxDQUFX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O29CQUMxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDNUQsQ0FBQztnQkFDRCxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTTtRQUNWLENBQUM7SUFDSCxDQUFDOzhHQTFRVSx3QkFBd0IsNENBeUN6Qix3QkFBd0I7a0dBekN2Qix3QkFBd0Isa1VBTHpCLGdEQUFnRDs7MkZBSy9DLHdCQUF3QjtrQkFQcEMsU0FBUzsrQkFDRSxtQkFBbUIsWUFDbkIsZ0RBQWdELG1CQUV6Qyx1QkFBdUIsQ0FBQyxNQUFNLGNBQ25DLEtBQUs7OzBCQTJDZCxNQUFNOzJCQUFDLHdCQUF3Qjs7MEJBTS9CLFFBQVE7OzBCQUFJLElBQUk7eUNBN0NaLGNBQWM7c0JBRHBCLEtBQUs7Z0JBSUMsT0FBTztzQkFEYixLQUFLO2dCQUlDLGNBQWM7c0JBRHBCLEtBQUs7Z0JBSUMsaUJBQWlCO3NCQUR2QixLQUFLO2dCQUtDLGNBQWM7c0JBRnBCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsbUJBQW1COztBQStQbEMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxHQUFXLEVBQVcsRUFBRTtJQUM1QyxJQUFJLENBQUM7UUFDSCxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3B0aW9uYWwsXG4gIFNlbGYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5nQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzRXF1YWwsIGlzU3RyaW5nLCB1bmlxdWVJZCB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgTW9uYWNvLCB7IGVkaXRvciB9IGZyb20gJ21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBHSU9fTU9OQUNPX0VESVRPUl9DT05GSUcsIEdpb01vbmFjb0VkaXRvckNvbmZpZyB9IGZyb20gJy4vbW9kZWxzL0dpb01vbmFjb0VkaXRvckNvbmZpZyc7XG5pbXBvcnQgeyBHaW9MYW5ndWFnZUpzb25TZXJ2aWNlIH0gZnJvbSAnLi9zZXJ2aWNlcy9naW8tbGFuZ3VhZ2UtanNvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEdpb01vbmFjb0VkaXRvclNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dpby1tb25hY28tZWRpdG9yLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2lvTGFuZ3VhZ2VFbFNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dpby1sYW5ndWFnZS1lbC5zZXJ2aWNlJztcbmltcG9ydCB7IEpTT05TY2hlbWEgfSBmcm9tICcuL21vZGVscy9KU09OU2NoZW1hQXV0b0NvbXBsZXRlJztcblxuZXhwb3J0IHR5cGUgTW9uYWNvRWRpdG9yTGFuZ3VhZ2VDb25maWcgPVxuICB8IHtcbiAgICAgIGxhbmd1YWdlOiAnanNvbic7XG4gICAgICBzY2hlbWFzPzogeyB1cmk6IHN0cmluZzsgc2NoZW1hOiB1bmtub3duIH1bXTtcbiAgICB9XG4gIHwge1xuICAgICAgbGFuZ3VhZ2U6ICdtYXJrZG93bic7XG4gICAgfVxuICB8IHtcbiAgICAgIGxhbmd1YWdlOiAnaHRtbCc7XG4gICAgfVxuICB8IHtcbiAgICAgIGxhbmd1YWdlOiAneWFtbCc7XG4gICAgfVxuICB8IHtcbiAgICAgIGxhbmd1YWdlOiAnc3BlbCc7XG4gICAgICBzY2hlbWE/OiBKU09OU2NoZW1hO1xuICAgIH1cbiAgfCB7XG4gICAgICBsYW5ndWFnZTogJ2Nzcyc7XG4gICAgfTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZ2lvLW1vbmFjby1lZGl0b3InLFxuICB0ZW1wbGF0ZTogYCA8ZGl2ICpuZ0lmPVwibG9hZGVkJCB8IGFzeW5jXCI+TG9hZGluZy4uLjwvZGl2PmAsXG4gIHN0eWxlVXJsczogWycuL2dpby1tb25hY28tZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBzdGFuZGFsb25lOiBmYWxzZSxcbn0pXG5leHBvcnQgY2xhc3MgR2lvTW9uYWNvRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBsYW5ndWFnZUNvbmZpZz86IE1vbmFjb0VkaXRvckxhbmd1YWdlQ29uZmlnO1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBvcHRpb25zOiBlZGl0b3IuSVN0YW5kYWxvbmVFZGl0b3JDb25zdHJ1Y3Rpb25PcHRpb25zID0ge307XG5cbiAgQElucHV0KClcbiAgcHVibGljIGRpc2FibGVNaW5pTWFwID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgcHVibGljIGRpc2FibGVBdXRvRm9ybWF0ID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5zaW5nbGUtbGluZScpXG4gIHB1YmxpYyBzaW5nbGVMaW5lTW9kZSA9IGZhbHNlO1xuXG4gIHB1YmxpYyBsb2FkZWQkID0gbmV3IFJlcGxheVN1YmplY3Q8Ym9vbGVhbj4oMSk7XG5cbiAgcHJpdmF0ZSBkZWZhdWx0T3B0aW9uczogZWRpdG9yLklTdGFuZGFsb25lRWRpdG9yQ29uc3RydWN0aW9uT3B0aW9ucyA9IHtcbiAgICBjb250ZXh0bWVudTogZmFsc2UsXG4gICAgbWluaW1hcDoge1xuICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICB9LFxuICAgIGF1dG9tYXRpY0xheW91dDogdHJ1ZSxcbiAgICBzY3JvbGxCZXlvbmRMYXN0TGluZTogZmFsc2UsXG4gIH07XG5cbiAgcHVibGljIHZhbHVlID0gJyc7XG4gIHB1YmxpYyByZWFkT25seSA9IGZhbHNlO1xuICBwdWJsaWMgc3RhbmRhbG9uZUNvZGVFZGl0b3I/OiBlZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yO1xuICBwcml2YXRlIHRleHRNb2RlbD86IGVkaXRvci5JVGV4dE1vZGVsO1xuICBwcml2YXRlIHRvRGlzcG9zZXM6IE1vbmFjby5JRGlzcG9zYWJsZVtdID0gW107XG5cbiAgcHJvdGVjdGVkIF9vbkNoYW5nZTogKF92YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCA9ICgpID0+ICh7fSk7XG5cbiAgcHJvdGVjdGVkIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGhvc3RFbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIEBJbmplY3QoR0lPX01PTkFDT19FRElUT1JfQ09ORklHKSBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZzogR2lvTW9uYWNvRWRpdG9yQ29uZmlnLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbW9uYWNvRWRpdG9yU2VydmljZTogR2lvTW9uYWNvRWRpdG9yU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGxhbmd1YWdlSnNvblNlcnZpY2U6IEdpb0xhbmd1YWdlSnNvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZVNwZWxTZXJ2aWNlOiBHaW9MYW5ndWFnZUVsU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZTogTmdab25lLFxuICAgIEBPcHRpb25hbCgpIEBTZWxmKCkgcHVibGljIHJlYWRvbmx5IG5nQ29udHJvbDogTmdDb250cm9sLFxuICApIHtcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcbiAgICAgIC8vIFNldCB0aGUgdmFsdWUgYWNjZXNzb3IgZGlyZWN0bHkgKGluc3RlYWQgb2YgcHJvdmlkaW5nXG4gICAgICAvLyBOR19WQUxVRV9BQ0NFU1NPUikgdG8gYXZvaWQgcnVubmluZyBpbnRvIGEgY2lyY3VsYXIgaW1wb3J0XG4gICAgICB0aGlzLm5nQ29udHJvbC52YWx1ZUFjY2Vzc29yID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5tb25hY29FZGl0b3JTZXJ2aWNlLmxvYWRFZGl0b3IoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gV2FpdCB1bnRpbCBtb25hY28gZWRpdG9yIGlzIGF2YWlsYWJsZVxuICAgIHRoaXMubW9uYWNvRWRpdG9yU2VydmljZS5sb2FkZWQkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCh7IG1vbmFjbyB9KSA9PiB7XG4gICAgICB0aGlzLnNldHVwRWRpdG9yKG1vbmFjbyk7XG5cbiAgICAgIHRoaXMubG9hZGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudG9EaXNwb3Nlcy5mb3JFYWNoKGQgPT4gZC5kaXNwb3NlKCkpO1xuXG4gICAgaWYgKHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IpIHtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0TW9kZWwpIHtcbiAgICAgIHRoaXMudGV4dE1vZGVsLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudGV4dE1vZGVsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyB3cml0ZVZhbHVlKF92YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKF92YWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IGlzU3RyaW5nKF92YWx1ZSkgPyBfdmFsdWUgOiBKU09OLnN0cmluZ2lmeShfdmFsdWUpO1xuICAgIH1cbiAgICBpZiAodGhpcy50ZXh0TW9kZWwpIHtcbiAgICAgIHRoaXMudGV4dE1vZGVsLnNldFZhbHVlKHRoaXMudmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAoX3ZhbHVlOiBzdHJpbmcgfCBudWxsKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgLy8gRnJvbSBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2VcbiAgcHVibGljIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMucmVhZE9ubHkgPSBpc0Rpc2FibGVkO1xuXG4gICAgaWYgKHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IpIHtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IudXBkYXRlT3B0aW9ucyh7XG4gICAgICAgIHJlYWRPbmx5OiBpc0Rpc2FibGVkLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEVkaXRvcihtb25hY286IHR5cGVvZiBNb25hY28pIHtcbiAgICBpZiAoIXRoaXMuaG9zdEVsZW1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZWRpdG9yIHJlZiBmb3VuZC4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5ob3N0RWxlbWVudC5uYXRpdmVFbGVtZW50O1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB7XG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgIGxhbmd1YWdlOiB0aGlzLmxhbmd1YWdlQ29uZmlnPy5sYW5ndWFnZSA/PyAoaXNKc29uU3RyaW5nKHRoaXMudmFsdWUpID8gJ2pzb24nIDogJ3BsYWludGV4dCcpLFxuICAgICAgdXJpOiBgY29kZS0ke3VuaXF1ZUlkKCl9YCxcbiAgICB9O1xuXG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy50ZXh0TW9kZWwgPSBtb25hY28uZWRpdG9yLmNyZWF0ZU1vZGVsKHNldHRpbmdzLnZhbHVlLCBzZXR0aW5ncy5sYW5ndWFnZSwgbW9uYWNvLlVyaS5wYXJzZShzZXR0aW5ncy51cmkpKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLmRlZmF1bHRPcHRpb25zLCB0aGlzLm9wdGlvbnMsIHtcbiAgICAgIHJlYWRPbmx5OiAhdGhpcy5uZ0NvbnRyb2wgJiYgJ3JlYWRPbmx5JyBpbiB0aGlzLm9wdGlvbnMgPyB0aGlzLm9wdGlvbnMucmVhZE9ubHkgOiB0aGlzLnJlYWRPbmx5LFxuICAgICAgdGhlbWU6IHRoaXMuY29uZmlnLnRoZW1lID8/ICd2cycsXG4gICAgICBtb2RlbDogdGhpcy50ZXh0TW9kZWwsXG4gICAgICBtaW5pbWFwOiB7XG4gICAgICAgIGVuYWJsZWQ6ICF0aGlzLmRpc2FibGVNaW5pTWFwLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IgPSBtb25hY28uZWRpdG9yLmNyZWF0ZShkb21FbGVtZW50LCB7XG4gICAgICAuLi5vcHRpb25zLFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmRpc2FibGVBdXRvRm9ybWF0KSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8uZ2V0QWN0aW9uKCdlZGl0b3IuYWN0aW9uLmZvcm1hdERvY3VtZW50Jyk/LnJ1bigpO1xuICAgICAgfSwgODApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNpbmdsZUxpbmVNb2RlKSB7XG4gICAgICB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5hZGRBY3Rpb24oe1xuICAgICAgICBpZDogJ2N1c3RvbS5hY3Rpb24nLFxuICAgICAgICBsYWJlbDogJ2N1c3RvbSBhY3Rpb24nLFxuICAgICAgICBrZXliaW5kaW5nczogW21vbmFjby5LZXlDb2RlLkVudGVyXSxcbiAgICAgICAgcHJlY29uZGl0aW9uOiAnIXN1Z2dlc3RXaWRnZXRWaXNpYmxlICYmICFyZW5hbWVJbnB1dFZpc2libGUgJiYgIWluU25pcHBldE1vZGUgJiYgIXF1aWNrRml4V2lkZ2V0VmlzaWJsZScsXG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIC8vIElnbm9yZSBFbnRlciBrZXkgaW4gc2luZ2xlIGxpbmUgbW9kZSB3aGVuIHdyaXRpbmdcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkRpZENoYW5nZUNvbnRlbnQgPSB0aGlzLnRleHRNb2RlbD8ub25EaWRDaGFuZ2VDb250ZW50KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHRNb2RlbFZhbHVlID0gdGhpcy50ZXh0TW9kZWw/LmdldFZhbHVlKCkgPz8gJyc7XG4gICAgICBpZiAodGhpcy5zaW5nbGVMaW5lTW9kZSkge1xuICAgICAgICAvLyBJZiB2YWx1ZSBoYXMgXFxuLCBcXHIgb3IgXFxyXFxuLCByZW1vdmUgdGhlbVxuICAgICAgICAvLyBVc2VmdWwgdG8gY2xlYXIgbGluZSBicmVha3Mgd2hlbiBwYXN0aW5nIHRleHRcbiAgICAgICAgY29uc3QgaGFzTGluZUJyZWFrID0gbmV3IFJlZ0V4cCgvKFxcclxcbnxcXG58XFxyKS9nbSk7XG4gICAgICAgIGlmIChoYXNMaW5lQnJlYWsudGVzdCh0ZXh0TW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8ucHVzaFVuZG9TdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnRleHRNb2RlbD8uc2V0VmFsdWUodGV4dE1vZGVsVmFsdWUucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgJycpKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8uc2V0UG9zaXRpb24oY3VycmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3I/LnBvcFVuZG9TdG9wKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSAmJiAhaXNFcXVhbCh0aGlzLnZhbHVlLCB0ZXh0TW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0ZXh0TW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRleHRNb2RlbFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNpbmdsZUxpbmVNb2RlKSB7XG4gICAgICAvLyBTb3VyY2UgOiBodHRwczovL2ZhcnphZHl6LmNvbS9ibG9nL3NpbmdsZS1saW5lLW1vbmFjby1lZGl0b3JcbiAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3I/LnVwZGF0ZU9wdGlvbnMoe1xuICAgICAgICAvLyBxdWlja1N1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgICAgICAgZml4ZWRPdmVyZmxvd1dpZGdldHM6IHRydWUsXG4gICAgICAgIGFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyOiAnb24nLFxuICAgICAgICBob3Zlcjoge1xuICAgICAgICAgIGRlbGF5OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHJvdW5kZWRTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBjb250ZXh0bWVudTogZmFsc2UsXG4gICAgICAgIGN1cnNvclN0eWxlOiAnbGluZS10aGluJyxcbiAgICAgICAgbGlua3M6IGZhbHNlLFxuICAgICAgICBmaW5kOiB7XG4gICAgICAgICAgYWRkRXh0cmFTcGFjZU9uVG9wOiBmYWxzZSxcbiAgICAgICAgICBhdXRvRmluZEluU2VsZWN0aW9uOiAnbmV2ZXInLFxuICAgICAgICAgIHNlZWRTZWFyY2hTdHJpbmdGcm9tU2VsZWN0aW9uOiAnbmV2ZXInLFxuICAgICAgICB9LFxuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgICAgICBvdmVydmlld1J1bGVyTGFuZXM6IDAsXG4gICAgICAgIHNjcm9sbEJleW9uZExhc3RDb2x1bW46IDAsXG4gICAgICAgIHdvcmRXcmFwOiAnb24nLFxuICAgICAgICBtaW5pbWFwOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVOdW1iZXJzOiAnb2ZmJyxcbiAgICAgICAgaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcjogdHJ1ZSxcbiAgICAgICAgb3ZlcnZpZXdSdWxlckJvcmRlcjogZmFsc2UsXG4gICAgICAgIGdseXBoTWFyZ2luOiBmYWxzZSxcbiAgICAgICAgZm9sZGluZzogZmFsc2UsXG4gICAgICAgIGxpbmVEZWNvcmF0aW9uc1dpZHRoOiAwLFxuICAgICAgICBsaW5lTnVtYmVyc01pbkNoYXJzOiAwLFxuICAgICAgICByZW5kZXJMaW5lSGlnaGxpZ2h0OiAnbm9uZScsXG4gICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgIGhvcml6b250YWw6ICdoaWRkZW4nLFxuICAgICAgICAgIHZlcnRpY2FsOiAnaGlkZGVuJyxcbiAgICAgICAgICBhbHdheXNDb25zdW1lTW91c2VXaGVlbDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkRpZEJsdXJFZGl0b3JXaWRnZXQgPSB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5vbkRpZEJsdXJFZGl0b3JXaWRnZXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b0Rpc3Bvc2VzID0gW29uRGlkQ2hhbmdlQ29udGVudCwgb25EaWRCbHVyRWRpdG9yV2lkZ2V0XS5maWx0ZXIoZCA9PiAhIWQpIGFzIE1vbmFjby5JRGlzcG9zYWJsZVtdO1xuXG4gICAgdGhpcy5zZXR1cExhbmd1YWdlKHNldHRpbmdzLnVyaSwgdGhpcy5sYW5ndWFnZUNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTGFuZ3VhZ2UodXJpOiBzdHJpbmcsIGxhbmd1YWdlQ29uZmlnPzogTW9uYWNvRWRpdG9yTGFuZ3VhZ2VDb25maWcpIHtcbiAgICBpZiAoIWxhbmd1YWdlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYW5ndWFnZUNvbmZpZy5sYW5ndWFnZSkge1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgIGlmIChsYW5ndWFnZUNvbmZpZy5zY2hlbWFzKSB7XG4gICAgICAgICAgdGhpcy5sYW5ndWFnZUpzb25TZXJ2aWNlLmFkZFNjaGVtYXModXJpLCBsYW5ndWFnZUNvbmZpZy5zY2hlbWFzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NwZWwnOlxuICAgICAgICBpZiAobGFuZ3VhZ2VDb25maWcuc2NoZW1hKSB7XG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNwZWxTZXJ2aWNlLnNldFNjaGVtYShsYW5ndWFnZUNvbmZpZy5zY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGlzSnNvblN0cmluZyA9IChzdHI6IHN0cmluZyk6IGJvb2xlYW4gPT4ge1xuICB0cnkge1xuICAgIEpTT04ucGFyc2Uoc3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn07XG4iXX0=
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2lvLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktcGFydGljbGVzLWFuZ3VsYXIvc3JjL2xpYi9naW8tbW9uYWNvLWVkaXRvci9naW8tbW9uYWNvLWVkaXRvci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxNQUFNLEVBRU4sV0FBVyxFQUNYLE1BQU0sRUFDTixLQUFLLEVBR0wsUUFBUSxFQUNSLElBQUksRUFDSixNQUFNLEdBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBRXJELE9BQU8sRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQXlCLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7QUFtQ2pHLE1BQU0sT0FBTyx3QkFBd0I7SUE0Q25DLFlBQ2tCLFdBQXVCLEVBQ1ksTUFBNkIsRUFDL0QsbUJBQTJDLEVBQzNDLG1CQUEyQyxFQUMzQyxtQkFBeUMsRUFDekMsaUJBQW9DLEVBQ3BDLE1BQWMsRUFDSyxTQUFvQjtRQVB4QyxnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUNZLFdBQU0sR0FBTixNQUFNLENBQXVCO1FBQy9ELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBd0I7UUFDM0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUF3QjtRQUMzQyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQXNCO1FBQ3pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNL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QUFDO0lBQ2xCLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChDKSAyMDIzIFRoZSBHcmF2aXRlZSB0ZWFtIChodHRwOi8vZ3Jhdml0ZWUuaW8pXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIGVmZmVjdCxcbiAgRWxlbWVudFJlZixcbiAgSG9zdEJpbmRpbmcsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPcHRpb25hbCxcbiAgU2VsZixcbiAgc2lnbmFsLFxuICBXcml0YWJsZVNpZ25hbCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTmdDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgaXNFcXVhbCwgaXNTdHJpbmcsIHVuaXF1ZUlkIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBNb25hY28sIHsgZWRpdG9yIH0gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBSZXBsYXlTdWJqZWN0LCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEdJT19NT05BQ09fRURJVE9SX0NPTkZJRywgR2lvTW9uYWNvRWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9tb2RlbHMvR2lvTW9uYWNvRWRpdG9yQ29uZmlnJztcbmltcG9ydCB7IEdpb0xhbmd1YWdlSnNvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL2dpby1sYW5ndWFnZS1qc29uLnNlcnZpY2UnO1xuaW1wb3J0IHsgR2lvTW9uYWNvRWRpdG9yU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2lvLW1vbmFjby1lZGl0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBHaW9MYW5ndWFnZUVsU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZ2lvLWxhbmd1YWdlLWVsLnNlcnZpY2UnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYSB9IGZyb20gJy4vbW9kZWxzL0pTT05TY2hlbWFBdXRvQ29tcGxldGUnO1xuXG5leHBvcnQgdHlwZSBNb25hY29FZGl0b3JMYW5ndWFnZUNvbmZpZyA9XG4gIHwge1xuICAgICAgbGFuZ3VhZ2U6ICdqc29uJztcbiAgICAgIHNjaGVtYXM/OiB7IHVyaTogc3RyaW5nOyBzY2hlbWE6IHVua25vd24gfVtdO1xuICAgIH1cbiAgfCB7XG4gICAgICBsYW5ndWFnZTogJ21hcmtkb3duJztcbiAgICB9XG4gIHwge1xuICAgICAgbGFuZ3VhZ2U6ICdodG1sJztcbiAgICB9XG4gIHwge1xuICAgICAgbGFuZ3VhZ2U6ICd5YW1sJztcbiAgICB9XG4gIHwge1xuICAgICAgbGFuZ3VhZ2U6ICdzcGVsJztcbiAgICAgIHNjaGVtYT86IEpTT05TY2hlbWE7XG4gICAgfVxuICB8IHtcbiAgICAgIGxhbmd1YWdlOiAnY3NzJztcbiAgICB9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdnaW8tbW9uYWNvLWVkaXRvcicsXG4gIHRlbXBsYXRlOiBgIDxkaXYgKm5nSWY9XCJsb2FkZWQkIHwgYXN5bmNcIj5Mb2FkaW5nLi4uPC9kaXY+YCxcbiAgc3R5bGVVcmxzOiBbJy4vZ2lvLW1vbmFjby1lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHN0YW5kYWxvbmU6IGZhbHNlLFxufSlcbmV4cG9ydCBjbGFzcyBHaW9Nb25hY29FZGl0b3JDb21wb25lbnQgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KClcbiAgcHVibGljIGxhbmd1YWdlQ29uZmlnPzogTW9uYWNvRWRpdG9yTGFuZ3VhZ2VDb25maWc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIG9wdGlvbnM6IGVkaXRvci5JU3RhbmRhbG9uZUVkaXRvckNvbnN0cnVjdGlvbk9wdGlvbnMgPSB7fTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzYWJsZU1pbmlNYXAgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBwdWJsaWMgZGlzYWJsZUF1dG9Gb3JtYXQgPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLnNpbmdsZS1saW5lJylcbiAgcHVibGljIHNpbmdsZUxpbmVNb2RlID0gZmFsc2U7XG5cbiAgcHVibGljIGxvYWRlZCQgPSBuZXcgUmVwbGF5U3ViamVjdDxib29sZWFuPigxKTtcblxuICBwcml2YXRlIGRlZmF1bHRPcHRpb25zOiBlZGl0b3IuSVN0YW5kYWxvbmVFZGl0b3JDb25zdHJ1Y3Rpb25PcHRpb25zID0ge1xuICAgIGNvbnRleHRtZW51OiBmYWxzZSxcbiAgICBtaW5pbWFwOiB7XG4gICAgICBlbmFibGVkOiB0cnVlLFxuICAgIH0sXG4gICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgIHNjcm9sbEJleW9uZExhc3RMaW5lOiBmYWxzZSxcbiAgfTtcblxuICBwdWJsaWMgdmFsdWUgPSAnJztcbiAgcHVibGljIHJlYWRPbmx5ID0gZmFsc2U7XG4gIHB1YmxpYyBzdGFuZGFsb25lQ29kZUVkaXRvcj86IGVkaXRvci5JU3RhbmRhbG9uZUNvZGVFZGl0b3I7XG4gIHByaXZhdGUgdGV4dE1vZGVsPzogZWRpdG9yLklUZXh0TW9kZWw7XG4gIHByaXZhdGUgdG9EaXNwb3NlczogTW9uYWNvLklEaXNwb3NhYmxlW10gPSBbXTtcblxuICBwcml2YXRlIGlzTW9uYWNvRWRpdG9yUmVhZHk6IFdyaXRhYmxlU2lnbmFsPHsgaXNTZXR1cDogYm9vbGVhbjsgaGFzRmlyc3RWYWx1ZTogYm9vbGVhbiB9PiA9IHNpZ25hbCh7XG4gICAgaXNTZXR1cDogZmFsc2UsXG4gICAgaGFzRmlyc3RWYWx1ZTogZmFsc2UsXG4gIH0pO1xuXG4gIHByb3RlY3RlZCBfb25DaGFuZ2U6IChfdmFsdWU6IHN0cmluZyB8IG51bGwpID0+IHZvaWQgPSAoKSA9PiAoe30pO1xuXG4gIHByb3RlY3RlZCBfb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gKHt9KTtcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyByZWFkb25seSBob3N0RWxlbWVudDogRWxlbWVudFJlZixcbiAgICBASW5qZWN0KEdJT19NT05BQ09fRURJVE9SX0NPTkZJRykgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IEdpb01vbmFjb0VkaXRvckNvbmZpZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG1vbmFjb0VkaXRvclNlcnZpY2U6IEdpb01vbmFjb0VkaXRvclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBsYW5ndWFnZUpzb25TZXJ2aWNlOiBHaW9MYW5ndWFnZUpzb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbGFuZ3VhZ2VTcGVsU2VydmljZTogR2lvTGFuZ3VhZ2VFbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBuZ1pvbmU6IE5nWm9uZSxcbiAgICBAT3B0aW9uYWwoKSBAU2VsZigpIHB1YmxpYyByZWFkb25seSBuZ0NvbnRyb2w6IE5nQ29udHJvbCxcbiAgKSB7XG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XG4gICAgICAvLyBTZXQgdGhlIHZhbHVlIGFjY2Vzc29yIGRpcmVjdGx5IChpbnN0ZWFkIG9mIHByb3ZpZGluZ1xuICAgICAgLy8gTkdfVkFMVUVfQUNDRVNTT1IpIHRvIGF2b2lkIHJ1bm5pbmcgaW50byBhIGNpcmN1bGFyIGltcG9ydFxuICAgICAgdGhpcy5uZ0NvbnRyb2wudmFsdWVBY2Nlc3NvciA9IHRoaXM7XG4gICAgfVxuICAgIHRoaXMubW9uYWNvRWRpdG9yU2VydmljZS5sb2FkRWRpdG9yKCk7XG5cbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgeyBpc1NldHVwLCBoYXNGaXJzdFZhbHVlIH0gPSB0aGlzLmlzTW9uYWNvRWRpdG9yUmVhZHkoKTtcbiAgICAgIGlmIChpc1NldHVwICYmIGhhc0ZpcnN0VmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGV4dE1vZGVsKSB7XG4gICAgICAgICAgdGhpcy50ZXh0TW9kZWwuc2V0VmFsdWUodGhpcy52YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZU1vZGVsTGFuZ3VhZ2UoKTtcbiAgICAgICAgdGhpcy5hdXRvZm9ybWF0VmFsdWUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gV2FpdCB1bnRpbCBtb25hY28gZWRpdG9yIGlzIGF2YWlsYWJsZVxuICAgIHRoaXMubW9uYWNvRWRpdG9yU2VydmljZS5sb2FkZWQkLnBpcGUodGFrZVVudGlsKHRoaXMudW5zdWJzY3JpYmUkKSkuc3Vic2NyaWJlKCh7IG1vbmFjbyB9KSA9PiB7XG4gICAgICB0aGlzLnNldHVwRWRpdG9yKG1vbmFjbyk7XG4gICAgICB0aGlzLmlzTW9uYWNvRWRpdG9yUmVhZHkudXBkYXRlKCh7IGhhc0ZpcnN0VmFsdWUgfSkgPT4gKHsgaXNTZXR1cDogdHJ1ZSwgaGFzRmlyc3RWYWx1ZSB9KSk7XG5cbiAgICAgIHRoaXMubG9hZGVkJC5uZXh0KGZhbHNlKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMudG9EaXNwb3Nlcy5mb3JFYWNoKGQgPT4gZC5kaXNwb3NlKCkpO1xuXG4gICAgaWYgKHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IpIHtcbiAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3IuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50ZXh0TW9kZWwpIHtcbiAgICAgIHRoaXMudGV4dE1vZGVsLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMudGV4dE1vZGVsID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG4gICAgdGhpcy51bnN1YnNjcmliZSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyB3cml0ZVZhbHVlKF92YWx1ZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChfdmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBpc1N0cmluZyhfdmFsdWUpID8gX3ZhbHVlIDogSlNPTi5zdHJpbmdpZnkoX3ZhbHVlKTtcbiAgICAgIHRoaXMuaXNNb25hY29FZGl0b3JSZWFkeS51cGRhdGUoKHsgaXNTZXR1cCB9KSA9PiAoeyBpc1NldHVwLCBoYXNGaXJzdFZhbHVlOiB0cnVlIH0pKTtcbiAgICB9XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPbkNoYW5nZShmbjogKF92YWx1ZTogc3RyaW5nIHwgbnVsbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XG4gIH1cblxuICAvLyBGcm9tIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZVxuICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8vIEZyb20gQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlXG4gIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLnJlYWRPbmx5ID0gaXNEaXNhYmxlZDtcblxuICAgIGlmICh0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yKSB7XG4gICAgICB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yLnVwZGF0ZU9wdGlvbnMoe1xuICAgICAgICByZWFkT25seTogaXNEaXNhYmxlZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0dXBFZGl0b3IobW9uYWNvOiB0eXBlb2YgTW9uYWNvKSB7XG4gICAgaWYgKCF0aGlzLmhvc3RFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGVkaXRvciByZWYgZm91bmQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9tRWxlbWVudCA9IHRoaXMuaG9zdEVsZW1lbnQubmF0aXZlRWxlbWVudDtcblxuICAgIGNvbnN0IHNldHRpbmdzID0ge1xuICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICBsYW5ndWFnZTogdGhpcy5sYW5ndWFnZUNvbmZpZz8ubGFuZ3VhZ2UgPz8gKGlzSnNvblN0cmluZyh0aGlzLnZhbHVlKSA/ICdqc29uJyA6ICdwbGFpbnRleHQnKSxcbiAgICAgIHVyaTogYGNvZGUtJHt1bmlxdWVJZCgpfWAsXG4gICAgfTtcblxuICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMudGV4dE1vZGVsID0gbW9uYWNvLmVkaXRvci5jcmVhdGVNb2RlbChzZXR0aW5ncy52YWx1ZSwgc2V0dGluZ3MubGFuZ3VhZ2UsIG1vbmFjby5VcmkucGFyc2Uoc2V0dGluZ3MudXJpKSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5kZWZhdWx0T3B0aW9ucywgdGhpcy5vcHRpb25zLCB7XG4gICAgICByZWFkT25seTogIXRoaXMubmdDb250cm9sICYmICdyZWFkT25seScgaW4gdGhpcy5vcHRpb25zID8gdGhpcy5vcHRpb25zLnJlYWRPbmx5IDogdGhpcy5yZWFkT25seSxcbiAgICAgIHRoZW1lOiB0aGlzLmNvbmZpZy50aGVtZSA/PyAndnMnLFxuICAgICAgbW9kZWw6IHRoaXMudGV4dE1vZGVsLFxuICAgICAgbWluaW1hcDoge1xuICAgICAgICBlbmFibGVkOiAhdGhpcy5kaXNhYmxlTWluaU1hcCxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yID0gbW9uYWNvLmVkaXRvci5jcmVhdGUoZG9tRWxlbWVudCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNpbmdsZUxpbmVNb2RlKSB7XG4gICAgICB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5hZGRBY3Rpb24oe1xuICAgICAgICBpZDogJ2N1c3RvbS5hY3Rpb24nLFxuICAgICAgICBsYWJlbDogJ2N1c3RvbSBhY3Rpb24nLFxuICAgICAgICBrZXliaW5kaW5nczogW21vbmFjby5LZXlDb2RlLkVudGVyXSxcbiAgICAgICAgcHJlY29uZGl0aW9uOiAnIXN1Z2dlc3RXaWRnZXRWaXNpYmxlICYmICFyZW5hbWVJbnB1dFZpc2libGUgJiYgIWluU25pcHBldE1vZGUgJiYgIXF1aWNrRml4V2lkZ2V0VmlzaWJsZScsXG4gICAgICAgIHJ1bjogKCkgPT4ge1xuICAgICAgICAgIC8vIElnbm9yZSBFbnRlciBrZXkgaW4gc2luZ2xlIGxpbmUgbW9kZSB3aGVuIHdyaXRpbmdcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkRpZENoYW5nZUNvbnRlbnQgPSB0aGlzLnRleHRNb2RlbD8ub25EaWRDaGFuZ2VDb250ZW50KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHRNb2RlbFZhbHVlID0gdGhpcy50ZXh0TW9kZWw/LmdldFZhbHVlKCkgPz8gJyc7XG4gICAgICBpZiAodGhpcy5zaW5nbGVMaW5lTW9kZSkge1xuICAgICAgICAvLyBJZiB2YWx1ZSBoYXMgXFxuLCBcXHIgb3IgXFxyXFxuLCByZW1vdmUgdGhlbVxuICAgICAgICAvLyBVc2VmdWwgdG8gY2xlYXIgbGluZSBicmVha3Mgd2hlbiBwYXN0aW5nIHRleHRcbiAgICAgICAgY29uc3QgaGFzTGluZUJyZWFrID0gbmV3IFJlZ0V4cCgvKFxcclxcbnxcXG58XFxyKS9nbSk7XG4gICAgICAgIGlmIChoYXNMaW5lQnJlYWsudGVzdCh0ZXh0TW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5nZXRQb3NpdGlvbigpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8ucHVzaFVuZG9TdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnRleHRNb2RlbD8uc2V0VmFsdWUodGV4dE1vZGVsVmFsdWUucmVwbGFjZSgvKFxcclxcbnxcXG58XFxyKS9nbSwgJycpKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8uc2V0UG9zaXRpb24oY3VycmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3I/LnBvcFVuZG9TdG9wKCk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5yZWFkT25seSAmJiAhaXNFcXVhbCh0aGlzLnZhbHVlLCB0ZXh0TW9kZWxWYWx1ZSkpIHtcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0ZXh0TW9kZWxWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKHRleHRNb2RlbFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX29uVG91Y2hlZCgpO1xuICAgICAgICAgIH0sIDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnNpbmdsZUxpbmVNb2RlKSB7XG4gICAgICAvLyBTb3VyY2UgOiBodHRwczovL2ZhcnphZHl6LmNvbS9ibG9nL3NpbmdsZS1saW5lLW1vbmFjby1lZGl0b3JcbiAgICAgIHRoaXMuc3RhbmRhbG9uZUNvZGVFZGl0b3I/LnVwZGF0ZU9wdGlvbnMoe1xuICAgICAgICAvLyBxdWlja1N1Z2dlc3Rpb25zOiBmYWxzZSxcbiAgICAgICAgZml4ZWRPdmVyZmxvd1dpZGdldHM6IHRydWUsXG4gICAgICAgIGFjY2VwdFN1Z2dlc3Rpb25PbkVudGVyOiAnb24nLFxuICAgICAgICBob3Zlcjoge1xuICAgICAgICAgIGRlbGF5OiAxMDAsXG4gICAgICAgIH0sXG4gICAgICAgIHJvdW5kZWRTZWxlY3Rpb246IGZhbHNlLFxuICAgICAgICBjb250ZXh0bWVudTogZmFsc2UsXG4gICAgICAgIGN1cnNvclN0eWxlOiAnbGluZS10aGluJyxcbiAgICAgICAgbGlua3M6IGZhbHNlLFxuICAgICAgICBmaW5kOiB7XG4gICAgICAgICAgYWRkRXh0cmFTcGFjZU9uVG9wOiBmYWxzZSxcbiAgICAgICAgICBhdXRvRmluZEluU2VsZWN0aW9uOiAnbmV2ZXInLFxuICAgICAgICAgIHNlZWRTZWFyY2hTdHJpbmdGcm9tU2VsZWN0aW9uOiAnbmV2ZXInLFxuICAgICAgICB9LFxuICAgICAgICBmb250U2l6ZTogMTQsXG4gICAgICAgIGZvbnRXZWlnaHQ6ICdub3JtYWwnLFxuICAgICAgICBvdmVydmlld1J1bGVyTGFuZXM6IDAsXG4gICAgICAgIHNjcm9sbEJleW9uZExhc3RDb2x1bW46IDAsXG4gICAgICAgIHdvcmRXcmFwOiAnb24nLFxuICAgICAgICBtaW5pbWFwOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmVOdW1iZXJzOiAnb2ZmJyxcbiAgICAgICAgaGlkZUN1cnNvckluT3ZlcnZpZXdSdWxlcjogdHJ1ZSxcbiAgICAgICAgb3ZlcnZpZXdSdWxlckJvcmRlcjogZmFsc2UsXG4gICAgICAgIGdseXBoTWFyZ2luOiBmYWxzZSxcbiAgICAgICAgZm9sZGluZzogZmFsc2UsXG4gICAgICAgIGxpbmVEZWNvcmF0aW9uc1dpZHRoOiAwLFxuICAgICAgICBsaW5lTnVtYmVyc01pbkNoYXJzOiAwLFxuICAgICAgICByZW5kZXJMaW5lSGlnaGxpZ2h0OiAnbm9uZScsXG4gICAgICAgIHNjcm9sbGJhcjoge1xuICAgICAgICAgIGhvcml6b250YWw6ICdoaWRkZW4nLFxuICAgICAgICAgIHZlcnRpY2FsOiAnaGlkZGVuJyxcbiAgICAgICAgICBhbHdheXNDb25zdW1lTW91c2VXaGVlbDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBvbkRpZEJsdXJFZGl0b3JXaWRnZXQgPSB0aGlzLnN0YW5kYWxvbmVDb2RlRWRpdG9yPy5vbkRpZEJsdXJFZGl0b3JXaWRnZXQoKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgaWYgKCF0aGlzLnJlYWRPbmx5KSB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgdGhpcy50b0Rpc3Bvc2VzID0gW29uRGlkQ2hhbmdlQ29udGVudCwgb25EaWRCbHVyRWRpdG9yV2lkZ2V0XS5maWx0ZXIoZCA9PiAhIWQpIGFzIE1vbmFjby5JRGlzcG9zYWJsZVtdO1xuXG4gICAgdGhpcy5zZXR1cExhbmd1YWdlKHNldHRpbmdzLnVyaSwgdGhpcy5sYW5ndWFnZUNvbmZpZyk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTGFuZ3VhZ2UodXJpOiBzdHJpbmcsIGxhbmd1YWdlQ29uZmlnPzogTW9uYWNvRWRpdG9yTGFuZ3VhZ2VDb25maWcpIHtcbiAgICBpZiAoIWxhbmd1YWdlQ29uZmlnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYW5ndWFnZUNvbmZpZy5sYW5ndWFnZSkge1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICAgIGlmIChsYW5ndWFnZUNvbmZpZy5zY2hlbWFzKSB7XG4gICAgICAgICAgdGhpcy5sYW5ndWFnZUpzb25TZXJ2aWNlLmFkZFNjaGVtYXModXJpLCBsYW5ndWFnZUNvbmZpZy5zY2hlbWFzKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3NwZWwnOlxuICAgICAgICBpZiAobGFuZ3VhZ2VDb25maWcuc2NoZW1hKSB7XG4gICAgICAgICAgdGhpcy5sYW5ndWFnZVNwZWxTZXJ2aWNlLnNldFNjaGVtYShsYW5ndWFnZUNvbmZpZy5zY2hlbWEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVNb2RlbExhbmd1YWdlKCkge1xuICAgIGNvbnN0IGxhbmd1YWdlSWQgPSB0aGlzLmxhbmd1YWdlQ29uZmlnPy5sYW5ndWFnZSA/PyAoaXNKc29uU3RyaW5nKHRoaXMudmFsdWUpID8gJ2pzb24nIDogJ3BsYWludGV4dCcpO1xuICAgIGlmICh0aGlzLnRleHRNb2RlbCAmJiB3aW5kb3cubW9uYWNvKSB7XG4gICAgICB3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKHRoaXMudGV4dE1vZGVsLCBsYW5ndWFnZUlkKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9mb3JtYXRWYWx1ZSgpIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZUF1dG9Gb3JtYXQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwcmV2aW91c1JlYWRPbmx5U3RhdGUgPSB0aGlzLm9wdGlvbnMucmVhZE9ubHkgfHwgdGhpcy5yZWFkT25seTtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8udXBkYXRlT3B0aW9ucyh7IHJlYWRPbmx5OiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvclxuICAgICAgICAgID8uZ2V0QWN0aW9uKCdlZGl0b3IuYWN0aW9uLmZvcm1hdERvY3VtZW50JylcbiAgICAgICAgICA/LnJ1bigpXG4gICAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdGFuZGFsb25lQ29kZUVkaXRvcj8udXBkYXRlT3B0aW9ucyh7IHJlYWRPbmx5OiBwcmV2aW91c1JlYWRPbmx5U3RhdGUgfSk7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0sIDgwKTtcbiAgICB9XG4gIH1cbn1cblxuY29uc3QgaXNKc29uU3RyaW5nID0gKHN0cjogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gIHRyeSB7XG4gICAgSlNPTi5wYXJzZShzdHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0cnVlO1xufTtcbiJdfQ==