@provoly/dashboard 1.3.3 → 1.3.5

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.
Files changed (22) hide show
  1. package/esm2022/dataset/components/dataset.component.mjs +1 -1
  2. package/esm2022/lib/core/components/select/select.component.mjs +3 -3
  3. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.mjs +14 -4
  4. package/esm2022/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.mjs +14 -6
  5. package/esm2022/presentation/style/css.component.mjs +2 -2
  6. package/esm2022/restitution/components/restitution-catalog/restitution-catalog.component.mjs +6 -5
  7. package/esm2022/restitution/style/css.component.mjs +2 -2
  8. package/esm2022/widgets/widget-table/component/widget-table.component.mjs +1 -1
  9. package/fesm2022/provoly-dashboard-dataset.mjs +1 -1
  10. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  11. package/fesm2022/provoly-dashboard-presentation.mjs +2 -2
  12. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  13. package/fesm2022/provoly-dashboard-restitution.mjs +7 -6
  14. package/fesm2022/provoly-dashboard-restitution.mjs.map +1 -1
  15. package/fesm2022/provoly-dashboard-widgets-widget-table.mjs.map +1 -1
  16. package/fesm2022/provoly-dashboard.mjs +25 -9
  17. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  18. package/lib/dashboard/components/widgets/datasource-selector/datasource-list/datasource-list.component.d.ts +2 -1
  19. package/lib/dashboard/components/widgets/datasource-selector/datasource-selector.component.d.ts +3 -1
  20. package/package.json +36 -36
  21. package/presentation/style/_o-pry-presentation.scss +1 -1
  22. package/restitution/components/restitution-catalog/restitution-catalog.component.d.ts +1 -1
@@ -19,7 +19,7 @@ export class PryDatasetComponent {
19
19
  this.selectedMode = ViewMode.CONSULT;
20
20
  }
21
21
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasetComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
22
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasetComponent, selector: "pry-dataset", ngImport: i0, template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-dataset-layout u-display-flex -column\">\n @switch (selectedMode) {\n @case (ViewMode.CATALOG) {\n <h1 class=\"a-h1 u-self-start\">{{ '@pry.dataset.title' | i18n }}</h1>\n <pry-datasource-list (consultedDataset)=\"consult($event)\"></pry-datasource-list>\n }\n @case (ViewMode.CONSULT) {\n @if (selectedDataset) {\n <pry-dataset-detail\n [dataset]=\"selectedDataset\"\n (goToCatalog)=\"selectedMode = ViewMode.CATALOG\"\n ></pry-dataset-detail>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: i2.PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected"] }, { kind: "component", type: i3.PryDatasetCssComponent, selector: "pry-dataset-css" }, { kind: "component", type: i4.PryDatasetDetailComponent, selector: "pry-dataset-detail", inputs: ["dataset"], outputs: ["goToCatalog"] }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
22
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasetComponent, selector: "pry-dataset", ngImport: i0, template: "<pry-dataset-css></pry-dataset-css>\n<div class=\"o-dataset-layout u-display-flex -column\">\n @switch (selectedMode) {\n @case (ViewMode.CATALOG) {\n <h1 class=\"a-h1 u-self-start\">{{ '@pry.dataset.title' | i18n }}</h1>\n <pry-datasource-list (consultedDataset)=\"consult($event)\"></pry-datasource-list>\n }\n @case (ViewMode.CONSULT) {\n @if (selectedDataset) {\n <pry-dataset-detail\n [dataset]=\"selectedDataset\"\n (goToCatalog)=\"selectedMode = ViewMode.CATALOG\"\n ></pry-dataset-detail>\n }\n }\n }\n</div>\n", dependencies: [{ kind: "component", type: i2.PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected", "searchOrCategoryChanged"] }, { kind: "component", type: i3.PryDatasetCssComponent, selector: "pry-dataset-css" }, { kind: "component", type: i4.PryDatasetDetailComponent, selector: "pry-dataset-detail", inputs: ["dataset"], outputs: ["goToCatalog"] }, { kind: "pipe", type: i2.I18nPipe, name: "i18n" }] }); }
23
23
  }
24
24
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasetComponent, decorators: [{
25
25
  type: Component,
@@ -287,7 +287,7 @@ export class PrySelectComponent extends SubscriptionnerDirective {
287
287
  multi: true
288
288
  },
289
289
  SelectA11yService
290
- ], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n <ng-container *ngIf=\"autocomplete; else noAutocomplete\">\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n #input\n />\n </ng-container>\n <ng-template #noAutocomplete>\n <ng-container *ngIf=\"(valueItems$ | async).length === 0; else selectedValues\">\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n </ng-container>\n <ng-template #selectedValues>\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n <ng-container *ngIf=\"template; else noTemplateLabel\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplateLabel>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ?? '') + value | i18n : { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-template>\n <div class=\"a-pry-select__filler\"></div>\n </ng-template>\n </div>\n <div class=\"a-pry-select__actions\">\n <span *ngIf=\"clearable\" class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"readonly\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n <div class=\"a-pry-select__options__option -hint\" *ngIf=\"loading\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"30\"\n [height]=\"30\"\n *ngIf=\"loading\"\n />\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngFor=\"let item of matchingItems$ | async; let index = index; let first = first; let last = last\">\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplate>\n <pry-checkbox (click)=\"$event.preventDefault()\" *ngIf=\"multiple\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"></pry-checkbox>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n : { warn: false } }}\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.I18nPipe, name: "i18n" }] }); }
290
+ ], viewQueries: [{ propertyName: "optionsModal", first: true, predicate: ["optionsModal"], descendants: true, read: TemplateRef }, { propertyName: "selectElement", first: true, predicate: ["selectElement"], descendants: true }, { propertyName: "input", first: true, predicate: ["input"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n <ng-container *ngIf=\"autocomplete; else noAutocomplete\">\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder\"\n #input\n />\n </ng-container>\n <ng-template #noAutocomplete>\n <ng-container *ngIf=\"(valueItems$ | async).length === 0; else selectedValues\">\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n </ng-container>\n <ng-template #selectedValues>\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n <ng-container *ngIf=\"template; else noTemplateLabel\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplateLabel>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-template>\n <div class=\"a-pry-select__filler\"></div>\n </ng-template>\n </div>\n <div class=\"a-pry-select__actions\">\n <span *ngIf=\"clearable\" class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"readonly\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n <div class=\"a-pry-select__options__option -hint\" *ngIf=\"loading\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"30\"\n [height]=\"30\"\n *ngIf=\"loading\"\n />\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngFor=\"let item of matchingItems$ | async; let index = index; let first = first; let last = last\">\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplate>\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n *ngIf=\"multiple\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i3.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.CdkMonitorFocus, selector: "[cdkMonitorElementFocus], [cdkMonitorSubtreeFocus]", outputs: ["cdkFocusChange"], exportAs: ["cdkMonitorFocus"] }, { kind: "directive", type: i4.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i5.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i7.PryCheckboxComponent, selector: "pry-checkbox", inputs: ["circle"] }, { kind: "pipe", type: i4.AsyncPipe, name: "async" }, { kind: "pipe", type: i8.I18nPipe, name: "i18n" }] }); }
291
291
  }
292
292
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PrySelectComponent, decorators: [{
293
293
  type: Component,
@@ -298,7 +298,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
298
298
  multi: true
299
299
  },
300
300
  SelectA11yService
301
- ], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n <ng-container *ngIf=\"autocomplete; else noAutocomplete\">\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n #input\n />\n </ng-container>\n <ng-template #noAutocomplete>\n <ng-container *ngIf=\"(valueItems$ | async).length === 0; else selectedValues\">\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n </ng-container>\n <ng-template #selectedValues>\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n <ng-container *ngIf=\"template; else noTemplateLabel\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplateLabel>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ?? '') + value | i18n : { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-template>\n <div class=\"a-pry-select__filler\"></div>\n </ng-template>\n </div>\n <div class=\"a-pry-select__actions\">\n <span *ngIf=\"clearable\" class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"readonly\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n <div class=\"a-pry-select__options__option -hint\" *ngIf=\"loading\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"30\"\n [height]=\"30\"\n *ngIf=\"loading\"\n />\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngFor=\"let item of matchingItems$ | async; let index = index; let first = first; let last = last\">\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplate>\n <pry-checkbox (click)=\"$event.preventDefault()\" *ngIf=\"multiple\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"></pry-checkbox>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n : { warn: false } }}\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n" }]
301
+ ], template: "<div\n class=\"a-pry-select\"\n [attr.aria-disabled]=\"disabled\"\n #selectElement\n [class.-focused]=\"focused\"\n (click)=\"handleClick()\"\n role=\"combobox\"\n [attr.aria-expanded]=\"open\"\n [attr.aria-owns]=\"open ? modalId : null\"\n aria-haspopup=\"listbox\"\n tabindex=\"0\"\n cdkMonitorElementFocus\n (cdkFocusChange)=\"onFocusChange($event)\"\n (keydown)=\"onKeydownSelect($event)\"\n>\n <div class=\"a-pry-select__content\">\n <ng-container *ngIf=\"autocomplete; else noAutocomplete\">\n <input\n type=\"text\"\n class=\"a-pry-select__search\"\n [ngModel]=\"search$.getValue()\"\n (ngModelChange)=\"search($event, true)\"\n aria-autocomplete=\"list\"\n [attr.aria-controls]=\"open ? modalId : null\"\n [attr.aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n (keydown)=\"onKeydownAutocompleteInput($event)\"\n [placeholder]=\"placeholder\"\n #input\n />\n </ng-container>\n <ng-template #noAutocomplete>\n <ng-container *ngIf=\"(valueItems$ | async).length === 0; else selectedValues\">\n <span class=\"a-pry-select__placeholder\">{{ placeholder }}</span>\n </ng-container>\n <ng-template #selectedValues>\n <ng-container *ngFor=\"let item of valueItems$ | async\">\n <div\n class=\"a-pry-select__value\"\n [class.pry-select-form]=\"isForm\"\n [class.-multiple]=\"multiple\"\n [ngClass]=\"item ? item[bindClasses ?? ''] ?? {} : {}\"\n >\n <ng-container *ngIf=\"template; else noTemplateLabel\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplateLabel>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ?? '') + value | i18n: { warn: false } }}\n <span\n *ngIf=\"multiple && clearable\"\n class=\"a-pry-select__clear\"\n (click)=\"clear($event, item)\"\n aria-hidden=\"true\"\n >\u00D7</span\n >\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-template>\n <div class=\"a-pry-select__filler\"></div>\n </ng-template>\n </div>\n <div class=\"a-pry-select__actions\">\n <span *ngIf=\"clearable\" class=\"a-pry-select__clear\" (click)=\"clearAll($event)\" aria-hidden=\"true\">\u00D7</span>\n <pry-icon\n class=\"a-pry-select__toggle\"\n [iconSvg]=\"open ? 'chevron_top' : 'chevron_bottom'\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n </div>\n</div>\n<ng-template #optionsModal>\n <div\n role=\"listbox\"\n [attr.aria-label]=\"'@pry.select.label' | i18n\"\n [id]=\"modalId\"\n [attr.aria-activedescendant]=\"'select-option-' + activeDescendant\"\n [attr.aria-multiselectable]=\"multiple\"\n [attr.required]=\"required\"\n [attr.aria-readonly]=\"readonly\"\n cdkTrapFocus=\"!autocomplete\"\n [cdkTrapFocusAutoCapture]=\"!autocomplete\"\n >\n <div class=\"a-pry-select__options__option -hint\" *ngIf=\"loading\" [style.width.px]=\"modalWidth\">\n <div class=\"no-widget no-widget__loader\">\n <pry-icon\n iconSvg=\"loader\"\n class=\"no-widget__loading\"\n [alt]=\"'@pry.widget.target.loading' | i18n\"\n [width]=\"30\"\n [height]=\"30\"\n *ngIf=\"loading\"\n />\n </div>\n <p>{{ '@pry.select.loading' | i18n }}...</p>\n </div>\n <ng-container *ngIf=\"!loading\">\n <ng-container *ngFor=\"let item of matchingItems$ | async; let index = index; let first = first; let last = last\">\n <div\n class=\"a-pry-select__options__option\"\n [attr.aria-selected]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-checked]=\"(valueItems$ | async).includes(item)\"\n [attr.aria-disabled]=\"disabled\"\n (click)=\"select($event, item, index)\"\n (keydown)=\"onKeydownOption($event, item, index, optionDivRef, first, last)\"\n [style.width.px]=\"modalWidth\"\n role=\"option\"\n [id]=\"'select-option-' + index\"\n tabindex=\"0\"\n #optionDivRef\n >\n <ng-container *ngIf=\"template; else noTemplate\">\n <ng-container [ngTemplateOutlet]=\"template\" [ngTemplateOutletContext]=\"{ item, clear }\"></ng-container>\n </ng-container>\n <ng-template #noTemplate>\n <pry-checkbox\n (click)=\"$event.preventDefault()\"\n *ngIf=\"multiple\"\n [ngModel]=\"(valueItems$ | async).includes(item)\"\n ></pry-checkbox>\n <pry-icon\n *ngIf=\"bindIcon\"\n [iconSvg]=\"item[bindIcon]\"\n [width]=\"iconSize[0]\"\n [height]=\"iconSize[1]\"\n ></pry-icon>\n <ng-container *ngIf=\"bindLabel ? item?.[bindLabel] : item as value\">\n {{ (i18nPrefix ? i18nPrefix : '') + value | i18n: { warn: false } }}\n </ng-container>\n </ng-template>\n </div>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n" }]
302
302
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Overlay }, { type: i0.ViewContainerRef }, { type: i2.SelectA11yService }], propDecorators: { items: [{
303
303
  type: Input
304
304
  }], clearable: [{
@@ -357,4 +357,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
357
357
  type: ViewChild,
358
358
  args: ['input']
359
359
  }] } });
