@libs-ui/services-diagram-draw 0.2.356-37
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/README.md +279 -0
- package/canvas.service.d.ts +42 -0
- package/diagram-draw.service.d.ts +91 -0
- package/direction.service.d.ts +43 -0
- package/esm2022/canvas.service.mjs +628 -0
- package/esm2022/diagram-draw.service.mjs +711 -0
- package/esm2022/direction.service.mjs +255 -0
- package/esm2022/index.mjs +6 -0
- package/esm2022/interfaces/canvas.interface.mjs +2 -0
- package/esm2022/interfaces/coordinates.interface.mjs +2 -0
- package/esm2022/interfaces/diagram.interface.mjs +2 -0
- package/esm2022/libs-ui-services-diagram-draw.mjs +5 -0
- package/esm2022/utils/calculator-branch.util.mjs +187 -0
- package/esm2022/utils/calculator-element.util.mjs +335 -0
- package/esm2022/utils/canvas.util.mjs +176 -0
- package/esm2022/utils/diagram.util.mjs +54 -0
- package/esm2022/utils/direction.util.mjs +103 -0
- package/esm2022/utils/horizontal/calculator-branch.util.mjs +243 -0
- package/esm2022/utils/horizontal/calculator-coordinates.util.mjs +315 -0
- package/fesm2022/libs-ui-services-diagram-draw.mjs +2982 -0
- package/fesm2022/libs-ui-services-diagram-draw.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/interfaces/canvas.interface.d.ts +21 -0
- package/interfaces/coordinates.interface.d.ts +40 -0
- package/interfaces/diagram.interface.d.ts +109 -0
- package/package.json +27 -0
- package/utils/calculator-branch.util.d.ts +16 -0
- package/utils/calculator-element.util.d.ts +24 -0
- package/utils/canvas.util.d.ts +21 -0
- package/utils/diagram.util.d.ts +6 -0
- package/utils/direction.util.d.ts +6 -0
- package/utils/horizontal/calculator-branch.util.d.ts +67 -0
- package/utils/horizontal/calculator-coordinates.util.d.ts +42 -0
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { inject, Injectable } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { LibsUiDiagramDrawCanvasService } from './canvas.service';
|
|
4
|
+
import { canvasConfigReadonly } from './diagram-draw.service';
|
|
5
|
+
import { findAndDeleteElementFromContainer, getDefaultConfigConstituentBranches, LibsUiDiagramDrawCanvasUtil } from './utils/canvas.util';
|
|
6
|
+
import { buildFlatElement } from './utils/diagram.util';
|
|
7
|
+
import { buildElementDirectionTo, collectNextChainElements } from './utils/direction.util';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export class LibsUiDiagramDrawDirectionService {
|
|
10
|
+
elementDirection;
|
|
11
|
+
branchDirection;
|
|
12
|
+
elementViewDirectionId;
|
|
13
|
+
onViewDirection = new Subject();
|
|
14
|
+
canvasService = inject(LibsUiDiagramDrawCanvasService);
|
|
15
|
+
set ElementDirection(element) {
|
|
16
|
+
this.elementDirection = element;
|
|
17
|
+
}
|
|
18
|
+
get ElementDirection() {
|
|
19
|
+
return this.elementDirection;
|
|
20
|
+
}
|
|
21
|
+
set BranchDirection(branch) {
|
|
22
|
+
this.branchDirection = branch;
|
|
23
|
+
}
|
|
24
|
+
get BranchDirection() {
|
|
25
|
+
return this.branchDirection;
|
|
26
|
+
}
|
|
27
|
+
set ElementViewDirectionId(id) {
|
|
28
|
+
this.elementViewDirectionId = id;
|
|
29
|
+
}
|
|
30
|
+
get ElementViewDirectionId() {
|
|
31
|
+
return this.elementViewDirectionId;
|
|
32
|
+
}
|
|
33
|
+
get OnViewDirection() {
|
|
34
|
+
return this.onViewDirection;
|
|
35
|
+
}
|
|
36
|
+
checkRuleDirectionToElement(element, elementConnectTo) {
|
|
37
|
+
const ruleAfterItemDrag = this.canvasService.RuleConnectableElements.find((item) => elementConnectTo && item.elementCode === elementConnectTo.code);
|
|
38
|
+
if (!ruleAfterItemDrag) {
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (ruleAfterItemDrag.elementCodeConnectableBefore.find((code) => code === element?.code)) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
buildElementConnectTo(element, flatElements, branch, checkRule) {
|
|
47
|
+
const checkRuleDirectionToElement = checkRule ?? this.checkRuleDirectionToElement.bind(this);
|
|
48
|
+
return buildElementDirectionTo(element, flatElements, checkRuleDirectionToElement, branch);
|
|
49
|
+
}
|
|
50
|
+
/**Xóa các element nằm phía sau khi nhánh được điều hướng */
|
|
51
|
+
deleteElementsBehindBranchConnectTo(branch) {
|
|
52
|
+
const flatElements = this.canvasService.FlatElements ?? [];
|
|
53
|
+
const flatElementInElementCurrent = [];
|
|
54
|
+
const listElementDelete = [];
|
|
55
|
+
buildFlatElement(branch.elements, flatElementInElementCurrent);
|
|
56
|
+
listElementDelete.push(...flatElementInElementCurrent);
|
|
57
|
+
this.deleteLineConnectFromElement(listElementDelete, flatElements);
|
|
58
|
+
listElementDelete.forEach((elementDelete) => {
|
|
59
|
+
findAndDeleteElementFromContainer(this.canvasService.Elements, elementDelete);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/**xóa line đến và xóa line đi ở toàn bộ các khối và nhánh bị xóa */
|
|
63
|
+
deleteLineConnectFromElement(elements, flatElements) {
|
|
64
|
+
elements.forEach((item) => {
|
|
65
|
+
if (item.branches && item.branches.length) {
|
|
66
|
+
item.branches.forEach((branch) => {
|
|
67
|
+
if (branch.next_other_id && branch.next_other_id.length) {
|
|
68
|
+
this.deletePreOtherId(item.id ?? '', branch.next_other_id, flatElements);
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
if (item.next_other_id && item.next_other_id.length) {
|
|
73
|
+
this.deletePreOtherId(item.id ?? '', item.next_other_id, flatElements);
|
|
74
|
+
}
|
|
75
|
+
if (item.pre_other_id && item.pre_other_id.length) {
|
|
76
|
+
// nhánh chỉ lưu id next đi thôi chứ không lưu được pre => chỉ cần xóa pre trong khối.
|
|
77
|
+
this.deleteNextOtherId(item.id ?? '', item.pre_other_id, flatElements);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
/** Xóa pre_other_id từ khác khối mà khối bị xóa nối đến BlockDelete => Other*/
|
|
82
|
+
deletePreOtherId(itemId, nextOtherId, flatElements) {
|
|
83
|
+
nextOtherId.forEach((nextToId) => {
|
|
84
|
+
const nextElement = flatElements.find((item) => item.id === nextToId);
|
|
85
|
+
if (!nextElement || !nextElement.pre_other_id || !nextElement.pre_other_id.length) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const indexIdPre = nextElement.pre_other_id.findIndex((id) => id === itemId);
|
|
89
|
+
if (indexIdPre !== -1) {
|
|
90
|
+
nextElement.pre_other_id.splice(indexIdPre, 1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
/** Xóa next_other_id từ khác khối nối đến khối bị xóa Other => BlockDelete và kiểm tra + thêm khối thoát cho những khối nối tới BlockDelete*/
|
|
95
|
+
deleteNextOtherId(itemId, preOtherId, flatElements) {
|
|
96
|
+
preOtherId.forEach((nextToId) => {
|
|
97
|
+
const preElement = flatElements.find((item) => item.id === nextToId);
|
|
98
|
+
if (!preElement) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
if (preElement.element_type === canvasConfigReadonly().TYPE_ELEMENT_WORKFLOW) {
|
|
102
|
+
preElement.branches?.forEach((branch) => {
|
|
103
|
+
if (!branch.next_other_id || !branch.next_other_id.length) {
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const indexIdNextInBranch = branch.next_other_id.findIndex((id) => id === itemId);
|
|
107
|
+
if (indexIdNextInBranch !== -1) {
|
|
108
|
+
branch.next_other_id.splice(indexIdNextInBranch, 1);
|
|
109
|
+
}
|
|
110
|
+
if (!branch.next_other_id || !branch.next_other_id.length) {
|
|
111
|
+
branch.nodeOtherConfig = undefined;
|
|
112
|
+
this.canvasService.addElementExitWhenDeleteDirectionLine(preElement, branch);
|
|
113
|
+
}
|
|
114
|
+
});
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!preElement.next_other_id || !preElement.next_other_id.length) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const indexIdNext = preElement.next_other_id.findIndex((id) => id === itemId);
|
|
121
|
+
if (indexIdNext !== -1) {
|
|
122
|
+
preElement.next_other_id.splice(indexIdNext, 1);
|
|
123
|
+
}
|
|
124
|
+
if (!preElement.next_other_id || !preElement.next_other_id.length) {
|
|
125
|
+
// thêm khối thoát vì không còn khối nào connect tới nó
|
|
126
|
+
if (preElement.element_type === canvasConfigReadonly().TYPE_ELEMENT_WORKFLOW) {
|
|
127
|
+
const getConfigDefaultBranches = this.canvasService.HandlerFunction?.getConfigDefaultBranches ?? getDefaultConfigConstituentBranches;
|
|
128
|
+
getConfigDefaultBranches(preElement.code ?? '', preElement);
|
|
129
|
+
}
|
|
130
|
+
const branch = LibsUiDiagramDrawCanvasUtil.getBranchOfElement(preElement.id ?? '', flatElements, canvasConfigReadonly().TYPE_ELEMENT_WORKFLOW);
|
|
131
|
+
this.canvasService.addElementExitWhenDeleteDirectionLine(preElement, branch);
|
|
132
|
+
preElement.subCodeOfElement = undefined;
|
|
133
|
+
preElement.attributeSvgD = undefined;
|
|
134
|
+
preElement.position_end = undefined;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
addBranchDirection(targetId, element, branch, flatElements) {
|
|
139
|
+
if (!branch.next_other_id) {
|
|
140
|
+
branch.next_other_id = [];
|
|
141
|
+
}
|
|
142
|
+
branch.next_other_id.push(targetId);
|
|
143
|
+
const elementTo = flatElements.find((item) => item.id === targetId);
|
|
144
|
+
if (elementTo) {
|
|
145
|
+
if (!elementTo.pre_other_id) {
|
|
146
|
+
elementTo.pre_other_id = [];
|
|
147
|
+
}
|
|
148
|
+
elementTo.pre_other_id.push(element.id ?? '');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
addElementDirection(targetId, element, flatElements) {
|
|
152
|
+
if (!element.next_other_id) {
|
|
153
|
+
element.next_other_id = [];
|
|
154
|
+
}
|
|
155
|
+
element.next_other_id.push(targetId);
|
|
156
|
+
const elementTo = flatElements.find((item) => item.id === targetId);
|
|
157
|
+
if (elementTo) {
|
|
158
|
+
if (!elementTo.pre_other_id) {
|
|
159
|
+
elementTo.pre_other_id = [];
|
|
160
|
+
}
|
|
161
|
+
elementTo.pre_other_id.push(element.id ?? '');
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
deleteElementsBehindElementConnectTo(element, flatElements) {
|
|
165
|
+
const listElementDelete = [];
|
|
166
|
+
let flatElementInElementCurrent = [];
|
|
167
|
+
if (element.branches && element.branches.length) {
|
|
168
|
+
buildFlatElement([element], flatElementInElementCurrent);
|
|
169
|
+
flatElementInElementCurrent = flatElementInElementCurrent.filter((item) => item.id !== element.id);
|
|
170
|
+
}
|
|
171
|
+
delete element.branches;
|
|
172
|
+
listElementDelete.push(...flatElementInElementCurrent);
|
|
173
|
+
collectNextChainElements(element, flatElements, listElementDelete);
|
|
174
|
+
this.deleteLineConnectFromElement(listElementDelete, flatElements);
|
|
175
|
+
listElementDelete.forEach((elementDelete) => {
|
|
176
|
+
this.findAndDeleteElementFromContainer(this.canvasService.Elements, elementDelete);
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
findAndDeleteElementFromContainer(containerElement, elementDelete) {
|
|
180
|
+
for (const index in containerElement) {
|
|
181
|
+
const elementOfIndex = containerElement[index];
|
|
182
|
+
if (elementOfIndex.id === elementDelete.id) {
|
|
183
|
+
containerElement.splice(+index, 1);
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
if (!elementOfIndex.branches || !elementOfIndex.branches.length) {
|
|
187
|
+
continue;
|
|
188
|
+
}
|
|
189
|
+
for (const branch of elementOfIndex.branches) {
|
|
190
|
+
if (!branch.elements || !branch.elements.length) {
|
|
191
|
+
continue;
|
|
192
|
+
}
|
|
193
|
+
if (this.findAndDeleteElementFromContainer(branch.elements, elementDelete)) {
|
|
194
|
+
return true;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
editDirection(flatElements, targetId, element, branch) {
|
|
201
|
+
if (element.element_type === canvasConfigReadonly().TYPE_ELEMENT_WORKFLOW && branch) {
|
|
202
|
+
this.editDirectionWithBranch(flatElements, branch, targetId, element);
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
const idOldNextTo = element.next_other_id?.[0];
|
|
206
|
+
const elementOldTo = flatElements?.find((item) => item.id === idOldNextTo);
|
|
207
|
+
// xóa line cũ
|
|
208
|
+
if (elementOldTo && elementOldTo.pre_other_id) {
|
|
209
|
+
const itemIndex = elementOldTo.pre_other_id?.findIndex((id) => id === element.id);
|
|
210
|
+
if (itemIndex !== -1) {
|
|
211
|
+
elementOldTo.pre_other_id?.splice(itemIndex, 1);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
element.attributeSvgD = undefined;
|
|
215
|
+
element.position_end = undefined;
|
|
216
|
+
// update line mới
|
|
217
|
+
const elementNewTo = flatElements?.find((item) => item.id === targetId);
|
|
218
|
+
if (elementNewTo) {
|
|
219
|
+
if (!elementNewTo.pre_other_id) {
|
|
220
|
+
elementNewTo.pre_other_id = [];
|
|
221
|
+
}
|
|
222
|
+
elementNewTo.pre_other_id.push(element.id ?? '');
|
|
223
|
+
}
|
|
224
|
+
element.next_other_id = [];
|
|
225
|
+
element.next_other_id.push(targetId);
|
|
226
|
+
}
|
|
227
|
+
editDirectionWithBranch(flatElements, branch, targetId, element) {
|
|
228
|
+
const idOldNextTo = branch.next_other_id?.[0];
|
|
229
|
+
const elementOldTo = flatElements?.find((item) => item.id === idOldNextTo);
|
|
230
|
+
// xóa line cũ
|
|
231
|
+
if (elementOldTo && elementOldTo.pre_other_id) {
|
|
232
|
+
const itemIndex = elementOldTo.pre_other_id?.findIndex((id) => id === element.id);
|
|
233
|
+
if (itemIndex !== -1) {
|
|
234
|
+
elementOldTo.pre_other_id?.splice(itemIndex, 1);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
// update line mới
|
|
238
|
+
const elementNewTo = flatElements?.find((item) => item.id === targetId);
|
|
239
|
+
if (elementNewTo) {
|
|
240
|
+
if (!elementNewTo.pre_other_id) {
|
|
241
|
+
elementNewTo.pre_other_id = [];
|
|
242
|
+
}
|
|
243
|
+
elementNewTo.pre_other_id.push(element.id ?? '');
|
|
244
|
+
}
|
|
245
|
+
branch.next_other_id = [];
|
|
246
|
+
branch.next_other_id.push(targetId);
|
|
247
|
+
}
|
|
248
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDiagramDrawDirectionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
249
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDiagramDrawDirectionService, providedIn: 'root' });
|
|
250
|
+
}
|
|
251
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LibsUiDiagramDrawDirectionService, decorators: [{
|
|
252
|
+
type: Injectable,
|
|
253
|
+
args: [{ providedIn: 'root' }]
|
|
254
|
+
}] });
|
|
255
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvZGlyZWN0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUU5RCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsbUNBQW1DLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFHM0YsTUFBTSxPQUFPLGlDQUFpQztJQUNwQyxnQkFBZ0IsQ0FBOEI7SUFDOUMsZUFBZSxDQUErRDtJQUM5RSxzQkFBc0IsQ0FBcUI7SUFDM0MsZUFBZSxHQUE0QixJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRXpELGFBQWEsR0FBRyxNQUFNLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUUvRCxJQUFXLGdCQUFnQixDQUFDLE9BQW9DO1FBQzlELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQVcsZ0JBQWdCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQy9CLENBQUM7SUFFRCxJQUFXLGVBQWUsQ0FBQyxNQUFvRTtRQUM3RixJQUFJLENBQUMsZUFBZSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxDQUFDO0lBRUQsSUFBVyxl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QyxDQUFDO0lBQ3RDLENBQUM7d0dBclNVLGlDQUFpQzs0R0FBakMsaUNBQWlDLGNBRHBCLE1BQU07OzRGQUNuQixpQ0FBaUM7a0JBRDdDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1NlcnZpY2UgfSBmcm9tICcuL2NhbnZhcy5zZXJ2aWNlJztcbmltcG9ydCB7IGNhbnZhc0NvbmZpZ1JlYWRvbmx5IH0gZnJvbSAnLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4vaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBmaW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIsIGdldERlZmF1bHRDb25maWdDb25zdGl0dWVudEJyYW5jaGVzLCBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwgfSBmcm9tICcuL3V0aWxzL2NhbnZhcy51dGlsJztcbmltcG9ydCB7IGJ1aWxkRmxhdEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2RpYWdyYW0udXRpbCc7XG5pbXBvcnQgeyBidWlsZEVsZW1lbnREaXJlY3Rpb25UbywgY29sbGVjdE5leHRDaGFpbkVsZW1lbnRzIH0gZnJvbSAnLi91dGlscy9kaXJlY3Rpb24udXRpbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgTGlic1VpRGlhZ3JhbURyYXdEaXJlY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBlbGVtZW50RGlyZWN0aW9uOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgYnJhbmNoRGlyZWN0aW9uOiB7IGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoOyBpbmRleDogbnVtYmVyIH0gfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgZWxlbWVudFZpZXdEaXJlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIG9uVmlld0RpcmVjdGlvbjogU3ViamVjdDx7IGlkOiBzdHJpbmcgfT4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIHByaXZhdGUgY2FudmFzU2VydmljZSA9IGluamVjdChMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1NlcnZpY2UpO1xuXG4gIHB1YmxpYyBzZXQgRWxlbWVudERpcmVjdGlvbihlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVsZW1lbnREaXJlY3Rpb24gPSBlbGVtZW50O1xuICB9XG5cbiAgcHVibGljIGdldCBFbGVtZW50RGlyZWN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnREaXJlY3Rpb247XG4gIH1cblxuICBwdWJsaWMgc2V0IEJyYW5jaERpcmVjdGlvbihicmFuY2g6IHsgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IGluZGV4OiBudW1iZXIgfSB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuYnJhbmNoRGlyZWN0aW9uID0gYnJhbmNoO1xuICB9XG5cbiAgcHVibGljIGdldCBCcmFuY2hEaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYnJhbmNoRGlyZWN0aW9uO1xuICB9XG5cbiAgcHVibGljIHNldCBFbGVtZW50Vmlld0RpcmVjdGlvbklkKGlkOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLmVsZW1lbnRWaWV3RGlyZWN0aW9uSWQgPSBpZDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgRWxlbWVudFZpZXdEaXJlY3Rpb25JZCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbGVtZW50Vmlld0RpcmVjdGlvbklkO1xuICB9XG5cbiAgcHVibGljIGdldCBPblZpZXdEaXJlY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMub25WaWV3RGlyZWN0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja1J1bGVEaXJlY3Rpb25Ub0VsZW1lbnQoZWxlbWVudDogSURpYWdyYW1FbGVtZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50Q29ubmVjdFRvOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBydWxlQWZ0ZXJJdGVtRHJhZyA9IHRoaXMuY2FudmFzU2VydmljZS5SdWxlQ29ubmVjdGFibGVFbGVtZW50cy5maW5kKChpdGVtKSA9PiBlbGVtZW50Q29ubmVjdFRvICYmIGl0ZW0uZWxlbWVudENvZGUgPT09IGVsZW1lbnRDb25uZWN0VG8uY29kZSk7XG5cbiAgICBpZiAoIXJ1bGVBZnRlckl0ZW1EcmFnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocnVsZUFmdGVySXRlbURyYWcuZWxlbWVudENvZGVDb25uZWN0YWJsZUJlZm9yZS5maW5kKChjb2RlKSA9PiBjb2RlID09PSBlbGVtZW50Py5jb2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgYnVpbGRFbGVtZW50Q29ubmVjdFRvKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzOiBJRGlhZ3JhbUVsZW1lbnRbXSwgYnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjaGVja1J1bGU/OiAoZWxlbWVudDogSURpYWdyYW1FbGVtZW50IHwgdW5kZWZpbmVkLCBlbGVtZW50Q29ubmVjdFRvOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQpID0+IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjaGVja1J1bGVEaXJlY3Rpb25Ub0VsZW1lbnQgPSBjaGVja1J1bGUgPz8gdGhpcy5jaGVja1J1bGVEaXJlY3Rpb25Ub0VsZW1lbnQuYmluZCh0aGlzKTtcbiAgICByZXR1cm4gYnVpbGRFbGVtZW50RGlyZWN0aW9uVG8oZWxlbWVudCwgZmxhdEVsZW1lbnRzLCBjaGVja1J1bGVEaXJlY3Rpb25Ub0VsZW1lbnQsIGJyYW5jaCk7XG4gIH1cblxuICAvKipYw7NhIGPDoWMgZWxlbWVudCBu4bqxbSBwaMOtYSBzYXUga2hpIG5ow6FuaCDEkcaw4bujYyDEkWnhu4F1IGjGsOG7m25nICovXG4gIHB1YmxpYyBkZWxldGVFbGVtZW50c0JlaGluZEJyYW5jaENvbm5lY3RUbyhicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCkge1xuICAgIGNvbnN0IGZsYXRFbGVtZW50cyA9IHRoaXMuY2FudmFzU2VydmljZS5GbGF0RWxlbWVudHMgPz8gW107XG4gICAgY29uc3QgZmxhdEVsZW1lbnRJbkVsZW1lbnRDdXJyZW50OiBJRGlhZ3JhbUVsZW1lbnRbXSA9IFtdO1xuICAgIGNvbnN0IGxpc3RFbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnRbXSA9IFtdO1xuXG4gICAgYnVpbGRGbGF0RWxlbWVudChicmFuY2guZWxlbWVudHMsIGZsYXRFbGVtZW50SW5FbGVtZW50Q3VycmVudCk7XG4gICAgbGlzdEVsZW1lbnREZWxldGUucHVzaCguLi5mbGF0RWxlbWVudEluRWxlbWVudEN1cnJlbnQpO1xuXG4gICAgdGhpcy5kZWxldGVMaW5lQ29ubmVjdEZyb21FbGVtZW50KGxpc3RFbGVtZW50RGVsZXRlLCBmbGF0RWxlbWVudHMpO1xuICAgIGxpc3RFbGVtZW50RGVsZXRlLmZvckVhY2goKGVsZW1lbnREZWxldGUpID0+IHtcbiAgICAgIGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcih0aGlzLmNhbnZhc1NlcnZpY2UuRWxlbWVudHMgYXMgQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZWxlbWVudERlbGV0ZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKip4w7NhIGxpbmUgxJHhur9uIHbDoCB4w7NhIGxpbmUgxJFpIOG7nyB0b8OgbiBi4buZIGPDoWMga2jhu5FpIHbDoCBuaMOhbmggYuG7iyB4w7NhICovXG4gIHByaXZhdGUgZGVsZXRlTGluZUNvbm5lY3RGcm9tRWxlbWVudChlbGVtZW50czogSURpYWdyYW1FbGVtZW50W10sIGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICBlbGVtZW50cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpZiAoaXRlbS5icmFuY2hlcyAmJiBpdGVtLmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICBpdGVtLmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICAgIGlmIChicmFuY2gubmV4dF9vdGhlcl9pZCAmJiBicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUHJlT3RoZXJJZChpdGVtLmlkID8/ICcnLCBicmFuY2gubmV4dF9vdGhlcl9pZCwgZmxhdEVsZW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGl0ZW0ubmV4dF9vdGhlcl9pZCAmJiBpdGVtLm5leHRfb3RoZXJfaWQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZGVsZXRlUHJlT3RoZXJJZChpdGVtLmlkID8/ICcnLCBpdGVtLm5leHRfb3RoZXJfaWQsIGZsYXRFbGVtZW50cyk7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbS5wcmVfb3RoZXJfaWQgJiYgaXRlbS5wcmVfb3RoZXJfaWQubGVuZ3RoKSB7XG4gICAgICAgIC8vIG5ow6FuaCBjaOG7iSBsxrB1IGlkIG5leHQgxJFpIHRow7RpIGNo4bupIGtow7RuZyBsxrB1IMSRxrDhu6NjIHByZSA9PiBjaOG7iSBj4bqnbiB4w7NhIHByZSB0cm9uZyBraOG7kWkuXG4gICAgICAgIHRoaXMuZGVsZXRlTmV4dE90aGVySWQoaXRlbS5pZCA/PyAnJywgaXRlbS5wcmVfb3RoZXJfaWQsIGZsYXRFbGVtZW50cyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogWMOzYSBwcmVfb3RoZXJfaWQgdOG7qyBraMOhYyBraOG7kWkgbcOgIGto4buRaSBi4buLIHjDs2EgbuG7kWkgxJHhur9uIEJsb2NrRGVsZXRlID0+IE90aGVyKi9cbiAgcHJpdmF0ZSBkZWxldGVQcmVPdGhlcklkKGl0ZW1JZDogc3RyaW5nLCBuZXh0T3RoZXJJZDogQXJyYXk8c3RyaW5nPiwgZmxhdEVsZW1lbnRzOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIG5leHRPdGhlcklkLmZvckVhY2goKG5leHRUb0lkKSA9PiB7XG4gICAgICBjb25zdCBuZXh0RWxlbWVudCA9IGZsYXRFbGVtZW50cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBuZXh0VG9JZCk7XG5cbiAgICAgIGlmICghbmV4dEVsZW1lbnQgfHwgIW5leHRFbGVtZW50LnByZV9vdGhlcl9pZCB8fCAhbmV4dEVsZW1lbnQucHJlX290aGVyX2lkLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleElkUHJlID0gbmV4dEVsZW1lbnQucHJlX290aGVyX2lkLmZpbmRJbmRleCgoaWQpID0+IGlkID09PSBpdGVtSWQpO1xuXG4gICAgICBpZiAoaW5kZXhJZFByZSAhPT0gLTEpIHtcbiAgICAgICAgbmV4dEVsZW1lbnQucHJlX290aGVyX2lkLnNwbGljZShpbmRleElkUHJlLCAxKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBYw7NhIG5leHRfb3RoZXJfaWQgdOG7qyBraMOhYyBraOG7kWkgbuG7kWkgxJHhur9uIGto4buRaSBi4buLIHjDs2EgT3RoZXIgPT4gQmxvY2tEZWxldGUgdsOgIGtp4buDbSB0cmEgKyB0aMOqbSBraOG7kWkgdGhvw6F0IGNobyBuaOG7r25nIGto4buRaSBu4buRaSB04bubaSBCbG9ja0RlbGV0ZSovXG4gIHByaXZhdGUgZGVsZXRlTmV4dE90aGVySWQoaXRlbUlkOiBzdHJpbmcsIHByZU90aGVySWQ6IEFycmF5PHN0cmluZz4sIGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICBwcmVPdGhlcklkLmZvckVhY2goKG5leHRUb0lkKSA9PiB7XG4gICAgICBjb25zdCBwcmVFbGVtZW50ID0gZmxhdEVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IG5leHRUb0lkKTtcblxuICAgICAgaWYgKCFwcmVFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZUVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVykge1xuICAgICAgICBwcmVFbGVtZW50LmJyYW5jaGVzPy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkIHx8ICFicmFuY2gubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaW5kZXhJZE5leHRJbkJyYW5jaCA9IGJyYW5jaC5uZXh0X290aGVyX2lkLmZpbmRJbmRleCgoaWQpID0+IGlkID09PSBpdGVtSWQpO1xuXG4gICAgICAgICAgaWYgKGluZGV4SWROZXh0SW5CcmFuY2ggIT09IC0xKSB7XG4gICAgICAgICAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5zcGxpY2UoaW5kZXhJZE5leHRJbkJyYW5jaCwgMSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKCFicmFuY2gubmV4dF9vdGhlcl9pZCB8fCAhYnJhbmNoLm5leHRfb3RoZXJfaWQubGVuZ3RoKSB7XG4gICAgICAgICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNTZXJ2aWNlLmFkZEVsZW1lbnRFeGl0V2hlbkRlbGV0ZURpcmVjdGlvbkxpbmUocHJlRWxlbWVudCwgYnJhbmNoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFwcmVFbGVtZW50Lm5leHRfb3RoZXJfaWQgfHwgIXByZUVsZW1lbnQubmV4dF9vdGhlcl9pZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5kZXhJZE5leHQgPSBwcmVFbGVtZW50Lm5leHRfb3RoZXJfaWQuZmluZEluZGV4KChpZCkgPT4gaWQgPT09IGl0ZW1JZCk7XG5cbiAgICAgIGlmIChpbmRleElkTmV4dCAhPT0gLTEpIHtcbiAgICAgICAgcHJlRWxlbWVudC5uZXh0X290aGVyX2lkLnNwbGljZShpbmRleElkTmV4dCwgMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghcHJlRWxlbWVudC5uZXh0X290aGVyX2lkIHx8ICFwcmVFbGVtZW50Lm5leHRfb3RoZXJfaWQubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRow6ptIGto4buRaSB0aG/DoXQgdsOsIGtow7RuZyBjw7JuIGto4buRaSBuw6BvIGNvbm5lY3QgdOG7m2kgbsOzXG4gICAgICAgIGlmIChwcmVFbGVtZW50LmVsZW1lbnRfdHlwZSA9PT0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5UWVBFX0VMRU1FTlRfV09SS0ZMT1cpIHtcbiAgICAgICAgICBjb25zdCBnZXRDb25maWdEZWZhdWx0QnJhbmNoZXMgPSB0aGlzLmNhbnZhc1NlcnZpY2UuSGFuZGxlckZ1bmN0aW9uPy5nZXRDb25maWdEZWZhdWx0QnJhbmNoZXMgPz8gZ2V0RGVmYXVsdENvbmZpZ0NvbnN0aXR1ZW50QnJhbmNoZXM7XG4gICAgICAgICAgZ2V0Q29uZmlnRGVmYXVsdEJyYW5jaGVzKHByZUVsZW1lbnQuY29kZSA/PyAnJywgcHJlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnJhbmNoID0gTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmdldEJyYW5jaE9mRWxlbWVudChwcmVFbGVtZW50LmlkID8/ICcnLCBmbGF0RWxlbWVudHMsIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX1dPUktGTE9XKTtcblxuICAgICAgICB0aGlzLmNhbnZhc1NlcnZpY2UuYWRkRWxlbWVudEV4aXRXaGVuRGVsZXRlRGlyZWN0aW9uTGluZShwcmVFbGVtZW50LCBicmFuY2gpO1xuICAgICAgICBwcmVFbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHByZUVsZW1lbnQuYXR0cmlidXRlU3ZnRCA9IHVuZGVmaW5lZDtcbiAgICAgICAgcHJlRWxlbWVudC5wb3NpdGlvbl9lbmQgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQnJhbmNoRGlyZWN0aW9uKHRhcmdldElkOiBzdHJpbmcsIGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICBpZiAoIWJyYW5jaC5uZXh0X290aGVyX2lkKSB7XG4gICAgICBicmFuY2gubmV4dF9vdGhlcl9pZCA9IFtdO1xuICAgIH1cbiAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5wdXNoKHRhcmdldElkKTtcblxuICAgIGNvbnN0IGVsZW1lbnRUbyA9IGZsYXRFbGVtZW50cy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB0YXJnZXRJZCk7XG5cbiAgICBpZiAoZWxlbWVudFRvKSB7XG4gICAgICBpZiAoIWVsZW1lbnRUby5wcmVfb3RoZXJfaWQpIHtcbiAgICAgICAgZWxlbWVudFRvLnByZV9vdGhlcl9pZCA9IFtdO1xuICAgICAgfVxuICAgICAgZWxlbWVudFRvLnByZV9vdGhlcl9pZC5wdXNoKGVsZW1lbnQuaWQgPz8gJycpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRFbGVtZW50RGlyZWN0aW9uKHRhcmdldElkOiBzdHJpbmcsIGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIGlmICghZWxlbWVudC5uZXh0X290aGVyX2lkKSB7XG4gICAgICBlbGVtZW50Lm5leHRfb3RoZXJfaWQgPSBbXTtcbiAgICB9XG4gICAgZWxlbWVudC5uZXh0X290aGVyX2lkLnB1c2godGFyZ2V0SWQpO1xuXG4gICAgY29uc3QgZWxlbWVudFRvID0gZmxhdEVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRhcmdldElkKTtcblxuICAgIGlmIChlbGVtZW50VG8pIHtcbiAgICAgIGlmICghZWxlbWVudFRvLnByZV9vdGhlcl9pZCkge1xuICAgICAgICBlbGVtZW50VG8ucHJlX290aGVyX2lkID0gW107XG4gICAgICB9XG4gICAgICBlbGVtZW50VG8ucHJlX290aGVyX2lkLnB1c2goZWxlbWVudC5pZCA/PyAnJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGRlbGV0ZUVsZW1lbnRzQmVoaW5kRWxlbWVudENvbm5lY3RUbyhlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10pIHtcbiAgICBjb25zdCBsaXN0RWxlbWVudERlbGV0ZTogSURpYWdyYW1FbGVtZW50W10gPSBbXTtcbiAgICBsZXQgZmxhdEVsZW1lbnRJbkVsZW1lbnRDdXJyZW50OiBJRGlhZ3JhbUVsZW1lbnRbXSA9IFtdO1xuXG4gICAgaWYgKGVsZW1lbnQuYnJhbmNoZXMgJiYgZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgIGJ1aWxkRmxhdEVsZW1lbnQoW2VsZW1lbnRdLCBmbGF0RWxlbWVudEluRWxlbWVudEN1cnJlbnQpO1xuICAgICAgZmxhdEVsZW1lbnRJbkVsZW1lbnRDdXJyZW50ID0gZmxhdEVsZW1lbnRJbkVsZW1lbnRDdXJyZW50LmZpbHRlcigoaXRlbSkgPT4gaXRlbS5pZCAhPT0gZWxlbWVudC5pZCk7XG4gICAgfVxuICAgIGRlbGV0ZSBlbGVtZW50LmJyYW5jaGVzO1xuICAgIGxpc3RFbGVtZW50RGVsZXRlLnB1c2goLi4uZmxhdEVsZW1lbnRJbkVsZW1lbnRDdXJyZW50KTtcbiAgICBjb2xsZWN0TmV4dENoYWluRWxlbWVudHMoZWxlbWVudCwgZmxhdEVsZW1lbnRzLCBsaXN0RWxlbWVudERlbGV0ZSk7XG4gICAgdGhpcy5kZWxldGVMaW5lQ29ubmVjdEZyb21FbGVtZW50KGxpc3RFbGVtZW50RGVsZXRlLCBmbGF0RWxlbWVudHMpO1xuICAgIGxpc3RFbGVtZW50RGVsZXRlLmZvckVhY2goKGVsZW1lbnREZWxldGUpID0+IHtcbiAgICAgIHRoaXMuZmluZEFuZERlbGV0ZUVsZW1lbnRGcm9tQ29udGFpbmVyKHRoaXMuY2FudmFzU2VydmljZS5FbGVtZW50cyBhcyBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZmluZEFuZERlbGV0ZUVsZW1lbnRGcm9tQ29udGFpbmVyKGNvbnRhaW5lckVsZW1lbnQ6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGVsZW1lbnREZWxldGU6IElEaWFncmFtRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIGZvciAoY29uc3QgaW5kZXggaW4gY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgY29uc3QgZWxlbWVudE9mSW5kZXggPSBjb250YWluZXJFbGVtZW50W2luZGV4XTtcblxuICAgICAgaWYgKGVsZW1lbnRPZkluZGV4LmlkID09PSBlbGVtZW50RGVsZXRlLmlkKSB7XG4gICAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3BsaWNlKCtpbmRleCwgMSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoIWVsZW1lbnRPZkluZGV4LmJyYW5jaGVzIHx8ICFlbGVtZW50T2ZJbmRleC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGVsZW1lbnRPZkluZGV4LmJyYW5jaGVzKSB7XG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmluZEFuZERlbGV0ZUVsZW1lbnRGcm9tQ29udGFpbmVyKGJyYW5jaC5lbGVtZW50cywgZWxlbWVudERlbGV0ZSkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBlZGl0RGlyZWN0aW9uKGZsYXRFbGVtZW50czogSURpYWdyYW1FbGVtZW50W10sIHRhcmdldElkOiBzdHJpbmcsIGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgYnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoKSB7XG4gICAgaWYgKGVsZW1lbnQuZWxlbWVudF90eXBlID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9XT1JLRkxPVyAmJiBicmFuY2gpIHtcbiAgICAgIHRoaXMuZWRpdERpcmVjdGlvbldpdGhCcmFuY2goZmxhdEVsZW1lbnRzLCBicmFuY2gsIHRhcmdldElkLCBlbGVtZW50KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGlkT2xkTmV4dFRvID0gZWxlbWVudC5uZXh0X290aGVyX2lkPy5bMF07XG4gICAgY29uc3QgZWxlbWVudE9sZFRvID0gZmxhdEVsZW1lbnRzPy5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSBpZE9sZE5leHRUbyk7XG5cbiAgICAvLyB4w7NhIGxpbmUgY8WpXG4gICAgaWYgKGVsZW1lbnRPbGRUbyAmJiBlbGVtZW50T2xkVG8ucHJlX290aGVyX2lkKSB7XG4gICAgICBjb25zdCBpdGVtSW5kZXggPSBlbGVtZW50T2xkVG8ucHJlX290aGVyX2lkPy5maW5kSW5kZXgoKGlkKSA9PiBpZCA9PT0gZWxlbWVudC5pZCk7XG5cbiAgICAgIGlmIChpdGVtSW5kZXggIT09IC0xKSB7XG4gICAgICAgIGVsZW1lbnRPbGRUby5wcmVfb3RoZXJfaWQ/LnNwbGljZShpdGVtSW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50LmF0dHJpYnV0ZVN2Z0QgPSB1bmRlZmluZWQ7XG4gICAgZWxlbWVudC5wb3NpdGlvbl9lbmQgPSB1bmRlZmluZWQ7XG5cbiAgICAvLyB1cGRhdGUgbGluZSBt4bubaVxuICAgIGNvbnN0IGVsZW1lbnROZXdUbyA9IGZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGFyZ2V0SWQpO1xuXG4gICAgaWYgKGVsZW1lbnROZXdUbykge1xuICAgICAgaWYgKCFlbGVtZW50TmV3VG8ucHJlX290aGVyX2lkKSB7XG4gICAgICAgIGVsZW1lbnROZXdUby5wcmVfb3RoZXJfaWQgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnROZXdUby5wcmVfb3RoZXJfaWQucHVzaChlbGVtZW50LmlkID8/ICcnKTtcbiAgICB9XG4gICAgZWxlbWVudC5uZXh0X290aGVyX2lkID0gW107XG4gICAgZWxlbWVudC5uZXh0X290aGVyX2lkLnB1c2godGFyZ2V0SWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBlZGl0RGlyZWN0aW9uV2l0aEJyYW5jaChmbGF0RWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCwgdGFyZ2V0SWQ6IHN0cmluZywgZWxlbWVudDogSURpYWdyYW1FbGVtZW50KSB7XG4gICAgY29uc3QgaWRPbGROZXh0VG8gPSBicmFuY2gubmV4dF9vdGhlcl9pZD8uWzBdO1xuICAgIGNvbnN0IGVsZW1lbnRPbGRUbyA9IGZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gaWRPbGROZXh0VG8pO1xuXG4gICAgLy8geMOzYSBsaW5lIGPFqVxuICAgIGlmIChlbGVtZW50T2xkVG8gJiYgZWxlbWVudE9sZFRvLnByZV9vdGhlcl9pZCkge1xuICAgICAgY29uc3QgaXRlbUluZGV4ID0gZWxlbWVudE9sZFRvLnByZV9vdGhlcl9pZD8uZmluZEluZGV4KChpZCkgPT4gaWQgPT09IGVsZW1lbnQuaWQpO1xuXG4gICAgICBpZiAoaXRlbUluZGV4ICE9PSAtMSkge1xuICAgICAgICBlbGVtZW50T2xkVG8ucHJlX290aGVyX2lkPy5zcGxpY2UoaXRlbUluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyB1cGRhdGUgbGluZSBt4bubaVxuICAgIGNvbnN0IGVsZW1lbnROZXdUbyA9IGZsYXRFbGVtZW50cz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gdGFyZ2V0SWQpO1xuXG4gICAgaWYgKGVsZW1lbnROZXdUbykge1xuICAgICAgaWYgKCFlbGVtZW50TmV3VG8ucHJlX290aGVyX2lkKSB7XG4gICAgICAgIGVsZW1lbnROZXdUby5wcmVfb3RoZXJfaWQgPSBbXTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnROZXdUby5wcmVfb3RoZXJfaWQucHVzaChlbGVtZW50LmlkID8/ICcnKTtcbiAgICB9XG4gICAgYnJhbmNoLm5leHRfb3RoZXJfaWQgPSBbXTtcbiAgICBicmFuY2gubmV4dF9vdGhlcl9pZC5wdXNoKHRhcmdldElkKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export * from './canvas.service';
|
|
2
|
+
export * from './diagram-draw.service';
|
|
3
|
+
export * from './direction.service';
|
|
4
|
+
export * from './interfaces/canvas.interface';
|
|
5
|
+
export * from './interfaces/diagram.interface';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9jYW52YXMuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWdyYW0tZHJhdy5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcbiJdfQ==
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZGlhZ3JhbS1kcmF3L3NyYy9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElEaWFncmFtRWxlbWVudCwgSURpYWdyYW1FbGVtZW50QnJhbmNoIH0gZnJvbSAnLi9kaWFncmFtLmludGVyZmFjZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUJyYW5jaEVuZENvdW50IHtcbiAgYnJhbmNoQ29udGFpbmVyPzogSURpYWdyYW1FbGVtZW50QnJhbmNoO1xuICBjb3VudDogbnVtYmVyO1xuICBicmFuY2hFbXB0eTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElIYW5kbGVyRnVuY3Rpb24ge1xuICBnZXRDb25maWdEZWZhdWx0QnJhbmNoZXMoY29kZTogc3RyaW5nLCBkYXRhRGVmYXVsdDogSURpYWdyYW1FbGVtZW50KTogSURpYWdyYW1FbGVtZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElSdWxlQ29ubmVjdGFibGUge1xuICBlbGVtZW50Q29kZTogc3RyaW5nO1xuICBlbGVtZW50Q29kZUNvbm5lY3RhYmxlQmVmb3JlOiBBcnJheTxzdHJpbmc+O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIGtp4buDbSB0cmEgxJFp4buBdSBraeG7h24gxJHhu4MgaGnhu4NuIHRo4buLIGRyb3Agem9uZSB04bqhaSBt4buZdCBlbGVtZW50L2JyYW5jaC5cbiAqIFRy4bqjIHbhu4EgdHJ1ZSDihpIgaGnhu4NuIHRo4buLIFwiK1wiLCBmYWxzZSDihpIg4bqpbi5cbiAqIC0gYmVmb3JlRWxlbWVudERyYWc6IGVsZW1lbnQgdHLGsOG7m2MgZWxlbWVudCDEkWFuZyB4w6l0IMSR4buDIGhp4buDbiB0aOG7iyBkcm9wIHpvbmVcbiAqIC0gY3VycmVudEVsZW1lbnREcmFnOiBlbGVtZW50IMSRYW5nIHjDqXQgxJHhu4MgaGnhu4NuIHRo4buLIGRyb3Agem9uZVxuICogLSBhZnRlckVsZW1lbnREcmFnOiBlbGVtZW50IHNhdSBlbGVtZW50IMSRYW5nIHjDqXQgxJHhu4MgaGnhu4NuIHRo4buLIGRyb3Agem9uZVxuICovXG5leHBvcnQgdHlwZSBURHJvcFpvbmVDYW5Ecm9wRm4gPSAoYmVmb3JlRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgY3VycmVudEVsZW1lbnREcmFnOiBJRGlhZ3JhbUVsZW1lbnQgfCB1bmRlZmluZWQsIGFmdGVyRWxlbWVudERyYWc6IElEaWFncmFtRWxlbWVudCB8IHVuZGVmaW5lZCwgcnVsZUNvbm5lY3RhYmxlRWxlbWVudHM6IEFycmF5PElSdWxlQ29ubmVjdGFibGU+KSA9PiBib29sZWFuO1xuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29vcmRpbmF0ZXMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9kaWFncmFtLWRyYXcvc3JjL2ludGVyZmFjZXMvY29vcmRpbmF0ZXMuaW50ZXJmYWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElDb25maWdDb29yZGluYXRlc1BhcmFtIHtcbiAgRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UPzogbnVtYmVyO1xuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUPzogbnVtYmVyOyAvLyBraG/huqNuZyBjw6FjaCBnaeG7r2EgY8OhYyBraOG7kWlcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g/OiBudW1iZXI7IC8vIGtob+G6o25nIGPDoWNoIHThu6sga2jhu5FpIGPDsyBuaMOhbmggxJHhur9uIMSRxrDhu51uZyBy4bq9XG4gIEVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ/OiBudW1iZXI7IC8vIHThu5FpIHRoaeG7g3UgbMOgIDMyIG5ow6ksIGTGsOG7oWkgMzJweCBjaMawYSBzdXBwb3J0IGxpbmUgbmF2aWdhdGlvblxuICBERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ/OiBudW1iZXI7IC8vIMSR4buZIHLhu5luZyBj4bunYSBuaMOhbmgga2hpIGtow7RuZyBjw7MgZWxlbWVudCBuw6BvXG4gIEVMRU1FTlRfSEVJR0hUX0NVUlZFPzogbnVtYmVyOyAvLyBjaGnDqnUgY2FvIGPhu6dhIMSRxrDhu51uZyBjb25nXG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIX1RPX0VMRU1FTlRfRklSU1Q/OiBudW1iZXI7IC8vIGtob+G6o25nIGPDoWNoIHThu6sgbmjDoW5oIHLhur0gdOG7m2kga2jhu5FpIMSR4bqndSB0acOqblxuXG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9DT0xPUj86IHN0cmluZztcbiAgRUxFTUVOVF9TVkdfU1RST0tFX1dJRFRIPzogc3RyaW5nO1xuXG4gIERJU1RBTkNFX1RPX1dBSVQ/OiBudW1iZXI7IC8vIGtob+G6o25nIGPDoWNoIHThu6sga2jhu5FpIMSR4bq/biBj4bqldSBow6xuaCBjaOG7nVxuICBXQUlUX1RPX0VMRU1FTlQ/OiBudW1iZXI7IC8vIGtob+G6o25nIGPDoWNoIHThu6sgY+G6pXUgaMOsbmggY2jhu50gdOG7m2kgbm9kZSB0aeG6v3AgdGhlb1xuICBFTEVNRU5UX1dBSVRfREVGQVVMVD86IG51bWJlcjsgLy8gY2hp4buBdSBjYW8gbeG6t2MgxJHhu4tuaCBj4bunYSBj4bqldSBow6xuaCBjaOG7nSwgbuG6v3UgbsOzIGzDoCBk4bqhbmcgY2jhu50gYmFvIG5oacOqdSBwaMO6dCB0aMOsIHPhur0ga2jDoWNcbiAgRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU/OiBudW1iZXI7IC8vIGtob+G6o25nIGPDoWNoIHThu6sga2jhu5FpIMSR4bq/biBsaW5lIHRp4bq/cCB0aGVvLCBjw6FjaCByYSAxIMSRb+G6oW5cblxuICBUWVBFX0NPTlNUSVRVRU5UX09USEVSX0VYSVQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFEaWFncmFtQ29uZmlnU3ZnIHtcbiAgdXBkYXRlU1ZHPzogYm9vbGVhbjtcbiAgbW9kZT86ICdwcmV2aWV3JyB8ICdjb25maWcnO1xuICBwb3NpdGlvbk1heExlZnQ6IG51bWJlcjtcbiAgcG9zaXRpb25NYXhUb3A6IG51bWJlcjtcbiAgd2lkdGhIZWlnaHRTdmdDYW52YXM6IHsgaGVpZ2h0U3ZnOiBudW1iZXI7IHdpZHRoU3ZnOiBudW1iZXIgfTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGFEaWFncmFtU3ZnIHtcbiAgZWxlbWVudFN2Zz86IFNWR1BhdGhFbGVtZW50O1xuICBhdHRyaWJ1dGVTdmdEPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDb29yZGluYXRlc0RpYWdyYW1Tdmcge1xuICBteD86IG51bWJlcjtcbiAgbXk/OiBudW1iZXI7XG4gIHgxPzogbnVtYmVyO1xuICB5MT86IG51bWJlcjtcbiAgeD86IG51bWJlcjtcbiAgeT86IG51bWJlcjtcbiAgbHg/OiBudW1iZXI7XG4gIGx5PzogbnVtYmVyO1xufVxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiwgVHlwZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElEaWFncmFtRWxlbWVudCB7XG4gIC8vIGNvbmZpZyDEkeG7gyB24bq9IGRpYWdyYW1cbiAgY29kZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgYnJhbmNoZXM/OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnRCcmFuY2g+O1xuICBzcGVjaWZpY194PzogbnVtYmVyO1xuICBzcGVjaWZpY195PzogbnVtYmVyO1xuICBzcGVjaWZpY193aWR0aD86IG51bWJlcjtcbiAgc3BlY2lmaWNfaGVpZ2h0PzogbnVtYmVyO1xuICBlbGVtZW50U3ZnPzogU1ZHUGF0aEVsZW1lbnQ7XG4gIGF0dHJpYnV0ZVN2Z0Q/OiBzdHJpbmc7XG4gIG1heEhlaWdodEJyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kX2JyYW5jaD86IG51bWJlcjtcbiAgcG9zaXRpb25fZW5kPzogbnVtYmVyO1xuICB0cmFuc2xhdGVYPzogbnVtYmVyO1xuICB0cmFuc2xhdGVZPzogbnVtYmVyO1xuICBhdHRyaWJ1dGVTdmdEQ29ubmVjdFRvT3RoZXJFbGVtZW50PzogQXJyYXk8e1xuICAgIGVsZW1lbnRTdmc/OiBTVkdQYXRoRWxlbWVudDtcbiAgICBwYXRoOiBzdHJpbmc7XG4gIH0+O1xuICBwcmVfb3RoZXJfaWQ/OiBBcnJheTxzdHJpbmc+O1xuICBuZXh0X290aGVyX2lkPzogQXJyYXk8c3RyaW5nPjtcbiAgc3ViQ29kZU9mRWxlbWVudD86IHN0cmluZztcbiAgbmV4dF9pZD86IHN0cmluZztcbiAgbm9kZU90aGVyQ29uZmlnPzogSURpYWdyYW1FbGVtZW50O1xuICBkaXNhYmxlPzogYm9vbGVhbjtcblxuICAvLyBjb25maWcgY+G7p2EgZWxlbWVudCBj4bqnbiBjw7NcbiAgaWQ/OiBzdHJpbmc7XG4gIGVsZW1lbnRfdHlwZT86IHN0cmluZztcbiAgc3BlY2lmaWNfY291bnRlcl9jdXJyZW50X2NvZGU/OiBudW1iZXI7IC8vIGzGsHUgbOG6oWkgxJHhu4MgdMSDbmcgY2hvIGPDoWMga2jhu5FpIHRp4bq/cCB0aGVvIGtoaSBrw6lvIHbDoG87XG4gIHByZV9pZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gge1xuICBjb2RlPzogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZzsgLy8gTGFiZWwgaGnhu4NuIHRo4buLIHRyw6puIGJyYW5jaCAodmQ6IFwiMTAwIFByb2ZpbGVzXCIsIFwiQ8OybiBs4bqhaVwiKVxuICBsYWJlbEJnQ29sb3I/OiBzdHJpbmc7IC8vIEJhY2tncm91bmQgY29sb3IgY+G7p2EgbGFiZWwgKHZkOiBcIiNmM2Y0ZjZcIilcbiAgZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD47XG4gIGVsZW1lbnRTdmc/OiBTVkdQYXRoRWxlbWVudDtcbiAgYXR0cmlidXRlU3ZnRD86IHN0cmluZztcbiAgb25UaGVTaWRlPzogJ2Fib3ZlJyB8ICd1bmRlcicgfCAnY2VudGVyJztcbiAgcG9zaXRpb25NYXhMZWZ0PzogbnVtYmVyO1xuICBwb3NpdGlvbk1heFRvcD86IG51bWJlcjtcbiAgc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3g/OiBudW1iZXI7XG4gIHNwZWNpZmljX3N0YXJ0X2JyYW5jaF95PzogbnVtYmVyO1xuICB3aWR0aEJyYW5jaD86IHtcbiAgICB3aWR0aD86IG51bWJlcjtcbiAgICBhYm92ZT86IG51bWJlcjtcbiAgICB1bmRlcj86IG51bWJlcjtcbiAgfTtcbiAgbmV4dF9vdGhlcl9pZD86IEFycmF5PHN0cmluZz47XG4gIGlzRGlyZWN0aW9uPzogYm9vbGVhbjsgLy8gYmnhur9uIG7DoHkgZMO5bmcgc+G7rSBk4bulbmcgdOG6oW0gxJHhu4MgY2hlY2sgeGVtIG5ow6FuaCBjw7MgxJHGsOG7o2MgxJFp4buBdSBoxrDhu5tuZyBoYXkga2jDtG5nO1xuXG4gIG5vZGVPdGhlckNvbmZpZz86IElEaWFncmFtRWxlbWVudDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2FudmFzQ29uZmlnIHtcbiAgRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UOiBudW1iZXI7XG4gIEVMRU1FTlRfTUFSR0lOX0RFRkFVTFQ6IG51bWJlcjtcbiAgRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g6IG51bWJlcjtcbiAgRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDogbnVtYmVyO1xuICBERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ6IG51bWJlcjtcbiAgRUxFTUVOVF9IRUlHSFRfQ1VSVkU6IG51bWJlcjtcbiAgRUxFTUVOVF9TVkdfU1RST0tFX0NPTE9SOiBzdHJpbmc7XG4gIEVMRU1FTlRfU1ZHX1NUUk9LRV9XSURUSDogc3RyaW5nO1xuICBFTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUOiBudW1iZXI7XG5cbiAgLy8gY29uZmlnIG90aGVyIG5vZGVcbiAgRElTVEFOQ0VfVE9fV0FJVDogbnVtYmVyO1xuICBXQUlUX1RPX0VMRU1FTlQ6IG51bWJlcjtcbiAgRUxFTUVOVF9XQUlUX0RFRkFVTFQ6IG51bWJlcjtcbiAgRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU6IG51bWJlcjtcblxuICAvLyBjb25maWcgZWxlbWVudFxuICBUWVBFX0VMRU1FTlRfRVhJVDogc3RyaW5nO1xuICBUWVBFX0VMRU1FTlRfV09SS0ZMT1c6IHN0cmluZztcbiAgV0lEVEhfRUxFTUVOVF9ERUZBVUxUOiBudW1iZXI7XG4gIEhFSUdIVF9FTEVNRU5UX0RFRkFVTFQ6IG51bWJlcjtcblxuICBBRERfSUNPTl9ESUFNRVRFUjogbnVtYmVyO1xufVxuXG4vKipcbiAqIFN0eWxlIGNvbmZpZyBjaG8gaW5kaWNhdG9yIChuw7p0IFwiK1wiKSBj4bunYSBkcm9wIHpvbmUuXG4gKiBU4bqldCBj4bqjIGPDoWMgZmllbGQgxJHhu4F1IG9wdGlvbmFsIOKAkyBnacOhIHRy4buLIG7DoG8ga2jDtG5nIHRydXnhu4FuIHPhur0gZMO5bmcgbeG6t2MgxJHhu4tuaC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZSB7XG4gIGJvcmRlclJhZGl1cz86IHN0cmluZztcbiAgYmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBpY29uQ29sb3I/OiBzdHJpbmc7XG4gIG9wYWNpdHk/OiBudW1iZXI7XG4gIGhvdmVyQmFja2dyb3VuZENvbG9yPzogc3RyaW5nO1xuICBob3ZlckJvcmRlckNvbG9yPzogc3RyaW5nO1xuICBob3ZlckJvcmRlclN0eWxlPzogc3RyaW5nO1xuICBob3ZlckJvcmRlclJhZGl1cz86IG51bWJlcjtcblxuICAvKiogSMOgbSByZW5kZXIgKirEkeG7mW5nKiogbuG7mWkgZHVuZyBpbmRpY2F0b3Ig4bufIHRy4bqhbmcgdGjDoWkgYsOsbmggdGjGsOG7nW5nLiAqL1xuICByZW5kZXJJbmRpY2F0b3I/OiAoc2l6ZTogbnVtYmVyKSA9PiBzdHJpbmc7XG5cbiAgLyoqIEjDoG0gcmVuZGVyICoqxJHhu5luZyoqIG7hu5lpIGR1bmcgaW5kaWNhdG9yIOG7nyB0cuG6oW5nIHRow6FpIGhvdmVyL2RyYWctZW50ZXIuKi9cbiAgcmVuZGVySG92ZXJJbmRpY2F0b3I/OiAoKSA9PiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbmZpZyB7XG4gIHN0b3JlRGF0YURlZmluZTogSURpYWdyYW1TdG9yZURhdGE7XG4gIHN2Z0NvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICBub2Rlc0NvbnRhaW5lcj86IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuICB2aWV3Q29udGFpbmVyUmVmPzogVmlld0NvbnRhaW5lclJlZjtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbm9kZUNvbXBvbmVudFR5cGU/OiBUeXBlPGFueT47IC8vIENvbXBvbmVudCBjaG8gbWFpbiBub2Rlc1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBub2RlT3RoZXJDb25maWdDb21wb25lbnRUeXBlPzogVHlwZTxhbnk+OyAvLyBDb21wb25lbnQgY2hvIG5vZGVPdGhlckNvbmZpZ1xuICB1c2VWaXJ0dWFsaXphdGlvblRlbXBsYXRlPzogYm9vbGVhbjtcbiAgLyoqIFR14buzIGNo4buJbmggc3R5bGUgY2hvIGluZGljYXRvciAobsO6dCBcIitcIikgY+G7p2EgZHJvcCB6b25lICovXG4gIGRyb3Bab25lU3R5bGU/OiBJRHJvcFpvbmVJbmRpY2F0b3JTdHlsZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJRGlhZ3JhbVN0b3JlRGF0YSB7XG4gIHBvc2l0aW9uTWF4TGVmdDogbnVtYmVyO1xuICBwb3NpdGlvbk1heFRvcDogbnVtYmVyO1xuICB3aWR0aEhlaWdodFN2Z0NhbnZhczogeyBoZWlnaHRTdmc6IG51bWJlcjsgd2lkdGhTdmc6IG51bWJlciB9O1xufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlicy11aS1zZXJ2aWNlcy1kaWFncmFtLWRyYXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvbGlicy11aS1zZXJ2aWNlcy1kaWFncmFtLWRyYXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
import { canvasConfigReadonly } from '../diagram-draw.service';
|
|
2
|
+
import { checkMaxLeft, getDistanceFromBranchToFirstBlock, getHeightWaitConfig, MoLibDiagramCalculatorCoordinatesUtil } from './calculator-element.util';
|
|
3
|
+
export class MoLibDiagramCalculatorBranchUtil {
|
|
4
|
+
static drawStraightLine(left, lineFormElementToBranching, top, branch, maxHeightBranch, config) {
|
|
5
|
+
const startDraw = top + lineFormElementToBranching;
|
|
6
|
+
let Ly = startDraw;
|
|
7
|
+
Ly += canvasConfigReadonly().ELEMENT_HEIGHT_CURVE; // chiều dài đến element đầu tiên
|
|
8
|
+
Ly += getDistanceFromBranchToFirstBlock(branch.nodeOtherConfig); // chiều dài đến element đầu tiên
|
|
9
|
+
if (!branch.elements || !branch.elements.length) {
|
|
10
|
+
Ly += maxHeightBranch;
|
|
11
|
+
Ly += 20; // thêm đoạn nối từ điểm kết thúc nhánh đến hết
|
|
12
|
+
}
|
|
13
|
+
const coord1 = {
|
|
14
|
+
mx: left,
|
|
15
|
+
my: top,
|
|
16
|
+
ly: Ly,
|
|
17
|
+
lx: left,
|
|
18
|
+
};
|
|
19
|
+
branch.attributeSvgD = `M ${coord1.mx} ${coord1.my} L ${coord1.lx} ${coord1.ly}`;
|
|
20
|
+
if (branch.nodeOtherConfig) {
|
|
21
|
+
const endYToWait = startDraw + canvasConfigReadonly().ELEMENT_HEIGHT_CURVE + canvasConfigReadonly().DISTANCE_TO_WAIT;
|
|
22
|
+
branch.attributeSvgD = `M ${coord1.mx} ${coord1.my} L ${coord1.mx} ${endYToWait}`;
|
|
23
|
+
const waitHeight = getHeightWaitConfig(branch.nodeOtherConfig);
|
|
24
|
+
const topStartLine2 = endYToWait + waitHeight;
|
|
25
|
+
delete branch.nodeOtherConfig.attributeSvgD;
|
|
26
|
+
if (branch.elements && branch.elements.length) {
|
|
27
|
+
branch.nodeOtherConfig.attributeSvgD = `M ${coord1.mx} ${topStartLine2} L ${coord1.mx} ${coord1.ly}`;
|
|
28
|
+
}
|
|
29
|
+
branch.nodeOtherConfig.specific_y = endYToWait;
|
|
30
|
+
branch.nodeOtherConfig.specific_x = coord1.mx;
|
|
31
|
+
}
|
|
32
|
+
branch.specific_start_branch_y = top + lineFormElementToBranching + canvasConfigReadonly().ELEMENT_HEIGHT_CURVE;
|
|
33
|
+
branch.specific_start_branch_x = left;
|
|
34
|
+
if (!branch.elements || !branch.elements.length) {
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const heightToElement = canvasConfigReadonly().ELEMENT_HEIGHT_CURVE + getDistanceFromBranchToFirstBlock(branch.nodeOtherConfig); // chiều dài đến element đầu tiên;
|
|
38
|
+
branch.elements.forEach((elementBranch) => {
|
|
39
|
+
elementBranch.specific_y = top + lineFormElementToBranching + heightToElement;
|
|
40
|
+
elementBranch.specific_x = left - (elementBranch.specific_width ?? 0) / 2;
|
|
41
|
+
});
|
|
42
|
+
MoLibDiagramCalculatorCoordinatesUtil.setXYElements(branch.elements, config);
|
|
43
|
+
}
|
|
44
|
+
static leftLine(left, lineFormElementToBranching, top, lineBetweenBranch, branch, maxHeightBranch, element, config) {
|
|
45
|
+
const { coordQL2, isCheckAllElementConnectToExit } = this.drawAboveUnderLine(left, lineFormElementToBranching, top, lineBetweenBranch, branch, maxHeightBranch, 'left', config);
|
|
46
|
+
branch.specific_start_branch_x = coordQL2.x;
|
|
47
|
+
branch.specific_start_branch_y = coordQL2.y;
|
|
48
|
+
if (!branch.elements || !branch.elements.length) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.drawElementInBranchLine(branch, coordQL2, config);
|
|
52
|
+
if (isCheckAllElementConnectToExit) {
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static rightLine(left, lineFormElementToBranching, top, lineBetweenBranch, branch, maxHeightBranch, element, config) {
|
|
57
|
+
const { coordQL1, coordQL2, isCheckAllElementConnectToExit } = this.drawAboveUnderLine(left, lineFormElementToBranching, top, lineBetweenBranch, branch, maxHeightBranch, 'right', config);
|
|
58
|
+
branch.specific_start_branch_x = coordQL2.x;
|
|
59
|
+
branch.specific_start_branch_y = coordQL2.y;
|
|
60
|
+
const maxY = (coordQL1.y ?? 0) + 200;
|
|
61
|
+
const configSvg = config.widthHeightSvgCanvas;
|
|
62
|
+
configSvg.heightSvg = maxY > configSvg.heightSvg ? maxY : configSvg.heightSvg;
|
|
63
|
+
if (!branch.elements || !branch.elements.length) {
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.drawElementInBranchLine(branch, coordQL2, config);
|
|
67
|
+
if (isCheckAllElementConnectToExit) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
static drawElementInBranchLine(branch, coordQL2, config) {
|
|
72
|
+
const topElementInBranch = coordQL2.ly; // bắt đầu của 1 emelent trong nhánh sẽ là điểm cuối cùng của nhánh trỏ tới
|
|
73
|
+
const elementFirst = branch.elements[0];
|
|
74
|
+
elementFirst.specific_y = topElementInBranch;
|
|
75
|
+
elementFirst.specific_x = (coordQL2.lx ?? 0) - (elementFirst.specific_width ?? 0) / 2;
|
|
76
|
+
MoLibDiagramCalculatorCoordinatesUtil.setXYElements(branch.elements, config);
|
|
77
|
+
}
|
|
78
|
+
static drawMissingLineFromLastElement(branch, coordQ3) {
|
|
79
|
+
const { mx, my } = coordQ3;
|
|
80
|
+
if (!my) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const lastElementInBranch = branch.elements[branch.elements.length - 1];
|
|
84
|
+
if (!lastElementInBranch.branches?.length) {
|
|
85
|
+
branch.attributeSvgD = `${branch.attributeSvgD} M ${mx} ${my} L ${mx} ${lastElementInBranch.position_end ?? 0}`;
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
const ly = (lastElementInBranch.position_end_branch ?? 0) - canvasConfigReadonly().ELEMENT_HEIGHT_CURVE;
|
|
89
|
+
if (ly === my) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
branch.attributeSvgD = `${branch.attributeSvgD} M ${mx} ${my} L ${mx} ${ly}`;
|
|
93
|
+
}
|
|
94
|
+
static drawAboveUnderLine(left, lineFormElementToBranching, top, lineBetweenBranch, branch, maxHeightBranch, direction, config) {
|
|
95
|
+
const M = `M ${left} ${top}`; // đặt bút vẽ từ điểm x, y
|
|
96
|
+
const Ly = top + lineFormElementToBranching - canvasConfigReadonly().ELEMENT_HEIGHT_CURVE;
|
|
97
|
+
const L = `L ${left} ${Ly}`; // Kéo dài 1 đường thẳng tới X, Y,
|
|
98
|
+
const straightLineBetweenBranch = lineBetweenBranch - canvasConfigReadonly().ELEMENT_HEIGHT_CURVE * 2;
|
|
99
|
+
const coordQL1 = {
|
|
100
|
+
// điểm cong số 1 của nhánh và đường thẳng kéo trên dưới
|
|
101
|
+
mx: left,
|
|
102
|
+
my: Ly,
|
|
103
|
+
x1: left,
|
|
104
|
+
y1: Ly + canvasConfigReadonly().ELEMENT_HEIGHT_CURVE,
|
|
105
|
+
x: this.mathOperatorsCalculation(direction, left, canvasConfigReadonly().ELEMENT_HEIGHT_CURVE, true),
|
|
106
|
+
y: Ly + canvasConfigReadonly().ELEMENT_HEIGHT_CURVE,
|
|
107
|
+
};
|
|
108
|
+
coordQL1.ly = coordQL1.y;
|
|
109
|
+
// đoạn thẳng kéo dài lineBetweenBranch phải trừ đi hai đầu cong
|
|
110
|
+
coordQL1.lx = this.mathOperatorsCalculation(direction, coordQL1.x, straightLineBetweenBranch, true);
|
|
111
|
+
const QL1 = `M ${coordQL1.mx},${coordQL1.my} Q ${coordQL1.x1},${coordQL1.y1} ${coordQL1.x},${coordQL1.y} L ${coordQL1.lx} ${coordQL1.ly}`;
|
|
112
|
+
const coordQL2 = {
|
|
113
|
+
// điểm cong số 2 của nhánh và đường thẳng đứng
|
|
114
|
+
y1: coordQL1.ly,
|
|
115
|
+
x1: this.mathOperatorsCalculation(direction, coordQL1.lx, canvasConfigReadonly().ELEMENT_HEIGHT_CURVE, true),
|
|
116
|
+
y: (coordQL1.ly ?? 0) + canvasConfigReadonly().ELEMENT_HEIGHT_CURVE,
|
|
117
|
+
x: this.mathOperatorsCalculation(direction, coordQL1.lx, canvasConfigReadonly().ELEMENT_HEIGHT_CURVE, true),
|
|
118
|
+
};
|
|
119
|
+
coordQL2.ly = (coordQL2.y ?? 0) + getDistanceFromBranchToFirstBlock(branch.nodeOtherConfig);
|
|
120
|
+
coordQL2.lx = coordQL2.x;
|
|
121
|
+
if (!branch.elements || !branch.elements.length) {
|
|
122
|
+
coordQL2.ly = maxHeightBranch + (coordQL2.ly ?? 0); // tổng chiều cao của nhánh + điểm xuất phát
|
|
123
|
+
}
|
|
124
|
+
let QL2 = `Q ${coordQL2.x1},${coordQL2.y1} ${coordQL2.x},${coordQL2.y} L ${coordQL2.lx} ${coordQL2.ly}`;
|
|
125
|
+
if (branch.nodeOtherConfig) {
|
|
126
|
+
const endYToWait = (coordQL2.y ?? 0) + canvasConfigReadonly().DISTANCE_TO_WAIT; // xử lý các line vào first element
|
|
127
|
+
const waitHeight = getHeightWaitConfig(branch.nodeOtherConfig);
|
|
128
|
+
const topStartLine2 = endYToWait + waitHeight;
|
|
129
|
+
delete branch.nodeOtherConfig.attributeSvgD;
|
|
130
|
+
QL2 = `Q ${coordQL2.x1},${coordQL2.y1} ${coordQL2.x},${coordQL2.y} M ${coordQL2.x},${coordQL2.y} L ${coordQL2.x},${endYToWait}`;
|
|
131
|
+
if (branch.elements && branch.elements.length) {
|
|
132
|
+
branch.nodeOtherConfig.attributeSvgD = `M ${coordQL2.x} ${topStartLine2} L ${coordQL2.x} ${coordQL2.ly}`;
|
|
133
|
+
}
|
|
134
|
+
branch.nodeOtherConfig.specific_y = endYToWait;
|
|
135
|
+
branch.nodeOtherConfig.specific_x = coordQL2.x;
|
|
136
|
+
}
|
|
137
|
+
branch.positionMaxLeft = coordQL2.lx;
|
|
138
|
+
branch.attributeSvgD = `${M} ${L} ${QL1} ${QL2}`;
|
|
139
|
+
const isCheckAllElementConnectToExit = this.checkChildrenConnectToExit(branch.elements);
|
|
140
|
+
checkMaxLeft(config, branch.nodeOtherConfig?.specific_x, branch.positionMaxLeft);
|
|
141
|
+
return { coordQL1, coordQL2, isCheckAllElementConnectToExit };
|
|
142
|
+
}
|
|
143
|
+
static checkChildrenConnectToExit(elements) {
|
|
144
|
+
let toExit = false;
|
|
145
|
+
if (elements.length && (elements[elements.length - 1].subCodeOfElement || elements[elements.length - 1].code) === canvasConfigReadonly().TYPE_ELEMENT_EXIT) {
|
|
146
|
+
toExit = true;
|
|
147
|
+
return toExit;
|
|
148
|
+
}
|
|
149
|
+
elements.forEach((element) => {
|
|
150
|
+
if (!element.branches || !element.branches.length) {
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
let branchConnectToExit = 0;
|
|
154
|
+
element.branches.forEach((branch) => {
|
|
155
|
+
if (this.checkChildrenConnectToExit(branch.elements)) {
|
|
156
|
+
branchConnectToExit++;
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
if (branchConnectToExit === element.branches.length) {
|
|
160
|
+
toExit = true;
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
return toExit;
|
|
164
|
+
}
|
|
165
|
+
/* above, left a + b; opposite = true a - b;
|
|
166
|
+
under, right a - b; opposite = true a + b
|
|
167
|
+
*/
|
|
168
|
+
static mathOperatorsCalculation(direction, a, b, opposite) {
|
|
169
|
+
switch (direction) {
|
|
170
|
+
case 'left':
|
|
171
|
+
case 'above':
|
|
172
|
+
if (opposite) {
|
|
173
|
+
return (a ?? 0) - (b ?? 0);
|
|
174
|
+
}
|
|
175
|
+
return (a ?? 0) + (b ?? 0);
|
|
176
|
+
case 'right':
|
|
177
|
+
case 'under':
|
|
178
|
+
if (opposite) {
|
|
179
|
+
return (a ?? 0) + (b ?? 0);
|
|
180
|
+
}
|
|
181
|
+
return (a ?? 0) - (b ?? 0);
|
|
182
|
+
default:
|
|
183
|
+
return (a ?? 0) - (b ?? 0);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1icmFuY2gudXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMtdWkvc2VydmljZXMvZGlhZ3JhbS1kcmF3L3NyYy91dGlscy9jYWxjdWxhdG9yLWJyYW5jaC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRy9ELE9BQU8sRUFBRSxZQUFZLEVBQUUsaUNBQWlDLEVBQUUsbUJBQW1CLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUV4SixNQUFNLE9BQU8sZ0NBQWdDO0lBQzNDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUUsMEJBQWtDLEVBQUUsR0FBVyxFQUFFLE1BQTZCLEVBQUUsZUFBdUIsRUFBRSxNQUE2QjtRQUMxSyxNQUFNLFNBQVMsR0FBRyxHQUFHLEdBQUcsMEJBQTBCLENBQUM7UUFDbkQsSUFBSSxFQUFFLEdBQUcsU0FBUyxDQUFDO1FBRW5CLEVBQUUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLG9CQUFvQixDQUFDLENBQUMsaUNBQWlDO1FBQ3BGLEVBQUUsSUFBSSxpQ0FBaUMsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxpQ0FBaUM7UUFDbEcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hELEVBQUUsSUFBSSxlQUFlLENBQUM7WUFDdEIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLCtDQUErQztRQUMzRCxDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUc7WUFDYixFQUFFLEVBQUUsSUFBSTtZQUNSLEVBQUUsRUFBRSxHQUFHO1lBQ1AsRUFBRSxFQUFFLEVBQUU7WUFDTixFQUFFLEVBQUUsSUFBSTtTQUNULENBQUM7UUFFRixNQUFNLENBQUMsYUFBYSxHQUFH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SSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QjtnQkFDRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQy9CLENBQUM7SUFDSCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjYW52YXNDb25maWdSZWFkb25seSB9IGZyb20gJy4uL2RpYWdyYW0tZHJhdy5zZXJ2aWNlJztcbmltcG9ydCB7IElDb29yZGluYXRlc0RpYWdyYW1TdmcsIElEYXRhRGlhZ3JhbUNvbmZpZ1N2ZyB9IGZyb20gJy4uL2ludGVyZmFjZXMvY29vcmRpbmF0ZXMuaW50ZXJmYWNlJztcbmltcG9ydCB7IElEaWFncmFtRWxlbWVudCwgSURpYWdyYW1FbGVtZW50QnJhbmNoIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9kaWFncmFtLmludGVyZmFjZSc7XG5pbXBvcnQgeyBjaGVja01heExlZnQsIGdldERpc3RhbmNlRnJvbUJyYW5jaFRvRmlyc3RCbG9jaywgZ2V0SGVpZ2h0V2FpdENvbmZpZywgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbCB9IGZyb20gJy4vY2FsY3VsYXRvci1lbGVtZW50LnV0aWwnO1xuXG5leHBvcnQgY2xhc3MgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckJyYW5jaFV0aWwge1xuICBzdGF0aWMgZHJhd1N0cmFpZ2h0TGluZShsZWZ0OiBudW1iZXIsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nOiBudW1iZXIsIHRvcDogbnVtYmVyLCBicmFuY2g6IElEaWFncmFtRWxlbWVudEJyYW5jaCwgbWF4SGVpZ2h0QnJhbmNoOiBudW1iZXIsIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgY29uc3Qgc3RhcnREcmF3ID0gdG9wICsgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmc7XG4gICAgbGV0IEx5ID0gc3RhcnREcmF3O1xuXG4gICAgTHkgKz0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX0hFSUdIVF9DVVJWRTsgLy8gY2hp4buBdSBkw6BpIMSR4bq/biBlbGVtZW50IMSR4bqndSB0acOqblxuICAgIEx5ICs9IGdldERpc3RhbmNlRnJvbUJyYW5jaFRvRmlyc3RCbG9jayhicmFuY2gubm9kZU90aGVyQ29uZmlnKTsgLy8gY2hp4buBdSBkw6BpIMSR4bq/biBlbGVtZW50IMSR4bqndSB0acOqblxuICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICBMeSArPSBtYXhIZWlnaHRCcmFuY2g7XG4gICAgICBMeSArPSAyMDsgLy8gdGjDqm0gxJFv4bqhbiBu4buRaSB04burIMSRaeG7g20ga+G6v3QgdGjDumMgbmjDoW5oIMSR4bq/biBo4bq/dFxuICAgIH1cblxuICAgIGNvbnN0IGNvb3JkMSA9IHtcbiAgICAgIG14OiBsZWZ0LFxuICAgICAgbXk6IHRvcCxcbiAgICAgIGx5OiBMeSxcbiAgICAgIGx4OiBsZWZ0LFxuICAgIH07XG5cbiAgICBicmFuY2guYXR0cmlidXRlU3ZnRCA9IGBNICR7Y29vcmQxLm14fSAke2Nvb3JkMS5teX0gTCAke2Nvb3JkMS5seH0gJHtjb29yZDEubHl9YDtcblxuICAgIGlmIChicmFuY2gubm9kZU90aGVyQ29uZmlnKSB7XG4gICAgICBjb25zdCBlbmRZVG9XYWl0ID0gc3RhcnREcmF3ICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX0hFSUdIVF9DVVJWRSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVDtcbiAgICAgIGJyYW5jaC5hdHRyaWJ1dGVTdmdEID0gYE0gJHtjb29yZDEubXh9ICR7Y29vcmQxLm15fSBMICR7Y29vcmQxLm14fSAke2VuZFlUb1dhaXR9YDtcblxuICAgICAgY29uc3Qgd2FpdEhlaWdodCA9IGdldEhlaWdodFdhaXRDb25maWcoYnJhbmNoLm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICBjb25zdCB0b3BTdGFydExpbmUyID0gZW5kWVRvV2FpdCArIHdhaXRIZWlnaHQ7XG5cbiAgICAgIGRlbGV0ZSBicmFuY2gubm9kZU90aGVyQ29uZmlnLmF0dHJpYnV0ZVN2Z0Q7XG4gICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5hdHRyaWJ1dGVTdmdEID0gYE0gJHtjb29yZDEubXh9ICR7dG9wU3RhcnRMaW5lMn0gTCAke2Nvb3JkMS5teH0gJHtjb29yZDEubHl9YDtcbiAgICAgIH1cbiAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeSA9IGVuZFlUb1dhaXQ7XG4gICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnLnNwZWNpZmljX3ggPSBjb29yZDEubXg7XG4gICAgfVxuXG4gICAgYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF95ID0gdG9wICsgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFO1xuICAgIGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeCA9IGxlZnQ7XG5cbiAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhlaWdodFRvRWxlbWVudCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9IRUlHSFRfQ1VSVkUgKyBnZXREaXN0YW5jZUZyb21CcmFuY2hUb0ZpcnN0QmxvY2soYnJhbmNoLm5vZGVPdGhlckNvbmZpZyk7IC8vIGNoaeG7gXUgZMOgaSDEkeG6v24gZWxlbWVudCDEkeG6p3UgdGnDqm47XG5cbiAgICBicmFuY2guZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudEJyYW5jaCkgPT4ge1xuICAgICAgZWxlbWVudEJyYW5jaC5zcGVjaWZpY195ID0gdG9wICsgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcgKyBoZWlnaHRUb0VsZW1lbnQ7XG4gICAgICBlbGVtZW50QnJhbmNoLnNwZWNpZmljX3ggPSBsZWZ0IC0gKGVsZW1lbnRCcmFuY2guc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgIH0pO1xuICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhicmFuY2guZWxlbWVudHMsIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgbGVmdExpbmUobGVmdDogbnVtYmVyLCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZzogbnVtYmVyLCB0b3A6IG51bWJlciwgbGluZUJldHdlZW5CcmFuY2g6IG51bWJlciwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIG1heEhlaWdodEJyYW5jaDogbnVtYmVyLCBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgY29uc3QgeyBjb29yZFFMMiwgaXNDaGVja0FsbEVsZW1lbnRDb25uZWN0VG9FeGl0IH0gPSB0aGlzLmRyYXdBYm92ZVVuZGVyTGluZShsZWZ0LCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZywgdG9wLCBsaW5lQmV0d2VlbkJyYW5jaCwgYnJhbmNoLCBtYXhIZWlnaHRCcmFuY2gsICdsZWZ0JywgY29uZmlnKTtcbiAgICBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3ggPSBjb29yZFFMMi54O1xuICAgIGJyYW5jaC5zcGVjaWZpY19zdGFydF9icmFuY2hfeSA9IGNvb3JkUUwyLnk7XG4gICAgaWYgKCFicmFuY2guZWxlbWVudHMgfHwgIWJyYW5jaC5lbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmRyYXdFbGVtZW50SW5CcmFuY2hMaW5lKGJyYW5jaCwgY29vcmRRTDIsIGNvbmZpZyk7XG4gICAgaWYgKGlzQ2hlY2tBbGxFbGVtZW50Q29ubmVjdFRvRXhpdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyByaWdodExpbmUobGVmdDogbnVtYmVyLCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZzogbnVtYmVyLCB0b3A6IG51bWJlciwgbGluZUJldHdlZW5CcmFuY2g6IG51bWJlciwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIG1heEhlaWdodEJyYW5jaDogbnVtYmVyLCBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgY29uc3QgeyBjb29yZFFMMSwgY29vcmRRTDIsIGlzQ2hlY2tBbGxFbGVtZW50Q29ubmVjdFRvRXhpdCB9ID0gdGhpcy5kcmF3QWJvdmVVbmRlckxpbmUobGVmdCwgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcsIHRvcCwgbGluZUJldHdlZW5CcmFuY2gsIGJyYW5jaCwgbWF4SGVpZ2h0QnJhbmNoLCAncmlnaHQnLCBjb25maWcpO1xuXG4gICAgYnJhbmNoLnNwZWNpZmljX3N0YXJ0X2JyYW5jaF94ID0gY29vcmRRTDIueDtcbiAgICBicmFuY2guc3BlY2lmaWNfc3RhcnRfYnJhbmNoX3kgPSBjb29yZFFMMi55O1xuICAgIGNvbnN0IG1heFkgPSAoY29vcmRRTDEueSA/PyAwKSArIDIwMDtcbiAgICBjb25zdCBjb25maWdTdmcgPSBjb25maWcud2lkdGhIZWlnaHRTdmdDYW52YXM7XG5cbiAgICBjb25maWdTdmcuaGVpZ2h0U3ZnID0gbWF4WSA+IGNvbmZpZ1N2Zy5oZWlnaHRTdmcgPyBtYXhZIDogY29uZmlnU3ZnLmhlaWdodFN2ZztcblxuICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuZHJhd0VsZW1lbnRJbkJyYW5jaExpbmUoYnJhbmNoLCBjb29yZFFMMiwgY29uZmlnKTtcbiAgICBpZiAoaXNDaGVja0FsbEVsZW1lbnRDb25uZWN0VG9FeGl0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGRyYXdFbGVtZW50SW5CcmFuY2hMaW5lKGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjb29yZFFMMjogSUNvb3JkaW5hdGVzRGlhZ3JhbVN2ZywgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcpIHtcbiAgICBjb25zdCB0b3BFbGVtZW50SW5CcmFuY2ggPSBjb29yZFFMMi5seTsgLy8gYuG6r3QgxJHhuqd1IGPhu6dhIDEgZW1lbGVudCB0cm9uZyBuaMOhbmggc+G6vSBsw6AgxJFp4buDbSBjdeG7kWkgY8O5bmcgY+G7p2EgbmjDoW5oIHRy4buPIHThu5tpXG5cbiAgICBjb25zdCBlbGVtZW50Rmlyc3QgPSBicmFuY2guZWxlbWVudHNbMF07XG5cbiAgICBlbGVtZW50Rmlyc3Quc3BlY2lmaWNfeSA9IHRvcEVsZW1lbnRJbkJyYW5jaDtcbiAgICBlbGVtZW50Rmlyc3Quc3BlY2lmaWNfeCA9IChjb29yZFFMMi5seCA/PyAwKSAtIChlbGVtZW50Rmlyc3Quc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuc2V0WFlFbGVtZW50cyhicmFuY2guZWxlbWVudHMsIGNvbmZpZyk7XG4gIH1cblxuICBzdGF0aWMgZHJhd01pc3NpbmdMaW5lRnJvbUxhc3RFbGVtZW50KGJyYW5jaDogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjb29yZFEzOiBJQ29vcmRpbmF0ZXNEaWFncmFtU3ZnKSB7XG4gICAgY29uc3QgeyBteCwgbXkgfSA9IGNvb3JkUTM7XG5cbiAgICBpZiAoIW15KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGxhc3RFbGVtZW50SW5CcmFuY2ggPSBicmFuY2guZWxlbWVudHNbYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgaWYgKCFsYXN0RWxlbWVudEluQnJhbmNoLmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIGJyYW5jaC5hdHRyaWJ1dGVTdmdEID0gYCR7YnJhbmNoLmF0dHJpYnV0ZVN2Z0R9IE0gJHtteH0gJHtteX0gTCAke214fSAke2xhc3RFbGVtZW50SW5CcmFuY2gucG9zaXRpb25fZW5kID8/IDB9YDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbHkgPSAobGFzdEVsZW1lbnRJbkJyYW5jaC5wb3NpdGlvbl9lbmRfYnJhbmNoID8/IDApIC0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX0hFSUdIVF9DVVJWRTtcblxuICAgIGlmIChseSA9PT0gbXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYnJhbmNoLmF0dHJpYnV0ZVN2Z0QgPSBgJHticmFuY2guYXR0cmlidXRlU3ZnRH0gTSAke214fSAke215fSBMICR7bXh9ICR7bHl9YDtcbiAgfVxuXG4gIHN0YXRpYyBkcmF3QWJvdmVVbmRlckxpbmUobGVmdDogbnVtYmVyLCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZzogbnVtYmVyLCB0b3A6IG51bWJlciwgbGluZUJldHdlZW5CcmFuY2g6IG51bWJlciwgYnJhbmNoOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2gsIG1heEhlaWdodEJyYW5jaDogbnVtYmVyLCBkaXJlY3Rpb246ICdsZWZ0JyB8ICdyaWdodCcsIGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnKSB7XG4gICAgY29uc3QgTSA9IGBNICR7bGVmdH0gJHt0b3B9YDsgLy8gxJHhurd0IGLDunQgduG6vSB04burIMSRaeG7g20geCwgeVxuICAgIGNvbnN0IEx5ID0gdG9wICsgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcgLSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFO1xuICAgIGNvbnN0IEwgPSBgTCAke2xlZnR9ICR7THl9YDsgLy8gS8OpbyBkw6BpIDEgxJHGsOG7nW5nIHRo4bqzbmcgdOG7m2kgWCwgWSxcbiAgICBjb25zdCBzdHJhaWdodExpbmVCZXR3ZWVuQnJhbmNoID0gbGluZUJldHdlZW5CcmFuY2ggLSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFICogMjtcblxuICAgIGNvbnN0IGNvb3JkUUwxOiBJQ29vcmRpbmF0ZXNEaWFncmFtU3ZnID0ge1xuICAgICAgLy8gxJFp4buDbSBjb25nIHPhu5EgMSBj4bunYSBuaMOhbmggdsOgIMSRxrDhu51uZyB0aOG6s25nIGvDqW8gdHLDqm4gZMaw4bubaVxuICAgICAgbXg6IGxlZnQsXG4gICAgICBteTogTHksXG4gICAgICB4MTogbGVmdCxcbiAgICAgIHkxOiBMeSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9IRUlHSFRfQ1VSVkUsXG4gICAgICB4OiB0aGlzLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb24sIGxlZnQsIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9IRUlHSFRfQ1VSVkUsIHRydWUpLFxuICAgICAgeTogTHkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFLFxuICAgIH07XG5cbiAgICBjb29yZFFMMS5seSA9IGNvb3JkUUwxLnk7XG4gICAgLy8gxJFv4bqhbiB0aOG6s25nIGvDqW8gZMOgaSBsaW5lQmV0d2VlbkJyYW5jaCBwaOG6o2kgdHLhu6sgxJFpIGhhaSDEkeG6p3UgY29uZ1xuICAgIGNvb3JkUUwxLmx4ID0gdGhpcy5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uLCBjb29yZFFMMS54LCBzdHJhaWdodExpbmVCZXR3ZWVuQnJhbmNoLCB0cnVlKTtcbiAgICBjb25zdCBRTDEgPSBgTSAke2Nvb3JkUUwxLm14fSwke2Nvb3JkUUwxLm15fSBRICR7Y29vcmRRTDEueDF9LCR7Y29vcmRRTDEueTF9ICR7Y29vcmRRTDEueH0sJHtjb29yZFFMMS55fSBMICR7Y29vcmRRTDEubHh9ICR7Y29vcmRRTDEubHl9YDtcblxuICAgIGNvbnN0IGNvb3JkUUwyOiBJQ29vcmRpbmF0ZXNEaWFncmFtU3ZnID0ge1xuICAgICAgLy8gxJFp4buDbSBjb25nIHPhu5EgMiBj4bunYSBuaMOhbmggdsOgIMSRxrDhu51uZyB0aOG6s25nIMSR4bupbmdcbiAgICAgIHkxOiBjb29yZFFMMS5seSxcbiAgICAgIHgxOiB0aGlzLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb24sIGNvb3JkUUwxLmx4LCBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFLCB0cnVlKSxcbiAgICAgIHk6IChjb29yZFFMMS5seSA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9IRUlHSFRfQ1VSVkUsXG4gICAgICB4OiB0aGlzLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb24sIGNvb3JkUUwxLmx4LCBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfSEVJR0hUX0NVUlZFLCB0cnVlKSxcbiAgICB9O1xuXG4gICAgY29vcmRRTDIubHkgPSAoY29vcmRRTDIueSA/PyAwKSArIGdldERpc3RhbmNlRnJvbUJyYW5jaFRvRmlyc3RCbG9jayhicmFuY2gubm9kZU90aGVyQ29uZmlnKTtcbiAgICBjb29yZFFMMi5seCA9IGNvb3JkUUwyLng7XG5cbiAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgY29vcmRRTDIubHkgPSBtYXhIZWlnaHRCcmFuY2ggKyAoY29vcmRRTDIubHkgPz8gMCk7IC8vIHThu5VuZyBjaGnhu4F1IGNhbyBj4bunYSBuaMOhbmggKyDEkWnhu4NtIHh14bqldCBwaMOhdFxuICAgIH1cbiAgICBsZXQgUUwyID0gYFEgJHtjb29yZFFMMi54MX0sJHtjb29yZFFMMi55MX0gJHtjb29yZFFMMi54fSwke2Nvb3JkUUwyLnl9IEwgJHtjb29yZFFMMi5seH0gJHtjb29yZFFMMi5seX1gO1xuXG4gICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgIGNvbnN0IGVuZFlUb1dhaXQgPSAoY29vcmRRTDIueSA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVDsgLy8geOG7rSBsw70gY8OhYyBsaW5lIHbDoG8gZmlyc3QgZWxlbWVudFxuICAgICAgY29uc3Qgd2FpdEhlaWdodCA9IGdldEhlaWdodFdhaXRDb25maWcoYnJhbmNoLm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICBjb25zdCB0b3BTdGFydExpbmUyID0gZW5kWVRvV2FpdCArIHdhaXRIZWlnaHQ7XG5cbiAgICAgIGRlbGV0ZSBicmFuY2gubm9kZU90aGVyQ29uZmlnLmF0dHJpYnV0ZVN2Z0Q7XG4gICAgICBRTDIgPSBgUSAke2Nvb3JkUUwyLngxfSwke2Nvb3JkUUwyLnkxfSAke2Nvb3JkUUwyLnh9LCR7Y29vcmRRTDIueX0gTSAke2Nvb3JkUUwyLnh9LCR7Y29vcmRRTDIueX0gTCAke2Nvb3JkUUwyLnh9LCR7ZW5kWVRvV2FpdH1gO1xuICAgICAgaWYgKGJyYW5jaC5lbGVtZW50cyAmJiBicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcuYXR0cmlidXRlU3ZnRCA9IGBNICR7Y29vcmRRTDIueH0gJHt0b3BTdGFydExpbmUyfSBMICR7Y29vcmRRTDIueH0gJHtjb29yZFFMMi5seX1gO1xuICAgICAgfVxuICAgICAgYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY195ID0gZW5kWVRvV2FpdDtcbiAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeCA9IGNvb3JkUUwyLng7XG4gICAgfVxuXG4gICAgYnJhbmNoLnBvc2l0aW9uTWF4TGVmdCA9IGNvb3JkUUwyLmx4O1xuICAgIGJyYW5jaC5hdHRyaWJ1dGVTdmdEID0gYCR7TX0gJHtMfSAke1FMMX0gJHtRTDJ9YDtcbiAgICBjb25zdCBpc0NoZWNrQWxsRWxlbWVudENvbm5lY3RUb0V4aXQgPSB0aGlzLmNoZWNrQ2hpbGRyZW5Db25uZWN0VG9FeGl0KGJyYW5jaC5lbGVtZW50cyk7XG4gICAgY2hlY2tNYXhMZWZ0KGNvbmZpZywgYnJhbmNoLm5vZGVPdGhlckNvbmZpZz8uc3BlY2lmaWNfeCwgYnJhbmNoLnBvc2l0aW9uTWF4TGVmdCk7XG5cbiAgICByZXR1cm4geyBjb29yZFFMMSwgY29vcmRRTDIsIGlzQ2hlY2tBbGxFbGVtZW50Q29ubmVjdFRvRXhpdCB9O1xuICB9XG5cbiAgc3RhdGljIGNoZWNrQ2hpbGRyZW5Db25uZWN0VG9FeGl0KGVsZW1lbnRzOiBJRGlhZ3JhbUVsZW1lbnRbXSkge1xuICAgIGxldCB0b0V4aXQgPSBmYWxzZTtcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggJiYgKGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLnN1YkNvZGVPZkVsZW1lbnQgfHwgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uY29kZSkgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgIHRvRXhpdCA9IHRydWU7XG5cbiAgICAgIHJldHVybiB0b0V4aXQ7XG4gICAgfVxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgbGV0IGJyYW5jaENvbm5lY3RUb0V4aXQgPSAwO1xuXG4gICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jaGVja0NoaWxkcmVuQ29ubmVjdFRvRXhpdChicmFuY2guZWxlbWVudHMpKSB7XG4gICAgICAgICAgYnJhbmNoQ29ubmVjdFRvRXhpdCsrO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChicmFuY2hDb25uZWN0VG9FeGl0ID09PSBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICB0b0V4aXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRvRXhpdDtcbiAgfVxuXG4gIC8qIGFib3ZlLCBsZWZ0IGEgKyBiOyBvcHBvc2l0ZSA9IHRydWUgYSAtIGI7IFxuICAgIHVuZGVyLCByaWdodCBhIC0gYjsgb3Bwb3NpdGUgPSB0cnVlIGEgKyBiXG4gICovXG4gIHN0YXRpYyBtYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uOiAnbGVmdCcgfCAncmlnaHQnIHwgJ2Fib3ZlJyB8ICd1bmRlcicgfCBzdHJpbmcsIGE6IG51bWJlciB8IHVuZGVmaW5lZCwgYjogbnVtYmVyIHwgdW5kZWZpbmVkLCBvcHBvc2l0ZT86IGJvb2xlYW4pIHtcbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICBjYXNlICdhYm92ZSc6XG4gICAgICAgIGlmIChvcHBvc2l0ZSkge1xuICAgICAgICAgIHJldHVybiAoYSA/PyAwKSAtIChiID8/IDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIChhID8/IDApICsgKGIgPz8gMCk7XG5cbiAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIGNhc2UgJ3VuZGVyJzpcbiAgICAgICAgaWYgKG9wcG9zaXRlKSB7XG4gICAgICAgICAgcmV0dXJuIChhID8/IDApICsgKGIgPz8gMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gKGEgPz8gMCkgLSAoYiA/PyAwKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAoYSA/PyAwKSAtIChiID8/IDApO1xuICAgIH1cbiAgfVxufVxuIl19
|