@c8y/ngx-components 1021.11.1 → 1021.13.3

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 (73) hide show
  1. package/alarms/alarms-date-filter.component.d.ts +34 -0
  2. package/alarms/alarms-date-filter.component.d.ts.map +1 -0
  3. package/alarms/alarms-filter.component.d.ts +2 -1
  4. package/alarms/alarms-filter.component.d.ts.map +1 -1
  5. package/alarms/alarms-view.service.d.ts +4 -2
  6. package/alarms/alarms-view.service.d.ts.map +1 -1
  7. package/alarms/alarms.component.d.ts +3 -1
  8. package/alarms/alarms.component.d.ts.map +1 -1
  9. package/alarms/alarms.model.d.ts +17 -1
  10. package/alarms/alarms.model.d.ts.map +1 -1
  11. package/alarms/alarms.module.d.ts +15 -13
  12. package/alarms/alarms.module.d.ts.map +1 -1
  13. package/branding/shared/data/store-branding.service.d.ts +5 -0
  14. package/branding/shared/data/store-branding.service.d.ts.map +1 -1
  15. package/branding/shared/lazy/branding/branding.component.d.ts.map +1 -1
  16. package/core/dashboard/dashboard.module.d.ts +19 -19
  17. package/core/dashboard/widget-change-event.model.d.ts +1 -1
  18. package/core/dashboard/widget-change-event.model.d.ts.map +1 -1
  19. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts +2 -1
  20. package/core/dashboard/wiget-time-context/widget-time-context-helper.service.d.ts.map +1 -1
  21. package/core/dashboard/wiget-time-context/widget-time-context-query.service.d.ts.map +1 -1
  22. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts +2 -1
  23. package/core/dashboard/wiget-time-context/widget-time-context.component.d.ts.map +1 -1
  24. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts +1 -14
  25. package/core/dashboard/wiget-time-context/widget-time-context.model.d.ts.map +1 -1
  26. package/core/date-time-picker/date-time-picker.component.d.ts.map +1 -1
  27. package/esm2022/alarm-event-selector/alarm-event-selection-list/alarm-event-selection-list.component.mjs +4 -4
  28. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +3 -3
  29. package/esm2022/alarms/alarms-date-filter.component.mjs +139 -0
  30. package/esm2022/alarms/alarms-filter.component.mjs +11 -5
  31. package/esm2022/alarms/alarms-type-filter.component.mjs +3 -3
  32. package/esm2022/alarms/alarms-view.service.mjs +15 -2
  33. package/esm2022/alarms/alarms.component.mjs +12 -6
  34. package/esm2022/alarms/alarms.model.mjs +17 -1
  35. package/esm2022/alarms/alarms.module.mjs +11 -4
  36. package/esm2022/branding/shared/data/store-branding.service.mjs +24 -1
  37. package/esm2022/branding/shared/lazy/branding/branding.component.mjs +3 -1
  38. package/esm2022/core/action-bar/action-bar.component.mjs +3 -3
  39. package/esm2022/core/dashboard/dashboard.module.mjs +5 -4
  40. package/esm2022/core/dashboard/widget-change-event.model.mjs +1 -1
  41. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-helper.service.mjs +3 -2
  42. package/esm2022/core/dashboard/wiget-time-context/widget-time-context-query.service.mjs +1 -1
  43. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.component.mjs +6 -5
  44. package/esm2022/core/dashboard/wiget-time-context/widget-time-context.model.mjs +3 -47
  45. package/esm2022/core/date-time-picker/date-time-picker.component.mjs +7 -1
  46. package/esm2022/core/list-display-switch/list-display-switch.component.mjs +3 -3
  47. package/esm2022/interval-picker/c8y-ngx-components-interval-picker.mjs +5 -0
  48. package/esm2022/interval-picker/index.mjs +3 -0
  49. package/esm2022/interval-picker/interval-picker.component.mjs +68 -0
  50. package/esm2022/interval-picker/interval-picker.model.mjs +47 -0
  51. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +5 -5
  52. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  53. package/fesm2022/c8y-ngx-components-alarms.mjs +184 -16
  54. package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
  55. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs +23 -0
  56. package/fesm2022/c8y-ngx-components-branding-shared-data.mjs.map +1 -1
  57. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs +2 -0
  58. package/fesm2022/c8y-ngx-components-branding-shared-lazy.mjs.map +1 -1
  59. package/fesm2022/c8y-ngx-components-interval-picker.mjs +120 -0
  60. package/fesm2022/c8y-ngx-components-interval-picker.mjs.map +1 -0
  61. package/fesm2022/c8y-ngx-components.mjs +17 -101
  62. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  63. package/interval-picker/c8y-ngx-components-interval-picker.d.ts.map +1 -0
  64. package/interval-picker/index.d.ts +3 -0
  65. package/interval-picker/index.d.ts.map +1 -0
  66. package/{core/dashboard/wiget-time-context/interval-picker → interval-picker}/interval-picker.component.d.ts +10 -2
  67. package/interval-picker/interval-picker.component.d.ts.map +1 -0
  68. package/interval-picker/interval-picker.model.d.ts +15 -0
  69. package/interval-picker/interval-picker.model.d.ts.map +1 -0
  70. package/locales/locales.pot +9 -3
  71. package/package.json +1 -1
  72. package/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.d.ts.map +0 -1
  73. package/esm2022/core/dashboard/wiget-time-context/interval-picker/interval-picker.component.mjs +0 -55
@@ -51,6 +51,9 @@ export class AlarmsFilterComponent {
51
51
  [Severity.MINOR]: params[Severity.MINOR] === 'true',
52
52
  [Severity.WARNING]: params[Severity.WARNING] === 'true'
53
53
  });
54
+ if (params.lastUpdatedFrom) {
55
+ this.selectedDates = [new Date(params.lastUpdatedFrom), new Date(params.createdTo)];
56
+ }
54
57
  this.applyFilters(true, false);
55
58
  });
56
59
  this.trackCheckboxStateWithFormChanges();
@@ -78,7 +81,8 @@ export class AlarmsFilterComponent {
78
81
  this.updateChipsAndDefaultValues();
79
82
  const combinedFormEvent = {
80
83
  showCleared: this.showCleared,
81
- severityOptions: this.formGroup.value
84
+ severityOptions: this.formGroup.value,
85
+ selectedDates: this.selectedDates
82
86
  };
83
87
  if (emit) {
84
88
  this.onFilterApplied.emit(combinedFormEvent);
@@ -89,7 +93,9 @@ export class AlarmsFilterComponent {
89
93
  this.router.navigate([], {
90
94
  queryParams: {
91
95
  showCleared: combinedFormEvent.showCleared,
92
- ...combinedFormEvent.severityOptions
96
+ ...combinedFormEvent.severityOptions,
97
+ lastUpdatedFrom: combinedFormEvent.selectedDates?.[0]?.toISOString(),
98
+ createdTo: combinedFormEvent.selectedDates?.[1]?.toISOString()
93
99
  },
94
100
  queryParamsHandling: 'merge'
95
101
  });
@@ -188,11 +194,11 @@ export class AlarmsFilterComponent {
188
194
  }
189
195
  }
190
196
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsFilterComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AlarmsViewService }, { token: i3.AlertService }, { token: i4.Router }, { token: i4.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
191
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: { contextSourceId: "contextSourceId" }, outputs: { onFilterApplied: "onFilterApplied" }, viewQueries: [{ propertyName: "filtersDropdown", first: true, predicate: ["filtersDropdown"], descendants: true }], ngImport: i0, template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <label class=\"flex-no-shrink m-b-0\">\n {{ 'Alarms severity' | translate }}\n </label>\n <div\n class=\"dropdown\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"chips.length !== severitiesList.length; else allAlarms\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let chip of chips\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"deselectChip(chip); $event.stopPropagation()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <i\n class=\"status stroked-icon icon-12\"\n [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n [ngClass]=\"chip | lowercase\"\n ></i>\n {{ SEVERITY_LABELS[chip] | translate }}\n </span>\n </ng-container>\n <ng-template #allAlarms>\n {{ 'All severities' | translate }}\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last\">\n <button\n class=\"btn-default btn btn--caret\"\n title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n data-cy=\"c8y-alarm-filter\"\n dropdownToggle\n (click)=\"resetForm()\"\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <ul\n class=\"dropdown-menu dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"'All' | translate\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarm-filter--all\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"allChanged($event)\"\n [ngModel]=\"isEachCheckboxSelected$ | async\"\n [indeterminate]=\"isIndeterminate$ | async\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"'bell'\"\n ></i>\n <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n </label>\n </li>\n <li\n class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\"\n *ngFor=\"let severity of severitiesList\"\n >\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"SEVERITY_LABELS[severity] | translate\"\n >\n <input\n type=\"checkbox\"\n [attr.data-cy]=\"'c8y-alarm-filter--' + severity\"\n [formControlName]=\"severity\"\n [value]=\"severity\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n [ngClass]=\"severity | lowercase\"\n ></i>\n <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n </label>\n <!-- badge -->\n <div\n class=\"badge badge-info m-l-auto\"\n *ngIf=\"alarmCounts[severity] || alarmCounts[severity] === 0\"\n >\n <i\n class=\"icon-spin\"\n [c8yIcon]=\"'circle-o-notch'\"\n *ngIf=\"countLoading\"\n ></i>\n <span\n *ngIf=\"!countLoading\"\n [attr.data-cy]=\"severity + '-badge'\"\n >\n {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n </span>\n </div>\n </li>\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n <label\n class=\"c8y-switch\"\n [attr.aria-label]=\"'Show cleared alarms' | translate\"\n [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n >\n <input\n type=\"checkbox\"\n #showClearedCheckbox\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"showCleared\"\n (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Show cleared alarms' | translate }}\"\n >\n {{ 'Show cleared alarms' | translate }}\n </span>\n </label>\n </li>\n\n <div class=\"p-16 d-flex sticky-bottom separator-top\">\n <button\n [attr.data-cy]=\"'c8y-alarms-filter--apply'\"\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyFilters(false); closeDropdown()\"\n [disabled]=\"shouldDisableApplyButton$ | async\"\n >\n {{ 'Apply' | translate }}\n </button>\n </div>\n </ul>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i6.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i6.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i6.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.AlarmSeverityToIconPipe, name: "AlarmSeverityToIcon" }, { kind: "pipe", type: i10.AlarmSeveritiesToTitlePipe, name: "AlarmSeveritiesToTitle" }] }); }
197
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsFilterComponent, selector: "c8y-alarms-filter", inputs: { contextSourceId: "contextSourceId" }, outputs: { onFilterApplied: "onFilterApplied" }, viewQueries: [{ propertyName: "filtersDropdown", first: true, predicate: ["filtersDropdown"], descendants: true }], ngImport: i0, template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by severity' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\" style=\"min-width: 104px;\">\n <ng-container *ngIf=\"chips.length !== severitiesList.length; else allAlarms\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let chip of chips\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"deselectChip(chip); $event.stopPropagation()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <i\n class=\"status stroked-icon icon-12\"\n [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n [ngClass]=\"chip | lowercase\"\n ></i>\n {{ SEVERITY_LABELS[chip] | translate }}\n </span>\n </ng-container>\n <ng-template #allAlarms>\n <span class=\"text-truncate\" title=\"{{ 'All severities' | translate }}\">\n {{ 'All severities' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last\">\n <button\n class=\"btn-default btn btn--caret\"\n title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n data-cy=\"c8y-alarm-filter\"\n dropdownToggle\n (click)=\"resetForm()\"\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <ul\n class=\"dropdown-menu dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"'All' | translate\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarm-filter--all\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"allChanged($event)\"\n [ngModel]=\"isEachCheckboxSelected$ | async\"\n [indeterminate]=\"isIndeterminate$ | async\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"'bell'\"\n ></i>\n <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n </label>\n </li>\n <li\n class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\"\n *ngFor=\"let severity of severitiesList\"\n >\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"SEVERITY_LABELS[severity] | translate\"\n >\n <input\n type=\"checkbox\"\n [attr.data-cy]=\"'c8y-alarm-filter--' + severity\"\n [formControlName]=\"severity\"\n [value]=\"severity\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n [ngClass]=\"severity | lowercase\"\n ></i>\n <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n </label>\n <!-- badge -->\n <div\n class=\"badge badge-info m-l-auto\"\n *ngIf=\"alarmCounts[severity] || alarmCounts[severity] === 0\"\n >\n <i\n class=\"icon-spin\"\n [c8yIcon]=\"'circle-o-notch'\"\n *ngIf=\"countLoading\"\n ></i>\n <span\n *ngIf=\"!countLoading\"\n [attr.data-cy]=\"severity + '-badge'\"\n >\n {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n </span>\n </div>\n </li>\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n <label\n class=\"c8y-switch\"\n [attr.aria-label]=\"'Show cleared alarms' | translate\"\n [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n >\n <input\n type=\"checkbox\"\n #showClearedCheckbox\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"showCleared\"\n (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Show cleared alarms' | translate }}\"\n >\n {{ 'Show cleared alarms' | translate }}\n </span>\n </label>\n </li>\n\n <div class=\"p-16 d-flex sticky-bottom separator-top\">\n <button\n [attr.data-cy]=\"'c8y-alarms-filter--apply'\"\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyFilters(false); closeDropdown()\"\n [disabled]=\"shouldDisableApplyButton$ | async\"\n >\n {{ 'Apply' | translate }}\n </button>\n </div>\n </ul>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i5.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i6.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i6.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i6.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.RequiredInputPlaceholderDirective, selector: "input[required], input[formControlName]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "pipe", type: i7.AsyncPipe, name: "async" }, { kind: "pipe", type: i7.LowerCasePipe, name: "lowercase" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }, { kind: "pipe", type: i9.AlarmSeverityToIconPipe, name: "AlarmSeverityToIcon" }, { kind: "pipe", type: i10.AlarmSeveritiesToTitlePipe, name: "AlarmSeveritiesToTitle" }] }); }
192
198
  }
