@c8y/ngx-components 1021.2.0 → 1021.3.1

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 (42) hide show
  1. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts +6 -3
  2. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.d.ts.map +1 -1
  3. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.service.d.ts +9 -0
  4. package/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.service.d.ts.map +1 -0
  5. package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts +2 -1
  6. package/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.d.ts.map +1 -1
  7. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts +1 -0
  8. package/auth-configuration/sso-configuration/template-parts/basic-configuration.component.d.ts.map +1 -1
  9. package/context-dashboard/context-dashboard.service.d.ts.map +1 -1
  10. package/core/common/get-group-icon.pipe.d.ts.map +1 -1
  11. package/core/common/global-config.service.d.ts +1 -1
  12. package/core/common/global-config.service.d.ts.map +1 -1
  13. package/device-profile/device-profile-list.component.d.ts +31 -14
  14. package/device-profile/device-profile-list.component.d.ts.map +1 -1
  15. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.component.mjs +24 -10
  16. package/esm2022/alarm-event-selector/alarm-event-attributes-form/alarm-event-attributes-form.service.mjs +20 -0
  17. package/esm2022/alarm-event-selector/alarm-event-selector-list-item/alarm-event-selector-list-item.component.mjs +1 -1
  18. package/esm2022/alarm-event-selector/alarm-event-selector.component.mjs +3 -3
  19. package/esm2022/alarm-event-selector/custom-alarm-event-form/custom-alarm-event-form.component.mjs +6 -3
  20. package/esm2022/auth-configuration/sso-configuration/template-parts/basic-configuration.component.mjs +5 -3
  21. package/esm2022/context-dashboard/context-dashboard.service.mjs +3 -2
  22. package/esm2022/core/common/get-group-icon.pipe.mjs +4 -1
  23. package/esm2022/core/common/global-config.service.mjs +3 -2
  24. package/esm2022/device-profile/device-profile-list.component.mjs +102 -27
  25. package/esm2022/repository/shared/repository.model.mjs +2 -1
  26. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +46 -13
  27. package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
  28. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +4 -2
  29. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  30. package/fesm2022/c8y-ngx-components-context-dashboard.mjs +2 -1
  31. package/fesm2022/c8y-ngx-components-context-dashboard.mjs.map +1 -1
  32. package/fesm2022/c8y-ngx-components-device-profile.mjs +110 -35
  33. package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
  34. package/fesm2022/c8y-ngx-components-repository-shared.mjs +1 -0
  35. package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
  36. package/fesm2022/c8y-ngx-components.mjs +5 -1
  37. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  38. package/locales/locales.pot +17 -2
  39. package/package.json +1 -1
  40. package/repository/shared/repository.model.d.ts +2 -1
  41. package/repository/shared/repository.model.d.ts.map +1 -1
  42. package/repository/shared/repository.service.d.ts +1 -1
@@ -112,7 +112,7 @@ export class AlarmEventSelectorComponent {
112
112
  multi: true,
113
113
  useExisting: forwardRef(() => AlarmEventSelectorComponent)
114
114
  }
115
- ], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i5.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "directive", type: i6.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: i7.AlarmEventSelectorListItemComponent, selector: "c8y-alarm-event-selector-list-item", inputs: ["timelineType", "highlightText", "showAddRemoveButton", "isSelected", "optionToRemove", "showActiveToggle", "allowItemEdit", "hideSource", "displayAsSwitch", "omitProperties"], outputs: ["added", "removed"] }, { kind: "component", type: i8.CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: ["timelineType", "target", "omitProperties", "defaultColor"], outputs: ["added", "cancel"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.IncludesAlarmOrEventPipe, name: "includesAlarmOrEvent" }] }); }
115
+ ], ngImport: i0, template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n [selectedItems]=\"selectedItems\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i2.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.ListGroupComponent, selector: "c8y-list-group" }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "component", type: i5.MillerViewComponent, selector: "c8y-asset-selector-miller", inputs: ["config", "asset", "selectedDevice", "rootNode", "container"], outputs: ["onSelected", "onClearSelected"] }, { kind: "directive", type: i6.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: i7.AlarmEventSelectorListItemComponent, selector: "c8y-alarm-event-selector-list-item", inputs: ["timelineType", "highlightText", "showAddRemoveButton", "isSelected", "optionToRemove", "showActiveToggle", "allowItemEdit", "hideSource", "displayAsSwitch", "omitProperties"], outputs: ["added", "removed"] }, { kind: "component", type: i8.CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: ["timelineType", "target", "omitProperties", "selectedItems", "defaultColor"], outputs: ["added", "cancel"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.IncludesAlarmOrEventPipe, name: "includesAlarmOrEvent" }] }); }
116
116
  }
