UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

70 lines 15.8 kB
import { NgForOf } from '@angular/common'; import { Component } from '@angular/core'; import { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms'; import { C8yTranslateDirective, C8yTranslatePipe, FormGroupComponent, IconDirective, MessageDirective, MessagesComponent, ModalModule } from '@c8y/ngx-components'; import { gettext } from '@c8y/ngx-components/gettext'; import * as i0 from "@angular/core"; import * as i1 from "@angular/forms"; import * as i2 from "@c8y/ngx-components"; export class AddTranslationModalComponent { constructor(formBuilder) { this.formBuilder = formBuilder; this.title = gettext('Add translation'); this.result = new Promise((resolve, reject) => { this._resovle = resolve; this._reject = reject; }); this.alreadyTakenMsg = gettext('The provided translation key has already been defined.'); this.alreadyDefinedKeys = []; this.availableLangs = []; } ngOnInit() { this.form = this.initForm(); } initForm() { return this.formBuilder.group({ key: ['', [Validators.required, this.ensureNotExistingKey()]], ...this.availableLangs .map(language => { return { [language.lang]: [''] }; }) .reduceRight((acc, curr) => ({ ...curr, ...acc }), {}) }); } cancel() { this._reject(); } save() { this._resovle(this.form.value); } ensureNotExistingKey() { return (control) => { if (typeof control.value === 'string') { const keyAlreadyTaken = this.alreadyDefinedKeys.some(name => name === control.value); if (keyAlreadyTaken) { return { keyAlreadyTaken: {} }; } } return null; }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddTranslationModalComponent, deps: [{ token: i1.FormBuilder }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: AddTranslationModalComponent, isStandalone: true, selector: "c8y-add-translation-modal", ngImport: i0, template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Add' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'language1'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"label\"\n translate\n >\n Translation key\n </label>\n <input\n class=\"form-control\"\n name=\"key\"\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'Home' } }}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"keyAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group *ngFor=\"let language of availableLangs\">\n <label\n [for]=\"language.lang\"\n >\n {{ language.nativeLanguage }} ({{ language.lang }})\n </label>\n <input\n class=\"form-control\"\n [name]=\"language.lang\"\n [id]=\"language.lang\"\n type=\"text\"\n [formControlName]=\"language.lang\"\n />\n </c8y-form-group>\n </div>\n</c8y-modal>\n", dependencies: [{ kind: "ngmodule", type: ModalModule }, { kind: "component", type: i2.ModalComponent, selector: "c8y-modal", inputs: ["disabled", "close", "dismiss", "title", "body", "customFooter", "headerClasses", "labels"], outputs: ["onDismiss", "onClose"] }, { kind: "directive", type: IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "component", type: MessagesComponent, selector: "c8y-messages", inputs: ["show", "defaults", "helpMessage"] }, { kind: "directive", type: MessageDirective, selector: "c8y-message", inputs: ["name", "text"] }, { kind: "pipe", type: C8yTranslatePipe, name: "translate" }, { kind: "directive", type: C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: FormGroupComponent, selector: "c8y-form-group", inputs: ["hasError", "hasWarning", "hasSuccess", "novalidation", "status"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AddTranslationModalComponent, decorators: [{ type: Component, args: [{ selector: 'c8y-add-translation-modal', standalone: true, imports: [ ModalModule, IconDirective, MessagesComponent, MessageDirective, C8yTranslatePipe, C8yTranslateDirective, ReactiveFormsModule, NgForOf, FormGroupComponent ], template: "<c8y-modal\n [title]=\"title\"\n [headerClasses]=\"'dialog-header'\"\n (onDismiss)=\"cancel()\"\n (onClose)=\"save()\"\n [disabled]=\"form.invalid\"\n [labels]=\"{ cancel: 'Cancel', ok: 'Add' }\"\n>\n<ng-container c8y-modal-title>\n <span [c8yIcon]=\"'language1'\"></span>\n</ng-container>\n <div [formGroup]=\"form\" class=\"p-24\">\n <c8y-form-group>\n <label\n for=\"label\"\n translate\n >\n Translation key\n </label>\n <input\n class=\"form-control\"\n name=\"key\"\n id=\"key\"\n type=\"text\"\n formControlName=\"key\"\n placeholder=\"{{'e.g. {{ example }}' | translate : { example: 'Home' } }}\"\n />\n <c8y-messages>\n <c8y-message\n name=\"keyAlreadyTaken\"\n [text]=\"alreadyTakenMsg | translate\"\n ></c8y-message>\n </c8y-messages>\n </c8y-form-group>\n\n <c8y-form-group *ngFor=\"let language of availableLangs\">\n <label\n [for]=\"language.lang\"\n >\n {{ language.nativeLanguage }} ({{ language.lang }})\n </label>\n <input\n class=\"form-control\"\n [name]=\"language.lang\"\n [id]=\"language.lang\"\n type=\"text\"\n [formControlName]=\"language.lang\"\n />\n </c8y-form-group>\n </div>\n</c8y-modal>\n" }] }], ctorParameters: () => [{ type: i1.FormBuilder }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RyYW5zbGF0aW9uLWVkaXRvci9sYXp5L2FkZC10cmFuc2xhdGlvbi1tb2RhbC9hZGQtdHJhbnNsYXRpb24tbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdHJhbnNsYXRpb24tZWRpdG9yL2xhenkvYWRkLXRyYW5zbGF0aW9uLW1vZGFsL2FkZC10cmFuc2xhdGlvbi1tb2RhbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNsRCxPQUFPLEVBRUwsV0FBVyxFQUNYLG1CQUFtQixFQUVuQixVQUFVLEVBQ1gsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQixpQkFBaUIsRUFDakIsV0FBVyxFQUNaLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLDZCQUE2QixDQUFDOzs7O0FBa0J0RCxNQUFNLE9BQU8sNEJBQTRCO0lBa0J2QyxZQUFvQixXQUF3QjtRQUF4QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQWpCbkMsVUFBSyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRzVDLFdBQU0sR0FBRyxJQUFJLE9BQU8sQ0FBNEMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbEYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxvQkFBZSxHQUFHLE9BQU8sQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1FBQ3BGLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUNsQyxtQkFBYyxHQUdSLEVBQUUsQ0FBQztJQUtzQyxDQUFDO0lBRWhELFFBQVE7UUFDTixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUM7WUFDNUIsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQyxDQUFDO1lBQzdELEdBQUcsSUFBSSxDQUFDLGNBQWM7aUJBQ25CLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDZCxPQUFPO29CQUNMLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO2lCQUN0QixDQUFDO1lBQ0osQ0FBQyxDQUFDO2lCQUNELFdBQVcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1NBQ3pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFFTyxvQkFBb0I7UUFDMUIsT0FBTyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtZQUNsQyxJQUFJLE9BQU8sT0FBTyxDQUFDLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3JGLElBQUksZUFBZSxFQUFFLENBQUM7b0JBQ3BCLE9BQU8sRUFBRSxlQUFlLEVBQUUsRUFBRSxFQUFFLENBQUM7Z0JBQ2pDLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUM7SUFDSixDQUFDOytHQXZEVSw0QkFBNEI7bUdBQTVCLDRCQUE0QixxRkNwQ3pDLHEwQ0FtREEsMkNEMUJJLFdBQVcsK09BQ1gsYUFBYSwyRUFDYixpQkFBaUIsc0dBQ2pCLGdCQUFnQiw2RUFDaEIsZ0JBQWdCLGtEQUNoQixxQkFBcUIsdUVBQ3JCLG1CQUFtQixvMkJBQ25CLE9BQU8sbUhBQ1Asa0JBQWtCOzs0RkFHVCw0QkFBNEI7a0JBaEJ4QyxTQUFTOytCQUNFLDJCQUEyQixjQUV6QixJQUFJLFdBQ1A7d0JBQ1AsV0FBVzt3QkFDWCxhQUFhO3dCQUNiLGlCQUFpQjt3QkFDakIsZ0JBQWdCO3dCQUNoQixnQkFBZ0I7d0JBQ2hCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixPQUFPO3dCQUNQLGtCQUFrQjtxQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ0Zvck9mIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIEZvcm1CdWlsZGVyLFxuICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICBWYWxpZGF0b3JGbixcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDOHlUcmFuc2xhdGVEaXJlY3RpdmUsXG4gIEM4eVRyYW5zbGF0ZVBpcGUsXG4gIEZvcm1Hcm91cENvbXBvbmVudCxcbiAgSWNvbkRpcmVjdGl2ZSxcbiAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgTWVzc2FnZXNDb21wb25lbnQsXG4gIE1vZGFsTW9kdWxlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZ2V0dGV4dCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1hZGQtdHJhbnNsYXRpb24tbW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vYWRkLXRyYW5zbGF0aW9uLW1vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIE1vZGFsTW9kdWxlLFxuICAgIEljb25EaXJlY3RpdmUsXG4gICAgTWVzc2FnZXNDb21wb25lbnQsXG4gICAgTWVzc2FnZURpcmVjdGl2ZSxcbiAgICBDOHlUcmFuc2xhdGVQaXBlLFxuICAgIEM4eVRyYW5zbGF0ZURpcmVjdGl2ZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIE5nRm9yT2YsXG4gICAgRm9ybUdyb3VwQ29tcG9uZW50XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgQWRkVHJhbnNsYXRpb25Nb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHJlYWRvbmx5IHRpdGxlID0gZ2V0dGV4dCgnQWRkIHRyYW5zbGF0aW9uJyk7XG4gIGZvcm06IFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+O1xuXG4gIHJlc3VsdCA9IG5ldyBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHRoaXMuaW5pdEZvcm0+Wyd2YWx1ZSddPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdGhpcy5fcmVzb3ZsZSA9IHJlc29sdmU7XG4gICAgdGhpcy5fcmVqZWN0ID0gcmVqZWN0O1xuICB9KTtcbiAgYWxyZWFkeVRha2VuTXNnID0gZ2V0dGV4dCgnVGhlIHByb3ZpZGVkIHRyYW5zbGF0aW9uIGtleSBoYXMgYWxyZWFkeSBiZWVuIGRlZmluZWQuJyk7XG4gIGFscmVhZHlEZWZpbmVkS2V5czogc3RyaW5nW10gPSBbXTtcbiAgYXZhaWxhYmxlTGFuZ3M6IHtcbiAgICBsYW5nOiBzdHJpbmc7XG4gICAgbmF0aXZlTGFuZ3VhZ2U6IHN0cmluZztcbiAgfVtdID0gW107XG5cbiAgcHJpdmF0ZSBfcmVzb3ZsZTogKHZhbHVlOiBSZXR1cm5UeXBlPHR5cGVvZiB0aGlzLmluaXRGb3JtPlsndmFsdWUnXSkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfcmVqZWN0OiAocmVhc29uPzogYW55KSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuaW5pdEZvcm0oKTtcbiAgfVxuXG4gIGluaXRGb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1CdWlsZGVyLmdyb3VwKHtcbiAgICAgIGtleTogWycnLCBbVmFsaWRhdG9ycy5yZXF1aXJlZCwgdGhpcy5lbnN1cmVOb3RFeGlzdGluZ0tleSgpXV0sXG4gICAgICAuLi50aGlzLmF2YWlsYWJsZUxhbmdzXG4gICAgICAgIC5tYXAobGFuZ3VhZ2UgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBbbGFuZ3VhZ2UubGFuZ106IFsnJ11cbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAucmVkdWNlUmlnaHQoKGFjYywgY3VycikgPT4gKHsgLi4uY3VyciwgLi4uYWNjIH0pLCB7fSlcbiAgICB9KTtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICB0aGlzLl9yZWplY3QoKTtcbiAgfVxuXG4gIHNhdmUoKSB7XG4gICAgdGhpcy5fcmVzb3ZsZSh0aGlzLmZvcm0udmFsdWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVOb3RFeGlzdGluZ0tleSgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3Qga2V5QWxyZWFkeVRha2VuID0gdGhpcy5hbHJlYWR5RGVmaW5lZEtleXMuc29tZShuYW1lID0+IG5hbWUgPT09IGNvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoa2V5QWxyZWFkeVRha2VuKSB7XG4gICAgICAgICAgcmV0dXJuIHsga2V5QWxyZWFkeVRha2VuOiB7fSB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9XG59XG4iLCI8Yzh5LW1vZGFsXG4gIFt0aXRsZV09XCJ0aXRsZVwiXG4gIFtoZWFkZXJDbGFzc2VzXT1cIidkaWFsb2ctaGVhZGVyJ1wiXG4gIChvbkRpc21pc3MpPVwiY2FuY2VsKClcIlxuICAob25DbG9zZSk9XCJzYXZlKClcIlxuICBbZGlzYWJsZWRdPVwiZm9ybS5pbnZhbGlkXCJcbiAgW2xhYmVsc109XCJ7IGNhbmNlbDogJ0NhbmNlbCcsIG9rOiAnQWRkJyB9XCJcbj5cbjxuZy1jb250YWluZXIgYzh5LW1vZGFsLXRpdGxlPlxuICA8c3BhbiBbYzh5SWNvbl09XCInbGFuZ3VhZ2UxJ1wiPjwvc3Bhbj5cbjwvbmctY29udGFpbmVyPlxuICA8ZGl2IFtmb3JtR3JvdXBdPVwiZm9ybVwiIGNsYXNzPVwicC0yNFwiPlxuICAgIDxjOHktZm9ybS1ncm91cD5cbiAgICAgIDxsYWJlbFxuICAgICAgICBmb3I9XCJsYWJlbFwiXG4gICAgICAgIHRyYW5zbGF0ZVxuICAgICAgPlxuICAgICAgICBUcmFuc2xhdGlvbiBrZXlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBuYW1lPVwia2V5XCJcbiAgICAgICAgaWQ9XCJrZXlcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIGZvcm1Db250cm9sTmFtZT1cImtleVwiXG4gICAgICAgIHBsYWNlaG9sZGVyPVwie3snZS5nLiB7eyBleGFtcGxlIH19JyB8IHRyYW5zbGF0ZSA6IHsgZXhhbXBsZTogJ0hvbWUnIH0gfX1cIlxuICAgICAgLz5cbiAgICAgIDxjOHktbWVzc2FnZXM+XG4gICAgICAgIDxjOHktbWVzc2FnZVxuICAgICAgICAgIG5hbWU9XCJrZXlBbHJlYWR5VGFrZW5cIlxuICAgICAgICAgIFt0ZXh0XT1cImFscmVhZHlUYWtlbk1zZyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgID48L2M4eS1tZXNzYWdlPlxuICAgICAgPC9jOHktbWVzc2FnZXM+XG4gICAgPC9jOHktZm9ybS1ncm91cD5cblxuICAgIDxjOHktZm9ybS1ncm91cCAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgYXZhaWxhYmxlTGFuZ3NcIj5cbiAgICAgIDxsYWJlbFxuICAgICAgICBbZm9yXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgPlxuICAgICAgICB7eyBsYW5ndWFnZS5uYXRpdmVMYW5ndWFnZSB9fSAoe3sgbGFuZ3VhZ2UubGFuZyB9fSlcbiAgICAgIDwvbGFiZWw+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIlxuICAgICAgICBbbmFtZV09XCJsYW5ndWFnZS5sYW5nXCJcbiAgICAgICAgW2lkXT1cImxhbmd1YWdlLmxhbmdcIlxuICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwibGFuZ3VhZ2UubGFuZ1wiXG4gICAgICAvPlxuICAgIDwvYzh5LWZvcm0tZ3JvdXA+XG4gIDwvZGl2PlxuPC9jOHktbW9kYWw+XG4iXX0=