@valtimo/dossier 12.5.1 → 12.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/dossier-detail/dossier-detail.component.mjs +101 -55
- package/esm2022/lib/components/dossier-detail/tab/notes/notes.component.mjs +3 -3
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.mjs +26 -13
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.mjs +27 -12
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.mjs +42 -21
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.mjs +25 -11
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.mjs +32 -13
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.mjs +2 -5
- package/esm2022/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.mjs +17 -0
- package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.component.mjs +4 -4
- package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.permissions.mjs +30 -0
- package/esm2022/lib/components/dossier-detail/tab/widgets/widgets.service.mjs +45 -0
- package/esm2022/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.mjs +11 -10
- package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs +52 -47
- package/esm2022/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.mjs +38 -6
- package/esm2022/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.mjs +84 -7
- package/esm2022/lib/components/note-modal/note-modal.component.mjs +3 -3
- package/esm2022/lib/models/case-widget-content.model.mjs +1 -1
- package/esm2022/lib/models/case-widget-display.model.mjs +1 -1
- package/esm2022/lib/models/case-widget.model.mjs +1 -1
- package/esm2022/lib/permissions/dossier-detail.permissions.mjs +6 -2
- package/esm2022/lib/services/dossier-detail-layout.service.mjs +10 -10
- package/fesm2022/valtimo-dossier.mjs +512 -211
- package/fesm2022/valtimo-dossier.mjs.map +1 -1
- package/lib/components/dossier-detail/dossier-detail.component.d.ts +20 -10
- package/lib/components/dossier-detail/dossier-detail.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts +11 -3
- package/lib/components/dossier-detail/tab/widgets/components/collection/widget-collection.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts +12 -4
- package/lib/components/dossier-detail/tab/widgets/components/custom/widget-custom.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts +15 -4
- package/lib/components/dossier-detail/tab/widgets/components/field/widget-field.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts +11 -3
- package/lib/components/dossier-detail/tab/widgets/components/formio/widget-formio.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts +11 -3
- package/lib/components/dossier-detail/tab/widgets/components/table/widget-table.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts +0 -1
- package/lib/components/dossier-detail/tab/widgets/components/widget-block/widget-block.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.d.ts +13 -0
- package/lib/components/dossier-detail/tab/widgets/components/widget-process/widget-process.d.ts.map +1 -0
- package/lib/components/dossier-detail/tab/widgets/widgets.component.d.ts.map +1 -1
- package/lib/components/dossier-detail/tab/widgets/widgets.permissions.d.ts +8 -0
- package/lib/components/dossier-detail/tab/widgets/widgets.permissions.d.ts.map +1 -0
- package/lib/components/dossier-detail/tab/widgets/widgets.service.d.ts +16 -0
- package/lib/components/dossier-detail/tab/widgets/widgets.service.d.ts.map +1 -0
- package/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.d.ts +5 -3
- package/lib/components/dossier-detail-task-detail/dossier-detail-task-detail.component.d.ts.map +1 -1
- package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts +14 -13
- package/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.d.ts.map +1 -1
- package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts +8 -3
- package/lib/components/dossier-process-start-modal/dossier-process-start-modal.component.d.ts.map +1 -1
- package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts +14 -4
- package/lib/components/dossier-supporting-process-start-modal/dossier-supporting-process-start-modal.component.d.ts.map +1 -1
- package/lib/models/case-widget-content.model.d.ts.map +1 -1
- package/lib/models/case-widget-display.model.d.ts +6 -2
- package/lib/models/case-widget-display.model.d.ts.map +1 -1
- package/lib/models/case-widget.model.d.ts +7 -1
- package/lib/models/case-widget.model.d.ts.map +1 -1
- package/lib/permissions/dossier-detail.permissions.d.ts +2 -1
- package/lib/permissions/dossier-detail.permissions.d.ts.map +1 -1
- package/lib/services/dossier-detail-layout.service.d.ts +4 -5
- package/lib/services/dossier-detail-layout.service.d.ts.map +1 -1
- package/package.json +1 -1
package/esm2022/lib/components/dossier-detail-task-list/dossier-detail-task-list.component.mjs
CHANGED
|
@@ -29,25 +29,27 @@ import * as i3 from "@angular/router";
|
|
|
29
29
|
import * as i4 from "@valtimo/access-control";
|
|
30
30
|
import * as i5 from "@valtimo/security";
|
|
31
31
|
import * as i6 from "../../services";
|
|
32
|
-
import * as i7 from "@
|
|
33
|
-
import * as i8 from "@
|
|
34
|
-
import * as i9 from "
|
|
35
|
-
import * as i10 from "
|
|
36
|
-
import * as i11 from "@valtimo/
|
|
32
|
+
import * as i7 from "@valtimo/process-link";
|
|
33
|
+
import * as i8 from "@angular/common";
|
|
34
|
+
import * as i9 from "@ngx-translate/core";
|
|
35
|
+
import * as i10 from "carbon-components-angular";
|
|
36
|
+
import * as i11 from "@valtimo/task";
|
|
37
|
+
import * as i12 from "@valtimo/components";
|
|
37
38
|
moment.locale(localStorage.getItem('langKey') || '');
|
|
38
39
|
moment.defaultFormat = 'DD MMM YYYY HH:mm';
|
|
39
40
|
export class DossierDetailTaskListComponent {
|
|
40
|
-
set
|
|
41
|
+
set openTaskAndProcessLinkInModal(value) {
|
|
41
42
|
if (value)
|
|
42
|
-
this._taskDetailModal.
|
|
43
|
+
this._taskDetailModal.openTaskAndProcessLinkDetails(value);
|
|
43
44
|
}
|
|
44
|
-
constructor(documentService, processService, route, permissionService, userProviderService, dossierDetailLayoutService) {
|
|
45
|
+
constructor(documentService, processService, route, permissionService, userProviderService, dossierDetailLayoutService, processLinkService) {
|
|
45
46
|
this.documentService = documentService;
|
|
46
47
|
this.processService = processService;
|
|
47
48
|
this.route = route;
|
|
48
49
|
this.permissionService = permissionService;
|
|
49
50
|
this.userProviderService = userProviderService;
|
|
50
51
|
this.dossierDetailLayoutService = dossierDetailLayoutService;
|
|
52
|
+
this.processLinkService = processLinkService;
|
|
51
53
|
this.taskClickEvent = new EventEmitter();
|
|
52
54
|
this.formSubmitEvent = new EventEmitter();
|
|
53
55
|
this.loadingTasks$ = new BehaviorSubject(true);
|
|
@@ -56,26 +58,26 @@ export class DossierDetailTaskListComponent {
|
|
|
56
58
|
this.processInstanceTasks$ = this._refresh$.pipe(switchMap(() => this._documentId$), switchMap(documentId => this.documentService
|
|
57
59
|
.findProcessDocumentInstances(documentId)
|
|
58
60
|
.pipe(repeat({ count: 5, delay: 1500 }))), switchMap(processDocumentInstances => combineLatest([
|
|
59
|
-
...processDocumentInstances.map(processDocumentInstance => this.
|
|
60
|
-
])), map(res => res.reduce((acc, curr) => [...acc, ...curr], [])), switchMap(
|
|
61
|
-
of(
|
|
62
|
-
...(
|
|
61
|
+
...processDocumentInstances.map(processDocumentInstance => this.processLinkService.getTasksWithProcessLinks(processDocumentInstance.id.processInstanceId)),
|
|
62
|
+
])), map(res => res.reduce((acc, curr) => [...acc, ...curr], [])), switchMap(tasksWithProcessLinks => combineLatest([
|
|
63
|
+
of(tasksWithProcessLinks),
|
|
64
|
+
...(tasksWithProcessLinks || []).map(taskWithProcessLink => this.permissionService.requestPermission(CAN_VIEW_TASK_PERMISSION, {
|
|
63
65
|
resource: TASK_DETAIL_PERMISSION_RESOURCE.task,
|
|
64
|
-
identifier: task.id,
|
|
66
|
+
identifier: taskWithProcessLink.task.id,
|
|
65
67
|
})),
|
|
66
68
|
])), map(res => {
|
|
67
|
-
const
|
|
69
|
+
const tasksWithProcessLinks = res[0] || [];
|
|
68
70
|
const permissions = res?.filter((_, index) => index !== 0);
|
|
69
|
-
const
|
|
70
|
-
const
|
|
71
|
-
return this.
|
|
72
|
-
}), map(
|
|
71
|
+
const mappedTasksWithProcessLinks = this.mapTasksWithProcessLinks(tasksWithProcessLinks, permissions);
|
|
72
|
+
const uniqueTasksWithProcessLinks = this.getUniqueTasksWithProcessLinks(mappedTasksWithProcessLinks);
|
|
73
|
+
return this.getSortedTasksWithProcessLinks(uniqueTasksWithProcessLinks);
|
|
74
|
+
}), map(tasksWithProcessLinks => this.sortTasksWithProcessLinksOnPermission(tasksWithProcessLinks)), tap(() => this.loadingTasks$.next(false)));
|
|
73
75
|
this.formSize$ = this.dossierDetailLayoutService.formDisplaySize$;
|
|
74
76
|
}
|
|
75
|
-
rowTaskClick(
|
|
76
|
-
if (task.isLocked)
|
|
77
|
+
rowTaskClick(tasWithProcessLinkk) {
|
|
78
|
+
if (tasWithProcessLinkk.task.isLocked)
|
|
77
79
|
return;
|
|
78
|
-
this.taskClickEvent.emit(
|
|
80
|
+
this.taskClickEvent.emit(tasWithProcessLinkk);
|
|
79
81
|
}
|
|
80
82
|
onFormSubmit() {
|
|
81
83
|
this.formSubmitEvent.emit();
|
|
@@ -84,51 +86,54 @@ export class DossierDetailTaskListComponent {
|
|
|
84
86
|
refresh() {
|
|
85
87
|
this._refresh$.next(null);
|
|
86
88
|
}
|
|
87
|
-
|
|
88
|
-
return
|
|
89
|
-
...
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
89
|
+
mapTasksWithProcessLinks(tasksWithProcessLinks, permissions) {
|
|
90
|
+
return tasksWithProcessLinks.map((taskWithProcessLink, index) => ({
|
|
91
|
+
...taskWithProcessLink,
|
|
92
|
+
task: {
|
|
93
|
+
...taskWithProcessLink.task,
|
|
94
|
+
createdUnix: moment(taskWithProcessLink.task.created).unix(),
|
|
95
|
+
created: moment(taskWithProcessLink.task.created).format('DD MMM YYYY HH:mm'),
|
|
96
|
+
...(taskWithProcessLink.task.due && { dueUnix: moment(taskWithProcessLink.task.due).unix() }),
|
|
97
|
+
isLocked: !permissions[index],
|
|
98
|
+
},
|
|
94
99
|
}));
|
|
95
100
|
}
|
|
96
|
-
|
|
97
|
-
return
|
|
98
|
-
if (!acc.find(
|
|
101
|
+
getUniqueTasksWithProcessLinks(tasksWithProcessLinks) {
|
|
102
|
+
return tasksWithProcessLinks.reduce((acc, curr) => {
|
|
103
|
+
if (!acc.find(taskWithProcessLink => taskWithProcessLink.task.id === curr.task.id)) {
|
|
99
104
|
return [...acc, curr];
|
|
100
105
|
}
|
|
101
106
|
return acc;
|
|
102
107
|
}, []);
|
|
103
108
|
}
|
|
104
|
-
|
|
105
|
-
return
|
|
109
|
+
getSortedTasksWithProcessLinks(tasksWithProcessLinks) {
|
|
110
|
+
return tasksWithProcessLinks.sort((t1, t2) => {
|
|
106
111
|
// high priority tasks on top
|
|
107
|
-
if (t2.priority !== t1.priority) {
|
|
108
|
-
return t2.priority - t1.priority;
|
|
112
|
+
if (t2.task.priority !== t1.task.priority) {
|
|
113
|
+
return t2.task.priority - t1.task.priority;
|
|
109
114
|
}
|
|
110
115
|
// task with approaching due date on top
|
|
111
|
-
const due1 = t1?.dueUnix || Number.MAX_VALUE;
|
|
112
|
-
const due2 = t2?.dueUnix || Number.MAX_VALUE;
|
|
116
|
+
const due1 = t1?.task.dueUnix || Number.MAX_VALUE;
|
|
117
|
+
const due2 = t2?.task.dueUnix || Number.MAX_VALUE;
|
|
113
118
|
if (due1 !== due2) {
|
|
114
119
|
return due1 - due2;
|
|
115
120
|
}
|
|
116
121
|
// new task on top
|
|
117
|
-
const createdCompare = t2.createdUnix / 5000 - t1.createdUnix / 5000;
|
|
122
|
+
const createdCompare = t2.task.createdUnix / 5000 - t1.task.createdUnix / 5000;
|
|
118
123
|
if (createdCompare !== 0) {
|
|
119
124
|
return createdCompare;
|
|
120
125
|
}
|
|
121
126
|
// task with approximately the same age, are sorted by name
|
|
122
|
-
return t1.name.localeCompare(t2.name);
|
|
127
|
+
return t1.task.name.localeCompare(t2.task.name);
|
|
123
128
|
});
|
|
124
129
|
}
|
|
125
|
-
|
|
126
|
-
return
|
|
130
|
+
sortTasksWithProcessLinksOnPermission(tasksWithProcessLinks) {
|
|
131
|
+
return tasksWithProcessLinks.reduce((acc, curr) => !curr.task.isLocked
|
|
127
132
|
? { ...acc, myTasks: [...acc.myTasks, curr] }
|
|
128
133
|
: { ...acc, otherTasks: [...acc.otherTasks, curr] }, { myTasks: [], otherTasks: [] });
|
|
129
134
|
}
|
|
130
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, deps: [{ token: i1.DocumentService }, { token: i2.ProcessService }, { token: i3.ActivatedRoute }, { token: i4.PermissionService }, { token: i5.UserProviderService }, { token: i6.DossierDetailLayoutService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
131
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTaskListComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-list", inputs: {
|
|
135
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, deps: [{ token: i1.DocumentService }, { token: i2.ProcessService }, { token: i3.ActivatedRoute }, { token: i4.PermissionService }, { token: i5.UserProviderService }, { token: i6.DossierDetailLayoutService }, { token: i7.ProcessLinkService }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
136
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DossierDetailTaskListComponent, isStandalone: true, selector: "valtimo-dossier-detail-task-list", inputs: { openTaskAndProcessLinkInModal: "openTaskAndProcessLinkInModal" }, outputs: { taskClickEvent: "taskClickEvent", formSubmitEvent: "formSubmitEvent" }, viewQueries: [{ propertyName: "_taskDetailModal", first: true, predicate: ["taskDetail"], descendants: true }], ngImport: i0, template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.myTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.otherTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-taskWithProcessLink=\"taskWithProcessLink\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(taskWithProcessLink)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ taskWithProcessLink.task.name }}</span>\n\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"taskWithProcessLink.task.isLocked ? 'cool-gray' : 'green'\"\n >\n @if (!taskWithProcessLink.task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ taskWithProcessLink.task.created }}\n </div>\n\n <div class=\"task__subtitles\">\n @for (\n subtitle of taskWithProcessLink?.processLinkActivityResult?.properties?.subtitles || [];\n track subtitle\n ) {\n <p class=\"task__subtitle\">{{ subtitle }}</p>\n }\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{margin:0;white-space:pre}.task__title{width:100%;font-size:14px;font-weight:600;line-height:20px;letter-spacing:.16px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.task__subtitle{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__subtitles{display:flex;flex-direction:column;gap:4px}.task__description{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i8.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i8.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i8.AsyncPipe, name: "async" }, { kind: "ngmodule", type: NgbTooltipModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i9.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: WidgetModule }, { kind: "ngmodule", type: LoadingModule }, { kind: "component", type: i10.Loading, selector: "cds-loading, ibm-loading", inputs: ["title", "isActive", "size", "overlay"] }, { kind: "ngmodule", type: TaskModule }, { kind: "component", type: i11.TaskDetailModalComponent, selector: "valtimo-task-detail-modal", inputs: ["modalSize"], outputs: ["formSubmit", "assignmentOfTaskChanged"] }, { kind: "ngmodule", type: TilesModule }, { kind: "component", type: i10.ClickableTile, selector: "cds-clickable-tile, ibm-clickable-tile", inputs: ["theme", "href", "target", "disabled", "route", "routeExtras"], outputs: ["navigation"] }, { kind: "ngmodule", type: LayerModule }, { kind: "directive", type: i10.LayerDirective, selector: "[cdsLayer], [ibmLayer]", inputs: ["ibmLayer", "cdsLayer"], exportAs: ["layer"] }, { kind: "ngmodule", type: TagModule }, { kind: "component", type: i10.Tag, selector: "cds-tag, ibm-tag", inputs: ["type", "size", "class"] }, { kind: "ngmodule", type: CarbonListModule }, { kind: "component", type: i12.CarbonNoResultsComponent, selector: "valtimo-no-results", inputs: ["action", "description", "illustration", "title", "smallPadding", "collapseVertically", "alwaysRenderVertically"] }] }); }
|
|
132
137
|
}
|
|
133
138
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DossierDetailTaskListComponent, decorators: [{
|
|
134
139
|
type: Component,
|
|
@@ -143,15 +148,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
|
|
|
143
148
|
LayerModule,
|
|
144
149
|
TagModule,
|
|
145
150
|
CarbonListModule,
|
|
146
|
-
], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (
|
|
147
|
-
}], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ProcessService }, { type: i3.ActivatedRoute }, { type: i4.PermissionService }, { type: i5.UserProviderService }, { type: i6.DossierDetailLayoutService }], propDecorators: { _taskDetailModal: [{
|
|
151
|
+
], template: "<!--\n ~ Copyright 2015-2024 Ritense BV, the Netherlands.\n ~\n ~ Licensed under EUPL, Version 1.2 (the \"License\");\n ~ you may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" basis,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n<div\n class=\"task-list\"\n *ngIf=\"{loadingTasks: loadingTasks$ | async, tasks: processInstanceTasks$ | async} as obs\"\n>\n @if (obs.loadingTasks && !obs.tasks) {\n <ng-container *ngTemplateOutlet=\"loadingTasksTemplate\"></ng-container>\n } @else if (obs.tasks?.myTasks?.length === 0 && obs.tasks?.otherTasks?.length === 0) {\n <ng-container *ngTemplateOutlet=\"noTasksTemplate\"></ng-container>\n } @else {\n <h2 class=\"task-list__title\">{{ 'summary.tasks' | translate }}</h2>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.myTasks' | translate }}</h3>\n\n @if (obs.tasks?.myTasks.length === 0) {\n {{ 'summary.noResultsMyTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.myTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n\n <div class=\"task-list__tasks-container\" cdsLayer=\"1\">\n <h3 class=\"task-list__subtitle\">{{ 'summary.otherTasks' | translate }}</h3>\n\n @if (obs.tasks?.otherTasks.length === 0) {\n {{ 'summary.noResultsOtherTasks' | translate }}\n } @else {\n @for (taskWithProcessLink of obs.tasks?.otherTasks; track taskWithProcessLink.task.id) {\n <ng-container\n *ngTemplateOutlet=\"taskTemplate; context: {taskWithProcessLink: taskWithProcessLink}\"\n ></ng-container>\n }\n }\n </div>\n }\n\n <valtimo-task-detail-modal\n #taskDetail\n [modalSize]=\"formSize$ | async\"\n (formSubmit)=\"onFormSubmit()\"\n (assignmentOfTaskChanged)=\"refresh()\"\n ></valtimo-task-detail-modal>\n</div>\n\n<ng-template #taskTemplate let-taskWithProcessLink=\"taskWithProcessLink\">\n <cds-clickable-tile [href]=\"null\" (click)=\"rowTaskClick(taskWithProcessLink)\">\n <div class=\"task\">\n <div class=\"task__header\">\n <span class=\"task__title\">{{ taskWithProcessLink.task.name }}</span>\n\n <cds-tag\n class=\"cds-tag--no-margin\"\n [type]=\"taskWithProcessLink.task.isLocked ? 'cool-gray' : 'green'\"\n >\n @if (!taskWithProcessLink.task.isLocked) {\n {{ 'summary.taskOpen' | translate }}\n } @else {\n <i class=\"icon mdi mdi-lock\"></i>\n }\n </cds-tag>\n </div>\n\n <div class=\"task__description\">\n {{ 'summary.taskCreated' | translate }} {{ taskWithProcessLink.task.created }}\n </div>\n\n <div class=\"task__subtitles\">\n @for (\n subtitle of taskWithProcessLink?.processLinkActivityResult?.properties?.subtitles || [];\n track subtitle\n ) {\n <p class=\"task__subtitle\">{{ subtitle }}</p>\n }\n </div>\n </div>\n </cds-clickable-tile>\n</ng-template>\n\n<ng-template #noTasksTemplate>\n <valtimo-no-results\n [alwaysRenderVertically]=\"true\"\n illustration=\"valtimo-layout/img/emptystate-success.svg\"\n [description]=\"'summary.userTasksDoneState' | translate\"\n [smallPadding]=\"true\"\n ></valtimo-no-results>\n</ng-template>\n\n<ng-template #loadingTasksTemplate>\n <div class=\"loading-container\">\n <cds-loading size=\"sm\"></cds-loading>\n </div>\n</ng-template>\n", styles: [".task-list{width:100%;background-color:var(--cds-layer);padding:24px;display:flex;flex-direction:column;gap:16px}.task-list__title{font-size:24px;line-height:24px;font-weight:600}.task-list__subtitle{font-size:16px;line-height:16px;font-weight:600}.task-list__tasks-container,.task{display:flex;flex-direction:column;gap:8px}.task__header{display:flex;justify-content:space-between;align-items:center;gap:8px}.task__header .cds--tag{margin:0;white-space:pre}.task__title{width:100%;font-size:14px;font-weight:600;line-height:20px;letter-spacing:.16px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.task__subtitle{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.task__subtitles{display:flex;flex-direction:column;gap:4px}.task__description{font-size:12px;font-weight:400;line-height:16px;letter-spacing:.32px;text-align:left;text-underline-position:from-font;text-decoration-skip-ink:none}.loading-container{width:100%;display:flex;justify-content:center}\n/*!\n * Copyright 2015-2024 Ritense BV, the Netherlands.\n *\n * Licensed under EUPL, Version 1.2 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" basis,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n"] }]
|
|
152
|
+
}], ctorParameters: () => [{ type: i1.DocumentService }, { type: i2.ProcessService }, { type: i3.ActivatedRoute }, { type: i4.PermissionService }, { type: i5.UserProviderService }, { type: i6.DossierDetailLayoutService }, { type: i7.ProcessLinkService }], propDecorators: { _taskDetailModal: [{
|
|
148
153
|
type: ViewChild,
|
|
149
154
|
args: ['taskDetail']
|
|
150
|
-
}],
|
|
155
|
+
}], openTaskAndProcessLinkInModal: [{
|
|
151
156
|
type: Input
|
|
152
157
|
}], taskClickEvent: [{
|
|
153
158
|
type: Output
|
|
154
159
|
}], formSubmitEvent: [{
|
|
155
160
|
type: Output
|
|
156
161
|
}] } });
|
|
157
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwtdGFzay1saXN0L2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUVILEVBQUUsRUFDRixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsd0JBQXdCLEVBRXhCLCtCQUErQixFQUUvQixVQUFVLEdBQ1gsTUFB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QSx3NkNEdENJLFlBQVksOFZBQ1osZ0JBQWdCLDhCQUNoQixlQUFlLDJGQUNmLFlBQVksOEJBQ1osYUFBYSwrSkFDYixVQUFVLDJNQUNWLFdBQVcsbU9BQ1gsV0FBVyx5S0FDWCxTQUFTLG9JQUNULGdCQUFnQjs7NEZBR1AsOEJBQThCO2tCQWxCMUMsU0FBUzsrQkFDRSxrQ0FBa0MsY0FHaEMsSUFBSSxXQUNQO3dCQUNQLFlBQVk7d0JBQ1osZ0JBQWdCO3dCQUNoQixlQUFlO3dCQUNmLFlBQVk7d0JBQ1osYUFBYTt3QkFDYixVQUFVO3dCQUNWLFdBQVc7d0JBQ1gsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGdCQUFnQjtxQkFDakI7eVBBR3lDLGdCQUFnQjtzQkFBekQsU0FBUzt1QkFBQyxZQUFZO2dCQUVILGVBQWU7c0JBQWxDLEtBQUs7Z0JBSW9CLGNBQWM7c0JBQXZDLE1BQU07Z0JBQ21CLGVBQWU7c0JBQXhDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gKlxuICogTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb21tb25Nb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge05nYlRvb2x0aXBNb2R1bGV9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7VHJhbnNsYXRlTW9kdWxlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7Q2FyYm9uTGlzdE1vZHVsZSwgV2lkZ2V0TW9kdWxlfSBmcm9tICdAdmFsdGltby9jb21wb25lbnRzJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZmlsdGVyLFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIG9mLFxuICByZXBlYXQsXG4gIHN3aXRjaE1hcCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7TGF5ZXJNb2R1bGUsIExvYWRpbmdNb2R1bGUsIFRhZ01vZHVsZSwgVGlsZXNNb2R1bGV9IGZyb20gJ2NhcmJvbi1jb21wb25lbnRzLWFuZ3VsYXInO1xuaW1wb3J0IHtcbiAgQ0FOX1ZJRVdfVEFTS19QRVJNSVNTSU9OLFxuICBUYXNrLFxuICBUQVNLX0RFVEFJTF9QRVJNSVNTSU9OX1JFU09VUkNFLFxuICBUYXNrRGV0YWlsTW9kYWxDb21wb25lbnQsXG4gIFRhc2tNb2R1bGUsXG59IGZyb20gJ0B2YWx0aW1vL3Rhc2snO1xuaW1wb3J0IHtQcm9jZXNzSW5zdGFuY2VUYXNrLCBQcm9jZXNzU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vcHJvY2Vzcyc7XG5pbXBvcnQge1VzZXJJZGVudGl0eX0gZnJvbSAnQHZhbHRpbW8vY29uZmlnJztcbmltcG9ydCB7RG9jdW1lbnRTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9kb2N1bWVudCc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtQZXJtaXNzaW9uU2VydmljZX0gZnJvbSAnQHZhbHRpbW8vYWNjZXNzLWNvbnRyb2wnO1xuaW1wb3J0IHtVc2VyUHJvdmlkZXJTZXJ2aWNlfSBmcm9tICdAdmFsdGltby9zZWN1cml0eSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0Rvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcyc7XG5cbm1vbWVudC5sb2NhbGUobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ2xhbmdLZXknKSB8fCAnJyk7XG5tb21lbnQuZGVmYXVsdEZvcm1hdCA9ICdERCBNTU0gWVlZWSBISDptbSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbHRpbW8tZG9zc2llci1kZXRhaWwtdGFzay1saXN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQuc2NzcyddLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIE5nYlRvb2x0aXBNb2R1bGUsXG4gICAgVHJhbnNsYXRlTW9kdWxlLFxuICAgIFdpZGdldE1vZHVsZSxcbiAgICBMb2FkaW5nTW9kdWxlLFxuICAgIFRhc2tNb2R1bGUsXG4gICAgVGlsZXNNb2R1bGUsXG4gICAgTGF5ZXJNb2R1bGUsXG4gICAgVGFnTW9kdWxlLFxuICAgIENhcmJvbkxpc3RNb2R1bGUsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERvc3NpZXJEZXRhaWxUYXNrTGlzdENvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3Rhc2tEZXRhaWwnKSBwcml2YXRlIHJlYWRvbmx5IF90YXNrRGV0YWlsTW9kYWw6IFRhc2tEZXRhaWxNb2RhbENvbXBvbmVudDtcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IG9wZW5JblRhc2tNb2RhbCh2YWx1ZTogVGFzaykge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5fdGFza0RldGFpbE1vZGFsLm9wZW5UYXNrRGV0YWlscyh2YWx1ZSk7XG4gIH1cblxuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IHRhc2tDbGlja0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQcm9jZXNzSW5zdGFuY2VUYXNrPigpO1xuICBAT3V0cHV0KCkgcHVibGljIHJlYWRvbmx5IGZvcm1TdWJtaXRFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbG9hZGluZ1Rhc2tzJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVmcmVzaCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bGw+KG51bGwpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2RvY3VtZW50SWQkID0gdGhpcy5yb3V0ZS5wYXJhbXMucGlwZShcbiAgICBtYXAocGFyYW1zID0+IHBhcmFtcz8uZG9jdW1lbnRJZCksXG4gICAgZmlsdGVyKGRvY3VtZW50SWQgPT4gISFkb2N1bWVudElkKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBwcm9jZXNzSW5zdGFuY2VUYXNrcyQ6IE9ic2VydmFibGU8e1xuICAgIG15VGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXTtcbiAgICBvdGhlclRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW107XG4gIH0+ID0gdGhpcy5fcmVmcmVzaCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT4gdGhpcy5fZG9jdW1lbnRJZCQpLFxuICAgIHN3aXRjaE1hcChkb2N1bWVudElkID0+XG4gICAgICB0aGlzLmRvY3VtZW50U2VydmljZVxuICAgICAgICAuZmluZFByb2Nlc3NEb2N1bWVudEluc3RhbmNlcyhkb2N1bWVudElkKVxuICAgICAgICAucGlwZShyZXBlYXQoe2NvdW50OiA1LCBkZWxheTogMTUwMH0pKVxuICAgICksXG4gICAgc3dpdGNoTWFwKHByb2Nlc3NEb2N1bWVudEluc3RhbmNlcyA9PlxuICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgIC4uLnByb2Nlc3NEb2N1bWVudEluc3RhbmNlcy5tYXAocHJvY2Vzc0RvY3VtZW50SW5zdGFuY2UgPT5cbiAgICAgICAgICB0aGlzLnByb2Nlc3NTZXJ2aWNlLmdldFByb2Nlc3NJbnN0YW5jZVRhc2tzKHByb2Nlc3NEb2N1bWVudEluc3RhbmNlLmlkLnByb2Nlc3NJbnN0YW5jZUlkKVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi5jdXJyXSwgW10pKSxcbiAgICBzd2l0Y2hNYXAodGFza3MgPT5cbiAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICBvZih0YXNrcyksXG4gICAgICAgIC4uLih0YXNrcyB8fCBbXSkubWFwKHRhc2sgPT5cbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UudGFzayxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2suaWQsXG4gICAgICAgICAgfSlcbiAgICAgICAgKSxcbiAgICAgIF0pXG4gICAgKSxcbiAgICBtYXAocmVzID0+IHtcbiAgICAgIGNvbnN0IHRhc2tzID0gcmVzWzBdIHx8IFtdO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSByZXM/LmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSAwKSBhcyBib29sZWFuW107XG4gICAgICBjb25zdCBtYXBwZWRUYXNrcyA9IHRoaXMubWFwVGFza3ModGFza3MsIHBlcm1pc3Npb25zKTtcbiAgICAgIGNvbnN0IHVuaXF1ZVRhc2tzID0gdGhpcy5nZXRVbmlxdWVUYXNrcyhtYXBwZWRUYXNrcyk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNvcnRlZFRhc2tzKHVuaXF1ZVRhc2tzKTtcbiAgICB9KSxcbiAgICBtYXAodGFza3MgPT4gdGhpcy5zb3J0VGFza3NPblBlcm1pc3Npb24odGFza3MpKSxcbiAgICB0YXAoKCkgPT4gdGhpcy5sb2FkaW5nVGFza3MkLm5leHQoZmFsc2UpKVxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSBmb3JtU2l6ZSQgPSB0aGlzLmRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlLmZvcm1EaXNwbGF5U2l6ZSQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudFNlcnZpY2U6IERvY3VtZW50U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NTZXJ2aWNlOiBQcm9jZXNzU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBlcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlclNlcnZpY2U6IFVzZXJQcm92aWRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBkb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZTogRG9zc2llckRldGFpbExheW91dFNlcnZpY2VcbiAgKSB7fVxuXG4gIHB1YmxpYyByb3dUYXNrQ2xpY2sodGFzazogUHJvY2Vzc0luc3RhbmNlVGFzayk6IHZvaWQge1xuICAgIGlmICh0YXNrLmlzTG9ja2VkKSByZXR1cm47XG5cbiAgICB0aGlzLnRhc2tDbGlja0V2ZW50LmVtaXQodGFzayk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFRhc2tzKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10sIHBlcm1pc3Npb25zOiBib29sZWFuW10pOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10ge1xuICAgIHJldHVybiB0YXNrcy5tYXAoKHRhc2ssIGluZGV4KSA9PiAoe1xuICAgICAgLi4udGFzayxcbiAgICAgIGNyZWF0ZWRVbml4OiBtb21lbnQodGFzay5jcmVhdGVkKS51bml4KCksXG4gICAgICBjcmVhdGVkOiBtb21lbnQodGFzay5jcmVhdGVkKS5mb3JtYXQoJ0REIE1NTSBZWVlZIEhIOm1tJyksXG4gICAgICAuLi4odGFzay5kdWUgJiYge2R1ZVVuaXg6IG1vbWVudCh0YXNrLmR1ZSkudW5peCgpfSksXG4gICAgICBpc0xvY2tlZDogIXBlcm1pc3Npb25zW2luZGV4XSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldFVuaXF1ZVRhc2tzKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10pOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10ge1xuICAgIHJldHVybiB0YXNrcy5yZWR1Y2UoKGFjYywgY3VycikgPT4ge1xuICAgICAgaWYgKCFhY2MuZmluZCh0YXNrID0+IHRhc2suaWQgPT09IGN1cnIuaWQpKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCBjdXJyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgUHJvY2Vzc0luc3RhbmNlVGFza1tdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydGVkVGFza3ModGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXSk6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXSB7XG4gICAgcmV0dXJuIHRhc2tzLnNvcnQoKHQxLCB0MikgPT4ge1xuICAgICAgLy8gaGlnaCBwcmlvcml0eSB0YXNrcyBvbiB0b3BcbiAgICAgIGlmICh0Mi5wcmlvcml0eSAhPT0gdDEucHJpb3JpdHkpIHtcbiAgICAgICAgcmV0dXJuIHQyLnByaW9yaXR5IC0gdDEucHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb2FjaGluZyBkdWUgZGF0ZSBvbiB0b3BcbiAgICAgIGNvbnN0IGR1ZTEgPSB0MT8uZHVlVW5peCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgY29uc3QgZHVlMiA9IHQyPy5kdWVVbml4IHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICBpZiAoZHVlMSAhPT0gZHVlMikge1xuICAgICAgICByZXR1cm4gZHVlMSAtIGR1ZTI7XG4gICAgICB9XG5cbiAgICAgIC8vIG5ldyB0YXNrIG9uIHRvcFxuICAgICAgY29uc3QgY3JlYXRlZENvbXBhcmUgPSB0Mi5jcmVhdGVkVW5peCAvIDUwMDAgLSB0MS5jcmVhdGVkVW5peCAvIDUwMDA7XG4gICAgICBpZiAoY3JlYXRlZENvbXBhcmUgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRDb21wYXJlO1xuICAgICAgfVxuXG4gICAgICAvLyB0YXNrIHdpdGggYXBwcm94aW1hdGVseSB0aGUgc2FtZSBhZ2UsIGFyZSBzb3J0ZWQgYnkgbmFtZVxuICAgICAgcmV0dXJuIHQxLm5hbWUubG9jYWxlQ29tcGFyZSh0Mi5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFRhc2tzT25QZXJtaXNzaW9uKHRhc2tzOiBQcm9jZXNzSW5zdGFuY2VUYXNrW10pOiB7XG4gICAgbXlUYXNrczogUHJvY2Vzc0luc3RhbmNlVGFza1tdO1xuICAgIG90aGVyVGFza3M6IFByb2Nlc3NJbnN0YW5jZVRhc2tbXTtcbiAgfSB7XG4gICAgcmV0dXJuIHRhc2tzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+XG4gICAgICAgICFjdXJyLmlzTG9ja2VkXG4gICAgICAgICAgPyB7Li4uYWNjLCBteVRhc2tzOiBbLi4uYWNjLm15VGFza3MsIGN1cnJdfVxuICAgICAgICAgIDogey4uLmFjYywgb3RoZXJUYXNrczogWy4uLmFjYy5vdGhlclRhc2tzLCBjdXJyXX0sXG4gICAgICB7bXlUYXNrczogW10gYXMgUHJvY2Vzc0luc3RhbmNlVGFza1tdLCBvdGhlclRhc2tzOiBbXSBhcyBQcm9jZXNzSW5zdGFuY2VUYXNrW119XG4gICAgKTtcbiAgfVxufVxuIiwiPCEtLVxuICB+IENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICB+XG4gIH4gTGljZW5zZWQgdW5kZXIgRVVQTCwgVmVyc2lvbiAxLjIgKHRoZSBcIkxpY2Vuc2VcIik7XG4gIH4geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICB+IFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICB+XG4gIH4gaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICB+XG4gIH4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICB+IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAgfiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAgfiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gIH4gbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gIC0tPlxuXG48ZGl2XG4gIGNsYXNzPVwidGFzay1saXN0XCJcbiAgKm5nSWY9XCJ7bG9hZGluZ1Rhc2tzOiBsb2FkaW5nVGFza3MkIHwgYXN5bmMsIHRhc2tzOiBwcm9jZXNzSW5zdGFuY2VUYXNrcyQgfCBhc3luY30gYXMgb2JzXCJcbj5cbiAgQGlmIChvYnMubG9hZGluZ1Rhc2tzICYmICFvYnMudGFza3MpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9hZGluZ1Rhc2tzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSBpZiAob2JzLnRhc2tzPy5teVRhc2tzPy5sZW5ndGggPT09IDAgJiYgb2JzLnRhc2tzPy5vdGhlclRhc2tzPy5sZW5ndGggPT09IDApIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibm9UYXNrc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gIH0gQGVsc2Uge1xuICAgIDxoMiBjbGFzcz1cInRhc2stbGlzdF9fdGl0bGVcIj57eyAnc3VtbWFyeS50YXNrcycgfCB0cmFuc2xhdGUgfX08L2gyPlxuXG4gICAgPGRpdiBjbGFzcz1cInRhc2stbGlzdF9fdGFza3MtY29udGFpbmVyXCIgY2RzTGF5ZXI9XCIxXCI+XG4gICAgICA8aDMgY2xhc3M9XCJ0YXNrLWxpc3RfX3N1YnRpdGxlXCI+e3sgJ3N1bW1hcnkubXlUYXNrcycgfCB0cmFuc2xhdGUgfX08L2gzPlxuXG4gICAgICBAaWYgKG9icy50YXNrcz8ubXlUYXNrcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAge3sgJ3N1bW1hcnkubm9SZXN1bHRzTXlUYXNrcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgIH0gQGVsc2Uge1xuICAgICAgICBAZm9yICh0YXNrIG9mIG9icy50YXNrcz8ubXlUYXNrczsgdHJhY2sgdGFzay5pZCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0YXNrVGVtcGxhdGU7IGNvbnRleHQ6IHt0YXNrOiB0YXNrfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFzay1saXN0X190YXNrcy1jb250YWluZXJcIiBjZHNMYXllcj1cIjFcIj5cbiAgICAgIDxoMyBjbGFzcz1cInRhc2stbGlzdF9fc3VidGl0bGVcIj57eyAnc3VtbWFyeS5vdGhlclRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG5cbiAgICAgIEBpZiAob2JzLnRhc2tzPy5vdGhlclRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB7eyAnc3VtbWFyeS5ub1Jlc3VsdHNPdGhlclRhc2tzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhc2sgb2Ygb2JzLnRhc2tzPy5vdGhlclRhc2tzOyB0cmFjayB0YXNrLmlkKSB7XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRhc2tUZW1wbGF0ZTsgY29udGV4dDoge3Rhc2s6IHRhc2t9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgfVxuXG4gIDx2YWx0aW1vLXRhc2stZGV0YWlsLW1vZGFsXG4gICAgI3Rhc2tEZXRhaWxcbiAgICBbbW9kYWxTaXplXT1cImZvcm1TaXplJCB8IGFzeW5jXCJcbiAgICAoZm9ybVN1Ym1pdCk9XCJvbkZvcm1TdWJtaXQoKVwiXG4gICAgKGFzc2lnbm1lbnRPZlRhc2tDaGFuZ2VkKT1cInJlZnJlc2goKVwiXG4gID48L3ZhbHRpbW8tdGFzay1kZXRhaWwtbW9kYWw+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICN0YXNrVGVtcGxhdGUgbGV0LXRhc2s9XCJ0YXNrXCI+XG4gIDxjZHMtY2xpY2thYmxlLXRpbGUgW2hyZWZdPVwibnVsbFwiIChjbGljayk9XCJyb3dUYXNrQ2xpY2sodGFzaylcIj5cbiAgICA8ZGl2IGNsYXNzPVwidGFza1wiPlxuICAgICAgPGRpdiBjbGFzcz1cInRhc2tfX2hlYWRlclwiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cInRhc2tfX3RpdGxlXCI+e3sgdGFzay5uYW1lIH19PC9zcGFuPlxuXG4gICAgICAgIDxjZHMtdGFnIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCIgW3R5cGVdPVwidGFzay5pc0xvY2tlZCA/ICdjb29sLWdyYXknIDogJ2dyZWVuJ1wiPlxuICAgICAgICAgIEBpZiAoIXRhc2suaXNMb2NrZWQpIHtcbiAgICAgICAgICAgIHt7ICdzdW1tYXJ5LnRhc2tPcGVuJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPGkgY2xhc3M9XCJpY29uIG1kaSBtZGktbG9ja1wiPjwvaT5cbiAgICAgICAgICB9XG4gICAgICAgIDwvY2RzLXRhZz5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwidGFza19fZGVzY3JpcHRpb25cIj5cbiAgICAgICAge3sgJ3N1bW1hcnkudGFza0NyZWF0ZWQnIHwgdHJhbnNsYXRlIH19IHt7IHRhc2suY3JlYXRlZCB9fVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvY2RzLWNsaWNrYWJsZS10aWxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1Rhc2tzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICBbYWx3YXlzUmVuZGVyVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICBpbGx1c3RyYXRpb249XCJ2YWx0aW1vLWxheW91dC9pbWcvZW1wdHlzdGF0ZS1zdWNjZXNzLnN2Z1wiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIidzdW1tYXJ5LnVzZXJUYXNrc0RvbmVTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgIFtzbWFsbFBhZGRpbmddPVwidHJ1ZVwiXG4gID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1Rhc2tzVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgIDxjZHMtbG9hZGluZyBzaXplPVwic21cIj48L2Nkcy1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
162
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9zc2llci1kZXRhaWwtdGFzay1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3ZhbHRpbW8vZG9zc2llci9zcmMvbGliL2NvbXBvbmVudHMvZG9zc2llci1kZXRhaWwtdGFzay1saXN0L2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy92YWx0aW1vL2Rvc3NpZXIvc3JjL2xpYi9jb21wb25lbnRzL2Rvc3NpZXItZGV0YWlsLXRhc2stbGlzdC9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFFSCxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxZQUFZLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixNQUFNLEVBQ04sR0FBRyxFQUVILEVBQUUsRUFDRixNQUFNLEVBQ04sU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM3RixPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLCtCQUErQixFQUUvQixVQUFVLEdBQ1gsTUFB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QUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUNaLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQ2pCLENBQUMsQ0FBQyxFQUFDLEdBQUcsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsRUFBQztZQUMzQyxDQUFDLENBQUMsRUFBQyxHQUFHLEdBQUcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUMsRUFDckQsRUFBQyxPQUFPLEVBQUUsRUFBMkIsRUFBRSxVQUFVLEVBQUUsRUFBMkIsRUFBQyxDQUNoRixDQUFDO0lBQ0osQ0FBQzsrR0EvSlUsOEJBQThCO21HQUE5Qiw4QkFBOEIsMldDckUzQywrK0hBZ0hBLHF6RER2REksWUFBWSw4VkFDWixnQkFBZ0IsOEJBQ2hCLGVBQWUsMkZBQ2YsWUFBWSw4QkFDWixhQUFhLGdLQUNiLFVBQVUsMk1BQ1YsV0FBVyxvT0FDWCxXQUFXLDBLQUNYLFNBQVMscUlBQ1QsZ0JBQWdCOzs0RkFHUCw4QkFBOEI7a0JBbEIxQyxTQUFTOytCQUNFLGtDQUFrQyxjQUdoQyxJQUFJLFdBQ1A7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7d0JBQ2hCLGVBQWU7d0JBQ2YsWUFBWTt3QkFDWixhQUFhO3dCQUNiLFVBQVU7d0JBQ1YsV0FBVzt3QkFDWCxXQUFXO3dCQUNYLFNBQVM7d0JBQ1QsZ0JBQWdCO3FCQUNqQjswUkFHeUMsZ0JBQWdCO3NCQUF6RCxTQUFTO3VCQUFDLFlBQVk7Z0JBRUgsNkJBQTZCO3NCQUFoRCxLQUFLO2dCQUlvQixjQUFjO3NCQUF2QyxNQUFNO2dCQUNtQixlQUFlO3NCQUF4QyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE1LTIwMjQgUml0ZW5zZSBCViwgdGhlIE5ldGhlcmxhbmRzLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIEVVUEwsIFZlcnNpb24gMS4yICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cHM6Ly9qb2ludXAuZWMuZXVyb3BhLmV1L2NvbGxlY3Rpb24vZXVwbC9ldXBsLXRleHQtZXVwbC0xMlxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBiYXNpcyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHtDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgVmlld0NoaWxkfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tbW9uTW9kdWxlfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtOZ2JUb29sdGlwTW9kdWxlfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQge1RyYW5zbGF0ZU1vZHVsZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0NhcmJvbkxpc3RNb2R1bGUsIFdpZGdldE1vZHVsZX0gZnJvbSAnQHZhbHRpbW8vY29tcG9uZW50cyc7XG5pbXBvcnQge1xuICBCZWhhdmlvclN1YmplY3QsXG4gIGNvbWJpbmVMYXRlc3QsXG4gIGZpbHRlcixcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvZixcbiAgcmVwZWF0LFxuICBzd2l0Y2hNYXAsXG4gIHRhcCxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0xheWVyTW9kdWxlLCBMb2FkaW5nTW9kdWxlLCBUYWdNb2R1bGUsIFRpbGVzTW9kdWxlfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbmltcG9ydCB7XG4gIENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTixcbiAgVEFTS19ERVRBSUxfUEVSTUlTU0lPTl9SRVNPVVJDRSxcbiAgVGFza0RldGFpbE1vZGFsQ29tcG9uZW50LFxuICBUYXNrTW9kdWxlLFxufSBmcm9tICdAdmFsdGltby90YXNrJztcbmltcG9ydCB7UHJvY2Vzc1NlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3Byb2Nlc3MnO1xuaW1wb3J0IHtEb2N1bWVudFNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL2RvY3VtZW50JztcbmltcG9ydCB7QWN0aXZhdGVkUm91dGV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge1Blcm1pc3Npb25TZXJ2aWNlfSBmcm9tICdAdmFsdGltby9hY2Nlc3MtY29udHJvbCc7XG5pbXBvcnQge1VzZXJQcm92aWRlclNlcnZpY2V9IGZyb20gJ0B2YWx0aW1vL3NlY3VyaXR5JztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7RG9zc2llckRldGFpbExheW91dFNlcnZpY2V9IGZyb20gJy4uLy4uL3NlcnZpY2VzJztcbmltcG9ydCB7UHJvY2Vzc0xpbmtTZXJ2aWNlLCBUYXNrV2l0aFByb2Nlc3NMaW5rfSBmcm9tICdAdmFsdGltby9wcm9jZXNzLWxpbmsnO1xuXG5tb21lbnQubG9jYWxlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdsYW5nS2V5JykgfHwgJycpO1xubW9tZW50LmRlZmF1bHRGb3JtYXQgPSAnREQgTU1NIFlZWVkgSEg6bW0nO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2YWx0aW1vLWRvc3NpZXItZGV0YWlsLXRhc2stbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9kb3NzaWVyLWRldGFpbC10YXNrLWxpc3QuY29tcG9uZW50LnNjc3MnXSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBOZ2JUb29sdGlwTW9kdWxlLFxuICAgIFRyYW5zbGF0ZU1vZHVsZSxcbiAgICBXaWRnZXRNb2R1bGUsXG4gICAgTG9hZGluZ01vZHVsZSxcbiAgICBUYXNrTW9kdWxlLFxuICAgIFRpbGVzTW9kdWxlLFxuICAgIExheWVyTW9kdWxlLFxuICAgIFRhZ01vZHVsZSxcbiAgICBDYXJib25MaXN0TW9kdWxlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBEb3NzaWVyRGV0YWlsVGFza0xpc3RDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0YXNrRGV0YWlsJykgcHJpdmF0ZSByZWFkb25seSBfdGFza0RldGFpbE1vZGFsOiBUYXNrRGV0YWlsTW9kYWxDb21wb25lbnQ7XG5cbiAgQElucHV0KCkgcHVibGljIHNldCBvcGVuVGFza0FuZFByb2Nlc3NMaW5rSW5Nb2RhbCh2YWx1ZTogVGFza1dpdGhQcm9jZXNzTGluaykge1xuICAgIGlmICh2YWx1ZSkgdGhpcy5fdGFza0RldGFpbE1vZGFsLm9wZW5UYXNrQW5kUHJvY2Vzc0xpbmtEZXRhaWxzKHZhbHVlKTtcbiAgfVxuXG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgdGFza0NsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPFRhc2tXaXRoUHJvY2Vzc0xpbms+KCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgcmVhZG9ubHkgZm9ybVN1Ym1pdEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIHB1YmxpYyByZWFkb25seSBsb2FkaW5nVGFza3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPih0cnVlKTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9yZWZyZXNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVsbD4obnVsbCk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnRJZCQgPSB0aGlzLnJvdXRlLnBhcmFtcy5waXBlKFxuICAgIG1hcChwYXJhbXMgPT4gcGFyYW1zPy5kb2N1bWVudElkKSxcbiAgICBmaWx0ZXIoZG9jdW1lbnRJZCA9PiAhIWRvY3VtZW50SWQpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHByb2Nlc3NJbnN0YW5jZVRhc2tzJDogT2JzZXJ2YWJsZTx7XG4gICAgbXlUYXNrczogVGFza1dpdGhQcm9jZXNzTGlua1tdO1xuICAgIG90aGVyVGFza3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXTtcbiAgfT4gPSB0aGlzLl9yZWZyZXNoJC5waXBlKFxuICAgIHN3aXRjaE1hcCgoKSA9PiB0aGlzLl9kb2N1bWVudElkJCksXG4gICAgc3dpdGNoTWFwKGRvY3VtZW50SWQgPT5cbiAgICAgIHRoaXMuZG9jdW1lbnRTZXJ2aWNlXG4gICAgICAgIC5maW5kUHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzKGRvY3VtZW50SWQpXG4gICAgICAgIC5waXBlKHJlcGVhdCh7Y291bnQ6IDUsIGRlbGF5OiAxNTAwfSkpXG4gICAgKSxcbiAgICBzd2l0Y2hNYXAocHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgLi4ucHJvY2Vzc0RvY3VtZW50SW5zdGFuY2VzLm1hcChwcm9jZXNzRG9jdW1lbnRJbnN0YW5jZSA9PlxuICAgICAgICAgIHRoaXMucHJvY2Vzc0xpbmtTZXJ2aWNlLmdldFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICAgICAgICAgIHByb2Nlc3NEb2N1bWVudEluc3RhbmNlLmlkLnByb2Nlc3NJbnN0YW5jZUlkXG4gICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4gcmVzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBbLi4uYWNjLCAuLi5jdXJyXSwgW10pKSxcbiAgICBzd2l0Y2hNYXAodGFza3NXaXRoUHJvY2Vzc0xpbmtzID0+XG4gICAgICBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgb2YodGFza3NXaXRoUHJvY2Vzc0xpbmtzKSxcbiAgICAgICAgLi4uKHRhc2tzV2l0aFByb2Nlc3NMaW5rcyB8fCBbXSkubWFwKHRhc2tXaXRoUHJvY2Vzc0xpbmsgPT5cbiAgICAgICAgICB0aGlzLnBlcm1pc3Npb25TZXJ2aWNlLnJlcXVlc3RQZXJtaXNzaW9uKENBTl9WSUVXX1RBU0tfUEVSTUlTU0lPTiwge1xuICAgICAgICAgICAgcmVzb3VyY2U6IFRBU0tfREVUQUlMX1BFUk1JU1NJT05fUkVTT1VSQ0UudGFzayxcbiAgICAgICAgICAgIGlkZW50aWZpZXI6IHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5pZCxcbiAgICAgICAgICB9KVxuICAgICAgICApLFxuICAgICAgXSlcbiAgICApLFxuICAgIG1hcChyZXMgPT4ge1xuICAgICAgY29uc3QgdGFza3NXaXRoUHJvY2Vzc0xpbmtzID0gcmVzWzBdIHx8IFtdO1xuICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSByZXM/LmZpbHRlcigoXywgaW5kZXgpID0+IGluZGV4ICE9PSAwKSBhcyBib29sZWFuW107XG4gICAgICBjb25zdCBtYXBwZWRUYXNrc1dpdGhQcm9jZXNzTGlua3MgPSB0aGlzLm1hcFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICAgICAgdGFza3NXaXRoUHJvY2Vzc0xpbmtzLFxuICAgICAgICBwZXJtaXNzaW9uc1xuICAgICAgKTtcbiAgICAgIGNvbnN0IHVuaXF1ZVRhc2tzV2l0aFByb2Nlc3NMaW5rcyA9IHRoaXMuZ2V0VW5pcXVlVGFza3NXaXRoUHJvY2Vzc0xpbmtzKFxuICAgICAgICBtYXBwZWRUYXNrc1dpdGhQcm9jZXNzTGlua3NcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiB0aGlzLmdldFNvcnRlZFRhc2tzV2l0aFByb2Nlc3NMaW5rcyh1bmlxdWVUYXNrc1dpdGhQcm9jZXNzTGlua3MpO1xuICAgIH0pLFxuICAgIG1hcCh0YXNrc1dpdGhQcm9jZXNzTGlua3MgPT4gdGhpcy5zb3J0VGFza3NXaXRoUHJvY2Vzc0xpbmtzT25QZXJtaXNzaW9uKHRhc2tzV2l0aFByb2Nlc3NMaW5rcykpLFxuICAgIHRhcCgoKSA9PiB0aGlzLmxvYWRpbmdUYXNrcyQubmV4dChmYWxzZSkpXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGZvcm1TaXplJCA9IHRoaXMuZG9zc2llckRldGFpbExheW91dFNlcnZpY2UuZm9ybURpc3BsYXlTaXplJDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50U2VydmljZTogRG9jdW1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJvY2Vzc1NlcnZpY2U6IFByb2Nlc3NTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlclByb3ZpZGVyU2VydmljZTogVXNlclByb3ZpZGVyU2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvc3NpZXJEZXRhaWxMYXlvdXRTZXJ2aWNlOiBEb3NzaWVyRGV0YWlsTGF5b3V0U2VydmljZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByb2Nlc3NMaW5rU2VydmljZTogUHJvY2Vzc0xpbmtTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgcm93VGFza0NsaWNrKHRhc1dpdGhQcm9jZXNzTGlua2s6IFRhc2tXaXRoUHJvY2Vzc0xpbmspOiB2b2lkIHtcbiAgICBpZiAodGFzV2l0aFByb2Nlc3NMaW5ray50YXNrLmlzTG9ja2VkKSByZXR1cm47XG5cbiAgICB0aGlzLnRhc2tDbGlja0V2ZW50LmVtaXQodGFzV2l0aFByb2Nlc3NMaW5rayk7XG4gIH1cblxuICBwdWJsaWMgb25Gb3JtU3VibWl0KCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybVN1Ym1pdEV2ZW50LmVtaXQoKTtcbiAgICB0aGlzLnJlZnJlc2goKTtcbiAgfVxuXG4gIHB1YmxpYyByZWZyZXNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3JlZnJlc2gkLm5leHQobnVsbCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFRhc2tzV2l0aFByb2Nlc3NMaW5rcyhcbiAgICB0YXNrc1dpdGhQcm9jZXNzTGlua3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSxcbiAgICBwZXJtaXNzaW9uczogYm9vbGVhbltdXG4gICk6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSB7XG4gICAgcmV0dXJuIHRhc2tzV2l0aFByb2Nlc3NMaW5rcy5tYXAoKHRhc2tXaXRoUHJvY2Vzc0xpbmssIGluZGV4KSA9PiAoe1xuICAgICAgLi4udGFza1dpdGhQcm9jZXNzTGluayxcbiAgICAgIHRhc2s6IHtcbiAgICAgICAgLi4udGFza1dpdGhQcm9jZXNzTGluay50YXNrLFxuICAgICAgICBjcmVhdGVkVW5peDogbW9tZW50KHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5jcmVhdGVkKS51bml4KCksXG4gICAgICAgIGNyZWF0ZWQ6IG1vbWVudCh0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suY3JlYXRlZCkuZm9ybWF0KCdERCBNTU0gWVlZWSBISDptbScpLFxuICAgICAgICAuLi4odGFza1dpdGhQcm9jZXNzTGluay50YXNrLmR1ZSAmJiB7ZHVlVW5peDogbW9tZW50KHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5kdWUpLnVuaXgoKX0pLFxuICAgICAgICBpc0xvY2tlZDogIXBlcm1pc3Npb25zW2luZGV4XSxcbiAgICAgIH0sXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVbmlxdWVUYXNrc1dpdGhQcm9jZXNzTGlua3MoXG4gICAgdGFza3NXaXRoUHJvY2Vzc0xpbmtzOiBUYXNrV2l0aFByb2Nlc3NMaW5rW11cbiAgKTogVGFza1dpdGhQcm9jZXNzTGlua1tdIHtcbiAgICByZXR1cm4gdGFza3NXaXRoUHJvY2Vzc0xpbmtzLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiB7XG4gICAgICBpZiAoIWFjYy5maW5kKHRhc2tXaXRoUHJvY2Vzc0xpbmsgPT4gdGFza1dpdGhQcm9jZXNzTGluay50YXNrLmlkID09PSBjdXJyLnRhc2suaWQpKSB7XG4gICAgICAgIHJldHVybiBbLi4uYWNjLCBjdXJyXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgW10gYXMgVGFza1dpdGhQcm9jZXNzTGlua1tdKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U29ydGVkVGFza3NXaXRoUHJvY2Vzc0xpbmtzKFxuICAgIHRhc2tzV2l0aFByb2Nlc3NMaW5rczogVGFza1dpdGhQcm9jZXNzTGlua1tdXG4gICk6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSB7XG4gICAgcmV0dXJuIHRhc2tzV2l0aFByb2Nlc3NMaW5rcy5zb3J0KCh0MSwgdDIpID0+IHtcbiAgICAgIC8vIGhpZ2ggcHJpb3JpdHkgdGFza3Mgb24gdG9wXG4gICAgICBpZiAodDIudGFzay5wcmlvcml0eSAhPT0gdDEudGFzay5wcmlvcml0eSkge1xuICAgICAgICByZXR1cm4gdDIudGFzay5wcmlvcml0eSAtIHQxLnRhc2sucHJpb3JpdHk7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb2FjaGluZyBkdWUgZGF0ZSBvbiB0b3BcbiAgICAgIGNvbnN0IGR1ZTEgPSB0MT8udGFzay5kdWVVbml4IHx8IE51bWJlci5NQVhfVkFMVUU7XG4gICAgICBjb25zdCBkdWUyID0gdDI/LnRhc2suZHVlVW5peCB8fCBOdW1iZXIuTUFYX1ZBTFVFO1xuICAgICAgaWYgKGR1ZTEgIT09IGR1ZTIpIHtcbiAgICAgICAgcmV0dXJuIGR1ZTEgLSBkdWUyO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXcgdGFzayBvbiB0b3BcbiAgICAgIGNvbnN0IGNyZWF0ZWRDb21wYXJlID0gdDIudGFzay5jcmVhdGVkVW5peCAvIDUwMDAgLSB0MS50YXNrLmNyZWF0ZWRVbml4IC8gNTAwMDtcbiAgICAgIGlmIChjcmVhdGVkQ29tcGFyZSAhPT0gMCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlZENvbXBhcmU7XG4gICAgICB9XG5cbiAgICAgIC8vIHRhc2sgd2l0aCBhcHByb3hpbWF0ZWx5IHRoZSBzYW1lIGFnZSwgYXJlIHNvcnRlZCBieSBuYW1lXG4gICAgICByZXR1cm4gdDEudGFzay5uYW1lLmxvY2FsZUNvbXBhcmUodDIudGFzay5uYW1lKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFRhc2tzV2l0aFByb2Nlc3NMaW5rc09uUGVybWlzc2lvbih0YXNrc1dpdGhQcm9jZXNzTGlua3M6IFRhc2tXaXRoUHJvY2Vzc0xpbmtbXSk6IHtcbiAgICBteVRhc2tzOiBUYXNrV2l0aFByb2Nlc3NMaW5rW107XG4gICAgb3RoZXJUYXNrczogVGFza1dpdGhQcm9jZXNzTGlua1tdO1xuICB9IHtcbiAgICByZXR1cm4gdGFza3NXaXRoUHJvY2Vzc0xpbmtzLnJlZHVjZShcbiAgICAgIChhY2MsIGN1cnIpID0+XG4gICAgICAgICFjdXJyLnRhc2suaXNMb2NrZWRcbiAgICAgICAgICA/IHsuLi5hY2MsIG15VGFza3M6IFsuLi5hY2MubXlUYXNrcywgY3Vycl19XG4gICAgICAgICAgOiB7Li4uYWNjLCBvdGhlclRhc2tzOiBbLi4uYWNjLm90aGVyVGFza3MsIGN1cnJdfSxcbiAgICAgIHtteVRhc2tzOiBbXSBhcyBUYXNrV2l0aFByb2Nlc3NMaW5rW10sIG90aGVyVGFza3M6IFtdIGFzIFRhc2tXaXRoUHJvY2Vzc0xpbmtbXX1cbiAgICApO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IDIwMTUtMjAyNCBSaXRlbnNlIEJWLCB0aGUgTmV0aGVybGFuZHMuXG4gIH5cbiAgfiBMaWNlbnNlZCB1bmRlciBFVVBMLCBWZXJzaW9uIDEuMiAodGhlIFwiTGljZW5zZVwiKTtcbiAgfiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gIH4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gIH5cbiAgfiBodHRwczovL2pvaW51cC5lYy5ldXJvcGEuZXUvY29sbGVjdGlvbi9ldXBsL2V1cGwtdGV4dC1ldXBsLTEyXG4gIH5cbiAgfiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gIH4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIGJhc2lzLFxuICB+IFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICB+IFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAgfiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAgLS0+XG5cbjxkaXZcbiAgY2xhc3M9XCJ0YXNrLWxpc3RcIlxuICAqbmdJZj1cIntsb2FkaW5nVGFza3M6IGxvYWRpbmdUYXNrcyQgfCBhc3luYywgdGFza3M6IHByb2Nlc3NJbnN0YW5jZVRhc2tzJCB8IGFzeW5jfSBhcyBvYnNcIlxuPlxuICBAaWYgKG9icy5sb2FkaW5nVGFza3MgJiYgIW9icy50YXNrcykge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb2FkaW5nVGFza3NUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICB9IEBlbHNlIGlmIChvYnMudGFza3M/Lm15VGFza3M/Lmxlbmd0aCA9PT0gMCAmJiBvYnMudGFza3M/Lm90aGVyVGFza3M/Lmxlbmd0aCA9PT0gMCkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJub1Rhc2tzVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgfSBAZWxzZSB7XG4gICAgPGgyIGNsYXNzPVwidGFzay1saXN0X190aXRsZVwiPnt7ICdzdW1tYXJ5LnRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDI+XG5cbiAgICA8ZGl2IGNsYXNzPVwidGFzay1saXN0X190YXNrcy1jb250YWluZXJcIiBjZHNMYXllcj1cIjFcIj5cbiAgICAgIDxoMyBjbGFzcz1cInRhc2stbGlzdF9fc3VidGl0bGVcIj57eyAnc3VtbWFyeS5teVRhc2tzJyB8IHRyYW5zbGF0ZSB9fTwvaDM+XG5cbiAgICAgIEBpZiAob2JzLnRhc2tzPy5teVRhc2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB7eyAnc3VtbWFyeS5ub1Jlc3VsdHNNeVRhc2tzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIEBmb3IgKHRhc2tXaXRoUHJvY2Vzc0xpbmsgb2Ygb2JzLnRhc2tzPy5teVRhc2tzOyB0cmFjayB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suaWQpIHtcbiAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cInRhc2tUZW1wbGF0ZTsgY29udGV4dDoge3Rhc2tXaXRoUHJvY2Vzc0xpbms6IHRhc2tXaXRoUHJvY2Vzc0xpbmt9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ0YXNrLWxpc3RfX3Rhc2tzLWNvbnRhaW5lclwiIGNkc0xheWVyPVwiMVwiPlxuICAgICAgPGgzIGNsYXNzPVwidGFzay1saXN0X19zdWJ0aXRsZVwiPnt7ICdzdW1tYXJ5Lm90aGVyVGFza3MnIHwgdHJhbnNsYXRlIH19PC9oMz5cblxuICAgICAgQGlmIChvYnMudGFza3M/Lm90aGVyVGFza3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHt7ICdzdW1tYXJ5Lm5vUmVzdWx0c090aGVyVGFza3MnIHwgdHJhbnNsYXRlIH19XG4gICAgICB9IEBlbHNlIHtcbiAgICAgICAgQGZvciAodGFza1dpdGhQcm9jZXNzTGluayBvZiBvYnMudGFza3M/Lm90aGVyVGFza3M7IHRyYWNrIHRhc2tXaXRoUHJvY2Vzc0xpbmsudGFzay5pZCkge1xuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwidGFza1RlbXBsYXRlOyBjb250ZXh0OiB7dGFza1dpdGhQcm9jZXNzTGluazogdGFza1dpdGhQcm9jZXNzTGlua31cIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgfVxuICAgICAgfVxuICAgIDwvZGl2PlxuICB9XG5cbiAgPHZhbHRpbW8tdGFzay1kZXRhaWwtbW9kYWxcbiAgICAjdGFza0RldGFpbFxuICAgIFttb2RhbFNpemVdPVwiZm9ybVNpemUkIHwgYXN5bmNcIlxuICAgIChmb3JtU3VibWl0KT1cIm9uRm9ybVN1Ym1pdCgpXCJcbiAgICAoYXNzaWdubWVudE9mVGFza0NoYW5nZWQpPVwicmVmcmVzaCgpXCJcbiAgPjwvdmFsdGltby10YXNrLWRldGFpbC1tb2RhbD5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI3Rhc2tUZW1wbGF0ZSBsZXQtdGFza1dpdGhQcm9jZXNzTGluaz1cInRhc2tXaXRoUHJvY2Vzc0xpbmtcIj5cbiAgPGNkcy1jbGlja2FibGUtdGlsZSBbaHJlZl09XCJudWxsXCIgKGNsaWNrKT1cInJvd1Rhc2tDbGljayh0YXNrV2l0aFByb2Nlc3NMaW5rKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJ0YXNrXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwidGFza19faGVhZGVyXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwidGFza19fdGl0bGVcIj57eyB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2submFtZSB9fTwvc3Bhbj5cblxuICAgICAgICA8Y2RzLXRhZ1xuICAgICAgICAgIGNsYXNzPVwiY2RzLXRhZy0tbm8tbWFyZ2luXCJcbiAgICAgICAgICBbdHlwZV09XCJ0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suaXNMb2NrZWQgPyAnY29vbC1ncmF5JyA6ICdncmVlbidcIlxuICAgICAgICA+XG4gICAgICAgICAgQGlmICghdGFza1dpdGhQcm9jZXNzTGluay50YXNrLmlzTG9ja2VkKSB7XG4gICAgICAgICAgICB7eyAnc3VtbWFyeS50YXNrT3BlbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxpIGNsYXNzPVwiaWNvbiBtZGkgbWRpLWxvY2tcIj48L2k+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Nkcy10YWc+XG4gICAgICA8L2Rpdj5cblxuICAgICAgPGRpdiBjbGFzcz1cInRhc2tfX2Rlc2NyaXB0aW9uXCI+XG4gICAgICAgIHt7ICdzdW1tYXJ5LnRhc2tDcmVhdGVkJyB8IHRyYW5zbGF0ZSB9fSB7eyB0YXNrV2l0aFByb2Nlc3NMaW5rLnRhc2suY3JlYXRlZCB9fVxuICAgICAgPC9kaXY+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0YXNrX19zdWJ0aXRsZXNcIj5cbiAgICAgICAgQGZvciAoXG4gICAgICAgICAgc3VidGl0bGUgb2YgdGFza1dpdGhQcm9jZXNzTGluaz8ucHJvY2Vzc0xpbmtBY3Rpdml0eVJlc3VsdD8ucHJvcGVydGllcz8uc3VidGl0bGVzIHx8IFtdO1xuICAgICAgICAgIHRyYWNrIHN1YnRpdGxlXG4gICAgICAgICkge1xuICAgICAgICAgIDxwIGNsYXNzPVwidGFza19fc3VidGl0bGVcIj57eyBzdWJ0aXRsZSB9fTwvcD5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvY2RzLWNsaWNrYWJsZS10aWxlPlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICNub1Rhc2tzVGVtcGxhdGU+XG4gIDx2YWx0aW1vLW5vLXJlc3VsdHNcbiAgICBbYWx3YXlzUmVuZGVyVmVydGljYWxseV09XCJ0cnVlXCJcbiAgICBpbGx1c3RyYXRpb249XCJ2YWx0aW1vLWxheW91dC9pbWcvZW1wdHlzdGF0ZS1zdWNjZXNzLnN2Z1wiXG4gICAgW2Rlc2NyaXB0aW9uXT1cIidzdW1tYXJ5LnVzZXJUYXNrc0RvbmVTdGF0ZScgfCB0cmFuc2xhdGVcIlxuICAgIFtzbWFsbFBhZGRpbmddPVwidHJ1ZVwiXG4gID48L3ZhbHRpbW8tbm8tcmVzdWx0cz5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjbG9hZGluZ1Rhc2tzVGVtcGxhdGU+XG4gIDxkaXYgY2xhc3M9XCJsb2FkaW5nLWNvbnRhaW5lclwiPlxuICAgIDxjZHMtbG9hZGluZyBzaXplPVwic21cIj48L2Nkcy1sb2FkaW5nPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|