@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
82 lines • 16.4 kB
JavaScript
import { Component, EventEmitter, Inject, signal } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { Permissions } from '@c8y/ngx-components';
import { delay, Subject, takeUntil, tap } from 'rxjs';
import { SUB_ASSETS_CONFIG } from './sub-assets.model';
import { SubAssetsService } from './sub-assets.service';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components";
import * as i2 from "./sub-assets.service";
import * as i3 from "@angular/router";
import * as i4 from "@angular/common";
import * as i5 from "./add-group/add-group.component";
import * as i6 from "./sub-assets-grid.component";
export class GroupsComponent {
constructor(permissions, subAssetsService, moduleConfig, activeRoute, router) {
this.permissions = permissions;
this.subAssetsService = subAssetsService;
this.moduleConfig = moduleConfig;
this.activeRoute = activeRoute;
this.router = router;
this.SHOW_ADD_GROUP = 'showAddGroup';
this.showAddGroup = signal(false);
this.refresh = new EventEmitter();
this.filterable = true;
this.sortable = true;
this.shouldDisableAddGroup = false;
this.columns = [];
this.destroyed = new Subject();
}
ngOnInit() {
if (!this.permissions.hasAnyRole([
Permissions.ROLE_INVENTORY_READ,
Permissions.ROLE_MANAGED_OBJECT_READ
])) {
this.sortable = false;
}
this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();
this.columns = this.subAssetsService
.getDefaultColumns()
.filter(column => column.name !== 'alarms');
this.activeRoute.queryParamMap
.pipe(delay(50), // It allows seeing drawer animation.
takeUntil(this.destroyed), tap(params => this.showAddGroup.set(params.has(this.SHOW_ADD_GROUP))))
.subscribe();
}
onAddGroupClick() {
this.showAddGroup.set(!this.showAddGroup());
this.handleShowAddGroupQueryParam();
}
ngOnDestroy() {
this.destroyed.next();
this.destroyed.complete();
}
/**
* Updates the query parameter `showAddGroup` based on the value of `showAddGroup` property.
* - If `showAddGroup` is `true`, adds `showAddGroup=true` to the query parameters.
* - If `showAddGroup` is `false`, removes `showAddGroup` from the query parameters.
*/
handleShowAddGroupQueryParam() {
const currentParams = { ...this.activeRoute.snapshot.queryParams };
if (this.showAddGroup()) {
currentParams[this.SHOW_ADD_GROUP] = true;
}
else {
delete currentParams[this.SHOW_ADD_GROUP];
}
this.router.navigate([], {
relativeTo: this.activeRoute,
queryParams: currentParams
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupsComponent, deps: [{ token: i1.Permissions }, { token: i2.SubAssetsService }, { token: SUB_ASSETS_CONFIG }, { token: i3.ActivatedRoute }, { token: i3.Router }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GroupsComponent, selector: "c8y-groups-name", ngImport: i0, template: "<c8y-title>\n {{ moduleConfig.name | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-group-open\"\n label=\"{{ moduleConfig.name | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"moduleConfig.showAddGroupBtn\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add group' | translate }}\"\n (click)=\"onAddGroupClick()\"\n [disabled]=\"shouldDisableAddGroup\"\n [attr.data-cy]=\"'groups-add-group-button'\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n ></i>\n {{ 'Add group' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/grouping-devices/#grouping-devices\"\n *ngIf=\"moduleConfig.showGroupsContextHelp\"\n></c8y-help>\n\n<c8y-add-group\n [refresh]=\"refresh\"\n (onCancel)=\"onAddGroupClick()\"\n *ngIf=\"showAddGroup()\"\n></c8y-add-group>\n<c8y-sub-assets-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [refresh]=\"refresh\"\n [filterable]=\"filterable\"\n [sortable]=\"sortable\"\n [columns]=\"columns\"\n [columnsConfigKey]=\"'sub-assets-grid'\"\n [baseQuery]=\"moduleConfig.baseQuery\"\n></c8y-sub-assets-grid>\n", dependencies: [{ kind: "component", type: i1.ActionBarItemComponent, selector: "c8y-action-bar-item", inputs: ["placement", "priority", "itemClass", "injector", "groupId", "inGroupPriority"] }, { kind: "component", type: i1.BreadcrumbComponent, selector: "c8y-breadcrumb" }, { kind: "component", type: i1.BreadcrumbItemComponent, selector: "c8y-breadcrumb-item", inputs: ["icon", "translate", "label", "path", "injector"] }, { kind: "directive", type: i1.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i1.TitleComponent, selector: "c8y-title", inputs: ["pageTitleUpdate"] }, { kind: "component", type: i1.HelpComponent, selector: "c8y-help", inputs: ["src", "isCollapsed", "priority", "icon"] }, { kind: "component", type: i5.AddGroupComponent, selector: "c8y-add-group", inputs: ["currentGroupId", "refresh"], outputs: ["onDeviceQueryStringChange", "onCancel"] }, { kind: "component", type: i6.SubAssetsGridComponent, selector: "c8y-sub-assets-grid", inputs: ["parent-group", "refresh", "title", "emptyStateText", "loadingItemsLabel", "columnsConfigKey", "columns", "pagination", "actionControls", "selectable", "baseQuery", "bulkActionControls", "filterable", "sortable", "displayOptions"], outputs: ["onColumnsChange", "itemsSelect"] }, { kind: "pipe", type: i1.C8yTranslatePipe, name: "translate" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GroupsComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-groups-name', template: "<c8y-title>\n {{ moduleConfig.name | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n <c8y-breadcrumb-item\n icon=\"c8y-group-open\"\n label=\"{{ moduleConfig.name | translate }}\"\n ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n [placement]=\"'right'\"\n *ngIf=\"moduleConfig.showAddGroupBtn\"\n>\n <button\n class=\"btn btn-link\"\n title=\"{{ 'Add group' | translate }}\"\n (click)=\"onAddGroupClick()\"\n [disabled]=\"shouldDisableAddGroup\"\n [attr.data-cy]=\"'groups-add-group-button'\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"plus-circle\"\n ></i>\n {{ 'Add group' | translate }}\n </button>\n</c8y-action-bar-item>\n\n<c8y-help\n src=\"/docs/device-management-application/grouping-devices/#grouping-devices\"\n *ngIf=\"moduleConfig.showGroupsContextHelp\"\n></c8y-help>\n\n<c8y-add-group\n [refresh]=\"refresh\"\n (onCancel)=\"onAddGroupClick()\"\n *ngIf=\"showAddGroup()\"\n></c8y-add-group>\n<c8y-sub-assets-grid\n class=\"content-fullpage d-flex d-col border-top border-bottom\"\n [refresh]=\"refresh\"\n [filterable]=\"filterable\"\n [sortable]=\"sortable\"\n [columns]=\"columns\"\n [columnsConfigKey]=\"'sub-assets-grid'\"\n [baseQuery]=\"moduleConfig.baseQuery\"\n></c8y-sub-assets-grid>\n" }]
}], ctorParameters: () => [{ type: i1.Permissions }, { type: i2.SubAssetsService }, { type: undefined, decorators: [{
type: Inject,
args: [SUB_ASSETS_CONFIG]
}] }, { type: i3.ActivatedRoute }, { type: i3.Router }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3N1Yi1hc3NldHMvZ3JvdXBzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3N1Yi1hc3NldHMvZ3JvdXBzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBcUIsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFVLFdBQVcsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFtQixNQUFNLG9CQUFvQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7OztBQU14RCxNQUFNLE9BQU8sZUFBZTtJQVMxQixZQUNVLFdBQXdCLEVBQ3hCLGdCQUFrQyxFQUNSLFlBQTZCLEVBQ3ZELFdBQTJCLEVBQzNCLE1BQWM7UUFKZCxnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ1IsaUJBQVksR0FBWixZQUFZLENBQWlCO1FBQ3ZELGdCQUFXLEdBQVgsV0FBVyxDQUFnQjtRQUMzQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBYmhCLG1CQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3hDLGlCQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLFlBQU8sR0FBdUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqRCxlQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLGFBQVEsR0FBRyxJQUFJLENBQUM7UUFDaEIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLFlBQU8sR0FBYSxFQUFFLENBQUM7UUFDdkIsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBT3RDLENBQUM7SUFFSixRQUFRO1FBQ04sSUFDRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1lBQzNCLFdBQVcsQ0FBQyxtQkFBbUI7WUFDL0IsV0FBVyxDQUFDLHdCQUF3QjtTQUNyQyxDQUFDLEVBQ0YsQ0FBQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUM7UUFFckUsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCO2FBQ2pDLGlCQUFpQixFQUFFO2FBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLENBQUM7UUFFOUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhO2FBQzNCLElBQUksQ0FDSCxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUscUNBQXFDO1FBQ2hELFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQ3pCLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FDdEU7YUFDQSxTQUFTLEVBQUUsQ0FBQztJQUNqQixDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7SUFDdEMsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyw0QkFBNEI7UUFDbEMsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBRW5FLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUM7WUFDeEIsYUFBYSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDNUMsQ0FBQzthQUFNLENBQUM7WUFDTixPQUFPLGFBQWEsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsQ0FBQztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRTtZQUN2QixVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDNUIsV0FBVyxFQUFFLGFBQWE7U0FDM0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzsrR0FwRVUsZUFBZSw2RUFZaEIsaUJBQWlCO21HQVpoQixlQUFlLHVEQ1g1Qix1d0NBaURBOzs0RkR0Q2EsZUFBZTtrQkFKM0IsU0FBUzsrQkFDRSxpQkFBaUI7OzBCQWV4QixNQUFNOzJCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIE9uRGVzdHJveSwgT25Jbml0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgQ29sdW1uLCBQZXJtaXNzaW9ucyB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZGVsYXksIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBTVUJfQVNTRVRTX0NPTkZJRywgU3ViQXNzZXRzQ29uZmlnIH0gZnJvbSAnLi9zdWItYXNzZXRzLm1vZGVsJztcbmltcG9ydCB7IFN1YkFzc2V0c1NlcnZpY2UgfSBmcm9tICcuL3N1Yi1hc3NldHMuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1ncm91cHMtbmFtZScsXG4gIHRlbXBsYXRlVXJsOiAnLi9ncm91cHMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEdyb3Vwc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBTSE9XX0FERF9HUk9VUCA9ICdzaG93QWRkR3JvdXAnO1xuICBzaG93QWRkR3JvdXAgPSBzaWduYWwoZmFsc2UpO1xuICByZWZyZXNoOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGZpbHRlcmFibGUgPSB0cnVlO1xuICBzb3J0YWJsZSA9IHRydWU7XG4gIHNob3VsZERpc2FibGVBZGRHcm91cCA9IGZhbHNlO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xuICBkZXN0cm95ZWQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIHN1YkFzc2V0c1NlcnZpY2U6IFN1YkFzc2V0c1NlcnZpY2UsXG4gICAgQEluamVjdChTVUJfQVNTRVRTX0NPTkZJRykgcHVibGljIG1vZHVsZUNvbmZpZzogU3ViQXNzZXRzQ29uZmlnLFxuICAgIHByaXZhdGUgYWN0aXZlUm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXJcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmIChcbiAgICAgICF0aGlzLnBlcm1pc3Npb25zLmhhc0FueVJvbGUoW1xuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX0lOVkVOVE9SWV9SRUFELFxuICAgICAgICBQZXJtaXNzaW9ucy5ST0xFX01BTkFHRURfT0JKRUNUX1JFQURcbiAgICAgIF0pXG4gICAgKSB7XG4gICAgICB0aGlzLnNvcnRhYmxlID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuc2hvdWxkRGlzYWJsZUFkZEdyb3VwID0gIXRoaXMuc3ViQXNzZXRzU2VydmljZS5jYW5DcmVhdGVHcm91cCgpO1xuXG4gICAgdGhpcy5jb2x1bW5zID0gdGhpcy5zdWJBc3NldHNTZXJ2aWNlXG4gICAgICAuZ2V0RGVmYXVsdENvbHVtbnMoKVxuICAgICAgLmZpbHRlcihjb2x1bW4gPT4gY29sdW1uLm5hbWUgIT09ICdhbGFybXMnKTtcblxuICAgIHRoaXMuYWN0aXZlUm91dGUucXVlcnlQYXJhbU1hcFxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDUwKSwgLy8gSXQgYWxsb3dzIHNlZWluZyBkcmF3ZXIgYW5pbWF0aW9uLlxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQpLFxuICAgICAgICB0YXAocGFyYW1zID0+IHRoaXMuc2hvd0FkZEdyb3VwLnNldChwYXJhbXMuaGFzKHRoaXMuU0hPV19BRERfR1JPVVApKSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIG9uQWRkR3JvdXBDbGljaygpIHtcbiAgICB0aGlzLnNob3dBZGRHcm91cC5zZXQoIXRoaXMuc2hvd0FkZEdyb3VwKCkpO1xuICAgIHRoaXMuaGFuZGxlU2hvd0FkZEdyb3VwUXVlcnlQYXJhbSgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkLmNvbXBsZXRlKCk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgcXVlcnkgcGFyYW1ldGVyIGBzaG93QWRkR3JvdXBgIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiBgc2hvd0FkZEdyb3VwYCBwcm9wZXJ0eS5cbiAgICogLSBJZiBgc2hvd0FkZEdyb3VwYCBpcyBgdHJ1ZWAsIGFkZHMgYHNob3dBZGRHcm91cD10cnVlYCB0byB0aGUgcXVlcnkgcGFyYW1ldGVycy5cbiAgICogLSBJZiBgc2hvd0FkZEdyb3VwYCBpcyBgZmFsc2VgLCByZW1vdmVzIGBzaG93QWRkR3JvdXBgIGZyb20gdGhlIHF1ZXJ5IHBhcmFtZXRlcnMuXG4gICAqL1xuICBwcml2YXRlIGhhbmRsZVNob3dBZGRHcm91cFF1ZXJ5UGFyYW0oKSB7XG4gICAgY29uc3QgY3VycmVudFBhcmFtcyA9IHsgLi4udGhpcy5hY3RpdmVSb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcyB9O1xuXG4gICAgaWYgKHRoaXMuc2hvd0FkZEdyb3VwKCkpIHtcbiAgICAgIGN1cnJlbnRQYXJhbXNbdGhpcy5TSE9XX0FERF9HUk9VUF0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGUgY3VycmVudFBhcmFtc1t0aGlzLlNIT1dfQUREX0dST1VQXTtcbiAgICB9XG4gICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXG4gICAgICBxdWVyeVBhcmFtczogY3VycmVudFBhcmFtc1xuICAgIH0pO1xuICB9XG59XG4iLCI8Yzh5LXRpdGxlPlxuICB7eyBtb2R1bGVDb25maWcubmFtZSB8IHRyYW5zbGF0ZSB9fVxuPC9jOHktdGl0bGU+XG5cbjxjOHktYnJlYWRjcnVtYj5cbiAgPGM4eS1icmVhZGNydW1iLWl0ZW1cbiAgICBpY29uPVwiYzh5LWdyb3VwLW9wZW5cIlxuICAgIGxhYmVsPVwie3sgbW9kdWxlQ29uZmlnLm5hbWUgfCB0cmFuc2xhdGUgfX1cIlxuICA+PC9jOHktYnJlYWRjcnVtYi1pdGVtPlxuPC9jOHktYnJlYWRjcnVtYj5cblxuPGM4eS1hY3Rpb24tYmFyLWl0ZW1cbiAgW3BsYWNlbWVudF09XCIncmlnaHQnXCJcbiAgKm5nSWY9XCJtb2R1bGVDb25maWcuc2hvd0FkZEdyb3VwQnRuXCJcbj5cbiAgPGJ1dHRvblxuICAgIGNsYXNzPVwiYnRuIGJ0bi1saW5rXCJcbiAgICB0aXRsZT1cInt7ICdBZGQgZ3JvdXAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAoY2xpY2spPVwib25BZGRHcm91cENsaWNrKClcIlxuICAgIFtkaXNhYmxlZF09XCJzaG91bGREaXNhYmxlQWRkR3JvdXBcIlxuICAgIFthdHRyLmRhdGEtY3ldPVwiJ2dyb3Vwcy1hZGQtZ3JvdXAtYnV0dG9uJ1wiXG4gID5cbiAgICA8aVxuICAgICAgY2xhc3M9XCJtLXItNFwiXG4gICAgICBjOHlJY29uPVwicGx1cy1jaXJjbGVcIlxuICAgID48L2k+XG4gICAge3sgJ0FkZCBncm91cCcgfCB0cmFuc2xhdGUgfX1cbiAgPC9idXR0b24+XG48L2M4eS1hY3Rpb24tYmFyLWl0ZW0+XG5cbjxjOHktaGVscFxuICBzcmM9XCIvZG9jcy9kZXZpY2UtbWFuYWdlbWVudC1hcHBsaWNhdGlvbi9ncm91cGluZy1kZXZpY2VzLyNncm91cGluZy1kZXZpY2VzXCJcbiAgKm5nSWY9XCJtb2R1bGVDb25maWcuc2hvd0dyb3Vwc0NvbnRleHRIZWxwXCJcbj48L2M4eS1oZWxwPlxuXG48Yzh5LWFkZC1ncm91cFxuICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgKG9uQ2FuY2VsKT1cIm9uQWRkR3JvdXBDbGljaygpXCJcbiAgKm5nSWY9XCJzaG93QWRkR3JvdXAoKVwiXG4+PC9jOHktYWRkLWdyb3VwPlxuPGM4eS1zdWItYXNzZXRzLWdyaWRcbiAgY2xhc3M9XCJjb250ZW50LWZ1bGxwYWdlIGQtZmxleCBkLWNvbCBib3JkZXItdG9wIGJvcmRlci1ib3R0b21cIlxuICBbcmVmcmVzaF09XCJyZWZyZXNoXCJcbiAgW2ZpbHRlcmFibGVdPVwiZmlsdGVyYWJsZVwiXG4gIFtzb3J0YWJsZV09XCJzb3J0YWJsZVwiXG4gIFtjb2x1bW5zXT1cImNvbHVtbnNcIlxuICBbY29sdW1uc0NvbmZpZ0tleV09XCInc3ViLWFzc2V0cy1ncmlkJ1wiXG4gIFtiYXNlUXVlcnldPVwibW9kdWxlQ29uZmlnLmJhc2VRdWVyeVwiXG4+PC9jOHktc3ViLWFzc2V0cy1ncmlkPlxuIl19