360
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBRzFELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQWVqQixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsd0JBQXdCO0lBVzlELElBQWEsS0FBSyxDQUFDLEtBQStCO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFB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QkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTU8sT0FBTztzQkFBbkIsS0FBSztnQkFnQjRDLFlBQVk7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFFYixhQUFhO3NCQUEvQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ2pCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ2MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kYXNoYm9hcmQvY29tcG9uZW50cy9zdWJzY3JpcHRpb25uZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNlbGVjdEExMXlTZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3QtYTExeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG5cbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQcnlTZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFNlbGVjdEExMXlTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUHJ5U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwdWJsaWMgaWQ6IG51bWJlciA9IHVuaXF1ZUlkKys7XG4gIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIG1hdGNoaW5nSXRlbXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIG9wZW4gPSBmYWxzZTtcbiAgYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyID0gLTE7XG4gIHZhbHVlSXRlbXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIHZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBzZWFyY2hTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5oaWJhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KGl0ZW1zID8/IFtdKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjbG9zZU9uU2VsZWN0ID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRm9ybSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZD86IGFueTtcbiAgQElucHV0KCkgbmFtZT86IGFueTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsd2F5c1Nob3dBdXRvc3VnZ2VzdGVkVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGV4dGVybmFsQXV0b2NvbXBsZXRlU2VydmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiaW5kVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgYmluZExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGljb25TaXplID0gWzEwLCAxNl07XG4gIEBJbnB1dCgpIGJpbmRJY29uOiBhbnk7XG4gIEBJbnB1dCgpIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgaTE4blByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBzZWFyY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY2xlYXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBJbnB1dCgpIGJpbmRDbGFzc2VzOiBhbnk7XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIF9sb2FkaW5nID0gZmFsc2U7XG4gIGhhc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gbG9hZGluZztcbiAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBAVmlld0NoaWxkKCdvcHRpb25zTW9kYWwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIG9wdGlvbnNNb2RhbCE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9wdGlvbnNNb2RhbFJlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JykgcHVibGljIHNlbGVjdEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQElucHV0KCkgZWxlbWVudFJlZiE6IEhUTUxEaXZFbGVtZW50O1xuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICBtb2RhbFdpZHRoID0gMjAwO1xuXG4gIGdldCBtb2RhbElkKCkge1xuICAgIHJldHVybiAnc2VsZWN0LW1vZGFsLScgKyB0aGlzLmlkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHVibGljIGExMXlTZXJ2aWNlOiBTZWxlY3RBMTF5U2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWF0Y2hpbmdJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pdGVtcyQsIHRoaXMuc2VhcmNoJCwgdGhpcy5zZWFyY2hTZWxlY3RlZCRdKS5waXBlKFxuICAgICAgbWFwKChbaXRlbXMsIHRlcm0sIGFscmVhZHlTZWxlY3RlZF0pID0+XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlICYmXG4gICAgICAgIHRlcm0gJiZcbiAgICAgICAgdGVybS5sZW5ndGggPiAwICYmXG4gICAgICAgICFhbHJlYWR5U2VsZWN0ZWQgJiZcbiAgICAgICAgIXRoaXMuYWx3YXlzU2hvd0F1dG9zdWdnZXN0ZWRWYWx1ZXMgJiZcbiAgICAgICAgIXRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlXG4gICAgICAgICAgPyBpdGVtcy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kTGFiZWwgPyBpPy5bdGhpcy5iaW5kTGFiZWxdIDogaTtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybS50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IGl0ZW1zXG4gICAgICApLFxuICAgICAgdGFwKCgpID0+IHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKSlcbiAgICApO1xuICAgIHRoaXMudmFsdWVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlJCwgdGhpcy5faXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBpdGVtc10pID0+XG4gICAgICAgICh0aGlzLm11bHRpcGxlID8gdmFsdWUgPz8gW10gOiAhIXZhbHVlID8gW3ZhbHVlXSA6IFtdKS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGl0ZW1ba2V5UHJvcF0gPT09IHZhbHVlW2tleVByb3BdXG4gICAgICAgICAgICAgICAgOiBpdGVtW2tleVByb3BdID09PSB2YWx1ZVxuICAgICAgICAgICAgICA6IGl0ZW0gPT09IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudmFsdWVJdGVtcyQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZExhYmVsID8gaXRlbVswXT8uW3RoaXMuYmluZExhYmVsXSA6IGl0ZW1bMF07XG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gkLm5leHQoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5faXRlbXMkLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGUoKSkpO1xuICAgIH1cblxuICAgIHRoaXMuYTExeVNlcnZpY2Uuc2V0VG9nZ2xlKChmb3JjZT86IGJvb2xlYW4pID0+IHRoaXMudG9nZ2xlKGZvcmNlKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZXF1YWwodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSwgb2JqKSkge1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChvYmopO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSk7XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZWFyY2gkLm5leHQob2JqKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZFZhbHVlID8gaXRlbT8uW3RoaXMuYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgY29uc3Qga2V5UHJvcCA9IHRoaXMuYmluZFZhbHVlID8/IHRoaXMuYmluZExhYmVsID8/ICdpZCc7XG4gICAgdGhpcy53cml0ZVZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSRcbiAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgLmZpbHRlcigoaTogYW55KSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtVmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHR5cGVvZiBpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGlba2V5UHJvcF0gIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgICA6IGkgIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgOiB0eXBlb2YgaSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBpW2tleVByb3BdICE9PSBpdGVtVmFsdWVcbiAgICAgICAgICAgICAgOiBpICE9PSBpdGVtVmFsdWVcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjbGVhckFsbCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2goJycpO1xuICAgIHRoaXMuY2xlYXJlZC5uZXh0KCk7XG4gIH1cblxuICBzZWFyY2goJGV2ZW50OiBzdHJpbmcsIGZyb21UZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaGVkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFNlbGVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoZnJvbVRlbXBsYXRlICYmIHRoaXMuYXV0b2NvbXBsZXRlICYmIHRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kVmFsdWUgPyBpdGVtPy5bdGhpcy5iaW5kVmFsdWVdIDogaXRlbTtcbiAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShbaXRlbVZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGl0ZW1WYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZSRcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyB2YWxba2V5UHJvcF0gOiB2YWwpKVxuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhpdGVtVmFsdWVba2V5UHJvcF0pXG4gICAgICAgICAgICA6IHRoaXMudmFsdWUkXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICAubWFwKCh2YWw6IGFueSkgPT4gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsW2tleVByb3BdIDogdmFsKSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoaXRlbVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCRldmVudCwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKFsuLi50aGlzLnZhbHVlJC5nZXRWYWx1ZSgpLCBpdGVtVmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoaXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBpbmRleDtcbiAgICBjb25zdCBpdGVtTGFiZWwgPSB0aGlzLmJpbmRMYWJlbCA/IGl0ZW0/Llt0aGlzLmJpbmRMYWJlbF0gOiBpdGVtO1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KGl0ZW1MYWJlbCk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZShmb3JjZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wZW4gIT09IGZvcmNlKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZvcmNlICE9PSB1bmRlZmluZWQgPyBmb3JjZSA6ICF0aGlzLm9wZW47XG4gICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsV2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gNTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHRoaXMuZ2V0T3ZlcmxheUNvbmZpZygpKTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNNb2RhbFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3B0aW9uc01vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgICAgICB0aGlzLmZvY3VzSW5pdGlhbFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnJldHVybkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaGliaXRpb24oKSB7XG4gICAgdGhpcy5pbmhpYmF0ZSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pbmhpYmF0ZSA9IGZhbHNlKSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5pbmhpYmF0ZSkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgICAgdGhpcy5pbmhpYml0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gIXRoaXMuZm9jdXNlZDtcbiAgfVxuXG4gIHJldHVybkZvY3VzKCkge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZSA/IHRoaXMuZm9jdXNJbnB1dCgpIDogdGhpcy5zZWxlY3RFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1c0lucHV0KCkge1xuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ2EtcHJ5LXNlbGVjdF9fb3B0aW9ucyddLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2EtcHJ5LXNlbGVjdF9fYmFja2Ryb3AnXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX2VsZW1lbnRSZWYoKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYgPz8gdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBvbkZvY3VzQ2hhbmdlID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICBpZiAoIXRoaXMuaW5oaWJhdGUpIHtcbiAgICAgIHRoaXMuYTExeVNlcnZpY2Uub25Gb2N1c0NoYW5nZShcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgKCkgPT4gdGhpcy50b2dnbGVGb2N1cygpLFxuICAgICAgICAoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW5oaWJpdGlvbigpO1xuICAgIH1cbiAgfTtcbiAgb25LZXlkb3duU2VsZWN0ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93blNlbGVjdChldmVudCwgdGhpcy5hdXRvY29tcGxldGUpO1xuICBvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cbiAgICB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KGV2ZW50LCB0aGlzLm9wZW4sIHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIG9uS2V5ZG93bk9wdGlvbiA9IChcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICBpdGVtOiBhbnksXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcHRpb25EaXZSZWY6IEhUTUxEaXZFbGVtZW50LFxuICAgIGZpcnN0OiBib29sZWFuLFxuICAgIGxhc3Q6IGJvb2xlYW5cbiAgKSA9PlxuICAgIHRoaXMuYTExeVNlcnZpY2Uub25LZXlkb3duT3B0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBvcHRpb25EaXZSZWYsXG4gICAgICBmaXJzdCxcbiAgICAgIGxhc3QsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgKCkgPT4gdGhpcy5zZWxlY3QoZXZlbnQsIGl0ZW0sIGluZGV4KVxuICAgICk7XG4gIGZvY3VzSW5pdGlhbFNlbGVjdGlvbiA9ICgpID0+IHRoaXMuYTExeVNlcnZpY2UuZm9jdXNJbml0aWFsU2VsZWN0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICNzZWxlY3RFbGVtZW50XG4gIFtjbGFzcy4tZm9jdXNlZF09XCJmb2N1c2VkXCJcbiAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKClcIlxuICByb2xlPVwiY29tYm9ib3hcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICBbYXR0ci5hcmlhLW93bnNdPVwib3BlbiA/IG1vZGFsSWQgOiBudWxsXCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICB0YWJpbmRleD1cIjBcIlxuICBjZGtNb25pdG9yRWxlbWVudEZvY3VzXG4gIChjZGtGb2N1c0NoYW5nZSk9XCJvbkZvY3VzQ2hhbmdlKCRldmVudClcIlxuICAoa2V5ZG93bik9XCJvbktleWRvd25TZWxlY3QoJGV2ZW50KVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX2NvbnRlbnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b2NvbXBsZXRlOyBlbHNlIG5vQXV0b2NvbXBsZXRlXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fc2VhcmNoXCJcbiAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIm9wZW4gPyBtb2RhbElkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgI2lucHV0XG4gICAgICAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9BdXRvY29tcGxldGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMDsgZWxzZSBzZWxlY3RlZFZhbHVlc1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZFZhbHVlcz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2YWx1ZUl0ZW1zJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3ZhbHVlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wcnktc2VsZWN0LWZvcm1dPVwiaXNGb3JtXCJcbiAgICAgICAgICAgIFtjbGFzcy4tbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbSA/IGl0ZW1bYmluZENsYXNzZXMgPz8gJyddID8/IHt9IDoge31cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBub1RlbXBsYXRlTGFiZWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RlbXBsYXRlTGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmluZEljb25cIlxuICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cIml0ZW1bYmluZEljb25dXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVbMV1cIlxuICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJpbmRMYWJlbCA/IGl0ZW0/LltiaW5kTGFiZWxdIDogaXRlbSBhcyB2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IChpMThuUHJlZml4ID8/ICcnKSArIHZhbHVlIHwgaTE4biA6IHsgd2FybjogZmFsc2UgfSB9fVxuICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAqbmdJZj1cIm11bHRpcGxlICYmIGNsZWFyYWJsZVwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fY2xlYXJcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyKCRldmVudCwgaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1oaWRkZW49XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+w5c8L3NwYW5cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPGRpdiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fZmlsbGVyXCI+PC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX2FjdGlvbnNcIj5cbiAgICA8c3BhbiAqbmdJZj1cImNsZWFyYWJsZVwiIGNsYXNzPVwiYS1wcnktc2VsZWN0X19jbGVhclwiIChjbGljayk9XCJjbGVhckFsbCgkZXZlbnQpXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+w5c8L3NwYW4+XG4gICAgPHByeS1pY29uXG4gICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fdG9nZ2xlXCJcbiAgICAgIFtpY29uU3ZnXT1cIm9wZW4gPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgW2hlaWdodF09XCJpY29uU2l6ZVsxXVwiXG4gICAgPjwvcHJ5LWljb24+XG4gIDwvZGl2PlxuPC9kaXY+XG48bmctdGVtcGxhdGUgI29wdGlvbnNNb2RhbD5cbiAgPGRpdlxuICAgIHJvbGU9XCJsaXN0Ym94XCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidAcHJ5LnNlbGVjdC5sYWJlbCcgfCBpMThuXCJcbiAgICBbaWRdPVwibW9kYWxJZFwiXG4gICAgW2F0dHIuYXJpYS1hY3RpdmVkZXNjZW5kYW50XT1cIidzZWxlY3Qtb3B0aW9uLScgKyBhY3RpdmVEZXNjZW5kYW50XCJcbiAgICBbYXR0ci5hcmlhLW11bHRpc2VsZWN0YWJsZV09XCJtdWx0aXBsZVwiXG4gICAgW2F0dHIucmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICAgIFthdHRyLmFyaWEtcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgIGNka1RyYXBGb2N1cz1cIiFhdXRvY29tcGxldGVcIlxuICAgIFtjZGtUcmFwRm9jdXNBdXRvQ2FwdHVyZV09XCIhYXV0b2NvbXBsZXRlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvbiAtaGludFwiICpuZ0lmPVwibG9hZGluZ1wiIFtzdHlsZS53aWR0aC5weF09XCJtb2RhbFdpZHRoXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwibm8td2lkZ2V0IG5vLXdpZGdldF9fbG9hZGVyXCI+XG4gICAgICAgIDxwcnktaWNvblxuICAgICAgICAgIGljb25Tdmc9XCJsb2FkZXJcIlxuICAgICAgICAgIGNsYXNzPVwibm8td2lkZ2V0X19sb2FkaW5nXCJcbiAgICAgICAgICBbYWx0XT1cIidAcHJ5LndpZGdldC50YXJnZXQubG9hZGluZycgfCBpMThuXCJcbiAgICAgICAgICBbd2lkdGhdPVwiMzBcIlxuICAgICAgICAgIFtoZWlnaHRdPVwiMzBcIlxuICAgICAgICAgICpuZ0lmPVwibG9hZGluZ1wiXG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxwPnt7ICdAcHJ5LnNlbGVjdC5sb2FkaW5nJyB8IGkxOG4gfX0uLi48L3A+XG4gICAgPC9kaXY+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFsb2FkaW5nXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIG1hdGNoaW5nSXRlbXMkIHwgYXN5bmM7IGxldCBpbmRleCA9IGluZGV4OyBsZXQgZmlyc3QgPSBmaXJzdDsgbGV0IGxhc3QgPSBsYXN0XCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fb3B0aW9uc19fb3B0aW9uXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cIih2YWx1ZUl0ZW1zJCB8IGFzeW5jKS5pbmNsdWRlcyhpdGVtKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1jaGVja2VkXT1cIih2YWx1ZUl0ZW1zJCB8IGFzeW5jKS5pbmNsdWRlcyhpdGVtKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdCgkZXZlbnQsIGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKGtleWRvd24pPVwib25LZXlkb3duT3B0aW9uKCRldmVudCwgaXRlbSwgaW5kZXgsIG9wdGlvbkRpdlJlZiwgZmlyc3QsIGxhc3QpXCJcbiAgICAgICAgICBbc3R5bGUud2lkdGgucHhdPVwibW9kYWxXaWR0aFwiXG4gICAgICAgICAgcm9sZT1cIm9wdGlvblwiXG4gICAgICAgICAgW2lkXT1cIidzZWxlY3Qtb3B0aW9uLScgKyBpbmRleFwiXG4gICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAjb3B0aW9uRGl2UmVmXG4gICAgICAgID5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwidGVtcGxhdGU7IGVsc2Ugbm9UZW1wbGF0ZVwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8bmctdGVtcGxhdGUgI25vVGVtcGxhdGU+XG4gICAgICAgICAgICA8cHJ5LWNoZWNrYm94IChjbGljayk9XCIkZXZlbnQucHJldmVudERlZmF1bHQoKVwiICpuZ0lmPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIj48L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImJpbmRJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplWzFdXCJcbiAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJpbmRMYWJlbCA/IGl0ZW0/LltiaW5kTGFiZWxdIDogaXRlbSBhcyB2YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyAoaTE4blByZWZpeCA/IGkxOG5QcmVmaXggOiAnJykgKyB2YWx1ZSB8IGkxOG4gOiB7IHdhcm46IGZhbHNlIH0gfX1cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
360
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9jb3JlL2NvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvY29yZS9jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFHVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFFVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBVyxhQUFhLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seURBQXlELENBQUM7QUFDbkcsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7O0FBRzFELElBQUksUUFBUSxHQUFHLENBQUMsQ0FBQztBQWVqQixNQUFNLE9BQU8sa0JBQW1CLFNBQVEsd0JBQXdCO0lBVzlELElBQWEsS0FBSyxDQUFDLEtBQStCO1FBQ2hELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssSUFB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QkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyw2QkFBNkI7c0JBQXJDLEtBQUs7Z0JBQ0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNJLFFBQVE7c0JBQWpCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNO2dCQUNFLFdBQVc7c0JBQW5CLEtBQUs7Z0JBTU8sT0FBTztzQkFBbkIsS0FBSztnQkFnQjRDLFlBQVk7c0JBQTdELFNBQVM7dUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFFYixhQUFhO3NCQUEvQyxTQUFTO3VCQUFDLGVBQWU7Z0JBQ2pCLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ2MsS0FBSztzQkFBeEIsU0FBUzt1QkFBQyxPQUFPIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQgZXF1YWwgZnJvbSAnZmFzdC1kZWVwLWVxdWFsL2VzNic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kYXNoYm9hcmQvY29tcG9uZW50cy9zdWJzY3JpcHRpb25uZXIuZGlyZWN0aXZlJztcbmltcG9ydCB7IHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFNlbGVjdEExMXlTZXJ2aWNlIH0gZnJvbSAnLi9zZWxlY3QtYTExeS5zZXJ2aWNlJztcbmltcG9ydCB7IEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuXG5sZXQgdW5pcXVlSWQgPSAwO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3NlbGVjdC5jb21wb25lbnQuaHRtbCcsXG5cbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQcnlTZWxlY3RDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIFNlbGVjdEExMXlTZXJ2aWNlXG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUHJ5U2VsZWN0Q29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICBwdWJsaWMgaWQ6IG51bWJlciA9IHVuaXF1ZUlkKys7XG4gIF9pdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XG4gIG1hdGNoaW5nSXRlbXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIG9wZW4gPSBmYWxzZTtcbiAgYWN0aXZlRGVzY2VuZGFudDogbnVtYmVyID0gLTE7XG4gIHZhbHVlSXRlbXMkOiBPYnNlcnZhYmxlPGFueT47XG4gIHZhbHVlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55Pih1bmRlZmluZWQpO1xuICBzZWFyY2hTZWxlY3RlZCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgaW5oaWJhdGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX2l0ZW1zJC5uZXh0KGl0ZW1zID8/IFtdKTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNsZWFyYWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBtdWx0aXBsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBjbG9zZU9uU2VsZWN0ID0gdHJ1ZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGlzRm9ybSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZD86IGFueTtcbiAgQElucHV0KCkgbmFtZT86IGFueTtcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFsd2F5c1Nob3dBdXRvc3VnZ2VzdGVkVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGV4dGVybmFsQXV0b2NvbXBsZXRlU2VydmljZTogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBiaW5kVmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCkgYmluZExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgpIGljb25TaXplID0gWzEwLCAxNl07XG4gIEBJbnB1dCgpIGJpbmRJY29uOiBhbnk7XG4gIEBJbnB1dCgpIHRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgQElucHV0KCkgaTE4blByZWZpeDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gIEBPdXRwdXQoKSBzZWFyY2hlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgY2xlYXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgQE91dHB1dCgpIGNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBJbnB1dCgpIGJpbmRDbGFzc2VzOiBhbnk7XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJycpO1xuXG4gIF9sb2FkaW5nID0gZmFsc2U7XG4gIGhhc0xvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCBsb2FkaW5nKGxvYWRpbmc6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9sb2FkaW5nID0gbG9hZGluZztcbiAgICBpZiAodGhpcy5fbG9hZGluZykge1xuICAgICAgdGhpcy5oYXNMb2FkZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGdldCBsb2FkaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9sb2FkaW5nO1xuICB9XG5cbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuXG4gIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBAVmlld0NoaWxkKCdvcHRpb25zTW9kYWwnLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pIG9wdGlvbnNNb2RhbCE6IFRlbXBsYXRlUmVmPGFueT47XG4gIG9wdGlvbnNNb2RhbFJlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICBAVmlld0NoaWxkKCdzZWxlY3RFbGVtZW50JykgcHVibGljIHNlbGVjdEVsZW1lbnQhOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcbiAgQElucHV0KCkgZWxlbWVudFJlZiE6IEhUTUxEaXZFbGVtZW50O1xuICBAVmlld0NoaWxkKCdpbnB1dCcpIGlucHV0PzogRWxlbWVudFJlZjxIVE1MSW5wdXRFbGVtZW50PjtcblxuICBwcml2YXRlIF9vbkNoYW5nZSA9IChfOiBhbnkpID0+IHt9O1xuICBwcml2YXRlIF9vblRvdWNoZWQgPSAoKSA9PiB7fTtcbiAgcHJpdmF0ZSBfZGlzYWJsZWQgPSBmYWxzZTtcbiAgZm9jdXNlZCA9IGZhbHNlO1xuICBtb2RhbFdpZHRoID0gMjAwO1xuXG4gIGdldCBtb2RhbElkKCkge1xuICAgIHJldHVybiAnc2VsZWN0LW1vZGFsLScgKyB0aGlzLmlkO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHVibGljIGExMXlTZXJ2aWNlOiBTZWxlY3RBMTF5U2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMubWF0Y2hpbmdJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLl9pdGVtcyQsIHRoaXMuc2VhcmNoJCwgdGhpcy5zZWFyY2hTZWxlY3RlZCRdKS5waXBlKFxuICAgICAgbWFwKChbaXRlbXMsIHRlcm0sIGFscmVhZHlTZWxlY3RlZF0pID0+XG4gICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlICYmXG4gICAgICAgIHRlcm0gJiZcbiAgICAgICAgdGVybS5sZW5ndGggPiAwICYmXG4gICAgICAgICFhbHJlYWR5U2VsZWN0ZWQgJiZcbiAgICAgICAgIXRoaXMuYWx3YXlzU2hvd0F1dG9zdWdnZXN0ZWRWYWx1ZXMgJiZcbiAgICAgICAgIXRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlXG4gICAgICAgICAgPyBpdGVtcy5maWx0ZXIoKGkpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kTGFiZWwgPyBpPy5bdGhpcy5iaW5kTGFiZWxdIDogaTtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1WYWx1ZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGVybS50b0xvd2VyQ2FzZSgpKSA+IC0xO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IGl0ZW1zXG4gICAgICApLFxuICAgICAgdGFwKCgpID0+IHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKSlcbiAgICApO1xuICAgIHRoaXMudmFsdWVJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLnZhbHVlJCwgdGhpcy5faXRlbXMkXSkucGlwZShcbiAgICAgIG1hcCgoW3ZhbHVlLCBpdGVtc10pID0+XG4gICAgICAgICh0aGlzLm11bHRpcGxlID8gdmFsdWUgPz8gW10gOiAhIXZhbHVlID8gW3ZhbHVlXSA6IFtdKS5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICAgICAgICByZXR1cm4gaXRlbXMuZmluZCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgICA/IGl0ZW1ba2V5UHJvcF0gPT09IHZhbHVlW2tleVByb3BdXG4gICAgICAgICAgICAgICAgOiBpdGVtW2tleVByb3BdID09PSB2YWx1ZVxuICAgICAgICAgICAgICA6IGl0ZW0gPT09IHZhbHVlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmFkZChcbiAgICAgIHRoaXMudmFsdWVJdGVtcyQuc3Vic2NyaWJlKChpdGVtKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZExhYmVsID8gaXRlbVswXT8uW3RoaXMuYmluZExhYmVsXSA6IGl0ZW1bMF07XG4gICAgICAgICAgaWYgKGl0ZW1WYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2gkLm5leHQoaXRlbVZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAodGhpcy5leHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQodGhpcy5faXRlbXMkLnN1YnNjcmliZSgoXykgPT4gdGhpcy50b2dnbGUoKSkpO1xuICAgIH1cblxuICAgIHRoaXMuYTExeVNlcnZpY2Uuc2V0VG9nZ2xlKChmb3JjZT86IGJvb2xlYW4pID0+IHRoaXMudG9nZ2xlKGZvcmNlKSk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xuICB9XG5cbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICghZXF1YWwodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSwgb2JqKSkge1xuICAgICAgdGhpcy52YWx1ZSQubmV4dChvYmopO1xuICAgICAgdGhpcy5fb25DaGFuZ2UodGhpcy52YWx1ZSQuZ2V0VmFsdWUoKSk7XG4gICAgICB0aGlzLl9vblRvdWNoZWQoKTtcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5zZWFyY2gkLm5leHQob2JqKTtcbiAgICAgIHRoaXMuc2VhcmNoU2VsZWN0ZWQkLm5leHQodHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgY2xlYXIoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGNvbnN0IGl0ZW1WYWx1ZSA9IHRoaXMuYmluZFZhbHVlID8gaXRlbT8uW3RoaXMuYmluZFZhbHVlXSA6IGl0ZW07XG4gICAgY29uc3Qga2V5UHJvcCA9IHRoaXMuYmluZFZhbHVlID8/IHRoaXMuYmluZExhYmVsID8/ICdpZCc7XG4gICAgdGhpcy53cml0ZVZhbHVlKFxuICAgICAgdGhpcy52YWx1ZSRcbiAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgLmZpbHRlcigoaTogYW55KSA9PlxuICAgICAgICAgIHR5cGVvZiBpdGVtVmFsdWUgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IHR5cGVvZiBpID09PSAnb2JqZWN0J1xuICAgICAgICAgICAgICA/IGlba2V5UHJvcF0gIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgICA6IGkgIT09IGl0ZW1WYWx1ZVtrZXlQcm9wXVxuICAgICAgICAgICAgOiB0eXBlb2YgaSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgICAgPyBpW2tleVByb3BdICE9PSBpdGVtVmFsdWVcbiAgICAgICAgICAgICAgOiBpICE9PSBpdGVtVmFsdWVcbiAgICAgICAgKVxuICAgICk7XG4gIH1cblxuICBjbGVhckFsbCgkZXZlbnQ6IEV2ZW50KSB7XG4gICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoW10pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUodW5kZWZpbmVkKTtcbiAgICB9XG4gICAgdGhpcy5zZWFyY2goJycpO1xuICAgIHRoaXMuY2xlYXJlZC5uZXh0KCk7XG4gIH1cblxuICBzZWFyY2goJGV2ZW50OiBzdHJpbmcsIGZyb21UZW1wbGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaGVkLm5leHQoJGV2ZW50KTtcbiAgICB0aGlzLnNlYXJjaFNlbGVjdGVkJC5uZXh0KGZhbHNlKTtcbiAgICBpZiAoZnJvbVRlbXBsYXRlICYmIHRoaXMuYXV0b2NvbXBsZXRlICYmIHRoaXMuZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlKSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoJGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBzZWxlY3QoJGV2ZW50OiBFdmVudCwgaXRlbTogYW55LCBpbmRleDogbnVtYmVyKSB7XG4gICAgY29uc3QgaXRlbVZhbHVlID0gdGhpcy5iaW5kVmFsdWUgPyBpdGVtPy5bdGhpcy5iaW5kVmFsdWVdIDogaXRlbTtcbiAgICBjb25zdCBrZXlQcm9wID0gdGhpcy5iaW5kVmFsdWUgPz8gdGhpcy5iaW5kTGFiZWwgPz8gJ2lkJztcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgaWYgKCF0aGlzLnZhbHVlJC5nZXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMud3JpdGVWYWx1ZShbaXRlbVZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHlwZW9mIGl0ZW1WYWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gdGhpcy52YWx1ZSRcbiAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoKVxuICAgICAgICAgICAgICAgIC5tYXAoKHZhbDogYW55KSA9PiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgPyB2YWxba2V5UHJvcF0gOiB2YWwpKVxuICAgICAgICAgICAgICAgIC5pbmNsdWRlcyhpdGVtVmFsdWVba2V5UHJvcF0pXG4gICAgICAgICAgICA6IHRoaXMudmFsdWUkXG4gICAgICAgICAgICAgICAgLmdldFZhbHVlKClcbiAgICAgICAgICAgICAgICAubWFwKCh2YWw6IGFueSkgPT4gKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnID8gdmFsW2tleVByb3BdIDogdmFsKSlcbiAgICAgICAgICAgICAgICAuaW5jbHVkZXMoaXRlbVZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLmNsZWFyKCRldmVudCwgaXRlbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy53cml0ZVZhbHVlKFsuLi50aGlzLnZhbHVlJC5nZXRWYWx1ZSgpLCBpdGVtVmFsdWVdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLndyaXRlVmFsdWUoaXRlbVZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuY2xvc2VPblNlbGVjdCkge1xuICAgICAgdGhpcy50b2dnbGUoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSBpbmRleDtcbiAgICBjb25zdCBpdGVtTGFiZWwgPSB0aGlzLmJpbmRMYWJlbCA/IGl0ZW0/Llt0aGlzLmJpbmRMYWJlbF0gOiBpdGVtO1xuICAgIHRoaXMuc2VhcmNoJC5uZXh0KGl0ZW1MYWJlbCk7XG4gICAgdGhpcy5zZWFyY2hTZWxlY3RlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIHRvZ2dsZShmb3JjZT86IGJvb2xlYW4pIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh0aGlzLm9wZW4gIT09IGZvcmNlKSB7XG4gICAgICAgIHRoaXMub3BlbiA9IGZvcmNlICE9PSB1bmRlZmluZWQgPyBmb3JjZSA6ICF0aGlzLm9wZW47XG4gICAgICAgIGlmICh0aGlzLm9wZW4pIHtcbiAgICAgICAgICB0aGlzLm1vZGFsV2lkdGggPSB0aGlzLl9lbGVtZW50UmVmLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIC0gNTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKHRoaXMuZ2V0T3ZlcmxheUNvbmZpZygpKTtcbiAgICAgICAgICB0aGlzLm92ZXJsYXlSZWYuYmFja2Ryb3BDbGljaygpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnRvZ2dsZShmYWxzZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5hdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgdGhpcy53cml0ZVZhbHVlKHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB0aGlzLm9wdGlvbnNNb2RhbFJlZiA9IHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMub3B0aW9uc01vZGFsLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICAgICAgICB0aGlzLmZvY3VzSW5pdGlhbFNlbGVjdGlvbigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZj8uZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB0aGlzLnJldHVybkZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaGliaXRpb24oKSB7XG4gICAgdGhpcy5pbmhpYmF0ZSA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiAodGhpcy5pbmhpYmF0ZSA9IGZhbHNlKSwgMTAwKTtcbiAgfVxuXG4gIGhhbmRsZUNsaWNrKCkge1xuICAgIGlmICghdGhpcy5pbmhpYmF0ZSkge1xuICAgICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMudG9nZ2xlKCk7XG4gICAgICB0aGlzLmNsaWNrZWQuZW1pdCgpO1xuICAgICAgdGhpcy5pbmhpYml0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRm9jdXMoKSB7XG4gICAgdGhpcy5mb2N1c2VkID0gIXRoaXMuZm9jdXNlZDtcbiAgfVxuXG4gIHJldHVybkZvY3VzKCkge1xuICAgIHJldHVybiB0aGlzLmF1dG9jb21wbGV0ZSA/IHRoaXMuZm9jdXNJbnB1dCgpIDogdGhpcy5zZWxlY3RFbGVtZW50Py5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBmb2N1c0lucHV0KCkge1xuICAgIHRoaXMuaW5wdXQ/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T3ZlcmxheUNvbmZpZygpOiBPdmVybGF5Q29uZmlnIHtcbiAgICBjb25zdCBwb3NpdGlvblN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5XG4gICAgICAucG9zaXRpb24oKVxuICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5fZWxlbWVudFJlZilcbiAgICAgIC53aXRoUHVzaChmYWxzZSlcbiAgICAgIC53aXRoUG9zaXRpb25zKFtcbiAgICAgICAge1xuICAgICAgICAgIG9yaWdpblg6ICdzdGFydCcsXG4gICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgb3ZlcmxheVk6ICd0b3AnXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBvcmlnaW5YOiAnc3RhcnQnLFxuICAgICAgICAgIG9yaWdpblk6ICd0b3AnLFxuICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgIG92ZXJsYXlZOiAnYm90dG9tJ1xuICAgICAgICB9XG4gICAgICBdKTtcblxuICAgIGNvbnN0IHNjcm9sbFN0cmF0ZWd5ID0gdGhpcy5vdmVybGF5LnNjcm9sbFN0cmF0ZWdpZXMucmVwb3NpdGlvbigpO1xuICAgIHJldHVybiBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICBwb3NpdGlvblN0cmF0ZWd5OiBwb3NpdGlvblN0cmF0ZWd5LFxuICAgICAgc2Nyb2xsU3RyYXRlZ3k6IHNjcm9sbFN0cmF0ZWd5LFxuICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICBwYW5lbENsYXNzOiBbJ2EtcHJ5LXNlbGVjdF9fb3B0aW9ucyddLFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2EtcHJ5LXNlbGVjdF9fYmFja2Ryb3AnXG4gICAgfSk7XG4gIH1cblxuICBnZXQgX2VsZW1lbnRSZWYoKTogSFRNTERpdkVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYgPz8gdGhpcy5zZWxlY3RFbGVtZW50Lm5hdGl2ZUVsZW1lbnQ7XG4gIH1cblxuICBvbkZvY3VzQ2hhbmdlID0gKG9yaWdpbjogRm9jdXNPcmlnaW4pID0+IHtcbiAgICBpZiAoIXRoaXMuaW5oaWJhdGUpIHtcbiAgICAgIHRoaXMuYTExeVNlcnZpY2Uub25Gb2N1c0NoYW5nZShcbiAgICAgICAgb3JpZ2luLFxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgICAgKCkgPT4gdGhpcy50b2dnbGVGb2N1cygpLFxuICAgICAgICAoKSA9PiB0aGlzLmZvY3VzSW5wdXQoKVxuICAgICAgKTtcbiAgICAgIHRoaXMuaW5oaWJpdGlvbigpO1xuICAgIH1cbiAgfTtcbiAgb25LZXlkb3duU2VsZWN0ID0gKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93blNlbGVjdChldmVudCwgdGhpcy5hdXRvY29tcGxldGUpO1xuICBvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCA9IChldmVudDogS2V5Ym9hcmRFdmVudCkgPT5cbiAgICB0aGlzLmExMXlTZXJ2aWNlLm9uS2V5ZG93bkF1dG9jb21wbGV0ZUlucHV0KGV2ZW50LCB0aGlzLm9wZW4sIHRoaXMuc2VhcmNoJC5nZXRWYWx1ZSgpLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG4gIG9uS2V5ZG93bk9wdGlvbiA9IChcbiAgICBldmVudDogS2V5Ym9hcmRFdmVudCxcbiAgICBpdGVtOiBhbnksXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvcHRpb25EaXZSZWY6IEhUTUxEaXZFbGVtZW50LFxuICAgIGZpcnN0OiBib29sZWFuLFxuICAgIGxhc3Q6IGJvb2xlYW5cbiAgKSA9PlxuICAgIHRoaXMuYTExeVNlcnZpY2Uub25LZXlkb3duT3B0aW9uKFxuICAgICAgZXZlbnQsXG4gICAgICBvcHRpb25EaXZSZWYsXG4gICAgICBmaXJzdCxcbiAgICAgIGxhc3QsXG4gICAgICB0aGlzLmF1dG9jb21wbGV0ZSxcbiAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC5uYXRpdmVFbGVtZW50LFxuICAgICAgKCkgPT4gdGhpcy5zZWxlY3QoZXZlbnQsIGl0ZW0sIGluZGV4KVxuICAgICk7XG4gIGZvY3VzSW5pdGlhbFNlbGVjdGlvbiA9ICgpID0+IHRoaXMuYTExeVNlcnZpY2UuZm9jdXNJbml0aWFsU2VsZWN0aW9uKHRoaXMuYXV0b2NvbXBsZXRlLCB0aGlzLm9wdGlvbnNNb2RhbFJlZik7XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiYS1wcnktc2VsZWN0XCJcbiAgW2F0dHIuYXJpYS1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICNzZWxlY3RFbGVtZW50XG4gIFtjbGFzcy4tZm9jdXNlZF09XCJmb2N1c2VkXCJcbiAgKGNsaWNrKT1cImhhbmRsZUNsaWNrKClcIlxuICByb2xlPVwiY29tYm9ib3hcIlxuICBbYXR0ci5hcmlhLWV4cGFuZGVkXT1cIm9wZW5cIlxuICBbYXR0ci5hcmlhLW93bnNdPVwib3BlbiA/IG1vZGFsSWQgOiBudWxsXCJcbiAgYXJpYS1oYXNwb3B1cD1cImxpc3Rib3hcIlxuICB0YWJpbmRleD1cIjBcIlxuICBjZGtNb25pdG9yRWxlbWVudEZvY3VzXG4gIChjZGtGb2N1c0NoYW5nZSk9XCJvbkZvY3VzQ2hhbmdlKCRldmVudClcIlxuICAoa2V5ZG93bik9XCJvbktleWRvd25TZWxlY3QoJGV2ZW50KVwiXG4+XG4gIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX2NvbnRlbnRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXV0b2NvbXBsZXRlOyBlbHNlIG5vQXV0b2NvbXBsZXRlXCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fc2VhcmNoXCJcbiAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoJC5nZXRWYWx1ZSgpXCJcbiAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VhcmNoKCRldmVudCwgdHJ1ZSlcIlxuICAgICAgICBhcmlhLWF1dG9jb21wbGV0ZT1cImxpc3RcIlxuICAgICAgICBbYXR0ci5hcmlhLWNvbnRyb2xzXT1cIm9wZW4gPyBtb2RhbElkIDogbnVsbFwiXG4gICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAoa2V5ZG93bik9XCJvbktleWRvd25BdXRvY29tcGxldGVJbnB1dCgkZXZlbnQpXCJcbiAgICAgICAgW3BsYWNlaG9sZGVyXT1cInBsYWNlaG9sZGVyXCJcbiAgICAgICAgI2lucHV0XG4gICAgICAvPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxuZy10ZW1wbGF0ZSAjbm9BdXRvY29tcGxldGU+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmxlbmd0aCA9PT0gMDsgZWxzZSBzZWxlY3RlZFZhbHVlc1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fcGxhY2Vob2xkZXJcIj57eyBwbGFjZWhvbGRlciB9fTwvc3Bhbj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPG5nLXRlbXBsYXRlICNzZWxlY3RlZFZhbHVlcz5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiB2YWx1ZUl0ZW1zJCB8IGFzeW5jXCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3ZhbHVlXCJcbiAgICAgICAgICAgIFtjbGFzcy5wcnktc2VsZWN0LWZvcm1dPVwiaXNGb3JtXCJcbiAgICAgICAgICAgIFtjbGFzcy4tbXVsdGlwbGVdPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbSA/IGl0ZW1bYmluZENsYXNzZXMgPz8gJyddID8/IHt9IDoge31cIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ0ZW1wbGF0ZTsgZWxzZSBub1RlbXBsYXRlTGFiZWxcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7IGl0ZW0sIGNsZWFyIH1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RlbXBsYXRlTGFiZWw+XG4gICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiYmluZEljb25cIlxuICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cIml0ZW1bYmluZEljb25dXCJcbiAgICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVbMV1cIlxuICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJpbmRMYWJlbCA/IGl0ZW0/LltiaW5kTGFiZWxdIDogaXRlbSBhcyB2YWx1ZVwiPlxuICAgICAgICAgICAgICAgIHt7IChpMThuUHJlZml4ID8/ICcnKSArIHZhbHVlIHwgaTE4bjogeyB3YXJuOiBmYWxzZSB9IH19XG4gICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlwbGUgJiYgY2xlYXJhYmxlXCJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X19jbGVhclwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXIoJGV2ZW50LCBpdGVtKVwiXG4gICAgICAgICAgICAgICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgPsOXPC9zcGFuXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDxkaXYgY2xhc3M9XCJhLXByeS1zZWxlY3RfX2ZpbGxlclwiPjwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19hY3Rpb25zXCI+XG4gICAgPHNwYW4gKm5nSWY9XCJjbGVhcmFibGVcIiBjbGFzcz1cImEtcHJ5LXNlbGVjdF9fY2xlYXJcIiAoY2xpY2spPVwiY2xlYXJBbGwoJGV2ZW50KVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPsOXPC9zcGFuPlxuICAgIDxwcnktaWNvblxuICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3RvZ2dsZVwiXG4gICAgICBbaWNvblN2Z109XCJvcGVuID8gJ2NoZXZyb25fdG9wJyA6ICdjaGV2cm9uX2JvdHRvbSdcIlxuICAgICAgW3dpZHRoXT1cImljb25TaXplWzBdXCJcbiAgICAgIFtoZWlnaHRdPVwiaWNvblNpemVbMV1cIlxuICAgID48L3ByeS1pY29uPlxuICA8L2Rpdj5cbjwvZGl2PlxuPG5nLXRlbXBsYXRlICNvcHRpb25zTW9kYWw+XG4gIDxkaXZcbiAgICByb2xlPVwibGlzdGJveFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbF09XCInQHByeS5zZWxlY3QubGFiZWwnIHwgaTE4blwiXG4gICAgW2lkXT1cIm1vZGFsSWRcIlxuICAgIFthdHRyLmFyaWEtYWN0aXZlZGVzY2VuZGFudF09XCInc2VsZWN0LW9wdGlvbi0nICsgYWN0aXZlRGVzY2VuZGFudFwiXG4gICAgW2F0dHIuYXJpYS1tdWx0aXNlbGVjdGFibGVdPVwibXVsdGlwbGVcIlxuICAgIFthdHRyLnJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICBbYXR0ci5hcmlhLXJlYWRvbmx5XT1cInJlYWRvbmx5XCJcbiAgICBjZGtUcmFwRm9jdXM9XCIhYXV0b2NvbXBsZXRlXCJcbiAgICBbY2RrVHJhcEZvY3VzQXV0b0NhcHR1cmVdPVwiIWF1dG9jb21wbGV0ZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiYS1wcnktc2VsZWN0X19vcHRpb25zX19vcHRpb24gLWhpbnRcIiAqbmdJZj1cImxvYWRpbmdcIiBbc3R5bGUud2lkdGgucHhdPVwibW9kYWxXaWR0aFwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm5vLXdpZGdldCBuby13aWRnZXRfX2xvYWRlclwiPlxuICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICBpY29uU3ZnPVwibG9hZGVyXCJcbiAgICAgICAgICBjbGFzcz1cIm5vLXdpZGdldF9fbG9hZGluZ1wiXG4gICAgICAgICAgW2FsdF09XCInQHByeS53aWRnZXQudGFyZ2V0LmxvYWRpbmcnIHwgaTE4blwiXG4gICAgICAgICAgW3dpZHRoXT1cIjMwXCJcbiAgICAgICAgICBbaGVpZ2h0XT1cIjMwXCJcbiAgICAgICAgICAqbmdJZj1cImxvYWRpbmdcIlxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8cD57eyAnQHByeS5zZWxlY3QubG9hZGluZycgfCBpMThuIH19Li4uPC9wPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZ1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtYXRjaGluZ0l0ZW1zJCB8IGFzeW5jOyBsZXQgaW5kZXggPSBpbmRleDsgbGV0IGZpcnN0ID0gZmlyc3Q7IGxldCBsYXN0ID0gbGFzdFwiPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX29wdGlvbnNfX29wdGlvblwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtY2hlY2tlZF09XCIodmFsdWVJdGVtcyQgfCBhc3luYykuaW5jbHVkZXMoaXRlbSlcIlxuICAgICAgICAgIFthdHRyLmFyaWEtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3QoJGV2ZW50LCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5ZG93bk9wdGlvbigkZXZlbnQsIGl0ZW0sIGluZGV4LCBvcHRpb25EaXZSZWYsIGZpcnN0LCBsYXN0KVwiXG4gICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cIm1vZGFsV2lkdGhcIlxuICAgICAgICAgIHJvbGU9XCJvcHRpb25cIlxuICAgICAgICAgIFtpZF09XCInc2VsZWN0LW9wdGlvbi0nICsgaW5kZXhcIlxuICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgI29wdGlvbkRpdlJlZlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRlbXBsYXRlOyBlbHNlIG5vVGVtcGxhdGVcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGVtcGxhdGVcIiBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBpdGVtLCBjbGVhciB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICNub1RlbXBsYXRlPlxuICAgICAgICAgICAgPHByeS1jaGVja2JveFxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAgICAgICAqbmdJZj1cIm11bHRpcGxlXCJcbiAgICAgICAgICAgICAgW25nTW9kZWxdPVwiKHZhbHVlSXRlbXMkIHwgYXN5bmMpLmluY2x1ZGVzKGl0ZW0pXCJcbiAgICAgICAgICAgID48L3ByeS1jaGVja2JveD5cbiAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAqbmdJZj1cImJpbmRJY29uXCJcbiAgICAgICAgICAgICAgW2ljb25TdmddPVwiaXRlbVtiaW5kSWNvbl1cIlxuICAgICAgICAgICAgICBbd2lkdGhdPVwiaWNvblNpemVbMF1cIlxuICAgICAgICAgICAgICBbaGVpZ2h0XT1cImljb25TaXplWzFdXCJcbiAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImJpbmRMYWJlbCA/IGl0ZW0/LltiaW5kTGFiZWxdIDogaXRlbSBhcyB2YWx1ZVwiPlxuICAgICAgICAgICAgICB7eyAoaTE4blByZWZpeCA/IGkxOG5QcmVmaXggOiAnJykgKyB2YWx1ZSB8IGkxOG46IHsgd2FybjogZmFsc2UgfSB9fVxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
@@ -5,6 +5,7 @@ import { DataSourceSelectors } from '../../../../../core/store/data-source/data-
5
5
  import { DashboardActions } from '../../../../store/dashboard.actions';
