@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
71 lines • 18.2 kB
JavaScript
import { Component, Input, ViewChild } from '@angular/core';
import { LpwanSetDeviceProtocolService } from './lpwan-set-device-protocol.service';
import { AlertService, gettext, PopoverConfirmComponent } from '@c8y/ngx-components';
import { pipe } from 'rxjs';
import { map } from 'rxjs/operators';
import { find } from 'lodash-es';
import * as i0 from "@angular/core";
import * as i1 from "./lpwan-set-device-protocol.service";
import * as i2 from "@c8y/ngx-components";
import * as i3 from "@angular/common";
import * as i4 from "@angular/forms";
export class LpwanAssignLnsConnectionsComponent {
constructor(lpwanService, alertService) {
this.lpwanService = lpwanService;
this.alertService = alertService;
this.buttons = [
{ label: gettext('Cancel'), action: () => Promise.reject() },
{ label: gettext('Re-register'), action: () => this.deviceReregister(), status: 'default' }
];
this.reRegisterMsg = gettext('To change provider connection, you need to re-register device first.');
this.filterConnection = pipe();
this.pattern = '';
}
async ngOnInit() {
await this.reload();
this.setConnectionPipe('');
}
setConnectionPipe(filterStr) {
this.pattern = filterStr;
this.filterConnection = pipe(map(connections => connections.filter(connection => (!this.currentConnection || this.currentConnection.name !== connection.name) &&
(!filterStr || connection.name.toLowerCase().indexOf(filterStr.toLowerCase()) > -1))));
}
async reload() {
this.loading = true;
this.newConnection = null;
try {
this.availableConnections = await this.lpwanService.getAvailableConnections(this.device);
this.currentConnection = find(this.availableConnections.data, {
name: this.device.c8y_LpwanDevice.lnsConnectionName
});
}
catch (ex) {
this.alertService.addServerFailure(ex);
}
finally {
this.loading = false;
}
}
togglePopover(popoverCfrm) {
popoverCfrm.show();
this.setConnectionPipe('');
}
deviceReregister() {
return new Promise(resolve => {
window.location.href = `#/deviceregistration`;
resolve(true);
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LpwanAssignLnsConnectionsComponent, deps: [{ token: i1.LpwanSetDeviceProtocolService }, { token: i2.AlertService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: LpwanAssignLnsConnectionsComponent, selector: "set-lns-connections", inputs: { device: "device" }, viewQueries: [{ propertyName: "popoverConfirm", first: true, predicate: PopoverConfirmComponent, descendants: true, static: true }], ngImport: i0, template: "<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n", dependencies: [{ kind: "directive", type: i2.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.ForOfDirective, selector: "[c8yFor]", inputs: ["c8yForOf", "c8yForLoadMore", "c8yForPipe", "c8yForNotFound", "c8yForMaxIterations", "c8yForLoadingTemplate", "c8yForLoadNextLabel", "c8yForLoadingLabel", "c8yForRealtime", "c8yForRealtimeOptions", "c8yForComparator", "c8yForEnableVirtualScroll", "c8yForVirtualScrollElementSize", "c8yForVirtualScrollStrategy", "c8yForVirtualScrollContainerHeight"], outputs: ["c8yForCount", "c8yForChange", "c8yForLoadMoreComponent"] }, { kind: "component", type: i2.PopoverConfirmComponent, selector: "c8y-popover-confirm", inputs: ["buttons", "message", "title", "isOpen", "containerClass", "placement", "outsideClick", "adaptivePosition", "container"] }, { kind: "component", type: i2.HighlightComponent, selector: "c8y-highlight", inputs: ["pattern", "text", "elementClass", "shouldTrimPattern"] }, { kind: "component", type: i2.TypeaheadComponent, selector: "c8y-typeahead", inputs: ["required", "maxlength", "disabled", "allowFreeEntries", "placeholder", "displayProperty", "icon", "name", "autoClose", "hideNew", "container", "selected", "highlightFirstItem"], outputs: ["onSearch", "onIconClick"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "component", type: i2.MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "component", type: i2.ListItemComponent, selector: "c8y-list-item, c8y-li", inputs: ["active", "highlighted", "emptyActions", "dense", "collapsed", "selectable"], outputs: ["collapsedChange"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LpwanAssignLnsConnectionsComponent, decorators: [{
type: Component,
args: [{ selector: 'set-lns-connections', template: "<div class=\"col-md-6\">\n <div class=\"form-group\">\n <label translate>Current connection</label>\n <p class=\"form-control-static\" *ngIf=\"!currentConnection\">\n {{ 'Connection is not set. Select connection for this device' | translate }}\n </p>\n <p class=\"form-control-static text-truncate\" *ngIf=\"currentConnection\" title=\"{{ currentConnection.name }}\">\n {{ currentConnection.name }}\n </p>\n </div>\n\n <c8y-form-group>\n <c8y-popover-confirm\n outsideClick=\"true\"\n containerClass=\"lns-connection-popover\"\n [message]=\"reRegisterMsg\"\n [buttons]=\"buttons\"\n [placement]=\"'bottom'\"\n ></c8y-popover-confirm>\n <c8y-typeahead\n *ngIf=\"!loading\"\n [(ngModel)]=\"newConnection\"\n placeholder=\"{{ 'Select new connection' | translate }}\"\n name=\"newConnection\"\n (onSearch)=\"setConnectionPipe($event)\"\n [allowFreeEntries]=\"false\"\n >\n <c8y-li\n *c8yFor=\"let connection of availableConnections; loadMore: 'hidden'; pipe: filterConnection\"\n class=\"p-l-8 p-r-8 c8y-list__item--link\"\n (click)=\"togglePopover(popoverConfirm)\"\n >\n <c8y-highlight [text]=\"connection.name\" [pattern]=\"pattern\"></c8y-highlight>\n </c8y-li>\n </c8y-typeahead>\n <c8y-messages\n ><c8y-message\n name=\"notExisting\"\n [text]=\"'Select one of the connections.' | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n</div>\n" }]
}], ctorParameters: () => [{ type: i1.LpwanSetDeviceProtocolService }, { type: i2.AlertService }], propDecorators: { device: [{
type: Input
}], popoverConfirm: [{
type: ViewChild,
args: [PopoverConfirmComponent, { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibHB3YW4tc2V0LWNvbm5lY3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb3RvY29sLWxwd2FuL2xwd2FuLXNldC1jb25uZWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi9wcm90b2NvbC1scHdhbi9scHdhbi1zZXQtY29ubmVjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3BGLE9BQU8sRUFDTCxZQUFZLEVBRVosT0FBTyxFQUVQLHVCQUF1QixFQUN4QixNQUFNLHFCQUFxQixDQUFDO0FBRTdCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUIsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7Ozs7OztBQVVqQyxNQUFNLE9BQU8sa0NBQWtDO0lBZ0I3QyxZQUNVLFlBQTJDLEVBQzNDLFlBQTBCO1FBRDFCLGlCQUFZLEdBQVosWUFBWSxDQUErQjtRQUMzQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQWZwQyxZQUFPLEdBQTRCO1lBQ2pDLEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzVELEVBQUUsS0FBSyxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRTtTQUM1RixDQUFDO1FBQ0Ysa0JBQWEsR0FBRyxPQUFPLENBQUMsc0VBQXNFLENBQUMsQ0FBQztRQUNoRyxxQkFBZ0IsR0FBMkQsSUFBSSxFQUFFLENBQUM7UUFDbEYsWUFBTyxHQUFHLEVBQUUsQ0FBQztJQVVWLENBQUM7SUFDSixLQUFLLENBQUMsUUFBUTtRQUNaLE1BQU0sSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsU0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUM7UUFDekIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FDMUIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQ2hCLFdBQVcsQ0FBQyxNQUFNLENBQ2hCLFVBQVUsQ0FBQyxFQUFFLENBQ1gsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLENBQUM7WUFDNUUsQ0FBQyxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUN0RixDQUNGLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxLQUFLLENBQUMsTUFBTTtRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQztZQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxNQUFNLElBQUksQ0FBQyxZQUFZLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksRUFBRTtnQkFDNUQsSUFBSSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLGlCQUFpQjthQUNwRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxZQUFZLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekMsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDdkIsQ0FBQztJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsV0FBVztRQUN2QixXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQzNCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxHQUFHLHNCQUFzQixDQUFDO1lBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7K0dBL0RVLGtDQUFrQzttR0FBbEMsa0NBQWtDLHlJQVVsQyx1QkFBdUIsOERDaENwQyw2L0NBMkNBOzs0RkRyQmEsa0NBQWtDO2tCQUo5QyxTQUFTOytCQUNFLHFCQUFxQjs2SEFLdEIsTUFBTTtzQkFBZCxLQUFLO2dCQVFnRCxjQUFjO3NCQUFuRSxTQUFTO3VCQUFDLHVCQUF1QixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMcHdhblNldERldmljZVByb3RvY29sU2VydmljZSB9IGZyb20gJy4vbHB3YW4tc2V0LWRldmljZS1wcm90b2NvbC5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgRm9yT2ZGaWx0ZXJQaXBlLFxuICBnZXR0ZXh0LFxuICBQb3BvdmVyQ29uZmlybUJ1dHRvbnMsXG4gIFBvcG92ZXJDb25maXJtQ29tcG9uZW50XG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIElSZXN1bHRMaXN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgZmluZCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQge1xuICBBY3RpbGl0eUNvbm5lY3Rpb24sXG4gIFNpZ2ZveENvbm5lY3Rpb25cbn0gZnJvbSAnLi9tdWx0aXBsZS1sbnMtY29ubmVjdG9ycy9tdWx0aXBsZS1sbnMtY29ubmVjdG9yLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2V0LWxucy1jb25uZWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnLi9scHdhbi1zZXQtY29ubmVjdGlvbnMuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIExwd2FuQXNzaWduTG5zQ29ubmVjdGlvbnNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBkZXZpY2U6IElNYW5hZ2VkT2JqZWN0O1xuICBidXR0b25zOiBQb3BvdmVyQ29uZmlybUJ1dHRvbnNbXSA9IFtcbiAgICB7IGxhYmVsOiBnZXR0ZXh0KCdDYW5jZWwnKSwgYWN0aW9uOiAoKSA9PiBQcm9taXNlLnJlamVjdCgpIH0sXG4gICAgeyBsYWJlbDogZ2V0dGV4dCgnUmUtcmVnaXN0ZXInKSwgYWN0aW9uOiAoKSA9PiB0aGlzLmRldmljZVJlcmVnaXN0ZXIoKSwgc3RhdHVzOiAnZGVmYXVsdCcgfVxuICBdO1xuICByZVJlZ2lzdGVyTXNnID0gZ2V0dGV4dCgnVG8gY2hhbmdlIHByb3ZpZGVyIGNvbm5lY3Rpb24sIHlvdSBuZWVkIHRvIHJlLXJlZ2lzdGVyIGRldmljZSBmaXJzdC4nKTtcbiAgZmlsdGVyQ29ubmVjdGlvbjogRm9yT2ZGaWx0ZXJQaXBlPEFjdGlsaXR5Q29ubmVjdGlvbiB8IFNpZ2ZveENvbm5lY3Rpb24+ID0gcGlwZSgpO1xuICBwYXR0ZXJuID0gJyc7XG4gIEBWaWV3Q2hpbGQoUG9wb3ZlckNvbmZpcm1Db21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHBvcG92ZXJDb25maXJtOiBQb3BvdmVyQ29uZmlybUNvbXBvbmVudDtcblxuICBuZXdDb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uO1xuICBhdmFpbGFibGVDb25uZWN0aW9uczogSVJlc3VsdExpc3Q8QWN0aWxpdHlDb25uZWN0aW9uIHwgU2lnZm94Q29ubmVjdGlvbj47XG4gIGN1cnJlbnRDb25uZWN0aW9uOiBBY3RpbGl0eUNvbm5lY3Rpb24gfCBTaWdmb3hDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbHB3YW5TZXJ2aWNlOiBMcHdhblNldERldmljZVByb3RvY29sU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlXG4gICkge31cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgYXdhaXQgdGhpcy5yZWxvYWQoKTtcbiAgICB0aGlzLnNldENvbm5lY3Rpb25QaXBlKCcnKTtcbiAgfVxuXG4gIHNldENvbm5lY3Rpb25QaXBlKGZpbHRlclN0cjogc3RyaW5nKSB7XG4gICAgdGhpcy5wYXR0ZXJuID0gZmlsdGVyU3RyO1xuICAgIHRoaXMuZmlsdGVyQ29ubmVjdGlvbiA9IHBpcGUoXG4gICAgICBtYXAoY29ubmVjdGlvbnMgPT5cbiAgICAgICAgY29ubmVjdGlvbnMuZmlsdGVyKFxuICAgICAgICAgIGNvbm5lY3Rpb24gPT5cbiAgICAgICAgICAgICghdGhpcy5jdXJyZW50Q29ubmVjdGlvbiB8fCB0aGlzLmN1cnJlbnRDb25uZWN0aW9uLm5hbWUgIT09IGNvbm5lY3Rpb24ubmFtZSkgJiZcbiAgICAgICAgICAgICghZmlsdGVyU3RyIHx8IGNvbm5lY3Rpb24ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2YoZmlsdGVyU3RyLnRvTG93ZXJDYXNlKCkpID4gLTEpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApO1xuICB9XG5cbiAgYXN5bmMgcmVsb2FkKCkge1xuICAgIHRoaXMubG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5uZXdDb25uZWN0aW9uID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgdGhpcy5hdmFpbGFibGVDb25uZWN0aW9ucyA9IGF3YWl0IHRoaXMubHB3YW5TZXJ2aWNlLmdldEF2YWlsYWJsZUNvbm5lY3Rpb25zKHRoaXMuZGV2aWNlKTtcbiAgICAgIHRoaXMuY3VycmVudENvbm5lY3Rpb24gPSBmaW5kKHRoaXMuYXZhaWxhYmxlQ29ubmVjdGlvbnMuZGF0YSwge1xuICAgICAgICBuYW1lOiB0aGlzLmRldmljZS5jOHlfTHB3YW5EZXZpY2UubG5zQ29ubmVjdGlvbk5hbWVcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlUG9wb3Zlcihwb3BvdmVyQ2ZybSkge1xuICAgIHBvcG92ZXJDZnJtLnNob3coKTtcbiAgICB0aGlzLnNldENvbm5lY3Rpb25QaXBlKCcnKTtcbiAgfVxuXG4gIGRldmljZVJlcmVnaXN0ZXIoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgIy9kZXZpY2VyZWdpc3RyYXRpb25gO1xuICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbC1tZC02XCI+XG4gIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwXCI+XG4gICAgPGxhYmVsIHRyYW5zbGF0ZT5DdXJyZW50IGNvbm5lY3Rpb248L2xhYmVsPlxuICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpY1wiICpuZ0lmPVwiIWN1cnJlbnRDb25uZWN0aW9uXCI+XG4gICAgICB7eyAnQ29ubmVjdGlvbiBpcyBub3Qgc2V0LiBTZWxlY3QgY29ubmVjdGlvbiBmb3IgdGhpcyBkZXZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxwIGNsYXNzPVwiZm9ybS1jb250cm9sLXN0YXRpYyB0ZXh0LXRydW5jYXRlXCIgKm5nSWY9XCJjdXJyZW50Q29ubmVjdGlvblwiIHRpdGxlPVwie3sgY3VycmVudENvbm5lY3Rpb24ubmFtZSB9fVwiPlxuICAgICAge3sgY3VycmVudENvbm5lY3Rpb24ubmFtZSB9fVxuICAgIDwvcD5cbiAgPC9kaXY+XG5cbiAgPGM4eS1mb3JtLWdyb3VwPlxuICAgIDxjOHktcG9wb3Zlci1jb25maXJtXG4gICAgICBvdXRzaWRlQ2xpY2s9XCJ0cnVlXCJcbiAgICAgIGNvbnRhaW5lckNsYXNzPVwibG5zLWNvbm5lY3Rpb24tcG9wb3ZlclwiXG4gICAgICBbbWVzc2FnZV09XCJyZVJlZ2lzdGVyTXNnXCJcbiAgICAgIFtidXR0b25zXT1cImJ1dHRvbnNcIlxuICAgICAgW3BsYWNlbWVudF09XCInYm90dG9tJ1wiXG4gICAgPjwvYzh5LXBvcG92ZXItY29uZmlybT5cbiAgICA8Yzh5LXR5cGVhaGVhZFxuICAgICAgKm5nSWY9XCIhbG9hZGluZ1wiXG4gICAgICBbKG5nTW9kZWwpXT1cIm5ld0Nvbm5lY3Rpb25cIlxuICAgICAgcGxhY2Vob2xkZXI9XCJ7eyAnU2VsZWN0IG5ldyBjb25uZWN0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiXG4gICAgICBuYW1lPVwibmV3Q29ubmVjdGlvblwiXG4gICAgICAob25TZWFyY2gpPVwic2V0Q29ubmVjdGlvblBpcGUoJGV2ZW50KVwiXG4gICAgICBbYWxsb3dGcmVlRW50cmllc109XCJmYWxzZVwiXG4gICAgPlxuICAgICAgPGM4eS1saVxuICAgICAgICAqYzh5Rm9yPVwibGV0IGNvbm5lY3Rpb24gb2YgYXZhaWxhYmxlQ29ubmVjdGlvbnM7IGxvYWRNb3JlOiAnaGlkZGVuJzsgcGlwZTogZmlsdGVyQ29ubmVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwicC1sLTggcC1yLTggYzh5LWxpc3RfX2l0ZW0tLWxpbmtcIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlUG9wb3Zlcihwb3BvdmVyQ29uZmlybSlcIlxuICAgICAgPlxuICAgICAgICA8Yzh5LWhpZ2hsaWdodCBbdGV4dF09XCJjb25uZWN0aW9uLm5hbWVcIiBbcGF0dGVybl09XCJwYXR0ZXJuXCI+PC9jOHktaGlnaGxpZ2h0PlxuICAgICAgPC9jOHktbGk+XG4gICAgPC9jOHktdHlwZWFoZWFkPlxuICAgIDxjOHktbWVzc2FnZXNcbiAgICAgID48Yzh5LW1lc3NhZ2VcbiAgICAgICAgbmFtZT1cIm5vdEV4aXN0aW5nXCJcbiAgICAgICAgW3RleHRdPVwiJ1NlbGVjdCBvbmUgb2YgdGhlIGNvbm5lY3Rpb25zLicgfCB0cmFuc2xhdGVcIlxuICAgICAgPjwvYzh5LW1lc3NhZ2U+XG4gICAgPC9jOHktbWVzc2FnZXM+XG4gIDwvYzh5LWZvcm0tZ3JvdXA+XG48L2Rpdj5cbiJdfQ==