193
199
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsFilterComponent, decorators: [{
194
200
  type: Component,
195
- args: [{ selector: 'c8y-alarms-filter', template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <label class=\"flex-no-shrink m-b-0\">\n {{ 'Alarms severity' | translate }}\n </label>\n <div\n class=\"dropdown\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"chips.length !== severitiesList.length; else allAlarms\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let chip of chips\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"deselectChip(chip); $event.stopPropagation()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <i\n class=\"status stroked-icon icon-12\"\n [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n [ngClass]=\"chip | lowercase\"\n ></i>\n {{ SEVERITY_LABELS[chip] | translate }}\n </span>\n </ng-container>\n <ng-template #allAlarms>\n {{ 'All severities' | translate }}\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last\">\n <button\n class=\"btn-default btn btn--caret\"\n title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n data-cy=\"c8y-alarm-filter\"\n dropdownToggle\n (click)=\"resetForm()\"\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <ul\n class=\"dropdown-menu dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"'All' | translate\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarm-filter--all\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"allChanged($event)\"\n [ngModel]=\"isEachCheckboxSelected$ | async\"\n [indeterminate]=\"isIndeterminate$ | async\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"'bell'\"\n ></i>\n <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n </label>\n </li>\n <li\n class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\"\n *ngFor=\"let severity of severitiesList\"\n >\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"SEVERITY_LABELS[severity] | translate\"\n >\n <input\n type=\"checkbox\"\n [attr.data-cy]=\"'c8y-alarm-filter--' + severity\"\n [formControlName]=\"severity\"\n [value]=\"severity\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n [ngClass]=\"severity | lowercase\"\n ></i>\n <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n </label>\n <!-- badge -->\n <div\n class=\"badge badge-info m-l-auto\"\n *ngIf=\"alarmCounts[severity] || alarmCounts[severity] === 0\"\n >\n <i\n class=\"icon-spin\"\n [c8yIcon]=\"'circle-o-notch'\"\n *ngIf=\"countLoading\"\n ></i>\n <span\n *ngIf=\"!countLoading\"\n [attr.data-cy]=\"severity + '-badge'\"\n >\n {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n </span>\n </div>\n </li>\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n <label\n class=\"c8y-switch\"\n [attr.aria-label]=\"'Show cleared alarms' | translate\"\n [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n >\n <input\n type=\"checkbox\"\n #showClearedCheckbox\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"showCleared\"\n (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Show cleared alarms' | translate }}\"\n >\n {{ 'Show cleared alarms' | translate }}\n </span>\n </label>\n </li>\n\n <div class=\"p-16 d-flex sticky-bottom separator-top\">\n <button\n [attr.data-cy]=\"'c8y-alarms-filter--apply'\"\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyFilters(false); closeDropdown()\"\n [disabled]=\"shouldDisableApplyButton$ | async\"\n >\n {{ 'Apply' | translate }}\n </button>\n </div>\n </ul>\n </div>\n</form>\n" }]
201
+ args: [{ selector: 'c8y-alarms-filter', template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by severity' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\" style=\"min-width: 104px;\">\n <ng-container *ngIf=\"chips.length !== severitiesList.length; else allAlarms\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let chip of chips\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"deselectChip(chip); $event.stopPropagation()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <i\n class=\"status stroked-icon icon-12\"\n [c8yIcon]=\"chip | AlarmSeverityToIcon\"\n [ngClass]=\"chip | lowercase\"\n ></i>\n {{ SEVERITY_LABELS[chip] | translate }}\n </span>\n </ng-container>\n <ng-template #allAlarms>\n <span class=\"text-truncate\" title=\"{{ 'All severities' | translate }}\">\n {{ 'All severities' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last\">\n <button\n class=\"btn-default btn btn--caret\"\n title=\"{{ chips | AlarmSeveritiesToTitle }}\"\n data-cy=\"c8y-alarm-filter\"\n dropdownToggle\n (click)=\"resetForm()\"\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <ul\n class=\"dropdown-menu dropdown-menu-action-bar\"\n *dropdownMenu\n >\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center sticky-top separator-bottom\">\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"'All' | translate\"\n >\n <input\n type=\"checkbox\"\n data-cy=\"c8y-alarm-filter--all\"\n [ngModelOptions]=\"{ standalone: true }\"\n (ngModelChange)=\"allChanged($event)\"\n [ngModel]=\"isEachCheckboxSelected$ | async\"\n [indeterminate]=\"isIndeterminate$ | async\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"'bell'\"\n ></i>\n <span class=\"m-l-8\">{{ 'All' | translate }}</span>\n </label>\n </li>\n <li\n class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center\"\n *ngFor=\"let severity of severitiesList\"\n >\n <label\n class=\"c8y-checkbox d-flex a-i-center\"\n [title]=\"SEVERITY_LABELS[severity] | translate\"\n >\n <input\n type=\"checkbox\"\n [attr.data-cy]=\"'c8y-alarm-filter--' + severity\"\n [formControlName]=\"severity\"\n [value]=\"severity\"\n (click)=\"markSeveritiesAsTouched()\"\n />\n <span></span>\n <i\n class=\"status stroked-icon m-l-8 icon-20\"\n [c8yIcon]=\"severity | AlarmSeverityToIcon\"\n [ngClass]=\"severity | lowercase\"\n ></i>\n <span class=\"m-l-8\">{{ SEVERITY_LABELS[severity] | translate }}</span>\n </label>\n <!-- badge -->\n <div\n class=\"badge badge-info m-l-auto\"\n *ngIf=\"alarmCounts[severity] || alarmCounts[severity] === 0\"\n >\n <i\n class=\"icon-spin\"\n [c8yIcon]=\"'circle-o-notch'\"\n *ngIf=\"countLoading\"\n ></i>\n <span\n *ngIf=\"!countLoading\"\n [attr.data-cy]=\"severity + '-badge'\"\n >\n {{ alarmCounts[severity] < 99 ? alarmCounts[severity] : '99+' }}\n </span>\n </div>\n </li>\n <li class=\"p-l-16 p-r-16 p-t-4 p-b-4 d-flex a-i-center separator-top\">\n <label\n class=\"c8y-switch\"\n [attr.aria-label]=\"'Show cleared alarms' | translate\"\n [attr.data-cy]=\"'c8y-alarms-filter--cleared'\"\n >\n <input\n type=\"checkbox\"\n #showClearedCheckbox\n [ngModelOptions]=\"{ standalone: true }\"\n [(ngModel)]=\"showCleared\"\n (click)=\"markSeveritiesAsTouched(); updateAlarmsCount(showClearedCheckbox.checked)\"\n />\n <span></span>\n <span\n class=\"text-truncate\"\n title=\"{{ 'Show cleared alarms' | translate }}\"\n >\n {{ 'Show cleared alarms' | translate }}\n </span>\n </label>\n </li>\n\n <div class=\"p-16 d-flex sticky-bottom separator-top\">\n <button\n [attr.data-cy]=\"'c8y-alarms-filter--apply'\"\n class=\"btn btn-primary btn-sm flex-grow\"\n title=\"{{ 'Apply' | translate }}\"\n type=\"button\"\n (click)=\"applyFilters(false); closeDropdown()\"\n [disabled]=\"shouldDisableApplyButton$ | async\"\n >\n {{ 'Apply' | translate }}\n </button>\n </div>\n </ul>\n </div>\n</form>\n" }]
196
202
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.AlarmsViewService }, { type: i3.AlertService }, { type: i4.Router }, { type: i4.ActivatedRoute }], propDecorators: { contextSourceId: [{
197
203
  type: Input
198
204
  }], onFilterApplied: [{
@@ -201,4 +207,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
201
207
  type: ViewChild,
202
208
  args: ['filtersDropdown']
203
209
  }] } });
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm1zLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm1zLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUVMLFFBQVEsRUFFUixlQUFlLEVBRWhCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEcsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUVMLG9CQUFvQixFQUNwQix1QkFBdUIsRUFFeEIsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7Ozs7Ozs7Ozs7QUFPekQsTUFBTSxPQUFPLHFCQUFxQjtJQStCaEMsWUFDVSxXQUF3QixFQUN4QixpQkFBb0MsRUFDcEMsWUFBMEIsRUFDMUIsTUFBYyxFQUNkLGNBQThCO1FBSjlC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YyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDdEMsTUFBTSxlQUFlLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQztRQUU3QyxJQUFJLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDLEdBQUcsQ0FBQyxDQUFtQixDQUFDO1FBQ2hHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUNoRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sYUFBYSxHQUFHLHVCQUF1QixDQUFDO1lBQzlDLGNBQWMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdkMsSUFBSSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBbUIsQ0FBQztRQUM1RCxDQUFDO0lBQ0gsQ0FBQzs4R0EzTlUscUJBQXFCO2tHQUFyQixxQkFBcUIsOFFDcENsQywyd0tBOEpBOzsyRkQxSGEscUJBQXFCO2tCQUpqQyxTQUFTOytCQUNFLG1CQUFtQjs2TEFPN0IsZUFBZTtzQkFEZCxLQUFLO2dCQVFOLGVBQWU7c0JBRGQsTUFBTTtnQkFJUCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU0VWRVJJVFlfTEFCRUxTLFxuICBTZXZlcml0eVR5cGVcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCc0Ryb3Bkb3duRGlyZWN0aXZlIH0gZnJvbSAnbmd4LWJvb3RzdHJhcC9kcm9wZG93bic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGZyb20sIGZvcmtKb2luLCBFTVBUWSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmlsdGVyLCBmaW5hbGl6ZSwgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFsYXJtc1ZpZXdTZXJ2aWNlIH0gZnJvbSAnLi9hbGFybXMtdmlldy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFsYXJtQ291bnQsXG4gIERFRkFVTFRfQUxBUk1fQ09VTlRTLFxuICBERUZBVUxUX1NFVkVSSVRZX1ZBTFVFUyxcbiAgQWxhcm1MaXN0Rm9ybUZpbHRlcnNcbn0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm1zLWZpbHRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9hbGFybXMtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNGaWx0ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHJlYWRvbmx5IHNldmVyaXRpZXNMaXN0ID0gT2JqZWN0LmtleXMoU0VWRVJJVFlfTEFCRUxTKSBhcyBTZXZlcml0eVR5cGVbXTtcblxuICBASW5wdXQoKVxuICBjb250ZXh0U291cmNlSWQ6IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEV2ZW50RW1pdHRlciB0byBub3RpZnkgd2hlbiBmaWx0ZXJzIGhhdmUgYmVlbiBhcHBsaWVkLlxuICAgKiBFbWl0cyBhIGBBbGFybUxpc3RGb3JtRmlsdGVyc2Agb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZmlsdGVyIGNyaXRlcmlhIGFwcGxpZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgb25GaWx0ZXJBcHBsaWVkID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybUxpc3RGb3JtRmlsdGVycz4oKTtcblxuICBAVmlld0NoaWxkKCdmaWx0ZXJzRHJvcGRvd24nKVxuICBmaWx0ZXJzRHJvcGRvd246IEJzRHJvcGRvd25EaXJlY3RpdmU7XG5cbiAgZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cChERUZBVUxUX1NFVkVSSVRZX1ZBTFVFUyk7XG4gIGNoaXBzOiBTZXZlcml0eVR5cGVbXSA9IFtdO1xuICBpc0luZGV0ZXJtaW5hdGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBjb3VudExvYWRpbmc6IGJvb2xlYW47XG4gIHNob3dDbGVhcmVkID0gZmFsc2U7XG4gIGFsYXJtQ291bnRzOiBBbGFybUNvdW50ID0gREVGQVVMVF9BTEFSTV9DT1VOVFM7XG4gIHNob3VsZERpc2FibGVBcHBseUJ1dHRvbiQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGlzRWFjaENoZWNrYm94U2VsZWN0ZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgU0VWRVJJVFlfTEFCRUxTID0gU0VWRVJJVFlfTEFCRUxTO1xuICBwcml2YXRlIGlzTm9uZUNoZWNrYm94U2VsZWN0ZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgc2V2ZXJpdGllc1RvdWNoZWQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gIHByaXZhdGUgY3VycmVudEZvcm1Hcm91cFZhbHVlcyA9IHRoaXMuZm9ybUdyb3VwLnZhbHVlO1xuICBwcml2YXRlIGN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlOiBib29sZWFuO1xuICBwcml2YXRlIGRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGFsYXJtc1ZpZXdTZXJ2aWNlOiBBbGFybXNWaWV3U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUucXVlcnlQYXJhbXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZShwYXJhbXMgPT4ge1xuICAgICAgdGhpcy5zaG93Q2xlYXJlZCA9IHBhcmFtcy5zaG93Q2xlYXJlZCA9PT0gJ3RydWUnO1xuICAgICAgdGhpcy5mb3JtR3JvdXAuc2V0VmFsdWUoe1xuICAgICAgICBbU2V2ZXJpdHkuQ1JJVElDQUxdOiBwYXJhbXNbU2V2ZXJpdHkuQ1JJVElDQUxdID09PSAndHJ1ZScsXG4gICAgICAgIFtTZXZlcml0eS5NQUpPUl06IHBhcmFtc1tTZXZlcml0eS5NQUpPUl0gPT09ICd0cnVlJyxcbiAgICAgICAgW1NldmVyaXR5Lk1JTk9SXTogcGFyYW1zW1NldmVyaXR5Lk1JTk9SXSA9PT0gJ3RydWUnLFxuICAgICAgICBbU2V2ZXJpdHkuV0FSTklOR106IHBhcmFtc1tTZXZlcml0eS5XQVJOSU5HXSA9PT0gJ3RydWUnXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRydWUsIGZhbHNlKTtcbiAgICB9KTtcbiAgICB0aGlzLnRyYWNrQ2hlY2tib3hTdGF0ZVdpdGhGb3JtQ2hhbmdlcygpO1xuICAgIHRoaXMuY3VycmVudFNob3dDbGVhcmVkVmFsdWUgPSB0aGlzLnNob3dDbGVhcmVkO1xuICAgIHRoaXMudXBkYXRlQ2hpcHNBbmREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzRHJvcGRvd24uaXNPcGVuQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGZpbHRlcihCb29sZWFuKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVBbGFybXNDb3VudCgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFsbENoYW5nZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHNlbGVjdGVkLFxuICAgICAgW1NldmVyaXR5Lk1BSk9SXTogc2VsZWN0ZWQsXG4gICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBzZWxlY3RlZCxcbiAgICAgIFtTZXZlcml0eS5XQVJOSU5HXTogc2VsZWN0ZWRcbiAgICB9IGFzIFNldmVyaXR5RmlsdGVyKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycyhlbWl0ID0gdHJ1ZSwgbmF2aWdhdGUgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDaGlwc0FuZERlZmF1bHRWYWx1ZXMoKTtcbiAgICBjb25zdCBjb21iaW5lZEZvcm1FdmVudDogQWxhcm1MaXN0Rm9ybUZpbHRlcnMgPSB7XG4gICAgICBzaG93Q2xlYXJlZDogdGhpcy5zaG93Q2xlYXJlZCxcbiAgICAgIHNldmVyaXR5T3B0aW9uczogdGhpcy5mb3JtR3JvdXAudmFsdWVcbiAgICB9O1xuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLm9uRmlsdGVyQXBwbGllZC5lbWl0KGNvbWJpbmVkRm9ybUV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwVmFsdWVzID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5jdXJyZW50U2hvd0NsZWFyZWRWYWx1ZSA9IHRoaXMuc2hvd0NsZWFyZWQ7XG5cbiAgICBpZiAobmF2aWdhdGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgc2hvd0NsZWFyZWQ6IGNvbWJpbmVkRm9ybUV2ZW50LnNob3dDbGVhcmVkLFxuICAgICAgICAgIC4uLmNvbWJpbmVkRm9ybUV2ZW50LnNldmVyaXR5T3B0aW9uc1xuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdENoaXAoY2hpcDogU2V2ZXJpdHlUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAuLi50aGlzLmZvcm1Hcm91cC52YWx1ZSxcbiAgICAgIFtjaGlwXTogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyhmYWxzZSk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlcnNEcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIHRoaXMuZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCh0aGlzLmN1cnJlbnRGb3JtR3JvdXBWYWx1ZXMpO1xuICAgIHRoaXMuc2V2ZXJpdGllc1RvdWNoZWQkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0NsZWFyZWQgPSB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlO1xuICB9XG5cbiAgbWFya1NldmVyaXRpZXNBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXZlcml0aWVzVG91Y2hlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luY2hyb25vdXNseSBmZXRjaGVzIGFuZCB1cGRhdGVzIHRoZSBjb3VudCBvZiBhbGFybXMgZm9yIGVhY2ggc2V2ZXJpdHkgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBzaG93Q2xlYXJlZCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBjbGVhcmVkIGFsYXJtcyBpbiB0aGUgY291bnQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIGB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlYC5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgYWxhcm0gY291bnRzIGhhdmUgYmVlbiBmZXRjaGVkLFxuICAgKiBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIGFueSBvZiB0aGUgYWxhcm0gY291bnQgZmV0Y2hpbmcgcHJvbWlzZXMgcmVqZWN0LlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlQWxhcm1zQ291bnQoc2hvd0NsZWFyZWQgPSB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb3VudExvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGFsYXJtRmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyIHwgbnVsbCA9IHRoaXMuY29udGV4dFNvdXJjZUlkXG4gICAgICA/IHtcbiAgICAgICAgICBzb3VyY2U6IHRoaXMuY29udGV4dFNvdXJjZUlkLFxuICAgICAgICAgIHdpdGhTb3VyY2VBc3NldHM6IHRydWUsXG4gICAgICAgICAgd2l0aFNvdXJjZURldmljZXM6IHRydWVcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG9ic2VydmFibGVzOiBSZWNvcmQ8U2V2ZXJpdHlUeXBlLCBPYnNlcnZhYmxlPG51bWJlcj4+ID0gdGhpcy5zZXZlcml0aWVzTGlzdC5yZWR1Y2UoXG4gICAgICAoYWNjLCBzZXZlcml0eSkgPT4ge1xuICAgICAgICBhY2Nbc2V2ZXJpdHldID0gZnJvbShcbiAgICAgICAgICB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLmdldEFsYXJtc0NvdW50QnlTZXZlcml0eShzZXZlcml0eSwgc2hvd0NsZWFyZWQsIGFsYXJtRmlsdGVyKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgQ1JJVElDQUw6IG51bGwsXG4gICAgICAgIE1BSk9SOiBudWxsLFxuICAgICAgICBNSU5PUjogbnVsbCxcbiAgICAgICAgV0FSTklORzogbnVsbFxuICAgICAgfVxuICAgICk7XG4gICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuYWxhcm1Db3VudHMgPSB7fSBhcyBBbGFybUNvdW50O1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5jb3VudExvYWRpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChhbGFybUNvdW50czogQWxhcm1Db3VudCkgPT4gKHRoaXMuYWxhcm1Db3VudHMgPSBhbGFybUNvdW50cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtVmFsdWVXaXRoQ2hhbmdlc1N0cmVhbSgpOiBPYnNlcnZhYmxlPFNldmVyaXR5RmlsdGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Hcm91cC52YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0NoZWNrYm94U3RhdGVXaXRoRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlJCA9IHRoaXMuY3JlYXRlRm9ybVZhbHVlV2l0aENoYW5nZXNTdHJlYW0oKTtcbiAgICB0aGlzLmlzRWFjaENoZWNrYm94U2VsZWN0ZWQkID0gdGhpcy5jcmVhdGVBbGxTZWxlY3RlZFN0cmVhbShmb3JtVmFsdWUkKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSQgPSB0aGlzLmNyZWF0ZUluZGV0ZXJtaW5hdGVTdHJlYW0oZm9ybVZhbHVlJCk7XG4gICAgdGhpcy50cmFja0FsbENoZWNrYm94ZXNEaXNhYmxlZChmb3JtVmFsdWUkKTtcbiAgICB0aGlzLnNob3VsZERpc2FibGVBcHBseUJ1dHRvbiQgPSB0aGlzLmNyZWF0ZURpc2FibGVBcHBseUJ1dHRvblN0cmVhbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbGxTZWxlY3RlZFN0cmVhbShmb3JtVmFsdWUkOiBPYnNlcnZhYmxlPFNldmVyaXR5RmlsdGVyPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBmb3JtVmFsdWUkLnBpcGUobWFwKHNldmVyaXRpZXMgPT4gT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzKS5ldmVyeShCb29sZWFuKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbmRldGVybWluYXRlU3RyZWFtKGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8U2V2ZXJpdHlGaWx0ZXI+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZSQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgc2V2ZXJpdGllcyA9PlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V2ZXJpdGllcykuc29tZShCb29sZWFuKSAmJiAhT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzKS5ldmVyeShCb29sZWFuKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrQWxsQ2hlY2tib3hlc0Rpc2FibGVkKGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8U2V2ZXJpdHlGaWx0ZXI+KTogdm9pZCB7XG4gICAgZm9ybVZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHNldmVyaXRpZXMgPT4ge1xuICAgICAgY29uc3QgYXJlQWxsRGlzYWJsZWQgPSBPYmplY3QudmFsdWVzKHNldmVyaXRpZXMpLmV2ZXJ5KHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgICB0aGlzLmlzTm9uZUNoZWNrYm94U2VsZWN0ZWQkLm5leHQoYXJlQWxsRGlzYWJsZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEaXNhYmxlQXBwbHlCdXR0b25TdHJlYW0oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNOb25lQ2hlY2tib3hTZWxlY3RlZCQsIHRoaXMuc2V2ZXJpdGllc1RvdWNoZWQkXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFthbGxDaGVja2JveGVzQXJlRGlzYWJsZWQsIHNldmVyaXRpZXNUb3VjaGVkXSkgPT5cbiAgICAgICAgICBhbGxDaGVja2JveGVzQXJlRGlzYWJsZWQgfHwgIXNldmVyaXRpZXNUb3VjaGVkXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2hpcHNBbmREZWZhdWx0VmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldmVyaXR5RmlsdGVyID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgY29uc3Qgc2V2ZWVyaXR5VmFsdWVzID0gc2V2ZXJpdHlGaWx0ZXIudmFsdWU7XG5cbiAgICB0aGlzLmNoaXBzID0gT2JqZWN0LmtleXMoc2V2ZWVyaXR5VmFsdWVzKS5maWx0ZXIoa2V5ID0+IHNldmVlcml0eVZhbHVlc1trZXldKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgICBjb25zdCBhbGxDaGlwc1JlbW92ZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoYWxsQ2hpcHNSZW1vdmVkKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gREVGQVVMVF9TRVZFUklUWV9WQUxVRVM7XG4gICAgICBzZXZlcml0eUZpbHRlci5zZXRWYWx1ZShkZWZhdWx0VmFsdWVzKTtcbiAgICAgIHRoaXMuY2hpcHMgPSBPYmplY3Qua2V5cyhkZWZhdWx0VmFsdWVzKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4+XG4gIDxsYWJlbCBjbGFzcz1cImZsZXgtbm8tc2hyaW5rIG0tYi0wXCI+XG4gICAge3sgJ0FsYXJtcyBzZXZlcml0eScgfCB0cmFuc2xhdGUgfX1cbiAgPC9sYWJlbD5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgIGRyb3Bkb3duXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoaXBzLmxlbmd0aCAhPT0gc2V2ZXJpdGllc0xpc3QubGVuZ3RoOyBlbHNlIGFsbEFsYXJtc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgY2hpcCBvZiBjaGlwc1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4teHMgYnRuLWNsZWFuIHRleHQtMTBcIlxuICAgICAgICAgICAgICB0aXRsZT1cInt7ICdSZW1vdmUnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgIChjbGljayk9XCJkZXNlbGVjdENoaXAoY2hpcCk7ICRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMgc3Ryb2tlZC1pY29uIGljb24tMTJcIlxuICAgICAgICAgICAgICBbYzh5SWNvbl09XCJjaGlwIHwgQWxhcm1TZXZlcml0eVRvSWNvblwiXG4gICAgICAgICAgICAgIFtuZ0NsYXNzXT1cImNoaXAgfCBsb3dlcmNhc2VcIlxuICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgIHt7IFNFVkVSSVRZX0xBQkVMU1tjaGlwXSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxsQWxhcm1zPlxuICAgICAgICAgIHt7ICdBbGwgc2V2ZXJpdGllcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3RcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuIGJ0bi0tY2FyZXRcIlxuICAgICAgICAgIHRpdGxlPVwie3sgY2hpcHMgfCBBbGFybVNldmVyaXRpZXNUb1RpdGxlIH19XCJcbiAgICAgICAgICBkYXRhLWN5PVwiYzh5LWFsYXJtLWZpbHRlclwiXG4gICAgICAgICAgZHJvcGRvd25Ub2dnbGVcbiAgICAgICAgICAoY2xpY2spPVwicmVzZXRGb3JtKClcIlxuICAgICAgICA+XG4gICAgICAgICAgPGkgY2xhc3M9XCJjYXJldFwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8dWxcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgKmRyb3Bkb3duTWVudVxuICAgID5cbiAgICAgIDxsaSBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTQgcC1iLTQgZC1mbGV4IGEtaS1jZW50ZXIgc3RpY2t5LXRvcCBzZXBhcmF0b3ItYm90dG9tXCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgIGNsYXNzPVwiYzh5LWNoZWNrYm94IGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgZGF0YS1jeT1cImM4eS1hbGFybS1maWx0ZXItLWFsbFwiXG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwiYWxsQ2hhbmdlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIFtuZ01vZGVsXT1cImlzRWFjaENoZWNrYm94U2VsZWN0ZWQkIHwgYXN5bmNcIlxuICAgICAgICAgICAgW2luZGV0ZXJtaW5hdGVdPVwiaXNJbmRldGVybWluYXRlJCB8IGFzeW5jXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtYXJrU2V2ZXJpdGllc0FzVG91Y2hlZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMgc3Ryb2tlZC1pY29uIG0tbC04IGljb24tMjBcIlxuICAgICAgICAgICAgW2M4eUljb25dPVwiJ2JlbGwnXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLThcIj57eyAnQWxsJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgIDwvbGk+XG4gICAgICA8bGlcbiAgICAgICAgY2xhc3M9XCJwLWwtMTYgcC1yLTE2IHAtdC00IHAtYi00IGQtZmxleCBhLWktY2VudGVyXCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNldmVyaXR5IG9mIHNldmVyaXRpZXNMaXN0XCJcbiAgICAgID5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3ggZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAgIFt0aXRsZV09XCJTRVZFUklUWV9MQUJFTFNbc2V2ZXJpdHldIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgIFthdHRyLmRhdGEtY3ldPVwiJ2M4eS1hbGFybS1maWx0ZXItLScgKyBzZXZlcml0eVwiXG4gICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cInNldmVyaXR5XCJcbiAgICAgICAgICAgIFt2YWx1ZV09XCJzZXZlcml0eVwiXG4gICAgICAgICAgICAoY2xpY2spPVwibWFya1NldmVyaXRpZXNBc1RvdWNoZWQoKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwic3RhdHVzIHN0cm9rZWQtaWNvbiBtLWwtOCBpY29uLTIwXCJcbiAgICAgICAgICAgIFtjOHlJY29uXT1cInNldmVyaXR5IHwgQWxhcm1TZXZlcml0eVRvSWNvblwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJzZXZlcml0eSB8IGxvd2VyY2FzZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cIm0tbC04XCI+e3sgU0VWRVJJVFlfTEFCRUxTW3NldmVyaXR5XSB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgPCEtLSBiYWRnZSAtLT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtaW5mbyBtLWwtYXV0b1wiXG4gICAgICAgICAgKm5nSWY9XCJhbGFybUNvdW50c1tzZXZlcml0eV0gfHwgYWxhcm1Db3VudHNbc2V2ZXJpdHldID09PSAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb24tc3BpblwiXG4gICAgICAgICAgICBbYzh5SWNvbl09XCInY2lyY2xlLW8tbm90Y2gnXCJcbiAgICAgICAgICAgICpuZ0lmPVwiY291bnRMb2FkaW5nXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cIiFjb3VudExvYWRpbmdcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCJzZXZlcml0eSArICctYmFkZ2UnXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyBhbGFybUNvdW50c1tzZXZlcml0eV0gPCA5OSA/IGFsYXJtQ291bnRzW3NldmVyaXR5XSA6ICc5OSsnIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbGk+XG4gICAgICA8bGkgY2xhc3M9XCJwLWwtMTYgcC1yLTE2IHAtdC00IHAtYi00IGQtZmxleCBhLWktY2VudGVyIHNlcGFyYXRvci10b3BcIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktc3dpdGNoXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidTaG93IGNsZWFyZWQgYWxhcm1zJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInYzh5LWFsYXJtcy1maWx0ZXItLWNsZWFyZWQnXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICNzaG93Q2xlYXJlZENoZWNrYm94XG4gICAgICAgICAgICBbbmdNb2RlbE9wdGlvbnNdPVwieyBzdGFuZGFsb25lOiB0cnVlIH1cIlxuICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJzaG93Q2xlYXJlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwibWFya1NldmVyaXRpZXNBc1RvdWNoZWQoKTsgdXBkYXRlQWxhcm1zQ291bnQoc2hvd0NsZWFyZWRDaGVja2JveC5jaGVja2VkKVwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cInt7ICdTaG93IGNsZWFyZWQgYWxhcm1zJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAge3sgJ1Nob3cgY2xlYXJlZCBhbGFybXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9saT5cblxuICAgICAgPGRpdiBjbGFzcz1cInAtMTYgZC1mbGV4IHN0aWNreS1ib3R0b20gc2VwYXJhdG9yLXRvcFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInYzh5LWFsYXJtcy1maWx0ZXItLWFwcGx5J1wiXG4gICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYnRuLXNtIGZsZXgtZ3Jvd1wiXG4gICAgICAgICAgdGl0bGU9XCJ7eyAnQXBwbHknIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAoY2xpY2spPVwiYXBwbHlGaWx0ZXJzKGZhbHNlKTsgY2xvc2VEcm9wZG93bigpXCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwic2hvdWxkRGlzYWJsZUFwcGx5QnV0dG9uJCB8IGFzeW5jXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L3VsPlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
210
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9hbGFybXMvYWxhcm1zLWZpbHRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9hbGFybXMvYWxhcm1zLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUVMLFFBQVEsRUFFUixlQUFlLEVBRWhCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFBRSxZQUFZLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDN0QsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xHLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFFTCxvQkFBb0IsRUFDcEIsdUJBQXVCLEVBRXhCLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7Ozs7O0FBT3pELE1BQU0sT0FBTyxxQkFBcUI7SUFnQ2hDLFlBQ1UsV0FBd0IsRUFDeEIsaUJBQW9DLEVBQ3BDLFlBQTBCLEVBQzFCLE1BQWMsRUFDZCxjQUE4QjtRQUo5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UCxlQUFlO3NCQURkLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIFNldmVyaXR5LFxuICBTZXZlcml0eUZpbHRlcixcbiAgU0VWRVJJVFlfTEFCRUxTLFxuICBTZXZlcml0eVR5cGVcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBEYXRlVGltZUNvbnRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJzRHJvcGRvd25EaXJlY3RpdmUgfSBmcm9tICduZ3gtYm9vdHN0cmFwL2Ryb3Bkb3duJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgZnJvbSwgZm9ya0pvaW4sIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIHN0YXJ0V2l0aCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQWxhcm1zVmlld1NlcnZpY2UgfSBmcm9tICcuL2FsYXJtcy12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtcbiAgQWxhcm1Db3VudCxcbiAgREVGQVVMVF9BTEFSTV9DT1VOVFMsXG4gIERFRkFVTFRfU0VWRVJJVFlfVkFMVUVTLFxuICBBbGFybUxpc3RGb3JtRmlsdGVyc1xufSBmcm9tICcuL2FsYXJtcy5tb2RlbCc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtZmlsdGVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2FsYXJtcy1maWx0ZXIuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtc0ZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcmVhZG9ubHkgc2V2ZXJpdGllc0xpc3QgPSBPYmplY3Qua2V5cyhTRVZFUklUWV9MQUJFTFMpIGFzIFNldmVyaXR5VHlwZVtdO1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRleHRTb3VyY2VJZDogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcblxuICAvKipcbiAgICogRXZlbnRFbWl0dGVyIHRvIG5vdGlmeSB3aGVuIGZpbHRlcnMgaGF2ZSBiZWVuIGFwcGxpZWQuXG4gICAqIEVtaXRzIGEgYEFsYXJtTGlzdEZvcm1GaWx0ZXJzYCBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBmaWx0ZXIgY3JpdGVyaWEgYXBwbGllZCBieSB0aGUgdXNlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBvbkZpbHRlckFwcGxpZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFsYXJtTGlzdEZvcm1GaWx0ZXJzPigpO1xuXG4gIEBWaWV3Q2hpbGQoJ2ZpbHRlcnNEcm9wZG93bicpXG4gIGZpbHRlcnNEcm9wZG93bjogQnNEcm9wZG93bkRpcmVjdGl2ZTtcblxuICBmb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKERFRkFVTFRfU0VWRVJJVFlfVkFMVUVTKTtcbiAgY2hpcHM6IFNldmVyaXR5VHlwZVtdID0gW107XG4gIGlzSW5kZXRlcm1pbmF0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIGNvdW50TG9hZGluZzogYm9vbGVhbjtcbiAgc2hvd0NsZWFyZWQgPSBmYWxzZTtcbiAgYWxhcm1Db3VudHM6IEFsYXJtQ291bnQgPSBERUZBVUxUX0FMQVJNX0NPVU5UUztcbiAgc2VsZWN0ZWREYXRlczogRGF0ZVRpbWVDb250ZXh0O1xuICBzaG91bGREaXNhYmxlQXBwbHlCdXR0b24kOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBpc0VhY2hDaGVja2JveFNlbGVjdGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IFNFVkVSSVRZX0xBQkVMUyA9IFNFVkVSSVRZX0xBQkVMUztcbiAgcHJpdmF0ZSBpc05vbmVDaGVja2JveFNlbGVjdGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHNldmVyaXRpZXNUb3VjaGVkJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBWYWx1ZXMgPSB0aGlzLmZvcm1Hcm91cC52YWx1ZTtcbiAgcHJpdmF0ZSBjdXJyZW50U2hvd0NsZWFyZWRWYWx1ZTogYm9vbGVhbjtcbiAgcHJpdmF0ZSBkZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBhbGFybXNWaWV3U2VydmljZTogQWxhcm1zVmlld1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUocGFyYW1zID0+IHtcbiAgICAgIHRoaXMuc2hvd0NsZWFyZWQgPSBwYXJhbXMuc2hvd0NsZWFyZWQgPT09ICd0cnVlJztcbiAgICAgIHRoaXMuZm9ybUdyb3VwLnNldFZhbHVlKHtcbiAgICAgICAgW1NldmVyaXR5LkNSSVRJQ0FMXTogcGFyYW1zW1NldmVyaXR5LkNSSVRJQ0FMXSA9PT0gJ3RydWUnLFxuICAgICAgICBbU2V2ZXJpdHkuTUFKT1JdOiBwYXJhbXNbU2V2ZXJpdHkuTUFKT1JdID09PSAndHJ1ZScsXG4gICAgICAgIFtTZXZlcml0eS5NSU5PUl06IHBhcmFtc1tTZXZlcml0eS5NSU5PUl0gPT09ICd0cnVlJyxcbiAgICAgICAgW1NldmVyaXR5LldBUk5JTkddOiBwYXJhbXNbU2V2ZXJpdHkuV0FSTklOR10gPT09ICd0cnVlJ1xuICAgICAgfSk7XG4gICAgICBpZiAocGFyYW1zLmxhc3RVcGRhdGVkRnJvbSkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZXMgPSBbbmV3IERhdGUocGFyYW1zLmxhc3RVcGRhdGVkRnJvbSksIG5ldyBEYXRlKHBhcmFtcy5jcmVhdGVkVG8pXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKHRydWUsIGZhbHNlKTtcbiAgICB9KTtcbiAgICB0aGlzLnRyYWNrQ2hlY2tib3hTdGF0ZVdpdGhGb3JtQ2hhbmdlcygpO1xuICAgIHRoaXMuY3VycmVudFNob3dDbGVhcmVkVmFsdWUgPSB0aGlzLnNob3dDbGVhcmVkO1xuICAgIHRoaXMudXBkYXRlQ2hpcHNBbmREZWZhdWx0VmFsdWVzKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJzRHJvcGRvd24uaXNPcGVuQ2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCksIGZpbHRlcihCb29sZWFuKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVBbGFybXNDb3VudCgpKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGFsbENoYW5nZWQoc2VsZWN0ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIFtTZXZlcml0eS5DUklUSUNBTF06IHNlbGVjdGVkLFxuICAgICAgW1NldmVyaXR5Lk1BSk9SXTogc2VsZWN0ZWQsXG4gICAgICBbU2V2ZXJpdHkuTUlOT1JdOiBzZWxlY3RlZCxcbiAgICAgIFtTZXZlcml0eS5XQVJOSU5HXTogc2VsZWN0ZWRcbiAgICB9IGFzIFNldmVyaXR5RmlsdGVyKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVycyhlbWl0ID0gdHJ1ZSwgbmF2aWdhdGUgPSB0cnVlKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVDaGlwc0FuZERlZmF1bHRWYWx1ZXMoKTtcbiAgICBjb25zdCBjb21iaW5lZEZvcm1FdmVudDogQWxhcm1MaXN0Rm9ybUZpbHRlcnMgPSB7XG4gICAgICBzaG93Q2xlYXJlZDogdGhpcy5zaG93Q2xlYXJlZCxcbiAgICAgIHNldmVyaXR5T3B0aW9uczogdGhpcy5mb3JtR3JvdXAudmFsdWUsXG4gICAgICBzZWxlY3RlZERhdGVzOiB0aGlzLnNlbGVjdGVkRGF0ZXNcbiAgICB9O1xuICAgIGlmIChlbWl0KSB7XG4gICAgICB0aGlzLm9uRmlsdGVyQXBwbGllZC5lbWl0KGNvbWJpbmVkRm9ybUV2ZW50KTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwVmFsdWVzID0gdGhpcy5mb3JtR3JvdXAudmFsdWU7XG4gICAgdGhpcy5jdXJyZW50U2hvd0NsZWFyZWRWYWx1ZSA9IHRoaXMuc2hvd0NsZWFyZWQ7XG5cbiAgICBpZiAobmF2aWdhdGUpIHtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgc2hvd0NsZWFyZWQ6IGNvbWJpbmVkRm9ybUV2ZW50LnNob3dDbGVhcmVkLFxuICAgICAgICAgIC4uLmNvbWJpbmVkRm9ybUV2ZW50LnNldmVyaXR5T3B0aW9ucyxcbiAgICAgICAgICBsYXN0VXBkYXRlZEZyb206IGNvbWJpbmVkRm9ybUV2ZW50LnNlbGVjdGVkRGF0ZXM/LlswXT8udG9JU09TdHJpbmcoKSxcbiAgICAgICAgICBjcmVhdGVkVG86IGNvbWJpbmVkRm9ybUV2ZW50LnNlbGVjdGVkRGF0ZXM/LlsxXT8udG9JU09TdHJpbmcoKVxuICAgICAgICB9LFxuICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBkZXNlbGVjdENoaXAoY2hpcDogU2V2ZXJpdHlUeXBlKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICAuLi50aGlzLmZvcm1Hcm91cC52YWx1ZSxcbiAgICAgIFtjaGlwXTogZmFsc2VcbiAgICB9KTtcbiAgICB0aGlzLmFwcGx5RmlsdGVycyhmYWxzZSk7XG4gICAgdGhpcy5jbG9zZURyb3Bkb3duKCk7XG4gIH1cblxuICBjbG9zZURyb3Bkb3duKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmZpbHRlcnNEcm9wZG93bi5pc09wZW4pIHtcbiAgICAgIHRoaXMuZmlsdGVyc0Ryb3Bkb3duLmlzT3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJlc2V0Rm9ybSgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm1Hcm91cC5yZXNldCh0aGlzLmN1cnJlbnRGb3JtR3JvdXBWYWx1ZXMpO1xuICAgIHRoaXMuc2V2ZXJpdGllc1RvdWNoZWQkLm5leHQoZmFsc2UpO1xuICAgIHRoaXMuc2hvd0NsZWFyZWQgPSB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlO1xuICB9XG5cbiAgbWFya1NldmVyaXRpZXNBc1RvdWNoZWQoKTogdm9pZCB7XG4gICAgdGhpcy5zZXZlcml0aWVzVG91Y2hlZCQubmV4dCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBc3luY2hyb25vdXNseSBmZXRjaGVzIGFuZCB1cGRhdGVzIHRoZSBjb3VudCBvZiBhbGFybXMgZm9yIGVhY2ggc2V2ZXJpdHkgbGV2ZWwuXG4gICAqXG4gICAqIEBwYXJhbSBzaG93Q2xlYXJlZCAtIFdoZXRoZXIgdG8gaW5jbHVkZSBjbGVhcmVkIGFsYXJtcyBpbiB0aGUgY291bnQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIGB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlYC5cbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbGwgYWxhcm0gY291bnRzIGhhdmUgYmVlbiBmZXRjaGVkLFxuICAgKiBvciByZWplY3RzIHdpdGggYW4gZXJyb3IgaWYgdGhlIG9wZXJhdGlvbiBmYWlscy5cbiAgICogQHRocm93cyBXaWxsIHRocm93IGFuIGVycm9yIGlmIGFueSBvZiB0aGUgYWxhcm0gY291bnQgZmV0Y2hpbmcgcHJvbWlzZXMgcmVqZWN0LlxuICAgKi9cbiAgYXN5bmMgdXBkYXRlQWxhcm1zQ291bnQoc2hvd0NsZWFyZWQgPSB0aGlzLmN1cnJlbnRTaG93Q2xlYXJlZFZhbHVlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5jb3VudExvYWRpbmcgPSB0cnVlO1xuICAgIGNvbnN0IGFsYXJtRmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyIHwgbnVsbCA9IHRoaXMuY29udGV4dFNvdXJjZUlkXG4gICAgICA/IHtcbiAgICAgICAgICBzb3VyY2U6IHRoaXMuY29udGV4dFNvdXJjZUlkLFxuICAgICAgICAgIHdpdGhTb3VyY2VBc3NldHM6IHRydWUsXG4gICAgICAgICAgd2l0aFNvdXJjZURldmljZXM6IHRydWVcbiAgICAgICAgfVxuICAgICAgOiBudWxsO1xuICAgIGNvbnN0IG9ic2VydmFibGVzOiBSZWNvcmQ8U2V2ZXJpdHlUeXBlLCBPYnNlcnZhYmxlPG51bWJlcj4+ID0gdGhpcy5zZXZlcml0aWVzTGlzdC5yZWR1Y2UoXG4gICAgICAoYWNjLCBzZXZlcml0eSkgPT4ge1xuICAgICAgICBhY2Nbc2V2ZXJpdHldID0gZnJvbShcbiAgICAgICAgICB0aGlzLmFsYXJtc1ZpZXdTZXJ2aWNlLmdldEFsYXJtc0NvdW50QnlTZXZlcml0eShzZXZlcml0eSwgc2hvd0NsZWFyZWQsIGFsYXJtRmlsdGVyKVxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgQ1JJVElDQUw6IG51bGwsXG4gICAgICAgIE1BSk9SOiBudWxsLFxuICAgICAgICBNSU5PUjogbnVsbCxcbiAgICAgICAgV0FSTklORzogbnVsbFxuICAgICAgfVxuICAgICk7XG4gICAgZm9ya0pvaW4ob2JzZXJ2YWJsZXMpXG4gICAgICAucGlwZShcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICAgIHRoaXMuYWxhcm1Db3VudHMgPSB7fSBhcyBBbGFybUNvdW50O1xuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgIH0pLFxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiAodGhpcy5jb3VudExvYWRpbmcgPSBmYWxzZSkpXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKChhbGFybUNvdW50czogQWxhcm1Db3VudCkgPT4gKHRoaXMuYWxhcm1Db3VudHMgPSBhbGFybUNvdW50cykpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVGb3JtVmFsdWVXaXRoQ2hhbmdlc1N0cmVhbSgpOiBPYnNlcnZhYmxlPFNldmVyaXR5RmlsdGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybUdyb3VwLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Hcm91cC52YWx1ZSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB0cmFja0NoZWNrYm94U3RhdGVXaXRoRm9ybUNoYW5nZXMoKTogdm9pZCB7XG4gICAgY29uc3QgZm9ybVZhbHVlJCA9IHRoaXMuY3JlYXRlRm9ybVZhbHVlV2l0aENoYW5nZXNTdHJlYW0oKTtcbiAgICB0aGlzLmlzRWFjaENoZWNrYm94U2VsZWN0ZWQkID0gdGhpcy5jcmVhdGVBbGxTZWxlY3RlZFN0cmVhbShmb3JtVmFsdWUkKTtcbiAgICB0aGlzLmlzSW5kZXRlcm1pbmF0ZSQgPSB0aGlzLmNyZWF0ZUluZGV0ZXJtaW5hdGVTdHJlYW0oZm9ybVZhbHVlJCk7XG4gICAgdGhpcy50cmFja0FsbENoZWNrYm94ZXNEaXNhYmxlZChmb3JtVmFsdWUkKTtcbiAgICB0aGlzLnNob3VsZERpc2FibGVBcHBseUJ1dHRvbiQgPSB0aGlzLmNyZWF0ZURpc2FibGVBcHBseUJ1dHRvblN0cmVhbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVBbGxTZWxlY3RlZFN0cmVhbShmb3JtVmFsdWUkOiBPYnNlcnZhYmxlPFNldmVyaXR5RmlsdGVyPik6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBmb3JtVmFsdWUkLnBpcGUobWFwKHNldmVyaXRpZXMgPT4gT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzKS5ldmVyeShCb29sZWFuKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVJbmRldGVybWluYXRlU3RyZWFtKGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8U2V2ZXJpdHlGaWx0ZXI+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGZvcm1WYWx1ZSQucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgc2V2ZXJpdGllcyA9PlxuICAgICAgICAgIE9iamVjdC52YWx1ZXMoc2V2ZXJpdGllcykuc29tZShCb29sZWFuKSAmJiAhT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzKS5ldmVyeShCb29sZWFuKVxuICAgICAgKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHRyYWNrQWxsQ2hlY2tib3hlc0Rpc2FibGVkKGZvcm1WYWx1ZSQ6IE9ic2VydmFibGU8U2V2ZXJpdHlGaWx0ZXI+KTogdm9pZCB7XG4gICAgZm9ybVZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHNldmVyaXRpZXMgPT4ge1xuICAgICAgY29uc3QgYXJlQWxsRGlzYWJsZWQgPSBPYmplY3QudmFsdWVzKHNldmVyaXRpZXMpLmV2ZXJ5KHZhbHVlID0+ICF2YWx1ZSk7XG4gICAgICB0aGlzLmlzTm9uZUNoZWNrYm94U2VsZWN0ZWQkLm5leHQoYXJlQWxsRGlzYWJsZWQpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEaXNhYmxlQXBwbHlCdXR0b25TdHJlYW0oKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW3RoaXMuaXNOb25lQ2hlY2tib3hTZWxlY3RlZCQsIHRoaXMuc2V2ZXJpdGllc1RvdWNoZWQkXSkucGlwZShcbiAgICAgIG1hcChcbiAgICAgICAgKFthbGxDaGVja2JveGVzQXJlRGlzYWJsZWQsIHNldmVyaXRpZXNUb3VjaGVkXSkgPT5cbiAgICAgICAgICBhbGxDaGVja2JveGVzQXJlRGlzYWJsZWQgfHwgIXNldmVyaXRpZXNUb3VjaGVkXG4gICAgICApXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlQ2hpcHNBbmREZWZhdWx0VmFsdWVzKCk6IHZvaWQge1xuICAgIGNvbnN0IHNldmVyaXR5RmlsdGVyID0gdGhpcy5mb3JtR3JvdXA7XG4gICAgY29uc3Qgc2V2ZWVyaXR5VmFsdWVzID0gc2V2ZXJpdHlGaWx0ZXIudmFsdWU7XG5cbiAgICB0aGlzLmNoaXBzID0gT2JqZWN0LmtleXMoc2V2ZWVyaXR5VmFsdWVzKS5maWx0ZXIoa2V5ID0+IHNldmVlcml0eVZhbHVlc1trZXldKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgICBjb25zdCBhbGxDaGlwc1JlbW92ZWQgPSB0aGlzLmNoaXBzLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoYWxsQ2hpcHNSZW1vdmVkKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gREVGQVVMVF9TRVZFUklUWV9WQUxVRVM7XG4gICAgICBzZXZlcml0eUZpbHRlci5zZXRWYWx1ZShkZWZhdWx0VmFsdWVzKTtcbiAgICAgIHRoaXMuY2hpcHMgPSBPYmplY3Qua2V5cyhkZWZhdWx0VmFsdWVzKSBhcyBTZXZlcml0eVR5cGVbXTtcbiAgICB9XG4gIH1cbn1cbiIsIjxmb3JtXG4gIGNsYXNzPVwiZC1mbGV4IGEtaS1jZW50ZXJcIlxuICBbZm9ybUdyb3VwXT1cImZvcm1Hcm91cFwiXG4+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICB0aXRsZT1cInt7ICdGaWx0ZXIgYnkgc2V2ZXJpdHknIHwgdHJhbnNsYXRlIH19XCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZml0LXdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1mbGV4IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCIgc3R5bGU9XCJtaW4td2lkdGg6IDEwNHB4O1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hpcHMubGVuZ3RoICE9PSBzZXZlcml0aWVzTGlzdC5sZW5ndGg7IGVsc2UgYWxsQWxhcm1zXCI+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgIGNsYXNzPVwidGFnIHRhZy0taW5mbyBjaGlwXCJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCBjaGlwIG9mIGNoaXBzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImRlc2VsZWN0Q2hpcChjaGlwKTsgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8aVxuICAgICAgICAgICAgICBjbGFzcz1cInN0YXR1cyBzdHJva2VkLWljb24gaWNvbi0xMlwiXG4gICAgICAgICAgICAgIFtjOHlJY29uXT1cImNoaXAgfCBBbGFybVNldmVyaXR5VG9JY29uXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2hpcCB8IGxvd2VyY2FzZVwiXG4gICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAge3sgU0VWRVJJVFlfTEFCRUxTW2NoaXBdIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxBbGFybXM+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCIgdGl0bGU9XCJ7eyAnQWxsIHNldmVyaXRpZXMnIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICB7eyAnQWxsIHNldmVyaXRpZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAtYnRuIGlucHV0LWdyb3VwLWJ0bi0tbGFzdFwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgdGl0bGU9XCJ7eyBjaGlwcyB8IEFsYXJtU2V2ZXJpdGllc1RvVGl0bGUgfX1cIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tZmlsdGVyXCJcbiAgICAgICAgICBkcm9wZG93blRvZ2dsZVxuICAgICAgICAgIChjbGljayk9XCJyZXNldEZvcm0oKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDx1bFxuICAgICAgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtYWN0aW9uLWJhclwiXG4gICAgICAqZHJvcGRvd25NZW51XG4gICAgPlxuICAgICAgPGxpIGNsYXNzPVwicC1sLTE2IHAtci0xNiBwLXQtNCBwLWItNCBkLWZsZXggYS1pLWNlbnRlciBzdGlja3ktdG9wIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgPGxhYmVsXG4gICAgICAgICAgY2xhc3M9XCJjOHktY2hlY2tib3ggZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAgIFt0aXRsZV09XCInQWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICBkYXRhLWN5PVwiYzh5LWFsYXJtLWZpbHRlci0tYWxsXCJcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJhbGxDaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAgICAgW25nTW9kZWxdPVwiaXNFYWNoQ2hlY2tib3hTZWxlY3RlZCQgfCBhc3luY1wiXG4gICAgICAgICAgICBbaW5kZXRlcm1pbmF0ZV09XCJpc0luZGV0ZXJtaW5hdGUkIHwgYXN5bmNcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm1hcmtTZXZlcml0aWVzQXNUb3VjaGVkKClcIlxuICAgICAgICAgIC8+XG4gICAgICAgICAgPHNwYW4+PC9zcGFuPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cInN0YXR1cyBzdHJva2VkLWljb24gbS1sLTggaWNvbi0yMFwiXG4gICAgICAgICAgICBbYzh5SWNvbl09XCInYmVsbCdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJtLWwtOFwiPnt7ICdBbGwnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgPC9saT5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTQgcC1iLTQgZC1mbGV4IGEtaS1jZW50ZXJcIlxuICAgICAgICAqbmdGb3I9XCJsZXQgc2V2ZXJpdHkgb2Ygc2V2ZXJpdGllc0xpc3RcIlxuICAgICAgPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImM4eS1jaGVja2JveCBkLWZsZXggYS1pLWNlbnRlclwiXG4gICAgICAgICAgW3RpdGxlXT1cIlNFVkVSSVRZX0xBQkVMU1tzZXZlcml0eV0gfCB0cmFuc2xhdGVcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2F0dHIuZGF0YS1jeV09XCInYzh5LWFsYXJtLWZpbHRlci0tJyArIHNldmVyaXR5XCJcbiAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwic2V2ZXJpdHlcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cInNldmVyaXR5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJtYXJrU2V2ZXJpdGllc0FzVG91Y2hlZCgpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8aVxuICAgICAgICAgICAgY2xhc3M9XCJzdGF0dXMgc3Ryb2tlZC1pY29uIG0tbC04IGljb24tMjBcIlxuICAgICAgICAgICAgW2M4eUljb25dPVwic2V2ZXJpdHkgfCBBbGFybVNldmVyaXR5VG9JY29uXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInNldmVyaXR5IHwgbG93ZXJjYXNlXCJcbiAgICAgICAgICA+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwibS1sLThcIj57eyBTRVZFUklUWV9MQUJFTFNbc2V2ZXJpdHldIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L2xhYmVsPlxuICAgICAgICA8IS0tIGJhZGdlIC0tPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3M9XCJiYWRnZSBiYWRnZS1pbmZvIG0tbC1hdXRvXCJcbiAgICAgICAgICAqbmdJZj1cImFsYXJtQ291bnRzW3NldmVyaXR5XSB8fCBhbGFybUNvdW50c1tzZXZlcml0eV0gPT09IDBcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlcbiAgICAgICAgICAgIGNsYXNzPVwiaWNvbi1zcGluXCJcbiAgICAgICAgICAgIFtjOHlJY29uXT1cIidjaXJjbGUtby1ub3RjaCdcIlxuICAgICAgICAgICAgKm5nSWY9XCJjb3VudExvYWRpbmdcIlxuICAgICAgICAgID48L2k+XG4gICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICpuZ0lmPVwiIWNvdW50TG9hZGluZ1wiXG4gICAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cInNldmVyaXR5ICsgJy1iYWRnZSdcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7IGFsYXJtQ291bnRzW3NldmVyaXR5XSA8IDk5ID8gYWxhcm1Db3VudHNbc2V2ZXJpdHldIDogJzk5KycgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICAgIDxsaSBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTQgcC1iLTQgZC1mbGV4IGEtaS1jZW50ZXIgc2VwYXJhdG9yLXRvcFwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICBjbGFzcz1cImM4eS1zd2l0Y2hcIlxuICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiJ1Nob3cgY2xlYXJlZCBhbGFybXMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidjOHktYWxhcm1zLWZpbHRlci0tY2xlYXJlZCdcIlxuICAgICAgICA+XG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgI3Nob3dDbGVhcmVkQ2hlY2tib3hcbiAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNob3dDbGVhcmVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJtYXJrU2V2ZXJpdGllc0FzVG91Y2hlZCgpOyB1cGRhdGVBbGFybXNDb3VudChzaG93Q2xlYXJlZENoZWNrYm94LmNoZWNrZWQpXCJcbiAgICAgICAgICAvPlxuICAgICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCJcbiAgICAgICAgICAgIHRpdGxlPVwie3sgJ1Nob3cgY2xlYXJlZCBhbGFybXMnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7eyAnU2hvdyBjbGVhcmVkIGFsYXJtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgIDwvbGFiZWw+XG4gICAgICA8L2xpPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiBkLWZsZXggc3RpY2t5LWJvdHRvbSBzZXBhcmF0b3ItdG9wXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICBbYXR0ci5kYXRhLWN5XT1cIidjOHktYWxhcm1zLWZpbHRlci0tYXBwbHknXCJcbiAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc20gZmxleC1ncm93XCJcbiAgICAgICAgICB0aXRsZT1cInt7ICdBcHBseScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoZmFsc2UpOyBjbG9zZURyb3Bkb3duKClcIlxuICAgICAgICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlQXBwbHlCdXR0b24kIHwgYXN5bmNcIlxuICAgICAgICA+XG4gICAgICAgICAge3sgJ0FwcGx5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvdWw+XG4gIDwvZGl2PlxuPC9mb3JtPlxuIl19
@@ -118,14 +118,14 @@ export class AlarmsTypeFilterComponent {
118
118
  return [...alarmFilters, ...missingFilters];
119
119
  }