6
6
  import { SubscriptionnerDirective } from '../../../subscriptionner.directive';
7
7
  import { DatasourceUtils } from '../../../../../core/store/data-source/datasource-utils';
8
+ import { debounceTime } from 'rxjs/operators';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "@ngrx/store";
10
11
  import * as i2 from "@angular/forms";
@@ -17,7 +18,6 @@ export class PryDatasourceListComponent extends SubscriptionnerDirective {
17
18
  set mode(mode) {
18
19
  this._mode$.next(mode);
19
20
  }
20
- ;
21
21
  set selectedDatasources(datasourceIds) {
22
22
  this.selectedDatasources$.next(datasourceIds);
23
23
  }
@@ -31,6 +31,7 @@ export class PryDatasourceListComponent extends SubscriptionnerDirective {
31
31
  this._mode$ = new BehaviorSubject('list');
32
32
  this.consultedDataset = new EventEmitter();
33
33
  this.datasourceSelected = new EventEmitter();
34
+ this.searchOrCategoryChanged = new EventEmitter();
34
35
  this.store.dispatch(DataSourceActions.load());
35
36
  this.datasources$ = combineLatest([
36
37
  this.store.select(DataSourceSelectors.getDataSourcesSorted),
@@ -41,6 +42,12 @@ export class PryDatasourceListComponent extends SubscriptionnerDirective {
41
42
  this.store.dispatch(DataSourceActions.dataset.getCategories());
42
43
  this.categories$ = this.store.select(DataSourceSelectors.categories);
43
44
  this.store.dispatch(DataSourceActions.dataset.listVersions());
45
+ this.subscriptions.add(this.selectedCategories$.subscribe((_) => {
46
+ this.searchOrCategoryChanged.next();
47
+ }));
48
+ this.subscriptions.add(this.search$.pipe(debounceTime(100)).subscribe((_) => {
49
+ this.searchOrCategoryChanged.next();
50
+ }));
44
51
  }
45
52
  ngOnInit() {
46
53
  this.filteredDatasources$ = combineLatest([
@@ -50,7 +57,8 @@ export class PryDatasourceListComponent extends SubscriptionnerDirective {
50
57
  this.selectedDatasources$,
51
58
  this.datasources$,
52
59
  this.datasets$
53
- ]).pipe(map(([mode, query, selectedCategories, selectedDs, datasources, datasets]) => mode === 'list' ? this.search(datasets, query, selectedCategories)
60
+ ]).pipe(map(([mode, query, selectedCategories, selectedDs, datasources, datasets]) => mode === 'list'
61
+ ? this.search(datasets, query, selectedCategories)
54
62
  : this.search(datasources, query, selectedCategories)
55
63
  .map((dataset) => ({ ...dataset, isSelected: selectedDs.includes(dataset.id) }))
56
64
  .sort((a, b) => Number(b.isSelected) - Number(a.isSelected))));
@@ -78,7 +86,7 @@ export class PryDatasourceListComponent extends SubscriptionnerDirective {
78
86
  }
79
87
  }
80
88
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceListComponent, deps: [{ token: i1.Store }], target: i0.ɵɵFactoryTarget.Component }); }
81
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: { mode: "mode", selectedDatasources: "selectedDatasources" }, outputs: { consultedDataset: "consultedDataset", datasourceSelected: "datasourceSelected" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-list__header u-display-flex\">\n <div class=\"o-datasource-list__search m-form-label-field\">\n <label class=\"a-label\" id=\"catalog-search-label\" for=\"catalog-search\">{{ '@pry.dataset.search' | i18n }}</label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.dataset.searchPlaceholder' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n <pry-icon class=\"search-icon\" iconSvg=\"search\" [width]=\"20\" [height]=\"20\"></pry-icon>\n </div>\n <div class=\"o-datasource-list__categories m-form-label-field\">\n <label class=\"a-label\" id=\"tags-label\" for=\"catalog-category-search\">{{ '@pry.dataset.filter' | i18n }}</label>\n <pry-select\n id=\"catalog-category-search\"\n [ngModel]=\"selectedCategories\"\n (ngModelChange)=\"this.selectedCategories$.next($event)\"\n [items]=\"categories$ | async\"\n bindLabel=\"name\"\n aria-labelledby=\"tags-label\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [placeholder]=\"'@pry.dataset.filterPlaceholder' | i18n\"\n ></pry-select>\n </div>\n</div>\n<div class=\"o-datasource-list__content\">\n @if ((_mode$ | async) === 'list') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"false\"\n [showFooter]=\"true\"\n (clicked)=\"onDatasourceClick($event)\"\n ></pry-datasource-card>\n }\n } @else if ((_mode$ | async) === 'selector') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"true\"\n [showFooter]=\"false\"\n (clicked)=\"onDatasourceClick($event)\"\n [isSelected]=\"datasource.isSelected ?? false\"\n ></pry-datasource-card>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: ["datasource", "showFooter", "isSelectable", "isSelected"], outputs: ["clicked"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.I18nPipe, name: "i18n" }] }); }
89
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: PryDatasourceListComponent, selector: "pry-datasource-list", inputs: { mode: "mode", selectedDatasources: "selectedDatasources" }, outputs: { consultedDataset: "consultedDataset", datasourceSelected: "datasourceSelected", searchOrCategoryChanged: "searchOrCategoryChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-list__header u-display-flex\">\n <div class=\"o-datasource-list__search m-form-label-field\">\n <label class=\"a-label\" id=\"catalog-search-label\" for=\"catalog-search\">{{ '@pry.dataset.search' | i18n }}</label>\n <input\n id=\"catalog-search\"\n type=\"text\"\n class=\"a-form-field\"\n [placeholder]=\"'@pry.dataset.searchPlaceholder' | i18n\"\n [ngModel]=\"search$ | async\"\n (ngModelChange)=\"this.search$.next($event)\"\n />\n <pry-icon class=\"search-icon\" iconSvg=\"search\" [width]=\"20\" [height]=\"20\"></pry-icon>\n </div>\n <div class=\"o-datasource-list__categories m-form-label-field\">\n <label class=\"a-label\" id=\"tags-label\" for=\"catalog-category-search\">{{ '@pry.dataset.filter' | i18n }}</label>\n <pry-select\n id=\"catalog-category-search\"\n [ngModel]=\"selectedCategories\"\n (ngModelChange)=\"this.selectedCategories$.next($event)\"\n [items]=\"categories$ | async\"\n bindLabel=\"name\"\n aria-labelledby=\"tags-label\"\n [multiple]=\"true\"\n [closeOnSelect]=\"false\"\n [placeholder]=\"'@pry.dataset.filterPlaceholder' | i18n\"\n ></pry-select>\n </div>\n</div>\n<div class=\"o-datasource-list__content\">\n @if ((_mode$ | async) === 'list') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"false\"\n [showFooter]=\"true\"\n (clicked)=\"onDatasourceClick($event)\"\n ></pry-datasource-card>\n }\n } @else if ((_mode$ | async) === 'selector') {\n @for (datasource of filteredDatasources$ | async; track datasource.id) {\n <pry-datasource-card\n [datasource]=\"datasource\"\n [isSelectable]=\"true\"\n [showFooter]=\"false\"\n (clicked)=\"onDatasourceClick($event)\"\n [isSelected]=\"datasource.isSelected ?? false\"\n ></pry-datasource-card>\n }\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.PrySelectComponent, selector: "pry-select", inputs: ["items", "clearable", "multiple", "closeOnSelect", "placeholder", "isForm", "required", "name", "readonly", "autocomplete", "alwaysShowAutosuggestedValues", "externalAutocompleteService", "bindValue", "bindLabel", "iconSize", "bindIcon", "template", "i18nPrefix", "bindClasses", "loading", "elementRef"], outputs: ["searched", "cleared", "clicked"] }, { kind: "component", type: i4.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i5.PryDatasourceCardComponent, selector: "pry-datasource-card", inputs: ["datasource", "showFooter", "isSelectable", "isSelected"], outputs: ["clicked"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.I18nPipe, name: "i18n" }] }); }
82
90
  }
83
91
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: PryDatasourceListComponent, decorators: [{
84
92
  type: Component,
@@ -91,5 +99,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
91
99
  type: Output
92
100
  }], datasourceSelected: [{
93
101
  type: Output
102
+ }], searchOrCategoryChanged: [{
103
+ type: Output
94
104
  }] } });
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy93aWRnZXRzL2RhdGFzb3VyY2Utc2VsZWN0b3IvZGF0YXNvdXJjZS1saXN0L2RhdGFzb3VyY2UtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2UtbGlzdC9kYXRhc291cmNlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFrQyxNQUFNLE1BQU0sQ0FBQztBQUMzRixPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRy9FLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBRWxHLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQzlFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3REFBd0QsQ0FBQzs7Ozs7Ozs7O0FBTXpGLE1BQU0sT0FBTywwQkFBMkIsU0FBUSx3QkFBd0I7SUFXdEUsSUFBYSxJQUFJLENBQUMsSUFBeUI7UUFDekMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIs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RUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFtRDtRQUMzRixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsVUFBcUIsQ0FBQyxDQUFDO1FBQ3BELENBQUM7YUFBTSxDQUFDO1lBQ04sSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FDNUIsVUFBVTtnQkFDUixDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQztnQkFDckQsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUN6RSxDQUFDO1lBQ0YsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEUsQ0FBQztJQUNILENBQUM7OEdBeEZVLDBCQUEwQjtrR0FBMUIsMEJBQTBCLHFQQ2Z2QyxzK0RBa0RBOzsyRkRuQ2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjswRUFjbEIsSUFBSTtzQkFBaEIsS0FBSztnQkFHTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBSUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgRGF0YXNldCwgRGF0YVNvdXJjZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UubW9kZWwnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZUFjdGlvbnMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLmFjdGlvbnMnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZVNlbGVjdG9ycyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2Uuc2VsZWN0b3JzJztcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9jYXRlZ29yeS9jYXRlZ29yeS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRGFzaGJvYXJkQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uL3N0b3JlL2Rhc2hib2FyZC5hY3Rpb25zJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uLy4uL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YXNvdXJjZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhc291cmNlLXV0aWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWRhdGFzb3VyY2UtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYXRhc291cmNlLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFByeURhdGFzb3VyY2VMaXN0Q29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YXNvdXJjZXMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VbXT47XG4gIGRhdGFzZXRzJDogT2JzZXJ2YWJsZTxEYXRhc2V0W10+O1xuICBzZWFyY2gkID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG4gIGNhdGVnb3JpZXMkOiBPYnNlcnZhYmxlPENhdGVnb3J5W10+O1xuICBzZWxlY3RlZENhdGVnb3JpZXMgPSBbXTtcbiAgc2VsZWN0ZWRDYXRlZ29yaWVzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q2F0ZWdvcnlbXT4oW10pO1xuICBmaWx0ZXJlZERhdGFzb3VyY2VzJCE6IE9ic2VydmFibGU8KERhdGFTb3VyY2UgJiB7IGlzU2VsZWN0ZWQ/OiBib29sZWFuIH0pW10+O1xuICBzZWxlY3RlZERhdGFzb3VyY2VzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nW10+KFtdKTtcbiAgX21vZGUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KCdsaXN0Jyk7XG5cbiAgQElucHV0KCkgc2V0IG1vZGUobW9kZTogJ2xpc3QnIHwgJ3NlbGVjdG9yJykge1xuICAgIHRoaXMuX21vZGUkLm5leHQobW9kZSk7XG4gIH07XG4gIEBJbnB1dCgpIHNldCBzZWxlY3RlZERhdGFzb3VyY2VzKGRhdGFzb3VyY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC5uZXh0KGRhdGFzb3VyY2VJZHMpO1xuICB9XG5cbiAgQE91dHB1dCgpIGNvbnN1bHRlZERhdGFzZXQgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGFzZXQ+KCk7XG4gIEBPdXRwdXQoKSBkYXRhc291cmNlU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogU3RvcmU8YW55Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuZGF0YXNvdXJjZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzU29ydGVkKSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXNdKSA9PlxuICAgICAgICBEYXRhc291cmNlVXRpbHMuZ2V0QWxsRGF0YXNvdXJjZXNXaXRoVW5rbm93bnMoZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXMpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmRhdGFzZXRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QoKSk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQuZ2V0Q2F0ZWdvcmllcygpKTtcbiAgICB0aGlzLmNhdGVnb3JpZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5jYXRlZ29yaWVzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKCkpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJlZERhdGFzb3VyY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fbW9kZSQsXG4gICAgICB0aGlzLnNlYXJjaCQsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlcyQsXG4gICAgICB0aGlzLmRhdGFzZXRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttb2RlLCBxdWVyeSwgc2VsZWN0ZWRDYXRlZ29yaWVzLCBzZWxlY3RlZERzLCBkYXRhc291cmNlcywgZGF0YXNldHNdKSA9PlxuICAgICAgICBtb2RlID09PSAnbGlzdCcgPyB0aGlzLnNlYXJjaChkYXRhc2V0cywgcXVlcnksIHNlbGVjdGVkQ2F0ZWdvcmllcylcbiAgICAgICAgOiB0aGlzLnNlYXJjaChkYXRhc291cmNlcywgcXVlcnksIHNlbGVjdGVkQ2F0ZWdvcmllcylcbiAgICAgICAgICAubWFwKChkYXRhc2V0KSA9PiAoeyAuLi5kYXRhc2V0LCBpc1NlbGVjdGVkOiBzZWxlY3RlZERzLmluY2x1ZGVzKGRhdGFzZXQuaWQpIH0pKVxuICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYi5pc1NlbGVjdGVkKSAtIE51bWJlcihhLmlzU2VsZWN0ZWQpKVxuICAgICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHNlYXJjaChkYXRhc2V0czogRGF0YVNvdXJjZVtdLCBzZWFyY2g6IHN0cmluZywgY2F0ZWdvcmllczogQ2F0ZWdvcnlbXSk6IERhdGFTb3VyY2VbXSB7XG4gICAgcmV0dXJuIGRhdGFzZXRzXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAoZGF0YXNldCkgPT5cbiAgICAgICAgICAoc2VhcmNoLmxlbmd0aCA9PT0gMCB8fCBkYXRhc2V0Lm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhzZWFyY2gudG9Mb3dlckNhc2UoKSkpICYmXG4gICAgICAgICAgKGNhdGVnb3JpZXMubGVuZ3RoID09PSAwIHx8IHRoaXMuZG9lc0RhdGFzb3VyY2VNYXRjaENhdGVnb3J5RmlsdGVyKGRhdGFzZXQsIGNhdGVnb3JpZXMpKVxuICAgICAgKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubmFtZS5sb2NhbGVDb21wYXJlKGIubmFtZSkpO1xuICB9XG5cbiAgZG9lc0RhdGFzb3VyY2VNYXRjaENhdGVnb3J5RmlsdGVyKGRhdGFzb3VyY2U6IERhdGFTb3VyY2UsIHNlbGVjdGVkQ2F0ZWdvcmllczogQ2F0ZWdvcnlbXSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBkYXRhc291cmNlLnNvdXJjZVR5cGUgPT09ICdkYXRhc2V0JyAmJiBkYXRhc291cmNlLmNhdGVnb3JpZXNcbiAgICAgID8gc2VsZWN0ZWRDYXRlZ29yaWVzLnJlZHVjZShcbiAgICAgICAgICAoYWNjLCBzZWxlY3RlZENhdCkgPT4gYWNjICYmIGRhdGFzb3VyY2UuY2F0ZWdvcmllcyEubWFwKChjYXQpID0+IGNhdC5pZCkuaW5jbHVkZXMoc2VsZWN0ZWRDYXQuaWQpLFxuICAgICAgICAgIHRydWVcbiAgICAgICAgKVxuICAgICAgOiBmYWxzZTtcbiAgfVxuXG4gIG9uRGF0YXNvdXJjZUNsaWNrKHsgaXNTZWxlY3RlZCwgZGF0YXNvdXJjZSB9OiB7IGlzU2VsZWN0ZWQ6IGJvb2xlYW47IGRhdGFzb3VyY2U6IERhdGFTb3VyY2UgfSkge1xuICAgIGlmICh0aGlzLl9tb2RlJC52YWx1ZSA9PT0gJ2xpc3QnKSB7XG4gICAgICB0aGlzLmNvbnN1bHRlZERhdGFzZXQuZW1pdChkYXRhc291cmNlIGFzIERhdGFzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLm5leHQoXG4gICAgICAgIGlzU2VsZWN0ZWRcbiAgICAgICAgICA/IFsuLi50aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLnZhbHVlLCBkYXRhc291cmNlLmlkXVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC52YWx1ZS5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gZGF0YXNvdXJjZS5pZClcbiAgICAgICk7XG4gICAgICB0aGlzLmRhdGFzb3VyY2VTZWxlY3RlZC5lbWl0KHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyQudmFsdWUpO1xuICAgIH1cbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19oZWFkZXIgdS1kaXNwbGF5LWZsZXhcIj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19zZWFyY2ggbS1mb3JtLWxhYmVsLWZpZWxkXCI+XG4gICAgPGxhYmVsIGNsYXNzPVwiYS1sYWJlbFwiIGlkPVwiY2F0YWxvZy1zZWFyY2gtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLXNlYXJjaFwiPnt7ICdAcHJ5LmRhdGFzZXQuc2VhcmNoJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxpbnB1dFxuICAgICAgaWQ9XCJjYXRhbG9nLXNlYXJjaFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuZGF0YXNldC5zZWFyY2hQbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICAgIFtuZ01vZGVsXT1cInNlYXJjaCQgfCBhc3luY1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnNlYXJjaCQubmV4dCgkZXZlbnQpXCJcbiAgICAvPlxuICAgIDxwcnktaWNvbiBjbGFzcz1cInNlYXJjaC1pY29uXCIgaWNvblN2Zz1cInNlYXJjaFwiIFt3aWR0aF09XCIyMFwiIFtoZWlnaHRdPVwiMjBcIj48L3ByeS1pY29uPlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19jYXRlZ29yaWVzIG0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cInRhZ3MtbGFiZWxcIiBmb3I9XCJjYXRhbG9nLWNhdGVnb3J5LXNlYXJjaFwiPnt7ICdAcHJ5LmRhdGFzZXQuZmlsdGVyJyB8IGkxOG4gfX08L2xhYmVsPlxuICAgIDxwcnktc2VsZWN0XG4gICAgICBpZD1cImNhdGFsb2ctY2F0ZWdvcnktc2VhcmNoXCJcbiAgICAgIFtuZ01vZGVsXT1cInNlbGVjdGVkQ2F0ZWdvcmllc1wiXG4gICAgICAobmdNb2RlbENoYW5nZSk9XCJ0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQubmV4dCgkZXZlbnQpXCJcbiAgICAgIFtpdGVtc109XCJjYXRlZ29yaWVzJCB8IGFzeW5jXCJcbiAgICAgIGJpbmRMYWJlbD1cIm5hbWVcIlxuICAgICAgYXJpYS1sYWJlbGxlZGJ5PVwidGFncy1sYWJlbFwiXG4gICAgICBbbXVsdGlwbGVdPVwidHJ1ZVwiXG4gICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiJ0BwcnkuZGF0YXNldC5maWx0ZXJQbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICA+PC9wcnktc2VsZWN0PlxuICA8L2Rpdj5cbjwvZGl2PlxuPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1saXN0X19jb250ZW50XCI+XG4gIEBpZiAoKF9tb2RlJCB8IGFzeW5jKSA9PT0gJ2xpc3QnKSB7XG4gICAgQGZvciAoZGF0YXNvdXJjZSBvZiBmaWx0ZXJlZERhdGFzb3VyY2VzJCB8IGFzeW5jOyB0cmFjayBkYXRhc291cmNlLmlkKSB7XG4gICAgICA8cHJ5LWRhdGFzb3VyY2UtY2FyZFxuICAgICAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAgICAgW2lzU2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgIFtzaG93Rm9vdGVyXT1cInRydWVcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkRhdGFzb3VyY2VDbGljaygkZXZlbnQpXCJcbiAgICAgID48L3ByeS1kYXRhc291cmNlLWNhcmQ+XG4gICAgfVxuICB9IEBlbHNlIGlmICgoX21vZGUkIHwgYXN5bmMpID09PSAnc2VsZWN0b3InKSB7XG4gICAgQGZvciAoZGF0YXNvdXJjZSBvZiBmaWx0ZXJlZERhdGFzb3VyY2VzJCB8IGFzeW5jOyB0cmFjayBkYXRhc291cmNlLmlkKSB7XG4gICAgICA8cHJ5LWRhdGFzb3VyY2UtY2FyZFxuICAgICAgICBbZGF0YXNvdXJjZV09XCJkYXRhc291cmNlXCJcbiAgICAgICAgW2lzU2VsZWN0YWJsZV09XCJ0cnVlXCJcbiAgICAgICAgW3Nob3dGb290ZXJdPVwiZmFsc2VcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkRhdGFzb3VyY2VDbGljaygkZXZlbnQpXCJcbiAgICAgICAgW2lzU2VsZWN0ZWRdPVwiZGF0YXNvdXJjZS5pc1NlbGVjdGVkID8/IGZhbHNlXCJcbiAgICAgID48L3ByeS1kYXRhc291cmNlLWNhcmQ+XG4gICAgfVxuICB9XG48L2Rpdj5cbiJdfQ==
105
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvZGFzaGJvYXJkL2xpYi9kYXNoYm9hcmQvY29tcG9uZW50cy93aWRnZXRzL2RhdGFzb3VyY2Utc2VsZWN0b3IvZGF0YXNvdXJjZS1saXN0L2RhdGFzb3VyY2UtbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2UtbGlzdC9kYXRhc291cmNlLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsR0FBRyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHL0UsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDOUYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sNkRBQTZELENBQUM7QUFFbEcsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDdkUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7O0FBTTlDLE1BQU0sT0FBTywwQkFBMkIsU0FBUSx3QkFBd0I7SUFXdEUsSUFBYSxJQUFJLENBQUMsSUFBeUI7UUFDekMsSUFBSSxDQUFD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QUNoRSxDQUFDO0lBQ0gsQ0FBQzs4R0FwR1UsMEJBQTBCO2tHQUExQiwwQkFBMEIseVNDaEJ2QyxzK0RBa0RBOzsyRkRsQ2EsMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHFCQUFxQjswRUFjbEIsSUFBSTtzQkFBaEIsS0FBSztnQkFHTyxtQkFBbUI7c0JBQS9CLEtBQUs7Z0JBSUksZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyx1QkFBdUI7c0JBQWhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIG1hcCwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBEYXRhc2V0LCBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBEYXRhU291cmNlQWN0aW9ucyB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2NvcmUvc3RvcmUvZGF0YS1zb3VyY2UvZGF0YS1zb3VyY2UuYWN0aW9ucyc7XG5pbXBvcnQgeyBEYXRhU291cmNlU2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5zZWxlY3RvcnMnO1xuaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2NhdGVnb3J5L2NhdGVnb3J5LmludGVyZmFjZSc7XG5pbXBvcnQgeyBEYXNoYm9hcmRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vLi4vLi4vc3RvcmUvZGFzaGJvYXJkLmFjdGlvbnMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vLi4vc3Vic2NyaXB0aW9ubmVyLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEYXRhc291cmNlVXRpbHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGFzb3VyY2UtdXRpbHMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwcnktZGF0YXNvdXJjZS1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGFzb3VyY2UtbGlzdC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgUHJ5RGF0YXNvdXJjZUxpc3RDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuICBkYXRhc291cmNlcyQ6IE9ic2VydmFibGU8RGF0YVNvdXJjZVtdPjtcbiAgZGF0YXNldHMkOiBPYnNlcnZhYmxlPERhdGFzZXRbXT47XG4gIHNlYXJjaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcbiAgY2F0ZWdvcmllcyQ6IE9ic2VydmFibGU8Q2F0ZWdvcnlbXT47XG4gIHNlbGVjdGVkQ2F0ZWdvcmllcyA9IFtdO1xuICBzZWxlY3RlZENhdGVnb3JpZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDYXRlZ29yeVtdPihbXSk7XG4gIGZpbHRlcmVkRGF0YXNvdXJjZXMkITogT2JzZXJ2YWJsZTwoRGF0YVNvdXJjZSAmIHsgaXNTZWxlY3RlZD86IGJvb2xlYW4gfSlbXT47XG4gIHNlbGVjdGVkRGF0YXNvdXJjZXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuICBfbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oJ2xpc3QnKTtcblxuICBASW5wdXQoKSBzZXQgbW9kZShtb2RlOiAnbGlzdCcgfCAnc2VsZWN0b3InKSB7XG4gICAgdGhpcy5fbW9kZSQubmV4dChtb2RlKTtcbiAgfVxuICBASW5wdXQoKSBzZXQgc2VsZWN0ZWREYXRhc291cmNlcyhkYXRhc291cmNlSWRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyQubmV4dChkYXRhc291cmNlSWRzKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBjb25zdWx0ZWREYXRhc2V0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRhc2V0PigpO1xuICBAT3V0cHV0KCkgZGF0YXNvdXJjZVNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcbiAgQE91dHB1dCgpIHNlYXJjaE9yQ2F0ZWdvcnlDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBzdG9yZTogU3RvcmU8YW55Pikge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChEYXRhU291cmNlQWN0aW9ucy5sb2FkKCkpO1xuICAgIHRoaXMuZGF0YXNvdXJjZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzU29ydGVkKSxcbiAgICAgIHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyRcbiAgICBdKS5waXBlKFxuICAgICAgbWFwKChbZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXNdKSA9PlxuICAgICAgICBEYXRhc291cmNlVXRpbHMuZ2V0QWxsRGF0YXNvdXJjZXNXaXRoVW5rbm93bnMoZGF0YXNvdXJjZXMsIHNlbGVjdGVkRGF0YXNvdXJjZXMpXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLmRhdGFzZXRzJCA9IHRoaXMuc3RvcmUuc2VsZWN0KERhdGFTb3VyY2VTZWxlY3RvcnMuZGF0YXNldHMpO1xuICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goRGFzaGJvYXJkQWN0aW9ucy5mZXRjaE1hbmlmZXN0c0xpc3QoKSk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQuZ2V0Q2F0ZWdvcmllcygpKTtcbiAgICB0aGlzLmNhdGVnb3JpZXMkID0gdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5jYXRlZ29yaWVzKTtcbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKERhdGFTb3VyY2VBY3Rpb25zLmRhdGFzZXQubGlzdFZlcnNpb25zKCkpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoT3JDYXRlZ29yeUNoYW5nZWQubmV4dCgpO1xuICAgICAgfSlcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlYXJjaCQucGlwZShkZWJvdW5jZVRpbWUoMTAwKSkuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgIHRoaXMuc2VhcmNoT3JDYXRlZ29yeUNoYW5nZWQubmV4dCgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5maWx0ZXJlZERhdGFzb3VyY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5fbW9kZSQsXG4gICAgICB0aGlzLnNlYXJjaCQsXG4gICAgICB0aGlzLnNlbGVjdGVkQ2F0ZWdvcmllcyQsXG4gICAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLFxuICAgICAgdGhpcy5kYXRhc291cmNlcyQsXG4gICAgICB0aGlzLmRhdGFzZXRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFttb2RlLCBxdWVyeSwgc2VsZWN0ZWRDYXRlZ29yaWVzLCBzZWxlY3RlZERzLCBkYXRhc291cmNlcywgZGF0YXNldHNdKSA9PlxuICAgICAgICBtb2RlID09PSAnbGlzdCdcbiAgICAgICAgICA/IHRoaXMuc2VhcmNoKGRhdGFzZXRzLCBxdWVyeSwgc2VsZWN0ZWRDYXRlZ29yaWVzKVxuICAgICAgICAgIDogdGhpcy5zZWFyY2goZGF0YXNvdXJjZXMsIHF1ZXJ5LCBzZWxlY3RlZENhdGVnb3JpZXMpXG4gICAgICAgICAgICAgIC5tYXAoKGRhdGFzZXQpID0+ICh7IC4uLmRhdGFzZXQsIGlzU2VsZWN0ZWQ6IHNlbGVjdGVkRHMuaW5jbHVkZXMoZGF0YXNldC5pZCkgfSkpXG4gICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYi5pc1NlbGVjdGVkKSAtIE51bWJlcihhLmlzU2VsZWN0ZWQpKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBzZWFyY2goZGF0YXNldHM6IERhdGFTb3VyY2VbXSwgc2VhcmNoOiBzdHJpbmcsIGNhdGVnb3JpZXM6IENhdGVnb3J5W10pOiBEYXRhU291cmNlW10ge1xuICAgIHJldHVybiBkYXRhc2V0c1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGRhdGFzZXQpID0+XG4gICAgICAgICAgKHNlYXJjaC5sZW5ndGggPT09IDAgfHwgZGF0YXNldC5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoLnRvTG93ZXJDYXNlKCkpKSAmJlxuICAgICAgICAgIChjYXRlZ29yaWVzLmxlbmd0aCA9PT0gMCB8fCB0aGlzLmRvZXNEYXRhc291cmNlTWF0Y2hDYXRlZ29yeUZpbHRlcihkYXRhc2V0LCBjYXRlZ29yaWVzKSlcbiAgICAgIClcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGRvZXNEYXRhc291cmNlTWF0Y2hDYXRlZ29yeUZpbHRlcihkYXRhc291cmNlOiBEYXRhU291cmNlLCBzZWxlY3RlZENhdGVnb3JpZXM6IENhdGVnb3J5W10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gZGF0YXNvdXJjZS5zb3VyY2VUeXBlID09PSAnZGF0YXNldCcgJiYgZGF0YXNvdXJjZS5jYXRlZ29yaWVzXG4gICAgICA/IHNlbGVjdGVkQ2F0ZWdvcmllcy5yZWR1Y2UoXG4gICAgICAgICAgKGFjYywgc2VsZWN0ZWRDYXQpID0+IGFjYyAmJiBkYXRhc291cmNlLmNhdGVnb3JpZXMhLm1hcCgoY2F0KSA9PiBjYXQuaWQpLmluY2x1ZGVzKHNlbGVjdGVkQ2F0LmlkKSxcbiAgICAgICAgICB0cnVlXG4gICAgICAgIClcbiAgICAgIDogZmFsc2U7XG4gIH1cblxuICBvbkRhdGFzb3VyY2VDbGljayh7IGlzU2VsZWN0ZWQsIGRhdGFzb3VyY2UgfTogeyBpc1NlbGVjdGVkOiBib29sZWFuOyBkYXRhc291cmNlOiBEYXRhU291cmNlIH0pIHtcbiAgICBpZiAodGhpcy5fbW9kZSQudmFsdWUgPT09ICdsaXN0Jykge1xuICAgICAgdGhpcy5jb25zdWx0ZWREYXRhc2V0LmVtaXQoZGF0YXNvdXJjZSBhcyBEYXRhc2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC5uZXh0KFxuICAgICAgICBpc1NlbGVjdGVkXG4gICAgICAgICAgPyBbLi4udGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJC52YWx1ZSwgZGF0YXNvdXJjZS5pZF1cbiAgICAgICAgICA6IHRoaXMuc2VsZWN0ZWREYXRhc291cmNlcyQudmFsdWUuZmlsdGVyKChpZCkgPT4gaWQgIT09IGRhdGFzb3VyY2UuaWQpXG4gICAgICApO1xuICAgICAgdGhpcy5kYXRhc291cmNlU2VsZWN0ZWQuZW1pdCh0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkLnZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2UtbGlzdF9faGVhZGVyIHUtZGlzcGxheS1mbGV4XCI+XG4gIDxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2UtbGlzdF9fc2VhcmNoIG0tZm9ybS1sYWJlbC1maWVsZFwiPlxuICAgIDxsYWJlbCBjbGFzcz1cImEtbGFiZWxcIiBpZD1cImNhdGFsb2ctc2VhcmNoLWxhYmVsXCIgZm9yPVwiY2F0YWxvZy1zZWFyY2hcIj57eyAnQHByeS5kYXRhc2V0LnNlYXJjaCcgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8aW5wdXRcbiAgICAgIGlkPVwiY2F0YWxvZy1zZWFyY2hcIlxuICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmRhdGFzZXQuc2VhcmNoUGxhY2Vob2xkZXInIHwgaTE4blwiXG4gICAgICBbbmdNb2RlbF09XCJzZWFyY2gkIHwgYXN5bmNcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWFyY2gkLm5leHQoJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8cHJ5LWljb24gY2xhc3M9XCJzZWFyY2gtaWNvblwiIGljb25Tdmc9XCJzZWFyY2hcIiBbd2lkdGhdPVwiMjBcIiBbaGVpZ2h0XT1cIjIwXCI+PC9wcnktaWNvbj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2UtbGlzdF9fY2F0ZWdvcmllcyBtLWZvcm0tbGFiZWwtZmllbGRcIj5cbiAgICA8bGFiZWwgY2xhc3M9XCJhLWxhYmVsXCIgaWQ9XCJ0YWdzLWxhYmVsXCIgZm9yPVwiY2F0YWxvZy1jYXRlZ29yeS1zZWFyY2hcIj57eyAnQHByeS5kYXRhc2V0LmZpbHRlcicgfCBpMThuIH19PC9sYWJlbD5cbiAgICA8cHJ5LXNlbGVjdFxuICAgICAgaWQ9XCJjYXRhbG9nLWNhdGVnb3J5LXNlYXJjaFwiXG4gICAgICBbbmdNb2RlbF09XCJzZWxlY3RlZENhdGVnb3JpZXNcIlxuICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwidGhpcy5zZWxlY3RlZENhdGVnb3JpZXMkLm5leHQoJGV2ZW50KVwiXG4gICAgICBbaXRlbXNdPVwiY2F0ZWdvcmllcyQgfCBhc3luY1wiXG4gICAgICBiaW5kTGFiZWw9XCJuYW1lXCJcbiAgICAgIGFyaWEtbGFiZWxsZWRieT1cInRhZ3MtbGFiZWxcIlxuICAgICAgW211bHRpcGxlXT1cInRydWVcIlxuICAgICAgW2Nsb3NlT25TZWxlY3RdPVwiZmFsc2VcIlxuICAgICAgW3BsYWNlaG9sZGVyXT1cIidAcHJ5LmRhdGFzZXQuZmlsdGVyUGxhY2Vob2xkZXInIHwgaTE4blwiXG4gICAgPjwvcHJ5LXNlbGVjdD5cbiAgPC9kaXY+XG48L2Rpdj5cbjxkaXYgY2xhc3M9XCJvLWRhdGFzb3VyY2UtbGlzdF9fY29udGVudFwiPlxuICBAaWYgKChfbW9kZSQgfCBhc3luYykgPT09ICdsaXN0Jykge1xuICAgIEBmb3IgKGRhdGFzb3VyY2Ugb2YgZmlsdGVyZWREYXRhc291cmNlcyQgfCBhc3luYzsgdHJhY2sgZGF0YXNvdXJjZS5pZCkge1xuICAgICAgPHByeS1kYXRhc291cmNlLWNhcmRcbiAgICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gICAgICAgIFtpc1NlbGVjdGFibGVdPVwiZmFsc2VcIlxuICAgICAgICBbc2hvd0Zvb3Rlcl09XCJ0cnVlXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25EYXRhc291cmNlQ2xpY2soJGV2ZW50KVwiXG4gICAgICA+PC9wcnktZGF0YXNvdXJjZS1jYXJkPlxuICAgIH1cbiAgfSBAZWxzZSBpZiAoKF9tb2RlJCB8IGFzeW5jKSA9PT0gJ3NlbGVjdG9yJykge1xuICAgIEBmb3IgKGRhdGFzb3VyY2Ugb2YgZmlsdGVyZWREYXRhc291cmNlcyQgfCBhc3luYzsgdHJhY2sgZGF0YXNvdXJjZS5pZCkge1xuICAgICAgPHByeS1kYXRhc291cmNlLWNhcmRcbiAgICAgICAgW2RhdGFzb3VyY2VdPVwiZGF0YXNvdXJjZVwiXG4gICAgICAgIFtpc1NlbGVjdGFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93Rm9vdGVyXT1cImZhbHNlXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25EYXRhc291cmNlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgIFtpc1NlbGVjdGVkXT1cImRhdGFzb3VyY2UuaXNTZWxlY3RlZCA/PyBmYWxzZVwiXG4gICAgICA+PC9wcnktZGF0YXNvdXJjZS1jYXJkPlxuICAgIH1cbiAgfVxuPC9kaXY+XG4iXX0=
@@ -1,8 +1,9 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, map } from 'rxjs';
2
+ import { BehaviorSubject, combineLatest, map, Subject } from 'rxjs';
3
3
  import { SubscriptionnerDirective } from '../../subscriptionner.directive';
