@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
96 lines • 18.3 kB
JavaScript
import { Component, EventEmitter } from '@angular/core';
import { ActivatedRoute } from '@angular/router';
import { InventoryService, QueriesUtil } from '@c8y/client';
import { DataGridService, gettext } from '@c8y/ngx-components';
import { SERVICE_FRAGMENT, ServiceCommandService } from '@c8y/ngx-components/services/shared';
import { StatusOptionsService } from '../status-options';
import { LastUpdatedDateGridColumn, ServiceNameGridColumn, ServiceTypeGridColumn, StatusGridColumn } from './columns';
import * as i0 from "@angular/core";
import * as i1 from "@angular/router";
import * as i2 from "@c8y/client";
import * as i3 from "@c8y/ngx-components";
import * as i4 from "../status-options";
import * as i5 from "@c8y/ngx-components/services/shared";
import * as i6 from "@angular/common";
export class ServicesDeviceTabComponent {
constructor(route, inventoryService, gridService, statusOptionsService, serviceCommand) {
this.route = route;
this.inventoryService = inventoryService;
this.gridService = gridService;
this.statusOptionsService = statusOptionsService;
this.serviceCommand = serviceCommand;
this.deviceId = this.route.snapshot.parent.data.contextData.id;
this.sizeRequestDone = false;
this.refresh$ = new EventEmitter();
this.pagination = {
pageSize: 50,
currentPage: 1
};
this.actionControls = [];
this.columns = [
new StatusGridColumn(this.statusOptionsService),
new ServiceNameGridColumn(),
new ServiceTypeGridColumn(),
new LastUpdatedDateGridColumn()
];
this.noResultsMessage = gettext('No results to display.');
this.noDataMessage = gettext('No services to display.');
this.noResultsSubtitle = gettext('Refine your search terms or check your spelling.');
this.queriesUtil = new QueriesUtil();
this.serverSideDataCallback = this.onDataSourceModifier.bind(this);
this.sizeRequest = this.inventoryService
.childAdditionsList(this.deviceId, {
query: `type eq ${SERVICE_FRAGMENT}`,
withTotalPages: true,
pageSize: 1
})
.then(response => {
this.sizeRequestDone = true;
return response?.paging?.totalPages;
});
}
async onDataSourceModifier(dataSourceModifier) {
const query = this.queriesUtil.buildQuery(this.queriesUtil.addAndFilter(this.gridService.getQueryObj(dataSourceModifier.columns), {
type: SERVICE_FRAGMENT
}));
const dataRequest = this.inventoryService.childAdditionsList(this.deviceId, {
query,
withTotalPages: true,
pageSize: dataSourceModifier.pagination.pageSize,
currentPage: dataSourceModifier.pagination.currentPage
});
const filtererdSizeRequest = this.inventoryService
.childAdditionsList(this.deviceId, {
query,
withTotalPages: true,
pageSize: 1
})
.then(response => response?.paging?.totalPages);
const [dataResponse, size, filteredSize] = await Promise.all([
dataRequest,
this.sizeRequest,
filtererdSizeRequest
]);
const { res, data, paging } = dataResponse;
const commands = this.serviceCommand.getAllSupportedCommands(data);
this.actionControls = this.serviceCommand.generateActionControls(commands);
const serverSideDataResult = {
res,
data,
paging,
filteredSize,
size
};
return serverSideDataResult;
}
trackByName(_index, column) {
return column.name;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServicesDeviceTabComponent, deps: [{ token: i1.ActivatedRoute }, { token: i2.InventoryService }, { token: i3.DataGridService }, { token: i4.StatusOptionsService }, { token: i5.ServiceCommandService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ServicesDeviceTabComponent, selector: "c8y-services-device-tab", ngImport: i0, template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\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</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i3.EmptyStateContextDirective, selector: "[emptyStateContext]" }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.ColumnDirective, selector: "c8y-column", inputs: ["name"] }, { kind: "component", type: i3.DataGridComponent, selector: "c8y-data-grid", inputs: ["title", "loadMoreItemsLabel", "loadingItemsLabel", "showSearch", "refresh", "columns", "rows", "pagination", "infiniteScroll", "serverSideDataCallback", "selectable", "singleSelection", "selectionPrimaryKey", "displayOptions", "actionControls", "bulkActionControls", "headerActionControls", "searchText", "configureColumnsEnabled", "showCounterWarning", "activeClassName", "expandableRows"], outputs: ["rowMouseOver", "rowMouseLeave", "rowClick", "onConfigChange", "onBeforeFilter", "onBeforeSearch", "onFilter", "itemsSelect", "onReload", "onAddCustomColumn", "onRemoveCustomColumn", "onColumnFilterReset", "onSort", "onPageSizeChange", "onColumnReordered", "onColumnVisibilityChange"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ServicesDeviceTabComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-services-device-tab', template: "<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"actionControls\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <c8y-ui-empty-state\n [icon]=\"stats?.size > 0 ? 'search' : 'c8y-tools'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : null\"\n *emptyStateContext=\"let stats; isLoading as isLoading\"\n [horizontal]=\"stats?.size > 0\"\n ></c8y-ui-empty-state>\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</div>\n" }]
}], ctorParameters: () => [{ type: i1.ActivatedRoute }, { type: i2.InventoryService }, { type: i3.DataGridService }, { type: i4.StatusOptionsService }, { type: i5.ServiceCommandService }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZXMtZGV2aWNlLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zZXJ2aWNlcy9zZXJ2aWNlcy1kZXZpY2UtdGFiL3NlcnZpY2VzLWRldmljZS10YWIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc2VydmljZXMvc2VydmljZXMtZGV2aWNlLXRhYi9zZXJ2aWNlcy1kZXZpY2UtdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3hELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQWtCLGdCQUFnQixFQUFlLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN6RixPQUFPLEVBR0wsZUFBZSxFQUVmLE9BQU8sRUFFUixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFTCxnQkFBZ0IsRUFDaEIscUJBQXFCLEVBQ3RCLE1BQU0scUNBQXFDLENBQUM7QUFDN0MsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDekQsT0FBTyxFQUNMLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDckIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNqQixNQUFNLFdBQVcsQ0FBQzs7Ozs7Ozs7QUFNbkIsTUFBTSxPQUFPLDBCQUEwQjtJQTRCckMsWUFDVSxLQUFxQixFQUNyQixnQkFBa0MsRUFDbEMsV0FBNEIsRUFDNUIsb0JBQTBDLEVBQzFDLGNBQXFDO1FBSnJDLFVBQUssR0FBTCxLQUFLLENBQWdCO1FBQ3JCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQWlCO1FBQzVCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUFDMUMsbUJBQWMsR0FBZCxjQUFjLENBQXVCO1FBaEMvQyxh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QkFBdUIsQ0FBQyxJQUE0QixDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTNFLE1BQU0sb0JBQW9CLEdBQXlCO1lBQ2pELEdBQUc7WUFDSCxJQUFJO1lBQ0osTUFBTTtZQUNOLFlBQVk7WUFDWixJQUFJO1NBQ0wsQ0FBQztRQUVGLE9BQU8sb0JBQW9CLENBQUM7SUFDOUIsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBYztRQUNoQyxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQzsrR0FqR1UsMEJBQTBCO21HQUExQiwwQkFBMEIsK0RDNUJ2QywyM0JBc0JBOzs0RkRNYSwwQkFBMEI7a0JBSnRDLFNBQVM7K0JBQ0UseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0LCBJbnZlbnRvcnlTZXJ2aWNlLCBJUmVzdWx0TGlzdCwgUXVlcmllc1V0aWwgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQge1xuICBBY3Rpb25Db250cm9sLFxuICBDb2x1bW4sXG4gIERhdGFHcmlkU2VydmljZSxcbiAgRGF0YVNvdXJjZU1vZGlmaWVyLFxuICBnZXR0ZXh0LFxuICBTZXJ2ZXJTaWRlRGF0YVJlc3VsdFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIFNlcnZpY2UsXG4gIFNFUlZJQ0VfRlJBR01FTlQsXG4gIFNlcnZpY2VDb21tYW5kU2VydmljZVxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL3NlcnZpY2VzL3NoYXJlZCc7XG5pbXBvcnQgeyBTdGF0dXNPcHRpb25zU2VydmljZSB9IGZyb20gJy4uL3N0YXR1cy1vcHRpb25zJztcbmltcG9ydCB7XG4gIExhc3RVcGRhdGVkRGF0ZUdyaWRDb2x1bW4sXG4gIFNlcnZpY2VOYW1lR3JpZENvbHVtbixcbiAgU2VydmljZVR5cGVHcmlkQ29sdW1uLFxuICBTdGF0dXNHcmlkQ29sdW1uXG59IGZyb20gJy4vY29sdW1ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1zZXJ2aWNlcy1kZXZpY2UtdGFiJyxcbiAgdGVtcGxhdGVVcmw6ICdzZXJ2aWNlcy1kZXZpY2UtdGFiLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBTZXJ2aWNlc0RldmljZVRhYkNvbXBvbmVudCB7XG4gIGRldmljZUlkOiBzdHJpbmcgfCBudW1iZXIgPSB0aGlzLnJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhLmlkO1xuXG4gIHNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj47XG4gIHNpemVSZXF1ZXN0RG9uZSA9IGZhbHNlO1xuXG4gIHJlZnJlc2gkOiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIHBhZ2luYXRpb24gPSB7XG4gICAgcGFnZVNpemU6IDUwLFxuICAgIGN1cnJlbnRQYWdlOiAxXG4gIH07XG5cbiAgYWN0aW9uQ29udHJvbHM6IEFjdGlvbkNvbnRyb2xbXSA9IFtdO1xuICBjb2x1bW5zOiBDb2x1bW5bXSA9IFtcbiAgICBuZXcgU3RhdHVzR3JpZENvbHVtbih0aGlzLnN0YXR1c09wdGlvbnNTZXJ2aWNlKSxcbiAgICBuZXcgU2VydmljZU5hbWVHcmlkQ29sdW1uKCksXG4gICAgbmV3IFNlcnZpY2VUeXBlR3JpZENvbHVtbigpLFxuICAgIG5ldyBMYXN0VXBkYXRlZERhdGVHcmlkQ29sdW1uKClcbiAgXTtcblxuICBzZXJ2ZXJTaWRlRGF0YUNhbGxiYWNrOiBhbnk7XG5cbiAgbm9SZXN1bHRzTWVzc2FnZSA9IGdldHRleHQoJ05vIHJlc3VsdHMgdG8gZGlzcGxheS4nKTtcbiAgbm9EYXRhTWVzc2FnZSA9IGdldHRleHQoJ05vIHNlcnZpY2VzIHRvIGRpc3BsYXkuJyk7XG4gIG5vUmVzdWx0c1N1YnRpdGxlID0gZ2V0dGV4dCgnUmVmaW5lIHlvdXIgc2VhcmNoIHRlcm1zIG9yIGNoZWNrIHlvdXIgc3BlbGxpbmcuJyk7XG5cbiAgcHJpdmF0ZSBxdWVyaWVzVXRpbDogUXVlcmllc1V0aWwgPSBuZXcgUXVlcmllc1V0aWwoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBncmlkU2VydmljZTogRGF0YUdyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RhdHVzT3B0aW9uc1NlcnZpY2U6IFN0YXR1c09wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2VydmljZUNvbW1hbmQ6IFNlcnZpY2VDb21tYW5kU2VydmljZVxuICApIHtcbiAgICB0aGlzLnNlcnZlclNpZGVEYXRhQ2FsbGJhY2sgPSB0aGlzLm9uRGF0YVNvdXJjZU1vZGlmaWVyLmJpbmQodGhpcyk7XG4gICAgdGhpcy5zaXplUmVxdWVzdCA9IHRoaXMuaW52ZW50b3J5U2VydmljZVxuICAgICAgLmNoaWxkQWRkaXRpb25zTGlzdCh0aGlzLmRldmljZUlkLCB7XG4gICAgICAgIHF1ZXJ5OiBgdHlwZSBlcSAke1NFUlZJQ0VfRlJBR01FTlR9YCxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICAgIHBhZ2VTaXplOiAxXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLnNpemVSZXF1ZXN0RG9uZSA9IHRydWU7XG4gICAgICAgIHJldHVybiByZXNwb25zZT8ucGFnaW5nPy50b3RhbFBhZ2VzO1xuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBvbkRhdGFTb3VyY2VNb2RpZmllcihcbiAgICBkYXRhU291cmNlTW9kaWZpZXI6IERhdGFTb3VyY2VNb2RpZmllclxuICApOiBQcm9taXNlPFNlcnZlclNpZGVEYXRhUmVzdWx0PiB7XG4gICAgY29uc3QgcXVlcnkgPSB0aGlzLnF1ZXJpZXNVdGlsLmJ1aWxkUXVlcnkoXG4gICAgICB0aGlzLnF1ZXJpZXNVdGlsLmFkZEFuZEZpbHRlcih0aGlzLmdyaWRTZXJ2aWNlLmdldFF1ZXJ5T2JqKGRhdGFTb3VyY2VNb2RpZmllci5jb2x1bW5zKSwge1xuICAgICAgICB0eXBlOiBTRVJWSUNFX0ZSQUdNRU5UXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkYXRhUmVxdWVzdDogUHJvbWlzZTxJUmVzdWx0TGlzdDxJTWFuYWdlZE9iamVjdD4+ID1cbiAgICAgIHRoaXMuaW52ZW50b3J5U2VydmljZS5jaGlsZEFkZGl0aW9uc0xpc3QodGhpcy5kZXZpY2VJZCwge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICAgIHBhZ2VTaXplOiBkYXRhU291cmNlTW9kaWZpZXIucGFnaW5hdGlvbi5wYWdlU2l6ZSxcbiAgICAgICAgY3VycmVudFBhZ2U6IGRhdGFTb3VyY2VNb2RpZmllci5wYWdpbmF0aW9uLmN1cnJlbnRQYWdlXG4gICAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcmVyZFNpemVSZXF1ZXN0OiBQcm9taXNlPG51bWJlcj4gPSB0aGlzLmludmVudG9yeVNlcnZpY2VcbiAgICAgIC5jaGlsZEFkZGl0aW9uc0xpc3QodGhpcy5kZXZpY2VJZCwge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgd2l0aFRvdGFsUGFnZXM6IHRydWUsXG4gICAgICAgIHBhZ2VTaXplOiAxXG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4gcmVzcG9uc2U/LnBhZ2luZz8udG90YWxQYWdlcyk7XG5cbiAgICBjb25zdCBbZGF0YVJlc3BvbnNlLCBzaXplLCBmaWx0ZXJlZFNpemVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgZGF0YVJlcXVlc3QsXG4gICAgICB0aGlzLnNpemVSZXF1ZXN0LFxuICAgICAgZmlsdGVyZXJkU2l6ZVJlcXVlc3RcbiAgICBdKTtcblxuICAgIGNvbnN0IHsgcmVzLCBkYXRhLCBwYWdpbmcgfSA9IGRhdGFSZXNwb25zZTtcblxuICAgIGNvbnN0IGNvbW1hbmRzID0gdGhpcy5zZXJ2aWNlQ29tbWFuZC5nZXRBbGxTdXBwb3J0ZWRDb21tYW5kcyhkYXRhIGFzIHVua25vd24gYXMgU2VydmljZVtdKTtcbiAgICB0aGlzLmFjdGlvbkNvbnRyb2xzID0gdGhpcy5zZXJ2aWNlQ29tbWFuZC5nZW5lcmF0ZUFjdGlvbkNvbnRyb2xzKGNvbW1hbmRzKTtcblxuICAgIGNvbnN0IHNlcnZlclNpZGVEYXRhUmVzdWx0OiBTZXJ2ZXJTaWRlRGF0YVJlc3VsdCA9IHtcbiAgICAgIHJlcyxcbiAgICAgIGRhdGEsXG4gICAgICBwYWdpbmcsXG4gICAgICBmaWx0ZXJlZFNpemUsXG4gICAgICBzaXplXG4gICAgfTtcblxuICAgIHJldHVybiBzZXJ2ZXJTaWRlRGF0YVJlc3VsdDtcbiAgfVxuXG4gIHRyYWNrQnlOYW1lKF9pbmRleCwgY29sdW1uOiBDb2x1bW4pOiBzdHJpbmcge1xuICAgIHJldHVybiBjb2x1bW4ubmFtZTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRlbnQtZnVsbHBhZ2VcIj5cbiAgPGM4eS1kYXRhLWdyaWRcbiAgICBbdGl0bGVdPVwiJ1NlcnZpY2VzJyB8IHRyYW5zbGF0ZVwiXG4gICAgW3JlZnJlc2hdPVwicmVmcmVzaCRcIlxuICAgIFthY3Rpb25Db250cm9sc109XCJhY3Rpb25Db250cm9sc1wiXG4gICAgW3BhZ2luYXRpb25dPVwicGFnaW5hdGlvblwiXG4gICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiXG4gICAgW2luZmluaXRlU2Nyb2xsXT1cIidhdXRvJ1wiXG4gICAgW3NlcnZlclNpZGVEYXRhQ2FsbGJhY2tdPVwic2VydmVyU2lkZURhdGFDYWxsYmFja1wiXG4gID5cbiAgICA8Yzh5LXVpLWVtcHR5LXN0YXRlXG4gICAgICBbaWNvbl09XCJzdGF0cz8uc2l6ZSA+IDAgPyAnc2VhcmNoJyA6ICdjOHktdG9vbHMnXCJcbiAgICAgIFt0aXRsZV09XCJzdGF0cz8uc2l6ZSA+IDAgPyAobm9SZXN1bHRzTWVzc2FnZSB8IHRyYW5zbGF0ZSkgOiAobm9EYXRhTWVzc2FnZSB8IHRyYW5zbGF0ZSlcIlxuICAgICAgW3N1YnRpdGxlXT1cInN0YXRzPy5zaXplID4gMCA/IChub1Jlc3VsdHNTdWJ0aXRsZSB8IHRyYW5zbGF0ZSkgOiBudWxsXCJcbiAgICAgICplbXB0eVN0YXRlQ29udGV4dD1cImxldCBzdGF0czsgaXNMb2FkaW5nIGFzIGlzTG9hZGluZ1wiXG4gICAgICBbaG9yaXpvbnRhbF09XCJzdGF0cz8uc2l6ZSA+IDBcIlxuICAgID48L2M4eS11aS1lbXB0eS1zdGF0ZT5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgY29sdW1uczsgdHJhY2tCeTogdHJhY2tCeU5hbWVcIj5cbiAgICAgIDxjOHktY29sdW1uIFtuYW1lXT1cImNvbHVtbi5uYW1lXCI+PC9jOHktY29sdW1uPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2M4eS1kYXRhLWdyaWQ+XG48L2Rpdj5cbiJdfQ==