@netgrif/components
Version:
Netgrif Application Engine frontend Angular components
114 lines • 22.4 kB
JavaScript
import { Component, Inject } from '@angular/core';
import { AbstractTabbedSingleTaskViewComponent, AllowedNetsService, AllowedNetsServiceFactory, ChangedFieldsService, FinishTaskService, NAE_BASE_FILTER, NAE_TAB_DATA, NAE_TASK_OPERATIONS, NAE_VIEW_ID_SEGMENT, FrontActionService, RedirectService, SearchService, SubjectTaskOperations, TaskDataService, TaskEventService, TaskRequestStateService, TaskViewService, ViewIdService, extractFieldValueFromData, SimpleFilter, FilterType, MergeOperator } from '@netgrif/components-core';
import { AsyncPipe } from "@angular/common";
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/button";
import * as i6 from "../../../../../panel/task-panel-single/single-task.component";
import * as i7 from "@ngx-translate/core";
function baseFilterFactory(injectedTabData) {
const requestBody = injectedTabData.baseFilter.getRequestBody();
if (requestBody.transitionId === undefined) {
const viewDataGroups = injectedTabData.navigationItemTaskData?.slice(4, injectedTabData.navigationItemTaskData.length);
if (viewDataGroups !== undefined) {
const viewTransitionId = extractFieldValueFromData(viewDataGroups, "transition_id");
if (viewTransitionId !== undefined) {
return {
filter: injectedTabData.baseFilter.merge(new SimpleFilter('', FilterType.TASK, { transitionId: viewTransitionId?.split(",") }), MergeOperator.AND)
};
}
}
}
return {
filter: injectedTabData.baseFilter
};
}
const localAllowedNetsFactory = (factory) => {
return factory.createWithAllNets();
};
export class DefaultTabbedSingleTaskViewComponent extends AbstractTabbedSingleTaskViewComponent {
_router;
hidePanelHeader = true;
hideActionRow = false;
showPageHeader = true;
showPageFooter = false;
actionRowJustifyContent = "center";
showFinishButton = true;
showCloseButton = true;
constructor(taskViewService, injectedTabData, activatedRoute, _router) {
super(taskViewService, injectedTabData, activatedRoute);
this._router = _router;
}
ngOnInit() {
this._router.routeReuseStrategy.shouldReuseRoute = () => false;
}
closeTab() {
this._injectedTabData.tabViewRef.closeTabIndex(this._injectedTabData.tabViewRef.currentlySelectedTab());
}
getFinishTitle() {
return (this.finishTitle === '' || this.finishTitle) ? this.finishTitle : 'tasks.view.finish';
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultTabbedSingleTaskViewComponent, deps: [{ token: i1.TaskViewService }, { token: NAE_TAB_DATA }, { token: i2.ActivatedRoute }, { token: i2.Router }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: DefaultTabbedSingleTaskViewComponent, selector: "nc-default-tabbed-single-task-view", providers: [
TaskViewService,
SearchService,
RedirectService,
ChangedFieldsService,
{
provide: NAE_BASE_FILTER,
useFactory: baseFilterFactory,
deps: [NAE_TAB_DATA]
},
{ provide: NAE_VIEW_ID_SEGMENT, useValue: 'publicTaskView' },
{ provide: AllowedNetsServiceFactory, useClass: AllowedNetsServiceFactory },
{
provide: AllowedNetsService,
useFactory: localAllowedNetsFactory,
deps: [AllowedNetsServiceFactory]
},
ViewIdService,
TaskDataService,
FrontActionService,
FinishTaskService,
TaskRequestStateService,
TaskEventService,
{ provide: NAE_TASK_OPERATIONS, useClass: SubjectTaskOperations },
AsyncPipe
], usesInheritance: true, ngImport: i0, template: "<div class=\"task-tab-background full-height\">\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"content-margin full-height\" >\n <nc-single-task [task$]=\"task$\" [loading$]=\"loading$\" [selectedHeaders$]=\"selectedHeaders$\"\n [actionRowJustifyContent]=\"actionRowJustifyContent\" [hideActionRow]=\"hideActionRow\" [hidePanelHeader]=\"hidePanelHeader\"\n [showPageHeader]=\"showPageHeader\" [showPageFooter]=\"showPageFooter\" [actionButtonTemplates]='[closeButton, finishButton]' fxFlex></nc-single-task>\n </div>\n</div>\n\n<ng-template #closeButton >\n <button *ngIf=\"showCloseButton\" (click)=\"closeTab()\" mat-stroked-button color=\"primary\">\n {{ 'tasks.view.closeTab' | translate | uppercase }}</button>\n</ng-template>\n\n<ng-template #finishButton let-finish=\"finish\">\n <button *ngIf=\"showFinishButton\" (click)=\"finish()\" mat-stroked-button color=\"primary\" >\n {{ getFinishTitle() | translate | uppercase }}</button>\n</ng-template>\n", styles: [".task-tab-background{height:100%;width:100%;overflow:auto;background-color:transparent}.content-margin{margin:8px 24px 0}.full-height{height:calc(100% - 8px)}@media screen and (max-width: 599.99px){.content-margin{margin:8px 12px 0}}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i6.SingleTaskComponent, selector: "nc-single-task" }, { kind: "pipe", type: i3.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i7.TranslatePipe, name: "translate" }] });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DefaultTabbedSingleTaskViewComponent, decorators: [{
type: Component,
args: [{ selector: 'nc-default-tabbed-single-task-view', providers: [
TaskViewService,
SearchService,
RedirectService,
ChangedFieldsService,
{
provide: NAE_BASE_FILTER,
useFactory: baseFilterFactory,
deps: [NAE_TAB_DATA]
},
{ provide: NAE_VIEW_ID_SEGMENT, useValue: 'publicTaskView' },
{ provide: AllowedNetsServiceFactory, useClass: AllowedNetsServiceFactory },
{
provide: AllowedNetsService,
useFactory: localAllowedNetsFactory,
deps: [AllowedNetsServiceFactory]
},
ViewIdService,
TaskDataService,
FrontActionService,
FinishTaskService,
TaskRequestStateService,
TaskEventService,
{ provide: NAE_TASK_OPERATIONS, useClass: SubjectTaskOperations },
AsyncPipe
], template: "<div class=\"task-tab-background full-height\">\n <div fxLayout=\"column\" fxLayoutAlign=\"start stretch\" class=\"content-margin full-height\" >\n <nc-single-task [task$]=\"task$\" [loading$]=\"loading$\" [selectedHeaders$]=\"selectedHeaders$\"\n [actionRowJustifyContent]=\"actionRowJustifyContent\" [hideActionRow]=\"hideActionRow\" [hidePanelHeader]=\"hidePanelHeader\"\n [showPageHeader]=\"showPageHeader\" [showPageFooter]=\"showPageFooter\" [actionButtonTemplates]='[closeButton, finishButton]' fxFlex></nc-single-task>\n </div>\n</div>\n\n<ng-template #closeButton >\n <button *ngIf=\"showCloseButton\" (click)=\"closeTab()\" mat-stroked-button color=\"primary\">\n {{ 'tasks.view.closeTab' | translate | uppercase }}</button>\n</ng-template>\n\n<ng-template #finishButton let-finish=\"finish\">\n <button *ngIf=\"showFinishButton\" (click)=\"finish()\" mat-stroked-button color=\"primary\" >\n {{ getFinishTitle() | translate | uppercase }}</button>\n</ng-template>\n", styles: [".task-tab-background{height:100%;width:100%;overflow:auto;background-color:transparent}.content-margin{margin:8px 24px 0}.full-height{height:calc(100% - 8px)}@media screen and (max-width: 599.99px){.content-margin{margin:8px 12px 0}}\n"] }]
}], ctorParameters: () => [{ type: i1.TaskViewService }, { type: undefined, decorators: [{
type: Inject,
args: [NAE_TAB_DATA]
}] }, { type: i2.ActivatedRoute }, { type: i2.Router }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC10YWJiZWQtc2luZ2xlLXRhc2stdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMvc3JjL2xpYi9uYXZpZ2F0aW9uL2dyb3VwLW5hdmlnYXRpb24tY29tcG9uZW50LXJlc29sdmVyL2RlZmF1bHQtY29tcG9uZW50cy90YWJiZWQvZGVmYXVsdC10YWJiZWQtc2luZ2xlLXRhc2stdmlldy9kZWZhdWx0LXRhYmJlZC1zaW5nbGUtdGFzay12aWV3LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy9zcmMvbGliL25hdmlnYXRpb24vZ3JvdXAtbmF2aWdhdGlvbi1jb21wb25lbnQtcmVzb2x2ZXIvZGVmYXVsdC1jb21wb25lbnRzL3RhYmJlZC9kZWZhdWx0LXRhYmJlZC1zaW5nbGUtdGFzay12aWV3L2RlZmF1bHQtdGFiYmVkLXNpbmdsZS10YXNrLXZpZXcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxNQUFNLEVBQVMsTUFBTSxlQUFlLENBQUM7QUFFeEQsT0FBTyxFQUNILHFDQUFxQyxFQUNyQyxrQkFBa0IsRUFDbEIseUJBQXlCLEVBQ3pCLG9CQUFvQixFQUNwQixpQkFBaUIsRUFDakIsZUFBZSxFQUNmLFlBQVksRUFDWixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBQ25CLGtCQUFrQixFQUNsQixlQUFlLEVBQ2YsYUFBYSxFQUNiLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLHVCQUF1QixFQUN2QixlQUFlLEVBQ2YsYUFBYSxFQUdiLHlCQUF5QixFQUN6QixZQUFZLEVBQ1osVUFBVSxFQUNWLGFBQWEsRUFDaEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFP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a0JBQWtCO2dCQUMzQixVQUFVLEVBQUUsdUJBQXVCO2dCQUNuQyxJQUFJLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQzthQUNwQztZQUNELGFBQWE7WUFDYixlQUFlO1lBQ2Ysa0JBQWtCO1lBQ2xCLGlCQUFpQjtZQUNqQix1QkFBdUI7WUFDdkIsZ0JBQWdCO1lBQ2hCLEVBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxxQkFBcUIsRUFBQztZQUMvRCxTQUFTO1NBQ1osaURDcEZMLGtpQ0FpQkE7OzRGRHFFYSxvQ0FBb0M7a0JBL0JoRCxTQUFTOytCQUNJLG9DQUFvQyxhQUduQzt3QkFDUCxlQUFlO3dCQUNmLGFBQWE7d0JBQ2IsZUFBZTt3QkFDZixvQkFBb0I7d0JBQ3BCOzRCQUNJLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixVQUFVLEVBQUUsaUJBQWlCOzRCQUM3QixJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUM7eUJBQ3ZCO3dCQUNELEVBQUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBQzt3QkFDMUQsRUFBQyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsUUFBUSxFQUFFLHlCQUF5QixFQUFDO3dCQUN6RTs0QkFDSSxPQUFPLEVBQUUsa0JBQWtCOzRCQUMzQixVQUFVLEVBQUUsdUJBQXVCOzRCQUNuQyxJQUFJLEVBQUUsQ0FBQyx5QkFBeUIsQ0FBQzt5QkFDcEM7d0JBQ0QsYUFBYTt3QkFDYixlQUFlO3dCQUNmLGtCQUFrQjt3QkFDbEIsaUJBQWlCO3dCQUNqQix1QkFBdUI7d0JBQ3ZCLGdCQUFnQjt3QkFDaEIsRUFBQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFFLHFCQUFxQixFQUFDO3dCQUMvRCxTQUFTO3FCQUNaOzswQkFhWSxNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5qZWN0LCBPbkluaXR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XG5pbXBvcnQge1xuICAgIEFic3RyYWN0VGFiYmVkU2luZ2xlVGFza1ZpZXdDb21wb25lbnQsXG4gICAgQWxsb3dlZE5ldHNTZXJ2aWNlLFxuICAgIEFsbG93ZWROZXRzU2VydmljZUZhY3RvcnksXG4gICAgQ2hhbmdlZEZpZWxkc1NlcnZpY2UsXG4gICAgRmluaXNoVGFza1NlcnZpY2UsXG4gICAgTkFFX0JBU0VfRklMVEVSLFxuICAgIE5BRV9UQUJfREFUQSxcbiAgICBOQUVfVEFTS19PUEVSQVRJT05TLFxuICAgIE5BRV9WSUVXX0lEX1NFR01FTlQsXG4gICAgRnJvbnRBY3Rpb25TZXJ2aWNlLFxuICAgIFJlZGlyZWN0U2VydmljZSxcbiAgICBTZWFyY2hTZXJ2aWNlLFxuICAgIFN1YmplY3RUYXNrT3BlcmF0aW9ucyxcbiAgICBUYXNrRGF0YVNlcnZpY2UsXG4gICAgVGFza0V2ZW50U2VydmljZSxcbiAgICBUYXNrUmVxdWVzdFN0YXRlU2VydmljZSxcbiAgICBUYXNrVmlld1NlcnZpY2UsXG4gICAgVmlld0lkU2VydmljZSxcbiAgICBUYXNrU2VhcmNoUmVxdWVzdEJvZHksXG4gICAgRGF0YUdyb3VwLFxuICAgIGV4dHJhY3RGaWVsZFZhbHVlRnJvbURhdGEsXG4gICAgU2ltcGxlRmlsdGVyLFxuICAgIEZpbHRlclR5cGUsXG4gICAgTWVyZ2VPcGVyYXRvclxufSBmcm9tICdAbmV0Z3JpZi9jb21wb25lbnRzLWNvcmUnO1xuaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gXCJAYW5ndWxhci9jb21tb25cIjtcbmltcG9ydCB7XG4gICAgSW5qZWN0ZWRUYWJiZWRUYXNrVmlld0RhdGFXaXRoTmF2aWdhdGlvbkl0ZW1UYXNrRGF0YVxufSBmcm9tIFwiLi4vLi4vbW9kZWwvaW5qZWN0ZWQtdGFiYmVkLXRhc2stdmlldy1kYXRhLXdpdGgtbmF2aWdhdGlvbi1pdGVtLXRhc2stZGF0YVwiO1xuXG5mdW5jdGlvbiBiYXNlRmlsdGVyRmFjdG9yeShpbmplY3RlZFRhYkRhdGE6IEluamVjdGVkVGFiYmVkVGFza1ZpZXdEYXRhV2l0aE5hdmlnYXRpb25JdGVtVGFza0RhdGEpIHtcbiAgICBjb25zdCByZXF1ZXN0Qm9keSA9IGluamVjdGVkVGFiRGF0YS5iYXNlRmlsdGVyLmdldFJlcXVlc3RCb2R5KCkgYXMgVGFza1NlYXJjaFJlcXVlc3RCb2R5XG4gICAgaWYgKHJlcXVlc3RCb2R5LnRyYW5zaXRpb25JZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IHZpZXdEYXRhR3JvdXBzOiBBcnJheTxEYXRhR3JvdXA+ID0gaW5qZWN0ZWRUYWJEYXRhLm5hdmlnYXRpb25JdGVtVGFza0RhdGE/LnNsaWNlKDQsIGluamVjdGVkVGFiRGF0YS5uYXZpZ2F0aW9uSXRlbVRhc2tEYXRhLmxlbmd0aCk7XG4gICAgICAgIGlmICh2aWV3RGF0YUdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCB2aWV3VHJhbnNpdGlvbklkID0gZXh0cmFjdEZpZWxkVmFsdWVGcm9tRGF0YTxzdHJpbmc+KHZpZXdEYXRhR3JvdXBzLCBcInRyYW5zaXRpb25faWRcIik7XG4gICAgICAgICAgICBpZiAodmlld1RyYW5zaXRpb25JZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyOiBpbmplY3RlZFRhYkRhdGEuYmFzZUZpbHRlci5tZXJnZShuZXcgU2ltcGxlRmlsdGVyKCcnLCBGaWx0ZXJUeXBlLlRBU0ssIHt0cmFuc2l0aW9uSWQ6IHZpZXdUcmFuc2l0aW9uSWQ/LnNwbGl0KFwiLFwiKX0pLCBNZXJnZU9wZXJhdG9yLkFORClcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGZpbHRlcjogaW5qZWN0ZWRUYWJEYXRhLmJhc2VGaWx0ZXJcbiAgICB9O1xufVxuXG5jb25zdCBsb2NhbEFsbG93ZWROZXRzRmFjdG9yeSA9IChmYWN0b3J5OiBBbGxvd2VkTmV0c1NlcnZpY2VGYWN0b3J5KSA9PiB7XG4gICAgcmV0dXJuIGZhY3RvcnkuY3JlYXRlV2l0aEFsbE5ldHMoKTtcbn07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmMtZGVmYXVsdC10YWJiZWQtc2luZ2xlLXRhc2stdmlldycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2RlZmF1bHQtdGFiYmVkLXNpbmdsZS10YXNrLXZpZXcuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2RlZmF1bHQtdGFiYmVkLXNpbmdsZS10YXNrLXZpZXcuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgVGFza1ZpZXdTZXJ2aWNlLFxuICAgICAgICBTZWFyY2hTZXJ2aWNlLFxuICAgICAgICBSZWRpcmVjdFNlcnZpY2UsXG4gICAgICAgIENoYW5nZWRGaWVsZHNTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOQUVfQkFTRV9GSUxURVIsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBiYXNlRmlsdGVyRmFjdG9yeSxcbiAgICAgICAgICAgIGRlcHM6IFtOQUVfVEFCX0RBVEFdXG4gICAgICAgIH0sXG4gICAgICAgIHtwcm92aWRlOiBOQUVfVklFV19JRF9TRUdNRU5ULCB1c2VWYWx1ZTogJ3B1YmxpY1Rhc2tWaWV3J30sXG4gICAgICAgIHtwcm92aWRlOiBBbGxvd2VkTmV0c1NlcnZpY2VGYWN0b3J5LCB1c2VDbGFzczogQWxsb3dlZE5ldHNTZXJ2aWNlRmFjdG9yeX0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IEFsbG93ZWROZXRzU2VydmljZSxcbiAgICAgICAgICAgIHVzZUZhY3Rvcnk6IGxvY2FsQWxsb3dlZE5ldHNGYWN0b3J5LFxuICAgICAgICAgICAgZGVwczogW0FsbG93ZWROZXRzU2VydmljZUZhY3RvcnldXG4gICAgICAgIH0sXG4gICAgICAgIFZpZXdJZFNlcnZpY2UsXG4gICAgICAgIFRhc2tEYXRhU2VydmljZSxcbiAgICAgICAgRnJvbnRBY3Rpb25TZXJ2aWNlLFxuICAgICAgICBGaW5pc2hUYXNrU2VydmljZSxcbiAgICAgICAgVGFza1JlcXVlc3RTdGF0ZVNlcnZpY2UsXG4gICAgICAgIFRhc2tFdmVudFNlcnZpY2UsXG4gICAgICAgIHtwcm92aWRlOiBOQUVfVEFTS19PUEVSQVRJT05TLCB1c2VDbGFzczogU3ViamVjdFRhc2tPcGVyYXRpb25zfSxcbiAgICAgICAgQXN5bmNQaXBlXG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBEZWZhdWx0VGFiYmVkU2luZ2xlVGFza1ZpZXdDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFRhYmJlZFNpbmdsZVRhc2tWaWV3Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICAgIGhpZGVQYW5lbEhlYWRlciA9IHRydWU7XG4gICAgaGlkZUFjdGlvblJvdyA9IGZhbHNlO1xuICAgIHNob3dQYWdlSGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzaG93UGFnZUZvb3RlcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGFjdGlvblJvd0p1c3RpZnlDb250ZW50OiBcImNlbnRlclwiID0gXCJjZW50ZXJcIjtcbiAgICBzaG93RmluaXNoQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcbiAgICBzaG93Q2xvc2VCdXR0b246IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgY29uc3RydWN0b3IodGFza1ZpZXdTZXJ2aWNlOiBUYXNrVmlld1NlcnZpY2UsXG4gICAgICAgICAgICAgICAgQEluamVjdChOQUVfVEFCX0RBVEEpIGluamVjdGVkVGFiRGF0YTogSW5qZWN0ZWRUYWJiZWRUYXNrVmlld0RhdGFXaXRoTmF2aWdhdGlvbkl0ZW1UYXNrRGF0YSxcbiAgICAgICAgICAgICAgICBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgICAgICAgICAgICAgcHJvdGVjdGVkIF9yb3V0ZXI6IFJvdXRlcikge1xuICAgICAgICBzdXBlcih0YXNrVmlld1NlcnZpY2UsIGluamVjdGVkVGFiRGF0YSwgYWN0aXZhdGVkUm91dGUpO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9yb3V0ZXIucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZFJldXNlUm91dGUgPSAoKSA9PiBmYWxzZTtcbiAgICB9XG5cbiAgICBjbG9zZVRhYigpIHtcbiAgICAgICAgdGhpcy5faW5qZWN0ZWRUYWJEYXRhLnRhYlZpZXdSZWYuY2xvc2VUYWJJbmRleCh0aGlzLl9pbmplY3RlZFRhYkRhdGEudGFiVmlld1JlZi5jdXJyZW50bHlTZWxlY3RlZFRhYigpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RmluaXNoVGl0bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmZpbmlzaFRpdGxlID09PSAnJyB8fCB0aGlzLmZpbmlzaFRpdGxlKSA/IHRoaXMuZmluaXNoVGl0bGUgOiAndGFza3Mudmlldy5maW5pc2gnO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJ0YXNrLXRhYi1iYWNrZ3JvdW5kIGZ1bGwtaGVpZ2h0XCI+XG4gICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBzdHJldGNoXCIgY2xhc3M9XCJjb250ZW50LW1hcmdpbiBmdWxsLWhlaWdodFwiID5cbiAgICAgICAgPG5jLXNpbmdsZS10YXNrIFt0YXNrJF09XCJ0YXNrJFwiIFtsb2FkaW5nJF09XCJsb2FkaW5nJFwiIFtzZWxlY3RlZEhlYWRlcnMkXT1cInNlbGVjdGVkSGVhZGVycyRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2FjdGlvblJvd0p1c3RpZnlDb250ZW50XT1cImFjdGlvblJvd0p1c3RpZnlDb250ZW50XCIgIFtoaWRlQWN0aW9uUm93XT1cImhpZGVBY3Rpb25Sb3dcIiBbaGlkZVBhbmVsSGVhZGVyXT1cImhpZGVQYW5lbEhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1BhZ2VIZWFkZXJdPVwic2hvd1BhZ2VIZWFkZXJcIiBbc2hvd1BhZ2VGb290ZXJdPVwic2hvd1BhZ2VGb290ZXJcIiBbYWN0aW9uQnV0dG9uVGVtcGxhdGVzXT0nW2Nsb3NlQnV0dG9uLCBmaW5pc2hCdXR0b25dJyBmeEZsZXg+PC9uYy1zaW5nbGUtdGFzaz5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI2Nsb3NlQnV0dG9uID5cbiAgICA8YnV0dG9uICpuZ0lmPVwic2hvd0Nsb3NlQnV0dG9uXCIgKGNsaWNrKT1cImNsb3NlVGFiKClcIiBtYXQtc3Ryb2tlZC1idXR0b24gY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICAgIHt7ICd0YXNrcy52aWV3LmNsb3NlVGFiJyB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNmaW5pc2hCdXR0b24gbGV0LWZpbmlzaD1cImZpbmlzaFwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93RmluaXNoQnV0dG9uXCIgKGNsaWNrKT1cImZpbmlzaCgpXCIgbWF0LXN0cm9rZWQtYnV0dG9uIGNvbG9yPVwicHJpbWFyeVwiID5cbiAgICAgICAge3sgZ2V0RmluaXNoVGl0bGUoKSB8IHRyYW5zbGF0ZSB8IHVwcGVyY2FzZSB9fTwvYnV0dG9uPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==