@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
471 lines • 69.6 kB
JavaScript
import { Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
import { filter, map, take } from 'rxjs/operators';
import { toMoment } from '../../resources/types/nae-date-type';
import { DATE_TIME_FORMAT_STRING } from '../../moment/time-formats';
import { TaskMetaField } from '../../header/task-header/task-meta-enum';
import { NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS } from './models/disable-functions';
import { AbstractPanelWithImmediateDataComponent } from '../abstract/panel-with-immediate-data';
import { NAE_TASK_FORCE_OPEN } from '../../view/task-view/models/injection-token-task-force-open';
import { NAE_TAB_DATA } from '../../tabs/tab-data-injection-token/tab-data-injection-token';
import { AfterAction } from '../../utility/call-chain/after-action';
import { UnlimitedTaskContentService } from "../../task-content/services/unlimited-task-content.service";
import * as i0 from "@angular/core";
import * as i1 from "../../task-content/services/task-content.service";
import * as i2 from "../../logger/services/logger.service";
import * as i3 from "../../view/task-view/service/task-view.service";
import * as i4 from "../../navigation/quick-panel/components/paper-view.service";
import * as i5 from "../../task-content/services/task-event.service";
import * as i6 from "../../task/services/assign-task.service";
import * as i7 from "../../task/services/delegate-task.service";
import * as i8 from "../../task/services/cancel-task.service";
import * as i9 from "../../task/services/finish-task.service";
import * as i10 from "../../task/services/task-request-state.service";
import * as i11 from "../../task/services/task-data.service";
import * as i12 from "../../task/services/assign-policy.service";
import * as i13 from "../../task/services/finish-policy.service";
import * as i14 from "../../utility/call-chain/call-chain.service";
import * as i15 from "../../task/models/subject-task-operations";
import * as i16 from "@ngx-translate/core";
import * as i17 from "@angular/common";
import * as i18 from "../../changed-fields/services/changed-fields.service";
import * as i19 from "../../authorization/permission/permission.service";
import * as i20 from "../../header/services/overflow.service";
export class AbstractTaskPanelComponent extends AbstractPanelWithImmediateDataComponent {
_taskContentService;
_log;
_taskViewService;
_paperView;
_taskEventService;
_assignTaskService;
_delegateTaskService;
_cancelTaskService;
_finishTaskService;
_taskState;
_taskDataService;
_assignPolicyService;
_finishPolicyService;
_callChain;
_taskOperations;
_disableFunctions;
_translate;
_currencyPipe;
_changedFieldsService;
_permissionService;
_taskForceOpen;
/**
* @ignore
* Set by an @Input() on a setter function, that also resolves featured fields.
*/
_taskPanelData;
_forceLoadDataOnOpen = false;
taskListVirtualScroll;
panelContentComponent;
first;
last;
responsiveBody = true;
preventExpand = false;
preventCollapse = false;
hidePanelHeader = false;
hideActionRow = false;
actionButtonTemplates;
actionRowJustifyContent;
showMoreMenu = true;
thisContext = {
canAssign: () => this.canAssign(),
assign: () => this.assign(),
getAssignTitle: () => this.getAssignTitle(),
delegate: () => this.delegate(),
getDelegateTitle: () => this.getDelegateTitle(),
canReassign: () => this.canReassign(),
canCancel: () => this.canCancel(),
cancel: () => this.cancel(),
getCancelTitle: () => this.getCancelTitle(),
canFinish: () => this.canFinish(),
finish: () => this.finish(),
getFinishTitle: () => this.getFinishTitle(),
canCollapse: () => this.canCollapse(),
collapse: () => this.collapse(),
canDisable: (arg) => this.canDisable(arg),
canDo: (arg) => this.canDo(arg),
isLoading: () => this.isLoading
};
set forceLoadDataOnOpen(force) {
this._forceLoadDataOnOpen = force;
this._assignPolicyService.forced = force;
}
textEllipsis = false;
/**
* Emits notifications about task events
*/
taskEvent;
panelRefOutput;
portal;
panelRef;
_sub;
_subTaskEvent;
_subTaskData;
_subPanelUpdate;
_taskDisableButtonFunctions;
_unsub;
_canReload;
constructor(_taskContentService, _log, _taskViewService, _paperView, _taskEventService, _assignTaskService, _delegateTaskService, _cancelTaskService, _finishTaskService, _taskState, _taskDataService, _assignPolicyService, _finishPolicyService, _callChain, _taskOperations, _disableFunctions, _translate, _currencyPipe, _changedFieldsService, _permissionService, overflowService, _taskForceOpen, injectedTabData) {
super(_translate, _currencyPipe, overflowService);
this._taskContentService = _taskContentService;
this._log = _log;
this._taskViewService = _taskViewService;
this._paperView = _paperView;
this._taskEventService = _taskEventService;
this._assignTaskService = _assignTaskService;
this._delegateTaskService = _delegateTaskService;
this._cancelTaskService = _cancelTaskService;
this._finishTaskService = _finishTaskService;
this._taskState = _taskState;
this._taskDataService = _taskDataService;
this._assignPolicyService = _assignPolicyService;
this._finishPolicyService = _finishPolicyService;
this._callChain = _callChain;
this._taskOperations = _taskOperations;
this._disableFunctions = _disableFunctions;
this._translate = _translate;
this._currencyPipe = _currencyPipe;
this._changedFieldsService = _changedFieldsService;
this._permissionService = _permissionService;
this._taskForceOpen = _taskForceOpen;
this.taskEvent = new EventEmitter();
this.panelRefOutput = new EventEmitter();
this._subTaskEvent = _taskEventService.taskEventNotifications$.subscribe(event => {
this.taskEvent.emit(event);
});
this._subTaskData = _changedFieldsService.changedFields$.subscribe((changedFieldsMap) => {
const filteredCaseIds = Object.keys(changedFieldsMap).filter(caseId => Object.keys(this._taskContentService.referencedTaskAndCaseIds)?.includes(caseId));
const changedFields = [];
filteredCaseIds.forEach(caseId => {
const taskIds = this._taskContentService.referencedTaskAndCaseIds[caseId];
changedFields.push(...this._changedFieldsService.parseChangedFieldsByCaseAndTaskIds(caseId, taskIds, changedFieldsMap));
});
changedFields.filter(fields => fields !== undefined).forEach(fields => {
this.taskPanelData.changedFields.next(fields);
});
});
_taskOperations.open$.subscribe(() => {
if (!this.preventExpand) {
this.expand();
}
});
_taskOperations.close$.subscribe(() => {
if (!(this._taskForceOpen || this.preventCollapse)) {
this.collapse();
}
});
_taskOperations.reload$.subscribe(() => {
this._taskViewService.reloadCurrentPage();
});
_taskOperations.forceReload$.subscribe(() => {
this._taskViewService.reloadCurrentPage(true);
});
this._taskDisableButtonFunctions = {
finish: (t) => false,
assign: (t) => false,
delegate: (t) => false,
reassign: (t) => false,
cancel: (t) => false,
};
if (_disableFunctions) {
Object.assign(this._taskDisableButtonFunctions, _disableFunctions);
}
if (injectedTabData !== null) {
this._unsub = injectedTabData.tabSelected$.pipe(filter(bool => bool && this.isExpanded())).subscribe(() => {
if (this._canReload) {
this._taskDataService.initializeTaskDataFields(new AfterAction(), true);
}
else {
this._canReload = true;
}
});
}
}
ngOnInit() {
super.ngOnInit();
this._taskContentService.task = this._taskPanelData.task;
this.createContentPortal();
this._sub = this._taskPanelData.changedFields.subscribe(chFields => {
this._taskContentService.updateFromChangedFields(chFields);
});
this._subPanelUpdate = this._taskViewService.panelUpdate.pipe(map(a => a.find(p => p.task.stringId === this.taskPanelData.task.stringId)), filter(p => !!p)).subscribe(value => {
this.resolveFeaturedFieldsValues();
});
}
ngAfterViewInit() {
this.panelRef.opened.subscribe(() => {
if (!this.preventExpand) {
this._taskContentService.expansionStarted();
if (!this._taskState.isLoading()) {
this._assignPolicyService.performAssignPolicy(true);
}
}
});
this.panelRef.closed.subscribe(() => {
if (!this._taskState.isLoading()) {
this._assignPolicyService.performAssignPolicy(false);
}
});
this.panelRef.afterExpand.subscribe(() => {
this._taskContentService.$shouldCreate.pipe(take(1)).subscribe(() => {
this._taskContentService.blockFields(this.hasNoFinishPermission());
this._taskPanelData.initiallyExpanded = true;
});
this._taskContentService.expansionFinished();
});
this.panelRef.afterCollapse.subscribe(() => {
this._taskPanelData.initiallyExpanded = false;
});
if ((this._taskPanelData.initiallyExpanded || this._taskForceOpen) && !this.preventExpand) {
this.panelRef.expanded = true;
}
}
set taskPanelData(data) {
this._taskPanelData = data;
if (this._taskContentService instanceof UnlimitedTaskContentService && this.panelRef) {
this.collapse();
this._taskContentService.task = this._taskPanelData.task;
if (this._sub) {
this._sub.unsubscribe();
}
this._sub = this._taskPanelData.changedFields.subscribe(chFields => {
this._taskContentService.updateFromChangedFields(chFields);
});
this.expand();
}
this.resolveFeaturedFieldsValues();
}
get taskPanelData() {
return this._taskPanelData;
}
get isLoading() {
return this._taskState.isLoading();
}
stopLoading() {
this._taskState.stopLoading(this._taskPanelData.task.stringId);
}
preventPanelOpen($event) {
$event.stopPropagation();
return false;
}
isPaperView() {
return this._paperView.paperView;
}
setPanelRef(panelRef) {
this.panelRef = panelRef;
this.panelRefOutput.emit(panelRef);
}
assign() {
this._assignTaskService.assign(this._callChain.create((afterAction => {
if (afterAction) {
this._taskDataService.initializeTaskDataFields();
this._finishPolicyService.performFinishPolicy();
}
})));
}
delegate() {
this._delegateTaskService.delegate();
}
cancel() {
this._cancelTaskService.cancel(this._callChain.create(() => {
this._taskOperations.reload();
this._taskOperations.close();
}));
}
finish() {
if (!this._taskContentService.validateTaskData()) {
if (this._taskContentService.task.dataSize <= 0) {
this._taskDataService.initializeTaskDataFields();
}
const invalidFields = this._taskContentService.getInvalidTaskData();
document.getElementById(invalidFields[0].stringId).scrollIntoView({
behavior: 'smooth',
block: 'start',
inline: 'nearest'
});
}
else {
this._finishTaskService.validateDataAndFinish();
}
}
collapse() {
this.panelRef.close();
this.panelRef.expanded = false;
}
expand() {
if (this.preventExpand) {
return;
}
this.panelRef.open();
this.panelRef.expanded = true;
}
canAssign() {
return this._permissionService.canAssign(this.taskPanelData.task) && this.getAssignTitle() !== '';
}
canReassign() {
return this._permissionService.canReassign(this.taskPanelData.task);
}
canCancel() {
return this._permissionService.canCancel(this.taskPanelData.task) && this.getCancelTitle() !== '';
}
canFinish() {
return this._permissionService.canFinish(this.taskPanelData.task) && this.getFinishTitle() !== '';
}
hasNoFinishPermission() {
return !this._permissionService.canFinish(this.taskPanelData.task);
}
canCollapse() {
return this._taskForceOpen ? false : this._permissionService.canCollapse(this.taskPanelData.task);
}
canDo(action) {
return this._permissionService.hasTaskPermission(this.taskPanelData.task, action) && this.getDelegateTitle() !== '';
}
getAssignTitle() {
return (this.taskPanelData.task.assignTitle === '' || this.taskPanelData.task.assignTitle)
? this.taskPanelData.task.assignTitle : 'tasks.view.assign';
}
getCancelTitle() {
return (this.taskPanelData.task.cancelTitle === '' || this.taskPanelData.task.cancelTitle)
? this.taskPanelData.task.cancelTitle : 'tasks.view.cancel';
}
getDelegateTitle() {
return (this.taskPanelData.task.delegateTitle === '' || this.taskPanelData.task.delegateTitle)
? this.taskPanelData.task.delegateTitle : 'tasks.view.delegate';
}
getFinishTitle() {
return (this.taskPanelData.task.finishTitle === '' || this.taskPanelData.task.finishTitle)
? this.taskPanelData.task.finishTitle : 'tasks.view.finish';
}
canDisable(type) {
let disable = false;
if (!!this.taskPanelData && !!this.taskPanelData.task) {
disable = disable
|| !!this._taskState.isLoading(this.taskPanelData.task.stringId)
|| !!this._taskState.isUpdating(this.taskPanelData.task.stringId);
}
return disable || this._taskDisableButtonFunctions[type]({ ...this._taskContentService.task });
}
getFeaturedMetaValue(selectedHeader) {
const task = this._taskPanelData.task;
switch (selectedHeader.fieldIdentifier) {
case TaskMetaField.CASE:
return { value: task.caseTitle, icon: '', type: 'meta' };
case TaskMetaField.CASE_ID:
return { value: task.caseId, icon: '', type: 'meta' };
case TaskMetaField.TASK_ID:
return { value: task.stringId, icon: '', type: 'meta' };
case TaskMetaField.TITLE:
return { value: task.title, icon: '', type: 'meta' };
case TaskMetaField.PRIORITY:
// TODO priority
if (!task.priority || task.priority < 2) {
return { value: 'high', icon: 'error', type: 'meta' };
}
if (task.priority === 2) {
return { value: 'medium', icon: 'north', type: 'meta' };
}
return { value: 'low', icon: 'south', type: 'meta' };
case TaskMetaField.USER:
//TODO: refactor after User refactor PR is merged
return { value: task.userId ? task.userId : '', icon: 'account_circle', type: 'meta' };
case TaskMetaField.ASSIGN_DATE:
return {
value: task.startDate ? toMoment(task.startDate).format(DATE_TIME_FORMAT_STRING) : '',
icon: 'event',
type: 'meta'
};
}
}
getFeaturedImmediateValue(selectedHeader) {
if (this._taskContentService.task && this._taskContentService.task.immediateData) {
const immediate = this._taskContentService.task.immediateData.find(it => it.stringId === selectedHeader.fieldIdentifier);
return this.parseImmediateValue(immediate);
}
return { value: '', icon: '', type: '' };
}
ngOnDestroy() {
super.ngOnDestroy();
this._sub.unsubscribe();
this._subTaskEvent.unsubscribe();
this._subTaskData.unsubscribe();
this._taskOperations.destroy();
this._subPanelUpdate.unsubscribe();
this.taskEvent.complete();
if (this._unsub) {
this._unsub.unsubscribe();
}
}
isForceOpen() {
return this._taskForceOpen && !!this.taskListVirtualScroll?.getElementRef()?.nativeElement;
}
getContentMinHeight() {
return this.taskListVirtualScroll.getElementRef().nativeElement.offsetHeight - 32 + 'px';
}
isExpanded() {
return this.panelRef?.expanded && !this._taskContentService?.isExpanding;
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractTaskPanelComponent, deps: [{ token: i1.TaskContentService }, { token: i2.LoggerService }, { token: i3.TaskViewService }, { token: i4.PaperViewService }, { token: i5.TaskEventService }, { token: i6.AssignTaskService }, { token: i7.DelegateTaskService }, { token: i8.CancelTaskService }, { token: i9.FinishTaskService }, { token: i10.TaskRequestStateService }, { token: i11.TaskDataService }, { token: i12.AssignPolicyService }, { token: i13.FinishPolicyService }, { token: i14.CallChainService }, { token: i15.SubjectTaskOperations }, { token: NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS, optional: true }, { token: i16.TranslateService }, { token: i17.CurrencyPipe }, { token: i18.ChangedFieldsService }, { token: i19.PermissionService }, { token: i20.OverflowService, optional: true }, { token: NAE_TASK_FORCE_OPEN, optional: true }, { token: NAE_TAB_DATA, optional: true }], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractTaskPanelComponent, selector: "ncc-abstract-legal-notice", inputs: { taskListVirtualScroll: "taskListVirtualScroll", panelContentComponent: "panelContentComponent", first: "first", last: "last", responsiveBody: "responsiveBody", preventExpand: "preventExpand", preventCollapse: "preventCollapse", hidePanelHeader: "hidePanelHeader", hideActionRow: "hideActionRow", actionButtonTemplates: "actionButtonTemplates", actionRowJustifyContent: "actionRowJustifyContent", showMoreMenu: "showMoreMenu", forceLoadDataOnOpen: "forceLoadDataOnOpen", textEllipsis: "textEllipsis", taskPanelData: "taskPanelData" }, outputs: { taskEvent: "taskEvent", panelRefOutput: "panelRefOutput" }, usesInheritance: true, ngImport: i0, template: '', isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractTaskPanelComponent, decorators: [{
type: Component,
args: [{
selector: 'ncc-abstract-legal-notice',
template: ''
}]
}], ctorParameters: () => [{ type: i1.TaskContentService }, { type: i2.LoggerService }, { type: i3.TaskViewService }, { type: i4.PaperViewService }, { type: i5.TaskEventService }, { type: i6.AssignTaskService }, { type: i7.DelegateTaskService }, { type: i8.CancelTaskService }, { type: i9.FinishTaskService }, { type: i10.TaskRequestStateService }, { type: i11.TaskDataService }, { type: i12.AssignPolicyService }, { type: i13.FinishPolicyService }, { type: i14.CallChainService }, { type: i15.SubjectTaskOperations }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_TASK_PANEL_DISABLE_BUTTON_FUNCTIONS]
}] }, { type: i16.TranslateService }, { type: i17.CurrencyPipe }, { type: i18.ChangedFieldsService }, { type: i19.PermissionService }, { type: i20.OverflowService, decorators: [{
type: Optional
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_TASK_FORCE_OPEN]
}] }, { type: undefined, decorators: [{
type: Optional
}, {
type: Inject,
args: [NAE_TAB_DATA]
}] }], propDecorators: { taskListVirtualScroll: [{
type: Input
}], panelContentComponent: [{
type: Input
}], first: [{
type: Input
}], last: [{
type: Input
}], responsiveBody: [{
type: Input
}], preventExpand: [{
type: Input
}], preventCollapse: [{
type: Input
}], hidePanelHeader: [{
type: Input
}], hideActionRow: [{
type: Input
}], actionButtonTemplates: [{
type: Input
}], actionRowJustifyContent: [{
type: Input
}], showMoreMenu: [{
type: Input
}], forceLoadDataOnOpen: [{
type: Input
}], textEllipsis: [{
type: Input
}], taskEvent: [{
type: Output
}], panelRefOutput: [{
type: Output
}], taskPanelData: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGFzay1wYW5lbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZXRncmlmLWNvbXBvbmVudHMtY29yZS9zcmMvbGliL3BhbmVsL3Rhc2stcGFuZWwvYWJzdHJhY3QtdGFzay1wYW5lbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxRQUFRLEVBQ1IsTUFBTSxFQUdULE1BQU0sZUFBZSxDQUFDO0FBUXZCLE9BQU8sRUFBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRWpELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsdUJBQXVCLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQU9sRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0seUNBQXlDLENBQUM7QUFPdEUsT0FBTyxFQUF3Qix1Q0FBdUMsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBRzFHLE9BQU8sRUFBQyx1Q0FBdUMsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBUzlGLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLDZEQUE2RCxDQUFDO0FBR2hHLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSw4REFBOEQsQ0FBQztBQUUxRixPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sdUNBQXVDLENBQUM7QUFDbEUsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sNERBQTRELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFNdkcsTUFBTSxPQUFnQiwwQkFBMkIsU0FBUSx1Q0FBdUM7SUFrRTVEO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFD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RU0sVUFBVTtRQUNiLE9BQU8sSUFBSSxDQUFDLFFBQVEsRUFBRSxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsV0FBVyxDQUFDO0lBQzdFLENBQUM7d0dBdlppQiwwQkFBMEIsNmdCQWlGRix1Q0FBdUMsa05BTXZDLG1CQUFtQiw2QkFDbkIsWUFBWTs0RkF4RnBDLDBCQUEwQiwrckJBRmxDLEVBQUU7OzRGQUVNLDBCQUEwQjtrQkFKL0MsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkJBQTJCO29CQUNyQyxRQUFRLEVBQUUsRUFBRTtpQkFDZjs7MEJBa0YwQixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHVDQUF1Qzs7MEJBSzFELFFBQVE7OzBCQUNSLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDdEMsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxZQUFZO3lDQWhGN0MscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDVSxLQUFLO3NCQUFwQixLQUFLO2dCQUNVLElBQUk7c0JBQW5CLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBRUcsWUFBWTtzQkFBcEIsS0FBSztnQkF3QkYsbUJBQW1CO3NCQUR0QixLQUFLO2dCQU1HLFlBQVk7c0JBQXBCLEtBQUs7Z0JBSUksU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQStJSSxhQUFhO3NCQUR2QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPbkluaXQsXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFR5cGVcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdEV4cGFuc2lvblBhbmVsfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9leHBhbnNpb24nO1xuaW1wb3J0IHtDb21wb25lbnRQb3J0YWx9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtUYXNrQ29udGVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9zZXJ2aWNlcy90YXNrLWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQge0xvZ2dlclNlcnZpY2V9IGZyb20gJy4uLy4uL2xvZ2dlci9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tQYW5lbERhdGF9IGZyb20gJy4uL3Rhc2stcGFuZWwtZGF0YS90YXNrLXBhbmVsLWRhdGEnO1xuaW1wb3J0IHtPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb259IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtUYXNrVmlld1NlcnZpY2V9IGZyb20gJy4uLy4uL3ZpZXcvdGFzay12aWV3L3NlcnZpY2UvdGFzay12aWV3LnNlcnZpY2UnO1xuaW1wb3J0IHtmaWx0ZXIsIG1hcCwgdGFrZX0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtIZWFkZXJDb2x1bW59IGZyb20gJy4uLy4uL2hlYWRlci9tb2RlbHMvaGVhZGVyLWNvbHVtbic7XG5pbXBvcnQge3RvTW9tZW50fSBmcm9tICcuLi8uLi9yZXNvdXJjZXMvdHlwZXMvbmFlLWRhdGUtdHlwZSc7XG5pbXBvcnQge0RBVEVfVElNRV9GT1JNQVRfU1RSSU5HfSBmcm9tICcuLi8uLi9tb21lbnQvdGltZS1mb3JtYXRzJztcbmltcG9ydCB7UGFwZXJWaWV3U2VydmljZX0gZnJvbSAnLi4vLi4vbmF2aWdhdGlvbi9xdWljay1wYW5lbC9jb21wb25lbnRzL3BhcGVyLXZpZXcuc2VydmljZSc7XG5pbXBvcnQge1Rhc2tFdmVudFNlcnZpY2V9IGZyb20gJy4uLy4uL3Rhc2stY29udGVudC9zZXJ2aWNlcy90YXNrLWV2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHtBc3NpZ25UYXNrU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay9zZXJ2aWNlcy9hc3NpZ24tdGFzay5zZXJ2aWNlJztcbmltcG9ydCB7RGVsZWdhdGVUYXNrU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay9zZXJ2aWNlcy9kZWxlZ2F0ZS10YXNrLnNlcnZpY2UnO1xuaW1wb3J0IHtDYW5jZWxUYXNrU2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay9zZXJ2aWNlcy9jYW5jZWwtdGFzay5zZXJ2aWNlJztcbmltcG9ydCB7RmluaXNoVGFza1NlcnZpY2V9IGZyb20gJy4uLy4uL3Rhc2svc2VydmljZXMvZmluaXNoLXRhc2suc2VydmljZSc7XG5pbXBvcnQge1Rhc2tNZXRhRmllbGR9IGZyb20gJy4uLy4uL2hlYWRlci90YXNrLWhlYWRlci90YXNrLW1ldGEtZW51bSc7XG5pbXBvcnQge1Rhc2tSZXF1ZXN0U3RhdGVTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrL3NlcnZpY2VzL3Rhc2stcmVxdWVzdC1zdGF0ZS5zZXJ2aWNlJztcbmltcG9ydCB7VGFza0RhdGFTZXJ2aWNlfSBmcm9tICcuLi8uLi90YXNrL3NlcnZpY2VzL3Rhc2stZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7QXNzaWduUG9saWN5U2VydmljZX0gZnJvbSAnLi4vLi4vdGFzay9zZXJ2aWNlcy9hc3NpZ24tcG9saWN5LnNlcnZpY2UnO1xuaW1wb3J0IHtTdWJqZWN0VGFza09wZXJhdGlvbnN9IGZyb20gJy4uLy4uL3Rhc2svbW9kZWxzL3N1YmplY3QtdGFzay1vcGVyYXRpb25zJztcbmltcG9ydCB7Q2FsbENoYWluU2VydmljZX0gZnJvbSAnLi4vLi4vdXRpbGl0eS9jYWxsLWNoYWluL2NhbGwtY2hhaW4uc2VydmljZSc7XG5pbXBvcnQge1Rhc2tFdmVudE5vdGlmaWNhdGlvbn0gZnJvbSAnLi4vLi4vdGFzay1jb250ZW50L21vZGVsL3Rhc2stZXZlbnQtbm90aWZpY2F0aW9uJztcbmltcG9ydCB7RGlzYWJsZUJ1dHRvbkZ1bnRpb25zLCBOQUVfVEFTS19QQU5FTF9ESVNBQkxFX0JVVFRPTl9GVU5DVElPTlN9IGZyb20gJy4vbW9kZWxzL2Rpc2FibGUtZnVuY3Rpb25zJztcbmltcG9ydCB7VGFza30gZnJvbSAnLi4vLi4vcmVzb3VyY2VzL2ludGVyZmFjZS90YXNrJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc30gZnJvbSAnLi4vLi4vZGF0YS1maWVsZHMvbW9kZWxzL2NoYW5nZWQtZmllbGRzJztcbmltcG9ydCB7QWJzdHJhY3RQYW5lbFdpdGhJbW1lZGlhdGVEYXRhQ29tcG9uZW50fSBmcm9tICcuLi9hYnN0cmFjdC9wYW5lbC13aXRoLWltbWVkaWF0ZS1kYXRhJztcbmltcG9ydCB7VHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0ZlYXR1cmVkVmFsdWV9IGZyb20gJy4uL2Fic3RyYWN0L2ZlYXR1cmVkLXZhbHVlJztcbmltcG9ydCB7Q3VycmVuY3lQaXBlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnLi4vLi4vYXV0aG9yaXphdGlvbi9wZXJtaXNzaW9uL3Blcm1pc3Npb24uc2VydmljZSc7XG5pbXBvcnQge0NoYW5nZWRGaWVsZHNTZXJ2aWNlfSBmcm9tICcuLi8uLi9jaGFuZ2VkLWZpZWxkcy9zZXJ2aWNlcy9jaGFuZ2VkLWZpZWxkcy5zZXJ2aWNlJztcbmltcG9ydCB7Q2hhbmdlZEZpZWxkc01hcH0gZnJvbSAnLi4vLi4vZXZlbnQvc2VydmljZXMvaW50ZXJmYWNlcy9jaGFuZ2VkLWZpZWxkcy1tYXAnO1xuaW1wb3J0IHtUYXNrUGFuZWxDb250ZXh0fSBmcm9tICcuL21vZGVscy90YXNrLXBhbmVsLWNvbnRleHQnO1xuaW1wb3J0IHtPdmVyZmxvd1NlcnZpY2V9IGZyb20gJy4uLy4uL2hlYWRlci9zZXJ2aWNlcy9vdmVyZmxvdy5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBU0tfRk9SQ0VfT1BFTn0gZnJvbSAnLi4vLi4vdmlldy90YXNrLXZpZXcvbW9kZWxzL2luamVjdGlvbi10b2tlbi10YXNrLWZvcmNlLW9wZW4nO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHsgRmluaXNoUG9saWN5U2VydmljZSB9IGZyb20gJy4uLy4uL3Rhc2svc2VydmljZXMvZmluaXNoLXBvbGljeS5zZXJ2aWNlJztcbmltcG9ydCB7TkFFX1RBQl9EQVRBfSBmcm9tICcuLi8uLi90YWJzL3RhYi1kYXRhLWluamVjdGlvbi10b2tlbi90YWItZGF0YS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHtJbmplY3RlZFRhYkRhdGF9IGZyb20gJy4uLy4uL3RhYnMvaW50ZXJmYWNlcyc7XG5pbXBvcnQge0FmdGVyQWN0aW9ufSBmcm9tICcuLi8uLi91dGlsaXR5L2NhbGwtY2hhaW4vYWZ0ZXItYWN0aW9uJztcbmltcG9ydCB7VW5saW1pdGVkVGFza0NvbnRlbnRTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vdGFzay1jb250ZW50L3NlcnZpY2VzL3VubGltaXRlZC10YXNrLWNvbnRlbnQuc2VydmljZVwiO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25jYy1hYnN0cmFjdC1sZWdhbC1ub3RpY2UnLFxuICAgIHRlbXBsYXRlOiAnJ1xufSlcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFRhc2tQYW5lbENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0UGFuZWxXaXRoSW1tZWRpYXRlRGF0YUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIC8qKlxuICAgICAqIEBpZ25vcmVcbiAgICAgKiBTZXQgYnkgYW4gQElucHV0KCkgb24gYSBzZXR0ZXIgZnVuY3Rpb24sIHRoYXQgYWxzbyByZXNvbHZlcyBmZWF0dXJlZCBmaWVsZHMuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIF90YXNrUGFuZWxEYXRhOiBUYXNrUGFuZWxEYXRhO1xuICAgIHByb3RlY3RlZCBfZm9yY2VMb2FkRGF0YU9uT3BlbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHRhc2tMaXN0VmlydHVhbFNjcm9sbDogQ2RrVmlydHVhbFNjcm9sbFZpZXdwb3J0O1xuICAgIEBJbnB1dCgpIHBhbmVsQ29udGVudENvbXBvbmVudDogVHlwZTxhbnk+O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBmaXJzdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBwdWJsaWMgbGFzdDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSByZXNwb25zaXZlQm9keSA9IHRydWU7XG4gICAgQElucHV0KCkgcHJldmVudEV4cGFuZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHByZXZlbnRDb2xsYXBzZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGVQYW5lbEhlYWRlciA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGVBY3Rpb25Sb3cgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBhY3Rpb25CdXR0b25UZW1wbGF0ZXM6IEFycmF5PFRlbXBsYXRlUmVmPGFueT4+O1xuICAgIEBJbnB1dCgpIGFjdGlvblJvd0p1c3RpZnlDb250ZW50OiAnc3BhY2UtYmV0d2VlbicgfCAnZmxleC1zdGFydCcgfCAnZmxleC1lbmQnIHwgJ2NlbnRlcicgfCAnc3BhY2UtYXJvdW5kJyB8XG4gICAgICAgICdpbml0aWFsJyB8ICdzdGFydCcgfCAnZW5kJyB8ICdsZWZ0JyB8ICdyaWdodCcgfCAncmV2ZXJ0JyB8ICdpbmhlcml0JyB8ICd1bnNldCdcbiAgICBASW5wdXQoKSBzaG93TW9yZU1lbnU6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgdGhpc0NvbnRleHQ6IFRhc2tQYW5lbENvbnRleHQgPSB7XG4gICAgICAgIGNhbkFzc2lnbjogKCkgPT4gdGhpcy5jYW5Bc3NpZ24oKSxcbiAgICAgICAgYXNzaWduOiAoKSA9PiB0aGlzLmFzc2lnbigpLFxuICAgICAgICBnZXRBc3NpZ25UaXRsZTogKCkgPT4gdGhpcy5nZXRBc3NpZ25UaXRsZSgpLFxuICAgICAgICBkZWxlZ2F0ZTogKCkgPT4gdGhpcy5kZWxlZ2F0ZSgpLFxuICAgICAgICBnZXREZWxlZ2F0ZVRpdGxlOiAoKSA9PiB0aGlzLmdldERlbGVnYXRlVGl0bGUoKSxcbiAgICAgICAgY2FuUmVhc3NpZ246ICgpID0+IHRoaXMuY2FuUmVhc3NpZ24oKSxcbiAgICAgICAgY2FuQ2FuY2VsOiAoKSA9PiB0aGlzLmNhbkNhbmNlbCgpLFxuICAgICAgICBjYW5jZWw6ICgpID0+IHRoaXMuY2FuY2VsKCksXG4gICAgICAgIGdldENhbmNlbFRpdGxlOiAoKSA9PiB0aGlzLmdldENhbmNlbFRpdGxlKCksXG4gICAgICAgIGNhbkZpbmlzaDogKCkgPT4gdGhpcy5jYW5GaW5pc2goKSxcbiAgICAgICAgZmluaXNoOiAoKSA9PiB0aGlzLmZpbmlzaCgpLFxuICAgICAgICBnZXRGaW5pc2hUaXRsZTogKCkgPT4gdGhpcy5nZXRGaW5pc2hUaXRsZSgpLFxuICAgICAgICBjYW5Db2xsYXBzZTogKCkgPT4gdGhpcy5jYW5Db2xsYXBzZSgpLFxuICAgICAgICBjb2xsYXBzZTogKCkgPT4gdGhpcy5jb2xsYXBzZSgpLFxuICAgICAgICBjYW5EaXNhYmxlOiAoYXJnOiBzdHJpbmcpID0+IHRoaXMuY2FuRGlzYWJsZShhcmcpLFxuICAgICAgICBjYW5EbzogKGFyZzogc3RyaW5nKSA9PiB0aGlzLmNhbkRvKGFyZyksXG4gICAgICAgIGlzTG9hZGluZzogKCkgPT4gdGhpcy5pc0xvYWRpbmdcbiAgICB9O1xuXG5cbiAgICBASW5wdXQoKVxuICAgIHNldCBmb3JjZUxvYWREYXRhT25PcGVuKGZvcmNlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2ZvcmNlTG9hZERhdGFPbk9wZW4gPSBmb3JjZTtcbiAgICAgICAgdGhpcy5fYXNzaWduUG9saWN5U2VydmljZS5mb3JjZWQgPSBmb3JjZTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSB0ZXh0RWxsaXBzaXMgPSBmYWxzZTtcbiAgICAvKipcbiAgICAgKiBFbWl0cyBub3RpZmljYXRpb25zIGFib3V0IHRhc2sgZXZlbnRzXG4gICAgICovXG4gICAgQE91dHB1dCgpIHRhc2tFdmVudDogRXZlbnRFbWl0dGVyPFRhc2tFdmVudE5vdGlmaWNhdGlvbj47XG4gICAgQE91dHB1dCgpIHBhbmVsUmVmT3V0cHV0OiBFdmVudEVtaXR0ZXI8TWF0RXhwYW5zaW9uUGFuZWw+O1xuXG4gIC