@c8y/ngx-components 1018.0.252 → 1018.0.256

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,12 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { UserGroupService } from '@c8y/client';
3
- import { GainsightService, Item } from '@c8y/ngx-components';
3
+ import { GainsightService, Item, Permissions } from '@c8y/ngx-components';
4
4
  import { DashboardGlobalRoles } from './context-dashboard.model';
5
5
  import * as i0 from "@angular/core";
6
6
  export declare class DashboardAvailabilityComponent implements OnInit {
7
7
  private userGroupService;
8
8
  private gainsightService;
9
+ private permissions;
9
10
  /**
10
11
  * Ids of global roles assigned to the dashboard or a string "all" indicating the selection of all global roles.
11
12
  * The value undefined is treated as equivalent to 'all'.
@@ -15,10 +16,11 @@ export declare class DashboardAvailabilityComponent implements OnInit {
15
16
  globalRolesIdsChange: EventEmitter<DashboardGlobalRoles>;
16
17
  globalRolesItems: Item[];
17
18
  globalRolesItemsSelected: Item[];
19
+ selectHidden: boolean;
18
20
  private globalRoles;
19
21
  private PAGE_SIZE;
20
22
  private _globalRolesIds;
21
- constructor(userGroupService: UserGroupService, gainsightService: GainsightService);
23
+ constructor(userGroupService: UserGroupService, gainsightService: GainsightService, permissions: Permissions);
22
24
  ngOnInit(): Promise<void>;
23
25
  onSelected(items: Item[]): void;
24
26
  private getGlobalRoles;
@@ -1,18 +1,21 @@
1
1
  import { Component, EventEmitter, Input, Output } from '@angular/core';
2
2
  import { UserGroupService } from '@c8y/client';
3
- import { GainsightService } from '@c8y/ngx-components';
3
+ import { GainsightService, Permissions } from '@c8y/ngx-components';
4
4
  import { ALL_GLOBAL_ROLES_SELECTED, PRODUCT_EXPERIENCE } from './context-dashboard.model';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "@c8y/client";
7
7
  import * as i2 from "@c8y/ngx-components";
8
- import * as i3 from "ngx-bootstrap/popover";
8
+ import * as i3 from "@angular/common";
9
+ import * as i4 from "ngx-bootstrap/popover";
9
10
  export class DashboardAvailabilityComponent {
10
- constructor(userGroupService, gainsightService) {
11
+ constructor(userGroupService, gainsightService, permissions) {
11
12
  this.userGroupService = userGroupService;
12
13
  this.gainsightService = gainsightService;
14
+ this.permissions = permissions;
13
15
  this.globalRolesIdsChange = new EventEmitter();
14
16
  this.globalRolesItems = [];
15
17
  this.globalRolesItemsSelected = [];
18
+ this.selectHidden = false;
16
19
  this.globalRoles = [];
17
20
  this.PAGE_SIZE = 100;
18
21
  }
@@ -31,9 +34,14 @@ export class DashboardAvailabilityComponent {
31
34
  this._globalRolesIds = [...ids];
32
35
  }
33
36
  async ngOnInit() {
34
- this.globalRoles = await this.getGlobalRoles();
35
- this.globalRolesItems = this.mapGlobalRolesToItems();
36
- this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();
37
+ if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {
38
+ this.globalRoles = await this.getGlobalRoles();
39
+ this.globalRolesItems = this.mapGlobalRolesToItems();
40
+ this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();
41
+ }
42
+ else {
43
+ this.selectHidden = true;
44
+ }
37
45
  }
38
46
  onSelected(items) {
39
47
  if (!items || !Array.isArray(items)) {
@@ -77,14 +85,14 @@ export class DashboardAvailabilityComponent {
77
85
  .filter(Boolean);
78
86
  }
79
87
  }
80
- DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
81
- DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i3.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
88
+ DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i2.GainsightService }, { token: i2.Permissions }], target: i0.ɵɵFactoryTarget.Component });
89
+ DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n *ngIf=\"!selectHidden\"\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n</c8y-form-group>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] });
82
90
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
83
91
  type: Component,
84
- args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
85
- }], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i2.GainsightService }]; }, propDecorators: { globalRolesIds: [{
92
+ args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n *ngIf=\"!selectHidden\"\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n</c8y-form-group>\n" }]
93
+ }], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i2.GainsightService }, { type: i2.Permissions }]; }, propDecorators: { globalRolesIds: [{
86
94
  type: Input
87
95
  }], globalRolesIdsChange: [{
88
96
  type: Output
89
97
  }] } });
90
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFRLE1BQU0scUJBQXFCLENBQUM7QUFDN0QsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixrQkFBa0IsRUFDbkIsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7QUFNbkMsTUFBTSxPQUFPLDhCQUE4QjtJQXVCekMsWUFDVSxnQkFBa0MsRUFDbEMsZ0JBQWtDO1FBRGxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQVRsQyx5QkFBb0IsR0FBRyxJQUFJLFlBQVksRUFBd0IsQ0FBQztRQUMxRSxxQkFBZ0IsR0FBVyxFQUFFLENBQUM7UUFDOUIsNkJBQXdCLEdBQVcsRUFBRSxDQUFDO1FBQzlCLGdCQUFXLEdBQWlCLEVBQUUsQ0FBQztRQUMvQixjQUFTLEdBQUcsR0FBRyxDQUFDO0lBTXJCLENBQUM7SUF6Qko7OztPQUdHO0lBQ0gsSUFDSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQztJQUM5QixDQUFDO0lBQ0QsSUFBSSxjQUFjLENBQUMsR0FBeUI7UUFDMUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUsseUJBQXlCLEVBQUU7WUFDN0MsSUFBSSxDQUFD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QUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQzthQUM3RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQzs7MkhBL0VVLDhCQUE4QjsrR0FBOUIsOEJBQThCLDJLQ2IzQyxnMkJBNEJBOzJGRGZhLDhCQUE4QjtrQkFKMUMsU0FBUzsrQkFDRSw0QkFBNEI7c0lBU2xDLGNBQWM7c0JBRGpCLEtBQUs7Z0JBV0ksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVVzZXJHcm91cCwgVXNlckdyb3VwU2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEdhaW5zaWdodFNlcnZpY2UsIEl0ZW0gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIERhc2hib2FyZEdsb2JhbFJvbGVzLFxuICBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVELFxuICBQUk9EVUNUX0VYUEVSSUVOQ0Vcbn0gZnJvbSAnLi9jb250ZXh0LWRhc2hib2FyZC5tb2RlbCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1kYXNoYm9hcmQtYXZhaWxhYmlsaXR5JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIERhc2hib2FyZEF2YWlsYWJpbGl0eUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIC8qKlxuICAgKiBJZHMgb2YgZ2xvYmFsIHJvbGVzIGFzc2lnbmVkIHRvIHRoZSBkYXNoYm9hcmQgb3IgYSBzdHJpbmcgXCJhbGxcIiBpbmRpY2F0aW5nIHRoZSBzZWxlY3Rpb24gb2YgYWxsIGdsb2JhbCByb2xlcy5cbiAgICogVGhlIHZhbHVlIHVuZGVmaW5lZCBpcyB0cmVhdGVkIGFzIGVxdWl2YWxlbnQgdG8gJ2FsbCcuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgZ2xvYmFsUm9sZXNJZHMoKTogRGFzaGJvYXJkR2xvYmFsUm9sZXMge1xuICAgIHJldHVybiB0aGlzLl9nbG9iYWxSb2xlc0lkcztcbiAgfVxuICBzZXQgZ2xvYmFsUm9sZXNJZHMoaWRzOiBEYXNoYm9hcmRHbG9iYWxSb2xlcykge1xuICAgIGlmICghaWRzIHx8IGlkcyA9PT0gQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRCkge1xuICAgICAgdGhpcy5fZ2xvYmFsUm9sZXNJZHMgPSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9nbG9iYWxSb2xlc0lkcyA9IFsuLi5pZHNdO1xuICB9XG4gIEBPdXRwdXQoKSBnbG9iYWxSb2xlc0lkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RGFzaGJvYXJkR2xvYmFsUm9sZXM+KCk7XG4gIGdsb2JhbFJvbGVzSXRlbXM6IEl0ZW1bXSA9IFtdO1xuICBnbG9iYWxSb2xlc0l0ZW1zU2VsZWN0ZWQ6IEl0ZW1bXSA9IFtdO1xuICBwcml2YXRlIGdsb2JhbFJvbGVzOiBJVXNlckdyb3VwW10gPSBbXTtcbiAgcHJpdmF0ZSBQQUdFX1NJWkUgPSAxMDA7XG4gIHByaXZhdGUgX2dsb2JhbFJvbGVzSWRzOiBEYXNoYm9hcmRHbG9iYWxSb2xlcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJHcm91cFNlcnZpY2U6IFVzZXJHcm91cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmdsb2JhbFJvbGVzID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxSb2xlcygpO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtcyA9IHRoaXMubWFwR2xvYmFsUm9sZXNUb0l0ZW1zKCk7XG4gICAgdGhpcy5nbG9iYWxSb2xlc0l0ZW1zU2VsZWN0ZWQgPSB0aGlzLmdldFNlbGVjdGVkR2xvYmFsUm9sZXNJdGVtcygpO1xuICB9XG5cbiAgb25TZWxlY3RlZChpdGVtczogSXRlbVtdKSB7XG4gICAgaWYgKCFpdGVtcyB8fCAhQXJyYXkuaXNBcnJheShpdGVtcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBhbGxJdGVtc1NlbGVjdGVkID0gaXRlbXMubGVuZ3RoID09PSB0aGlzLmdsb2JhbFJvbGVzSXRlbXMubGVuZ3RoO1xuICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkID0gaXRlbXM7XG5cbiAgICBpZiAoYWxsSXRlbXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5nbG9iYWxSb2xlc0lkc0NoYW5nZS5lbWl0KEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRBU0hCT0FSRF9BVkFJTEFCSUxJVFksXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkFQUExZX0dMT0JBTF9ST0xFU19DSEFOR0VTLFxuICAgICAgICBnbG9iYWxSb2xlczogQUxMX0dMT0JBTF9ST0xFU19TRUxFQ1RFRFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkR2xvYmFsUm9sZXNJZHMgPSBpdGVtcy5tYXAoaSA9PiBpLmlkKTtcbiAgICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHNDaGFuZ2UuZW1pdChbLi4uc2VsZWN0ZWRHbG9iYWxSb2xlc0lkc10pO1xuXG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuRVZFTlRTLkRBU0hCT0FSRFMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkNPTVBPTkVOVFMuREFTSEJPQVJEX0FWQUlMQUJJTElUWSxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkFDVElPTlMuQVBQTFlfR0xPQkFMX1JPTEVTX0NIQU5HRVMsXG4gICAgICAgIGdsb2JhbFJvbGVzOiBzZWxlY3RlZEdsb2JhbFJvbGVzSWRzPy5zb3J0KCk/LmpvaW4oKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRHbG9iYWxSb2xlcygpIHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMudXNlckdyb3VwU2VydmljZS5saXN0KHsgcGFnZVNpemU6IHRoaXMuUEFHRV9TSVpFIH0pKS5kYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBHbG9iYWxSb2xlc1RvSXRlbXMoKTogSXRlbVtdIHtcbiAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlcy5tYXAoKHsgbmFtZSwgaWQgfSkgPT4gKHtcbiAgICAgIG5hbWUsXG4gICAgICBpZFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U2VsZWN0ZWRHbG9iYWxSb2xlc0l0ZW1zKCk6IEl0ZW1bXSB7XG4gICAgaWYgKCF0aGlzLmdsb2JhbFJvbGVzSWRzIHx8IHRoaXMuZ2xvYmFsUm9sZXNJZHMgPT09IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQpIHtcbiAgICAgIHJldHVybiB0aGlzLmdsb2JhbFJvbGVzSXRlbXM7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmdsb2JhbFJvbGVzSWRzXG4gICAgICAubWFwKGdsb2JhbFJvbGVJZCA9PiB0aGlzLmdsb2JhbFJvbGVzSXRlbXMuZmluZChnUiA9PiBnUi5pZCA9PT0gZ2xvYmFsUm9sZUlkKSlcbiAgICAgIC5maWx0ZXIoQm9vbGVhbik7XG4gIH1cbn1cbiIsIjxjOHktZm9ybS1ncm91cCBjbGFzcz1cInAtYi0yNCBtLWItMFwiPlxuICA8ZGl2IGNsYXNzPVwibGVnZW5kIGZvcm0tYmxvY2tcIj5cbiAgICA8c3Bhbj57eyAnQXZhaWxhYmlsaXR5YG9mIGRhc2hib2FyZCBiYXNlZCBvbiBwZXJtaXNzaW9uc2AnIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICA8L2Rpdj5cbiAgPGxhYmVsIGZvcj1cImF2YWlsYWJpbGl0eVwiPlxuICAgIDxzcGFuIGNsYXNzPVwibS1yLTRcIiBpZD1cImF2YWlsYWJpbGl0eVwiPlxuICAgICAge3sgJ0dsb2JhbCByb2xlcycgfCB0cmFuc2xhdGUgfX1cbiAgICA8L3NwYW4+XG4gICAgPGJ1dHRvblxuICAgICAgY2xhc3M9XCJidG4taGVscCBidG4taGVscC0tc21cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidIZWxwJyB8IHRyYW5zbGF0ZVwiXG4gICAgICBwb3BvdmVyPVwie3tcbiAgICAgICAgJ1NlbGVjdCB0aGUgZ2xvYmFsIHJvbGVzIGZvciB3aGljaCB0aGUgZGFzaGJvYXJkIHdpbGwgYmUgYXZhaWxhYmxlJyB8IHRyYW5zbGF0ZVxuICAgICAgfX1cIlxuICAgICAgdHJpZ2dlcnM9XCJmb2N1c1wiXG4gICAgICBwbGFjZW1lbnQ9XCJyaWdodFwiXG4gICAgICBjb250YWluZXI9XCJib2R5XCJcbiAgICA+XG4gICAgPC9idXR0b24+XG4gIDwvbGFiZWw+XG4gIDxjOHktc2VsZWN0XG4gICAgc3R5bGU9XCJ3aWR0aDogMTgwcHhcIlxuICAgIFtpdGVtc109XCJnbG9iYWxSb2xlc0l0ZW1zXCJcbiAgICBbc2VsZWN0ZWRdPVwiZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkXCJcbiAgICAob25DaGFuZ2UpPVwib25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgPjwvYzh5LXNlbGVjdD5cbjwvYzh5LWZvcm0tZ3JvdXA+XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9jb250ZXh0LWRhc2hib2FyZC9kYXNoYm9hcmQtYXZhaWxhYmlsaXR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL2NvbnRleHQtZGFzaGJvYXJkL2Rhc2hib2FyZC1hdmFpbGFiaWxpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQWMsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFRLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFFLE9BQU8sRUFFTCx5QkFBeUIsRUFDekIsa0JBQWtCLEVBQ25CLE1BQU0sMkJBQTJCLENBQUM7Ozs7OztBQU1uQyxNQUFNLE9BQU8sOEJBQThCO0lBd0J6QyxZQUNVLGdCQUFrQyxFQUNsQyxnQkFBa0MsRUFDbEMsV0FBd0I7UUFGeEIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBWHhCLHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUF3QixDQUFDO1FBQzFFLHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQUM5Qiw2QkFBd0IsR0FBVyxFQUFFLENBQUM7UUFDdEMsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDYixnQkFBVyxHQUFpQixFQUFFLENBQUM7UUFDL0IsY0FBUyxHQUFHLEdBQUcsQ0FBQztJQU9yQixDQUFDO0lBM0JKOzs7T0FHRztJQUNILElBQ0ksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksY0FB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SUFBSSxJQUFJLENBQUMsY0FBYyxLQUFLLHlCQUF5QixFQUFFO1lBQzdFLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO1NBQzlCO1FBQ0QsT0FBTyxJQUFJLENBQUMsY0FBYzthQUN2QixHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxZQUFZLENBQUMsQ0FBQzthQUM3RSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDckIsQ0FBQzs7MkhBckZVLDhCQUE4QjsrR0FBOUIsOEJBQThCLDJLQ2IzQyw0aENBbUNBOzJGRHRCYSw4QkFBOEI7a0JBSjFDLFNBQVM7K0JBQ0UsNEJBQTRCO2dLQVNsQyxjQUFjO3NCQURqQixLQUFLO2dCQVdJLG9CQUFvQjtzQkFBN0IsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElVc2VyR3JvdXAsIFVzZXJHcm91cFNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBHYWluc2lnaHRTZXJ2aWNlLCBJdGVtLCBQZXJtaXNzaW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHtcbiAgRGFzaGJvYXJkR2xvYmFsUm9sZXMsXG4gIEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQsXG4gIFBST0RVQ1RfRVhQRVJJRU5DRVxufSBmcm9tICcuL2NvbnRleHQtZGFzaGJvYXJkLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRhc2hib2FyZC1hdmFpbGFiaWxpdHknLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFzaGJvYXJkLWF2YWlsYWJpbGl0eS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGFzaGJvYXJkQXZhaWxhYmlsaXR5Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgLyoqXG4gICAqIElkcyBvZiBnbG9iYWwgcm9sZXMgYXNzaWduZWQgdG8gdGhlIGRhc2hib2FyZCBvciBhIHN0cmluZyBcImFsbFwiIGluZGljYXRpbmcgdGhlIHNlbGVjdGlvbiBvZiBhbGwgZ2xvYmFsIHJvbGVzLlxuICAgKiBUaGUgdmFsdWUgdW5kZWZpbmVkIGlzIHRyZWF0ZWQgYXMgZXF1aXZhbGVudCB0byAnYWxsJy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBnbG9iYWxSb2xlc0lkcygpOiBEYXNoYm9hcmRHbG9iYWxSb2xlcyB7XG4gICAgcmV0dXJuIHRoaXMuX2dsb2JhbFJvbGVzSWRzO1xuICB9XG4gIHNldCBnbG9iYWxSb2xlc0lkcyhpZHM6IERhc2hib2FyZEdsb2JhbFJvbGVzKSB7XG4gICAgaWYgKCFpZHMgfHwgaWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKSB7XG4gICAgICB0aGlzLl9nbG9iYWxSb2xlc0lkcyA9IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURUQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2dsb2JhbFJvbGVzSWRzID0gWy4uLmlkc107XG4gIH1cbiAgQE91dHB1dCgpIGdsb2JhbFJvbGVzSWRzQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxEYXNoYm9hcmRHbG9iYWxSb2xlcz4oKTtcbiAgZ2xvYmFsUm9sZXNJdGVtczogSXRlbVtdID0gW107XG4gIGdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZDogSXRlbVtdID0gW107XG4gIHNlbGVjdEhpZGRlbiA9IGZhbHNlO1xuICBwcml2YXRlIGdsb2JhbFJvbGVzOiBJVXNlckdyb3VwW10gPSBbXTtcbiAgcHJpdmF0ZSBQQUdFX1NJWkUgPSAxMDA7XG4gIHByaXZhdGUgX2dsb2JhbFJvbGVzSWRzOiBEYXNoYm9hcmRHbG9iYWxSb2xlcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHVzZXJHcm91cFNlcnZpY2U6IFVzZXJHcm91cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBnYWluc2lnaHRTZXJ2aWNlOiBHYWluc2lnaHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zXG4gICkge31cblxuICBhc3luYyBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5wZXJtaXNzaW9ucy5oYXNSb2xlKFBlcm1pc3Npb25zLlJPTEVfVVNFUl9NQU5BR0VNRU5UX1JFQUQpKSB7XG4gICAgICB0aGlzLmdsb2JhbFJvbGVzID0gYXdhaXQgdGhpcy5nZXRHbG9iYWxSb2xlcygpO1xuICAgICAgdGhpcy5nbG9iYWxSb2xlc0l0ZW1zID0gdGhpcy5tYXBHbG9iYWxSb2xlc1RvSXRlbXMoKTtcbiAgICAgIHRoaXMuZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkID0gdGhpcy5nZXRTZWxlY3RlZEdsb2JhbFJvbGVzSXRlbXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RIaWRkZW4gPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIG9uU2VsZWN0ZWQoaXRlbXM6IEl0ZW1bXSkge1xuICAgIGlmICghaXRlbXMgfHwgIUFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYWxsSXRlbXNTZWxlY3RlZCA9IGl0ZW1zLmxlbmd0aCA9PT0gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zLmxlbmd0aDtcbiAgICB0aGlzLmdsb2JhbFJvbGVzSXRlbXNTZWxlY3RlZCA9IGl0ZW1zO1xuXG4gICAgaWYgKGFsbEl0ZW1zU2VsZWN0ZWQpIHtcbiAgICAgIHRoaXMuZ2xvYmFsUm9sZXNJZHNDaGFuZ2UuZW1pdChBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5FVkVOVFMuREFTSEJPQVJEUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQ09NUE9ORU5UUy5EQVNIQk9BUkRfQVZBSUxBQklMSVRZLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5EQVNIQk9BUkQuQUNUSU9OUy5BUFBMWV9HTE9CQUxfUk9MRVNfQ0hBTkdFUyxcbiAgICAgICAgZ2xvYmFsUm9sZXM6IEFMTF9HTE9CQUxfUk9MRVNfU0VMRUNURURcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZEdsb2JhbFJvbGVzSWRzID0gaXRlbXMubWFwKGkgPT4gaS5pZCk7XG4gICAgICB0aGlzLmdsb2JhbFJvbGVzSWRzQ2hhbmdlLmVtaXQoWy4uLnNlbGVjdGVkR2xvYmFsUm9sZXNJZHNdKTtcblxuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuREFTSEJPQVJELkVWRU5UUy5EQVNIQk9BUkRTLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5DT01QT05FTlRTLkRBU0hCT0FSRF9BVkFJTEFCSUxJVFksXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkRBU0hCT0FSRC5BQ1RJT05TLkFQUExZX0dMT0JBTF9ST0xFU19DSEFOR0VTLFxuICAgICAgICBnbG9iYWxSb2xlczogc2VsZWN0ZWRHbG9iYWxSb2xlc0lkcz8uc29ydCgpPy5qb2luKClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0R2xvYmFsUm9sZXMoKSB7XG4gICAgcmV0dXJuIChhd2FpdCB0aGlzLnVzZXJHcm91cFNlcnZpY2UubGlzdCh7IHBhZ2VTaXplOiB0aGlzLlBBR0VfU0laRSB9KSkuZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgbWFwR2xvYmFsUm9sZXNUb0l0ZW1zKCk6IEl0ZW1bXSB7XG4gICAgcmV0dXJuIHRoaXMuZ2xvYmFsUm9sZXMubWFwKCh7IG5hbWUsIGlkIH0pID0+ICh7XG4gICAgICBuYW1lLFxuICAgICAgaWRcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFNlbGVjdGVkR2xvYmFsUm9sZXNJdGVtcygpOiBJdGVtW10ge1xuICAgIGlmICghdGhpcy5nbG9iYWxSb2xlc0lkcyB8fCB0aGlzLmdsb2JhbFJvbGVzSWRzID09PSBBTExfR0xPQkFMX1JPTEVTX1NFTEVDVEVEKSB7XG4gICAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5nbG9iYWxSb2xlc0lkc1xuICAgICAgLm1hcChnbG9iYWxSb2xlSWQgPT4gdGhpcy5nbG9iYWxSb2xlc0l0ZW1zLmZpbmQoZ1IgPT4gZ1IuaWQgPT09IGdsb2JhbFJvbGVJZCkpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG59XG4iLCI8Yzh5LWZvcm0tZ3JvdXAgY2xhc3M9XCJwLWItMjQgbS1iLTBcIj5cbiAgPGRpdiBjbGFzcz1cImxlZ2VuZCBmb3JtLWJsb2NrXCI+XG4gICAgPHNwYW4+e3sgJ0F2YWlsYWJpbGl0eWBvZiBkYXNoYm9hcmQgYmFzZWQgb24gcGVybWlzc2lvbnNgJyB8IHRyYW5zbGF0ZSB9fTwvc3Bhbj5cbiAgPC9kaXY+XG4gIDxsYWJlbCBmb3I9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICA8c3BhbiBjbGFzcz1cIm0tci00XCIgaWQ9XCJhdmFpbGFiaWxpdHlcIj5cbiAgICAgIHt7ICdHbG9iYWwgcm9sZXMnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9zcGFuPlxuICAgIDxidXR0b25cbiAgICAgIGNsYXNzPVwiYnRuLWhlbHAgYnRuLWhlbHAtLXNtXCJcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSGVscCcgfCB0cmFuc2xhdGVcIlxuICAgICAgcG9wb3Zlcj1cInt7XG4gICAgICAgICdTZWxlY3QgdGhlIGdsb2JhbCByb2xlcyBmb3Igd2hpY2ggdGhlIGRhc2hib2FyZCB3aWxsIGJlIGF2YWlsYWJsZScgfCB0cmFuc2xhdGVcbiAgICAgIH19XCJcbiAgICAgIHRyaWdnZXJzPVwiZm9jdXNcIlxuICAgICAgcGxhY2VtZW50PVwicmlnaHRcIlxuICAgICAgY29udGFpbmVyPVwiYm9keVwiXG4gICAgPlxuICAgIDwvYnV0dG9uPlxuICA8L2xhYmVsPlxuICA8Yzh5LXNlbGVjdFxuICAgICpuZ0lmPVwiIXNlbGVjdEhpZGRlblwiXG4gICAgc3R5bGU9XCJ3aWR0aDogMTgwcHhcIlxuICAgIFtpdGVtc109XCJnbG9iYWxSb2xlc0l0ZW1zXCJcbiAgICBbc2VsZWN0ZWRdPVwiZ2xvYmFsUm9sZXNJdGVtc1NlbGVjdGVkXCJcbiAgICAob25DaGFuZ2UpPVwib25TZWxlY3RlZCgkZXZlbnQpXCJcbiAgPjwvYzh5LXNlbGVjdD5cbiAgPHBcbiAgICBjbGFzcz1cImZvcm0tY29udHJvbC1zdGF0aWNcIlxuICAgICpuZ0lmPVwic2VsZWN0SGlkZGVuXCJcbiAgPlxuICAgIHt7IFwiWW91IGRvbid0IGhhdmUgcGVybWlzc2lvbiB0byBjaGFuZ2UgZ2xvYmFsIHJvbGVzLlwiIHwgdHJhbnNsYXRlIH19XG4gIDwvcD5cbjwvYzh5LWZvcm0tZ3JvdXA+XG4iXX0=
@@ -176,6 +176,9 @@ export class SubAssetsGridComponent {
176
176
  trackByName(_index, column) {
177
177
  return column.name;
178
178
  }
179
+ onReload() {
180
+ this.assetNodeService.rootNode.refresh();
181
+ }
179
182
  async onDataSourceModifier(dataSourceModifier) {
180
183
  const promises = [];
181
184
  let counters;
@@ -216,7 +219,7 @@ SubAssetsGridComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
216
219
  provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,
217
220
  useExisting: SubAssetsGridComponent
218
221
  }
219
- ], viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"emptyStateText | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i6.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i6.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i6.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: i6.C8yTranslatePipe, name: "translate" }] });
222
+ ], viewQueries: [{ propertyName: "dataGrid", first: true, predicate: DataGridComponent, descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n (onReload)=\"onReload()\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"emptyStateText | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n", dependencies: [{ kind: "component", type: i6.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i6.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "directive", type: i6.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: i6.C8yTranslatePipe, name: "translate" }] });
220
223
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: SubAssetsGridComponent, decorators: [{
221
224
  type: Component,
222
225
  args: [{ selector: 'c8y-sub-assets-grid', providers: [
@@ -236,7 +239,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
236
239
  provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,
237
240
  useExisting: SubAssetsGridComponent
238
241
  }
239
- ], template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"emptyStateText | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n" }]
242
+ ], template: "<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n (onReload)=\"onReload()\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"'No items to display.' | translate\"\n [subtitle]=\"emptyStateText | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n" }]
240
243
  }], ctorParameters: function () { return [{ type: i1.SubAssetsService }, { type: i2.BsModalService }, { type: i3.SmartGroupsService }, { type: i4.DeviceGridService }, { type: i5.AssetNodeService }]; }, propDecorators: { parentGroup: [{
241
244
  type: Input,
242
245
  args: ['parent-group']
@@ -280,4 +283,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
280
283
  type: Input,
281
284
  args: ['displayOptions']
282
285
  }] } });
283
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUtMLGlCQUFpQixFQUVqQix3Q0FBd0MsRUFDeEMsZ0NBQWdDLEVBRWhDLE9BQU8sRUFLUCxvQ0FBb0MsRUFDckMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUVMLGtDQUFrQyxFQUNuQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7QUF1QjFGLE1BQU0sT0FBTyxzQkFBc0I7SUFrRmpDLFlBQ1Msb0JBQXNDLEVBQ3JDLGNBQThCLEVBQzlCLGtCQUFzQyxFQUN0QyxpQkFBb0MsRUFDcEMsZ0JBQWtDO1FBSm5DLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBa0I7UUFDckMsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBdEY1Qyx1QkFBa0IsR0FBRyxrQkFBa0IsQ0FBQztRQUcvQixVQUFLLEdBQVcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLG1CQUFjLEdBQVcsT0FBTyxDQUN2Qyw2RUFBNkUsQ0FDOUUsQ0FBQztRQUNPLHNCQUFpQixHQUFXLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBd0J2RCxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFRcEIsZUFBVSxHQUFHLElBQUksQ0FBQztRQUNsQixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ2Ysb0JBQWUsR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUN2RSxnQkFBVyxHQUEyQixJQUFJLFlBQVksRUFBWSxDQUFDO1FBRTdFLGVBQVUsR0FBZSxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUMxRSx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0IsdUJBQWtCLEdBQ2hCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBTTNELG1CQUFjLEdBQW1CO1lBQy9CLE9BQU8sRUFBRSxJQUFJO1lBQ2IsUUFBUSxFQUFFLEtBQUs7WUFDZixVQUFVLEVBQUUsSUFBSTtZQUNoQixNQUFNLEVBQUUsSUFBSTtTQUNiLENBQUM7UUFFRixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBMEJqQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBOUVELElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBQ0QsSUFBYSxPQUFPLENBQUMsS0FBZTtRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUN6RSxDQUFDO0lBQ0QsSUFBeUIsV0FBVyxDQUFDLEtBQWlCO1FBQ3BELElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDekI7YUFBTTtZQUNMLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixFQUFFLENBQUM7U0FDcEU7SUFDSCxDQUFDO0lBQ0QsSUFBNkIsZUFBZSxDQUFDLEtBQXNCO1FBQ2pFLElBQUksS0FBSyxFQUFFO1lBQ1QsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7U0FDN0I7YUFBTTtZQUNMLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLHdCQUF3QixFQUFFLENBQUM7U0FDNUU7SUFDSCxDQUFDO0lBR0QsSUFBaUMsbUJBQW1CLENBQUMsS0FBMEI7UUFDN0UsSUFBSSxLQUFLLEVBQUU7WUFDVCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO2FBQU07WUFDTCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLDRCQUE0QixFQUFFLENBQUM7U0FDcEY7SUFDSCxDQUFDO0lBMkJELElBQUksV0FBVztRQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzNCLENBQUM7SUFFRCxJQUFJLHFCQUFxQjtRQUN2QixPQUFPLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLHFCQUFxQixFQUFFO1lBQzFFLENBQUMsQ0FBQyxNQUFNO1lBQ1IsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUNoQixDQUFDO0lBRUQsSUFDSSxlQUFlLENBQUMsY0FBYztRQUNoQyxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsY0FBYyxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQVlELG9CQUFvQjtRQUNsQixJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDM0IsT0FBTyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxjQUFjLEdBQ2xCLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQy9FLElBQUksQ0FBQyxPQUFPLEdBQUcsY0FBYztZQUMzQixDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixFQUFFO1lBQzVDLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7WUFDN0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLGNBQWMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDeEQsQ0FBQztJQUVELEtBQUssQ0FBQyxpQkFBaUI7UUFDckIsTUFBTSxjQUFjLEdBQW9CLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLEdBQ3JDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9DQUFvQyxFQUFFLENBQUM7UUFFdkUsTUFBTSxZQUFZLEdBQWtCO1lBQ2xDLElBQUkseUNBQTBCO1lBQzlCLFFBQVEsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUF1QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDdkYsTUFBTSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUU7Z0JBQ3JCLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxLQUF1QixDQUFDLEVBQUU7b0JBQ25FLE9BQU8sdUJBQXVCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxtQkFBbUIsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7aUJBQzFGO2dCQUVELElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxLQUF1QixDQUFDLEVBQUU7b0JBQ2pFLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixDQUFDLG1CQUFtQixFQUFFLENBQUM7aUJBQ3hEO2dCQUVELE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztTQUNGLENBQUM7UUFFRixjQUFjLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRWxDLE1BQU0sY0FBYyxHQUFrQjtZQUNwQyxJQUFJLEVBQUUsVUFBVTtZQUNoQixJQUFJLEVBQUUsUUFBUTtZQUNkLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDO1lBQ3pCLFFBQVEsRUFBRSxDQUFDLEtBQVUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUF1QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUM7WUFDekYsTUFBTSxFQUFFLENBQUMsS0FBVSxFQUFFLEVBQUUsQ0FDckIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxLQUF1QixDQUFDO2dCQUMzRCxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQTZCLENBQUM7U0FDOUUsQ0FBQztRQUVGLGNBQWMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFcEMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUM7U0FDdEM7SUFDSCxDQUFDO0lBRUQsZUFBZSxDQUFDLEtBQXFCLEVBQUUsU0FBeUI7UUFDOUQsTUFBTSxZQUFZLEdBQUc7WUFDbkIsS0FBSztTQUNOLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFcEYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUFlLEVBQUUsRUFBRTtZQUNoRSxJQUFJLE1BQU0sRUFBRTtnQkFDVixNQUFNLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ3JCO1FBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFxQixFQUFFLFNBQXlCO1FBQ2xFLE1BQU0sWUFBWSxHQUFHO1lBQ25CLDBCQUEwQixFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxLQUFLLENBQUM7WUFDN0YsS0FBSztZQUNMLHVCQUF1QixFQUNyQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUM1QyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1NBQ2pELENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQywwQkFBMEIsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUM7UUFFeEYsUUFBUSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxNQUE2QixFQUFFLEVBQUU7WUFDOUUsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsTUFBTSxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ3RFLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRTtvQkFDbEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztpQkFDaEM7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRTtZQUMzRCxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBYztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FDeEIsa0JBQXNDO1FBRXRDLE1BQU0sUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLFFBQVEsQ0FBQztRQUViLFFBQVEsQ0FBQyxJQUFJLENBQ1gsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sQ0FDL0Isa0JBQWtCLENBQUMsT0FBTyxFQUMxQixrQkFBa0IsQ0FBQyxVQUFVLEVBQzdCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxTQUFTLEVBQ2Qsa0JBQWtCLENBQUMsVUFBVSxDQUM5QixDQUNGLENBQUM7UUFFRixRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNwRixRQUFRLENBQUMsSUFBSSxDQUNYLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLENBQ2hDLGtCQUFrQixDQUFDLE9BQU8sRUFDMUIsa0JBQWtCLENBQUMsVUFBVSxFQUM3QixJQUFJLENBQUMsV0FBVyxFQUNoQixJQUFJLENBQUMsU0FBUyxFQUNkLGtCQUFrQixDQUFDLFVBQVUsQ0FDOUIsQ0FDRixDQUFDO1FBRUYsTUFBTSxDQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDYixRQUFRLEdBQUc7Z0JBQ1QsSUFBSTtnQkFDSixZQUFZO2FBQ2IsQ0FBQztTQUNIO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEQsT0FBTztZQUNMLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztZQUNyQixJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUk7WUFDdkIsTUFBTSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzNCLEdBQUcsUUFBUTtTQUNaLENBQUM7SUFDSixDQUFDOzttSEFuUFUsc0JBQXNCO3VHQUF0QixzQkFBc0IsK3BCQW5CdEI7UUFDVDtZQUNFLE9BQU8sRUFBRSxvQ0FBb0M7WUFDN0MsUUFBUSxFQUFFLG9DQUFvQztTQUMvQztRQUNEO1lBQ0UsT0FBTyxFQUFFLG1DQUFtQztZQUM1QyxRQUFRLEVBQUUsbUNBQW1DO1NBQzlDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsZ0NBQWdDO1lBQ3pDLFFBQVEsRUFBRSxrQ0FBa0M7U0FDN0M7UUFDRDtZQUNFLE9BQU8sRUFBRSx3Q0FBd0M7WUFDakQsV0FBVyxFQUFFLHNCQUFzQjtTQUNwQztLQUNGLG9FQXVEVSxpQkFBaUIsbUZDbkg5QiwrOUJBNkJBOzJGRGlDYSxzQkFBc0I7a0JBdEJsQyxTQUFTOytCQUNFLHFCQUFxQixhQUVwQjt3QkFDVDs0QkFDRSxPQUFPLEVBQUUsb0NBQW9DOzRCQUM3QyxRQUFRLEVBQUUsb0NBQW9DO3lCQUMvQzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsbUNBQW1DOzRCQUM1QyxRQUFRLEVBQUUsbUNBQW1DO3lCQUM5Qzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsZ0NBQWdDOzRCQUN6QyxRQUFRLEVBQUUsa0NBQWtDO3lCQUM3Qzt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsd0NBQXdDOzRCQUNqRCxXQUFXLHdCQUF3Qjt5QkFDcEM7cUJBQ0Y7b09BSXNCLFdBQVc7c0JBQWpDLEtBQUs7dUJBQUMsY0FBYztnQkFDWixPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBR0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUVHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFLTyxPQUFPO3NCQUFuQixLQUFLO2dCQUdtQixXQUFXO3NCQUFuQyxLQUFLO3VCQUFDLFlBQVk7Z0JBT1UsZUFBZTtzQkFBM0MsS0FBSzt1QkFBQyxnQkFBZ0I7Z0JBT2QsVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUMyQixtQkFBbUI7c0JBQW5ELEtBQUs7dUJBQUMsb0JBQW9CO2dCQU9sQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQVVQLFFBQVE7c0JBRFAsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBeUIxQyxlQUFlO3NCQURsQixLQUFLO3VCQUFDLGdCQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBTbWFydEdyb3Vwc1NlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBCdWlsdEluQWN0aW9uVHlwZSxcbiAgQnVsa0FjdGlvbkNvbnRyb2wsXG4gIENvbHVtbixcbiAgRGF0YUdyaWRDb21wb25lbnQsXG4gIERhdGFTb3VyY2VNb2RpZmllcixcbiAgREFUQV9HUklEX0NPTkZJR1VSQVRJT05fQ09OVEVYVF9QUk9WSURFUixcbiAgREFUQV9HUklEX0NPTkZJR1VSQVRJT05fU1RSQVRFR1ksXG4gIERpc3BsYXlPcHRpb25zLFxuICBnZXR0ZXh0LFxuICBHcmlkQ29uZmlnQ29udGV4dFByb3ZpZGVyLFxuICBQYWdpbmF0aW9uLFxuICBSb3csXG4gIFNlcnZlclNpZGVEYXRhUmVzdWx0LFxuICBVc2VyUHJlZmVyZW5jZXNDb25maWd1cmF0aW9uU3RyYXRlZ3lcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBBc3NldE5vZGVTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9hc3NldHMtbmF2aWdhdG9yJztcbmltcG9ydCB7IERldmljZUdyaWRTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cy9kZXZpY2UtZ3JpZCc7XG5pbXBvcnQgeyBCc01vZGFsU2VydmljZSB9IGZyb20gJ25neC1ib290c3RyYXAvbW9kYWwnO1xuaW1wb3J0IHsgRGVsZXRlTW9kYWxDaGVja2JveGVzIH0gZnJvbSAnLi9kZWxldGUtYXNzZXRzLW1vZGFsJztcbmltcG9ydCB7IERlbGV0ZUFzc2V0c01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9kZWxldGUtYXNzZXRzLW1vZGFsL2RlbGV0ZS1hc3NldHMtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJy4vc2hhcmVkL3N1Yi1hc3NldHMubW9kZWwnO1xuaW1wb3J0IHsgU21hcnRHcm91cEdyaWRDb25maWd1cmF0aW9uU3RyYXRlZ3kgfSBmcm9tICcuL3NtYXJ0LWdyb3VwLWdyaWQtY29uZmlndXJhdGlvbi1zdHJhdGVneS5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFN1YkFzc2V0c0dyaWRDb25maWdDb250ZXh0LFxuICBTdWJBc3NldHNHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5XG59IGZyb20gJy4vc3ViLWFzc2V0cy1ncmlkLWNvbmZpZ3VyYXRpb24tc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQgeyBTdWJBc3NldHNTZXJ2aWNlIH0gZnJvbSAnLi9zdWItYXNzZXRzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVW5hc3NpZ25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4vdW5hc3NpZ24tYXNzZXRzLW1vZGFsL3VuYXNzaWduLW1vZGFsLmNvbXBvbmVudCc7XG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktc3ViLWFzc2V0cy1ncmlkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N1Yi1hc3NldHMtZ3JpZC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFVzZXJQcmVmZXJlbmNlc0NvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgICAgIHVzZUNsYXNzOiBVc2VyUHJlZmVyZW5jZXNDb25maWd1cmF0aW9uU3RyYXRlZ3lcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNtYXJ0R3JvdXBHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5LFxuICAgICAgdXNlQ2xhc3M6IFNtYXJ0R3JvdXBHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRBX0dSSURfQ09ORklHVVJBVElPTl9TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBTdWJBc3NldHNHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBEQVRBX0dSSURfQ09ORklHVVJBVElPTl9DT05URVhUX1BST1ZJREVSLFxuICAgICAgdXNlRXhpc3Rpbmc6IFN1YkFzc2V0c0dyaWRDb21wb25lbnRcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgU3ViQXNzZXRzR3JpZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgR3JpZENvbmZpZ0NvbnRleHRQcm92aWRlciB7XG4gIFBST0RVQ1RfRVhQRVJJRU5DRSA9IFBST0RVQ1RfRVhQRVJJRU5DRTtcbiAgQElucHV0KCdwYXJlbnQtZ3JvdXAnKSBwYXJlbnRHcm91cDogSU1hbmFnZWRPYmplY3Q7XG4gIEBJbnB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nID0gZ2V0dGV4dCgnU3ViYXNzZXRzJyk7XG4gIEBJbnB1dCgpIGVtcHR5U3RhdGVUZXh0OiBzdHJpbmcgPSBnZXR0ZXh0KFxuICAgICdBZGQgeW91ciBmaXJzdCBncm91cCBvciBhc3NpZ24gZGV2aWNlcyB1c2luZyB0aGUgYnV0dG9ucyBvbiB0aGUgYWN0aW9uIGJhci4nXG4gICk7XG4gIEBJbnB1dCgpIGxvYWRpbmdJdGVtc0xhYmVsOiBzdHJpbmcgPSBnZXR0ZXh0KCdMb2FkaW5nIGFzc2V0c+KApicpO1xuICAvKiogVGhlIG5hbWUgb2YgdGhlIGtleSB3aGVyZSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24gd2lsbCBiZSBzdG9yZWQuICovXG4gIEBJbnB1dCgpIGNvbHVtbnNDb25maWdLZXk6IHN0cmluZztcblxuICBnZXQgY29sdW1ucygpIHtcbiAgICByZXR1cm4gdGhpcy5fY29sdW1ucztcbiAgfVxuICBASW5wdXQoKSBzZXQgY29sdW1ucyh2YWx1ZTogQ29sdW1uW10pIHtcbiAgICB0aGlzLl9jb2x1bW5zID0gdmFsdWUgPz8gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucygpO1xuICB9XG4gIEBJbnB1dCgncGFnaW5hdGlvbicpIHNldCBfcGFnaW5hdGlvbih2YWx1ZTogUGFnaW5hdGlvbikge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5wYWdpbmF0aW9uID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCdhY3Rpb25Db250cm9scycpIHNldCBfYWN0aW9uQ29udHJvbHModmFsdWU6IEFjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0QWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgc2VsZWN0YWJsZSA9IGZhbHNlO1xuICBASW5wdXQoKSBiYXNlUXVlcnk6IGFueSA9IHt9O1xuICBASW5wdXQoJ2J1bGtBY3Rpb25Db250cm9scycpIHNldCBfYnVsa0FjdGlvbkNvbnRyb2xzKHZhbHVlOiBCdWxrQWN0aW9uQ29udHJvbFtdKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJ1bGtBY3Rpb25Db250cm9scyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEJ1bGtBY3Rpb25Db250cm9scygpO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKSBmaWx0ZXJhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgc29ydGFibGUgPSB0cnVlO1xuICBAT3V0cHV0KCkgb25Db2x1bW5zQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Q29sdW1uW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5bXT4oKTtcbiAgQE91dHB1dCgpIGl0ZW1zU2VsZWN0OiBFdmVudEVtaXR0ZXI8c3RyaW5nW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmdbXT4oKTtcblxuICBwYWdpbmF0aW9uOiBQYWdpbmF0aW9uID0gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0UGFnaW5hdGlvbigpO1xuICBzaG93Q291bnRlcldhcm5pbmcgPSBmYWxzZTtcbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXTtcbiAgYnVsa0FjdGlvbkNvbnRyb2xzOiBCdWxrQWN0aW9uQ29udHJvbFtdID1cbiAgICB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRCdWxrQWN0aW9uQ29udHJvbHMoKTtcbiAgc2VydmVyU2lkZURhdGFDYWxsYmFjazogYW55O1xuXG4gIEBWaWV3Q2hpbGQoRGF0YUdyaWRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pXG4gIGRhdGFHcmlkOiBEYXRhR3JpZENvbXBvbmVudDtcblxuICBkaXNwbGF5T3B0aW9uczogRGlzcGxheU9wdGlvbnMgPSB7XG4gICAgc3RyaXBlZDogdHJ1ZSxcbiAgICBib3JkZXJlZDogZmFsc2UsXG4gICAgZ3JpZEhlYWRlcjogdHJ1ZSxcbiAgICBmaWx0ZXI6IHRydWVcbiAgfTtcblxuICBzaG93U2VhcmNoID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfY29sdW1uczogQ29sdW1uW107XG5cbiAgZ2V0IGlzUm9vdEdyb3VwKCkge1xuICAgIHJldHVybiAhdGhpcy5wYXJlbnRHcm91cDtcbiAgfVxuXG4gIGdldCBnZXRJbmZpbml0ZVNjcm9sbE1vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNSb290R3JvdXAgJiYgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5pc1VzaW5nSW52ZW50b3J5Um9sZXMoKVxuICAgICAgPyAnYXV0bydcbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgQElucHV0KCdkaXNwbGF5T3B0aW9ucycpXG4gIHNldCBfZGlzcGxheU9wdGlvbnMoZGlzcGxheU9wdGlvbnMpIHtcbiAgICB0aGlzLmRpc3BsYXlPcHRpb25zID0geyAuLi50aGlzLmRpc3BsYXlPcHRpb25zLCAuLi5kaXNwbGF5T3B0aW9ucyB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHN1YkFzc2V0c0dyaWRTZXJ2aWNlOiBTdWJBc3NldHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgYnNNb2RhbFNlcnZpY2U6IEJzTW9kYWxTZXJ2aWNlLFxuICAgIHByaXZhdGUgc21hcnRHcm91cHNTZXJ2aWNlOiBTbWFydEdyb3Vwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBkZXZpY2VHcmlkU2VydmljZTogRGV2aWNlR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhc3NldE5vZGVTZXJ2aWNlOiBBc3NldE5vZGVTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMuc2VydmVyU2lkZURhdGFDYWxsYmFjayA9IHRoaXMub25EYXRhU291cmNlTW9kaWZpZXIuYmluZCh0aGlzKTtcbiAgfVxuXG4gIGdldEdyaWRDb25maWdDb250ZXh0KCk6IFN1YkFzc2V0c0dyaWRDb25maWdDb250ZXh0IHtcbiAgICBpZiAoISF0aGlzLmNvbHVtbnNDb25maWdLZXkpIHtcbiAgICAgIHJldHVybiB7IGtleTogdGhpcy5jb2x1bW5zQ29uZmlnS2V5LCBncm91cDogdGhpcy5wYXJlbnRHcm91cCB9O1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGlzRHluYW1pY0dyb3VwID1cbiAgICAgICEhdGhpcy5wYXJlbnRHcm91cCAmJiB0aGlzLmFzc2V0Tm9kZVNlcnZpY2UuaXNEeW5hbWljR3JvdXAodGhpcy5wYXJlbnRHcm91cCk7XG4gICAgdGhpcy5jb2x1bW5zID0gaXNEeW5hbWljR3JvdXBcbiAgICAgID8gdGhpcy5kZXZpY2VHcmlkU2VydmljZS5nZXREZWZhdWx0Q29sdW1ucygpXG4gICAgICA6IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdENvbHVtbnModGhpcy5maWx0ZXJhYmxlLCB0aGlzLnNvcnRhYmxlKTtcbiAgICBpZiAoIXRoaXMuZmlsdGVyYWJsZSB8fCAhdGhpcy5zb3J0YWJsZSkge1xuICAgICAgdGhpcy5kaXNwbGF5T3B0aW9ucy5maWx0ZXIgPSB0aGlzLmZpbHRlcmFibGU7XG4gICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb2x1bW4uZmlsdGVyYWJsZSA9IHRoaXMuZmlsdGVyYWJsZTtcbiAgICAgICAgY29sdW1uLnNvcnRhYmxlID0gdGhpcy5zb3J0YWJsZTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnNldEFjdGlvbkNvbnRyb2xzKCk7XG4gICAgdGhpcy5zaG93U2VhcmNoID0gaXNEeW5hbWljR3JvdXAgfHwgIXRoaXMucGFyZW50R3JvdXA7XG4gIH1cblxuICBhc3luYyBzZXRBY3Rpb25Db250cm9scygpIHtcbiAgICBjb25zdCBhY3Rpb25Db250cm9sczogQWN0aW9uQ29udHJvbFtdID0gW107XG4gICAgY29uc3QgeyBkYXRhOiBpc01pY3Jvc2VydmljZUluc3RhbGxlZCB9ID1cbiAgICAgIGF3YWl0IHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cHNWMk1pY3Jvc2VydmljZUluc3RhbGxlZCgpO1xuXG4gICAgY29uc3QgZGVsZXRlQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogQnVpbHRJbkFjdGlvblR5cGUuRGVsZXRlLFxuICAgICAgY2FsbGJhY2s6IChhc3NldDogUm93KSA9PiB0aGlzLm9uRGVsZXRlQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT4ge1xuICAgICAgICBpZiAodGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwVjIoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIGlzTWljcm9zZXJ2aWNlSW5zdGFsbGVkID8gdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5jYW5EZWxldGVTbWFydEdyb3VwKCkgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuY2FuRGVsZXRlU21hcnRHcm91cCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2goZGVsZXRlQWN0aW9uKTtcblxuICAgIGNvbnN0IHVuYXNzaWduQWN0aW9uOiBBY3Rpb25Db250cm9sID0ge1xuICAgICAgdHlwZTogJ1VOQVNTSUdOJyxcbiAgICAgIGljb246ICd1bmxpbmsnLFxuICAgICAgdGV4dDogZ2V0dGV4dCgnVW5hc3NpZ24nKSxcbiAgICAgIGNhbGxiYWNrOiAoYXNzZXQ6IFJvdykgPT4gdGhpcy5vblVuYXNzaWduQXNzZXQoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsIHRoaXMucGFyZW50R3JvdXApLFxuICAgICAgc2hvd0lmOiAoYXNzZXQ6IFJvdykgPT5cbiAgICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5pc0RldmljZShhc3NldCBhcyBJTWFuYWdlZE9iamVjdCkgJiZcbiAgICAgICAgIXRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuaXNTbWFydEdyb3VwKHRoaXMucGFyZW50R3JvdXAgYXMgSU1hbmFnZWRPYmplY3QpXG4gICAgfTtcblxuICAgIGFjdGlvbkNvbnRyb2xzLnB1c2godW5hc3NpZ25BY3Rpb24pO1xuXG4gICAgaWYgKCF0aGlzLmFjdGlvbkNvbnRyb2xzKSB7XG4gICAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gYWN0aW9uQ29udHJvbHM7XG4gICAgfVxuICB9XG5cbiAgb25VbmFzc2lnbkFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIGFzc2V0XG4gICAgfTtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhVbmFzc2lnbk1vZGFsQ29tcG9uZW50LCB7IGluaXRpYWxTdGF0ZSB9KTtcblxuICAgIG1vZGFsUmVmLmNvbnRlbnQuY2xvc2VTdWJqZWN0LnN1YnNjcmliZShhc3luYyAocmVzdWx0OiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UudW5hc3NpZ25Bc3NldChhc3NldCwgcGFyZW50UmVmKTtcbiAgICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIG9uRGVsZXRlQXNzZXQoYXNzZXQ6IElNYW5hZ2VkT2JqZWN0LCBwYXJlbnRSZWY6IElNYW5hZ2VkT2JqZWN0KSB7XG4gICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgc2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3g6IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2Uuc2hvdWxkU2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3goYXNzZXQpLFxuICAgICAgYXNzZXQsXG4gICAgICBzaG93V2l0aENhc2NhZGVDaGVja2JveDpcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cChhc3NldCkgJiZcbiAgICAgICAgIXRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0KVxuICAgIH07XG5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMuYnNNb2RhbFNlcnZpY2Uuc2hvdyhEZWxldGVBc3NldHNNb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUgfSk7XG5cbiAgICBtb2RhbFJlZi5jb250ZW50LmNsb3NlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdDogRGVsZXRlTW9kYWxDaGVja2JveGVzKSA9PiB7XG4gICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZGVsZXRlQXNzZXQoYXNzZXQsIHBhcmVudFJlZiwgcmVzdWx0KTtcbiAgICAgICAgaWYgKHJlc3VsdC5jYXNjYWRlKSB7XG4gICAgICAgICAgdGhpcy5zaG93Q291bnRlcldhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXMucGFyZW50R3JvdXAgJiYgIWNoYW5nZXMucGFyZW50R3JvdXAuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuZGF0YUdyaWQucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgdHJhY2tCeU5hbWUoX2luZGV4LCBjb2x1bW46IENvbHVtbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGNvbHVtbi5uYW1lO1xuICB9XG5cbiAgYXN5bmMgb25EYXRhU291cmNlTW9kaWZpZXIoXG4gICAgZGF0YVNvdXJjZU1vZGlmaWVyOiBEYXRhU291cmNlTW9kaWZpZXJcbiAgKTogUHJvbWlzZTxTZXJ2ZXJTaWRlRGF0YVJlc3VsdD4ge1xuICAgIGNvbnN0IHByb21pc2VzID0gW107XG4gICAgbGV0IGNvdW50ZXJzO1xuXG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGF0YShcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLFxuICAgICAgICB0aGlzLnBhcmVudEdyb3VwLFxuICAgICAgICB0aGlzLmJhc2VRdWVyeSxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnNlYXJjaFRleHRcbiAgICAgIClcbiAgICApO1xuXG4gICAgcHJvbWlzZXMucHVzaCh0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldFRvdGFsKHRoaXMucGFyZW50R3JvdXAsIHRoaXMuYmFzZVF1ZXJ5KSk7XG4gICAgcHJvbWlzZXMucHVzaChcbiAgICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0Q291bnQoXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zLFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbixcbiAgICAgICAgdGhpcy5wYXJlbnRHcm91cCxcbiAgICAgICAgdGhpcy5iYXNlUXVlcnksXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5zZWFyY2hUZXh0XG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IFtkYXRhUmVzcG9uc2UsIHNpemUsIGZpbHRlcmVkU2l6ZV0gPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG4gICAgaWYgKCFjb3VudGVycykge1xuICAgICAgY291bnRlcnMgPSB7XG4gICAgICAgIHNpemUsXG4gICAgICAgIGZpbHRlcmVkU2l6ZVxuICAgICAgfTtcbiAgICB9XG4gICAgdGhpcy5vbkNvbHVtbnNDaGFuZ2UuZW1pdChkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzOiBkYXRhUmVzcG9uc2UucmVzLFxuICAgICAgZGF0YTogZGF0YVJlc3BvbnNlLmRhdGEsXG4gICAgICBwYWdpbmc6IGRhdGFSZXNwb25zZS5wYWdpbmcsXG4gICAgICAuLi5jb3VudGVyc1xuICAgIH07XG4gIH1cbn1cbiIsIjxjOHktZGF0YS1ncmlkXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtsb2FkaW5nSXRlbXNMYWJlbF09XCJsb2FkaW5nSXRlbXNMYWJlbFwiXG4gIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICBbcGFnaW5hdGlvbl09XCJwYWdpbmF0aW9uXCJcbiAgW2FjdGlvbkNvbnRyb2xzXT1cImFjdGlvbkNvbnRyb2xzXCJcbiAgW3NlbGVjdGFibGVdPVwic2VsZWN0YWJsZVwiXG4gIFtidWxrQWN0aW9uQ29udHJvbHNdPVwiYnVsa0FjdGlvbkNvbnRyb2xzXCJcbiAgW3NlcnZlclNpZGVEYXRhQ2FsbGJhY2tdPVwic2VydmVyU2lkZURhdGFDYWxsYmFja1wiXG4gIFtpbmZpbml0ZVNjcm9sbF09XCJnZXRJbmZpbml0ZVNjcm9sbE1vZGVcIlxuICBbc2hvd0NvdW50ZXJXYXJuaW5nXT1cInNob3dDb3VudGVyV2FybmluZ1wiXG4gIFtyZWZyZXNoXT1cInJlZnJlc2hcIlxuICBbc2hvd1NlYXJjaF09XCJzaG93U2VhcmNoXCJcbiAgW2Rpc3BsYXlPcHRpb25zXT1cImRpc3BsYXlPcHRpb25zXCJcbiAgKGl0ZW1zU2VsZWN0KT1cIml0ZW1zU2VsZWN0LmVtaXQoJGV2ZW50KVwiXG4gIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gIFthY3Rpb25OYW1lXT1cIlBST0RVQ1RfRVhQRVJJRU5DRS5FVkVOVFwiXG4+XG4gIDxjOHktdWktZW1wdHktc3RhdGVcbiAgICBbaWNvbl09XCInYzh5LWdyb3VwLWFkZCdcIlxuICAgIFt0aXRsZV09XCInTm8gaXRlbXMgdG8gZGlzcGxheS4nIHwgdHJhbnNsYXRlXCJcbiAgICBbc3VidGl0bGVdPVwiZW1wdHlTdGF0ZVRleHQgfCB0cmFuc2xhdGVcIlxuICAgIFtob3Jpem9udGFsXT1cInRydWVcIlxuICA+PC9jOHktdWktZW1wdHktc3RhdGU+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrQnk6IHRyYWNrQnlOYW1lXCI+XG4gICAgPGM4eS1jb2x1bW4gW25hbWVdPVwiY29sdW1uLm5hbWVcIj48L2M4eS1jb2x1bW4+XG4gIDwvbmctY29udGFpbmVyPlxuPC9jOHktZGF0YS1ncmlkPlxuIl19
286
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvc3ViLWFzc2V0cy1ncmlkLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBRU4sU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBa0Isa0JBQWtCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakUsT0FBTyxFQUtMLGlCQUFpQixFQUVqQix3Q0FBd0MsRUFDeEMsZ0NBQWdDLEVBRWhDLE9BQU8sRUFLUCxvQ0FBb0MsRUFDckMsTUFBTSxxQkFBcUIsQ0FBQztBQUM3QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN4RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDakcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDL0QsT0FBTyxFQUFFLG1DQUFtQyxFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEcsT0FBTyxFQUVMLGtDQUFrQyxFQUNuQyxNQUFNLGtEQUFrRCxDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLGtEQUFrRCxDQUFDOzs7Ozs7Ozs7QUF1QjFGLE1BQU0sT0FBTyxzQkFBc0I7SUFrRmpDLFlBQ1Msb0JBQXNDLEVBQ3JDLGNBQThCLEVBQzlCLGtC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LFNBQVM7dUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXlCMUMsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJTWFuYWdlZE9iamVjdCwgU21hcnRHcm91cHNTZXJ2aWNlIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWN0aW9uQ29udHJvbCxcbiAgQnVpbHRJbkFjdGlvblR5cGUsXG4gIEJ1bGtBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkQ29tcG9uZW50LFxuICBEYXRhU291cmNlTW9kaWZpZXIsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX0NPTlRFWFRfUFJPVklERVIsXG4gIERBVEFfR1JJRF9DT05GSUdVUkFUSU9OX1NUUkFURUdZLFxuICBEaXNwbGF5T3B0aW9ucyxcbiAgZ2V0dGV4dCxcbiAgR3JpZENvbmZpZ0NvbnRleHRQcm92aWRlcixcbiAgUGFnaW5hdGlvbixcbiAgUm93LFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCxcbiAgVXNlclByZWZlcmVuY2VzQ29uZmlndXJhdGlvblN0cmF0ZWd5XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQXNzZXROb2RlU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXNzZXRzLW5hdmlnYXRvcic7XG5pbXBvcnQgeyBEZXZpY2VHcmlkU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZGV2aWNlLWdyaWQnO1xuaW1wb3J0IHsgQnNNb2RhbFNlcnZpY2UgfSBmcm9tICduZ3gtYm9vdHN0cmFwL21vZGFsJztcbmltcG9ydCB7IERlbGV0ZU1vZGFsQ2hlY2tib3hlcyB9IGZyb20gJy4vZGVsZXRlLWFzc2V0cy1tb2RhbCc7XG5pbXBvcnQgeyBEZWxldGVBc3NldHNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vZGVsZXRlLWFzc2V0cy1tb2RhbC9kZWxldGUtYXNzZXRzLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICcuL3NoYXJlZC9zdWItYXNzZXRzLm1vZGVsJztcbmltcG9ydCB7IFNtYXJ0R3JvdXBHcmlkQ29uZmlndXJhdGlvblN0cmF0ZWd5IH0gZnJvbSAnLi9zbWFydC1ncm91cC1ncmlkLWNvbmZpZ3VyYXRpb24tc3RyYXRlZ3kuc2VydmljZSc7XG5pbXBvcnQge1xuICBTdWJBc3NldHNHcmlkQ29uZmlnQ29udGV4dCxcbiAgU3ViQXNzZXRzR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneVxufSBmcm9tICcuL3N1Yi1hc3NldHMtZ3JpZC1jb25maWd1cmF0aW9uLXN0cmF0ZWd5LnNlcnZpY2UnO1xuaW1wb3J0IHsgU3ViQXNzZXRzU2VydmljZSB9IGZyb20gJy4vc3ViLWFzc2V0cy5zZXJ2aWNlJztcbmltcG9ydCB7IFVuYXNzaWduTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL3VuYXNzaWduLWFzc2V0cy1tb2RhbC91bmFzc2lnbi1tb2RhbC5jb21wb25lbnQnO1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXN1Yi1hc3NldHMtZ3JpZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9zdWItYXNzZXRzLWdyaWQuY29tcG9uZW50Lmh0bWwnLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBVc2VyUHJlZmVyZW5jZXNDb25maWd1cmF0aW9uU3RyYXRlZ3ksXG4gICAgICB1c2VDbGFzczogVXNlclByZWZlcmVuY2VzQ29uZmlndXJhdGlvblN0cmF0ZWd5XG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBTbWFydEdyb3VwR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneSxcbiAgICAgIHVzZUNsYXNzOiBTbWFydEdyb3VwR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogREFUQV9HUklEX0NPTkZJR1VSQVRJT05fU1RSQVRFR1ksXG4gICAgICB1c2VDbGFzczogU3ViQXNzZXRzR3JpZENvbmZpZ3VyYXRpb25TdHJhdGVneVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogREFUQV9HUklEX0NPTkZJR1VSQVRJT05fQ09OVEVYVF9QUk9WSURFUixcbiAgICAgIHVzZUV4aXN0aW5nOiBTdWJBc3NldHNHcmlkQ29tcG9uZW50XG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFN1YkFzc2V0c0dyaWRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEdyaWRDb25maWdDb250ZXh0UHJvdmlkZXIge1xuICBQUk9EVUNUX0VYUEVSSUVOQ0UgPSBQUk9EVUNUX0VYUEVSSUVOQ0U7XG4gIEBJbnB1dCgncGFyZW50LWdyb3VwJykgcGFyZW50R3JvdXA6IElNYW5hZ2VkT2JqZWN0O1xuICBASW5wdXQoKSByZWZyZXNoOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQElucHV0KCkgdGl0bGU6IHN0cmluZyA9IGdldHRleHQoJ1N1YmFzc2V0cycpO1xuICBASW5wdXQoKSBlbXB0eVN0YXRlVGV4dDogc3RyaW5nID0gZ2V0dGV4dChcbiAgICAnQWRkIHlvdXIgZmlyc3QgZ3JvdXAgb3IgYXNzaWduIGRldmljZXMgdXNpbmcgdGhlIGJ1dHRvbnMgb24gdGhlIGFjdGlvbiBiYXIuJ1xuICApO1xuICBASW5wdXQoKSBsb2FkaW5nSXRlbXNMYWJlbDogc3RyaW5nID0gZ2V0dGV4dCgnTG9hZGluZyBhc3NldHPigKYnKTtcbiAgLyoqIFRoZSBuYW1lIG9mIHRoZSBrZXkgd2hlcmUgY29sdW1ucyBjb25maWd1cmF0aW9uIHdpbGwgYmUgc3RvcmVkLiAqL1xuICBASW5wdXQoKSBjb2x1bW5zQ29uZmlnS2V5OiBzdHJpbmc7XG5cbiAgZ2V0IGNvbHVtbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gIH1cbiAgQElucHV0KCkgc2V0IGNvbHVtbnModmFsdWU6IENvbHVtbltdKSB7XG4gICAgdGhpcy5fY29sdW1ucyA9IHZhbHVlID8/IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdENvbHVtbnMoKTtcbiAgfVxuICBASW5wdXQoJ3BhZ2luYXRpb24nKSBzZXQgX3BhZ2luYXRpb24odmFsdWU6IFBhZ2luYXRpb24pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMucGFnaW5hdGlvbiA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnBhZ2luYXRpb24gPSB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRQYWdpbmF0aW9uKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgnYWN0aW9uQ29udHJvbHMnKSBzZXQgX2FjdGlvbkNvbnRyb2xzKHZhbHVlOiBBY3Rpb25Db250cm9sW10pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuYWN0aW9uQ29udHJvbHMgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdEFjdGlvbkNvbnRyb2xzKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpIHNlbGVjdGFibGUgPSBmYWxzZTtcbiAgQElucHV0KCkgYmFzZVF1ZXJ5OiBhbnkgPSB7fTtcbiAgQElucHV0KCdidWxrQWN0aW9uQ29udHJvbHMnKSBzZXQgX2J1bGtBY3Rpb25Db250cm9scyh2YWx1ZTogQnVsa0FjdGlvbkNvbnRyb2xbXSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5idWxrQWN0aW9uQ29udHJvbHMgPSB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRCdWxrQWN0aW9uQ29udHJvbHMoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KCkgZmlsdGVyYWJsZSA9IHRydWU7XG4gIEBJbnB1dCgpIHNvcnRhYmxlID0gdHJ1ZTtcbiAgQE91dHB1dCgpIG9uQ29sdW1uc0NoYW5nZTogRXZlbnRFbWl0dGVyPENvbHVtbltdPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q29sdW1uW10+KCk7XG4gIEBPdXRwdXQoKSBpdGVtc1NlbGVjdDogRXZlbnRFbWl0dGVyPHN0cmluZ1tdPiA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nW10+KCk7XG5cbiAgcGFnaW5hdGlvbjogUGFnaW5hdGlvbiA9IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdFBhZ2luYXRpb24oKTtcbiAgc2hvd0NvdW50ZXJXYXJuaW5nID0gZmFsc2U7XG4gIGFjdGlvbkNvbnRyb2xzOiBBY3Rpb25Db250cm9sW107XG4gIGJ1bGtBY3Rpb25Db250cm9sczogQnVsa0FjdGlvbkNvbnRyb2xbXSA9XG4gICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREZWZhdWx0QnVsa0FjdGlvbkNvbnRyb2xzKCk7XG4gIHNlcnZlclNpZGVEYXRhQ2FsbGJhY2s6IGFueTtcblxuICBAVmlld0NoaWxkKERhdGFHcmlkQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBkYXRhR3JpZDogRGF0YUdyaWRDb21wb25lbnQ7XG5cbiAgZGlzcGxheU9wdGlvbnM6IERpc3BsYXlPcHRpb25zID0ge1xuICAgIHN0cmlwZWQ6IHRydWUsXG4gICAgYm9yZGVyZWQ6IGZhbHNlLFxuICAgIGdyaWRIZWFkZXI6IHRydWUsXG4gICAgZmlsdGVyOiB0cnVlXG4gIH07XG5cbiAgc2hvd1NlYXJjaCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2NvbHVtbnM6IENvbHVtbltdO1xuXG4gIGdldCBpc1Jvb3RHcm91cCgpIHtcbiAgICByZXR1cm4gIXRoaXMucGFyZW50R3JvdXA7XG4gIH1cblxuICBnZXQgZ2V0SW5maW5pdGVTY3JvbGxNb2RlKCkge1xuICAgIHJldHVybiB0aGlzLmlzUm9vdEdyb3VwICYmIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuaXNVc2luZ0ludmVudG9yeVJvbGVzKClcbiAgICAgID8gJ2F1dG8nXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIEBJbnB1dCgnZGlzcGxheU9wdGlvbnMnKVxuICBzZXQgX2Rpc3BsYXlPcHRpb25zKGRpc3BsYXlPcHRpb25zKSB7XG4gICAgdGhpcy5kaXNwbGF5T3B0aW9ucyA9IHsgLi4udGhpcy5kaXNwbGF5T3B0aW9ucywgLi4uZGlzcGxheU9wdGlvbnMgfTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBzdWJBc3NldHNHcmlkU2VydmljZTogU3ViQXNzZXRzU2VydmljZSxcbiAgICBwcml2YXRlIGJzTW9kYWxTZXJ2aWNlOiBCc01vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIHNtYXJ0R3JvdXBzU2VydmljZTogU21hcnRHcm91cHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGV2aWNlR3JpZFNlcnZpY2U6IERldmljZUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXNzZXROb2RlU2VydmljZTogQXNzZXROb2RlU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gIH1cblxuICBnZXRHcmlkQ29uZmlnQ29udGV4dCgpOiBTdWJBc3NldHNHcmlkQ29uZmlnQ29udGV4dCB7XG4gICAgaWYgKCEhdGhpcy5jb2x1bW5zQ29uZmlnS2V5KSB7XG4gICAgICByZXR1cm4geyBrZXk6IHRoaXMuY29sdW1uc0NvbmZpZ0tleSwgZ3JvdXA6IHRoaXMucGFyZW50R3JvdXAgfTtcbiAgICB9XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBjb25zdCBpc0R5bmFtaWNHcm91cCA9XG4gICAgICAhIXRoaXMucGFyZW50R3JvdXAgJiYgdGhpcy5hc3NldE5vZGVTZXJ2aWNlLmlzRHluYW1pY0dyb3VwKHRoaXMucGFyZW50R3JvdXApO1xuICAgIHRoaXMuY29sdW1ucyA9IGlzRHluYW1pY0dyb3VwXG4gICAgICA/IHRoaXMuZGV2aWNlR3JpZFNlcnZpY2UuZ2V0RGVmYXVsdENvbHVtbnMoKVxuICAgICAgOiB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmdldERlZmF1bHRDb2x1bW5zKHRoaXMuZmlsdGVyYWJsZSwgdGhpcy5zb3J0YWJsZSk7XG4gICAgaWYgKCF0aGlzLmZpbHRlcmFibGUgfHwgIXRoaXMuc29ydGFibGUpIHtcbiAgICAgIHRoaXMuZGlzcGxheU9wdGlvbnMuZmlsdGVyID0gdGhpcy5maWx0ZXJhYmxlO1xuICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goY29sdW1uID0+IHtcbiAgICAgICAgY29sdW1uLmZpbHRlcmFibGUgPSB0aGlzLmZpbHRlcmFibGU7XG4gICAgICAgIGNvbHVtbi5zb3J0YWJsZSA9IHRoaXMuc29ydGFibGU7XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zZXRBY3Rpb25Db250cm9scygpO1xuICAgIHRoaXMuc2hvd1NlYXJjaCA9IGlzRHluYW1pY0dyb3VwIHx8ICF0aGlzLnBhcmVudEdyb3VwO1xuICB9XG5cbiAgYXN5bmMgc2V0QWN0aW9uQ29udHJvbHMoKSB7XG4gICAgY29uc3QgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtdO1xuICAgIGNvbnN0IHsgZGF0YTogaXNNaWNyb3NlcnZpY2VJbnN0YWxsZWQgfSA9XG4gICAgICBhd2FpdCB0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBzVjJNaWNyb3NlcnZpY2VJbnN0YWxsZWQoKTtcblxuICAgIGNvbnN0IGRlbGV0ZUFjdGlvbjogQWN0aW9uQ29udHJvbCA9IHtcbiAgICAgIHR5cGU6IEJ1aWx0SW5BY3Rpb25UeXBlLkRlbGV0ZSxcbiAgICAgIGNhbGxiYWNrOiAoYXNzZXQ6IFJvdykgPT4gdGhpcy5vbkRlbGV0ZUFzc2V0KGFzc2V0IGFzIElNYW5hZ2VkT2JqZWN0LCB0aGlzLnBhcmVudEdyb3VwKSxcbiAgICAgIHNob3dJZjogKGFzc2V0OiBSb3cpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc21hcnRHcm91cHNTZXJ2aWNlLmlzU21hcnRHcm91cFYyKGFzc2V0IGFzIElNYW5hZ2VkT2JqZWN0KSkge1xuICAgICAgICAgIHJldHVybiBpc01pY3Jvc2VydmljZUluc3RhbGxlZCA/IHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuY2FuRGVsZXRlU21hcnRHcm91cCgpIDogZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5zbWFydEdyb3Vwc1NlcnZpY2UuaXNTbWFydEdyb3VwKGFzc2V0IGFzIElNYW5hZ2VkT2JqZWN0KSkge1xuICAgICAgICAgIHJldHVybiB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmNhbkRlbGV0ZVNtYXJ0R3JvdXAoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBhY3Rpb25Db250cm9scy5wdXNoKGRlbGV0ZUFjdGlvbik7XG5cbiAgICBjb25zdCB1bmFzc2lnbkFjdGlvbjogQWN0aW9uQ29udHJvbCA9IHtcbiAgICAgIHR5cGU6ICdVTkFTU0lHTicsXG4gICAgICBpY29uOiAndW5saW5rJyxcbiAgICAgIHRleHQ6IGdldHRleHQoJ1VuYXNzaWduJyksXG4gICAgICBjYWxsYmFjazogKGFzc2V0OiBSb3cpID0+IHRoaXMub25VbmFzc2lnbkFzc2V0KGFzc2V0IGFzIElNYW5hZ2VkT2JqZWN0LCB0aGlzLnBhcmVudEdyb3VwKSxcbiAgICAgIHNob3dJZjogKGFzc2V0OiBSb3cpID0+XG4gICAgICAgIHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuaXNEZXZpY2UoYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QpICYmXG4gICAgICAgICF0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmlzU21hcnRHcm91cCh0aGlzLnBhcmVudEdyb3VwIGFzIElNYW5hZ2VkT2JqZWN0KVxuICAgIH07XG5cbiAgICBhY3Rpb25Db250cm9scy5wdXNoKHVuYXNzaWduQWN0aW9uKTtcblxuICAgIGlmICghdGhpcy5hY3Rpb25Db250cm9scykge1xuICAgICAgdGhpcy5hY3Rpb25Db250cm9scyA9IGFjdGlvbkNvbnRyb2xzO1xuICAgIH1cbiAgfVxuXG4gIG9uVW5hc3NpZ25Bc3NldChhc3NldDogSU1hbmFnZWRPYmplY3QsIHBhcmVudFJlZjogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICBhc3NldFxuICAgIH07XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coVW5hc3NpZ25Nb2RhbENvbXBvbmVudCwgeyBpbml0aWFsU3RhdGUgfSk7XG5cbiAgICBtb2RhbFJlZi5jb250ZW50LmNsb3NlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKHJlc3VsdDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLnVuYXNzaWduQXNzZXQoYXNzZXQsIHBhcmVudFJlZik7XG4gICAgICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkRlbGV0ZUFzc2V0KGFzc2V0OiBJTWFuYWdlZE9iamVjdCwgcGFyZW50UmVmOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgIHNob3dXaXRoRGV2aWNlVXNlckNoZWNrYm94OiB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLnNob3VsZFNob3dXaXRoRGV2aWNlVXNlckNoZWNrYm94KGFzc2V0KSxcbiAgICAgIGFzc2V0LFxuICAgICAgc2hvd1dpdGhDYXNjYWRlQ2hlY2tib3g6XG4gICAgICAgICF0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXAoYXNzZXQpICYmXG4gICAgICAgICF0aGlzLnNtYXJ0R3JvdXBzU2VydmljZS5pc1NtYXJ0R3JvdXBWMihhc3NldClcbiAgICB9O1xuXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLmJzTW9kYWxTZXJ2aWNlLnNob3coRGVsZXRlQXNzZXRzTW9kYWxDb21wb25lbnQsIHsgaW5pdGlhbFN0YXRlIH0pO1xuXG4gICAgbW9kYWxSZWYuY29udGVudC5jbG9zZVN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChyZXN1bHQ6IERlbGV0ZU1vZGFsQ2hlY2tib3hlcykgPT4ge1xuICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICBhd2FpdCB0aGlzLnN1YkFzc2V0c0dyaWRTZXJ2aWNlLmRlbGV0ZUFzc2V0KGFzc2V0LCBwYXJlbnRSZWYsIHJlc3VsdCk7XG4gICAgICAgIGlmIChyZXN1bHQuY2FzY2FkZSkge1xuICAgICAgICAgIHRoaXMuc2hvd0NvdW50ZXJXYXJuaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlZnJlc2guZW1pdCgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLnBhcmVudEdyb3VwICYmICFjaGFuZ2VzLnBhcmVudEdyb3VwLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmRhdGFHcmlkLnJlbG9hZCgpO1xuICAgIH1cbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxuXG4gIG9uUmVsb2FkKCkge1xuICAgIHRoaXMuYXNzZXROb2RlU2VydmljZS5yb290Tm9kZS5yZWZyZXNoKCk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICBsZXQgY291bnRlcnM7XG5cbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXREYXRhKFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuY29sdW1ucyxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnBhZ2luYXRpb24sXG4gICAgICAgIHRoaXMucGFyZW50R3JvdXAsXG4gICAgICAgIHRoaXMuYmFzZVF1ZXJ5LFxuICAgICAgICBkYXRhU291cmNlTW9kaWZpZXIuc2VhcmNoVGV4dFxuICAgICAgKVxuICAgICk7XG5cbiAgICBwcm9taXNlcy5wdXNoKHRoaXMuc3ViQXNzZXRzR3JpZFNlcnZpY2UuZ2V0VG90YWwodGhpcy5wYXJlbnRHcm91cCwgdGhpcy5iYXNlUXVlcnkpKTtcbiAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgdGhpcy5zdWJBc3NldHNHcmlkU2VydmljZS5nZXRDb3VudChcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLmNvbHVtbnMsXG4gICAgICAgIGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLFxuICAgICAgICB0aGlzLnBhcmVudEdyb3VwLFxuICAgICAgICB0aGlzLmJhc2VRdWVyeSxcbiAgICAgICAgZGF0YVNvdXJjZU1vZGlmaWVyLnNlYXJjaFRleHRcbiAgICAgIClcbiAgICApO1xuXG4gICAgY29uc3QgW2RhdGFSZXNwb25zZSwgc2l6ZSwgZmlsdGVyZWRTaXplXSA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICBpZiAoIWNvdW50ZXJzKSB7XG4gICAgICBjb3VudGVycyA9IHtcbiAgICAgICAgc2l6ZSxcbiAgICAgICAgZmlsdGVyZWRTaXplXG4gICAgICB9O1xuICAgIH1cbiAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZS5lbWl0KGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zKTtcblxuICAgIHJldHVybiB7XG4gICAgICByZXM6IGRhdGFSZXNwb25zZS5yZXMsXG4gICAgICBkYXRhOiBkYXRhUmVzcG9uc2UuZGF0YSxcbiAgICAgIHBhZ2luZzogZGF0YVJlc3BvbnNlLnBhZ2luZyxcbiAgICAgIC4uLmNvdW50ZXJzXG4gICAgfTtcbiAgfVxufVxuIiwiPGM4eS1kYXRhLWdyaWRcbiAgW3RpdGxlXT1cInRpdGxlXCJcbiAgW2xvYWRpbmdJdGVtc0xhYmVsXT1cImxvYWRpbmdJdGVtc0xhYmVsXCJcbiAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gIFtwYWdpbmF0aW9uXT1cInBhZ2luYXRpb25cIlxuICBbYWN0aW9uQ29udHJvbHNdPVwiYWN0aW9uQ29udHJvbHNcIlxuICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlXCJcbiAgW2J1bGtBY3Rpb25Db250cm9sc109XCJidWxrQWN0aW9uQ29udHJvbHNcIlxuICBbc2VydmVyU2lkZURhdGFDYWxsYmFja109XCJzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrXCJcbiAgW2luZmluaXRlU2Nyb2xsXT1cImdldEluZmluaXRlU2Nyb2xsTW9kZVwiXG4gIFtzaG93Q291bnRlcldhcm5pbmddPVwic2hvd0NvdW50ZXJXYXJuaW5nXCJcbiAgW3JlZnJlc2hdPVwicmVmcmVzaFwiXG4gIFtzaG93U2VhcmNoXT1cInNob3dTZWFyY2hcIlxuICBbZGlzcGxheU9wdGlvbnNdPVwiZGlzcGxheU9wdGlvbnNcIlxuICAoaXRlbXNTZWxlY3QpPVwiaXRlbXNTZWxlY3QuZW1pdCgkZXZlbnQpXCJcbiAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgKG9uUmVsb2FkKT1cIm9uUmVsb2FkKClcIlxuPlxuICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgW2ljb25dPVwiJ2M4eS1ncm91cC1hZGQnXCJcbiAgICBbdGl0bGVdPVwiJ05vIGl0ZW1zIHRvIGRpc3BsYXkuJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3N1YnRpdGxlXT1cImVtcHR5U3RhdGVUZXh0IHwgdHJhbnNsYXRlXCJcbiAgICBbaG9yaXpvbnRhbF09XCJ0cnVlXCJcbiAgPjwvYzh5LXVpLWVtcHR5LXN0YXRlPlxuXG4gIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFja0J5OiB0cmFja0J5TmFtZVwiPlxuICAgIDxjOHktY29sdW1uIFtuYW1lXT1cImNvbHVtbi5uYW1lXCI+PC9jOHktY29sdW1uPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvYzh5LWRhdGEtZ3JpZD5cbiJdfQ==
@@ -743,12 +743,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
743
743
  }] } });
744
744
 
745
745
  class DashboardAvailabilityComponent {
746
- constructor(userGroupService, gainsightService) {
746
+ constructor(userGroupService, gainsightService, permissions) {
747
747
  this.userGroupService = userGroupService;
748
748
  this.gainsightService = gainsightService;
749
+ this.permissions = permissions;
749
750
  this.globalRolesIdsChange = new EventEmitter();
750
751
  this.globalRolesItems = [];
751
752
  this.globalRolesItemsSelected = [];
753
+ this.selectHidden = false;
752
754
  this.globalRoles = [];
753
755
  this.PAGE_SIZE = 100;
754
756
  }
@@ -768,9 +770,14 @@ class DashboardAvailabilityComponent {
768
770
  }
769
771
  ngOnInit() {
770
772
  return __awaiter(this, void 0, void 0, function* () {
771
- this.globalRoles = yield this.getGlobalRoles();
772
- this.globalRolesItems = this.mapGlobalRolesToItems();
773
- this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();
773
+ if (this.permissions.hasRole(Permissions.ROLE_USER_MANAGEMENT_READ)) {
774
+ this.globalRoles = yield this.getGlobalRoles();
775
+ this.globalRolesItems = this.mapGlobalRolesToItems();
776
+ this.globalRolesItemsSelected = this.getSelectedGlobalRolesItems();
777
+ }
778
+ else {
779
+ this.selectHidden = true;
780
+ }
774
781
  });
775
782
  }
776
783
  onSelected(items) {
@@ -818,12 +825,12 @@ class DashboardAvailabilityComponent {
818
825
  .filter(Boolean);
819
826
  }
820
827
  }
821
- DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i5.GainsightService }], target: i0.ɵɵFactoryTarget.Component });
822
- DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n", dependencies: [{ kind: "component", type: i5.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
828
+ DashboardAvailabilityComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, deps: [{ token: i1.UserGroupService }, { token: i5.GainsightService }, { token: i5.Permissions }], target: i0.ɵɵFactoryTarget.Component });
829
+ DashboardAvailabilityComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: DashboardAvailabilityComponent, selector: "c8y-dashboard-availability", inputs: { globalRolesIds: "globalRolesIds" }, outputs: { globalRolesIdsChange: "globalRolesIdsChange" }, ngImport: i0, template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n *ngIf=\"!selectHidden\"\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n</c8y-form-group>\n", dependencies: [{ kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i5.SelectComponent, selector: "c8y-select", inputs: ["placeholder", "selectedLabel", "applyLabel", "items", "selected", "updateItems", "disableApplyOnNoSelection"], outputs: ["onChange"] }, { kind: "component", type: i5.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i4.PopoverDirective, selector: "[popover]", inputs: ["adaptivePosition", "boundariesElement", "popover", "popoverContext", "popoverTitle", "placement", "outsideClick", "triggers", "container", "containerClass", "isOpen", "delay"], outputs: ["onShown", "onHidden"], exportAs: ["bs-popover"] }, { kind: "pipe", type: i5.C8yTranslatePipe, name: "translate" }] });
823
830
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: DashboardAvailabilityComponent, decorators: [{
824
831
  type: Component,
825
- args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n</c8y-form-group>\n" }]
826
- }], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i5.GainsightService }]; }, propDecorators: { globalRolesIds: [{
832
+ args: [{ selector: 'c8y-dashboard-availability', template: "<c8y-form-group class=\"p-b-24 m-b-0\">\n <div class=\"legend form-block\">\n <span>{{ 'Availability`of dashboard based on permissions`' | translate }}</span>\n </div>\n <label for=\"availability\">\n <span class=\"m-r-4\" id=\"availability\">\n {{ 'Global roles' | translate }}\n </span>\n <button\n class=\"btn-help btn-help--sm\"\n type=\"button\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{\n 'Select the global roles for which the dashboard will be available' | translate\n }}\"\n triggers=\"focus\"\n placement=\"right\"\n container=\"body\"\n >\n </button>\n </label>\n <c8y-select\n *ngIf=\"!selectHidden\"\n style=\"width: 180px\"\n [items]=\"globalRolesItems\"\n [selected]=\"globalRolesItemsSelected\"\n (onChange)=\"onSelected($event)\"\n ></c8y-select>\n <p\n class=\"form-control-static\"\n *ngIf=\"selectHidden\"\n >\n {{ \"You don't have permission to change global roles.\" | translate }}\n </p>\n</c8y-form-group>\n" }]
833
+ }], ctorParameters: function () { return [{ type: i1.UserGroupService }, { type: i5.GainsightService }, { type: i5.Permissions }]; }, propDecorators: { globalRolesIds: [{
827
834
  type: Input
828
835
  }], globalRolesIdsChange: [{
829
836
  type: Output