120
120
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, deps: [{ token: i1.FormBuilder }, { token: i2.AlarmEventSelectorService }, { token: i3.ActivatedRoute }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
121
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <label class=\"m-b-0 flex-no-shrink\">\n {{ 'Alarm types' | translate }}\n </label>\n <div\n class=\"dropdown\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n {{ 'All alarm types' | translate }}\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: 100%; min-width: 250px\"\n *dropdownMenu\n >\n <c8y-alarm-event-selection-list\n [title]=\"'Alarm type filter' | translate\"\n [attr.name]=\"formControlName\"\n [config]=\"{\n title: 'Alarm type filter' | translate,\n allowChangingContext: false\n }\"\n [inline]=\"true\"\n [hideSource]=\"true\"\n [addButtonLabel]=\"'Manage alarm types' | translate\"\n [canEdit]=\"false\"\n [canDragAndDrop]=\"false\"\n [canRemove]=\"false\"\n [timelineType]=\"'ALARM'\"\n [activeToggleAsSwitch]=\"false\"\n [formControlName]=\"formControlName\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"'There is no alarm to filter. You can still add a custom alarm.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-alarm-event-selection-list>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i6.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i6.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "config"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
121
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: AlarmsTypeFilterComponent, selector: "c8y-alarms-type-filter", inputs: { alarms: "alarms" }, outputs: { onFilterChanged: "onFilterChanged" }, usesOnChanges: true, ngImport: i0, template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width:unset; min-width: 250px\"\n *dropdownMenu\n >\n <c8y-alarm-event-selection-list\n [title]=\"'Alarm type filter' | translate\"\n [attr.name]=\"formControlName\"\n [config]=\"{\n title: 'Alarm type filter' | translate,\n allowChangingContext: false\n }\"\n [inline]=\"true\"\n [hideSource]=\"true\"\n [addButtonLabel]=\"'Manage alarm types' | translate\"\n [canEdit]=\"false\"\n [canDragAndDrop]=\"false\"\n [canRemove]=\"false\"\n [timelineType]=\"'ALARM'\"\n [activeToggleAsSwitch]=\"false\"\n [formControlName]=\"formControlName\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"'There is no alarm to filter. You can still add a custom alarm.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-alarm-event-selection-list>\n </div>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i4.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i5.BsDropdownMenuDirective, selector: "[bsDropdownMenu],[dropdownMenu]", exportAs: ["bs-dropdown-menu"] }, { kind: "directive", type: i5.BsDropdownToggleDirective, selector: "[bsDropdownToggle],[dropdownToggle]", exportAs: ["bs-dropdown-toggle"] }, { kind: "directive", type: i5.BsDropdownDirective, selector: "[bsDropdown], [dropdown]", inputs: ["placement", "triggers", "container", "dropup", "autoClose", "isAnimated", "insideClick", "isDisabled", "isOpen"], outputs: ["isOpenChange", "onShown", "onHidden"], exportAs: ["bs-dropdown"] }, { kind: "component", type: i6.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i6.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i7.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i2.AlarmEventSelectionListComponent, selector: "c8y-alarm-event-selection-list", inputs: ["timelineType", "canRemove", "canEdit", "canDragAndDrop", "title", "addButtonLabel", "hideSource", "inline", "activeToggleAsSwitch", "omitProperties", "config"] }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] }); }
122
122
  }