4
4
  import { DatasourceUtils } from '../../../../core/store/data-source/datasource-utils';
5
5
  import { DataSourceSelectors } from '../../../../core/store/data-source/data-source.selectors';
6
+ import { delay } from 'rxjs/operators';
6
7
  import * as i0 from "@angular/core";
7
8
  import * as i1 from "@ngrx/store";
8
9
  import * as i2 from "@angular/common";
@@ -20,6 +21,7 @@ export class DatasourceSelectorComponent extends SubscriptionnerDirective {
20
21
  this.cdr = cdr;
21
22
  this.manifest$ = new BehaviorSubject(null);
22
23
  this.selectedIds$ = new BehaviorSubject([]);
24
+ this.searchOrCategoryChanged$ = new Subject();
23
25
  this.showButtons = true;
24
26
  this.showTitle = true;
25
27
  this.previousTab = new EventEmitter();
@@ -33,7 +35,10 @@ export class DatasourceSelectorComponent extends SubscriptionnerDirective {
33
35
  ]).pipe(map(([datasources, selectedIds]) => DatasourceUtils.getAllDatasourcesWithUnknowns(datasources, selectedIds).filter((ds) => selectedIds.includes(ds.id))));
34
36
  this.subscriptions.add(this.selectedIds$.subscribe((selectedIds) => {
35
37
  this.itemsChanged.emit(selectedIds);
36
- this.cdr.detectChanges();
38
+ this.detectChanges();
39
+ }));
40
+ this.subscriptions.add(this.searchOrCategoryChanged$.pipe(delay(50)).subscribe(() => {
41
+ this.detectChanges();
37
42
  }));