117
117
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: AlarmEventSelectorComponent, decorators: [{
118
118
  type: Component,
@@ -122,7 +122,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
122
122
  multi: true,
123
123
  useExisting: forwardRef(() => AlarmEventSelectorComponent)
124
124
  }
125
- ], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
125
+ ], template: "<div\n class=\"d-grid grid__row--1 fit-h\"\n [ngClass]=\"{\n 'grid__col--3-6-3--md': allowChangingContext,\n 'grid__col--8-4--md': !allowChangingContext\n }\"\n>\n <div\n class=\"d-flex d-col p-relative bg-level-1\"\n *ngIf=\"allowChangingContext\"\n >\n <c8y-asset-selector-miller\n class=\"d-contents\"\n [(ngModel)]=\"contextAsset\"\n [asset]=\"contextAsset\"\n (onSelected)=\"assetSelectionChanged($event)\"\n [container]=\"''\"\n [config]=\"{\n view: 'miller',\n groupsSelectable: groupsSelectable,\n columnHeaders: true,\n showChildDevices: true,\n showUnassignedDevices: true,\n singleColumn: true,\n search: allowSearch,\n showFilter: true\n }\"\n ></c8y-asset-selector-miller>\n </div>\n <!-- center column -->\n <div class=\"inner-scroll bg-component\" data-cy=\"c8y-alarm-event-selector--inner-column\">\n <ng-template #noDeviceEmptyState>\n <div class=\"p-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n </ng-template>\n\n <ng-template #loadingData>\n <div class=\"p-16 text-center\">\n <c8y-loading></c8y-loading>\n </div>\n </ng-template>\n\n <div\n class=\"bg-inherit\"\n *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\"\n >\n <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n <p\n class=\"text-medium text-truncate\"\n [title]=\"timelineTypeTexts.availableItemsTitle | translate\"\n >\n {{ timelineTypeTexts.availableItemsTitle | translate }}\n </p>\n <div class=\"d-flex\">\n <div\n class=\"input-group input-group-search m-t-4\"\n id=\"search\"\n *ngIf=\"!(loadingItems$ | async)\"\n >\n <input\n class=\"form-control\"\n placeholder=\"Filter\u2026\"\n type=\"search\"\n [ngModel]=\"filterString\"\n (ngModelChange)=\"filterStringChanged($event)\"\n />\n <span class=\"input-group-addon\">\n <i\n c8yIcon=\"search\"\n *ngIf=\"!filterString; else clearFilterString\"\n ></i>\n <ng-template #clearFilterString>\n <i\n class=\"text-muted\"\n c8yIcon=\"times\"\n *ngIf=\"filterString\"\n (click)=\"filterStringChanged()\"\n ></i>\n </ng-template>\n </span>\n </div>\n </div>\n </div>\n\n <ng-container *ngIf=\"filteredItems$ | async as filteredItems; else loadingData\">\n <ng-container *ngIf=\"!(loadingItems$ | async); else loadingData\">\n <ng-container *ngIf=\"items$ | async as items\">\n <div class=\"p-16 bg-level-2 separator-bottom\">\n <div>\n <p>\n <i\n class=\"text-info m-r-4\"\n c8yIcon=\"info-circle\"\n ></i>\n <strong>{{ timelineTypeTexts.recentItemsWarningTitle | translate }}</strong>\n </p>\n <p>\n {{ timelineTypeTexts.recentItemsWarningText | translate }}\n {{ timelineTypeTexts.addCustomText | translate }}\n </p>\n </div>\n <div class=\"p-t-16\">\n <button\n class=\"btn btn-default btn-sm\"\n aria-controls=\"collapseCustomItemForm\"\n [attr.aria-expanded]=\"isExpanded\"\n (click)=\"isExpanded = !isExpanded\"\n >\n {{ timelineTypeTexts.addCustomItemButtonLabel | translate }}\n </button>\n <div\n class=\"collapse\"\n id=\"collapseCustomItemForm\"\n [collapse]=\"!isExpanded\"\n [isAnimated]=\"true\"\n >\n <div [style.min-height]=\"'230px'\">\n <c8y-custom-alarm-event-form\n class=\"d-block\"\n *ngIf=\"isExpanded\"\n [timelineType]=\"timelineType\"\n [target]=\"assetSelection | async\"\n [omitProperties]=\"omitProperties\"\n [defaultColor]=\"defaultColor\"\n (added)=\"itemAdded($event); isExpanded = false\"\n (cancel)=\"isExpanded = false\"\n [selectedItems]=\"selectedItems\"\n ></c8y-custom-alarm-event-form>\n </div>\n </div>\n </div>\n </div>\n\n <div\n class=\"p-16\"\n *ngIf=\"!filteredItems.length\"\n >\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.emptyStateTitle | translate\"\n [subtitle]=\"\n items.length\n ? ('Try another filter term.' | translate)\n : (timelineTypeTexts.assetWithNoItemsEmptyStateSubtitle | translate)\n \"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </div>\n\n <c8y-list-group>\n <c8y-list-item\n class=\"sticky-top\"\n style=\"top: 72px\"\n *ngIf=\"items.length > maxNumberOfItems && filteredItems.length >= maxNumberOfItems\"\n >\n <div class=\"alert alert-warning m-b-0\">\n {{ timelineTypeTexts.largeNumberOfItemsInfo | translate }}\n </div>\n </c8y-list-item>\n <c8y-alarm-event-selector-list-item\n class=\"d-contents\"\n [ngModel]=\"item\"\n [isSelected]=\"selectedItems | includesAlarmOrEvent: item\"\n (added)=\"itemAdded($event)\"\n (removed)=\"itemRemoved($event)\"\n [highlightText]=\"filterStringChanges$ | async\"\n [timelineType]=\"timelineType\"\n [hideSource]=\"hideSource\"\n *ngFor=\"let item of filteredItems; trackBy: trackByFn\"\n ></c8y-alarm-event-selector-list-item>\n </c8y-list-group>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <!-- last column -->\n <div class=\"inner-scroll bg-level-1\">\n <p\n class=\"text-medium m-b-4 p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n [title]=\"timelineTypeTexts.selectedItemsTitle | translate\"\n >\n {{ timelineTypeTexts.selectedItemsTitle | translate }}\n </p>\n <div class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-b-16\">\n <c8y-ui-empty-state\n [icon]=\"timelineTypeTexts.emptyStateIcon\"\n [title]=\"timelineTypeTexts.noSelectedItemsTitle | translate\"\n *ngIf=\"!selectedItems || !selectedItems.length\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <div\n [ngClass]=\"{\n 'c8y-alarm-pill': timelineType === 'ALARM',\n 'c8y-event-pill': timelineType === 'EVENT'\n }\"\n *ngFor=\"let selectedItem of selectedItems\"\n >\n <button\n [title]=\"'Remove' | translate\"\n type=\"button\"\n [ngClass]=\"{\n 'c8y-alarm-pill__btn': timelineType === 'ALARM',\n 'c8y-event-pill__btn': timelineType === 'EVENT'\n }\"\n (click)=\"itemRemoved(selectedItem)\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"remove\"\n ></i>\n </button>\n <div\n class=\"c8y-datapoint-pill__label\"\n [title]=\"selectedItem.label || selectedItem.filters.type\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"selectedItem.color || defaultColor\"\n >\n <i\n class=\"stroked-icon\"\n [c8yIcon]=\"timelineType === 'ALARM' ? 'bell' : 'c8y-events'\"\n ></i>\n </span>\n <span class=\"text-truncate\">\n <span class=\"text-truncate\">{{ selectedItem.label || selectedItem.filters.type }}</span>\n <small\n class=\"text-muted text-10\"\n *ngIf=\"!hideSource && selectedItem?.__target?.name\"\n >\n {{ selectedItem?.__target?.name }}\n </small>\n </span>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
126
126
  }], ctorParameters: () => [{ type: i1.AlarmEventSelectorService }], propDecorators: { timelineType: [{
127
127
  type: Input
128
128
  }], contextAsset: [{
@@ -142,4 +142,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
142
142
  }], selectionChange: [{
143
143
  type: Output
144
144
  }] } });
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7O0FBYTNFLE1BQU0sT0FBTywyQkFBMkI7SUEyQnRDLFlBQW9CLHlCQUFvRDtRQUFwRCw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBMUIvRCxpQkFBWSxHQUFpQixPQUFPLENBQUM7UUFFckMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0QsaUJBQVksR0FB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QUM7SUFDZixDQUFDOzhHQW5JVSwyQkFBMkI7a0dBQTNCLDJCQUEyQix3WEFSM0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2FBQzNEO1NBQ0YsMEJDOUJILHUzUkFzUEE7OzJGRHROYSwyQkFBMkI7a0JBWHZDLFNBQVM7K0JBQ0UsMEJBQTBCLGFBRXpCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDO3lCQUMzRDtxQkFDRjs4RkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFsYXJtT3JFdmVudCxcbiAgT21pdFNlbGVjdG9yUHJvcGVydGllcyxcbiAgVGltZWxpbmVUeXBlLFxuICBUaW1lbGluZVR5cGVUZXh0c1xufSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tZXZlbnQtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWxhcm1FdmVudFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZSA9ICdBTEFSTSc7XG4gIEBJbnB1dCgpIGNvbnRleHRBc3NldDogSUlkZW50aWZpZWQ7XG4gIEBJbnB1dCgpIGFsbG93Q2hhbmdpbmdDb250ZXh0ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtcyA9IG5ldyBBcnJheTxBbGFybU9yRXZlbnQ+KCk7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgQElucHV0KCkgZ3JvdXBzU2VsZWN0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGhpZGVTb3VyY2UgPSBmYWxzZTtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybU9yRXZlbnRbXT4oKTtcbiAgZmlsdGVyU3RyaW5nID0gJyc7XG4gIG1heE51bWJlck9mSXRlbXMgPSA1MDtcblxuICBsb2FkaW5nSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGFzc2V0U2VsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSWRlbnRpZmllZD4oe30pO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QWxhcm1PckV2ZW50W10+O1xuICBmaWx0ZXJlZEl0ZW1zJDogT2JzZXJ2YWJsZTxBbGFybU9yRXZlbnRbXT47XG4gIGZpbHRlclN0cmluZ0NoYW5nZXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHRpbWVsaW5lVHlwZVRleHRzOiBUaW1lbGluZVR5cGVUZXh0cztcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xuICBkZWZhdWx0Q29sb3IgPVxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJyYW5kLXByaW1hcnknKSB8fFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWM4eS1icmFuZC1wcmltYXJ5JykgfHxcbiAgICAnIzE3NzZCRic7XG4gIHByaXZhdGUgZmlsdGVyU3RyaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVsaW5lVHlwZVRleHRzID0gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLnRpbWVsaW5lVHlwZVRleHRzKHRoaXMudGltZWxpbmVUeXBlKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0QXNzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0QXNzZXQodGhpcy5jb250ZXh0QXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGl0ZW1BZGRlZChpdGVtOiBBbGFybU9yRXZlbnQpOiB2b2lkIHtcbiAgICBpdGVtLl9fYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLCBpdGVtXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBpdGVtUmVtb3ZlZChhbGFybTogQWxhcm1PckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgIHRtcCA9PlxuICAgICAgICB0bXAubGFiZWwgIT09IGFsYXJtLmxhYmVsIHx8XG4gICAgICAgIHRtcC5maWx0ZXJzLnR5cGUgIT09IGFsYXJtLmZpbHRlcnMudHlwZSB8fFxuICAgICAgICB0bXAuX190YXJnZXQ/LmlkICE9PSBhbGFybS5fX3RhcmdldD8uaWRcbiAgICApO1xuICAgIHRoaXMuZW1pdEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIGFzc2V0U2VsZWN0aW9uQ2hhbmdlZChldnQ6IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZ0Lml0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RBc3NldChldnQuaXRlbXMubGVuZ3RoID8gZXZ0Lml0ZW1zWzBdIDogZXZ0Lml0ZW1zKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgc2VsZWN0aW9uXG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBBbGFybU9yRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtpdGVtLmZpbHRlcnMudHlwZX0tJHtpdGVtLl9fdGFyZ2V0Py5pZH1gO1xuICB9XG5cbiAgZmlsdGVyU3RyaW5nQ2hhbmdlZChuZXdWYWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmckLm5leHQobmV3VmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubG9hZGluZ0l0ZW1zJC5uZXh0KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT2JzZXJ2YWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLmFzc2V0U2VsZWN0aW9uLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChhc3NldDogSUlkZW50aWZpZWQpID0+XG4gICAgICAgIGFzc2V0Py5pZFxuICAgICAgICAgID8gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldEFsYXJtc09yRXZlbnRzKGFzc2V0LCB0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICAgICA6IHRoaXMuYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZS5nZXRJdGVtcyh0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpKSxcbiAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9taXRQcm9wZXJ0aWVzLmNvbG9yKSB7XG4gICAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IChpLmNvbG9yID0gdGhpcy5kZWZhdWx0Q29sb3IpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyU3RyaW5nQ2hhbmdlcyQgPSB0aGlzLmZpbHRlclN0cmluZyQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlclN0cmluZ0NoYW5nZXMkLCB0aGlzLml0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWx0ZXJTdHJpbmcsIGl0ZW1zXSkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlclN0cmluZykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckNhc2VGaWx0ZXJTdHJpbmcgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHRoaXMuaW5jbHVkZXNGaWx0ZXJTdHJpbmcoaXRlbSwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nKSk7XG4gICAgICB9KSxcbiAgICAgIG1hcChmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLm1heE51bWJlck9mSXRlbXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFzc2V0KGFzc2V0OiBJSWRlbnRpZmllZCkge1xuICAgIHRoaXMuYXNzZXRTZWxlY3Rpb24ubmV4dChhc3NldCk7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmdDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZXNGaWx0ZXJTdHJpbmcoYWxhcm06IEFsYXJtT3JFdmVudCwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IGFsYXJtLmxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbC5pbmNsdWRlcyhsb3dlckNhc2VGaWx0ZXJTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gYWxhcm0uZmlsdGVycy50eXBlPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuaW5jbHVkZXMobG93ZXJDYXNlRmlsdGVyU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZC1ncmlkIGdyaWRfX3Jvdy0tMSBmaXQtaFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCxcbiAgICAnZ3JpZF9fY29sLS04LTQtLW1kJzogIWFsbG93Q2hhbmdpbmdDb250ZXh0XG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZC1jb2wgcC1yZWxhdGl2ZSBiZy1sZXZlbC0xXCJcbiAgICAqbmdJZj1cImFsbG93Q2hhbmdpbmdDb250ZXh0XCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJhc3NldFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBbY29udGFpbmVyXT1cIicnXCJcbiAgICAgIFtjb25maWddPVwie1xuICAgICAgICB2aWV3OiAnbWlsbGVyJyxcbiAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICBzaW5nbGVDb2x1bW46IHRydWUsXG4gICAgICAgIHNlYXJjaDogYWxsb3dTZWFyY2gsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRydWVcbiAgICAgIH1cIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gIDwvZGl2PlxuICA8IS0tIGNlbnRlciBjb2x1bW4gLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctY29tcG9uZW50XCIgZGF0YS1jeT1cImM4eS1hbGFybS1ldmVudC1zZWxlY3Rvci0taW5uZXItY29sdW1uXCI+XG4gICAgPG5nLXRlbXBsYXRlICNub0RldmljZUVtcHR5U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwidGltZWxpbmVUeXBlVGV4dHMuZW1wdHlTdGF0ZUljb25cIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0RhdGE+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgKm5nSWY9XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jIGFzIGFzc2V0OyBlbHNlIG5vRGV2aWNlRW1wdHlTdGF0ZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc3RpY2t5LXRvcCBiZy1pbmhlcml0IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hdmFpbGFibGVJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmF2YWlsYWJsZUl0ZW1zVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIlxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgKm5nSWY9XCIhKGxvYWRpbmdJdGVtcyQgfCBhc3luYylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVy4oCmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlclN0cmluZzsgZWxzZSBjbGVhckZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJGaWx0ZXJTdHJpbmc+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJTdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkSXRlbXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRJdGVtczsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShsb2FkaW5nSXRlbXMkIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdEYXRhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zJCB8IGFzeW5jIGFzIGl0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRpbWVsaW5lVHlwZVRleHRzLnJlY2VudEl0ZW1zV2FybmluZ1RpdGxlIHwgdHJhbnNsYXRlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMucmVjZW50SXRlbXNXYXJuaW5nVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuYWRkQ3VzdG9tVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlQ3VzdG9tSXRlbUZvcm1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0V4cGFuZGVkID0gIWlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmFkZEN1c3RvbUl0ZW1CdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUN1c3RvbUl0ZW1Gb3JtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS5taW4taGVpZ2h0XT1cIicyMzBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1jdXN0b20tYWxhcm0tZXZlbnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cInRpbWVsaW5lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sb3JdPVwiZGVmYXVsdENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudCk7IGlzRXhwYW5kZWQgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJpc0V4cGFuZGVkID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInAtMTZcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlSWNvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgaXRlbXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gKCdUcnkgYW5vdGhlciBmaWx0ZXIgdGVybS4nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICA6ICh0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiBtYXhOdW1iZXJPZkl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID49IG1heE51bWJlck9mSXRlbXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbS1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmxhcmdlTnVtYmVyT2ZJdGVtc0luZm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktbGlzdC1pdGVtPlxuICAgICAgICAgICAgICA8Yzh5LWFsYXJtLWV2ZW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtcyB8IGluY2x1ZGVzQWxhcm1PckV2ZW50OiBpdGVtXCJcbiAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIml0ZW1SZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cImZpbHRlclN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0b3ItbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIG0tYi00IHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLnNlbGVjdGVkSXRlbXNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuc2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC04IHAtbC0xNiBwLXItMTYgcC1iLTE2XCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVJY29uXCJcbiAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLm5vU2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtcyB8fCAhc2VsZWN0ZWRJdGVtcy5sZW5ndGhcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2M4eS1hbGFybS1waWxsJzogdGltZWxpbmVUeXBlID09PSAnQUxBUk0nLFxuICAgICAgICAgICdjOHktZXZlbnQtcGlsbCc6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFt0aXRsZV09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2M4eS1hbGFybS1waWxsX19idG4nOiB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScsXG4gICAgICAgICAgICAnYzh5LWV2ZW50LXBpbGxfX2J0bic6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJpdGVtUmVtb3ZlZChzZWxlY3RlZEl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWxcIlxuICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZEl0ZW0ubGFiZWwgfHwgc2VsZWN0ZWRJdGVtLmZpbHRlcnMudHlwZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkSXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnQUxBUk0nID8gJ2JlbGwnIDogJ2M4eS1ldmVudHMnXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgc2VsZWN0ZWRJdGVtLmxhYmVsIHx8IHNlbGVjdGVkSXRlbS5maWx0ZXJzLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU291cmNlICYmIHNlbGVjdGVkSXRlbT8uX190YXJnZXQ/Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW0/Ll9fdGFyZ2V0Py5uYW1lIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDbEUsT0FBTyxFQUNMLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUNILFdBQVcsRUFDWCxTQUFTLEVBQ1QsR0FBRyxFQUNKLE1BQU0sZ0JBQWdCLENBQUM7QUFPeEIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7O0FBYTNFLE1BQU0sT0FBTywyQkFBMkI7SUEyQnRDLFlBQW9CLHlCQUFvRDtRQUFwRCw4QkFBeUIsR0FBekIseUJBQXlCLENBQTJCO1FBMUIvRCxpQkFBWSxHQUFpQixPQUFPLENBQUM7UUFFckMseUJBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsSUFBSSxLQUFLLEVBQWdCLENBQUM7UUFDMUMsZ0JBQVcsR0FBRyxJQUFJLENBQUM7UUFDbkIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDbkIsbUJBQWMsR0FBMkIsRUFBRSxDQUFDO1FBRTNDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQWtCLENBQUM7UUFDL0QsaUJBQVksR0FB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QUM7SUFDZixDQUFDOzhHQW5JVSwyQkFBMkI7a0dBQTNCLDJCQUEyQix3WEFSM0I7WUFDVDtnQkFDRSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixLQUFLLEVBQUUsSUFBSTtnQkFDWCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLDJCQUEyQixDQUFDO2FBQzNEO1NBQ0YsMEJDOUJILGc3UkF1UEE7OzJGRHZOYSwyQkFBMkI7a0JBWHZDLFNBQVM7K0JBQ0UsMEJBQTBCLGFBRXpCO3dCQUNUOzRCQUNFLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLEtBQUssRUFBRSxJQUFJOzRCQUNYLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLDRCQUE0QixDQUFDO3lCQUMzRDtxQkFDRjs4RkFHUSxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUVJLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQXNzZXRTZWxlY3Rpb25DaGFuZ2VFdmVudCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGRlYm91bmNlVGltZSxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIG1hcCxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbiAgdGFwXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFsYXJtT3JFdmVudCxcbiAgT21pdFNlbGVjdG9yUHJvcGVydGllcyxcbiAgVGltZWxpbmVUeXBlLFxuICBUaW1lbGluZVR5cGVUZXh0c1xufSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLm1vZGVsJztcbmltcG9ydCB7IEFsYXJtRXZlbnRTZWxlY3RvclNlcnZpY2UgfSBmcm9tICcuL2FsYXJtLWV2ZW50LXNlbGVjdG9yLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktYWxhcm0tZXZlbnQtc2VsZWN0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vYWxhcm0tZXZlbnQtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQWxhcm1FdmVudFNlbGVjdG9yQ29tcG9uZW50KVxuICAgIH1cbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBBbGFybUV2ZW50U2VsZWN0b3JDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZSA9ICdBTEFSTSc7XG4gIEBJbnB1dCgpIGNvbnRleHRBc3NldDogSUlkZW50aWZpZWQ7XG4gIEBJbnB1dCgpIGFsbG93Q2hhbmdpbmdDb250ZXh0ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtcyA9IG5ldyBBcnJheTxBbGFybU9yRXZlbnQ+KCk7XG4gIEBJbnB1dCgpIGFsbG93U2VhcmNoID0gdHJ1ZTtcbiAgQElucHV0KCkgZ3JvdXBzU2VsZWN0YWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIGhpZGVTb3VyY2UgPSBmYWxzZTtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcblxuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxBbGFybU9yRXZlbnRbXT4oKTtcbiAgZmlsdGVyU3RyaW5nID0gJyc7XG4gIG1heE51bWJlck9mSXRlbXMgPSA1MDtcblxuICBsb2FkaW5nSXRlbXMkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIGFzc2V0U2VsZWN0aW9uID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJSWRlbnRpZmllZD4oe30pO1xuICBpdGVtcyQ6IE9ic2VydmFibGU8QWxhcm1PckV2ZW50W10+O1xuICBmaWx0ZXJlZEl0ZW1zJDogT2JzZXJ2YWJsZTxBbGFybU9yRXZlbnRbXT47XG4gIGZpbHRlclN0cmluZ0NoYW5nZXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHRpbWVsaW5lVHlwZVRleHRzOiBUaW1lbGluZVR5cGVUZXh0cztcbiAgaXNFeHBhbmRlZCA9IGZhbHNlO1xuICBkZWZhdWx0Q29sb3IgPVxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJyYW5kLXByaW1hcnknKSB8fFxuICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWM4eS1icmFuZC1wcmltYXJ5JykgfHxcbiAgICAnIzE3NzZCRic7XG4gIHByaXZhdGUgZmlsdGVyU3RyaW5nJCA9IG5ldyBCZWhhdmlvclN1YmplY3QoJycpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZTogQWxhcm1FdmVudFNlbGVjdG9yU2VydmljZSkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRpbWVsaW5lVHlwZVRleHRzID0gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLnRpbWVsaW5lVHlwZVRleHRzKHRoaXMudGltZWxpbmVUeXBlKTtcbiAgICB0aGlzLnNldHVwT2JzZXJ2YWJsZXMoKTtcbiAgICBpZiAodGhpcy5jb250ZXh0QXNzZXQpIHtcbiAgICAgIHRoaXMuc2VsZWN0QXNzZXQodGhpcy5jb250ZXh0QXNzZXQpO1xuICAgIH1cbiAgfVxuXG4gIGl0ZW1BZGRlZChpdGVtOiBBbGFybU9yRXZlbnQpOiB2b2lkIHtcbiAgICBpdGVtLl9fYWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5zZWxlY3RlZEl0ZW1zLCBpdGVtXTtcbiAgICB0aGlzLmVtaXRDdXJyZW50U2VsZWN0aW9uKCk7XG4gIH1cblxuICBpdGVtUmVtb3ZlZChhbGFybTogQWxhcm1PckV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZEl0ZW1zID0gdGhpcy5zZWxlY3RlZEl0ZW1zLmZpbHRlcihcbiAgICAgIHRtcCA9PlxuICAgICAgICB0bXAubGFiZWwgIT09IGFsYXJtLmxhYmVsIHx8XG4gICAgICAgIHRtcC5maWx0ZXJzLnR5cGUgIT09IGFsYXJtLmZpbHRlcnMudHlwZSB8fFxuICAgICAgICB0bXAuX190YXJnZXQ/LmlkICE9PSBhbGFybS5fX3RhcmdldD8uaWRcbiAgICApO1xuICAgIHRoaXMuZW1pdEN1cnJlbnRTZWxlY3Rpb24oKTtcbiAgfVxuXG4gIGFzc2V0U2VsZWN0aW9uQ2hhbmdlZChldnQ6IEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZ0Lml0ZW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWxlY3RBc3NldChldnQuaXRlbXMubGVuZ3RoID8gZXZ0Lml0ZW1zWzBdIDogZXZ0Lml0ZW1zKTtcbiAgICB9XG4gICAgLy8gcmVzZXQgc2VsZWN0aW9uXG4gICAgdGhpcy5hc3NldFNlbGVjdGlvbi5uZXh0KG51bGwpO1xuICB9XG5cbiAgdHJhY2tCeUZuKF9pbmRleDogbnVtYmVyLCBpdGVtOiBBbGFybU9yRXZlbnQpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtpdGVtLmZpbHRlcnMudHlwZX0tJHtpdGVtLl9fdGFyZ2V0Py5pZH1gO1xuICB9XG5cbiAgZmlsdGVyU3RyaW5nQ2hhbmdlZChuZXdWYWx1ZSA9ICcnKTogdm9pZCB7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmckLm5leHQobmV3VmFsdWUpO1xuICAgIHRoaXMuZmlsdGVyU3RyaW5nID0gbmV3VmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHNldExvYWRpbmdTdGF0ZShzdGF0ZTogYm9vbGVhbikge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHRoaXMubG9hZGluZ0l0ZW1zJC5uZXh0KHN0YXRlKSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT2JzZXJ2YWJsZXMoKTogdm9pZCB7XG4gICAgdGhpcy5pdGVtcyQgPSB0aGlzLmFzc2V0U2VsZWN0aW9uLnBpcGUoXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUodHJ1ZSkpLFxuICAgICAgc3dpdGNoTWFwKChhc3NldDogSUlkZW50aWZpZWQpID0+XG4gICAgICAgIGFzc2V0Py5pZFxuICAgICAgICAgID8gdGhpcy5hbGFybUV2ZW50U2VsZWN0b3JTZXJ2aWNlLmdldEFsYXJtc09yRXZlbnRzKGFzc2V0LCB0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICAgICA6IHRoaXMuYWxhcm1FdmVudFNlbGVjdG9yU2VydmljZS5nZXRJdGVtcyh0aGlzLnRpbWVsaW5lVHlwZSlcbiAgICAgICksXG4gICAgICB0YXAoKCkgPT4gdGhpcy5zZXRMb2FkaW5nU3RhdGUoZmFsc2UpKSxcbiAgICAgIG1hcChpdGVtcyA9PiB7XG4gICAgICAgIGlmICh0aGlzLm9taXRQcm9wZXJ0aWVzLmNvbG9yKSB7XG4gICAgICAgICAgaXRlbXMuZm9yRWFjaChpID0+IChpLmNvbG9yID0gdGhpcy5kZWZhdWx0Q29sb3IpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXRlbXM7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyU3RyaW5nQ2hhbmdlcyQgPSB0aGlzLmZpbHRlclN0cmluZyQucGlwZShcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcblxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyQgPSBjb21iaW5lTGF0ZXN0KFt0aGlzLmZpbHRlclN0cmluZ0NoYW5nZXMkLCB0aGlzLml0ZW1zJF0pLnBpcGUoXG4gICAgICBtYXAoKFtmaWx0ZXJTdHJpbmcsIGl0ZW1zXSkgPT4ge1xuICAgICAgICBpZiAoIWZpbHRlclN0cmluZykge1xuICAgICAgICAgIHJldHVybiBpdGVtcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBsb3dlckNhc2VGaWx0ZXJTdHJpbmcgPSBmaWx0ZXJTdHJpbmcudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcihpdGVtID0+IHRoaXMuaW5jbHVkZXNGaWx0ZXJTdHJpbmcoaXRlbSwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nKSk7XG4gICAgICB9KSxcbiAgICAgIG1hcChmaWx0ZXJlZCA9PiBmaWx0ZXJlZC5zbGljZSgwLCB0aGlzLm1heE51bWJlck9mSXRlbXMpKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFzc2V0KGFzc2V0OiBJSWRlbnRpZmllZCkge1xuICAgIHRoaXMuYXNzZXRTZWxlY3Rpb24ubmV4dChhc3NldCk7XG4gICAgdGhpcy5maWx0ZXJTdHJpbmdDaGFuZ2VkKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRDdXJyZW50U2VsZWN0aW9uKCkge1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQodGhpcy5zZWxlY3RlZEl0ZW1zKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5jbHVkZXNGaWx0ZXJTdHJpbmcoYWxhcm06IEFsYXJtT3JFdmVudCwgbG93ZXJDYXNlRmlsdGVyU3RyaW5nOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBsYWJlbCA9IGFsYXJtLmxhYmVsPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmIChsYWJlbCAmJiBsYWJlbC5pbmNsdWRlcyhsb3dlckNhc2VGaWx0ZXJTdHJpbmcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID0gYWxhcm0uZmlsdGVycy50eXBlPy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICh0eXBlICYmIHR5cGUuaW5jbHVkZXMobG93ZXJDYXNlRmlsdGVyU3RyaW5nKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwiZC1ncmlkIGdyaWRfX3Jvdy0tMSBmaXQtaFwiXG4gIFtuZ0NsYXNzXT1cIntcbiAgICAnZ3JpZF9fY29sLS0zLTYtMy0tbWQnOiBhbGxvd0NoYW5naW5nQ29udGV4dCxcbiAgICAnZ3JpZF9fY29sLS04LTQtLW1kJzogIWFsbG93Q2hhbmdpbmdDb250ZXh0XG4gIH1cIlxuPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJkLWZsZXggZC1jb2wgcC1yZWxhdGl2ZSBiZy1sZXZlbC0xXCJcbiAgICAqbmdJZj1cImFsbG93Q2hhbmdpbmdDb250ZXh0XCJcbiAgPlxuICAgIDxjOHktYXNzZXQtc2VsZWN0b3ItbWlsbGVyXG4gICAgICBjbGFzcz1cImQtY29udGVudHNcIlxuICAgICAgWyhuZ01vZGVsKV09XCJjb250ZXh0QXNzZXRcIlxuICAgICAgW2Fzc2V0XT1cImNvbnRleHRBc3NldFwiXG4gICAgICAob25TZWxlY3RlZCk9XCJhc3NldFNlbGVjdGlvbkNoYW5nZWQoJGV2ZW50KVwiXG4gICAgICBbY29udGFpbmVyXT1cIicnXCJcbiAgICAgIFtjb25maWddPVwie1xuICAgICAgICB2aWV3OiAnbWlsbGVyJyxcbiAgICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgICAgY29sdW1uSGVhZGVyczogdHJ1ZSxcbiAgICAgICAgc2hvd0NoaWxkRGV2aWNlczogdHJ1ZSxcbiAgICAgICAgc2hvd1VuYXNzaWduZWREZXZpY2VzOiB0cnVlLFxuICAgICAgICBzaW5nbGVDb2x1bW46IHRydWUsXG4gICAgICAgIHNlYXJjaDogYWxsb3dTZWFyY2gsXG4gICAgICAgIHNob3dGaWx0ZXI6IHRydWVcbiAgICAgIH1cIlxuICAgID48L2M4eS1hc3NldC1zZWxlY3Rvci1taWxsZXI+XG4gIDwvZGl2PlxuICA8IS0tIGNlbnRlciBjb2x1bW4gLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctY29tcG9uZW50XCIgZGF0YS1jeT1cImM4eS1hbGFybS1ldmVudC1zZWxlY3Rvci0taW5uZXItY29sdW1uXCI+XG4gICAgPG5nLXRlbXBsYXRlICNub0RldmljZUVtcHR5U3RhdGU+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNlwiPlxuICAgICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgICAgW2ljb25dPVwidGltZWxpbmVUeXBlVGV4dHMuZW1wdHlTdGF0ZUljb25cIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlVGl0bGUgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgIFtzdWJ0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgICAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ0RhdGE+XG4gICAgICA8ZGl2IGNsYXNzPVwicC0xNiB0ZXh0LWNlbnRlclwiPlxuICAgICAgICA8Yzh5LWxvYWRpbmc+PC9jOHktbG9hZGluZz5cbiAgICAgIDwvZGl2PlxuICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cImJnLWluaGVyaXRcIlxuICAgICAgKm5nSWY9XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jIGFzIGFzc2V0OyBlbHNlIG5vRGV2aWNlRW1wdHlTdGF0ZVwiXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cInAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc3RpY2t5LXRvcCBiZy1pbmhlcml0IHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgPHBcbiAgICAgICAgICBjbGFzcz1cInRleHQtbWVkaXVtIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgICAgIFt0aXRsZV09XCJ0aW1lbGluZVR5cGVUZXh0cy5hdmFpbGFibGVJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgPlxuICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmF2YWlsYWJsZUl0ZW1zVGl0bGUgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9wPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1ncm91cCBpbnB1dC1ncm91cC1zZWFyY2ggbS10LTRcIlxuICAgICAgICAgICAgaWQ9XCJzZWFyY2hcIlxuICAgICAgICAgICAgKm5nSWY9XCIhKGxvYWRpbmdJdGVtcyQgfCBhc3luYylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICBjbGFzcz1cImZvcm0tY29udHJvbFwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVy4oCmXCJcbiAgICAgICAgICAgICAgdHlwZT1cInNlYXJjaFwiXG4gICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnB1dC1ncm91cC1hZGRvblwiPlxuICAgICAgICAgICAgICA8aVxuICAgICAgICAgICAgICAgIGM4eUljb249XCJzZWFyY2hcIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWZpbHRlclN0cmluZzsgZWxzZSBjbGVhckZpbHRlclN0cmluZ1wiXG4gICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY2xlYXJGaWx0ZXJTdHJpbmc+XG4gICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1tdXRlZFwiXG4gICAgICAgICAgICAgICAgICBjOHlJY29uPVwidGltZXNcIlxuICAgICAgICAgICAgICAgICAgKm5nSWY9XCJmaWx0ZXJTdHJpbmdcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbHRlclN0cmluZ0NoYW5nZWQoKVwiXG4gICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImZpbHRlcmVkSXRlbXMkIHwgYXN5bmMgYXMgZmlsdGVyZWRJdGVtczsgZWxzZSBsb2FkaW5nRGF0YVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIShsb2FkaW5nSXRlbXMkIHwgYXN5bmMpOyBlbHNlIGxvYWRpbmdEYXRhXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1zJCB8IGFzeW5jIGFzIGl0ZW1zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicC0xNiBiZy1sZXZlbC0yIHNlcGFyYXRvci1ib3R0b21cIj5cbiAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1pbmZvIG0tci00XCJcbiAgICAgICAgICAgICAgICAgICAgYzh5SWNvbj1cImluZm8tY2lyY2xlXCJcbiAgICAgICAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHRpbWVsaW5lVHlwZVRleHRzLnJlY2VudEl0ZW1zV2FybmluZ1RpdGxlIHwgdHJhbnNsYXRlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMucmVjZW50SXRlbXNXYXJuaW5nVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuYWRkQ3VzdG9tVGV4dCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwLXQtMTZcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIlxuICAgICAgICAgICAgICAgICAgYXJpYS1jb250cm9scz1cImNvbGxhcHNlQ3VzdG9tSXRlbUZvcm1cIlxuICAgICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1leHBhbmRlZF09XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJpc0V4cGFuZGVkID0gIWlzRXhwYW5kZWRcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmFkZEN1c3RvbUl0ZW1CdXR0b25MYWJlbCB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY29sbGFwc2VcIlxuICAgICAgICAgICAgICAgICAgaWQ9XCJjb2xsYXBzZUN1c3RvbUl0ZW1Gb3JtXCJcbiAgICAgICAgICAgICAgICAgIFtjb2xsYXBzZV09XCIhaXNFeHBhbmRlZFwiXG4gICAgICAgICAgICAgICAgICBbaXNBbmltYXRlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IFtzdHlsZS5taW4taGVpZ2h0XT1cIicyMzBweCdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGM4eS1jdXN0b20tYWxhcm0tZXZlbnQtZm9ybVxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1ibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJpc0V4cGFuZGVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbdGltZWxpbmVUeXBlXT1cInRpbWVsaW5lVHlwZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3RhcmdldF09XCJhc3NldFNlbGVjdGlvbiB8IGFzeW5jXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgIFtkZWZhdWx0Q29sb3JdPVwiZGVmYXVsdENvbG9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudCk7IGlzRXhwYW5kZWQgPSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNhbmNlbCk9XCJpc0V4cGFuZGVkID0gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIlxuICAgICAgICAgICAgICAgICAgICA+PC9jOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzcz1cInAtMTZcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFmaWx0ZXJlZEl0ZW1zLmxlbmd0aFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICAgICAgICAgICAgICBbaWNvbl09XCJ0aW1lbGluZVR5cGVUZXh0cy5lbXB0eVN0YXRlSWNvblwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgW3N1YnRpdGxlXT1cIlxuICAgICAgICAgICAgICAgICAgaXRlbXMubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgID8gKCdUcnkgYW5vdGhlciBmaWx0ZXIgdGVybS4nIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgICAgICA6ICh0aW1lbGluZVR5cGVUZXh0cy5hc3NldFdpdGhOb0l0ZW1zRW1wdHlTdGF0ZVN1YnRpdGxlIHwgdHJhbnNsYXRlKVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2hvcml6b250YWxdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICA8Yzh5LWxpc3QtZ3JvdXA+XG4gICAgICAgICAgICAgIDxjOHktbGlzdC1pdGVtXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzdGlja3ktdG9wXCJcbiAgICAgICAgICAgICAgICBzdHlsZT1cInRvcDogNzJweFwiXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpdGVtcy5sZW5ndGggPiBtYXhOdW1iZXJPZkl0ZW1zICYmIGZpbHRlcmVkSXRlbXMubGVuZ3RoID49IG1heE51bWJlck9mSXRlbXNcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LXdhcm5pbmcgbS1iLTBcIj5cbiAgICAgICAgICAgICAgICAgIHt7IHRpbWVsaW5lVHlwZVRleHRzLmxhcmdlTnVtYmVyT2ZJdGVtc0luZm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPC9jOHktbGlzdC1pdGVtPlxuICAgICAgICAgICAgICA8Yzh5LWFsYXJtLWV2ZW50LXNlbGVjdG9yLWxpc3QtaXRlbVxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZC1jb250ZW50c1wiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW2lzU2VsZWN0ZWRdPVwic2VsZWN0ZWRJdGVtcyB8IGluY2x1ZGVzQWxhcm1PckV2ZW50OiBpdGVtXCJcbiAgICAgICAgICAgICAgICAoYWRkZWQpPVwiaXRlbUFkZGVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChyZW1vdmVkKT1cIml0ZW1SZW1vdmVkKCRldmVudClcIlxuICAgICAgICAgICAgICAgIFtoaWdobGlnaHRUZXh0XT1cImZpbHRlclN0cmluZ0NoYW5nZXMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICAgICAgICAgICAgICBbaGlkZVNvdXJjZV09XCJoaWRlU291cmNlXCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBmaWx0ZXJlZEl0ZW1zOyB0cmFja0J5OiB0cmFja0J5Rm5cIlxuICAgICAgICAgICAgICA+PC9jOHktYWxhcm0tZXZlbnQtc2VsZWN0b3ItbGlzdC1pdGVtPlxuICAgICAgICAgICAgPC9jOHktbGlzdC1ncm91cD5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBsYXN0IGNvbHVtbiAgLS0+XG4gIDxkaXYgY2xhc3M9XCJpbm5lci1zY3JvbGwgYmctbGV2ZWwtMVwiPlxuICAgIDxwXG4gICAgICBjbGFzcz1cInRleHQtbWVkaXVtIG0tYi00IHAtbC0xNiBwLXItMTYgcC10LTggcC1iLTggc2VwYXJhdG9yLWJvdHRvbSBzdGlja3ktdG9wIHRleHQtdHJ1bmNhdGVcIlxuICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLnNlbGVjdGVkSXRlbXNUaXRsZSB8IHRyYW5zbGF0ZVwiXG4gICAgPlxuICAgICAge3sgdGltZWxpbmVUeXBlVGV4dHMuc2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZmxleC13cmFwIGdhcC04IHAtbC0xNiBwLXItMTYgcC1iLTE2XCI+XG4gICAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICAgIFtpY29uXT1cInRpbWVsaW5lVHlwZVRleHRzLmVtcHR5U3RhdGVJY29uXCJcbiAgICAgICAgW3RpdGxlXT1cInRpbWVsaW5lVHlwZVRleHRzLm5vU2VsZWN0ZWRJdGVtc1RpdGxlIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgKm5nSWY9XCIhc2VsZWN0ZWRJdGVtcyB8fCAhc2VsZWN0ZWRJdGVtcy5sZW5ndGhcIlxuICAgICAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cblxuICAgICAgPGRpdlxuICAgICAgICBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgJ2M4eS1hbGFybS1waWxsJzogdGltZWxpbmVUeXBlID09PSAnQUxBUk0nLFxuICAgICAgICAgICdjOHktZXZlbnQtcGlsbCc6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IHNlbGVjdGVkSXRlbSBvZiBzZWxlY3RlZEl0ZW1zXCJcbiAgICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIFt0aXRsZV09XCInUmVtb3ZlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgJ2M4eS1hbGFybS1waWxsX19idG4nOiB0aW1lbGluZVR5cGUgPT09ICdBTEFSTScsXG4gICAgICAgICAgICAnYzh5LWV2ZW50LXBpbGxfX2J0bic6IHRpbWVsaW5lVHlwZSA9PT0gJ0VWRU5UJ1xuICAgICAgICAgIH1cIlxuICAgICAgICAgIChjbGljayk9XCJpdGVtUmVtb3ZlZChzZWxlY3RlZEl0ZW0pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpXG4gICAgICAgICAgICBjbGFzcz1cImljb24tMTRcIlxuICAgICAgICAgICAgYzh5SWNvbj1cInJlbW92ZVwiXG4gICAgICAgICAgPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImM4eS1kYXRhcG9pbnQtcGlsbF9fbGFiZWxcIlxuICAgICAgICAgIFt0aXRsZV09XCJzZWxlY3RlZEl0ZW0ubGFiZWwgfHwgc2VsZWN0ZWRJdGVtLmZpbHRlcnMudHlwZVwiXG4gICAgICAgID5cbiAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgY2xhc3M9XCJjaXJjbGUtaWNvbi13cmFwcGVyIGNpcmNsZS1pY29uLXdyYXBwZXItLXNtYWxsIG0tci00XCJcbiAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kLWNvbG9yXT1cInNlbGVjdGVkSXRlbS5jb2xvciB8fCBkZWZhdWx0Q29sb3JcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpXG4gICAgICAgICAgICAgIGNsYXNzPVwic3Ryb2tlZC1pY29uXCJcbiAgICAgICAgICAgICAgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnQUxBUk0nID8gJ2JlbGwnIDogJ2M4eS1ldmVudHMnXCJcbiAgICAgICAgICAgID48L2k+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC10cnVuY2F0ZVwiPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXRydW5jYXRlXCI+e3sgc2VsZWN0ZWRJdGVtLmxhYmVsIHx8IHNlbGVjdGVkSXRlbS5maWx0ZXJzLnR5cGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c21hbGxcbiAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LW11dGVkIHRleHQtMTBcIlxuICAgICAgICAgICAgICAqbmdJZj1cIiFoaWRlU291cmNlICYmIHNlbGVjdGVkSXRlbT8uX190YXJnZXQ/Lm5hbWVcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICB7eyBzZWxlY3RlZEl0ZW0/Ll9fdGFyZ2V0Py5uYW1lIH19XG4gICAgICAgICAgICA8L3NtYWxsPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -11,6 +11,7 @@ export class CustomAlarmEventFormComponent {
11
11
  constructor(formBuilder) {
12
12
  this.formBuilder = formBuilder;
13
13
  this.omitProperties = {};
14
+ this.selectedItems = [];
14
15
  this.added = new EventEmitter();
15
16
  this.cancel = new EventEmitter();
16
17
  this.destroy$ = new Subject();
@@ -45,17 +46,19 @@ export class CustomAlarmEventFormComponent {
45
46
  return obj;
46
47
  }
47
48
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomAlarmEventFormComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); }
48
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: { timelineType: "timelineType", target: "target", omitProperties: "omitProperties", defaultColor: "defaultColor" }, outputs: { added: "added", cancel: "cancel" }, ngImport: i0, template: "<form [formGroup]=\"formGroup\" class=\"p-16\">\n <div\n *ngIf=\"!omitProperties.color\"\n class=\"form-group d-flex a-i-center gap-8\"\n [title]=\"'Change color' | translate\"\n >\n <label class=\"m-0\">{{ 'Color' | translate }}</label>\n <div class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--event': timelineType === 'EVENT',\n 'c8y-colorpicker--alarm': timelineType !== 'EVENT'\n }\"\n >\n <input\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\">\n <i [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"></i>\n </span>\n </div>\n </div>\n\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n ></c8y-alarm-event-attributes-form>\n\n <div class=\"d-flex p-t-16\">\n <button class=\"btn btn-default btn-sm\" (click)=\"cancel.emit()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"(valid$ | async) === false\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Select' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.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: "component", type: i4.AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: ["timelineType", "omitProperties"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
49
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.9", type: CustomAlarmEventFormComponent, selector: "c8y-custom-alarm-event-form", inputs: { timelineType: "timelineType", target: "target", omitProperties: "omitProperties", selectedItems: "selectedItems", defaultColor: "defaultColor" }, outputs: { added: "added", cancel: "cancel" }, ngImport: i0, template: "<form [formGroup]=\"formGroup\" class=\"p-16\">\n <div\n *ngIf=\"!omitProperties.color\"\n class=\"form-group d-flex a-i-center gap-8\"\n [title]=\"'Change color' | translate\"\n >\n <label class=\"m-0\">{{ 'Color' | translate }}</label>\n <div class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--event': timelineType === 'EVENT',\n 'c8y-colorpicker--alarm': timelineType !== 'EVENT'\n }\"\n >\n <input\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\">\n <i [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"></i>\n </span>\n </div>\n </div>\n\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n [selectedItems]=\"selectedItems\"\n ></c8y-alarm-event-attributes-form>\n\n <div class=\"d-flex p-t-16\">\n <button class=\"btn btn-default btn-sm\" (click)=\"cancel.emit()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"(valid$ | async) === false\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Select' | translate }}\n </button>\n </div>\n</form>\n", dependencies: [{ kind: "directive", type: i2.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.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: "component", type: i4.AlarmEventAttributesFormComponent, selector: "c8y-alarm-event-attributes-form", inputs: ["timelineType", "omitProperties", "selectedItems"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }] }); }
49
50
  }
