UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

77 lines 19.1 kB
import { Component, Input, ViewChild } from '@angular/core'; import { ConfirmModalComponent, GainsightService, gettext, Status } from '@c8y/ngx-components'; import { TranslateService } from '@ngx-translate/core'; import { Subject } from 'rxjs'; import { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model'; import * as i0 from "@angular/core"; import * as i1 from "@ngx-translate/core"; import * as i2 from "@c8y/ngx-components"; import * as i3 from "@angular/common"; import * as i4 from "@angular/forms"; export class DeleteAssetsModalComponent { constructor(translateService, gainsightService) { this.translateService = translateService; this.gainsightService = gainsightService; this.CURRENT_LOCATION = location.href; this.PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED; this.showWithCascadeCheckbox = true; this.showWithDeviceUserCheckbox = false; this.closeSubject = new Subject(); this.labels = { ok: gettext('Delete'), cancel: gettext('Cancel') }; this.title = gettext('Delete'); this.status = Status.DANGER; this.config = { cascade: false, withDeviceUser: false }; } ngOnInit() { this.setModalTexts(); } async ngAfterViewInit() { try { await this.modalRef.result; this.onClose(); } catch (error) { this.onDismiss(); } } onClose() { this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, { component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL, result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.RESULTS.DELETED, url: this.CURRENT_LOCATION }); this.closeSubject.next(this.config); this.closeSubject.complete(); } onDismiss() { this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, { component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL, result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.RESULTS.CANCELED, url: this.CURRENT_LOCATION }); this.closeSubject.complete(); } setModalTexts() { this.message = this.translateService.instant(gettext('You are about to delete: "{{name}}". This operation is irreversible. Do you want to proceed?'), { name: this.asset.name }); this.deleteGroupSubAssetsMsg = this.translateService.instant(gettext('Also delete all devices inside "{{name}}" and its subassets.'), { name: this.asset.name }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeleteAssetsModalComponent, deps: [{ token: i1.TranslateService }, { token: i2.GainsightService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DeleteAssetsModalComponent, selector: "c8y-delete-assets-modal", inputs: { showWithCascadeCheckbox: "showWithCascadeCheckbox", showWithDeviceUserCheckbox: "showWithDeviceUserCheckbox", asset: "asset" }, viewQueries: [{ propertyName: "modalRef", first: true, predicate: ["modalRef"], descendants: true }], ngImport: i0, template: "<c8y-confirm-modal [title]=\"title\" [status]=\"status\" [labels]=\"labels\" #modalRef>\n <form #assetsForm=\"ngForm\">\n <p class=\"text-wrap m-b-16\">\n {{ message | translate }}\n </p>\n <c8y-form-group *ngIf=\"showWithCascadeCheckbox\" class=\"m-b-0\">\n <label title=\"{{ 'Delete devices' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"cascade\"\n [(ngModel)]=\"config.cascade\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.CASCADE_DELETE\n }\"\n [disabled]=\"config?.withDeviceUser\"\n />\n <span></span>\n <span class=\"text-break-word\">\n {{ deleteGroupSubAssetsMsg | translate }}\n </span>\n </label>\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showWithDeviceUserCheckbox\" class=\"m-b-0\">\n <label title=\"{{ 'Delete associated device owner' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"withDeviceUser\"\n [(ngModel)]=\"config.withDeviceUser\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.DELETE_DEVICE_OWNER\n }\"\n [disabled]=\"config?.cascade\"\n />\n <span></span>\n <span>\n {{ 'Also delete associated device owner.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </form>\n</c8y-confirm-modal>\n", dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.ConfirmModalComponent, selector: "c8y-confirm-modal", inputs: ["title", "body", "confirmOptions", "status", "labels"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i4.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: i2.FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }, { kind: "directive", type: i2.ProductExperienceDirective, selector: "[c8yProductExperience]", inputs: ["actionName", "actionData", "inherit", "suppressDataOverriding"] }, { kind: "pipe", type: i2.C8yTranslatePipe, name: "translate" }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DeleteAssetsModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-delete-assets-modal', template: "<c8y-confirm-modal [title]=\"title\" [status]=\"status\" [labels]=\"labels\" #modalRef>\n <form #assetsForm=\"ngForm\">\n <p class=\"text-wrap m-b-16\">\n {{ message | translate }}\n </p>\n <c8y-form-group *ngIf=\"showWithCascadeCheckbox\" class=\"m-b-0\">\n <label title=\"{{ 'Delete devices' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"cascade\"\n [(ngModel)]=\"config.cascade\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.CASCADE_DELETE\n }\"\n [disabled]=\"config?.withDeviceUser\"\n />\n <span></span>\n <span class=\"text-break-word\">\n {{ deleteGroupSubAssetsMsg | translate }}\n </span>\n </label>\n </c8y-form-group>\n <c8y-form-group *ngIf=\"showWithDeviceUserCheckbox\" class=\"m-b-0\">\n <label title=\"{{ 'Delete associated device owner' | translate }}\" class=\"c8y-checkbox\">\n <input\n type=\"checkbox\"\n name=\"withDeviceUser\"\n [(ngModel)]=\"config.withDeviceUser\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.DELETE_DEVICE_OWNER\n }\"\n [disabled]=\"config?.cascade\"\n />\n <span></span>\n <span>\n {{ 'Also delete associated device owner.' | translate }}\n </span>\n </label>\n </c8y-form-group>\n </form>\n</c8y-confirm-modal>\n" }] }], ctorParameters: () => [{ type: i1.TranslateService }, { type: i2.GainsightService }], propDecorators: { showWithCascadeCheckbox: [{ type: Input }], showWithDeviceUserCheckbox: [{ type: Input }], asset: [{ type: Input }], modalRef: [{ type: ViewChild, args: ['modalRef', { static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2RlbGV0ZS1hc3NldHMtbW9kYWwvZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9zdWItYXNzZXRzL2RlbGV0ZS1hc3NldHMtbW9kYWwvZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFNUQsT0FBTyxFQUNMLHFCQUFxQixFQUNyQixnQkFBZ0IsRUFDaEIsT0FBTyxFQUVQLE1BQU0sRUFFUCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9DQUFvQyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7Ozs7OztBQU9sRixNQUFNLE9BQU8sMEJBQTBCO0lBbUJyQyxZQUNVLGdCQUFrQyxFQUNsQyxnQkFBa0M7UUFEbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBcEI1QyxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBQ2pDLHVCQUFrQixHQUFHLG9DQUFvQyxDQUFDO1FBRWpELDRCQUF1QixHQUFHLElBQUksQ0FBQztRQUMvQiwrQkFBMEIsR0FBRyxLQUFLLENBQUM7UUFHNUMsaUJBQVksR0FBbUMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3RCxXQUFNLEdBQWdCLEVBQUUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDM0UsVUFBSyxHQUFXLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxXQUFNLEdBQWUsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUNuQyxXQUFNLEdBQTBCO1lBQzlCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsY0FBYyxFQUFFLEtBQUs7U0FDdEIsQ0FBQztJQU9DLENBQUM7SUFFSixRQUFRO1FBQ04sSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7SUFFRCxLQUFLLENBQUMsZUFBZTtRQUNuQixJQUFJLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUVELE9BQU87UUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLG9DQUFvQyxDQUFDLEtBQUssRUFBRTtZQUM3RSxTQUFTLEVBQUUsb0NBQW9DLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxtQkFBbUI7WUFDM0YsTUFBTSxFQUFFLG9DQUFvQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUN6RSxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsb0NBQW9DLENBQUMsS0FBSyxFQUFFO1lBQzdFLFNBQVMsRUFBRSxvQ0FBb0MsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLG1CQUFtQjtZQUMzRixNQUFNLEVBQUUsb0NBQW9DLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQzFFLEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1NBQzNCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVPLGFBQWE7UUFDbkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMxQyxPQUFPLENBQ0wsOEZBQThGLENBQy9GLEVBQ0QsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDMUIsQ0FBQztRQUNGLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUMxRCxPQUFPLENBQUMsOERBQThELENBQUMsRUFDdkUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FDMUIsQ0FBQztJQUNKLENBQUM7K0dBbkVVLDBCQUEwQjttR0FBMUIsMEJBQTBCLCtTQ25CdkMsMHpEQStDQTs7NEZENUJhLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUI7b0hBTzFCLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFDRywwQkFBMEI7c0JBQWxDLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNvQyxRQUFRO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElNYW5hZ2VkT2JqZWN0IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQ29uZmlybU1vZGFsQ29tcG9uZW50LFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBnZXR0ZXh0LFxuICBNb2RhbExhYmVscyxcbiAgU3RhdHVzLFxuICBTdGF0dXNUeXBlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUFJPRFVDVF9FWFBFUklFTkNFX1NVQl9BU1NFVFNfU0hBUkVEIH0gZnJvbSAnLi4vc2hhcmVkL3N1Yi1hc3NldHMubW9kZWwnO1xuaW1wb3J0IHsgRGVsZXRlTW9kYWxDaGVja2JveGVzIH0gZnJvbSAnLi9kZWxldGUtYXNzZXRzLW1vZGFsLm1vZGVsJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LWRlbGV0ZS1hc3NldHMtbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGVsZXRlLWFzc2V0cy1tb2RhbC5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgRGVsZXRlQXNzZXRzTW9kYWxDb21wb25lbnQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcbiAgUFJPRFVDVF9FWFBFUklFTkNFID0gUFJPRFVDVF9FWFBFUklFTkNFX1NVQl9BU1NFVFNfU0hBUkVEO1xuXG4gIEBJbnB1dCgpIHNob3dXaXRoQ2FzY2FkZUNoZWNrYm94ID0gdHJ1ZTtcbiAgQElucHV0KCkgc2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3ggPSBmYWxzZTtcbiAgQElucHV0KCkgYXNzZXQ6IElNYW5hZ2VkT2JqZWN0O1xuICBAVmlld0NoaWxkKCdtb2RhbFJlZicsIHsgc3RhdGljOiBmYWxzZSB9KSBtb2RhbFJlZjogQ29uZmlybU1vZGFsQ29tcG9uZW50O1xuICBjbG9zZVN1YmplY3Q6IFN1YmplY3Q8RGVsZXRlTW9kYWxDaGVja2JveGVzPiA9IG5ldyBTdWJqZWN0KCk7XG4gIGxhYmVsczogTW9kYWxMYWJlbHMgPSB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9O1xuICB0aXRsZTogc3RyaW5nID0gZ2V0dGV4dCgnRGVsZXRlJyk7XG4gIHN0YXR1czogU3RhdHVzVHlwZSA9IFN0YXR1cy5EQU5HRVI7XG4gIGNvbmZpZzogRGVsZXRlTW9kYWxDaGVja2JveGVzID0ge1xuICAgIGNhc2NhZGU6IGZhbHNlLFxuICAgIHdpdGhEZXZpY2VVc2VyOiBmYWxzZVxuICB9O1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGRlbGV0ZUdyb3VwU3ViQXNzZXRzTXNnOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRNb2RhbFRleHRzKCk7XG4gIH1cblxuICBhc3luYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWxSZWYucmVzdWx0O1xuICAgICAgdGhpcy5vbkNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMub25EaXNtaXNzKCk7XG4gICAgfVxuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRV9TVUJfQVNTRVRTX1NIQVJFRC5FVkVOVCwge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0VfU1VCX0FTU0VUU19TSEFSRUQuREVMRVRFX0FTU0VULkNPTVBPTkVOVFMuREVMRVRFX0FTU0VUU19NT0RBTCxcbiAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFX1NVQl9BU1NFVFNfU0hBUkVELkRFTEVURV9BU1NFVC5SRVNVTFRTLkRFTEVURUQsXG4gICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgIH0pO1xuICAgIHRoaXMuY2xvc2VTdWJqZWN0Lm5leHQodGhpcy5jb25maWcpO1xuICAgIHRoaXMuY2xvc2VTdWJqZWN0LmNvbXBsZXRlKCk7XG4gIH1cblxuICBvbkRpc21pc3MoKSB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0VfU1VCX0FTU0VUU19TSEFSRUQuRVZFTlQsIHtcbiAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFX1NVQl9BU1NFVFNfU0hBUkVELkRFTEVURV9BU1NFVC5DT01QT05FTlRTLkRFTEVURV9BU1NFVFNfTU9EQUwsXG4gICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRV9TVUJfQVNTRVRTX1NIQVJFRC5ERUxFVEVfQVNTRVQuUkVTVUxUUy5DQU5DRUxFRCxcbiAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgfSk7XG4gICAgdGhpcy5jbG9zZVN1YmplY3QuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0TW9kYWxUZXh0cygpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgIGdldHRleHQoXG4gICAgICAgICdZb3UgYXJlIGFib3V0IHRvIGRlbGV0ZTogXCJ7e25hbWV9fVwiLiBUaGlzIG9wZXJhdGlvbiBpcyBpcnJldmVyc2libGUuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/J1xuICAgICAgKSxcbiAgICAgIHsgbmFtZTogdGhpcy5hc3NldC5uYW1lIH1cbiAgICApO1xuICAgIHRoaXMuZGVsZXRlR3JvdXBTdWJBc3NldHNNc2cgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgIGdldHRleHQoJ0Fsc28gZGVsZXRlIGFsbCBkZXZpY2VzIGluc2lkZSBcInt7bmFtZX19XCIgYW5kIGl0cyBzdWJhc3NldHMuJyksXG4gICAgICB7IG5hbWU6IHRoaXMuYXNzZXQubmFtZSB9XG4gICAgKTtcbiAgfVxufVxuIiwiPGM4eS1jb25maXJtLW1vZGFsIFt0aXRsZV09XCJ0aXRsZVwiIFtzdGF0dXNdPVwic3RhdHVzXCIgW2xhYmVsc109XCJsYWJlbHNcIiAjbW9kYWxSZWY+XG4gIDxmb3JtICNhc3NldHNGb3JtPVwibmdGb3JtXCI+XG4gICAgPHAgY2xhc3M9XCJ0ZXh0LXdyYXAgbS1iLTE2XCI+XG4gICAgICB7eyBtZXNzYWdlIHwgdHJhbnNsYXRlIH19XG4gICAgPC9wPlxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdJZj1cInNob3dXaXRoQ2FzY2FkZUNoZWNrYm94XCIgY2xhc3M9XCJtLWItMFwiPlxuICAgICAgPGxhYmVsIHRpdGxlPVwie3sgJ0RlbGV0ZSBkZXZpY2VzJyB8IHRyYW5zbGF0ZSB9fVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgbmFtZT1cImNhc2NhZGVcIlxuICAgICAgICAgIFsobmdNb2RlbCldPVwiY29uZmlnLmNhc2NhZGVcIlxuICAgICAgICAgIGM4eVByb2R1Y3RFeHBlcmllbmNlXG4gICAgICAgICAgW2FjdGlvbk5hbWVdPVwiUFJPRFVDVF9FWFBFUklFTkNFLkVWRU5UXCJcbiAgICAgICAgICBbYWN0aW9uRGF0YV09XCJ7XG4gICAgICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5ERUxFVEVfQVNTRVQuQ09NUE9ORU5UUy5ERUxFVEVfQVNTRVRTX01PREFMLFxuICAgICAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuREVMRVRFX0FTU0VULkFDVElPTlMuQ0FTQ0FERV9ERUxFVEVcbiAgICAgICAgICB9XCJcbiAgICAgICAgICBbZGlzYWJsZWRdPVwiY29uZmlnPy53aXRoRGV2aWNlVXNlclwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWJyZWFrLXdvcmRcIj5cbiAgICAgICAgICB7eyBkZWxldGVHcm91cFN1YkFzc2V0c01zZyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2xhYmVsPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gICAgPGM4eS1mb3JtLWdyb3VwICpuZ0lmPVwic2hvd1dpdGhEZXZpY2VVc2VyQ2hlY2tib3hcIiBjbGFzcz1cIm0tYi0wXCI+XG4gICAgICA8bGFiZWwgdGl0bGU9XCJ7eyAnRGVsZXRlIGFzc29jaWF0ZWQgZGV2aWNlIG93bmVyJyB8IHRyYW5zbGF0ZSB9fVwiIGNsYXNzPVwiYzh5LWNoZWNrYm94XCI+XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgbmFtZT1cIndpdGhEZXZpY2VVc2VyXCJcbiAgICAgICAgICBbKG5nTW9kZWwpXT1cImNvbmZpZy53aXRoRGV2aWNlVXNlclwiXG4gICAgICAgICAgYzh5UHJvZHVjdEV4cGVyaWVuY2VcbiAgICAgICAgICBbYWN0aW9uTmFtZV09XCJQUk9EVUNUX0VYUEVSSUVOQ0UuRVZFTlRcIlxuICAgICAgICAgIFthY3Rpb25EYXRhXT1cIntcbiAgICAgICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkRFTEVURV9BU1NFVC5DT01QT05FTlRTLkRFTEVURV9BU1NFVFNfTU9EQUwsXG4gICAgICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5ERUxFVEVfQVNTRVQuQUNUSU9OUy5ERUxFVEVfREVWSUNFX09XTkVSXG4gICAgICAgICAgfVwiXG4gICAgICAgICAgW2Rpc2FibGVkXT1cImNvbmZpZz8uY2FzY2FkZVwiXG4gICAgICAgIC8+XG4gICAgICAgIDxzcGFuPjwvc3Bhbj5cbiAgICAgICAgPHNwYW4+XG4gICAgICAgICAge3sgJ0Fsc28gZGVsZXRlIGFzc29jaWF0ZWQgZGV2aWNlIG93bmVyLicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9sYWJlbD5cbiAgICA8L2M4eS1mb3JtLWdyb3VwPlxuICA8L2Zvcm0+XG48L2M4eS1jb25maXJtLW1vZGFsPlxuIl19