123
123
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmsTypeFilterComponent, decorators: [{
124
124
  type: Component,
125
- args: [{ selector: 'c8y-alarms-type-filter', template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <label class=\"m-b-0 flex-no-shrink\">\n {{ 'Alarm types' | translate }}\n </label>\n <div\n class=\"dropdown\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n {{ 'All alarm types' | translate }}\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width: 100%; min-width: 250px\"\n *dropdownMenu\n >\n <c8y-alarm-event-selection-list\n [title]=\"'Alarm type filter' | translate\"\n [attr.name]=\"formControlName\"\n [config]=\"{\n title: 'Alarm type filter' | translate,\n allowChangingContext: false\n }\"\n [inline]=\"true\"\n [hideSource]=\"true\"\n [addButtonLabel]=\"'Manage alarm types' | translate\"\n [canEdit]=\"false\"\n [canDragAndDrop]=\"false\"\n [canRemove]=\"false\"\n [timelineType]=\"'ALARM'\"\n [activeToggleAsSwitch]=\"false\"\n [formControlName]=\"formControlName\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"'There is no alarm to filter. You can still add a custom alarm.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-alarm-event-selection-list>\n </div>\n </div>\n</form>\n" }]
125
+ args: [{ selector: 'c8y-alarms-type-filter', template: "<form\n class=\"d-flex a-i-center\"\n [formGroup]=\"formGroup\"\n>\n <div\n class=\"dropdown\"\n title=\"{{ 'Filter by Alarm types' | translate }}\"\n dropdown\n #filtersDropdown=\"bs-dropdown\"\n [cdkTrapFocus]=\"filtersDropdown.isOpen\"\n [insideClick]=\"true\"\n >\n <div class=\"input-group fit-w\">\n <div class=\"form-control d-flex a-i-center inner-scroll\">\n <ng-container *ngIf=\"activeFilters.length > 0; else allTypes\">\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let filter of activeFilters\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ 'Remove' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); deselect(filter)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': filter.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n {{ filter.filters.type }}\n </span>\n </ng-container>\n <ng-template #allTypes>\n <span class=\"text-nowrap\">\n {{ 'All alarm types' | translate }}\n </span>\n </ng-template>\n </div>\n <div class=\"input-group-btn input-group-btn--last text-center\">\n <button\n class=\"btn-default btn\"\n [title]=\"'Clear filters' | translate\"\n *ngIf=\"activeFilters.length\"\n (click)=\"deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n <button\n class=\"btn-default btn btn--caret\"\n [title]=\"'Alarm types' | translate\"\n data-cy=\"c8y-alarm-type-filter\"\n dropdownToggle\n >\n <i class=\"caret\"></i>\n </button>\n </div>\n </div>\n <div\n class=\"dropdown-menu dropdown-menu-action-bar\"\n style=\"max-width:unset; min-width: 250px\"\n *dropdownMenu\n >\n <c8y-alarm-event-selection-list\n [title]=\"'Alarm type filter' | translate\"\n [attr.name]=\"formControlName\"\n [config]=\"{\n title: 'Alarm type filter' | translate,\n allowChangingContext: false\n }\"\n [inline]=\"true\"\n [hideSource]=\"true\"\n [addButtonLabel]=\"'Manage alarm types' | translate\"\n [canEdit]=\"false\"\n [canDragAndDrop]=\"false\"\n [canRemove]=\"false\"\n [timelineType]=\"'ALARM'\"\n [activeToggleAsSwitch]=\"false\"\n [formControlName]=\"formControlName\"\n >\n <c8y-ui-empty-state\n class=\"p-t-8\"\n icon=\"c8y-alarm\"\n [title]=\"'No alarm found' | translate\"\n [subtitle]=\"'There is no alarm to filter. You can still add a custom alarm.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </c8y-alarm-event-selection-list>\n </div>\n </div>\n</form>\n" }]
126
126
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.AlarmEventSelectorService }, { type: i3.ActivatedRoute }, { type: i3.Router }], propDecorators: { alarms: [{
127
127
  type: Input
128
128
  }], onFilterChanged: [{
129
129
  type: Output
130
130
  }] } });
