@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
33 lines • 16.4 kB
JavaScript
import { Component, Inject, Optional } from '@angular/core';
import { AbstractSingleTaskComponent, NAE_TAB_DATA, NAE_TASK_CONTENT_SERVICE_TYPE, TaskContentServiceType } from '@netgrif/components-core';
import * as i0 from "@angular/core";
import * as i1 from "@netgrif/components-core";
import * as i2 from "@angular/router";
import * as i3 from "@angular/common";
import * as i4 from "@ngbracket/ngx-layout";
import * as i5 from "@angular/material/card";
import * as i6 from "@angular/material/icon";
import * as i7 from "@angular/material/progress-spinner";
import * as i8 from "../task-panel/task-panel.component";
import * as i9 from "@ngx-translate/core";
export class SingleTaskComponent extends AbstractSingleTaskComponent {
_log;
_route;
constructor(_log, _route, _injectedTabData) {
super(_log, _route, _injectedTabData);
this._log = _log;
this._route = _route;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SingleTaskComponent, deps: [{ token: i1.LoggerService }, { token: i2.ActivatedRoute }, { token: NAE_TAB_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: SingleTaskComponent, selector: "nc-single-task", providers: [{ provide: NAE_TASK_CONTENT_SERVICE_TYPE, useValue: TaskContentServiceType.UNLIMITED }], usesInheritance: true, ngImport: i0, template: "<div fxLayout='column' fxLayoutAlign='start center' fxFlex>\n <ng-container *nccLet=\"(task$ | async) as task\">\n\n <div *ngIf='(loading$ | async) === false && !task' fxLayout='column' fxLayoutAlign='center center'\n fxFlex>\n <div *ngTemplateOutlet =\"noTaskSection ?? defaultNoTaskSection\"></div>\n </div>\n\n <div *ngIf=\"task\" class=\"task-panel-scroll-container full-width full-height\">\n <div *ngTemplateOutlet='pageHeader ?? defaultPageHeader'></div>\n <nc-task-panel\n [textEllipsis]='textEllipsis'\n [taskPanelData]='task'\n [selectedHeaders$]='selectedHeaders$'\n [forceLoadDataOnOpen]='forceLoadDataOnOpen'\n [responsiveBody]='responsiveBody'\n (taskEvent)='emitTaskEvent($event)'\n (panelRefOutput)='setPanelRef($event)'\n [preventCollapse]='preventCollapse'\n [hidePanelHeader]='hidePanelHeader'\n [actionButtonTemplates]='actionButtonTemplates'\n [actionRowJustifyContent]='actionRowJustifyContent'\n [first]='true'\n [last]='true'\n [hideActionRow]=\"hideActionRow\"\n class='panel-expanded-spacing'>\n </nc-task-panel>\n\n <div *ngIf='loading$ | async' fxLayout='column' fxLayoutAlign='center center'>\n <mat-spinner color='primary' diameter='52'></mat-spinner>\n </div>\n <div *ngTemplateOutlet='pageFooter ?? defaultPageFooter'></div>\n </div>\n\n <ng-template #defaultNoTaskSection>\n <mat-icon color='accent'>check_box</mat-icon>\n <span class='font-size-20'>{{ 'tasks.view.noTasksSatisfyingThisFilter' | translate }}</span>\n </ng-template>\n\n <ng-template #defaultPageHeader>\n <mat-card class=\"top-card\" *ngIf=\"showPageHeader\">\n <span class=\"top-card-title\"><strong>{{headerTitle ?? (!!task && !!task.task ? task.task.title : '')}}</strong></span>\n </mat-card>\n </ng-template>\n\n <ng-template #defaultPageFooter>\n <mat-card class='bottom-card footer' *ngIf=\"showPageFooter\">\n <span class=\"bottom-card-title footer-font\"><strong>{{footerText ?? 'tasks.footer.defaultText' | translate}}</strong></span>\n </mat-card>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".font-size-20{font-size:20px}.full-width{width:100%}.full-height{height:100%}.top-card{margin-bottom:10px;margin-top:10px}.top-card-title{display:flex;align-items:center;flex-direction:column}.bottom-card{margin-bottom:10px;margin-top:10px}.bottom-card-title{display:block;align-items:start;flex-direction:column}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i4.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "component", type: i5.MatCard, selector: "mat-card", inputs: ["appearance"], exportAs: ["matCard"] }, { kind: "component", type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i1.LetDirective, selector: "[nccLet]", inputs: ["nccLet"] }, { kind: "component", type: i8.TaskPanelComponent, selector: "nc-task-panel" }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SingleTaskComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-single-task', providers: [{ provide: NAE_TASK_CONTENT_SERVICE_TYPE, useValue: TaskContentServiceType.UNLIMITED }], template: "<div fxLayout='column' fxLayoutAlign='start center' fxFlex>\n <ng-container *nccLet=\"(task$ | async) as task\">\n\n <div *ngIf='(loading$ | async) === false && !task' fxLayout='column' fxLayoutAlign='center center'\n fxFlex>\n <div *ngTemplateOutlet =\"noTaskSection ?? defaultNoTaskSection\"></div>\n </div>\n\n <div *ngIf=\"task\" class=\"task-panel-scroll-container full-width full-height\">\n <div *ngTemplateOutlet='pageHeader ?? defaultPageHeader'></div>\n <nc-task-panel\n [textEllipsis]='textEllipsis'\n [taskPanelData]='task'\n [selectedHeaders$]='selectedHeaders$'\n [forceLoadDataOnOpen]='forceLoadDataOnOpen'\n [responsiveBody]='responsiveBody'\n (taskEvent)='emitTaskEvent($event)'\n (panelRefOutput)='setPanelRef($event)'\n [preventCollapse]='preventCollapse'\n [hidePanelHeader]='hidePanelHeader'\n [actionButtonTemplates]='actionButtonTemplates'\n [actionRowJustifyContent]='actionRowJustifyContent'\n [first]='true'\n [last]='true'\n [hideActionRow]=\"hideActionRow\"\n class='panel-expanded-spacing'>\n </nc-task-panel>\n\n <div *ngIf='loading$ | async' fxLayout='column' fxLayoutAlign='center center'>\n <mat-spinner color='primary' diameter='52'></mat-spinner>\n </div>\n <div *ngTemplateOutlet='pageFooter ?? defaultPageFooter'></div>\n </div>\n\n <ng-template #defaultNoTaskSection>\n <mat-icon color='accent'>check_box</mat-icon>\n <span class='font-size-20'>{{ 'tasks.view.noTasksSatisfyingThisFilter' | translate }}</span>\n </ng-template>\n\n <ng-template #defaultPageHeader>\n <mat-card class=\"top-card\" *ngIf=\"showPageHeader\">\n <span class=\"top-card-title\"><strong>{{headerTitle ?? (!!task && !!task.task ? task.task.title : '')}}</strong></span>\n </mat-card>\n </ng-template>\n\n <ng-template #defaultPageFooter>\n <mat-card class='bottom-card footer' *ngIf=\"showPageFooter\">\n <span class=\"bottom-card-title footer-font\"><strong>{{footerText ?? 'tasks.footer.defaultText' | translate}}</strong></span>\n </mat-card>\n </ng-template>\n </ng-container>\n</div>\n", styles: [".font-size-20{font-size:20px}.full-width{width:100%}.full-height{height:100%}.top-card{margin-bottom:10px;margin-top:10px}.top-card-title{display:flex;align-items:center;flex-direction:column}.bottom-card{margin-bottom:10px;margin-top:10px}.bottom-card-title{display:block;align-items:start;flex-direction:column}\n"] }]
}], ctorParameters: () => [{ type: i1.LoggerService }, { type: i2.ActivatedRoute }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_TAB_DATA]
}] }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xlLXRhc2suY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvcGFuZWwvdGFzay1wYW5lbC1zaW5nbGUvc2luZ2xlLXRhc2suY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzL3NyYy9saWIvcGFuZWwvdGFzay1wYW5lbC1zaW5nbGUvc2luZ2xlLXRhc2suY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzFELE9BQU8sRUFDSCwyQkFBMkIsRUFHM0IsWUFBWSxFQUNaLDZCQUE2QixFQUFFLHNCQUFzQixFQUN4RCxNQUFNLDBCQUEwQixDQUFDOzs7Ozs7Ozs7OztBQVNsQyxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsMkJBQTJCO0lBRTFDO0lBQ0E7SUFEdEIsWUFBc0IsSUFBbUIsRUFDbkIsTUFBc0IsRUFDRSxnQkFBaUM7UUFDM0UsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUhwQixTQUFJLEdBQUosSUFBSSxDQUFlO1FBQ25CLFdBQU0sR0FBTixNQUFNLENBQWdCO0lBRzVDLENBQUM7d0dBTlEsbUJBQW1CLDZFQUlJLFlBQVk7NEZBSm5DLG1CQUFtQix5Q0FGakIsQ0FBQyxFQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxFQUFDLENBQUMsaURDZHJHLDA4RUFvREE7OzRGRHBDYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0ksZ0JBQWdCLGFBR2YsQ0FBQyxFQUFDLE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxRQUFRLEVBQUUsc0JBQXNCLENBQUMsU0FBUyxFQUFDLENBQUM7OzBCQU1wRixRQUFROzswQkFBSSxNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0U2luZ2xlVGFza0NvbXBvbmVudCxcbiAgICBJbmplY3RlZFRhYkRhdGEsXG4gICAgTG9nZ2VyU2VydmljZSxcbiAgICBOQUVfVEFCX0RBVEEsXG4gICAgTkFFX1RBU0tfQ09OVEVOVF9TRVJWSUNFX1RZUEUsIFRhc2tDb250ZW50U2VydmljZVR5cGVcbn0gZnJvbSAnQG5ldGdyaWYvY29tcG9uZW50cy1jb3JlJztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmMtc2luZ2xlLXRhc2snLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zaW5nbGUtdGFzay5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2luZ2xlLXRhc2suY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFt7cHJvdmlkZTogTkFFX1RBU0tfQ09OVEVOVF9TRVJWSUNFX1RZUEUsIHVzZVZhbHVlOiBUYXNrQ29udGVudFNlcnZpY2VUeXBlLlVOTElNSVRFRH1dXG59KVxuZXhwb3J0IGNsYXNzIFNpbmdsZVRhc2tDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFNpbmdsZVRhc2tDb21wb25lbnQge1xuXG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9sb2c6IExvZ2dlclNlcnZpY2UsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChOQUVfVEFCX0RBVEEpIF9pbmplY3RlZFRhYkRhdGE6IEluamVjdGVkVGFiRGF0YSkge1xuICAgICAgICBzdXBlcihfbG9nLCBfcm91dGUsIF9pbmplY3RlZFRhYkRhdGEpO1xuICAgIH1cblxufVxuIiwiPGRpdiBmeExheW91dD0nY29sdW1uJyBmeExheW91dEFsaWduPSdzdGFydCBjZW50ZXInIGZ4RmxleD5cbiAgICA8bmctY29udGFpbmVyICpuY2NMZXQ9XCIodGFzayQgfCBhc3luYykgYXMgdGFza1wiPlxuXG4gICAgICAgIDxkaXYgKm5nSWY9Jyhsb2FkaW5nJCB8IGFzeW5jKSA9PT0gZmFsc2UgJiYgIXRhc2snIGZ4TGF5b3V0PSdjb2x1bW4nIGZ4TGF5b3V0QWxpZ249J2NlbnRlciBjZW50ZXInXG4gICAgICAgICAgICAgZnhGbGV4PlxuICAgICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldCA9XCJub1Rhc2tTZWN0aW9uID8/IGRlZmF1bHROb1Rhc2tTZWN0aW9uXCI+PC9kaXY+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ0YXNrXCIgY2xhc3M9XCJ0YXNrLXBhbmVsLXNjcm9sbC1jb250YWluZXIgZnVsbC13aWR0aCBmdWxsLWhlaWdodFwiPlxuICAgICAgICAgICAgPGRpdiAqbmdUZW1wbGF0ZU91dGxldD0ncGFnZUhlYWRlciA/PyBkZWZhdWx0UGFnZUhlYWRlcic+PC9kaXY+XG4gICAgICAgICAgICA8bmMtdGFzay1wYW5lbFxuICAgICAgICAgICAgICAgIFt0ZXh0RWxsaXBzaXNdPSd0ZXh0RWxsaXBzaXMnXG4gICAgICAgICAgICAgICAgW3Rhc2tQYW5lbERhdGFdPSd0YXNrJ1xuICAgICAgICAgICAgICAgIFtzZWxlY3RlZEhlYWRlcnMkXT0nc2VsZWN0ZWRIZWFkZXJzJCdcbiAgICAgICAgICAgICAgICBbZm9yY2VMb2FkRGF0YU9uT3Blbl09J2ZvcmNlTG9hZERhdGFPbk9wZW4nXG4gICAgICAgICAgICAgICAgW3Jlc3BvbnNpdmVCb2R5XT0ncmVzcG9uc2l2ZUJvZHknXG4gICAgICAgICAgICAgICAgKHRhc2tFdmVudCk9J2VtaXRUYXNrRXZlbnQoJGV2ZW50KSdcbiAgICAgICAgICAgICAgICAocGFuZWxSZWZPdXRwdXQpPSdzZXRQYW5lbFJlZigkZXZlbnQpJ1xuICAgICAgICAgICAgICAgIFtwcmV2ZW50Q29sbGFwc2VdPSdwcmV2ZW50Q29sbGFwc2UnXG4gICAgICAgICAgICAgICAgW2hpZGVQYW5lbEhlYWRlcl09J2hpZGVQYW5lbEhlYWRlcidcbiAgICAgICAgICAgICAgICBbYWN0aW9uQnV0dG9uVGVtcGxhdGVzXT0nYWN0aW9uQnV0dG9uVGVtcGxhdGVzJ1xuICAgICAgICAgICAgICAgIFthY3Rpb25Sb3dKdXN0aWZ5Q29udGVudF09J2FjdGlvblJvd0p1c3RpZnlDb250ZW50J1xuICAgICAgICAgICAgICAgIFtmaXJzdF09J3RydWUnXG4gICAgICAgICAgICAgICAgW2xhc3RdPSd0cnVlJ1xuICAgICAgICAgICAgICAgIFtoaWRlQWN0aW9uUm93XT1cImhpZGVBY3Rpb25Sb3dcIlxuICAgICAgICAgICAgICAgIGNsYXNzPSdwYW5lbC1leHBhbmRlZC1zcGFjaW5nJz5cbiAgICAgICAgICAgIDwvbmMtdGFzay1wYW5lbD5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj0nbG9hZGluZyQgfCBhc3luYycgZnhMYXlvdXQ9J2NvbHVtbicgZnhMYXlvdXRBbGlnbj0nY2VudGVyIGNlbnRlcic+XG4gICAgICAgICAgICAgICAgPG1hdC1zcGlubmVyIGNvbG9yPSdwcmltYXJ5JyBkaWFtZXRlcj0nNTInPjwvbWF0LXNwaW5uZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nVGVtcGxhdGVPdXRsZXQ9J3BhZ2VGb290ZXIgPz8gZGVmYXVsdFBhZ2VGb290ZXInPjwvZGl2PlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHROb1Rhc2tTZWN0aW9uPlxuICAgICAgICAgICAgPG1hdC1pY29uIGNvbG9yPSdhY2NlbnQnPmNoZWNrX2JveDwvbWF0LWljb24+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz0nZm9udC1zaXplLTIwJz57eyAndGFza3Mudmlldy5ub1Rhc2tzU2F0aXNmeWluZ1RoaXNGaWx0ZXInIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdFBhZ2VIZWFkZXI+XG4gICAgICAgICAgICA8bWF0LWNhcmQgY2xhc3M9XCJ0b3AtY2FyZFwiICpuZ0lmPVwic2hvd1BhZ2VIZWFkZXJcIj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvcC1jYXJkLXRpdGxlXCI+PHN0cm9uZz57e2hlYWRlclRpdGxlID8/ICghIXRhc2sgJiYgISF0YXNrLnRhc2sgPyB0YXNrLnRhc2sudGl0bGUgOiAnJyl9fTwvc3Ryb25nPjwvc3Bhbj5cbiAgICAgICAgICAgIDwvbWF0LWNhcmQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0UGFnZUZvb3Rlcj5cbiAgICAgICAgICAgIDxtYXQtY2FyZCBjbGFzcz0nYm90dG9tLWNhcmQgZm9vdGVyJyAqbmdJZj1cInNob3dQYWdlRm9vdGVyXCI+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJib3R0b20tY2FyZC10aXRsZSBmb290ZXItZm9udFwiPjxzdHJvbmc+e3tmb290ZXJUZXh0ID8/ICd0YXNrcy5mb290ZXIuZGVmYXVsdFRleHQnIHwgdHJhbnNsYXRlfX08L3N0cm9uZz48L3NwYW4+XG4gICAgICAgICAgICA8L21hdC1jYXJkPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=