38
43
  }
39
44
  isGeo(item) {
@@ -43,18 +48,21 @@ export class DatasourceSelectorComponent extends SubscriptionnerDirective {
43
48
  this.selectedIds$.next(this.selectedIds$.value.includes(id)
44
49
  ? this.selectedIds$.value.filter((i) => i !== id)
45
50
  : [...this.selectedIds$.value, id]);
46
- this.cdr.detectChanges();
51
+ this.detectChanges();
47
52
  }
48
53
  updateDatasourceList(ids) {
49
54
  this.selectedIds$.next(ids);
55
+ this.detectChanges();
56
+ }
57
+ detectChanges() {
50
58
  this.cdr.detectChanges();
51
59
  }
52
60
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DatasourceSelectorComponent, deps: [{ token: i1.Store }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
53
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: { showButtons: "showButtons", showTitle: "showTitle", manifest: "manifest" }, outputs: { previousTab: "previousTab", nextTab: "nextTab", cancel: "cancel", validated: "validated", itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
61
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.1.3", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: { showButtons: "showButtons", showTitle: "showTitle", manifest: "manifest" }, outputs: { previousTab: "previousTab", nextTab: "nextTab", cancel: "cancel", validated: "validated", itemsChanged: "itemsChanged" }, usesInheritance: true, ngImport: i0, template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: i4.PryDatasourceListComponent, selector: "pry-datasource-list", inputs: ["mode", "selectedDatasources"], outputs: ["consultedDataset", "datasourceSelected", "searchOrCategoryChanged"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: i5.I18nPipe, name: "i18n" }] }); }
54
62
  }
55
63
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: DatasourceSelectorComponent, decorators: [{
56
64
  type: Component,
57
- args: [{ selector: 'pry-datasource-selector', template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n" }]
65
+ args: [{ selector: 'pry-datasource-selector', template: "<div class=\"o-datasource-selector u-display-flex -column\">\n @if (showTitle) {\n <h2 class=\"u-self-center\">{{ '@pry.components.datasourceSelector.select' | i18n }}</h2>\n }\n <div>\n <h3>\n {{ '@pry.components.datasourceSelector.selection' | i18n }} ({{ ((selectedDatasources$ | async) ?? []).length }})\n </h3>\n <div class=\"o-datasource-selector__chips u-display-flex -wrap -gap-10\">\n @if ((selectedDatasources$ | async)?.length === 0) {\n <span class=\"a-label -italic\">{{ '@pry.components.datasourceSelector.noItemSelected' | i18n }}</span>\n } @else {\n @for (datasource of selectedDatasources$ | async; track datasource.id) {\n <button\n class=\"a-chip a-chip--ghost -lg a-tooltip\"\n [attr.data-tooltip]=\"'@pry.components.datasourceSelector.unselectItem' | i18n\"\n type=\"button\"\n (click)=\"toggleSelection(datasource.id)\"\n >\n <pry-icon iconSvg=\"close\" [width]=\"15\" [height]=\"15\"></pry-icon>\n {{ datasource.name }}\n <pry-icon *ngIf=\"isGeo(datasource)\" iconSvg=\"globe\" [width]=\"18\" [height]=\"18\"></pry-icon>\n </button>\n }\n }\n </div>\n </div>\n <pry-datasource-list\n mode=\"selector\"\n [selectedDatasources]=\"(selectedIds$ | async) ?? []\"\n (datasourceSelected)=\"updateDatasourceList($event)\"\n (searchOrCategoryChanged)=\"searchOrCategoryChanged$.next()\"\n ></pry-datasource-list>\n @if (showButtons) {\n <div class=\"m-btn-group o-datasource-selector__footer\">\n <button type=\"button\" (click)=\"cancel.emit()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"button\"\n (click)=\"validated.emit()\"\n #validate\n (keydown.tab)=\"nextTab.emit()\"\n class=\"a-btn a-btn--primary\"\n >\n {{ '@pry.toolbox.manifest.validated' | i18n }}\n </button>\n </div>\n }\n</div>\n" }]
58
66
  }], ctorParameters: () => [{ type: i1.Store }, { type: i0.ChangeDetectorRef }], propDecorators: { showButtons: [{
59
67
  type: Input
60
68
  }], showTitle: [{
@@ -72,4 +80,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImpor
72
80
  }], itemsChanged: [{
73
81
  type: Output
74
82
  }] } });
75
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL3dpZGdldHMvZGF0YXNvdXJjZS1zZWxlY3Rvci9kYXRhc291cmNlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUd2RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdEYsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMERBQTBELENBQUM7Ozs7Ozs7QUFNL0YsTUFBTSxPQUFPLDJCQUE0QixTQUFRLHdCQUF3QjtJQVF2RSxJQUFhLFFBQVEsQ0FBQyxRQUErQjtRQUNuRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQVFELFlBQ1UsS0FBWSxFQUNaLEdBQXNC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bmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBXaWRnZXRNYW5pZmVzdCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YXNvdXJjZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhc291cmNlLXV0aWxzJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLnNlbGVjdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ByeS1kYXRhc291cmNlLXNlbGVjdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICdkYXRhc291cmNlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBEYXRhc291cmNlU2VsZWN0b3JDb21wb25lbnQgZXh0ZW5kcyBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmUge1xuICBtYW5pZmVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFdpZGdldE1hbmlmZXN0IHwgbnVsbD4obnVsbCk7XG4gIHNlbGVjdGVkRGF0YXNvdXJjZXMkOiBPYnNlcnZhYmxlPERhdGFTb3VyY2VbXT47XG5cbiAgc2VsZWN0ZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmdbXT4oW10pO1xuXG4gIEBJbnB1dCgpIHNob3dCdXR0b25zID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1RpdGxlID0gdHJ1ZTtcbiAgQElucHV0KCkgc2V0IG1hbmlmZXN0KG1hbmlmZXN0OiBXaWRnZXRNYW5pZmVzdCB8IG51bGwpIHtcbiAgICB0aGlzLm1hbmlmZXN0JC5uZXh0KG1hbmlmZXN0KTtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJC5uZXh0KERhdGFzb3VyY2VVdGlscy5nZXREYXRhc291cmNlQXJyYXkobWFuaWZlc3Q/LmRhdGFzb3VyY2UpKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBwcmV2aW91c1RhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG5leHRUYWIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBjYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSB2YWxpZGF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBpdGVtc0NoYW5nZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZ1tdPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5zZWxlY3RlZERhdGFzb3VyY2VzJCA9IGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRGF0YVNvdXJjZVNlbGVjdG9ycy5nZXREYXRhU291cmNlc1NvcnRlZCksXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzJFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtkYXRhc291cmNlcywgc2VsZWN0ZWRJZHNdKSA9PlxuICAgICAgICBEYXRhc291cmNlVXRpbHMuZ2V0QWxsRGF0YXNvdXJjZXNXaXRoVW5rbm93bnMoZGF0YXNvdXJjZXMsIHNlbGVjdGVkSWRzKS5maWx0ZXIoKGRzKSA9PlxuICAgICAgICAgIHNlbGVjdGVkSWRzLmluY2x1ZGVzKGRzLmlkKVxuICAgICAgICApXG4gICAgICApXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zZWxlY3RlZElkcyQuc3Vic2NyaWJlKChzZWxlY3RlZElkcykgPT4ge1xuICAgICAgICB0aGlzLml0ZW1zQ2hhbmdlZC5lbWl0KHNlbGVjdGVkSWRzKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaXNHZW8oaXRlbTogRGF0YVNvdXJjZSkge1xuICAgIHJldHVybiBEYXRhc291cmNlVXRpbHMuaXNHZW8oaXRlbSk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3Rpb24oaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkLm5leHQoXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5pbmNsdWRlcyhpZClcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5maWx0ZXIoKGkpID0+IGkgIT09IGlkKVxuICAgICAgICA6IFsuLi50aGlzLnNlbGVjdGVkSWRzJC52YWx1ZSwgaWRdXG4gICAgKTtcbiAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICB1cGRhdGVEYXRhc291cmNlTGlzdChpZHM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5zZWxlY3RlZElkcyQubmV4dChpZHMpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1zZWxlY3RvciB1LWRpc3BsYXktZmxleCAtY29sdW1uXCI+XG4gIEBpZiAoc2hvd1RpdGxlKSB7XG4gICAgPGgyIGNsYXNzPVwidS1zZWxmLWNlbnRlclwiPnt7ICdAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnNlbGVjdCcgfCBpMThuIH19PC9oMj5cbiAgfVxuICA8ZGl2PlxuICAgIDxoMz5cbiAgICAgIHt7ICdAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnNlbGVjdGlvbicgfCBpMThuIH19ICh7eyAoKHNlbGVjdGVkRGF0YXNvdXJjZXMkIHwgYXN5bmMpID8/IFtdKS5sZW5ndGggfX0pXG4gICAgPC9oMz5cbiAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLXNlbGVjdG9yX19jaGlwcyB1LWRpc3BsYXktZmxleCAtd3JhcCAtZ2FwLTEwXCI+XG4gICAgICBAaWYgKChzZWxlY3RlZERhdGFzb3VyY2VzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbCAtaXRhbGljXCI+e3sgJ0BwcnkuY29tcG9uZW50cy5kYXRhc291cmNlU2VsZWN0b3Iubm9JdGVtU2VsZWN0ZWQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAZm9yIChkYXRhc291cmNlIG9mIHNlbGVjdGVkRGF0YXNvdXJjZXMkIHwgYXN5bmM7IHRyYWNrIGRhdGFzb3VyY2UuaWQpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImEtY2hpcCBhLWNoaXAtLWdob3N0IC1sZyBhLXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnVuc2VsZWN0SXRlbScgfCBpMThuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbihkYXRhc291cmNlLmlkKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAge3sgZGF0YXNvdXJjZS5uYW1lIH19XG4gICAgICAgICAgICA8cHJ5LWljb24gKm5nSWY9XCJpc0dlbyhkYXRhc291cmNlKVwiIGljb25Tdmc9XCJnbG9iZVwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8cHJ5LWRhdGFzb3VyY2UtbGlzdFxuICAgIG1vZGU9XCJzZWxlY3RvclwiXG4gICAgW3NlbGVjdGVkRGF0YXNvdXJjZXNdPVwiKHNlbGVjdGVkSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKGRhdGFzb3VyY2VTZWxlY3RlZCk9XCJ1cGRhdGVEYXRhc291cmNlTGlzdCgkZXZlbnQpXCJcbiAgPjwvcHJ5LWRhdGFzb3VyY2UtbGlzdD5cbiAgQGlmIChzaG93QnV0dG9ucykge1xuICAgIDxkaXYgY2xhc3M9XCJtLWJ0bi1ncm91cCBvLWRhdGFzb3VyY2Utc2VsZWN0b3JfX2Zvb3RlclwiPlxuICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNhbmNlbC5lbWl0KClcIiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIj5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC5jbG9zZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIChjbGljayk9XCJ2YWxpZGF0ZWQuZW1pdCgpXCJcbiAgICAgICAgI3ZhbGlkYXRlXG4gICAgICAgIChrZXlkb3duLnRhYik9XCJuZXh0VGFiLmVtaXQoKVwiXG4gICAgICAgIGNsYXNzPVwiYS1idG4gYS1idG4tLXByaW1hcnlcIlxuICAgICAgPlxuICAgICAgICB7eyAnQHByeS50b29sYm94Lm1hbmlmZXN0LnZhbGlkYXRlZCcgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgfVxuPC9kaXY+XG4iXX0=
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YXNvdXJjZS1zZWxlY3Rvci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2Rhc2hib2FyZC9saWIvZGFzaGJvYXJkL2NvbXBvbmVudHMvd2lkZ2V0cy9kYXRhc291cmNlLXNlbGVjdG9yL2RhdGFzb3VyY2Utc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9kYXNoYm9hcmQvbGliL2Rhc2hib2FyZC9jb21wb25lbnRzL3dpZGdldHMvZGF0YXNvdXJjZS1zZWxlY3Rvci9kYXRhc291cmNlLXNlbGVjdG9yLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBcUIsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLEdBQUcsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHaEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDBEQUEwRCxDQUFDO0FBQy9GLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7OztBQU12QyxNQUFNLE9BQU8sMkJBQTRCLFNBQVEsd0JBQXdCO0lBU3ZFLElBQWEsUUFBUSxDQUFDLFFBQStCO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsVUFB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QXJFVSwyQkFBMkI7a0dBQTNCLDJCQUEyQixpVENkeEMsMC9EQWtEQTs7MkZEcENhLDJCQUEyQjtrQkFKdkMsU0FBUzsrQkFDRSx5QkFBeUI7MEdBVTFCLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDTyxRQUFRO3NCQUFwQixLQUFLO2dCQUtJLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgbWFwLCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhLXNvdXJjZS5tb2RlbCc7XG5pbXBvcnQgeyBXaWRnZXRNYW5pZmVzdCB9IGZyb20gJy4uLy4uLy4uLy4uL2NvcmUvbW9kZWwvbWFuaWZlc3QuaW50ZXJmYWNlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL3N1YnNjcmlwdGlvbm5lci5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRGF0YXNvdXJjZVV0aWxzIH0gZnJvbSAnLi4vLi4vLi4vLi4vY29yZS9zdG9yZS9kYXRhLXNvdXJjZS9kYXRhc291cmNlLXV0aWxzJztcbmltcG9ydCB7IERhdGFTb3VyY2VTZWxlY3RvcnMgfSBmcm9tICcuLi8uLi8uLi8uLi9jb3JlL3N0b3JlL2RhdGEtc291cmNlL2RhdGEtc291cmNlLnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBkZWxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncHJ5LWRhdGFzb3VyY2Utc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJ2RhdGFzb3VyY2Utc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhdGFzb3VyY2VTZWxlY3RvckNvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB7XG4gIG1hbmlmZXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8V2lkZ2V0TWFuaWZlc3QgfCBudWxsPihudWxsKTtcbiAgc2VsZWN0ZWREYXRhc291cmNlcyQ6IE9ic2VydmFibGU8RGF0YVNvdXJjZVtdPjtcblxuICBzZWxlY3RlZElkcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZ1tdPihbXSk7XG4gIHNlYXJjaE9yQ2F0ZWdvcnlDaGFuZ2VkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgQElucHV0KCkgc2hvd0J1dHRvbnMgPSB0cnVlO1xuICBASW5wdXQoKSBzaG93VGl0bGUgPSB0cnVlO1xuICBASW5wdXQoKSBzZXQgbWFuaWZlc3QobWFuaWZlc3Q6IFdpZGdldE1hbmlmZXN0IHwgbnVsbCkge1xuICAgIHRoaXMubWFuaWZlc3QkLm5leHQobWFuaWZlc3QpO1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkLm5leHQoRGF0YXNvdXJjZVV0aWxzLmdldERhdGFzb3VyY2VBcnJheShtYW5pZmVzdD8uZGF0YXNvdXJjZSkpO1xuICB9XG5cbiAgQE91dHB1dCgpIHByZXZpb3VzVGFiID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbmV4dFRhYiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHZhbGlkYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGl0ZW1zQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmXG4gICkge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLnNlbGVjdGVkRGF0YXNvdXJjZXMkID0gY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLnN0b3JlLnNlbGVjdChEYXRhU291cmNlU2VsZWN0b3JzLmdldERhdGFTb3VyY2VzU29ydGVkKSxcbiAgICAgIHRoaXMuc2VsZWN0ZWRJZHMkXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2RhdGFzb3VyY2VzLCBzZWxlY3RlZElkc10pID0+XG4gICAgICAgIERhdGFzb3VyY2VVdGlscy5nZXRBbGxEYXRhc291cmNlc1dpdGhVbmtub3ducyhkYXRhc291cmNlcywgc2VsZWN0ZWRJZHMpLmZpbHRlcigoZHMpID0+XG4gICAgICAgICAgc2VsZWN0ZWRJZHMuaW5jbHVkZXMoZHMuaWQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzJC5zdWJzY3JpYmUoKHNlbGVjdGVkSWRzKSA9PiB7XG4gICAgICAgIHRoaXMuaXRlbXNDaGFuZ2VkLmVtaXQoc2VsZWN0ZWRJZHMpO1xuICAgICAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5zZWFyY2hPckNhdGVnb3J5Q2hhbmdlZCQucGlwZShkZWxheSg1MCkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgaXNHZW8oaXRlbTogRGF0YVNvdXJjZSkge1xuICAgIHJldHVybiBEYXRhc291cmNlVXRpbHMuaXNHZW8oaXRlbSk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3Rpb24oaWQ6IHN0cmluZykge1xuICAgIHRoaXMuc2VsZWN0ZWRJZHMkLm5leHQoXG4gICAgICB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5pbmNsdWRlcyhpZClcbiAgICAgICAgPyB0aGlzLnNlbGVjdGVkSWRzJC52YWx1ZS5maWx0ZXIoKGkpID0+IGkgIT09IGlkKVxuICAgICAgICA6IFsuLi50aGlzLnNlbGVjdGVkSWRzJC52YWx1ZSwgaWRdXG4gICAgKTtcbiAgICB0aGlzLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHVwZGF0ZURhdGFzb3VyY2VMaXN0KGlkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnNlbGVjdGVkSWRzJC5uZXh0KGlkcyk7XG4gICAgdGhpcy5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICBkZXRlY3RDaGFuZ2VzKCkge1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8tZGF0YXNvdXJjZS1zZWxlY3RvciB1LWRpc3BsYXktZmxleCAtY29sdW1uXCI+XG4gIEBpZiAoc2hvd1RpdGxlKSB7XG4gICAgPGgyIGNsYXNzPVwidS1zZWxmLWNlbnRlclwiPnt7ICdAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnNlbGVjdCcgfCBpMThuIH19PC9oMj5cbiAgfVxuICA8ZGl2PlxuICAgIDxoMz5cbiAgICAgIHt7ICdAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnNlbGVjdGlvbicgfCBpMThuIH19ICh7eyAoKHNlbGVjdGVkRGF0YXNvdXJjZXMkIHwgYXN5bmMpID8/IFtdKS5sZW5ndGggfX0pXG4gICAgPC9oMz5cbiAgICA8ZGl2IGNsYXNzPVwiby1kYXRhc291cmNlLXNlbGVjdG9yX19jaGlwcyB1LWRpc3BsYXktZmxleCAtd3JhcCAtZ2FwLTEwXCI+XG4gICAgICBAaWYgKChzZWxlY3RlZERhdGFzb3VyY2VzJCB8IGFzeW5jKT8ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIDxzcGFuIGNsYXNzPVwiYS1sYWJlbCAtaXRhbGljXCI+e3sgJ0BwcnkuY29tcG9uZW50cy5kYXRhc291cmNlU2VsZWN0b3Iubm9JdGVtU2VsZWN0ZWQnIHwgaTE4biB9fTwvc3Bhbj5cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAZm9yIChkYXRhc291cmNlIG9mIHNlbGVjdGVkRGF0YXNvdXJjZXMkIHwgYXN5bmM7IHRyYWNrIGRhdGFzb3VyY2UuaWQpIHtcbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cImEtY2hpcCBhLWNoaXAtLWdob3N0IC1sZyBhLXRvb2x0aXBcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS10b29sdGlwXT1cIidAcHJ5LmNvbXBvbmVudHMuZGF0YXNvdXJjZVNlbGVjdG9yLnVuc2VsZWN0SXRlbScgfCBpMThuXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNlbGVjdGlvbihkYXRhc291cmNlLmlkKVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJjbG9zZVwiIFt3aWR0aF09XCIxNVwiIFtoZWlnaHRdPVwiMTVcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAge3sgZGF0YXNvdXJjZS5uYW1lIH19XG4gICAgICAgICAgICA8cHJ5LWljb24gKm5nSWY9XCJpc0dlbyhkYXRhc291cmNlKVwiIGljb25Tdmc9XCJnbG9iZVwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIj48L3ByeS1pY29uPlxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8cHJ5LWRhdGFzb3VyY2UtbGlzdFxuICAgIG1vZGU9XCJzZWxlY3RvclwiXG4gICAgW3NlbGVjdGVkRGF0YXNvdXJjZXNdPVwiKHNlbGVjdGVkSWRzJCB8IGFzeW5jKSA/PyBbXVwiXG4gICAgKGRhdGFzb3VyY2VTZWxlY3RlZCk9XCJ1cGRhdGVEYXRhc291cmNlTGlzdCgkZXZlbnQpXCJcbiAgICAoc2VhcmNoT3JDYXRlZ29yeUNoYW5nZWQpPVwic2VhcmNoT3JDYXRlZ29yeUNoYW5nZWQkLm5leHQoKVwiXG4gID48L3ByeS1kYXRhc291cmNlLWxpc3Q+XG4gIEBpZiAoc2hvd0J1dHRvbnMpIHtcbiAgICA8ZGl2IGNsYXNzPVwibS1idG4tZ3JvdXAgby1kYXRhc291cmNlLXNlbGVjdG9yX19mb290ZXJcIj5cbiAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJjYW5jZWwuZW1pdCgpXCIgY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCI+XG4gICAgICAgIHt7ICdAcHJ5LnRvb2xib3gubWFuaWZlc3QuY2xvc2UnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAoY2xpY2spPVwidmFsaWRhdGVkLmVtaXQoKVwiXG4gICAgICAgICN2YWxpZGF0ZVxuICAgICAgICAoa2V5ZG93bi50YWIpPVwibmV4dFRhYi5lbWl0KClcIlxuICAgICAgICBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCJcbiAgICAgID5cbiAgICAgICAge3sgJ0BwcnkudG9vbGJveC5tYW5pZmVzdC52YWxpZGF0ZWQnIHwgaTE4biB9fVxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIH1cbjwvZGl2PlxuIl19