131
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQWdCLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBTWhELE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1UsV0FBd0IsRUFDeEIseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWM7UUFIZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbkJ4QixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQztRQUMzQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUV2QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsQ0FBQyxJ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SSxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN4RCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxJQUFJO2FBQ0gsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBaEpVLHlCQUF5QjtrR0FBekIseUJBQXlCLGtLQ3JCdEMseW1HQWlHQTs7MkZENUVhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MEtBS2xDLE1BQU07c0JBREwsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFsYXJtLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsYXJtRGV0YWlscywgQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBhY3RpdmVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKVxuICBvbkZpbHRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBbGFybURldGFpbHNbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2xOYW1lID0gJ2FsYXJtcyc7XG4gIHJlYWRvbmx5IHF1ZXJ5UGFyYW1OYW1lID0gJ3R5cGVGaWx0ZXInO1xuXG4gIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIFt0aGlzLmZvcm1Db250cm9sTmFtZV06IG5ldyBGb3JtQ29udHJvbChbXSlcbiAgfSk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKGFsYXJtcywgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkgPT5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtRmlsdGVycylcbiAgICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSlcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKGFsYXJtRmlsdGVycykpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFsYXJtcyAmJiBjaGFuZ2VzLmFsYXJtcy5jdXJyZW50VmFsdWUgJiYgdGhpcy5hY3RpdmVGaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRBbGFybXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IGFsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmZpbHRlcnMudHlwZSA9PT0gdHlwZS5maWx0ZXJzLnR5cGUpO1xuICAgIGFsYXJtRmlsdGVyLl9fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtcyk7XG4gIH1cblxuICBkZXNlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGxGaWx0ZXJzID0gYWxhcm1zLm1hcChhbGFybSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hbGFybSxcbiAgICAgICAgX19hY3RpdmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkucGF0Y2hWYWx1ZShhbGxGaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgIGFsYXJtRmlsdGVyczogQWxhcm1EZXRhaWxzW10sXG4gICAgZmlsdGVyVHlwZXNRdWVyeTogc3RyaW5nXG4gICk6IEFsYXJtRGV0YWlsc1tdIHtcbiAgICBpZiAoIWZpbHRlclR5cGVzUXVlcnkpIHtcbiAgICAgIHJldHVybiBhbGFybUZpbHRlcnM7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gZmlsdGVyVHlwZXNRdWVyeS5zcGxpdCgnLCcpO1xuICAgIHJldHVybiBhbGFybUZpbHRlcnMubWFwKChhbGFybTogQWxhcm1EZXRhaWxzKSA9PiAoe1xuICAgICAgLi4uYWxhcm0sXG4gICAgICBfX2FjdGl2ZTogdHlwZXMuaW5jbHVkZXMoYWxhcm0uZmlsdGVycy50eXBlKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJDaGFuZ2UoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkge1xuICAgIGNvbnN0IGFjdGl2ZXMgPSBhbGFybUZpbHRlcnMuZmlsdGVyKChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZSk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMucXVlcnlQYXJhbTtcbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzID0gYWN0aXZlcztcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVGaWx0ZXJzKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZUZpbHRlcjogbmV3UXVlcnlQYXJhbSB8fCBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gbmV3UXVlcnlQYXJhbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0QWxhcm1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQodGhpcy5xdWVyeVBhcmFtTmFtZSk7XG4gICAgY29uc3QgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyA9XG4gICAgICBhd2FpdCB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuZ2V0VW5pcXVlQWxhcm1zT25seSh0aGlzLmFsYXJtcy5kYXRhKTtcbiAgICBjb25zdCBhbGFybVR5cGVzV2l0aE1pc3NpbmdBbmRDdXN0b20gPSBhd2FpdCB0aGlzLmFkZE1pc3NpbmdBbGFybVR5cGVzRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLmdldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIGFsYXJtVHlwZXNXaXRoTWlzc2luZ0FuZEN1c3RvbSxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpLnBhdGNoVmFsdWUoc2VsZWN0YWJsZUFsYXJtVHlwZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNaXNzaW5nQWxhcm1UeXBlc0Zyb21RdWVyeVBhcmFtcyhcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogc3RyaW5nXG4gICk6IFByb21pc2U8QWxhcm1EZXRhaWxzW10+IHtcbiAgICBpZiAoIXF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIGFsYXJtRmlsdGVycztcbiAgICB9XG4gICAgY29uc3QgdHlwZXMgPSBxdWVyeVBhcmFtZXRlcnMuc3BsaXQoJywnKTtcbiAgICBjb25zdCBtaXNzaW5nRmlsdGVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHlwZXNcbiAgICAgICAgLmZpbHRlcih0eXBlID0+ICFhbGFybUZpbHRlcnMuZmluZChhbGFybUZpbHRlciA9PiBhbGFybUZpbHRlci5maWx0ZXJzLnR5cGUgPT09IHR5cGUpKVxuICAgICAgICAubWFwKHR5cGUgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuY3JlYXRlSXRlbSgnQUxBUk0nLCB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc291cmNlOiBudWxsXG4gICAgICAgICAgfSBhcyBJQWxhcm0pO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5hbGFybUZpbHRlcnMsIC4uLm1pc3NpbmdGaWx0ZXJzXTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPGxhYmVsIGNsYXNzPVwibS1iLTAgZmxleC1uby1zaHJpbmtcIj5cbiAgICB7eyAnQWxhcm0gdHlwZXMnIHwgdHJhbnNsYXRlIH19XG4gIDwvbGFiZWw+XG4gIDxkaXZcbiAgICBjbGFzcz1cImRyb3Bkb3duXCJcbiAgICBkcm9wZG93blxuICAgICNmaWx0ZXJzRHJvcGRvd249XCJicy1kcm9wZG93blwiXG4gICAgW2Nka1RyYXBGb2N1c109XCJmaWx0ZXJzRHJvcGRvd24uaXNPcGVuXCJcbiAgICBbaW5zaWRlQ2xpY2tdPVwidHJ1ZVwiXG4gID5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZml0LXdcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZC1mbGV4IGEtaS1jZW50ZXIgaW5uZXItc2Nyb2xsXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhY3RpdmVGaWx0ZXJzLmxlbmd0aCA+IDA7IGVsc2UgYWxsVHlwZXNcIj5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJ0YWcgdGFnLS1pbmZvIGNoaXBcIlxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IGZpbHRlciBvZiBhY3RpdmVGaWx0ZXJzXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi14cyBidG4tY2xlYW4gdGV4dC0xMFwiXG4gICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1JlbW92ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgZGVzZWxlY3QoZmlsdGVyKVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxpIGM4eUljb249XCJ0aW1lc1wiPjwvaT5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsXCJcbiAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyAnYmFja2dyb3VuZC1jb2xvcic6IGZpbHRlci5jb2xvciB9XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICBjbGFzcz1cInN0cm9rZWQtaWNvblwiXG4gICAgICAgICAgICAgICAgYzh5SWNvbj1cImJlbGxcIlxuICAgICAgICAgICAgICA+PC9pPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAge3sgZmlsdGVyLmZpbHRlcnMudHlwZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjYWxsVHlwZXM+XG4gICAgICAgICAge3sgJ0FsbCBhbGFybSB0eXBlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6IDEwMCU7IG1pbi13aWR0aDogMjUwcHhcIlxuICAgICAgKmRyb3Bkb3duTWVudVxuICAgID5cbiAgICAgIDxjOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlIGZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cImZvcm1Db250cm9sTmFtZVwiXG4gICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgIHRpdGxlOiAnQWxhcm0gdHlwZSBmaWx0ZXInIHwgdHJhbnNsYXRlLFxuICAgICAgICAgIGFsbG93Q2hhbmdpbmdDb250ZXh0OiBmYWxzZVxuICAgICAgICB9XCJcbiAgICAgICAgW2lubGluZV09XCJ0cnVlXCJcbiAgICAgICAgW2hpZGVTb3VyY2VdPVwidHJ1ZVwiXG4gICAgICAgIFthZGRCdXR0b25MYWJlbF09XCInTWFuYWdlIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjYW5FZGl0XT1cImZhbHNlXCJcbiAgICAgICAgW2NhbkRyYWdBbmREcm9wXT1cImZhbHNlXCJcbiAgICAgICAgW2NhblJlbW92ZV09XCJmYWxzZVwiXG4gICAgICAgIFt0aW1lbGluZVR5cGVdPVwiJ0FMQVJNJ1wiXG4gICAgICAgIFthY3RpdmVUb2dnbGVBc1N3aXRjaF09XCJmYWxzZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZm9ybUNvbnRyb2xOYW1lXCJcbiAgICAgID5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIGNsYXNzPVwicC10LThcIlxuICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gYWxhcm0gZm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3VidGl0bGVdPVwiJ1RoZXJlIGlzIG5vIGFsYXJtIHRvIGZpbHRlci4gWW91IGNhbiBzdGlsbCBhZGQgYSBjdXN0b20gYWxhcm0uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvYzh5LWFsYXJtLWV2ZW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
131
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdHlwZS1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm1zL2FsYXJtcy10eXBlLWZpbHRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUV6RCxPQUFPLEVBQWdCLHlCQUF5QixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7O0FBTWhELE1BQU0sT0FBTyx5QkFBeUI7SUFtQnBDLFlBQ1UsV0FBd0IsRUFDeEIseUJBQW9ELEVBQ3BELGNBQThCLEVBQzlCLE1BQWM7UUFIZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4Qiw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBQ3BELG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBbkJ4QixrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFHbkMsb0JBQWUsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUUxRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQztRQUMzQixtQkFBYyxHQUFHLFlBQVksQ0FBQztRQUV2QyxjQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDakMsQ0FBQyxJ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SSxDQUFDLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUN4RCxJQUFJO2dCQUNKLE1BQU0sRUFBRSxJQUFJO2FBQ0gsQ0FBQyxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQ0wsQ0FBQztRQUNGLE9BQU8sQ0FBQyxHQUFHLFlBQVksRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO0lBQzlDLENBQUM7OEdBaEpVLHlCQUF5QjtrR0FBekIseUJBQXlCLGtLQ3JCdEMsb29HQWlHQTs7MkZENUVhLHlCQUF5QjtrQkFKckMsU0FBUzsrQkFDRSx3QkFBd0I7MEtBS2xDLE1BQU07c0JBREwsS0FBSztnQkFNTixlQUFlO3NCQURkLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFsYXJtLCBJUmVzdWx0TGlzdCB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsYXJtRGV0YWlscywgQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYWxhcm0tZXZlbnQtc2VsZWN0b3InO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hbGFybXMtdHlwZS1maWx0ZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm1zLXR5cGUtZmlsdGVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBBbGFybXNUeXBlRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpXG4gIGFsYXJtczogSVJlc3VsdExpc3Q8SUFsYXJtPjtcblxuICBhY3RpdmVGaWx0ZXJzOiBBbGFybURldGFpbHNbXSA9IFtdO1xuXG4gIEBPdXRwdXQoKVxuICBvbkZpbHRlckNoYW5nZWQ6IEV2ZW50RW1pdHRlcjxBbGFybURldGFpbHNbXT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgcmVhZG9ubHkgZm9ybUNvbnRyb2xOYW1lID0gJ2FsYXJtcyc7XG4gIHJlYWRvbmx5IHF1ZXJ5UGFyYW1OYW1lID0gJ3R5cGVGaWx0ZXInO1xuXG4gIGZvcm1Hcm91cCA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe1xuICAgIFt0aGlzLmZvcm1Db250cm9sTmFtZV06IG5ldyBGb3JtQ29udHJvbChbXSlcbiAgfSk7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gIHByaXZhdGUgcXVlcnlQYXJhbSA9ICcnO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSxcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnF1ZXJ5UGFyYW1zXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKHBhcmFtcyA9PiB7XG4gICAgICAgICAgY29uc3QgYWxhcm1zOiBBbGFybURldGFpbHNbXSA9IHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkudmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKGFsYXJtcywgcGFyYW1zW3RoaXMucXVlcnlQYXJhbU5hbWVdKTtcbiAgICAgICAgfSksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkgPT5cbiAgICAgICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtRmlsdGVycylcbiAgICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cFxuICAgICAgLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSlcbiAgICAgIC52YWx1ZUNoYW5nZXMucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKChhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKSA9PiB0aGlzLmFwcGx5RmlsdGVyQ2hhbmdlKGFsYXJtRmlsdGVycykpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLmFsYXJtcyAmJiBjaGFuZ2VzLmFsYXJtcy5jdXJyZW50VmFsdWUgJiYgdGhpcy5hY3RpdmVGaWx0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5zZXRBbGFybXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBkZXNlbGVjdCh0eXBlOiBBbGFybURldGFpbHMpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGFybUZpbHRlciA9IGFsYXJtcy5maW5kKGFsYXJtID0+IGFsYXJtLmZpbHRlcnMudHlwZSA9PT0gdHlwZS5maWx0ZXJzLnR5cGUpO1xuICAgIGFsYXJtRmlsdGVyLl9fYWN0aXZlID0gZmFsc2U7XG4gICAgdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS5wYXRjaFZhbHVlKGFsYXJtcyk7XG4gIH1cblxuICBkZXNlbGVjdEFsbCgpIHtcbiAgICBjb25zdCBhbGFybXM6IEFsYXJtRGV0YWlsc1tdID0gdGhpcy5mb3JtR3JvdXAuZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKS52YWx1ZTtcbiAgICBjb25zdCBhbGxGaWx0ZXJzID0gYWxhcm1zLm1hcChhbGFybSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hbGFybSxcbiAgICAgICAgX19hY3RpdmU6IGZhbHNlXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybUdyb3VwLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkucGF0Y2hWYWx1ZShhbGxGaWx0ZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlQWxhcm1GaWx0ZXJzRnJvbVF1ZXJ5UGFyYW1ldGVyKFxuICAgIGFsYXJtRmlsdGVyczogQWxhcm1EZXRhaWxzW10sXG4gICAgZmlsdGVyVHlwZXNRdWVyeTogc3RyaW5nXG4gICk6IEFsYXJtRGV0YWlsc1tdIHtcbiAgICBpZiAoIWZpbHRlclR5cGVzUXVlcnkpIHtcbiAgICAgIHJldHVybiBhbGFybUZpbHRlcnM7XG4gICAgfVxuICAgIGNvbnN0IHR5cGVzID0gZmlsdGVyVHlwZXNRdWVyeS5zcGxpdCgnLCcpO1xuICAgIHJldHVybiBhbGFybUZpbHRlcnMubWFwKChhbGFybTogQWxhcm1EZXRhaWxzKSA9PiAoe1xuICAgICAgLi4uYWxhcm0sXG4gICAgICBfX2FjdGl2ZTogdHlwZXMuaW5jbHVkZXMoYWxhcm0uZmlsdGVycy50eXBlKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJDaGFuZ2UoYWxhcm1GaWx0ZXJzOiBBbGFybURldGFpbHNbXSkge1xuICAgIGNvbnN0IGFjdGl2ZXMgPSBhbGFybUZpbHRlcnMuZmlsdGVyKChhbGFybUZpbHRlcjogQWxhcm1EZXRhaWxzKSA9PiBhbGFybUZpbHRlci5fX2FjdGl2ZSk7XG4gICAgY29uc3QgbmV3UXVlcnlQYXJhbSA9IHRoaXMuZ2V0UXVlcnlQYXJhbXMoYWN0aXZlcyk7XG4gICAgY29uc3QgaGFzQ2hhbmdlZCA9IG5ld1F1ZXJ5UGFyYW0gIT09IHRoaXMucXVlcnlQYXJhbTtcbiAgICBpZiAoaGFzQ2hhbmdlZCkge1xuICAgICAgdGhpcy5hY3RpdmVGaWx0ZXJzID0gYWN0aXZlcztcbiAgICAgIHRoaXMub25GaWx0ZXJDaGFuZ2VkLmVtaXQodGhpcy5hY3RpdmVGaWx0ZXJzKTtcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgdHlwZUZpbHRlcjogbmV3UXVlcnlQYXJhbSB8fCBudWxsXG4gICAgICAgIH0sXG4gICAgICAgIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6ICdtZXJnZSdcbiAgICAgIH0pO1xuICAgICAgdGhpcy5xdWVyeVBhcmFtID0gbmV3UXVlcnlQYXJhbTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldFF1ZXJ5UGFyYW1zKGFjdGl2ZUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYWN0aXZlRmlsdGVycy5tYXAoZmlsdGVyID0+IGZpbHRlci5maWx0ZXJzLnR5cGUpLmpvaW4oJywnKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0QWxhcm1zKCkge1xuICAgIGNvbnN0IHF1ZXJ5UGFyYW1ldGVycyA9IHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucXVlcnlQYXJhbU1hcC5nZXQodGhpcy5xdWVyeVBhcmFtTmFtZSk7XG4gICAgY29uc3QgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyA9XG4gICAgICBhd2FpdCB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuZ2V0VW5pcXVlQWxhcm1zT25seSh0aGlzLmFsYXJtcy5kYXRhKTtcbiAgICBjb25zdCBhbGFybVR5cGVzV2l0aE1pc3NpbmdBbmRDdXN0b20gPSBhd2FpdCB0aGlzLmFkZE1pc3NpbmdBbGFybVR5cGVzRnJvbVF1ZXJ5UGFyYW1zKFxuICAgICAgYWxhcm1UeXBlc0Zyb21DdXJyZW50bHlTaG93bkFsYXJtcyxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG4gICAgY29uc3Qgc2VsZWN0YWJsZUFsYXJtVHlwZXMgPSB0aGlzLmdldEFjdGl2ZUFsYXJtRmlsdGVyc0Zyb21RdWVyeVBhcmFtZXRlcihcbiAgICAgIGFsYXJtVHlwZXNXaXRoTWlzc2luZ0FuZEN1c3RvbSxcbiAgICAgIHF1ZXJ5UGFyYW1ldGVyc1xuICAgICk7XG5cbiAgICB0aGlzLmZvcm1Hcm91cC5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpLnBhdGNoVmFsdWUoc2VsZWN0YWJsZUFsYXJtVHlwZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBhZGRNaXNzaW5nQWxhcm1UeXBlc0Zyb21RdWVyeVBhcmFtcyhcbiAgICBhbGFybUZpbHRlcnM6IEFsYXJtRGV0YWlsc1tdLFxuICAgIHF1ZXJ5UGFyYW1ldGVyczogc3RyaW5nXG4gICk6IFByb21pc2U8QWxhcm1EZXRhaWxzW10+IHtcbiAgICBpZiAoIXF1ZXJ5UGFyYW1ldGVycykge1xuICAgICAgcmV0dXJuIGFsYXJtRmlsdGVycztcbiAgICB9XG4gICAgY29uc3QgdHlwZXMgPSBxdWVyeVBhcmFtZXRlcnMuc3BsaXQoJywnKTtcbiAgICBjb25zdCBtaXNzaW5nRmlsdGVycyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgdHlwZXNcbiAgICAgICAgLmZpbHRlcih0eXBlID0+ICFhbGFybUZpbHRlcnMuZmluZChhbGFybUZpbHRlciA9PiBhbGFybUZpbHRlci5maWx0ZXJzLnR5cGUgPT09IHR5cGUpKVxuICAgICAgICAubWFwKHR5cGUgPT4ge1xuICAgICAgICAgIHJldHVybiB0aGlzLmFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UuY3JlYXRlSXRlbSgnQUxBUk0nLCB7XG4gICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgc291cmNlOiBudWxsXG4gICAgICAgICAgfSBhcyBJQWxhcm0pO1xuICAgICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIFsuLi5hbGFybUZpbHRlcnMsIC4uLm1pc3NpbmdGaWx0ZXJzXTtcbiAgfVxufVxuIiwiPGZvcm1cbiAgY2xhc3M9XCJkLWZsZXggYS1pLWNlbnRlclwiXG4gIFtmb3JtR3JvdXBdPVwiZm9ybUdyb3VwXCJcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwiZHJvcGRvd25cIlxuICAgIHRpdGxlPVwie3sgJ0ZpbHRlciBieSBBbGFybSB0eXBlcycgfCB0cmFuc2xhdGUgfX1cIlxuICAgIGRyb3Bkb3duXG4gICAgI2ZpbHRlcnNEcm9wZG93bj1cImJzLWRyb3Bkb3duXCJcbiAgICBbY2RrVHJhcEZvY3VzXT1cImZpbHRlcnNEcm9wZG93bi5pc09wZW5cIlxuICAgIFtpbnNpZGVDbGlja109XCJ0cnVlXCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBmaXQtd1wiPlxuICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY29udHJvbCBkLWZsZXggYS1pLWNlbnRlciBpbm5lci1zY3JvbGxcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoID4gMDsgZWxzZSBhbGxUeXBlc1wiPlxuICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICBjbGFzcz1cInRhZyB0YWctLWluZm8gY2hpcFwiXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgZmlsdGVyIG9mIGFjdGl2ZUZpbHRlcnNcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXhzIGJ0bi1jbGVhbiB0ZXh0LTEwXCJcbiAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnUmVtb3ZlJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBkZXNlbGVjdChmaWx0ZXIpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cInRpbWVzXCI+PC9pPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBjbGFzcz1cImNpcmNsZS1pY29uLXdyYXBwZXIgY2lyY2xlLWljb24td3JhcHBlci0tc21hbGxcIlxuICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogZmlsdGVyLmNvbG9yIH1cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgICBjOHlJY29uPVwiYmVsbFwiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICB7eyBmaWx0ZXIuZmlsdGVycy50eXBlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNhbGxUeXBlcz5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICB7eyAnQWxsIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLWJ0biBpbnB1dC1ncm91cC1idG4tLWxhc3QgdGV4dC1jZW50ZXJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIGNsYXNzPVwiYnRuLWRlZmF1bHQgYnRuXCJcbiAgICAgICAgICBbdGl0bGVdPVwiJ0NsZWFyIGZpbHRlcnMnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAqbmdJZj1cImFjdGl2ZUZpbHRlcnMubGVuZ3RoXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGVzZWxlY3RBbGwoKVwiXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjOHlJY29uPVwidGltZXNcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgY2xhc3M9XCJidG4tZGVmYXVsdCBidG4gYnRuLS1jYXJldFwiXG4gICAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlcycgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIGRhdGEtY3k9XCJjOHktYWxhcm0tdHlwZS1maWx0ZXJcIlxuICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgID5cbiAgICAgICAgICA8aSBjbGFzcz1cImNhcmV0XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXZcbiAgICAgIGNsYXNzPVwiZHJvcGRvd24tbWVudSBkcm9wZG93bi1tZW51LWFjdGlvbi1iYXJcIlxuICAgICAgc3R5bGU9XCJtYXgtd2lkdGg6dW5zZXQ7IG1pbi13aWR0aDogMjUwcHhcIlxuICAgICAgKmRyb3Bkb3duTWVudVxuICAgID5cbiAgICAgIDxjOHktYWxhcm0tZXZlbnQtc2VsZWN0aW9uLWxpc3RcbiAgICAgICAgW3RpdGxlXT1cIidBbGFybSB0eXBlIGZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICBbYXR0ci5uYW1lXT1cImZvcm1Db250cm9sTmFtZVwiXG4gICAgICAgIFtjb25maWddPVwie1xuICAgICAgICAgIHRpdGxlOiAnQWxhcm0gdHlwZSBmaWx0ZXInIHwgdHJhbnNsYXRlLFxuICAgICAgICAgIGFsbG93Q2hhbmdpbmdDb250ZXh0OiBmYWxzZVxuICAgICAgICB9XCJcbiAgICAgICAgW2lubGluZV09XCJ0cnVlXCJcbiAgICAgICAgW2hpZGVTb3VyY2VdPVwidHJ1ZVwiXG4gICAgICAgIFthZGRCdXR0b25MYWJlbF09XCInTWFuYWdlIGFsYXJtIHR5cGVzJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgIFtjYW5FZGl0XT1cImZhbHNlXCJcbiAgICAgICAgW2NhbkRyYWdBbmREcm9wXT1cImZhbHNlXCJcbiAgICAgICAgW2NhblJlbW92ZV09XCJmYWxzZVwiXG4gICAgICAgIFt0aW1lbGluZVR5cGVdPVwiJ0FMQVJNJ1wiXG4gICAgICAgIFthY3RpdmVUb2dnbGVBc1N3aXRjaF09XCJmYWxzZVwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwiZm9ybUNvbnRyb2xOYW1lXCJcbiAgICAgID5cbiAgICAgICAgPGM4eS11aS1lbXB0eS1zdGF0ZVxuICAgICAgICAgIGNsYXNzPVwicC10LThcIlxuICAgICAgICAgIGljb249XCJjOHktYWxhcm1cIlxuICAgICAgICAgIFt0aXRsZV09XCInTm8gYWxhcm0gZm91bmQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbc3VidGl0bGVdPVwiJ1RoZXJlIGlzIG5vIGFsYXJtIHRvIGZpbHRlci4gWW91IGNhbiBzdGlsbCBhZGQgYSBjdXN0b20gYWxhcm0uJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgIDwvYzh5LWFsYXJtLWV2ZW50LXNlbGVjdGlvbi1saXN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZm9ybT5cbiJdfQ==
@@ -40,11 +40,12 @@ export class AlarmsViewService {
40
40
  *
41
41
  * @param severities an array of severities to filter the alarms.
42
42
  * @param showCleared flag indicating whether to show cleared alarms. Defaults to false.
43
+ * @param selectedDates an array of two dates to filter alarms by creation and last update dates.
43
44
  * @param filter additional query filters for retrieving alarms.
44
45
  *
45
46
  * @returns A promise that resolves to a list of alarms satisfying the specified filters.
46
47
  */
47
- retrieveAlarms(severities, showCleared = false, filter) {
48
+ retrieveFilteredAlarms(severities, showCleared = false, selectedDates, filter) {
48
49
  const severitiesQuery = this.getSeverityQueryParameter(severities);
49
50
  const statusesQuery = this.getStatusQueryParameter(showCleared);
50
51
  const _filter = {
@@ -52,10 +53,22 @@ export class AlarmsViewService {
52
53
  withTotalPages: true,
53
54
  ...(severitiesQuery && { severity: severitiesQuery }),
54
55
  ...(statusesQuery && { status: statusesQuery }),
56
+ ...(selectedDates && {
57
+ lastUpdatedFrom: selectedDates[0].toISOString(),
58
+ createdTo: selectedDates[1].toISOString()
59
+ }),
55
60
  ...filter
56
61
  };
57
62
  return this.alarmService.list(_filter);
58
63
  }
64
+ retrieveAlarmsByDate(dates) {
65
+ return this.alarmService.list({
66
+ lastUpdatedFrom: dates[0].toISOString(),
67
+ createdTo: dates[1].toISOString(),
68
+ pageSize: 50,
69
+ withTotalPages: true
70
+ });
71
+ }
59
72
  /**
60
73
  * Updates the state to enable or disable intervals.
61
74
  * @param value - A boolean value to indicate whether to enable intervals.
@@ -228,4 +241,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
228
241
  providedIn: 'root'
229
242
  }]
230
243
  }], ctorParameters: () => [{ type: i1.AlarmService }, { type: i2.OptionsService }] });
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXZpZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLFlBQVksRUFDWixtQkFBbUIsRUFFbkIsV0FBVyxFQUtYLFFBQVEsRUFDVCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBR0wsY0FBYyxFQUNkLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFN0M7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBVzVCLFlBQ1UsWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBWi9CLDJCQUFzQixHQUE2QixtQkFBbUIsQ0FBQztRQUN2RSwyQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDaEMsNEJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsbUNBQThCLEdBQUcsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFHN0Ysc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVF0QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtC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LEVBQUUsS0FBYztRQUNoRSxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0sseUJBQXlCLENBQUMsVUFBMEI7UUFDMUQsSUFBSSxDQUFDLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzNDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkQsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSyx1QkFBdUIsQ0FBQyxXQUFvQjtRQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFzQixDQUFDO1FBQ3ZFLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVztZQUNsQyxDQUFDLENBQUMsUUFBUTtZQUNWLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7OEdBL09VLGlCQUFpQjtrSEFBakIsaUJBQWlCLGNBRmhCLE1BQU07OzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBbGFybVF1ZXJ5RmlsdGVyLFxuICBBbGFybVNlcnZpY2UsXG4gIEFMQVJNX1NUQVRVU19MQUJFTFMsXG4gIEFsYXJtU3RhdHVzVHlwZSxcbiAgQWxhcm1TdGF0dXMsXG4gIElBbGFybSxcbiAgSVJlc3VsdExpc3QsXG4gIFNldmVyaXR5RmlsdGVyLFxuICBTZXZlcml0eVR5cGUsXG4gIFNldmVyaXR5XG59IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uT3B0aW9ucyxcbiAgQ29udGV4dERhdGEsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBWaWV3Q29udGV4dCxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQUxBUk1TX1BBVEggfSBmcm9tICcuL2FsYXJtcy5tb2RlbCc7XG5cbi8qKlxuICogU2VydmljZSBmb3IgbWFuYWdpbmcgYW5kIHJldHJpZXZpbmcgYWxhcm1zIGRhdGEgd2l0aGluIHRoZSBhbGFybXMgdmlldy5cbiAqXG4gKiBUaGUgYEFsYXJtc1ZpZXdTZXJ2aWNlYCBwcm92aWRlcyBmdW5jdGlvbmFsaXR5IHRvIGludGVyYWN0IHdpdGggYWxhcm1zLFxuICogaW5jbHVkaW5nIGZpbHRlcmluZywgY291bnRpbmcsIGFuZCB0cmFuc2xhdGlvbi1yZWxhdGVkIG9wZXJhdGlvbnMgaW4gYW4gYWxhcm1zIHZpZXcuXG4gKlxuICogVGhpcyBzZXJ2aWNlIHJlbGllcyBvbiB0aGUgYEFsYXJtU2VydmljZWAgZm9yIGZldGNoaW5nIGFsYXJtIGRhdGEgYW5kIHRoZSBgT3B0aW9uc1NlcnZpY2VgXG4gKiBmb3IgY29uZmlndXJpbmcgYWxhcm1zIHZpZXcgb3B0aW9ucy5cbiAqL1xuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQWxhcm1zVmlld1NlcnZpY2Uge1xuICByZWFkb25seSBBTEFSTV9SRUZSRVNIX1RZUEVfS0VZOiBrZXlvZiBBcHBsaWNhdGlvbk9wdGlvbnMgPSAnYWxhcm1zUmVmcmVzaFR5cGUnO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFID0gMzBfMDAwO1xuICByZWFkb25seSBERUZBVUxUX0lOVEVSVkFMX1ZBTFVFUyA9IFs1XzAwMCwgMTBfMDAwLCAxNV8wMDAsIDMwXzAwMCwgNjBfMDAwXTtcbiAgcmVhZG9ubHkgUkVBTFRJTUVfVVBEQVRFX0FMQVJNU19NRVNTQUdFID0gZ2V0dGV4dCgnVGhlIGxpc3Qgd2FzIHVwZGF0ZWQsIGNsaWNrIHRvIHJlZnJlc2guJyk7XG5cbiAgaXNJbnRlcnZhbEVuYWJsZWQkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICByZWxvYWRBbGFybXNMaXN0JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBfaXNJbnRlcnZhbEVuYWJsZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFsYXJtU2VydmljZTogQWxhcm1TZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIGlmICh0aGlzLmlzSW50ZXJ2YWxSZWZyZXNoKCkpIHtcbiAgICAgIHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICAgIHRoaXMuaXNJbnRlcnZhbEVuYWJsZWQkID0gdGhpcy5faXNJbnRlcnZhbEVuYWJsZWQuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEVtaXRzIGEgc3ViamVjdCB0byBpbml0aWFsaXplIHRoZSBhbGFybXMgcmVsb2FkaW5nLlxuICAgKi9cbiAgdXBkYXRlQWxhcm1MaXN0KCk6IHZvaWQge1xuICAgIHRoaXMucmVsb2FkQWxhcm1zTGlzdCQubmV4dCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlcyBhIGxpc3Qgb2YgYWxhcm1zIGZpbHRlcmVkIGJ5IHNwZWNpZmllZCBzZXZlcml0aWVzIGFuZCBvdGhlciBvcHRpb25hbCBxdWVyeSBmaWx0ZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdGllcyBhbiBhcnJheSBvZiBzZXZlcml0aWVzIHRvIGZpbHRlciB0aGUgYWxhcm1zLlxuICAgKiBAcGFyYW0gc2hvd0NsZWFyZWQgZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyBjbGVhcmVkIGFsYXJtcy4gRGVmYXVsdHMgdG8gZmFsc2UuXG4gICAqIEBwYXJhbSBmaWx0ZXIgYWRkaXRpb25hbCBxdWVyeSBmaWx0ZXJzIGZvciByZXRyaWV2aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBsaXN0IG9mIGFsYXJtcyBzYXRpc2Z5aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVycy5cbiAgICovXG4gIHJldHJpZXZlQWxhcm1zKFxuICAgIHNldmVyaXRpZXM6IFNldmVyaXR5VHlwZVtdLFxuICAgIHNob3dDbGVhcmVkID0gZmFsc2UsXG4gICAgZmlsdGVyPzogQWxhcm1RdWVyeUZpbHRlclxuICApOiBQcm9taXNlPElSZXN1bHRMaXN0PElBbGFybT4+IHtcbiAgICBjb25zdCBzZXZlcml0aWVzUXVlcnkgPSB0aGlzLmdldFNldmVyaXR5UXVlcnlQYXJhbWV0ZXIoc2V2ZXJpdGllcyk7XG4gICAgY29uc3Qgc3RhdHVzZXNRdWVyeSA9IHRoaXMuZ2V0U3RhdHVzUXVlcnlQYXJhbWV0ZXIoc2hvd0NsZWFyZWQpO1xuXG4gICAgY29uc3QgX2ZpbHRlcjogQWxhcm1RdWVyeUZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlLFxuICAgICAgLi4uKHNldmVyaXRpZXNRdWVyeSAmJiB7IHNldmVyaXR5OiBzZXZlcml0aWVzUXVlcnkgfSksXG4gICAgICAuLi4oc3RhdHVzZXNRdWVyeSAmJiB7IHN0YXR1czogc3RhdHVzZXNRdWVyeSB9KSxcbiAgICAgIC4uLmZpbHRlclxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuYWxhcm1TZXJ2aWNlLmxpc3QoX2ZpbHRlcik7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgd2hldGhlciB0byBlbmFibGUgaW50ZXJ2YWxzLlxuICAgKi9cbiAgdXBkYXRlSW50ZXJ2YWxTdGF0ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkPy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjb3VudCBvZiBhbGFybXMgZmlsdGVyZWQgYnkgc2V2ZXJpdHkgYW5kIGNsZWFyYW5jZSBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBsZXZlbCB0byBmaWx0ZXIgYnkgKGUuZy4sIENSSVRJQ0FMLCBNQUpPUiwgZXRjLikuXG4gICAqIEBwYXJhbSBzaG93Q2xlYXJlZCAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgY2xlYXJlZCBhbGFybXMgaW4gdGhlIGNvdW50LlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXIgY3JpdGVyaWEgZm9yIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlciBvZiBhbGFybXMgdGhhdCBtYXRjaCB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxhcm1zQ291bnRCeVNldmVyaXR5KFxuICAgIHNldmVyaXR5OiBTZXZlcml0eVR5cGUsXG4gICAgc2hvd0NsZWFyZWQ6IGJvb2xlYW4sXG4gICAgZmlsdGVyPzogQWxhcm1RdWVyeUZpbHRlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHN0YXR1c2VzUXVlcnkgPSB0aGlzLmdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkKTtcbiAgICBjb25zdCBfZmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyID0ge1xuICAgICAgLi4uKHNldmVyaXR5ICYmIHsgc2V2ZXJpdHk6IHNldmVyaXR5IH0pLFxuICAgICAgLi4uKHN0YXR1c2VzUXVlcnkgJiYgeyBzdGF0dXM6IHN0YXR1c2VzUXVlcnkgfSksXG4gICAgICAuLi5maWx0ZXJcbiAgICB9O1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UuY291bnQoX2ZpbHRlcik7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYWxhcm1zIHJlZnJlc2ggdHlwZSBmcm9tIHRoZSBPcHRpb25zU2VydmljZVxuICAgKiBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IGlzIHNldCB0byBcImludGVydmFsXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm1zIHJlZnJlc2ggdHlwZSBpcyBcImludGVydmFsLFwiIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCh0aGlzLkFMQVJNX1JFRlJFU0hfVFlQRV9LRVksICdpbnRlcnZhbCcpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2ludGVydmFsJztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHNlbGVjdGVkIHNldmVyaXRpZXMgYmFzZWQgb24gdGhlIG5ldyBzZXZlcml0eSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eVVwZGF0ZXMgLSBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdXBkYXRlcyB0byBlYWNoIHNldmVyaXR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHVwZGF0ZWQgc2VsZWN0ZWQgc2V2ZXJpdGllcy5cbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkU2V2ZXJpdGllcyhzZXZlcml0eVVwZGF0ZXM6IFNldmVyaXR5RmlsdGVyKTogU2V2ZXJpdHlUeXBlW10ge1xuICAgIHJldHVybiAoT2JqZWN0LmtleXMoc2V2ZXJpdHlVcGRhdGVzKSBhcyBTZXZlcml0eVR5cGVbXSlcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHNldmVyaXR5VXBkYXRlc1trZXldKVxuICAgICAgLm1hcChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgYXMgU2V2ZXJpdHlUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGFjdGl2ZSBhbGFybXMgb2YgdGhlIHNlbGVjdGVkIHNldmVyaXRpZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYWN0aXZlIGFsYXJtcyBmb3IgdGhlIGdpdmVuIGxpc3Qgb2Ygc2V2ZXJpdGllcyBieSBtYWtpbmcgYnVsayB1cGRhdGUgY2FsbHMuIElmIG5vIHNldmVyaXRpZXMgYXJlIHNlbGVjdGVkLCBpdCBkZWZhdWx0cyB0byB1c2luZyBhbGwgYXZhaWxhYmxlIHNldmVyaXRpZXMuXG4gICAqIEl0IHdvcmtzIGJ5IHNlbmRpbmcgYSBzZXJpZXMgb2YgdXBkYXRlIHJlcXVlc3RzIGZvciBlYWNoIHNldmVyaXR5IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGluZGljYXRpbmcgaWYgYWxsIGFsYXJtcyB3ZXJlIHJlc29sdmVkIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRTZXZlcml0aWVzIEFuIGFycmF5IG9mIHNldmVyaXRpZXMgdG8gYmUgY2xlYXJlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgc2V2ZXJpdGllcyB3aWxsIGJlIGNsZWFyZWQuXG4gICAqIEBwYXJhbSBzb3VyY2VJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBhbGFybXMgdG8gYmUgY2xlYXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgd2l0aCBhIGZsYWcgYHJlc29sdmVkSW1tZWRpYXRlbHlgLiBUaGUgZmxhZyBpcyB0cnVlIGlmIGFsbCBhbGFybXMgZm9yIGFsbCBzZWxlY3RlZCBzZXZlcml0aWVzIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXZlcml0aWVzVG9DbGVhcjogU2V2ZXJpdHlUeXBlW10gPSBbU2V2ZXJpdHkuTUFKT1IsIFNldmVyaXR5Lk1JTk9SXTtcbiAgICpcbiAgICogY2xlYXJBbGxBY3RpdmVBbGFybXMoc2V2ZXJpdGllc1RvQ2xlYXIpLnRoZW4oKHsgcmVzb2x2ZWRJbW1lZGlhdGVseSB9KSA9PiB7XG4gICAqICAgaWYgKHJlc29sdmVkSW1tZWRpYXRlbHkpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgc2VsZWN0ZWQgYWxhcm1zIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHkuJyk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdTb21lIGFsYXJtcyBjb3VsZCBub3QgYmUgY2xlYXJlZC4nKTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogKipOb3RlKipcbiAgICogLSBUaGUgbWV0aG9kIHVzZXMgdGhlIGBhbGFybVNlcnZpY2UudXBkYXRlQnVsa2AgZm9yIGVhY2ggc2V2ZXJpdHkgdG8gY2xlYXIgdGhlIGFjdGl2ZSBhbGFybXMuXG4gICAqIC0gSXQgbWF5IGZldGNoIHRoZSBgc291cmNlSWRgIGJhc2VkIG9uIHRoZSB2aWV3IChpZiBhcHBsaWNhYmxlKSBhbmQgaW5jbHVkZSBpdCBhcyBhIHF1ZXJ5IHBhcmFtZXRlciBpbiB0aGUgdXBkYXRlIGNhbGxzLlxuICAgKiAtIFRoZSBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSBidXQgdGhlIHJldHVybmVkIFByb21pc2UgbmVlZHMgdG8gaGF2ZSBhIGB0aGVuYCBvciBgY2F0Y2hgIG1ldGhvZCBjYWxsIHRvIGhhbmRsZSB0aGUgcmVzdWx0IG9yIGVycm9yIHJlc3BlY3RpdmVseS5cbiAgICogLSBVc2VzIGBQcm9taXNlLmFsbGAgdG8gd2FpdCBmb3IgYWxsIHVwZGF0ZSByZXF1ZXN0cyB0byBjb21wbGV0ZSBiZWZvcmUgcmVzb2x2aW5nIHRoZSBmaW5hbCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGVhckFsbEFjdGl2ZUFsYXJtcyhcbiAgICBzZWxlY3RlZFNldmVyaXRpZXM6IFNldmVyaXR5VHlwZVtdLFxuICAgIHNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTx7IHJlc29sdmVkSW1tZWRpYXRlbHk6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHNldmVyaXRpZXNUb1VwZGF0ZSA9IHNlbGVjdGVkU2V2ZXJpdGllcyB8fCBTZXZlcml0eTtcblxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzVG9VcGRhdGUpLm1hcCgoc2V2ZXJpdHk6IFNldmVyaXR5VHlwZSkgPT4ge1xuICAgICAgY29uc3QgY29tbW9uUGFyYW1zID0geyByZXNvbHZlZDogZmFsc2UsIHNldmVyaXR5IH07XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBzb3VyY2VJZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmNvbW1vblBhcmFtcyxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlSWQsXG4gICAgICAgICAgICB3aXRoU291cmNlQXNzZXRzOiB0cnVlLFxuICAgICAgICAgICAgd2l0aFNvdXJjZURldmljZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogY29tbW9uUGFyYW1zO1xuXG4gICAgICByZXR1cm4gdGhpcy5hbGFybVNlcnZpY2UudXBkYXRlQnVsayh7IHN0YXR1czogQWxhcm1TdGF0dXMuQ0xFQVJFRCB9LCBwYXJhbWV0ZXJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRJbW1lZGlhdGVseTogcmVzcG9uc2VzLmV2ZXJ5KHJlcyA9PiByZXMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbnRleHQgZGF0YS5cbiAgICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgZnJvbS5cbiAgICogQHBhcmFtIGFsYXJtIFRoZSBhbGFybSB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBsaW5rIHRvIGJlIHVzZWQgYXMgYW4gdXJsIG5hdmlnYXRpb24uXG4gICAqL1xuICBnZXRSb3V0ZXJMaW5rKGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nIHtcbiAgICBsZXQgZGV0YWlsVXJsID0gYC8ke0FMQVJNU19QQVRIfWA7XG4gICAgaWYgKGFsYXJtKSB7XG4gICAgICBkZXRhaWxVcmwgPSBgLyR7QUxBUk1TX1BBVEh9LyR7YWxhcm0uaWR9YDtcbiAgICB9XG4gICAgaWYgKCFjb250ZXh0RGF0YSkge1xuICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbnRleHREYXRhLmNvbnRleHQpIHtcbiAgICAgIGNhc2UgVmlld0NvbnRleHQuRGV2aWNlOlxuICAgICAgICByZXR1cm4gYC9kZXZpY2UvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgY2FzZSBWaWV3Q29udGV4dC5Hcm91cDpcbiAgICAgICAgcmV0dXJuIGAvZ3JvdXAvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBhcnJheSBuYXZpZ2F0aW9uLlxuICAgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBmcm9tLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIGFsYXJtIHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIGxpbmsgdG8gYmUgdXNlZCBhcyBhIHJvdXRlci5uYXZpZ2F0aW9uLlxuICAgKi9cbiAgZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFJvdXRlckxpbmsoY29udGV4dERhdGEsIGFsYXJtKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdmFsdWUgZm9yIHF1ZXJ5IHBhcmFtZXRlciBmb3IgZmlsdGVyaW5nIGFsYXJtcyBieSBzZXZlcml0eSBiYXNlZCBvbiBhcnJheSBvZiBzZWxlY3RlZCBzZXZlcml0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdGllcyAtIEFuIGFycmF5IG9mIGFsYXJtIHNldmVyaXR5IHR5cGVzIHRvIGluY2x1ZGUgaW4gdGhlIGZpbHRlci5cbiAgICogSWYgdGhlIGFycmF5IGlzIGVtcHR5IG9yIHVuZGVmaW5lZCwgbm8gc2V2ZXJpdHkgZmlsdGVyIHdpbGwgYmUgYXBwbGllZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIG9mIHNlbGVjdGVkIGFsYXJtIHNldmVyaXRpZXMsXG4gICAqIG9yIG51bGwgaWYgbm8gc2V2ZXJpdGllcyBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICBwcml2YXRlIGdldFNldmVyaXR5UXVlcnlQYXJhbWV0ZXIoc2V2ZXJpdGllczogU2V2ZXJpdHlUeXBlW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXNldmVyaXRpZXMgfHwgc2V2ZXJpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNldmVyaXRpZXMubGVuZ3RoID09PSBPYmplY3Qua2V5cyhTZXZlcml0eSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldmVyaXRpZXMuam9pbignLCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgcXVlcnkgcGFyYW1ldGVyIGZvciBmaWx0ZXJpbmcgYWxhcm1zIGJ5IHN0YXR1c2VzIGJhc2VkIG9uIHNob3dDbGVhcmVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNob3dDbGVhcmVkIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIGNsZWFyZWQgc3RhdHVzZXMuXG4gICAqIElmIHRydWUsIGFsbCBzdGF0dXNlcywgaW5jbHVkaW5nICdDTEVBUkVEJywgd2lsbCBiZSBpbmNsdWRlZDsgaWYgZmFsc2UsICdDTEVBUkVEJyB3aWxsIGJlIGV4Y2x1ZGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2YgYWxhcm0gc3RhdHVzZXMuXG4gICAqL1xuICBwcml2YXRlIGdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXNlcyA9IE9iamVjdC5rZXlzKEFMQVJNX1NUQVRVU19MQUJFTFMpIGFzIEFsYXJtU3RhdHVzVHlwZVtdO1xuICAgIGNvbnN0IGZpbHRlcmVkU3RhdHVzZXMgPSBzaG93Q2xlYXJlZFxuICAgICAgPyBzdGF0dXNlc1xuICAgICAgOiBzdGF0dXNlcy5maWx0ZXIoc3RhdHVzID0+IHN0YXR1cyAhPT0gJ0NMRUFSRUQnKTtcbiAgICByZXR1cm4gZmlsdGVyZWRTdGF0dXNlcy5qb2luKCcsJyk7XG4gIH1cbn1cbiJdfQ==
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm1zLXZpZXcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2FsYXJtcy9hbGFybXMtdmlldy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUVMLFlBQVksRUFDWixtQkFBbUIsRUFFbkIsV0FBVyxFQUtYLFFBQVEsRUFDVCxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUwsY0FBYyxFQUNkLFdBQVcsRUFDWCxPQUFPLEVBQ1IsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZUFBZSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7QUFFN0M7Ozs7Ozs7O0dBUUc7QUFJSCxNQUFNLE9BQU8saUJBQWlCO0lBVzVCLFlBQ1UsWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBWi9CLDJCQUFzQixHQUE2QixtQkFBbUIsQ0FBQztRQUN2RSwyQkFBc0IsR0FBRyxNQUFNLENBQUM7UUFDaEMsNEJBQXVCLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDbEUsbUNBQThCLEdBQUcsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUM7UUFHN0Ysc0JBQWlCLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVF0QyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxFQUFFLENBQUM7WUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksZUFBZSxDQUFVLElBQUksQ0FBQyxDQUFDO1lBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtC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TUFBTSxnQkFBZ0IsR0FBRyxXQUFXO1lBQ2xDLENBQUMsQ0FBQyxRQUFRO1lBQ1YsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDLENBQUM7UUFDcEQsT0FBTyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEMsQ0FBQzs4R0E5UFUsaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs7MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEFsYXJtUXVlcnlGaWx0ZXIsXG4gIEFsYXJtU2VydmljZSxcbiAgQUxBUk1fU1RBVFVTX0xBQkVMUyxcbiAgQWxhcm1TdGF0dXNUeXBlLFxuICBBbGFybVN0YXR1cyxcbiAgSUFsYXJtLFxuICBJUmVzdWx0TGlzdCxcbiAgU2V2ZXJpdHlGaWx0ZXIsXG4gIFNldmVyaXR5VHlwZSxcbiAgU2V2ZXJpdHlcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25PcHRpb25zLFxuICBDb250ZXh0RGF0YSxcbiAgRGF0ZVRpbWVDb250ZXh0LFxuICBPcHRpb25zU2VydmljZSxcbiAgVmlld0NvbnRleHQsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFMQVJNU19QQVRIIH0gZnJvbSAnLi9hbGFybXMubW9kZWwnO1xuXG4vKipcbiAqIFNlcnZpY2UgZm9yIG1hbmFnaW5nIGFuZCByZXRyaWV2aW5nIGFsYXJtcyBkYXRhIHdpdGhpbiB0aGUgYWxhcm1zIHZpZXcuXG4gKlxuICogVGhlIGBBbGFybXNWaWV3U2VydmljZWAgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byBpbnRlcmFjdCB3aXRoIGFsYXJtcyxcbiAqIGluY2x1ZGluZyBmaWx0ZXJpbmcsIGNvdW50aW5nLCBhbmQgdHJhbnNsYXRpb24tcmVsYXRlZCBvcGVyYXRpb25zIGluIGFuIGFsYXJtcyB2aWV3LlxuICpcbiAqIFRoaXMgc2VydmljZSByZWxpZXMgb24gdGhlIGBBbGFybVNlcnZpY2VgIGZvciBmZXRjaGluZyBhbGFybSBkYXRhIGFuZCB0aGUgYE9wdGlvbnNTZXJ2aWNlYFxuICogZm9yIGNvbmZpZ3VyaW5nIGFsYXJtcyB2aWV3IG9wdGlvbnMuXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFsYXJtc1ZpZXdTZXJ2aWNlIHtcbiAgcmVhZG9ubHkgQUxBUk1fUkVGUkVTSF9UWVBFX0tFWToga2V5b2YgQXBwbGljYXRpb25PcHRpb25zID0gJ2FsYXJtc1JlZnJlc2hUeXBlJztcbiAgcmVhZG9ubHkgREVGQVVMVF9JTlRFUlZBTF9WQUxVRSA9IDMwXzAwMDtcbiAgcmVhZG9ubHkgREVGQVVMVF9JTlRFUlZBTF9WQUxVRVMgPSBbNV8wMDAsIDEwXzAwMCwgMTVfMDAwLCAzMF8wMDAsIDYwXzAwMF07XG4gIHJlYWRvbmx5IFJFQUxUSU1FX1VQREFURV9BTEFSTVNfTUVTU0FHRSA9IGdldHRleHQoJ1RoZSBsaXN0IHdhcyB1cGRhdGVkLCBjbGljayB0byByZWZyZXNoLicpO1xuXG4gIGlzSW50ZXJ2YWxFbmFibGVkJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcmVsb2FkQWxhcm1zTGlzdCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2lzSW50ZXJ2YWxFbmFibGVkOiBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhbGFybVNlcnZpY2U6IEFsYXJtU2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZVxuICApIHtcbiAgICBpZiAodGhpcy5pc0ludGVydmFsUmVmcmVzaCgpKSB7XG4gICAgICB0aGlzLl9pc0ludGVydmFsRW5hYmxlZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgICB0aGlzLmlzSW50ZXJ2YWxFbmFibGVkJCA9IHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyBhIHN1YmplY3QgdG8gaW5pdGlhbGl6ZSB0aGUgYWxhcm1zIHJlbG9hZGluZy5cbiAgICovXG4gIHVwZGF0ZUFsYXJtTGlzdCgpOiB2b2lkIHtcbiAgICB0aGlzLnJlbG9hZEFsYXJtc0xpc3QkLm5leHQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgYSBsaXN0IG9mIGFsYXJtcyBmaWx0ZXJlZCBieSBzcGVjaWZpZWQgc2V2ZXJpdGllcyBhbmQgb3RoZXIgb3B0aW9uYWwgcXVlcnkgZmlsdGVycy5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXRpZXMgYW4gYXJyYXkgb2Ygc2V2ZXJpdGllcyB0byBmaWx0ZXIgdGhlIGFsYXJtcy5cbiAgICogQHBhcmFtIHNob3dDbGVhcmVkIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgY2xlYXJlZCBhbGFybXMuIERlZmF1bHRzIHRvIGZhbHNlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWREYXRlcyBhbiBhcnJheSBvZiB0d28gZGF0ZXMgdG8gZmlsdGVyIGFsYXJtcyBieSBjcmVhdGlvbiBhbmQgbGFzdCB1cGRhdGUgZGF0ZXMuXG4gICAqIEBwYXJhbSBmaWx0ZXIgYWRkaXRpb25hbCBxdWVyeSBmaWx0ZXJzIGZvciByZXRyaWV2aW5nIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBsaXN0IG9mIGFsYXJtcyBzYXRpc2Z5aW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVycy5cbiAgICovXG4gIHJldHJpZXZlRmlsdGVyZWRBbGFybXMoXG4gICAgc2V2ZXJpdGllczogU2V2ZXJpdHlUeXBlW10sXG4gICAgc2hvd0NsZWFyZWQgPSBmYWxzZSxcbiAgICBzZWxlY3RlZERhdGVzPzogW0RhdGUsIERhdGVdLFxuICAgIGZpbHRlcj86IEFsYXJtUXVlcnlGaWx0ZXJcbiAgKTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQWxhcm0+PiB7XG4gICAgY29uc3Qgc2V2ZXJpdGllc1F1ZXJ5ID0gdGhpcy5nZXRTZXZlcml0eVF1ZXJ5UGFyYW1ldGVyKHNldmVyaXRpZXMpO1xuICAgIGNvbnN0IHN0YXR1c2VzUXVlcnkgPSB0aGlzLmdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkKTtcblxuICAgIGNvbnN0IF9maWx0ZXI6IEFsYXJtUXVlcnlGaWx0ZXIgPSB7XG4gICAgICBwYWdlU2l6ZTogNTAsXG4gICAgICB3aXRoVG90YWxQYWdlczogdHJ1ZSxcbiAgICAgIC4uLihzZXZlcml0aWVzUXVlcnkgJiYgeyBzZXZlcml0eTogc2V2ZXJpdGllc1F1ZXJ5IH0pLFxuICAgICAgLi4uKHN0YXR1c2VzUXVlcnkgJiYgeyBzdGF0dXM6IHN0YXR1c2VzUXVlcnkgfSksXG4gICAgICAuLi4oc2VsZWN0ZWREYXRlcyAmJiB7XG4gICAgICAgIGxhc3RVcGRhdGVkRnJvbTogc2VsZWN0ZWREYXRlc1swXS50b0lTT1N0cmluZygpLFxuICAgICAgICBjcmVhdGVkVG86IHNlbGVjdGVkRGF0ZXNbMV0udG9JU09TdHJpbmcoKVxuICAgICAgfSksXG4gICAgICAuLi5maWx0ZXJcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFsYXJtU2VydmljZS5saXN0KF9maWx0ZXIpO1xuICB9XG5cbiAgcmV0cmlldmVBbGFybXNCeURhdGUoZGF0ZXM6IERhdGVUaW1lQ29udGV4dCkge1xuICAgIHJldHVybiB0aGlzLmFsYXJtU2VydmljZS5saXN0KHtcbiAgICAgIGxhc3RVcGRhdGVkRnJvbTogZGF0ZXNbMF0udG9JU09TdHJpbmcoKSxcbiAgICAgIGNyZWF0ZWRUbzogZGF0ZXNbMV0udG9JU09TdHJpbmcoKSxcbiAgICAgIHBhZ2VTaXplOiA1MCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgc3RhdGUgdG8gZW5hYmxlIG9yIGRpc2FibGUgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0gdmFsdWUgLSBBIGJvb2xlYW4gdmFsdWUgdG8gaW5kaWNhdGUgd2hldGhlciB0byBlbmFibGUgaW50ZXJ2YWxzLlxuICAgKi9cbiAgdXBkYXRlSW50ZXJ2YWxTdGF0ZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX2lzSW50ZXJ2YWxFbmFibGVkPy5uZXh0KHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSBjb3VudCBvZiBhbGFybXMgZmlsdGVyZWQgYnkgc2V2ZXJpdHkgYW5kIGNsZWFyYW5jZSBzdGF0dXMuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eSAtIFRoZSBzZXZlcml0eSBsZXZlbCB0byBmaWx0ZXIgYnkgKGUuZy4sIENSSVRJQ0FMLCBNQUpPUiwgZXRjLikuXG4gICAqIEBwYXJhbSBzaG93Q2xlYXJlZCAtIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgY2xlYXJlZCBhbGFybXMgaW4gdGhlIGNvdW50LlxuICAgKiBAcGFyYW0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXIgY3JpdGVyaWEgZm9yIGFsYXJtcy5cbiAgICpcbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlciBvZiBhbGFybXMgdGhhdCBtYXRjaCB0aGUgZmlsdGVyIGNyaXRlcmlhLlxuICAgKlxuICAgKi9cbiAgYXN5bmMgZ2V0QWxhcm1zQ291bnRCeVNldmVyaXR5KFxuICAgIHNldmVyaXR5OiBTZXZlcml0eVR5cGUsXG4gICAgc2hvd0NsZWFyZWQ6IGJvb2xlYW4sXG4gICAgZmlsdGVyPzogQWxhcm1RdWVyeUZpbHRlclxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHN0YXR1c2VzUXVlcnkgPSB0aGlzLmdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkKTtcbiAgICBjb25zdCBfZmlsdGVyOiBBbGFybVF1ZXJ5RmlsdGVyID0ge1xuICAgICAgLi4uKHNldmVyaXR5ICYmIHsgc2V2ZXJpdHk6IHNldmVyaXR5IH0pLFxuICAgICAgLi4uKHN0YXR1c2VzUXVlcnkgJiYgeyBzdGF0dXM6IHN0YXR1c2VzUXVlcnkgfSksXG4gICAgICAuLi5maWx0ZXJcbiAgICB9O1xuICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy5hbGFybVNlcnZpY2UuY291bnQoX2ZpbHRlcik7XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgYWxhcm1zIHJlZnJlc2ggdHlwZSBmcm9tIHRoZSBPcHRpb25zU2VydmljZVxuICAgKiBhbmQgZGV0ZXJtaW5lcyB3aGV0aGVyIGl0IGlzIHNldCB0byBcImludGVydmFsXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgYWxhcm1zIHJlZnJlc2ggdHlwZSBpcyBcImludGVydmFsLFwiIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgaXNJbnRlcnZhbFJlZnJlc2goKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldCh0aGlzLkFMQVJNX1JFRlJFU0hfVFlQRV9LRVksICdpbnRlcnZhbCcpO1xuICAgIHJldHVybiB2YWx1ZSA9PT0gJ2ludGVydmFsJztcbiAgfVxuXG4gIC8qKlxuICAgKiBVcGRhdGVzIHRoZSBsaXN0IG9mIHNlbGVjdGVkIHNldmVyaXRpZXMgYmFzZWQgb24gdGhlIG5ldyBzZXZlcml0eSBmaWx0ZXIuXG4gICAqXG4gICAqIEBwYXJhbSBzZXZlcml0eVVwZGF0ZXMgLSBUaGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgdXBkYXRlcyB0byBlYWNoIHNldmVyaXR5LlxuICAgKlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHVwZGF0ZWQgc2VsZWN0ZWQgc2V2ZXJpdGllcy5cbiAgICovXG4gIHVwZGF0ZVNlbGVjdGVkU2V2ZXJpdGllcyhzZXZlcml0eVVwZGF0ZXM6IFNldmVyaXR5RmlsdGVyKTogU2V2ZXJpdHlUeXBlW10ge1xuICAgIHJldHVybiAoT2JqZWN0LmtleXMoc2V2ZXJpdHlVcGRhdGVzKSBhcyBTZXZlcml0eVR5cGVbXSlcbiAgICAgIC5maWx0ZXIoa2V5ID0+IHNldmVyaXR5VXBkYXRlc1trZXldKVxuICAgICAgLm1hcChrZXkgPT4ga2V5LnRvVXBwZXJDYXNlKCkgYXMgU2V2ZXJpdHlUeXBlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGFjdGl2ZSBhbGFybXMgb2YgdGhlIHNlbGVjdGVkIHNldmVyaXRpZXMuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNsZWFycyBhbGwgYWN0aXZlIGFsYXJtcyBmb3IgdGhlIGdpdmVuIGxpc3Qgb2Ygc2V2ZXJpdGllcyBieSBtYWtpbmcgYnVsayB1cGRhdGUgY2FsbHMuIElmIG5vIHNldmVyaXRpZXMgYXJlIHNlbGVjdGVkLCBpdCBkZWZhdWx0cyB0byB1c2luZyBhbGwgYXZhaWxhYmxlIHNldmVyaXRpZXMuXG4gICAqIEl0IHdvcmtzIGJ5IHNlbmRpbmcgYSBzZXJpZXMgb2YgdXBkYXRlIHJlcXVlc3RzIGZvciBlYWNoIHNldmVyaXR5IGFuZCByZXR1cm5zIGEgUHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gb2JqZWN0IGluZGljYXRpbmcgaWYgYWxsIGFsYXJtcyB3ZXJlIHJlc29sdmVkIGltbWVkaWF0ZWx5LlxuICAgKlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRTZXZlcml0aWVzIEFuIGFycmF5IG9mIHNldmVyaXRpZXMgdG8gYmUgY2xlYXJlZC4gSWYgbm90IHByb3ZpZGVkLCBhbGwgc2V2ZXJpdGllcyB3aWxsIGJlIGNsZWFyZWQuXG4gICAqIEBwYXJhbSBzb3VyY2VJZCAtIElkZW50aWZpZXIgZm9yIHRoZSBzb3VyY2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBhbGFybXMgdG8gYmUgY2xlYXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgd2l0aCBhIGZsYWcgYHJlc29sdmVkSW1tZWRpYXRlbHlgLiBUaGUgZmxhZyBpcyB0cnVlIGlmIGFsbCBhbGFybXMgZm9yIGFsbCBzZWxlY3RlZCBzZXZlcml0aWVzIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHk7IG90aGVyd2lzZSBmYWxzZS5cbiAgICpcbiAgICogKipFeGFtcGxlKipcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCBzZXZlcml0aWVzVG9DbGVhcjogU2V2ZXJpdHlUeXBlW10gPSBbU2V2ZXJpdHkuTUFKT1IsIFNldmVyaXR5Lk1JTk9SXTtcbiAgICpcbiAgICogY2xlYXJBbGxBY3RpdmVBbGFybXMoc2V2ZXJpdGllc1RvQ2xlYXIpLnRoZW4oKHsgcmVzb2x2ZWRJbW1lZGlhdGVseSB9KSA9PiB7XG4gICAqICAgaWYgKHJlc29sdmVkSW1tZWRpYXRlbHkpIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdBbGwgc2VsZWN0ZWQgYWxhcm1zIHdlcmUgY2xlYXJlZCBzdWNjZXNzZnVsbHkuJyk7XG4gICAqICAgfSBlbHNlIHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdTb21lIGFsYXJtcyBjb3VsZCBub3QgYmUgY2xlYXJlZC4nKTtcbiAgICogICB9XG4gICAqIH0pO1xuICAgKiBgYGBcbiAgICpcbiAgICogKipOb3RlKipcbiAgICogLSBUaGUgbWV0aG9kIHVzZXMgdGhlIGBhbGFybVNlcnZpY2UudXBkYXRlQnVsa2AgZm9yIGVhY2ggc2V2ZXJpdHkgdG8gY2xlYXIgdGhlIGFjdGl2ZSBhbGFybXMuXG4gICAqIC0gSXQgbWF5IGZldGNoIHRoZSBgc291cmNlSWRgIGJhc2VkIG9uIHRoZSB2aWV3IChpZiBhcHBsaWNhYmxlKSBhbmQgaW5jbHVkZSBpdCBhcyBhIHF1ZXJ5IHBhcmFtZXRlciBpbiB0aGUgdXBkYXRlIGNhbGxzLlxuICAgKiAtIFRoZSBtZXRob2QgcmV0dXJucyBpbW1lZGlhdGVseSBidXQgdGhlIHJldHVybmVkIFByb21pc2UgbmVlZHMgdG8gaGF2ZSBhIGB0aGVuYCBvciBgY2F0Y2hgIG1ldGhvZCBjYWxsIHRvIGhhbmRsZSB0aGUgcmVzdWx0IG9yIGVycm9yIHJlc3BlY3RpdmVseS5cbiAgICogLSBVc2VzIGBQcm9taXNlLmFsbGAgdG8gd2FpdCBmb3IgYWxsIHVwZGF0ZSByZXF1ZXN0cyB0byBjb21wbGV0ZSBiZWZvcmUgcmVzb2x2aW5nIHRoZSBmaW5hbCByZXN1bHQuXG4gICAqL1xuICBhc3luYyBjbGVhckFsbEFjdGl2ZUFsYXJtcyhcbiAgICBzZWxlY3RlZFNldmVyaXRpZXM6IFNldmVyaXR5VHlwZVtdLFxuICAgIHNvdXJjZUlkOiBzdHJpbmcgfCBudW1iZXJcbiAgKTogUHJvbWlzZTx7IHJlc29sdmVkSW1tZWRpYXRlbHk6IGJvb2xlYW4gfT4ge1xuICAgIGNvbnN0IHNldmVyaXRpZXNUb1VwZGF0ZSA9IHNlbGVjdGVkU2V2ZXJpdGllcyB8fCBTZXZlcml0eTtcblxuICAgIGNvbnN0IHByb21pc2VzID0gT2JqZWN0LnZhbHVlcyhzZXZlcml0aWVzVG9VcGRhdGUpLm1hcCgoc2V2ZXJpdHk6IFNldmVyaXR5VHlwZSkgPT4ge1xuICAgICAgY29uc3QgY29tbW9uUGFyYW1zID0geyByZXNvbHZlZDogZmFsc2UsIHNldmVyaXR5IH07XG5cbiAgICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBzb3VyY2VJZFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLmNvbW1vblBhcmFtcyxcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlSWQsXG4gICAgICAgICAgICB3aXRoU291cmNlQXNzZXRzOiB0cnVlLFxuICAgICAgICAgICAgd2l0aFNvdXJjZURldmljZXM6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogY29tbW9uUGFyYW1zO1xuXG4gICAgICByZXR1cm4gdGhpcy5hbGFybVNlcnZpY2UudXBkYXRlQnVsayh7IHN0YXR1czogQWxhcm1TdGF0dXMuQ0xFQVJFRCB9LCBwYXJhbWV0ZXJzKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICByZXR1cm4ge1xuICAgICAgcmVzb2x2ZWRJbW1lZGlhdGVseTogcmVzcG9uc2VzLmV2ZXJ5KHJlcyA9PiByZXMpXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3JyZWN0IGxpbmsgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGNvbnRleHQgZGF0YS5cbiAgICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IHRoZSBuYXZpZ2F0aW9uIHdhcyB0cmlnZ2VyZWQgZnJvbS5cbiAgICogQHBhcmFtIGFsYXJtIFRoZSBhbGFybSB0byBuYXZpZ2F0ZSB0by5cbiAgICogQHJldHVybnMgQSBsaW5rIHRvIGJlIHVzZWQgYXMgYW4gdXJsIG5hdmlnYXRpb24uXG4gICAqL1xuICBnZXRSb3V0ZXJMaW5rKGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nIHtcbiAgICBsZXQgZGV0YWlsVXJsID0gYC8ke0FMQVJNU19QQVRIfWA7XG4gICAgaWYgKGFsYXJtKSB7XG4gICAgICBkZXRhaWxVcmwgPSBgLyR7QUxBUk1TX1BBVEh9LyR7YWxhcm0uaWR9YDtcbiAgICB9XG4gICAgaWYgKCFjb250ZXh0RGF0YSkge1xuICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGNvbnRleHREYXRhLmNvbnRleHQpIHtcbiAgICAgIGNhc2UgVmlld0NvbnRleHQuRGV2aWNlOlxuICAgICAgICByZXR1cm4gYC9kZXZpY2UvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgY2FzZSBWaWV3Q29udGV4dC5Hcm91cDpcbiAgICAgICAgcmV0dXJuIGAvZ3JvdXAvJHtjb250ZXh0RGF0YS5jb250ZXh0RGF0YS5pZH0ke2RldGFpbFVybH1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGRldGFpbFVybDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY29ycmVjdCBhcnJheSBuYXZpZ2F0aW9uLlxuICAgKiBAcGFyYW0gY29udGV4dERhdGEgVGhlIGNvbnRleHQgdGhlIG5hdmlnYXRpb24gd2FzIHRyaWdnZXJlZCBmcm9tLlxuICAgKiBAcGFyYW0gYWxhcm0gVGhlIGFsYXJtIHRvIG5hdmlnYXRlIHRvLlxuICAgKiBAcmV0dXJucyBBIGxpbmsgdG8gYmUgdXNlZCBhcyBhIHJvdXRlci5uYXZpZ2F0aW9uLlxuICAgKi9cbiAgZ2V0Um91dGVyTmF2aWdhdGlvbkFycmF5KGNvbnRleHREYXRhPzogQ29udGV4dERhdGEsIGFsYXJtPzogSUFsYXJtKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLmdldFJvdXRlckxpbmsoY29udGV4dERhdGEsIGFsYXJtKS5zcGxpdCgnLycpLmZpbHRlcihCb29sZWFuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdmFsdWUgZm9yIHF1ZXJ5IHBhcmFtZXRlciBmb3IgZmlsdGVyaW5nIGFsYXJtcyBieSBzZXZlcml0eSBiYXNlZCBvbiBhcnJheSBvZiBzZWxlY3RlZCBzZXZlcml0aWVzLlxuICAgKlxuICAgKiBAcGFyYW0gc2V2ZXJpdGllcyAtIEFuIGFycmF5IG9mIGFsYXJtIHNldmVyaXR5IHR5cGVzIHRvIGluY2x1ZGUgaW4gdGhlIGZpbHRlci5cbiAgICogSWYgdGhlIGFycmF5IGlzIGVtcHR5IG9yIHVuZGVmaW5lZCwgbm8gc2V2ZXJpdHkgZmlsdGVyIHdpbGwgYmUgYXBwbGllZC5cbiAgICpcbiAgICogQHJldHVybnMgQSBjb21tYS1zZXBhcmF0ZWQgc3RyaW5nIG9mIHNlbGVjdGVkIGFsYXJtIHNldmVyaXRpZXMsXG4gICAqIG9yIG51bGwgaWYgbm8gc2V2ZXJpdGllcyBhcmUgcHJvdmlkZWQuXG4gICAqL1xuICBwcml2YXRlIGdldFNldmVyaXR5UXVlcnlQYXJhbWV0ZXIoc2V2ZXJpdGllczogU2V2ZXJpdHlUeXBlW10pOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoIXNldmVyaXRpZXMgfHwgc2V2ZXJpdGllcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHNldmVyaXRpZXMubGVuZ3RoID09PSBPYmplY3Qua2V5cyhTZXZlcml0eSkubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldmVyaXRpZXMuam9pbignLCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB2YWx1ZSBmb3IgcXVlcnkgcGFyYW1ldGVyIGZvciBmaWx0ZXJpbmcgYWxhcm1zIGJ5IHN0YXR1c2VzIGJhc2VkIG9uIHNob3dDbGVhcmVkIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHNob3dDbGVhcmVkIC0gQSBmbGFnIGluZGljYXRpbmcgd2hldGhlciB0byBpbmNsdWRlIGNsZWFyZWQgc3RhdHVzZXMuXG4gICAqIElmIHRydWUsIGFsbCBzdGF0dXNlcywgaW5jbHVkaW5nICdDTEVBUkVEJywgd2lsbCBiZSBpbmNsdWRlZDsgaWYgZmFsc2UsICdDTEVBUkVEJyB3aWxsIGJlIGV4Y2x1ZGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2YgYWxhcm0gc3RhdHVzZXMuXG4gICAqL1xuICBwcml2YXRlIGdldFN0YXR1c1F1ZXJ5UGFyYW1ldGVyKHNob3dDbGVhcmVkOiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdGF0dXNlcyA9IE9iamVjdC5rZXlzKEFMQVJNX1NUQVRVU19MQUJFTFMpIGFzIEFsYXJtU3RhdHVzVHlwZVtdO1xuICAgIGNvbnN0IGZpbHRlcmVkU3RhdHVzZXMgPSBzaG93Q2xlYXJlZFxuICAgICAgPyBzdGF0dXNlc1xuICAgICAgOiBzdGF0dXNlcy5maWx0ZXIoc3RhdHVzID0+IHN0YXR1cyAhPT0gJ0NMRUFSRUQnKTtcbiAgICByZXR1cm4gZmlsdGVyZWRTdGF0dXNlcy5qb2luKCcsJyk7XG4gIH1cbn1cbiJdfQ==