50
51
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImport: i0, type: CustomAlarmEventFormComponent, decorators: [{
51
52
  type: Component,
52
- args: [{ selector: 'c8y-custom-alarm-event-form', template: "<form [formGroup]=\"formGroup\" class=\"p-16\">\n <div\n *ngIf=\"!omitProperties.color\"\n class=\"form-group d-flex a-i-center gap-8\"\n [title]=\"'Change color' | translate\"\n >\n <label class=\"m-0\">{{ 'Color' | translate }}</label>\n <div class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--event': timelineType === 'EVENT',\n 'c8y-colorpicker--alarm': timelineType !== 'EVENT'\n }\"\n >\n <input\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\">\n <i [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"></i>\n </span>\n </div>\n </div>\n\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n ></c8y-alarm-event-attributes-form>\n\n <div class=\"d-flex p-t-16\">\n <button class=\"btn btn-default btn-sm\" (click)=\"cancel.emit()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"(valid$ | async) === false\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Select' | translate }}\n </button>\n </div>\n</form>\n" }]
53
+ args: [{ selector: 'c8y-custom-alarm-event-form', template: "<form [formGroup]=\"formGroup\" class=\"p-16\">\n <div\n *ngIf=\"!omitProperties.color\"\n class=\"form-group d-flex a-i-center gap-8\"\n [title]=\"'Change color' | translate\"\n >\n <label class=\"m-0\">{{ 'Color' | translate }}</label>\n <div class=\"c8y-colorpicker\"\n [ngClass]=\"{\n 'c8y-colorpicker--event': timelineType === 'EVENT',\n 'c8y-colorpicker--alarm': timelineType !== 'EVENT'\n }\"\n >\n <input\n type=\"color\"\n formControlName=\"color\"\n (click)=\"$event.stopPropagation()\"\n />\n <span [style.background-color]=\"formGroup.value.color\">\n <i [c8yIcon]=\"timelineType === 'EVENT' ? 'c8y-events' : 'bell'\"></i>\n </span>\n </div>\n </div>\n\n <c8y-alarm-event-attributes-form\n formControlName=\"details\"\n [timelineType]=\"timelineType\"\n [omitProperties]=\"omitProperties\"\n [selectedItems]=\"selectedItems\"\n ></c8y-alarm-event-attributes-form>\n\n <div class=\"d-flex p-t-16\">\n <button class=\"btn btn-default btn-sm\" (click)=\"cancel.emit()\">\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n [disabled]=\"(valid$ | async) === false\"\n (click)=\"add()\"\n >\n <i c8yIcon=\"plus-circle\"></i>\n {{ 'Select' | translate }}\n </button>\n </div>\n</form>\n" }]
53
54
  }], ctorParameters: () => [{ type: i1.FormBuilder }], propDecorators: { timelineType: [{
54
55
  type: Input
55
56
  }], target: [{
56
57
  type: Input
57
58
  }], omitProperties: [{
58
59
  type: Input
60
+ }], selectedItems: [{
61
+ type: Input
59
62
  }], defaultColor: [{
60
63
  type: Input
61
64
  }], added: [{
@@ -63,4 +66,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.9", ngImpor
63
66
  }], cancel: [{
64
67
  type: Output
65
68
  }] } });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU8zQyxNQUFNLE9BQU8sNkJBQTZCO0lBWXhDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVG5DLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUUzQyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQWdCLENBQUM7UUFDekMsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFJcEMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFHckMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN0QyxPQUFPLEVBQUUsRUFBRTtZQUNYLEtBQUssRUFBRSxFQUFFO1lBQ1QsUUFBUSxFQUFFLEVBQUU7WUFDWixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUM3QyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssT0FBTyxDQUFDLEVBQzNCLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FDakIsQ0FBQztJQUNKLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDeEIsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQ3hCLFFBQVEsRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNyQixPQUFPLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRTtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRUQsR0FBRztRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM3QixDQUFDO0lBQ0gsQ0FBQztJQUVPLGtCQUFrQixDQUFDLFNBQWM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ25CLE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQzs4R0FuRFUsNkJBQTZCO2tHQUE3Qiw2QkFBNkIsOE9DWDFDLG8wQ0E0Q0E7OzJGRGpDYSw2QkFBNkI7a0JBSnpDLFNBQVM7K0JBQ0UsNkJBQTZCO2dGQUk5QixZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFsYXJtT3JFdmVudCwgT21pdFNlbGVjdG9yUHJvcGVydGllcywgVGltZWxpbmVUeXBlIH0gZnJvbSAnLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUFsYXJtRXZlbnRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZTtcbiAgQElucHV0KCkgdGFyZ2V0OiBJSWRlbnRpZmllZDtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcbiAgQElucHV0KCkgZGVmYXVsdENvbG9yOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QWxhcm1PckV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICB2YWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGRldGFpbHM6IFtdLFxuICAgICAgY29sb3I6IFtdLFxuICAgICAgX19hY3RpdmU6IFtdLFxuICAgICAgX190YXJnZXQ6IFtdXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkJCA9IHRoaXMuZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcCh2YWwgPT4gdmFsID09PSAnVkFMSUQnKSxcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBjb2xvcjogdGhpcy5kZWZhdWx0Q29sb3IsXG4gICAgICBfX3RhcmdldDogdGhpcy50YXJnZXQsXG4gICAgICBkZXRhaWxzOiB7IHRpbWVsaW5lVHlwZTogdGhpcy50aW1lbGluZVR5cGUgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYWRkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy50cmFuc2Zvcm1Gb3JtVmFsdWUodGhpcy5mb3JtR3JvdXAudmFsdWUpO1xuICAgICAgdGhpcy5hZGRlZC5lbWl0KGZvcm1WYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Gb3JtVmFsdWUoZm9ybVZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBmb3JtVmFsdWUuZGV0YWlscyB8fCB7fSwgZm9ybVZhbHVlKTtcbiAgICBkZWxldGUgb2JqLmRldGFpbHM7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInAtMTZcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIW9taXRQcm9wZXJ0aWVzLmNvbG9yXCJcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLThcIlxuICAgIFt0aXRsZV09XCInQ2hhbmdlIGNvbG9yJyB8IHRyYW5zbGF0ZVwiXG4gID5cbiAgICA8bGFiZWwgY2xhc3M9XCJtLTBcIj57eyAnQ29sb3InIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2M4eS1jb2xvcnBpY2tlci0tZXZlbnQnOiB0aW1lbGluZVR5cGUgPT09ICdFVkVOVCcsXG4gICAgICAgICdjOHktY29sb3JwaWNrZXItLWFsYXJtJzogdGltZWxpbmVUeXBlICE9PSAnRVZFTlQnXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29sb3JcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmb3JtR3JvdXAudmFsdWUuY29sb3JcIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnRVZFTlQnID8gJ2M4eS1ldmVudHMnIDogJ2JlbGwnXCI+PC9pPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Yzh5LWFsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybVxuICAgIGZvcm1Db250cm9sTmFtZT1cImRldGFpbHNcIlxuICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICA+PC9jOHktYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtPlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcC10LTE2XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIiAoY2xpY2spPVwiY2FuY2VsLmVtaXQoKVwiPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgW2Rpc2FibGVkXT1cIih2YWxpZCQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgIChjbGljayk9XCJhZGQoKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IvY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGdCQUFnQixDQUFDO0FBRXhELE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzNELE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7OztBQU8zQyxNQUFNLE9BQU8sNkJBQTZCO0lBYXhDLFlBQW9CLFdBQXdCO1FBQXhCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBVm5DLG1CQUFjLEdBQTJCLEVBQUUsQ0FBQztRQUM1QyxrQkFBYSxHQUFtQixFQUFFLENBQUM7UUFFbEMsVUFBSyxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3pDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBSXBDLGFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBR3JDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDdEMsT0FBTyxFQUFFLEVBQUU7WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1lBQ1osUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLElBQUksQ0FDN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFDeEIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLE9BQU8sQ0FBQyxFQUMzQixTQUFTLENBQUMsS0FBSyxDQUFDLENBQ2pCLENBQUM7SUFDSixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDO1lBQ3hCLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWTtZQUN4QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDckIsT0FBTyxFQUFFLEVBQUUsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZLEVBQUU7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVELEdBQUc7UUFDRCxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7WUFDekIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxTQUFjO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLFNBQVMsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUNuQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7OEdBcERVLDZCQUE2QjtrR0FBN0IsNkJBQTZCLDhRQ1gxQywyMkNBNkNBOzsyRkRsQ2EsNkJBQTZCO2tCQUp6QyxTQUFTOytCQUNFLDZCQUE2QjtnRkFJOUIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxNQUFNO3NCQUFkLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0ksS0FBSztzQkFBZCxNQUFNO2dCQUNHLE1BQU07c0JBQWYsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFsYXJtT3JFdmVudCwgT21pdFNlbGVjdG9yUHJvcGVydGllcywgVGltZWxpbmVUeXBlIH0gZnJvbSAnLi4vYWxhcm0tZXZlbnQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgbWFwLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IElJZGVudGlmaWVkIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vY3VzdG9tLWFsYXJtLWV2ZW50LWZvcm0uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEN1c3RvbUFsYXJtRXZlbnRGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoKSB0aW1lbGluZVR5cGU6IFRpbWVsaW5lVHlwZTtcbiAgQElucHV0KCkgdGFyZ2V0OiBJSWRlbnRpZmllZDtcbiAgQElucHV0KCkgb21pdFByb3BlcnRpZXM6IE9taXRTZWxlY3RvclByb3BlcnRpZXMgPSB7fTtcbiAgQElucHV0KCkgc2VsZWN0ZWRJdGVtczogQWxhcm1PckV2ZW50W10gPSBbXTtcbiAgQElucHV0KCkgZGVmYXVsdENvbG9yOiBzdHJpbmc7XG4gIEBPdXRwdXQoKSBhZGRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QWxhcm1PckV2ZW50PigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIGZvcm1Hcm91cDogRm9ybUdyb3VwO1xuICB2YWxpZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAgPSB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGRldGFpbHM6IFtdLFxuICAgICAgY29sb3I6IFtdLFxuICAgICAgX19hY3RpdmU6IFtdLFxuICAgICAgX190YXJnZXQ6IFtdXG4gICAgfSk7XG5cbiAgICB0aGlzLnZhbGlkJCA9IHRoaXMuZm9ybUdyb3VwLnN0YXR1c0NoYW5nZXMucGlwZShcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSxcbiAgICAgIG1hcCh2YWwgPT4gdmFsID09PSAnVkFMSUQnKSxcbiAgICAgIHN0YXJ0V2l0aChmYWxzZSlcbiAgICApO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtR3JvdXAucGF0Y2hWYWx1ZSh7XG4gICAgICBjb2xvcjogdGhpcy5kZWZhdWx0Q29sb3IsXG4gICAgICBfX3RhcmdldDogdGhpcy50YXJnZXQsXG4gICAgICBkZXRhaWxzOiB7IHRpbWVsaW5lVHlwZTogdGhpcy50aW1lbGluZVR5cGUgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgYWRkKCkge1xuICAgIGlmICh0aGlzLmZvcm1Hcm91cC52YWxpZCkge1xuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy50cmFuc2Zvcm1Gb3JtVmFsdWUodGhpcy5mb3JtR3JvdXAudmFsdWUpO1xuICAgICAgdGhpcy5hZGRlZC5lbWl0KGZvcm1WYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Gb3JtVmFsdWUoZm9ybVZhbHVlOiBhbnkpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuYXNzaWduKHt9LCBmb3JtVmFsdWUuZGV0YWlscyB8fCB7fSwgZm9ybVZhbHVlKTtcbiAgICBkZWxldGUgb2JqLmRldGFpbHM7XG4gICAgcmV0dXJuIG9iajtcbiAgfVxufVxuIiwiPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtR3JvdXBcIiBjbGFzcz1cInAtMTZcIj5cbiAgPGRpdlxuICAgICpuZ0lmPVwiIW9taXRQcm9wZXJ0aWVzLmNvbG9yXCJcbiAgICBjbGFzcz1cImZvcm0tZ3JvdXAgZC1mbGV4IGEtaS1jZW50ZXIgZ2FwLThcIlxuICAgIFt0aXRsZV09XCInQ2hhbmdlIGNvbG9yJyB8IHRyYW5zbGF0ZVwiXG4gID5cbiAgICA8bGFiZWwgY2xhc3M9XCJtLTBcIj57eyAnQ29sb3InIHwgdHJhbnNsYXRlIH19PC9sYWJlbD5cbiAgICA8ZGl2IGNsYXNzPVwiYzh5LWNvbG9ycGlja2VyXCJcbiAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgJ2M4eS1jb2xvcnBpY2tlci0tZXZlbnQnOiB0aW1lbGluZVR5cGUgPT09ICdFVkVOVCcsXG4gICAgICAgICdjOHktY29sb3JwaWNrZXItLWFsYXJtJzogdGltZWxpbmVUeXBlICE9PSAnRVZFTlQnXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgdHlwZT1cImNvbG9yXCJcbiAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29sb3JcIlxuICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgIC8+XG4gICAgICA8c3BhbiBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJmb3JtR3JvdXAudmFsdWUuY29sb3JcIj5cbiAgICAgICAgPGkgW2M4eUljb25dPVwidGltZWxpbmVUeXBlID09PSAnRVZFTlQnID8gJ2M4eS1ldmVudHMnIDogJ2JlbGwnXCI+PC9pPlxuICAgICAgPC9zcGFuPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8Yzh5LWFsYXJtLWV2ZW50LWF0dHJpYnV0ZXMtZm9ybVxuICAgIGZvcm1Db250cm9sTmFtZT1cImRldGFpbHNcIlxuICAgIFt0aW1lbGluZVR5cGVdPVwidGltZWxpbmVUeXBlXCJcbiAgICBbb21pdFByb3BlcnRpZXNdPVwib21pdFByb3BlcnRpZXNcIlxuICAgIFtzZWxlY3RlZEl0ZW1zXT1cInNlbGVjdGVkSXRlbXNcIlxuICA+PC9jOHktYWxhcm0tZXZlbnQtYXR0cmlidXRlcy1mb3JtPlxuXG4gIDxkaXYgY2xhc3M9XCJkLWZsZXggcC10LTE2XCI+XG4gICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBidG4tc21cIiAoY2xpY2spPVwiY2FuY2VsLmVtaXQoKVwiPlxuICAgICAge3sgJ0NhbmNlbCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgICA8YnV0dG9uXG4gICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBidG4tc21cIlxuICAgICAgW2Rpc2FibGVkXT1cIih2YWxpZCQgfCBhc3luYykgPT09IGZhbHNlXCJcbiAgICAgIChjbGljayk9XCJhZGQoKVwiXG4gICAgPlxuICAgICAgPGkgYzh5SWNvbj1cInBsdXMtY2lyY2xlXCI+PC9pPlxuICAgICAge3sgJ1NlbGVjdCcgfCB0cmFuc2xhdGUgfX1cbiAgICA8L2J1dHRvbj5cbiAgPC9kaXY+XG48L2Zvcm0+XG4iXX0=