@libs-ui/services-diagram-draw 0.2.356-37 → 0.2.356-40
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/canvas.service.d.ts +1 -1
- package/diagram-draw.service.d.ts +15 -7
- package/direction.service.d.ts +2 -2
- package/esm2022/canvas.service.mjs +1 -1
- package/esm2022/diagram-draw.service.mjs +14 -5
- package/esm2022/direction.service.mjs +15 -15
- package/esm2022/index.mjs +2 -1
- package/esm2022/interfaces/diagram.interface.mjs +1 -1
- package/esm2022/interfaces/navigation.interface.mjs +2 -0
- package/esm2022/utils/calculator-branch.util.mjs +9 -9
- package/esm2022/utils/calculator-element.util.mjs +15 -15
- package/esm2022/utils/canvas.util.mjs +18 -18
- package/esm2022/utils/diagram.util.mjs +4 -4
- package/esm2022/utils/direction.util.mjs +2 -2
- package/esm2022/utils/horizontal/calculator-branch.util.mjs +10 -11
- package/esm2022/utils/horizontal/calculator-coordinates.util.mjs +16 -17
- package/esm2022/utils/navigation/build-navigation-data.util.mjs +119 -0
- package/esm2022/utils/navigation/navigation-style.define.mjs +14 -0
- package/fesm2022/libs-ui-services-diagram-draw.mjs +224 -85
- package/fesm2022/libs-ui-services-diagram-draw.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/interfaces/diagram.interface.d.ts +1 -1
- package/interfaces/navigation.interface.d.ts +16 -0
- package/package.json +3 -2
- package/utils/navigation/build-navigation-data.util.d.ts +25 -0
- package/utils/navigation/navigation-style.define.d.ts +4 -0
|
@@ -3,7 +3,7 @@ import { MoLibDiagramCalculatorBranchUtil } from './calculator-branch.util';
|
|
|
3
3
|
import { buildFlatElement } from './diagram.util';
|
|
4
4
|
export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
5
5
|
static setXYElements(elements, config, positionX) {
|
|
6
|
-
if (!elements
|
|
6
|
+
if (!elements?.length) {
|
|
7
7
|
return;
|
|
8
8
|
}
|
|
9
9
|
elements.forEach((currentElement, index) => {
|
|
@@ -19,7 +19,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
19
19
|
const top = currentElement.specific_y ?? 0;
|
|
20
20
|
const left = (currentElement.specific_x ?? 0) + (currentElement.specific_width ?? 0) / 2;
|
|
21
21
|
let lineBetweenElements = (currentElement.specific_height ?? 0) + checkElementGetHeight(currentElement.nodeOtherConfig);
|
|
22
|
-
if (currentElement.branches
|
|
22
|
+
if (currentElement.branches?.length) {
|
|
23
23
|
lineBetweenElements = (currentElement.specific_height ?? 0) + canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH;
|
|
24
24
|
}
|
|
25
25
|
const maxY = (currentElement.specific_y ?? 0) + (currentElement.specific_height ?? 0) + 200;
|
|
@@ -28,7 +28,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
28
28
|
configSvg.heightSvg = maxY > configSvg.heightSvg ? maxY : configSvg.heightSvg;
|
|
29
29
|
configSvg.widthSvg = maxXLeft > configSvg.widthSvg ? maxXLeft : configSvg.widthSvg;
|
|
30
30
|
checkMaxLeft(config, currentElement.specific_x, currentElement.branches?.[0].positionMaxLeft);
|
|
31
|
-
if (!currentElement.branches
|
|
31
|
+
if (!currentElement.branches?.length) {
|
|
32
32
|
// các element không có nhánh mới vẽ đường thẳng
|
|
33
33
|
const drawFormToHeightExit = (currentElement.subCodeOfElement || currentElement.code) === canvasConfigReadonly().TYPE_ELEMENT_EXIT ? (currentElement.specific_height ?? 0) / 2 : lineBetweenElements;
|
|
34
34
|
currentElement.attributeSvgD = `M ${left} ${top} l 0 ${drawFormToHeightExit}`;
|
|
@@ -74,12 +74,12 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
74
74
|
MoLibDiagramCalculatorBranchUtil.drawStraightLine(left, lineFormElementToBranching, top, brachMiddle, maxHeightBranch.height, config);
|
|
75
75
|
}
|
|
76
76
|
let hasNextSameParentElementNext = false;
|
|
77
|
-
const aboveHalfReverse = aboveHalf.reverse();
|
|
77
|
+
const aboveHalfReverse = aboveHalf.slice().reverse();
|
|
78
78
|
aboveHalfReverse.forEach((branch, indexBranch) => {
|
|
79
79
|
if (!hasNextSameParentElementNext) {
|
|
80
80
|
const flatElementOnBranch = [];
|
|
81
81
|
buildFlatElement(branch.elements, flatElementOnBranch);
|
|
82
|
-
hasNextSameParentElementNext = !flatElementOnBranch ||
|
|
82
|
+
hasNextSameParentElementNext = !flatElementOnBranch?.length || !!flatElementOnBranch.find((item) => item.next_id === currentElement.next_id);
|
|
83
83
|
}
|
|
84
84
|
branch.onTheSide = 'above';
|
|
85
85
|
const maxWidthBranch = { width: 0, aboveWidth: 0, underWidth: 0 }; // tính chiều ngang để cách nhánh trên or dưới
|
|
@@ -104,7 +104,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
104
104
|
if (!hasNextSameParentElementNext) {
|
|
105
105
|
const flatElementOnBranch = [];
|
|
106
106
|
buildFlatElement(branch.elements, flatElementOnBranch);
|
|
107
|
-
hasNextSameParentElementNext = !flatElementOnBranch ||
|
|
107
|
+
hasNextSameParentElementNext = !flatElementOnBranch?.length || !!flatElementOnBranch.find((item) => item.next_id === currentElement.next_id);
|
|
108
108
|
}
|
|
109
109
|
branch.onTheSide = 'under';
|
|
110
110
|
const maxWidthBranch = { width: 0, aboveWidth: 0, underWidth: 0 }; // tính chiều cao để cách nhánh trên or dưới
|
|
@@ -153,7 +153,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
153
153
|
branch.nodeOtherConfig.translateY = branch.nodeOtherConfig.specific_y;
|
|
154
154
|
}
|
|
155
155
|
// Recursively set positions cho elements trong branch
|
|
156
|
-
if (branch.elements
|
|
156
|
+
if (branch.elements?.length > 0) {
|
|
157
157
|
this.setTranslatePositions(branch.elements);
|
|
158
158
|
}
|
|
159
159
|
});
|
|
@@ -161,11 +161,11 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
161
161
|
});
|
|
162
162
|
}
|
|
163
163
|
static calculatorMaxBranchHeight(element, maxHeightBranch) {
|
|
164
|
-
if (!element.branches
|
|
164
|
+
if (!element.branches?.length) {
|
|
165
165
|
return;
|
|
166
166
|
}
|
|
167
167
|
element.branches.forEach((branch) => {
|
|
168
|
-
if (!branch.elements
|
|
168
|
+
if (!branch.elements?.length) {
|
|
169
169
|
const lineBranchNoHasElement = canvasConfigReadonly().ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT;
|
|
170
170
|
maxHeightBranch.height = lineBranchNoHasElement > maxHeightBranch.height ? lineBranchNoHasElement : maxHeightBranch.height;
|
|
171
171
|
return;
|
|
@@ -179,9 +179,9 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
179
179
|
}
|
|
180
180
|
static plusHeightElementInBranch(elements, total) {
|
|
181
181
|
elements.forEach((element) => {
|
|
182
|
-
const margin = !element.branches
|
|
182
|
+
const margin = !element.branches?.length ? checkElementGetHeight(element.nodeOtherConfig) : canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH;
|
|
183
183
|
total.height += (element.specific_height ?? 0) + margin;
|
|
184
|
-
if (!element.branches
|
|
184
|
+
if (!element.branches?.length) {
|
|
185
185
|
return;
|
|
186
186
|
}
|
|
187
187
|
total.height += 64; // từ chiều đường thẳng ngang xuống đến nhánh đầu tiên
|
|
@@ -191,7 +191,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
191
191
|
element.branches.forEach((branch) => {
|
|
192
192
|
const heightInBranch = { height: 0 };
|
|
193
193
|
heightInBranch.height += canvasConfigReadonly().ELEMENT_MARGIN_DEFAULT_BRANCH_TO_ELEMENT_FIRST + 20; // đường cong kết thúc nhánh + 10px đường cong
|
|
194
|
-
if (!branch.elements
|
|
194
|
+
if (!branch.elements?.length) {
|
|
195
195
|
heightInBranch.height += canvasConfigReadonly().ELEMENT_WIDTH_DEFAULT_BRANCH_WHEN_NOT_ELEMENT;
|
|
196
196
|
if (theMostElementsInBranch.height < heightInBranch.height) {
|
|
197
197
|
theMostElementsInBranch.height = heightInBranch.height;
|
|
@@ -207,7 +207,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
207
207
|
});
|
|
208
208
|
}
|
|
209
209
|
static calculatorWidthBranch(elements, maxWidth, log) {
|
|
210
|
-
if (!elements
|
|
210
|
+
if (!elements?.length) {
|
|
211
211
|
const width = canvasConfigReadonly().DEFAULT_BRANCH_WHEN_NO_ELEMENT;
|
|
212
212
|
maxWidth.width = width;
|
|
213
213
|
maxWidth.aboveWidth = width / 2;
|
|
@@ -216,7 +216,7 @@ export class MoLibDiagramCalculatorCoordinatesUtil {
|
|
|
216
216
|
}
|
|
217
217
|
const maxWidthInElements = { width: 0, aboveWidth: 0, underWidth: 0 };
|
|
218
218
|
elements.forEach((element) => {
|
|
219
|
-
if (!element.branches
|
|
219
|
+
if (!element.branches?.length) {
|
|
220
220
|
// tính chiều cao của từng element 1, vì chiều cao của từng thằng có thể khác nhau
|
|
221
221
|
if ((element.specific_width ?? 0) < maxWidthInElements.width) {
|
|
222
222
|
return;
|
|
@@ -332,4 +332,4 @@ export const checkMaxTop = (config, specific_y, positionMaxTop) => {
|
|
|
332
332
|
}
|
|
333
333
|
config.positionMaxTop = numberTranslatePosition;
|
|
334
334
|
};
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1lbGVtZW50LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FsY3VsYXRvci1lbGVtZW50LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLHFDQUFxQztJQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWdDLEVBQUUsTUFBNkIsRUFBRSxTQUFrQjtRQUN0RyxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xDLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzSSxjQUFjLENBQUMsVUFBVSxHQUFH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YyxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDL0QsdUJBQXVCLEdBQUcsY0FBYyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDbEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FudmFzQ29uZmlnUmVhZG9ubHkgfSBmcm9tICcuLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGF0YURpYWdyYW1Db25maWdTdmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3JkaW5hdGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckJyYW5jaFV0aWwgfSBmcm9tICcuL2NhbGN1bGF0b3ItYnJhbmNoLnV0aWwnO1xuaW1wb3J0IHsgYnVpbGRGbGF0RWxlbWVudCB9IGZyb20gJy4vZGlhZ3JhbS51dGlsJztcblxuZXhwb3J0IGNsYXNzIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwge1xuICBzdGF0aWMgc2V0WFlFbGVtZW50cyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudHMgfHwgIWVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50cy5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3ggPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChwb3NpdGlvblggPz8gMCk7XG4gICAgICBjb25zdCBwcmVFbGVtZW50ID0gZWxlbWVudHNbaW5kZXggLSAxXTtcblxuICAgICAgaWYgKHByZUVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA9IChwcmVFbGVtZW50LnNwZWNpZmljX3ggPz8gMCkgKyAocHJlRWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDIgLSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gKHByZUVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChwcmVFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNoZWNrRWxlbWVudEdldEhlaWdodChwcmVFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgIGlmIChwcmVFbGVtZW50LnBvc2l0aW9uX2VuZF9icmFuY2gpIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gcHJlRWxlbWVudC5wb3NpdGlvbl9lbmRfYnJhbmNoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMDtcbiAgICAgIGNvbnN0IGxlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICBsZXQgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjaGVja0VsZW1lbnRHZXRIZWlnaHQoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnKTtcblxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzICYmIGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICBsaW5lQmV0d2VlbkVsZW1lbnRzID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1heFkgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyAyMDA7XG4gICAgICBjb25zdCBtYXhYTGVmdCA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY194ID8/IDApICsgKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDApICsgMTAwO1xuXG4gICAgICBjb25zdCBjb25maWdTdmcgPSBjb25maWcud2lkdGhIZWlnaHRTdmdDYW52YXM7XG5cbiAgICAgIGNvbmZpZ1N2Zy5oZWlnaHRTdmcgPSBtYXhZID4gY29uZmlnU3ZnLmhlaWdodFN2ZyA/IG1heFkgOiBjb25maWdTdmcuaGVpZ2h0U3ZnO1xuICAgICAgY29uZmlnU3ZnLndpZHRoU3ZnID0gbWF4WExlZnQgPiBjb25maWdTdmcud2lkdGhTdmcgPyBtYXhYTGVmdCA6IGNvbmZpZ1N2Zy53aWR0aFN2ZztcblxuICAgICAgY2hlY2tNYXhMZWZ0KGNvbmZpZywgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCwgY3VycmVudEVsZW1lbnQuYnJhbmNoZXM/LlswXS5wb3NpdGlvbk1heExlZnQpO1xuICAgICAgaWYgKCFjdXJyZW50RWxlbWVudC5icmFuY2hlcyB8fCAhY3VycmVudEVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIC8vIGPDoWMgZWxlbWVudCBraMO0bmcgY8OzIG5ow6FuaCBt4bubaSB24bq9IMSRxrDhu51uZyB0aOG6s25nXG4gICAgICAgIGNvbnN0IGRyYXdGb3JtVG9IZWlnaHRFeGl0ID0gKGN1cnJlbnRFbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgfHwgY3VycmVudEVsZW1lbnQuY29kZSkgPT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQgPyAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApIC8gMiA6IGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgY3VycmVudEVsZW1lbnQuYXR0cmlidXRlU3ZnRCA9IGBNICR7bGVmdH0gJHt0b3B9IGwgMCAke2RyYXdGb3JtVG9IZWlnaHRFeGl0fWA7XG4gICAgICAgIGN1cnJlbnRFbGVtZW50LnBvc2l0aW9uX2VuZCA9IHRvcCArIGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZykge1xuICAgICAgICAgIGNvbnN0IHdhaXRIZWlnaHQgPSBnZXRIZWlnaHRXYWl0Q29uZmlnKGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgICAgY29uc3QgZGlzdGFuY2VFbGVtZW50VG9XYWl0ID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVDtcbiAgICAgICAgICBjb25zdCB0b3BTdGFydExpbmUyID0gdG9wICsgZGlzdGFuY2VFbGVtZW50VG9XYWl0ICsgd2FpdEhlaWdodDtcblxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0QgPSBgTSAke2xlZnR9ICR7dG9wfSBsIDAgJHtkaXN0YW5jZUVsZW1lbnRUb1dhaXR9YDtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5wb3NpdGlvbl9lbmQgPSB0b3BTdGFydExpbmUyICsgbGluZUJldHdlZW5FbGVtZW50cztcblxuICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY195ID0gdG9wICsgZGlzdGFuY2VFbGVtZW50VG9XYWl0O1xuICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID0gbGVmdDtcbiAgICAgICAgICBkZWxldGUgY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnLmF0dHJpYnV0ZVN2Z0Q7XG4gICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LnN1YkNvZGVPZkVsZW1lbnQgIT09IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuVFlQRV9FTEVNRU5UX0VYSVQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5hdHRyaWJ1dGVTdmdEID0gYE0gJHtsZWZ0fSAke3RvcFN0YXJ0TGluZTJ9IGwgMCAke2NhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0FJVF9UT19FTEVNRU5UfWA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBzdGFydCBjw6FjIGVsZW1lbnQgY8OzIG5ow6FuaFxuICAgICAgY29uc3QgaGFsZiA9IE1hdGguY2VpbChjdXJyZW50RWxlbWVudC5icmFuY2hlcy5sZW5ndGggLyAyKTtcbiAgICAgIGNvbnN0IGFib3ZlSGFsZiA9IGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLnNsaWNlKDAsIGhhbGYpO1xuICAgICAgY29uc3QgdW5kZXJIYWxmID0gY3VycmVudEVsZW1lbnQuYnJhbmNoZXMuc2xpY2UoaGFsZik7XG4gICAgICBsZXQgYnJhY2hNaWRkbGU6IElEaWFncmFtRWxlbWVudEJyYW5jaCB8IHVuZGVmaW5lZDtcblxuICAgICAgaWYgKGFib3ZlSGFsZi5sZW5ndGggIT09IHVuZGVySGFsZi5sZW5ndGgpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUgPSBhYm92ZUhhbGYucG9wKCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFTDjU5IIENISeG7gFUgQ2FvIFThu5BJIMSQQSBD4bumQSBOSMOBTkhcbiAgICAgIGNvbnN0IG1heEhlaWdodEJyYW5jaCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckNvb3JkaW5hdGVzVXRpbC5jYWxjdWxhdG9yTWF4QnJhbmNoSGVpZ2h0KGN1cnJlbnRFbGVtZW50LCBtYXhIZWlnaHRCcmFuY2gpO1xuICAgICAgY3VycmVudEVsZW1lbnQubWF4SGVpZ2h0QnJhbmNoID0gbWF4SGVpZ2h0QnJhbmNoLmhlaWdodDtcbiAgICAgIGNvbnN0IG1heFdpZHRoQnJhY2hNaWRkbGUgPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG4gICAgICBjb25zdCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuXG4gICAgICBpZiAoYnJhY2hNaWRkbGUpIHtcbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhY2hNaWRkbGUuZWxlbWVudHMsIG1heFdpZHRoQnJhY2hNaWRkbGUpO1xuICAgICAgICBicmFjaE1pZGRsZS53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFjaE1pZGRsZS53aWR0aCxcbiAgICAgICAgICBhYm92ZTogbWF4V2lkdGhCcmFjaE1pZGRsZS5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYWNoTWlkZGxlLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmRyYXdTdHJhaWdodExpbmUobGVmdCwgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcsIHRvcCwgYnJhY2hNaWRkbGUsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGNvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIGxldCBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gZmFsc2U7XG4gICAgICBjb25zdCBhYm92ZUhhbGZSZXZlcnNlID0gYWJvdmVIYWxmLnJldmVyc2UoKTtcblxuICAgICAgYWJvdmVIYWxmUmV2ZXJzZS5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2ggfHwgIWZsYXRFbGVtZW50T25CcmFuY2gubGVuZ3RoID8gdHJ1ZSA6IGZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyYW5jaC5vblRoZVNpZGUgPSAnYWJvdmUnO1xuICAgICAgICBjb25zdCBtYXhXaWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBuZ2FuZyDEkeG7gyBjw6FjaCBuaMOhbmggdHLDqm4gb3IgZMaw4bubaVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgbWF4V2lkdGhCcmFuY2gpO1xuICAgICAgICBicmFuY2gud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhbmNoLndpZHRoLFxuICAgICAgICAgIGFib3ZlOiBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYW5jaC51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBicmFuY2hQcmUgPSBhYm92ZUhhbGZSZXZlcnNlW2luZGV4QnJhbmNoIC0gMV07XG5cbiAgICAgICAgbGV0IGxpbmVCZXR3ZWVuQnJhbmNoID0gbWF4V2lkdGhCcmFuY2gudW5kZXJXaWR0aCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG5cbiAgICAgICAgaWYgKGJyYW5jaFByZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFuY2hQcmUud2lkdGhCcmFuY2g/LndpZHRoID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFjaE1pZGRsZS53aWR0aEJyYW5jaD8uYWJvdmUgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5ow6FuaCB0csOhaVxuXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmxlZnRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGxpbmVCZXR3ZWVuQnJhbmNoLCBicmFuY2gsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGN1cnJlbnRFbGVtZW50LCBjb25maWcpO1xuICAgICAgfSk7XG5cbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2ggfHwgIWZsYXRFbGVtZW50T25CcmFuY2gubGVuZ3RoID8gdHJ1ZSA6IGZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJztcbiAgICAgICAgY29uc3QgbWF4V2lkdGhCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIMSR4buDIGPDoWNoIG5ow6FuaCB0csOqbiBvciBkxrDhu5tpXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBtYXhXaWR0aEJyYW5jaCk7XG4gICAgICAgIGJyYW5jaC53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFuY2gud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhbmNoLmFib3ZlV2lkdGgsXG4gICAgICAgICAgdW5kZXI6IG1heFdpZHRoQnJhbmNoLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJyYW5jaFByZSA9IHVuZGVySGFsZltpbmRleEJyYW5jaCAtIDFdO1xuICAgICAgICBsZXQgbGluZUJldHdlZW5CcmFuY2ggPSBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMjtcblxuICAgICAgICBpZiAoYnJhbmNoUHJlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYW5jaFByZS53aWR0aEJyYW5jaD8ud2lkdGggPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYWNoTWlkZGxlLndpZHRoQnJhbmNoPy51bmRlciA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuaMOhbmggcGjhuqNpXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLnJpZ2h0TGluZShsZWZ0LCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZywgdG9wLCBsaW5lQmV0d2VlbkJyYW5jaCwgYnJhbmNoLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjdXJyZW50RWxlbWVudCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRyYW5zbGF0ZVggdsOgIHRyYW5zbGF0ZVkgxJHhu4MgY8OzIHRo4buDIHJlbmRlciBub2Rlc1xuICAgIHRoaXMuc2V0VHJhbnNsYXRlUG9zaXRpb25zKGVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNsYXRlWCB2w6AgdHJhbnNsYXRlWSB04burIHNwZWNpZmljX3ggdsOgIHNwZWNpZmljX3kgY2hvIHThuqV0IGPhuqMgZWxlbWVudHMgKGJhbyBn4buTbSBicmFuY2hlcylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHNldFRyYW5zbGF0ZVBvc2l0aW9ucyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vIFNldCBwb3NpdGlvbiBjaG8gZWxlbWVudCBjaMOtbmhcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWCA9IGVsZW1lbnQuc3BlY2lmaWNfeDtcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWSA9IGVsZW1lbnQuc3BlY2lmaWNfeTtcblxuICAgICAgLy8gU2V0IHBvc2l0aW9uIGNobyBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG5cbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnNwZWNpZmljX3k7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNldCBwb3NpdGlvbnMgY2hvIGVsZW1lbnRzIHRyb25nIGJyYW5jaGVzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gY2hvIGJyYW5jaCBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICAgICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgcG9zaXRpb25zIGNobyBlbGVtZW50cyB0cm9uZyBicmFuY2hcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzICYmIGJyYW5jaC5lbGVtZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZVBvc2l0aW9ucyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIG1heEhlaWdodEJyYW5jaDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzIHx8ICFlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsaW5lQnJhbmNoTm9IYXNFbGVtZW50ID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dJRFRIX0RFRkFVTFRfQlJBTkNIX1dIRU5fTk9UX0VMRU1FTlQ7XG5cbiAgICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IGxpbmVCcmFuY2hOb0hhc0VsZW1lbnQgPiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0ID8gbGluZUJyYW5jaE5vSGFzRWxlbWVudCA6IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b3RhbCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgdG90YWwpO1xuICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IHRvdGFsLmhlaWdodCA+IG1heEhlaWdodEJyYW5jaC5oZWlnaHQgPyB0b3RhbC5oZWlnaHQgOiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCB0b3RhbDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWFyZ2luID0gIWVsZW1lbnQuYnJhbmNoZXMgfHwgIWVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoID8gY2hlY2tFbGVtZW50R2V0SGVpZ2h0KGVsZW1lbnQubm9kZU90aGVyQ29uZmlnKSA6IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0g7XG5cbiAgICAgIHRvdGFsLmhlaWdodCArPSAoZWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBtYXJnaW47XG4gICAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXMgfHwgIWVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRvdGFsLmhlaWdodCArPSA2NDsgLy8gdOG7qyBjaGnhu4F1IMSRxrDhu51uZyB0aOG6s25nIG5nYW5nIHh14buRbmcgxJHhur9uIG5ow6FuaCDEkeG6p3UgdGnDqm5cbiAgICAgIGNvbnN0IHRoZU1vc3RFbGVtZW50c0luQnJhbmNoID0ge1xuICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICB9O1xuXG4gICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICBjb25zdCBoZWlnaHRJbkJyYW5jaCA9IHsgaGVpZ2h0OiAwIH07XG5cbiAgICAgICAgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0ICs9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVF9CUkFOQ0hfVE9fRUxFTUVOVF9GSVJTVCArIDIwOyAvLyDEkcaw4budbmcgY29uZyBr4bq/dCB0aMO6YyBuaMOhbmggKyAxMHB4IMSRxrDhu51uZyBjb25nXG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0ICs9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XSURUSF9ERUZBVUxUX0JSQU5DSF9XSEVOX05PVF9FTEVNRU5UO1xuXG4gICAgICAgICAgaWYgKHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodCA8IGhlaWdodEluQnJhbmNoLmhlaWdodCkge1xuICAgICAgICAgICAgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0ID0gaGVpZ2h0SW5CcmFuY2guaGVpZ2h0O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBoZWlnaHRJbkJyYW5jaCk7XG4gICAgICAgIGlmICh0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPCBoZWlnaHRJbkJyYW5jaC5oZWlnaHQpIHtcbiAgICAgICAgICB0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPSBoZWlnaHRJbkJyYW5jaC5oZWlnaHQ7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICB0b3RhbC5oZWlnaHQgKz0gdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGNhbGN1bGF0b3JXaWR0aEJyYW5jaChlbGVtZW50czogSURpYWdyYW1FbGVtZW50W10gfCB1bmRlZmluZWQsIG1heFdpZHRoOiB7IHdpZHRoOiBudW1iZXI7IGFib3ZlV2lkdGg6IG51bWJlcjsgdW5kZXJXaWR0aDogbnVtYmVyIH0sIGxvZz86IGJvb2xlYW4pIHtcbiAgICBpZiAoIWVsZW1lbnRzIHx8ICFlbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5ERUZBVUxUX0JSQU5DSF9XSEVOX05PX0VMRU1FTlQ7XG5cbiAgICAgIG1heFdpZHRoLndpZHRoID0gd2lkdGg7XG4gICAgICBtYXhXaWR0aC5hYm92ZVdpZHRoID0gd2lkdGggLyAyO1xuICAgICAgbWF4V2lkdGgudW5kZXJXaWR0aCA9IHdpZHRoIC8gMjtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG1heFdpZHRoSW5FbGVtZW50cyA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcblxuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgLy8gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIGVsZW1lbnQgMSwgdsOsIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyB0aOG6sW5nIGPDsyB0aOG7gyBraMOhYyBuaGF1XG4gICAgICAgIGlmICgoZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSA8IG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMDtcblxuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMud2lkdGggPSB3aWR0aDtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoID0gd2lkdGggLyAyO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG4gICAgICBjb25zdCB3aWR0aCA9IGVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMDtcblxuICAgICAgaWYgKHdpZHRoID4gd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC53aWR0aCkge1xuICAgICAgICB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLndpZHRoID0gd2lkdGg7XG4gICAgICAgIHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2guYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgICAgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC51bmRlcldpZHRoID0gd2lkdGggLyAyO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYWxmID0gTWF0aC5jZWlsKGVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBhYm92ZUhhbGYgPSBlbGVtZW50LmJyYW5jaGVzLnNsaWNlKDAsIGhhbGYpO1xuICAgICAgY29uc3QgdW5kZXJIYWxmID0gZWxlbWVudC5icmFuY2hlcy5zbGljZShoYWxmKTtcbiAgICAgIGxldCBicmFjaE1pZGRsZTtcblxuICAgICAgaWYgKGFib3ZlSGFsZi5sZW5ndGggIT09IHVuZGVySGFsZi5sZW5ndGgpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUgPSBhYm92ZUhhbGYucG9wKCk7XG4gICAgICB9XG4gICAgICBpZiAoYnJhY2hNaWRkbGUpIHtcbiAgICAgICAgYnJhY2hNaWRkbGUub25UaGVTaWRlID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgICBhYm92ZUhhbGYuZm9yRWFjaCgoYnJhbmNoKSA9PiAoYnJhbmNoLm9uVGhlU2lkZSA9ICdhYm92ZScpKTtcbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gpID0+IChicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJykpO1xuXG4gICAgICAvLyB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSB04burbmcgbmjDoW5oIDEsIHLhu5NpIHTDrW5oIHThu5VuZyA9PiBzbyBzw6FuaCB24bubaSBjaGnhu4F1IGNhbyB4ZW0gZWxlbWVudCBjw7MgbmjDoW5oIG7DoG8gY2FvIG5o4bqldCB0aMOsIGzhuqV5XG4gICAgICBjb25zdCB3aWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcblxuICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgY29uc3Qgd2lkdGggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyBuaMOhbmggMVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgd2lkdGgsIGxvZyk7XG4gICAgICAgIHN3aXRjaCAoYnJhbmNoLm9uVGhlU2lkZSkge1xuICAgICAgICAgIGNhc2UgJ2Fib3ZlJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGggKz0gd2lkdGgud2lkdGg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ3VuZGVyJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gd2lkdGgud2lkdGg7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgICAgICB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoICs9IHdpZHRoLmFib3ZlV2lkdGg7XG4gICAgICAgICAgICB3aWR0aEJyYW5jaC51bmRlcldpZHRoICs9IHdpZHRoLnVuZGVyV2lkdGg7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IG1hcmdpbkJldHdlZW5CcmFuY2ggPSAoZWxlbWVudC5icmFuY2hlcy5sZW5ndGggLSAxKSAqIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVDtcblxuICAgICAgd2lkdGhCcmFuY2guYWJvdmVXaWR0aCArPSBtYXJnaW5CZXR3ZWVuQnJhbmNoIC8gMjtcbiAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gbWFyZ2luQmV0d2VlbkJyYW5jaCAvIDI7XG4gICAgICBjb25zdCBtYXhBYm92ZVdpZHRoID0gTWF0aC5tYXgod2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC5hYm92ZVdpZHRoLCB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoKTtcbiAgICAgIGNvbnN0IG1heFVuZGVyV2lkdGggPSBNYXRoLm1heCh3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLnVuZGVyV2lkdGgsIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGgpO1xuXG4gICAgICBpZiAobWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPCBtYXhBYm92ZVdpZHRoKSB7XG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoID0gbWF4QWJvdmVXaWR0aDtcbiAgICAgIH1cbiAgICAgIGlmIChtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aCA8IG1heFVuZGVyV2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGggPSBtYXhVbmRlcldpZHRoO1xuICAgICAgfVxuXG4gICAgICBtYXhXaWR0aEluRWxlbWVudHMud2lkdGggPSBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCArIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoO1xuICAgIH0pO1xuXG4gICAgbWF4V2lkdGgud2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggKyBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aDtcbiAgICBtYXhXaWR0aC5hYm92ZVdpZHRoICs9IG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoO1xuICAgIG1heFdpZHRoLnVuZGVyV2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGg7XG4gIH1cbn1cblxuY29uc3QgY2hlY2tFbGVtZW50R2V0SGVpZ2h0ID0gKGhhc1dhaXRDb25maWc/OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgaWYgKGhhc1dhaXRDb25maWcpIHtcbiAgICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5ESVNUQU5DRV9UT19XQUlUICsgZ2V0SGVpZ2h0V2FpdENvbmZpZyhoYXNXYWl0Q29uZmlnKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuV0FJVF9UT19FTEVNRU5UO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fREVGQVVMVDtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXREaXN0YW5jZUZyb21CcmFuY2hUb0ZpcnN0QmxvY2sgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQgKyBnZXRIZWlnaHRXYWl0Q29uZmlnKGhhc1dhaXRDb25maWcpICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XQUlUX1RPX0VMRU1FTlQ7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEhlaWdodFdhaXRDb25maWcgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiAoaGFzV2FpdENvbmZpZy5zcGVjaWZpY19oZWlnaHQgPz8gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1dBSVRfVE9fTkVYVF9MSU5FO1xuICB9XG5cbiAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9XQUlUX0RFRkFVTFQgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1dBSVRfVE9fTkVYVF9MSU5FO1xufTtcblxuZXhwb3J0IGNvbnN0IGNoZWNrTWF4TGVmdCA9IChjb25maWc6IElEYXRhRGlhZ3JhbUNvbmZpZ1N2Zywgc3BlY2lmaWNfeDogbnVtYmVyIHwgdW5kZWZpbmVkLCBwb3NpdGlvbk1heExlZnQ6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICBsZXQgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBjb25maWcucG9zaXRpb25NYXhMZWZ0O1xuXG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gMCAmJiBzcGVjaWZpY194ICYmIHNwZWNpZmljX3ggPiAwICYmIHNwZWNpZmljX3ggPCA1MCkge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gLTUwO1xuICB9XG5cbiAgaWYgKHNwZWNpZmljX3ggJiYgc3BlY2lmaWNfeCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY194O1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uTWF4TGVmdCAmJiBwb3NpdGlvbk1heExlZnQgPCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbikge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gcG9zaXRpb25NYXhMZWZ0O1xuICB9XG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gY29uZmlnLnBvc2l0aW9uTWF4TGVmdCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25maWcucG9zaXRpb25NYXhMZWZ0ID0gbnVtYmVyVHJhbnNsYXRlUG9zaXRpb247XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNYXhUb3AgPSAoY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHNwZWNpZmljX3k6IG51bWJlciB8IHVuZGVmaW5lZCwgcG9zaXRpb25NYXhUb3A6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4ge1xuICBsZXQgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBjb25maWcucG9zaXRpb25NYXhUb3A7XG5cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSAwICYmIHNwZWNpZmljX3kgJiYgc3BlY2lmaWNfeSA+IDAgJiYgc3BlY2lmaWNfeSA8IDEwMCkge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gc3BlY2lmaWNfeSAtIDEyMDtcbiAgfVxuXG4gIGlmIChzcGVjaWZpY195ICYmIHNwZWNpZmljX3kgPCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbikge1xuICAgIG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID0gc3BlY2lmaWNfeTtcbiAgfVxuXG4gIGlmIChwb3NpdGlvbk1heFRvcCAmJiBwb3NpdGlvbk1heFRvcCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBwb3NpdGlvbk1heFRvcDtcbiAgfVxuICBpZiAobnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPT09IGNvbmZpZy5wb3NpdGlvbk1heFRvcCkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25maWcucG9zaXRpb25NYXhUb3AgPSBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbjtcbn07XG4iXX0=
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1lbGVtZW50LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FsY3VsYXRvci1lbGVtZW50LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHL0QsT0FBTyxFQUFFLGdDQUFnQyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDNUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFbEQsTUFBTSxPQUFPLHFDQUFxQztJQUNoRCxNQUFNLENBQUMsYUFBYSxDQUFDLFFBQWdDLEVBQUUsTUFBNkIsRUFBRSxTQUFrQjtRQUN0RyxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3RCLE9BQU87UUFDVCxDQUFDO1FBQ0QsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN6QyxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsY0FBYyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUNoRixNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBRXZDLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsY0FBYyxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzSSxjQUFjLENBQUMsVUFBVSxHQUFHLENBQUMsVUFBVSxDQUFD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dUJBQXVCLEdBQUcsZUFBZSxDQUFDO0lBQzVDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUM7QUFDbkQsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsTUFBNkIsRUFBRSxVQUE4QixFQUFFLGNBQWtDLEVBQUUsRUFBRTtJQUMvSCxJQUFJLHVCQUF1QixHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUM7SUFFcEQsSUFBSSx1QkFBdUIsS0FBSyxDQUFDLElBQUksVUFBVSxJQUFJLFVBQVUsR0FBRyxDQUFDLElBQUksVUFBVSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ3RGLHVCQUF1QixHQUFHLFVBQVUsR0FBRyxHQUFHLENBQUM7SUFDN0MsQ0FBQztJQUVELElBQUksVUFBVSxJQUFJLFVBQVUsR0FBRyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3ZELHVCQUF1QixHQUFHLFVBQVUsQ0FBQztJQUN2QyxDQUFDO0lBRUQsSUFBSSxjQUFjLElBQUksY0FBYyxHQUFHLHVCQUF1QixFQUFFLENBQUM7UUFDL0QsdUJBQXVCLEdBQUcsY0FBYyxDQUFDO0lBQzNDLENBQUM7SUFDRCxJQUFJLHVCQUF1QixLQUFLLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0RCxPQUFPO0lBQ1QsQ0FBQztJQUNELE1BQU0sQ0FBQyxjQUFjLEdBQUcsdUJBQXVCLENBQUM7QUFDbEQsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY2FudmFzQ29uZmlnUmVhZG9ubHkgfSBmcm9tICcuLi9kaWFncmFtLWRyYXcuc2VydmljZSc7XG5pbXBvcnQgeyBJRGF0YURpYWdyYW1Db25maWdTdmcgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2Nvb3JkaW5hdGVzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTW9MaWJEaWFncmFtQ2FsY3VsYXRvckJyYW5jaFV0aWwgfSBmcm9tICcuL2NhbGN1bGF0b3ItYnJhbmNoLnV0aWwnO1xuaW1wb3J0IHsgYnVpbGRGbGF0RWxlbWVudCB9IGZyb20gJy4vZGlhZ3JhbS51dGlsJztcblxuZXhwb3J0IGNsYXNzIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwge1xuICBzdGF0aWMgc2V0WFlFbGVtZW50cyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgY29uZmlnOiBJRGF0YURpYWdyYW1Db25maWdTdmcsIHBvc2l0aW9uWD86IG51bWJlcikge1xuICAgIGlmICghZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50cy5mb3JFYWNoKChjdXJyZW50RWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3ggPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChwb3NpdGlvblggPz8gMCk7XG4gICAgICBjb25zdCBwcmVFbGVtZW50ID0gZWxlbWVudHNbaW5kZXggLSAxXTtcblxuICAgICAgaWYgKHByZUVsZW1lbnQpIHtcbiAgICAgICAgY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA9IChwcmVFbGVtZW50LnNwZWNpZmljX3ggPz8gMCkgKyAocHJlRWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDIgLSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfd2lkdGggPz8gMCkgLyAyO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gKHByZUVsZW1lbnQuc3BlY2lmaWNfeSA/PyAwKSArIChwcmVFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSArIGNoZWNrRWxlbWVudEdldEhlaWdodChwcmVFbGVtZW50Lm5vZGVPdGhlckNvbmZpZyk7XG4gICAgICAgIGlmIChwcmVFbGVtZW50LnBvc2l0aW9uX2VuZF9icmFuY2gpIHtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5zcGVjaWZpY195ID0gcHJlRWxlbWVudC5wb3NpdGlvbl9lbmRfYnJhbmNoO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRvcCA9IGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMDtcbiAgICAgIGNvbnN0IGxlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICBsZXQgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjaGVja0VsZW1lbnRHZXRIZWlnaHQoY3VycmVudEVsZW1lbnQubm9kZU90aGVyQ29uZmlnKTtcblxuICAgICAgaWYgKGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgbGluZUJldHdlZW5FbGVtZW50cyA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtYXhZID0gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3kgPz8gMCkgKyAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgMjAwO1xuICAgICAgY29uc3QgbWF4WExlZnQgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfeCA/PyAwKSArIChjdXJyZW50RWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwKSArIDEwMDtcblxuICAgICAgY29uc3QgY29uZmlnU3ZnID0gY29uZmlnLndpZHRoSGVpZ2h0U3ZnQ2FudmFzO1xuXG4gICAgICBjb25maWdTdmcuaGVpZ2h0U3ZnID0gbWF4WSA+IGNvbmZpZ1N2Zy5oZWlnaHRTdmcgPyBtYXhZIDogY29uZmlnU3ZnLmhlaWdodFN2ZztcbiAgICAgIGNvbmZpZ1N2Zy53aWR0aFN2ZyA9IG1heFhMZWZ0ID4gY29uZmlnU3ZnLndpZHRoU3ZnID8gbWF4WExlZnQgOiBjb25maWdTdmcud2lkdGhTdmc7XG5cbiAgICAgIGNoZWNrTWF4TGVmdChjb25maWcsIGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX3gsIGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzPy5bMF0ucG9zaXRpb25NYXhMZWZ0KTtcbiAgICAgIGlmICghY3VycmVudEVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICAvLyBjw6FjIGVsZW1lbnQga2jDtG5nIGPDsyBuaMOhbmggbeG7m2kgduG6vSDEkcaw4budbmcgdGjhurNuZ1xuICAgICAgICBjb25zdCBkcmF3Rm9ybVRvSGVpZ2h0RXhpdCA9IChjdXJyZW50RWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50IHx8IGN1cnJlbnRFbGVtZW50LmNvZGUpID09PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUID8gKGN1cnJlbnRFbGVtZW50LnNwZWNpZmljX2hlaWdodCA/PyAwKSAvIDIgOiBsaW5lQmV0d2VlbkVsZW1lbnRzO1xuXG4gICAgICAgIGN1cnJlbnRFbGVtZW50LmF0dHJpYnV0ZVN2Z0QgPSBgTSAke2xlZnR9ICR7dG9wfSBsIDAgJHtkcmF3Rm9ybVRvSGVpZ2h0RXhpdH1gO1xuICAgICAgICBjdXJyZW50RWxlbWVudC5wb3NpdGlvbl9lbmQgPSB0b3AgKyBsaW5lQmV0d2VlbkVsZW1lbnRzO1xuXG4gICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICBjb25zdCB3YWl0SGVpZ2h0ID0gZ2V0SGVpZ2h0V2FpdENvbmZpZyhjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcpO1xuICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRWxlbWVudFRvV2FpdCA9IChjdXJyZW50RWxlbWVudC5zcGVjaWZpY19oZWlnaHQgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQ7XG4gICAgICAgICAgY29uc3QgdG9wU3RhcnRMaW5lMiA9IHRvcCArIGRpc3RhbmNlRWxlbWVudFRvV2FpdCArIHdhaXRIZWlnaHQ7XG5cbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5hdHRyaWJ1dGVTdmdEID0gYE0gJHtsZWZ0fSAke3RvcH0gbCAwICR7ZGlzdGFuY2VFbGVtZW50VG9XYWl0fWA7XG4gICAgICAgICAgY3VycmVudEVsZW1lbnQucG9zaXRpb25fZW5kID0gdG9wU3RhcnRMaW5lMiArIGxpbmVCZXR3ZWVuRWxlbWVudHM7XG5cbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeSA9IHRvcCArIGRpc3RhbmNlRWxlbWVudFRvV2FpdDtcbiAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeCA9IGxlZnQ7XG4gICAgICAgICAgZGVsZXRlIGN1cnJlbnRFbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5hdHRyaWJ1dGVTdmdEO1xuICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5zdWJDb2RlT2ZFbGVtZW50ICE9PSBjYW52YXNDb25maWdSZWFkb25seSgpLlRZUEVfRUxFTUVOVF9FWElUKSB7XG4gICAgICAgICAgICBjdXJyZW50RWxlbWVudC5ub2RlT3RoZXJDb25maWcuYXR0cmlidXRlU3ZnRCA9IGBNICR7bGVmdH0gJHt0b3BTdGFydExpbmUyfSBsIDAgJHtjYW52YXNDb25maWdSZWFkb25seSgpLldBSVRfVE9fRUxFTUVOVH1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gc3RhcnQgY8OhYyBlbGVtZW50IGPDsyBuaMOhbmhcbiAgICAgIGNvbnN0IGhhbGYgPSBNYXRoLmNlaWwoY3VycmVudEVsZW1lbnQuYnJhbmNoZXMubGVuZ3RoIC8gMik7XG4gICAgICBjb25zdCBhYm92ZUhhbGYgPSBjdXJyZW50RWxlbWVudC5icmFuY2hlcy5zbGljZSgwLCBoYWxmKTtcbiAgICAgIGNvbnN0IHVuZGVySGFsZiA9IGN1cnJlbnRFbGVtZW50LmJyYW5jaGVzLnNsaWNlKGhhbGYpO1xuICAgICAgbGV0IGJyYWNoTWlkZGxlOiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChhYm92ZUhhbGYubGVuZ3RoICE9PSB1bmRlckhhbGYubGVuZ3RoKSB7XG4gICAgICAgIGJyYWNoTWlkZGxlID0gYWJvdmVIYWxmLnBvcCgpO1xuICAgICAgfVxuXG4gICAgICAvLyBUw41OSCBDSEnhu4BVIENhbyBU4buQSSDEkEEgQ+G7pkEgTkjDgU5IXG4gICAgICBjb25zdCBtYXhIZWlnaHRCcmFuY2ggPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgIH07XG5cbiAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JDb29yZGluYXRlc1V0aWwuY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChjdXJyZW50RWxlbWVudCwgbWF4SGVpZ2h0QnJhbmNoKTtcbiAgICAgIGN1cnJlbnRFbGVtZW50Lm1heEhlaWdodEJyYW5jaCA9IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG4gICAgICBjb25zdCBtYXhXaWR0aEJyYWNoTWlkZGxlID0geyB3aWR0aDogMCwgYWJvdmVXaWR0aDogMCwgdW5kZXJXaWR0aDogMCB9O1xuICAgICAgY29uc3QgbGluZUZvcm1FbGVtZW50VG9CcmFuY2hpbmcgPSAoY3VycmVudEVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSDtcblxuICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYWNoTWlkZGxlLmVsZW1lbnRzLCBtYXhXaWR0aEJyYWNoTWlkZGxlKTtcbiAgICAgICAgYnJhY2hNaWRkbGUud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhY2hNaWRkbGUud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhY2hNaWRkbGUuYWJvdmVXaWR0aCxcbiAgICAgICAgICB1bmRlcjogbWF4V2lkdGhCcmFjaE1pZGRsZS51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBNb0xpYkRpYWdyYW1DYWxjdWxhdG9yQnJhbmNoVXRpbC5kcmF3U3RyYWlnaHRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGJyYWNoTWlkZGxlLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjb25maWcpO1xuICAgICAgfVxuXG4gICAgICBsZXQgaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCA9IGZhbHNlO1xuICAgICAgY29uc3QgYWJvdmVIYWxmUmV2ZXJzZSA9IGFib3ZlSGFsZi5zbGljZSgpLnJldmVyc2UoKTtcblxuICAgICAgYWJvdmVIYWxmUmV2ZXJzZS5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2g/Lmxlbmd0aCB8fCAhIWZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyYW5jaC5vblRoZVNpZGUgPSAnYWJvdmUnO1xuICAgICAgICBjb25zdCBtYXhXaWR0aEJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBuZ2FuZyDEkeG7gyBjw6FjaCBuaMOhbmggdHLDqm4gb3IgZMaw4bubaVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRvcldpZHRoQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgbWF4V2lkdGhCcmFuY2gpO1xuICAgICAgICBicmFuY2gud2lkdGhCcmFuY2ggPSB7XG4gICAgICAgICAgd2lkdGg6IG1heFdpZHRoQnJhbmNoLndpZHRoLFxuICAgICAgICAgIGFib3ZlOiBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoLFxuICAgICAgICAgIHVuZGVyOiBtYXhXaWR0aEJyYW5jaC51bmRlcldpZHRoLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBicmFuY2hQcmUgPSBhYm92ZUhhbGZSZXZlcnNlW2luZGV4QnJhbmNoIC0gMV07XG5cbiAgICAgICAgbGV0IGxpbmVCZXR3ZWVuQnJhbmNoID0gbWF4V2lkdGhCcmFuY2gudW5kZXJXaWR0aCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG5cbiAgICAgICAgaWYgKGJyYW5jaFByZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFuY2hQcmUud2lkdGhCcmFuY2g/LndpZHRoID8/IDApICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICAgIGxpbmVCZXR3ZWVuQnJhbmNoICs9IChicmFjaE1pZGRsZS53aWR0aEJyYW5jaD8uYWJvdmUgPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5ow6FuaCB0csOhaVxuXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLmxlZnRMaW5lKGxlZnQsIGxpbmVGb3JtRWxlbWVudFRvQnJhbmNoaW5nLCB0b3AsIGxpbmVCZXR3ZWVuQnJhbmNoLCBicmFuY2gsIG1heEhlaWdodEJyYW5jaC5oZWlnaHQsIGN1cnJlbnRFbGVtZW50LCBjb25maWcpO1xuICAgICAgfSk7XG5cbiAgICAgIHVuZGVySGFsZi5mb3JFYWNoKChicmFuY2gsIGluZGV4QnJhbmNoKSA9PiB7XG4gICAgICAgIGlmICghaGFzTmV4dFNhbWVQYXJlbnRFbGVtZW50TmV4dCkge1xuICAgICAgICAgIGNvbnN0IGZsYXRFbGVtZW50T25CcmFuY2g6IElEaWFncmFtRWxlbWVudFtdID0gW107XG5cbiAgICAgICAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRPbkJyYW5jaCk7XG5cbiAgICAgICAgICBoYXNOZXh0U2FtZVBhcmVudEVsZW1lbnROZXh0ID0gIWZsYXRFbGVtZW50T25CcmFuY2g/Lmxlbmd0aCB8fCAhIWZsYXRFbGVtZW50T25CcmFuY2guZmluZCgoaXRlbSkgPT4gaXRlbS5uZXh0X2lkID09PSBjdXJyZW50RWxlbWVudC5uZXh0X2lkKTtcbiAgICAgICAgfVxuICAgICAgICBicmFuY2gub25UaGVTaWRlID0gJ3VuZGVyJztcbiAgICAgICAgY29uc3QgbWF4V2lkdGhCcmFuY2ggPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07IC8vIHTDrW5oIGNoaeG7gXUgY2FvIMSR4buDIGPDoWNoIG5ow6FuaCB0csOqbiBvciBkxrDhu5tpXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCBtYXhXaWR0aEJyYW5jaCk7XG4gICAgICAgIGJyYW5jaC53aWR0aEJyYW5jaCA9IHtcbiAgICAgICAgICB3aWR0aDogbWF4V2lkdGhCcmFuY2gud2lkdGgsXG4gICAgICAgICAgYWJvdmU6IG1heFdpZHRoQnJhbmNoLmFib3ZlV2lkdGgsXG4gICAgICAgICAgdW5kZXI6IG1heFdpZHRoQnJhbmNoLnVuZGVyV2lkdGgsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGJyYW5jaFByZSA9IHVuZGVySGFsZltpbmRleEJyYW5jaCAtIDFdO1xuICAgICAgICBsZXQgbGluZUJldHdlZW5CcmFuY2ggPSBtYXhXaWR0aEJyYW5jaC5hYm92ZVdpZHRoICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMjtcblxuICAgICAgICBpZiAoYnJhbmNoUHJlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYW5jaFByZS53aWR0aEJyYW5jaD8ud2lkdGggPz8gMCkgKyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGJyYWNoTWlkZGxlKSB7XG4gICAgICAgICAgbGluZUJldHdlZW5CcmFuY2ggKz0gKGJyYWNoTWlkZGxlLndpZHRoQnJhbmNoPy51bmRlciA/PyAwKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDI7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuaMOhbmggcGjhuqNpXG4gICAgICAgIE1vTGliRGlhZ3JhbUNhbGN1bGF0b3JCcmFuY2hVdGlsLnJpZ2h0TGluZShsZWZ0LCBsaW5lRm9ybUVsZW1lbnRUb0JyYW5jaGluZywgdG9wLCBsaW5lQmV0d2VlbkJyYW5jaCwgYnJhbmNoLCBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0LCBjdXJyZW50RWxlbWVudCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gU2V0IHRyYW5zbGF0ZVggdsOgIHRyYW5zbGF0ZVkgxJHhu4MgY8OzIHRo4buDIHJlbmRlciBub2Rlc1xuICAgIHRoaXMuc2V0VHJhbnNsYXRlUG9zaXRpb25zKGVsZW1lbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdHJhbnNsYXRlWCB2w6AgdHJhbnNsYXRlWSB04burIHNwZWNpZmljX3ggdsOgIHNwZWNpZmljX3kgY2hvIHThuqV0IGPhuqMgZWxlbWVudHMgKGJhbyBn4buTbSBicmFuY2hlcylcbiAgICovXG4gIHByaXZhdGUgc3RhdGljIHNldFRyYW5zbGF0ZVBvc2l0aW9ucyhlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIC8vIFNldCBwb3NpdGlvbiBjaG8gZWxlbWVudCBjaMOtbmhcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWCA9IGVsZW1lbnQuc3BlY2lmaWNfeDtcbiAgICAgIGVsZW1lbnQudHJhbnNsYXRlWSA9IGVsZW1lbnQuc3BlY2lmaWNfeTtcblxuICAgICAgLy8gU2V0IHBvc2l0aW9uIGNobyBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICBpZiAoZWxlbWVudC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0WCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG5cbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWCA9IChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgZWxlbWVudC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGVsZW1lbnQubm9kZU90aGVyQ29uZmlnLnNwZWNpZmljX3k7XG4gICAgICB9XG5cbiAgICAgIC8vIFJlY3Vyc2l2ZWx5IHNldCBwb3NpdGlvbnMgY2hvIGVsZW1lbnRzIHRyb25nIGJyYW5jaGVzXG4gICAgICBpZiAoZWxlbWVudC5icmFuY2hlcyAmJiBlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgICAgICAvLyBTZXQgcG9zaXRpb24gY2hvIGJyYW5jaCBub2RlT3RoZXJDb25maWcgbuG6v3UgY8OzXG4gICAgICAgICAgaWYgKGJyYW5jaC5ub2RlT3RoZXJDb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY193aWR0aCA/PyAwKSAvIDI7XG4gICAgICAgICAgICBicmFuY2gubm9kZU90aGVyQ29uZmlnLnRyYW5zbGF0ZVggPSAoYnJhbmNoLm5vZGVPdGhlckNvbmZpZy5zcGVjaWZpY194ID8/IDApIC0gb2Zmc2V0WDtcbiAgICAgICAgICAgIGJyYW5jaC5ub2RlT3RoZXJDb25maWcudHJhbnNsYXRlWSA9IGJyYW5jaC5ub2RlT3RoZXJDb25maWcuc3BlY2lmaWNfeTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBzZXQgcG9zaXRpb25zIGNobyBlbGVtZW50cyB0cm9uZyBicmFuY2hcbiAgICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLnNldFRyYW5zbGF0ZVBvc2l0aW9ucyhicmFuY2guZWxlbWVudHMpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgY2FsY3VsYXRvck1heEJyYW5jaEhlaWdodChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIG1heEhlaWdodEJyYW5jaDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBsaW5lQnJhbmNoTm9IYXNFbGVtZW50ID0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dJRFRIX0RFRkFVTFRfQlJBTkNIX1dIRU5fTk9UX0VMRU1FTlQ7XG5cbiAgICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IGxpbmVCcmFuY2hOb0hhc0VsZW1lbnQgPiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0ID8gbGluZUJyYW5jaE5vSGFzRWxlbWVudCA6IG1heEhlaWdodEJyYW5jaC5oZWlnaHQ7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCB0b3RhbCA9IHtcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgfTtcblxuICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgdG90YWwpO1xuICAgICAgbWF4SGVpZ2h0QnJhbmNoLmhlaWdodCA9IHRvdGFsLmhlaWdodCA+IG1heEhlaWdodEJyYW5jaC5oZWlnaHQgPyB0b3RhbC5oZWlnaHQgOiBtYXhIZWlnaHRCcmFuY2guaGVpZ2h0O1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHBsdXNIZWlnaHRFbGVtZW50SW5CcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdLCB0b3RhbDogeyBoZWlnaHQ6IG51bWJlciB9KSB7XG4gICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgY29uc3QgbWFyZ2luID0gIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCA/IGNoZWNrRWxlbWVudEdldEhlaWdodChlbGVtZW50Lm5vZGVPdGhlckNvbmZpZykgOiBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIO1xuXG4gICAgICB0b3RhbC5oZWlnaHQgKz0gKGVsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0ID8/IDApICsgbWFyZ2luO1xuICAgICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdG90YWwuaGVpZ2h0ICs9IDY0OyAvLyB04burIGNoaeG7gXUgxJHGsOG7nW5nIHRo4bqzbmcgbmdhbmcgeHXhu5FuZyDEkeG6v24gbmjDoW5oIMSR4bqndSB0acOqblxuICAgICAgY29uc3QgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2ggPSB7XG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgIH07XG5cbiAgICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICAgIGNvbnN0IGhlaWdodEluQnJhbmNoID0geyBoZWlnaHQ6IDAgfTtcblxuICAgICAgICBoZWlnaHRJbkJyYW5jaC5oZWlnaHQgKz0gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUX0JSQU5DSF9UT19FTEVNRU5UX0ZJUlNUICsgMjA7IC8vIMSRxrDhu51uZyBjb25nIGvhur90IHRow7pjIG5ow6FuaCArIDEwcHggxJHGsOG7nW5nIGNvbmdcbiAgICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgIGhlaWdodEluQnJhbmNoLmhlaWdodCArPSBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0lEVEhfREVGQVVMVF9CUkFOQ0hfV0hFTl9OT1RfRUxFTUVOVDtcblxuICAgICAgICAgIGlmICh0aGVNb3N0RWxlbWVudHNJbkJyYW5jaC5oZWlnaHQgPCBoZWlnaHRJbkJyYW5jaC5oZWlnaHQpIHtcbiAgICAgICAgICAgIHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodCA9IGhlaWdodEluQnJhbmNoLmhlaWdodDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wbHVzSGVpZ2h0RWxlbWVudEluQnJhbmNoKGJyYW5jaC5lbGVtZW50cywgaGVpZ2h0SW5CcmFuY2gpO1xuICAgICAgICBpZiAodGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0IDwgaGVpZ2h0SW5CcmFuY2guaGVpZ2h0KSB7XG4gICAgICAgICAgdGhlTW9zdEVsZW1lbnRzSW5CcmFuY2guaGVpZ2h0ID0gaGVpZ2h0SW5CcmFuY2guaGVpZ2h0O1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgdG90YWwuaGVpZ2h0ICs9IHRoZU1vc3RFbGVtZW50c0luQnJhbmNoLmhlaWdodDtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBjYWxjdWxhdG9yV2lkdGhCcmFuY2goZWxlbWVudHM6IElEaWFncmFtRWxlbWVudFtdIHwgdW5kZWZpbmVkLCBtYXhXaWR0aDogeyB3aWR0aDogbnVtYmVyOyBhYm92ZVdpZHRoOiBudW1iZXI7IHVuZGVyV2lkdGg6IG51bWJlciB9LCBsb2c/OiBib29sZWFuKSB7XG4gICAgaWYgKCFlbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICBjb25zdCB3aWR0aCA9IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuREVGQVVMVF9CUkFOQ0hfV0hFTl9OT19FTEVNRU5UO1xuXG4gICAgICBtYXhXaWR0aC53aWR0aCA9IHdpZHRoO1xuICAgICAgbWF4V2lkdGguYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgIG1heFdpZHRoLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhXaWR0aEluRWxlbWVudHMgPSB7IHdpZHRoOiAwLCBhYm92ZVdpZHRoOiAwLCB1bmRlcldpZHRoOiAwIH07XG5cbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICAvLyB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSB04burbmcgZWxlbWVudCAxLCB2w6wgY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIHRo4bqxbmcgY8OzIHRo4buDIGtow6FjIG5oYXVcbiAgICAgICAgaWYgKChlbGVtZW50LnNwZWNpZmljX3dpZHRoID8/IDApIDwgbWF4V2lkdGhJbkVsZW1lbnRzLndpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwO1xuXG4gICAgICAgIG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCA9IHdpZHRoO1xuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCA9IHdpZHRoIC8gMjtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3Qgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTtcbiAgICAgIGNvbnN0IHdpZHRoID0gZWxlbWVudC5zcGVjaWZpY193aWR0aCA/PyAwO1xuXG4gICAgICBpZiAod2lkdGggPiB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLndpZHRoKSB7XG4gICAgICAgIHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2gud2lkdGggPSB3aWR0aDtcbiAgICAgICAgd2lkdGhFbGVtZW50SW5jbHVkZUJyYW5jaC5hYm92ZVdpZHRoID0gd2lkdGggLyAyO1xuICAgICAgICB3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLnVuZGVyV2lkdGggPSB3aWR0aCAvIDI7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbGYgPSBNYXRoLmNlaWwoZWxlbWVudC5icmFuY2hlcy5sZW5ndGggLyAyKTtcbiAgICAgIGNvbnN0IGFib3ZlSGFsZiA9IGVsZW1lbnQuYnJhbmNoZXMuc2xpY2UoMCwgaGFsZik7XG4gICAgICBjb25zdCB1bmRlckhhbGYgPSBlbGVtZW50LmJyYW5jaGVzLnNsaWNlKGhhbGYpO1xuICAgICAgbGV0IGJyYWNoTWlkZGxlO1xuXG4gICAgICBpZiAoYWJvdmVIYWxmLmxlbmd0aCAhPT0gdW5kZXJIYWxmLmxlbmd0aCkge1xuICAgICAgICBicmFjaE1pZGRsZSA9IGFib3ZlSGFsZi5wb3AoKTtcbiAgICAgIH1cbiAgICAgIGlmIChicmFjaE1pZGRsZSkge1xuICAgICAgICBicmFjaE1pZGRsZS5vblRoZVNpZGUgPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICAgIGFib3ZlSGFsZi5mb3JFYWNoKChicmFuY2gpID0+IChicmFuY2gub25UaGVTaWRlID0gJ2Fib3ZlJykpO1xuICAgICAgdW5kZXJIYWxmLmZvckVhY2goKGJyYW5jaCkgPT4gKGJyYW5jaC5vblRoZVNpZGUgPSAndW5kZXInKSk7XG5cbiAgICAgIC8vIHTDrW5oIGNoaeG7gXUgY2FvIGPhu6dhIHThu6tuZyBuaMOhbmggMSwgcuG7k2kgdMOtbmggdOG7lW5nID0+IHNvIHPDoW5oIHbhu5tpIGNoaeG7gXUgY2FvIHhlbSBlbGVtZW50IGPDsyBuaMOhbmggbsOgbyBjYW8gbmjhuqV0IHRow6wgbOG6pXlcbiAgICAgIGNvbnN0IHdpZHRoQnJhbmNoID0geyB3aWR0aDogMCwgYWJvdmVXaWR0aDogMCwgdW5kZXJXaWR0aDogMCB9O1xuXG4gICAgICBlbGVtZW50LmJyYW5jaGVzLmZvckVhY2goKGJyYW5jaCkgPT4ge1xuICAgICAgICBjb25zdCB3aWR0aCA9IHsgd2lkdGg6IDAsIGFib3ZlV2lkdGg6IDAsIHVuZGVyV2lkdGg6IDAgfTsgLy8gdMOtbmggY2hp4buBdSBjYW8gY+G7p2EgdOG7q25nIG5ow6FuaCAxXG5cbiAgICAgICAgdGhpcy5jYWxjdWxhdG9yV2lkdGhCcmFuY2goYnJhbmNoLmVsZW1lbnRzLCB3aWR0aCwgbG9nKTtcbiAgICAgICAgc3dpdGNoIChicmFuY2gub25UaGVTaWRlKSB7XG4gICAgICAgICAgY2FzZSAnYWJvdmUnOlxuICAgICAgICAgICAgd2lkdGhCcmFuY2guYWJvdmVXaWR0aCArPSB3aWR0aC53aWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAndW5kZXInOlxuICAgICAgICAgICAgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCArPSB3aWR0aC53aWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGggKz0gd2lkdGguYWJvdmVXaWR0aDtcbiAgICAgICAgICAgIHdpZHRoQnJhbmNoLnVuZGVyV2lkdGggKz0gd2lkdGgudW5kZXJXaWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFyZ2luQmV0d2VlbkJyYW5jaCA9IChlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCAtIDEpICogY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUO1xuXG4gICAgICB3aWR0aEJyYW5jaC5hYm92ZVdpZHRoICs9IG1hcmdpbkJldHdlZW5CcmFuY2ggLyAyO1xuICAgICAgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCArPSBtYXJnaW5CZXR3ZWVuQnJhbmNoIC8gMjtcbiAgICAgIGNvbnN0IG1heEFib3ZlV2lkdGggPSBNYXRoLm1heCh3aWR0aEVsZW1lbnRJbmNsdWRlQnJhbmNoLmFib3ZlV2lkdGgsIHdpZHRoQnJhbmNoLmFib3ZlV2lkdGgpO1xuICAgICAgY29uc3QgbWF4VW5kZXJXaWR0aCA9IE1hdGgubWF4KHdpZHRoRWxlbWVudEluY2x1ZGVCcmFuY2gudW5kZXJXaWR0aCwgd2lkdGhCcmFuY2gudW5kZXJXaWR0aCk7XG5cbiAgICAgIGlmIChtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCA8IG1heEFib3ZlV2lkdGgpIHtcbiAgICAgICAgbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGggPSBtYXhBYm92ZVdpZHRoO1xuICAgICAgfVxuICAgICAgaWYgKG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoIDwgbWF4VW5kZXJXaWR0aCkge1xuICAgICAgICBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aCA9IG1heFVuZGVyV2lkdGg7XG4gICAgICB9XG5cbiAgICAgIG1heFdpZHRoSW5FbGVtZW50cy53aWR0aCA9IG1heFdpZHRoSW5FbGVtZW50cy5hYm92ZVdpZHRoICsgbWF4V2lkdGhJbkVsZW1lbnRzLnVuZGVyV2lkdGg7XG4gICAgfSk7XG5cbiAgICBtYXhXaWR0aC53aWR0aCArPSBtYXhXaWR0aEluRWxlbWVudHMuYWJvdmVXaWR0aCArIG1heFdpZHRoSW5FbGVtZW50cy51bmRlcldpZHRoO1xuICAgIG1heFdpZHRoLmFib3ZlV2lkdGggKz0gbWF4V2lkdGhJbkVsZW1lbnRzLmFib3ZlV2lkdGg7XG4gICAgbWF4V2lkdGgudW5kZXJXaWR0aCArPSBtYXhXaWR0aEluRWxlbWVudHMudW5kZXJXaWR0aDtcbiAgfVxufVxuXG5jb25zdCBjaGVja0VsZW1lbnRHZXRIZWlnaHQgPSAoaGFzV2FpdENvbmZpZz86IElEaWFncmFtRWxlbWVudCkgPT4ge1xuICBpZiAoaGFzV2FpdENvbmZpZykge1xuICAgIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkRJU1RBTkNFX1RPX1dBSVQgKyBnZXRIZWlnaHRXYWl0Q29uZmlnKGhhc1dhaXRDb25maWcpICsgY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5XQUlUX1RPX0VMRU1FTlQ7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX01BUkdJTl9ERUZBVUxUO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERpc3RhbmNlRnJvbUJyYW5jaFRvRmlyc3RCbG9jayA9IChoYXNXYWl0Q29uZmlnPzogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGlmIChoYXNXYWl0Q29uZmlnKSB7XG4gICAgcmV0dXJuIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfVE9fV0FJVCArIGdldEhlaWdodFdhaXRDb25maWcoaGFzV2FpdENvbmZpZykgKyBjYW52YXNDb25maWdSZWFkb25seSgpLldBSVRfVE9fRUxFTUVOVDtcbiAgfVxuXG4gIHJldHVybiBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfTUFSR0lOX0RFRkFVTFRfQlJBTkNIX1RPX0VMRU1FTlRfRklSU1Q7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0SGVpZ2h0V2FpdENvbmZpZyA9IChoYXNXYWl0Q29uZmlnPzogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGlmIChoYXNXYWl0Q29uZmlnKSB7XG4gICAgcmV0dXJuIChoYXNXYWl0Q29uZmlnLnNwZWNpZmljX2hlaWdodCA/PyBjYW52YXNDb25maWdSZWFkb25seSgpLkVMRU1FTlRfV0FJVF9ERUZBVUxUKSArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU7XG4gIH1cblxuICByZXR1cm4gY2FudmFzQ29uZmlnUmVhZG9ubHkoKS5FTEVNRU5UX1dBSVRfREVGQVVMVCArIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRElTVEFOQ0VfV0FJVF9UT19ORVhUX0xJTkU7XG59O1xuXG5leHBvcnQgY29uc3QgY2hlY2tNYXhMZWZ0ID0gKGNvbmZpZzogSURhdGFEaWFncmFtQ29uZmlnU3ZnLCBzcGVjaWZpY194OiBudW1iZXIgfCB1bmRlZmluZWQsIHBvc2l0aW9uTWF4TGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGxldCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvbk1heExlZnQ7XG5cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSAwICYmIHNwZWNpZmljX3ggJiYgc3BlY2lmaWNfeCA+IDAgJiYgc3BlY2lmaWNfeCA8IDUwKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSAtNTA7XG4gIH1cblxuICBpZiAoc3BlY2lmaWNfeCAmJiBzcGVjaWZpY194IDwgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24pIHtcbiAgICBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IHNwZWNpZmljX3g7XG4gIH1cblxuICBpZiAocG9zaXRpb25NYXhMZWZ0ICYmIHBvc2l0aW9uTWF4TGVmdCA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBwb3NpdGlvbk1heExlZnQ7XG4gIH1cbiAgaWYgKG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uID09PSBjb25maWcucG9zaXRpb25NYXhMZWZ0KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbmZpZy5wb3NpdGlvbk1heExlZnQgPSBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbjtcbn07XG5cbmV4cG9ydCBjb25zdCBjaGVja01heFRvcCA9IChjb25maWc6IElEYXRhRGlhZ3JhbUNvbmZpZ1N2Zywgc3BlY2lmaWNfeTogbnVtYmVyIHwgdW5kZWZpbmVkLCBwb3NpdGlvbk1heFRvcDogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB7XG4gIGxldCBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IGNvbmZpZy5wb3NpdGlvbk1heFRvcDtcblxuICBpZiAobnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPT09IDAgJiYgc3BlY2lmaWNfeSAmJiBzcGVjaWZpY195ID4gMCAmJiBzcGVjaWZpY195IDwgMTAwKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY195IC0gMTIwO1xuICB9XG5cbiAgaWYgKHNwZWNpZmljX3kgJiYgc3BlY2lmaWNfeSA8IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uKSB7XG4gICAgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24gPSBzcGVjaWZpY195O1xuICB9XG5cbiAgaWYgKHBvc2l0aW9uTWF4VG9wICYmIHBvc2l0aW9uTWF4VG9wIDwgbnVtYmVyVHJhbnNsYXRlUG9zaXRpb24pIHtcbiAgICBudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9IHBvc2l0aW9uTWF4VG9wO1xuICB9XG4gIGlmIChudW1iZXJUcmFuc2xhdGVQb3NpdGlvbiA9PT0gY29uZmlnLnBvc2l0aW9uTWF4VG9wKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbmZpZy5wb3NpdGlvbk1heFRvcCA9IG51bWJlclRyYW5zbGF0ZVBvc2l0aW9uO1xufTtcbiJdfQ==
|
|
@@ -2,18 +2,18 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
2
2
|
static buildFlatElement(elements, flatElementsContainer) {
|
|
3
3
|
elements.forEach((element) => {
|
|
4
4
|
flatElementsContainer.push(element);
|
|
5
|
-
if (!element.branches
|
|
5
|
+
if (!element.branches?.length) {
|
|
6
6
|
return;
|
|
7
7
|
}
|
|
8
8
|
LibsUiDiagramDrawCanvasUtil.flatElementHasBranch(element, flatElementsContainer);
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
static flatElementHasBranch(element, flatElementsContainer) {
|
|
12
|
-
if (!element.branches
|
|
12
|
+
if (!element.branches?.length) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
element.branches.forEach((branch) => {
|
|
16
|
-
if (!branch.elements
|
|
16
|
+
if (!branch.elements?.length) {
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
LibsUiDiagramDrawCanvasUtil.buildFlatElement(branch.elements, flatElementsContainer);
|
|
@@ -28,11 +28,11 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
28
28
|
* data.count: số lượng branch có next_id đến idElement
|
|
29
29
|
*/
|
|
30
30
|
static getBranchContainerAndCountElementHasNextIdToElement(element, idElement, data, flowFlatElements) {
|
|
31
|
-
if (!element
|
|
31
|
+
if (!element?.branches) {
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
34
|
element.branches.forEach((branch) => {
|
|
35
|
-
if (!branch.elements
|
|
35
|
+
if (!branch.elements?.length) {
|
|
36
36
|
data.count++;
|
|
37
37
|
data.branchContainer = branch;
|
|
38
38
|
data.branchEmpty++;
|
|
@@ -42,7 +42,7 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
42
42
|
if (!lastElement.next_id) {
|
|
43
43
|
return;
|
|
44
44
|
}
|
|
45
|
-
if (lastElement.branches
|
|
45
|
+
if (lastElement.branches?.length) {
|
|
46
46
|
const dataOfLastElement = this.getDefaultStorageBranchEndCount();
|
|
47
47
|
LibsUiDiagramDrawCanvasUtil.getBranchContainerAndCountElementHasNextIdToElement(lastElement, idElement, dataOfLastElement, flowFlatElements);
|
|
48
48
|
if (!dataOfLastElement.count) {
|
|
@@ -52,7 +52,8 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
52
52
|
data.count++;
|
|
53
53
|
data.branchContainer = branch;
|
|
54
54
|
if (dataOfLastElement.count === 1) {
|
|
55
|
-
|
|
55
|
+
data.branchContainer = dataOfLastElement.branchContainer;
|
|
56
|
+
return;
|
|
56
57
|
}
|
|
57
58
|
return;
|
|
58
59
|
}
|
|
@@ -62,7 +63,6 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
62
63
|
}
|
|
63
64
|
data.count++;
|
|
64
65
|
data.branchContainer = branch;
|
|
65
|
-
return;
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
static getElementHasCurrentBranchOrCurrentElement(currentBranch, currentElement, flatElements) {
|
|
@@ -70,15 +70,15 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
70
70
|
currentBranch: undefined,
|
|
71
71
|
element: undefined,
|
|
72
72
|
};
|
|
73
|
-
if (!flatElements
|
|
73
|
+
if (!flatElements?.length || (!currentBranch && !currentElement)) {
|
|
74
74
|
return data;
|
|
75
75
|
}
|
|
76
76
|
if (!currentElement) {
|
|
77
77
|
data.currentBranch = currentBranch;
|
|
78
|
-
data.element = flatElements.find((el) =>
|
|
78
|
+
data.element = flatElements.find((el) => !!el.branches?.find((branch) => branch === currentBranch));
|
|
79
79
|
return data;
|
|
80
80
|
}
|
|
81
|
-
const elementsHasBranches = flatElements.filter((item) => item.branches
|
|
81
|
+
const elementsHasBranches = flatElements.filter((item) => item.branches?.length);
|
|
82
82
|
if (!elementsHasBranches) {
|
|
83
83
|
return data;
|
|
84
84
|
}
|
|
@@ -88,7 +88,7 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
88
88
|
return data;
|
|
89
89
|
}
|
|
90
90
|
for (const branch of branches) {
|
|
91
|
-
if (!branch.elements
|
|
91
|
+
if (!branch.elements?.length) {
|
|
92
92
|
continue;
|
|
93
93
|
}
|
|
94
94
|
if (branch.elements.find((item) => item.id === currentElement.id)) {
|
|
@@ -107,11 +107,11 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
107
107
|
containerElement.splice(+index, 1);
|
|
108
108
|
return true;
|
|
109
109
|
}
|
|
110
|
-
if (!elementOfIndex.branches
|
|
110
|
+
if (!elementOfIndex.branches?.length) {
|
|
111
111
|
continue;
|
|
112
112
|
}
|
|
113
113
|
for (const branch of elementOfIndex.branches) {
|
|
114
|
-
if (!branch.elements
|
|
114
|
+
if (!branch.elements?.length) {
|
|
115
115
|
continue;
|
|
116
116
|
}
|
|
117
117
|
if (this.findAndDeleteElementFromContainer(branch.elements, elementDelete)) {
|
|
@@ -127,7 +127,7 @@ export class LibsUiDiagramDrawCanvasUtil {
|
|
|
127
127
|
return;
|
|
128
128
|
}
|
|
129
129
|
for (const item of flatElementHasBranch) {
|
|
130
|
-
if (!item.branches
|
|
130
|
+
if (!item.branches?.length) {
|
|
131
131
|
continue;
|
|
132
132
|
}
|
|
133
133
|
for (const branch of item.branches) {
|
|
@@ -159,11 +159,11 @@ export const findAndDeleteElementFromContainer = (containerElement, elementDelet
|
|
|
159
159
|
containerElement.splice(+index, 1);
|
|
160
160
|
return true;
|
|
161
161
|
}
|
|
162
|
-
if (!elementOfIndex.branches
|
|
162
|
+
if (!elementOfIndex.branches?.length) {
|
|
163
163
|
continue;
|
|
164
164
|
}
|
|
165
165
|
for (const branch of elementOfIndex.branches) {
|
|
166
|
-
if (!branch.elements
|
|
166
|
+
if (!branch.elements?.length) {
|
|
167
167
|
continue;
|
|
168
168
|
}
|
|
169
169
|
if (findAndDeleteElementFromContainer(branch.elements, elementDelete)) {
|
|
@@ -173,4 +173,4 @@ export const findAndDeleteElementFromContainer = (containerElement, elementDelet
|
|
|
173
173
|
}
|
|
174
174
|
return false;
|
|
175
175
|
};
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FudmFzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBZ0MsRUFBRSxxQkFBNkM7UUFDckcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ2xELE9BQU87WUFDVCxDQUFDO1lBQ0QsMkJBQTJCLENBQUMsb0JBQW9CLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDbkYsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLE9BQXdCLEVBQUUscUJBQTZDO1FBQ2pHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsRCxPQUFPO1FBQ1QsQ0FBQztRQUNELE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNoRCxPQUFPO1lBQ1QsQ0FBQztZQUNELDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUE2QixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDNUcsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lB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RSxFQUFFLENBQUM7WUFDM0MsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRW5DLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoRSxTQUFTO1FBQ1gsQ0FBQztRQUVELEtBQUssTUFBTSxNQUFNLElBQUksY0FBYyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDaEQsU0FBUztZQUNYLENBQUM7WUFDRCxJQUFJLGlDQUFpQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLEVBQUUsQ0FBQztnQkFDdEUsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElCcmFuY2hFbmRDb3VudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvY2FudmFzLmludGVyZmFjZSc7XG5pbXBvcnQgeyBJRGlhZ3JhbUVsZW1lbnQsIElEaWFncmFtRWxlbWVudEJyYW5jaCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY2xhc3MgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsIHtcbiAgc3RhdGljIGJ1aWxkRmxhdEVsZW1lbnQoZWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4sIGZsYXRFbGVtZW50c0NvbnRhaW5lcjogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGZsYXRFbGVtZW50c0NvbnRhaW5lci5wdXNoKGVsZW1lbnQpO1xuICAgICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzIHx8ICFlbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBMaWJzVWlEaWFncmFtRHJhd0NhbnZhc1V0aWwuZmxhdEVsZW1lbnRIYXNCcmFuY2goZWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBmbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGZsYXRFbGVtZW50c0NvbnRhaW5lcjogQXJyYXk8SURpYWdyYW1FbGVtZW50Pikge1xuICAgIGlmICghZWxlbWVudC5icmFuY2hlcyB8fCAhZWxlbWVudC5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5idWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cyBhcyBJRGlhZ3JhbUVsZW1lbnRbXSwgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXREZWZhdWx0U3RvcmFnZUJyYW5jaEVuZENvdW50KCk6IElCcmFuY2hFbmRDb3VudCB7XG4gICAgcmV0dXJuIHsgYnJhbmNoQ29udGFpbmVyOiB1bmRlZmluZWQsIGNvdW50OiAwLCBicmFuY2hFbXB0eTogMCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIGRhdGE6IHPhu60gZOG7pW5nIHJlZmVyZW5jZSBPYmplY3QgdHlwZSBuw6puIGNvdW50IHPhur0gxJHhu4cgcXV5IGNobyDEkeG6v24gbm9kZSBjdeG7kWkgY8O5bmdcbiAgICogZGF0YS5icmFuY2hDb250YWluZXI6IGJyYW5jaCBjdeG7kWkgY8O5bmcgY+G7p2EgZWxlbWVudCBraMO0bmcgbmV4dCDEkeG6v24gaWRFbGVtZW50XG4gICAqIGRhdGEuY291bnQ6IHPhu5EgbMaw4bujbmcgYnJhbmNoIGPDsyBuZXh0X2lkIMSR4bq/biBpZEVsZW1lbnRcbiAgICovXG4gIHN0YXRpYyBnZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQoZWxlbWVudDogSURpYWdyYW1FbGVtZW50LCBpZEVsZW1lbnQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgZGF0YTogSUJyYW5jaEVuZENvdW50LCBmbG93RmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LmJyYW5jaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICBkYXRhLmNvdW50Kys7XG4gICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgICAgICBkYXRhLmJyYW5jaEVtcHR5Kys7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbGFzdEVsZW1lbnQgPSBicmFuY2guZWxlbWVudHNbYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAoIWxhc3RFbGVtZW50Lm5leHRfaWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGxhc3RFbGVtZW50LmJyYW5jaGVzICYmIGxhc3RFbGVtZW50LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhT2ZMYXN0RWxlbWVudCA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQobGFzdEVsZW1lbnQgYXMgSURpYWdyYW1FbGVtZW50LCBpZEVsZW1lbnQsIGRhdGFPZkxhc3RFbGVtZW50LCBmbG93RmxhdEVsZW1lbnRzKTtcbiAgICAgICAgaWYgKCFkYXRhT2ZMYXN0RWxlbWVudC5jb3VudCkge1xuICAgICAgICAgIGxhc3RFbGVtZW50Lm5leHRfaWQgPSAnJztcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLmNvdW50Kys7XG4gICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgICAgICBpZiAoZGF0YU9mTGFzdEVsZW1lbnQuY291bnQgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gKGRhdGEuYnJhbmNoQ29udGFpbmVyID0gZGF0YU9mTGFzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG5leHRPZkxhc3RFbGVtZW50ID0gZmxvd0ZsYXRFbGVtZW50cy5maW5kKChlbCkgPT4gZWwuaWQgPT09IGxhc3RFbGVtZW50Lm5leHRfaWQpO1xuXG4gICAgICBpZiAobmV4dE9mTGFzdEVsZW1lbnQgJiYgbmV4dE9mTGFzdEVsZW1lbnQuaWQgIT09IGlkRWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkYXRhLmNvdW50Kys7XG4gICAgICBkYXRhLmJyYW5jaENvbnRhaW5lciA9IGJyYW5jaDtcblxuICAgICAgcmV0dXJuO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudChjdXJyZW50QnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjdXJyZW50RWxlbWVudD86IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzPzogQXJyYXk8SURpYWdyYW1FbGVtZW50Pik6IHsgY3VycmVudEJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgZWxlbWVudD86IElEaWFncmFtRWxlbWVudCB9IHtcbiAgICBjb25zdCBkYXRhOiB7IGN1cnJlbnRCcmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IGVsZW1lbnQ/OiBJRGlhZ3JhbUVsZW1lbnQgfSA9IHtcbiAgICAgIGN1cnJlbnRCcmFuY2g6IHVuZGVmaW5lZCxcbiAgICAgIGVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKCFmbGF0RWxlbWVudHMgfHwgIWZsYXRFbGVtZW50cy5sZW5ndGggfHwgKCFjdXJyZW50QnJhbmNoICYmICFjdXJyZW50RWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH1cblxuICAgIGlmICghY3VycmVudEVsZW1lbnQpIHtcbiAgICAgIGRhdGEuY3VycmVudEJyYW5jaCA9IGN1cnJlbnRCcmFuY2g7XG4gICAgICBkYXRhLmVsZW1lbnQgPSBmbGF0RWxlbWVudHMuZmluZCgoZWwpID0+IGVsLmJyYW5jaGVzICYmICEhZWwuYnJhbmNoZXMuZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzSGFzQnJhbmNoZXMgPSBmbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmJyYW5jaGVzICYmIGl0ZW0uYnJhbmNoZXMubGVuZ3RoKTtcblxuICAgIGlmICghZWxlbWVudHNIYXNCcmFuY2hlcykge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50c0hhc0JyYW5jaGVzKSB7XG4gICAgICBjb25zdCBicmFuY2hlcyA9IGVsZW1lbnQuYnJhbmNoZXM7XG5cbiAgICAgIGlmICghYnJhbmNoZXMpIHtcbiAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBicmFuY2hlcykge1xuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChicmFuY2guZWxlbWVudHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gY3VycmVudEVsZW1lbnQuaWQpKSB7XG4gICAgICAgICAgZGF0YS5jdXJyZW50QnJhbmNoID0gYnJhbmNoO1xuICAgICAgICAgIGRhdGEuZWxlbWVudCA9IGVsZW1lbnQ7XG5cbiAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgc3RhdGljIGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihjb250YWluZXJFbGVtZW50OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnQpOiBib29sZWFuIHtcbiAgICBmb3IgKGNvbnN0IGluZGV4IGluIGNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRPZkluZGV4ID0gY29udGFpbmVyRWxlbWVudFtpbmRleF07XG5cbiAgICAgIGlmIChlbGVtZW50T2ZJbmRleC5pZCA9PT0gZWxlbWVudERlbGV0ZS5pZCkge1xuICAgICAgICBjb250YWluZXJFbGVtZW50LnNwbGljZSgraW5kZXgsIDEpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKCFlbGVtZW50T2ZJbmRleC5icmFuY2hlcyB8fCAhZWxlbWVudE9mSW5kZXguYnJhbmNoZXMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBlbGVtZW50T2ZJbmRleC5icmFuY2hlcykge1xuICAgICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cyB8fCAhYnJhbmNoLmVsZW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJyYW5jaE9mRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZywgZmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50VHlwZVdvcmtmbG93OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudEhhc0JyYW5jaCA9IGZsYXRFbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudF90eXBlID09PSBlbGVtZW50VHlwZVdvcmtmbG93KTtcblxuICAgIGlmICghZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIGlmICghaXRlbS5icmFuY2hlcyB8fCAhaXRlbS5icmFuY2hlcy5sZW5ndGgpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGJyYW5jaCBvZiBpdGVtLmJyYW5jaGVzKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYnJhbmNoLmVsZW1lbnRzLmZpbmRJbmRleCgoZWwpID0+IGVsLmlkID09PSBlbGVtZW50SWQpO1xuXG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBicmFuY2g7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBnZXREZWZhdWx0Q29uZmlnQ29uc3RpdHVlbnRCcmFuY2hlcyA9IChjb2RlOiBzdHJpbmcsIGRhdGFEZWZhdWx0OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgZGF0YURlZmF1bHQuYnJhbmNoZXMgPSBbXG4gICAge1xuICAgICAgZWxlbWVudHM6IFtdLFxuICAgIH0sXG4gICAge1xuICAgICAgZWxlbWVudHM6IFtdLFxuICAgIH0sXG4gIF07XG5cbiAgcmV0dXJuIGRhdGFEZWZhdWx0O1xufTtcblxuZXhwb3J0IGNvbnN0IGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lciA9IChjb250YWluZXJFbGVtZW50OiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50RGVsZXRlOiBJRGlhZ3JhbUVsZW1lbnQpOiBib29sZWFuID0+IHtcbiAgZm9yIChjb25zdCBpbmRleCBpbiBjb250YWluZXJFbGVtZW50KSB7XG4gICAgY29uc3QgZWxlbWVudE9mSW5kZXggPSBjb250YWluZXJFbGVtZW50W2luZGV4XTtcblxuICAgIGlmIChlbGVtZW50T2ZJbmRleC5pZCA9PT0gZWxlbWVudERlbGV0ZS5pZCkge1xuICAgICAgY29udGFpbmVyRWxlbWVudC5zcGxpY2UoK2luZGV4LCAxKTtcblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICghZWxlbWVudE9mSW5kZXguYnJhbmNoZXMgfHwgIWVsZW1lbnRPZkluZGV4LmJyYW5jaGVzLmxlbmd0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBicmFuY2ggb2YgZWxlbWVudE9mSW5kZXguYnJhbmNoZXMpIHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzIHx8ICFicmFuY2guZWxlbWVudHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FudmFzLnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL3NlcnZpY2VzL2RpYWdyYW0tZHJhdy9zcmMvdXRpbHMvY2FudmFzLnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLDJCQUEyQjtJQUN0QyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsUUFBZ0MsRUFBRSxxQkFBNkM7UUFDckcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzNCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDOUIsT0FBTztZQUNULENBQUM7WUFDRCwyQkFBMkIsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsb0JBQW9CLENBQUMsT0FBd0IsRUFBRSxxQkFBNkM7UUFDakcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDOUIsT0FBTztRQUNULENBQUM7UUFDRCxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO2dCQUM3QixPQUFPO1lBQ1QsQ0FBQztZQUNELDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLENBQUMsK0JBQStCO1FBQ3BDLE9BQU8sRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUs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Q0FBaUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RFLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJQnJhbmNoRW5kQ291bnQgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2NhbnZhcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSURpYWdyYW1FbGVtZW50LCBJRGlhZ3JhbUVsZW1lbnRCcmFuY2ggfSBmcm9tICcuLi9pbnRlcmZhY2VzL2RpYWdyYW0uaW50ZXJmYWNlJztcblxuZXhwb3J0IGNsYXNzIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbCB7XG4gIHN0YXRpYyBidWlsZEZsYXRFbGVtZW50KGVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBmbGF0RWxlbWVudHNDb250YWluZXI6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBmbGF0RWxlbWVudHNDb250YWluZXIucHVzaChlbGVtZW50KTtcbiAgICAgIGlmICghZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5mbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50LCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZsYXRFbGVtZW50SGFzQnJhbmNoKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSB7XG4gICAgaWYgKCFlbGVtZW50LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZWxlbWVudC5icmFuY2hlcy5mb3JFYWNoKChicmFuY2gpID0+IHtcbiAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTGlic1VpRGlhZ3JhbURyYXdDYW52YXNVdGlsLmJ1aWxkRmxhdEVsZW1lbnQoYnJhbmNoLmVsZW1lbnRzLCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldERlZmF1bHRTdG9yYWdlQnJhbmNoRW5kQ291bnQoKTogSUJyYW5jaEVuZENvdW50IHtcbiAgICByZXR1cm4geyBicmFuY2hDb250YWluZXI6IHVuZGVmaW5lZCwgY291bnQ6IDAsIGJyYW5jaEVtcHR5OiAwIH07XG4gIH1cblxuICAvKipcbiAgICogZGF0YTogc+G7rSBk4bulbmcgcmVmZXJlbmNlIE9iamVjdCB0eXBlIG7Dqm4gY291bnQgc+G6vSDEkeG7hyBxdXkgY2hvIMSR4bq/biBub2RlIGN14buRaSBjw7luZ1xuICAgKiBkYXRhLmJyYW5jaENvbnRhaW5lcjogYnJhbmNoIGN14buRaSBjw7luZyBj4bunYSBlbGVtZW50IGtow7RuZyBuZXh0IMSR4bq/biBpZEVsZW1lbnRcbiAgICogZGF0YS5jb3VudDogc+G7kSBsxrDhu6NuZyBicmFuY2ggY8OzIG5leHRfaWQgxJHhur9uIGlkRWxlbWVudFxuICAgKi9cbiAgc3RhdGljIGdldEJyYW5jaENvbnRhaW5lckFuZENvdW50RWxlbWVudEhhc05leHRJZFRvRWxlbWVudChlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQsIGlkRWxlbWVudDogc3RyaW5nIHwgdW5kZWZpbmVkLCBkYXRhOiBJQnJhbmNoRW5kQ291bnQsIGZsb3dGbGF0RWxlbWVudHM6IEFycmF5PElEaWFncmFtRWxlbWVudD4pIHtcbiAgICBpZiAoIWVsZW1lbnQ/LmJyYW5jaGVzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIGRhdGEuY291bnQrKztcbiAgICAgICAgZGF0YS5icmFuY2hDb250YWluZXIgPSBicmFuY2g7XG4gICAgICAgIGRhdGEuYnJhbmNoRW1wdHkrKztcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBsYXN0RWxlbWVudCA9IGJyYW5jaC5lbGVtZW50c1ticmFuY2guZWxlbWVudHMubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICghbGFzdEVsZW1lbnQubmV4dF9pZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAobGFzdEVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBkYXRhT2ZMYXN0RWxlbWVudCA9IHRoaXMuZ2V0RGVmYXVsdFN0b3JhZ2VCcmFuY2hFbmRDb3VudCgpO1xuXG4gICAgICAgIExpYnNVaURpYWdyYW1EcmF3Q2FudmFzVXRpbC5nZXRCcmFuY2hDb250YWluZXJBbmRDb3VudEVsZW1lbnRIYXNOZXh0SWRUb0VsZW1lbnQobGFzdEVsZW1lbnQsIGlkRWxlbWVudCwgZGF0YU9mTGFzdEVsZW1lbnQsIGZsb3dGbGF0RWxlbWVudHMpO1xuICAgICAgICBpZiAoIWRhdGFPZkxhc3RFbGVtZW50LmNvdW50KSB7XG4gICAgICAgICAgbGFzdEVsZW1lbnQubmV4dF9pZCA9ICcnO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuY291bnQrKztcbiAgICAgICAgZGF0YS5icmFuY2hDb250YWluZXIgPSBicmFuY2g7XG4gICAgICAgIGlmIChkYXRhT2ZMYXN0RWxlbWVudC5jb3VudCA9PT0gMSkge1xuICAgICAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gZGF0YU9mTGFzdEVsZW1lbnQuYnJhbmNoQ29udGFpbmVyO1xuXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV4dE9mTGFzdEVsZW1lbnQgPSBmbG93RmxhdEVsZW1lbnRzLmZpbmQoKGVsKSA9PiBlbC5pZCA9PT0gbGFzdEVsZW1lbnQubmV4dF9pZCk7XG5cbiAgICAgIGlmIChuZXh0T2ZMYXN0RWxlbWVudCAmJiBuZXh0T2ZMYXN0RWxlbWVudC5pZCAhPT0gaWRFbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGRhdGEuY291bnQrKztcbiAgICAgIGRhdGEuYnJhbmNoQ29udGFpbmVyID0gYnJhbmNoO1xuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGdldEVsZW1lbnRIYXNDdXJyZW50QnJhbmNoT3JDdXJyZW50RWxlbWVudChjdXJyZW50QnJhbmNoPzogSURpYWdyYW1FbGVtZW50QnJhbmNoLCBjdXJyZW50RWxlbWVudD86IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzPzogQXJyYXk8SURpYWdyYW1FbGVtZW50Pik6IHsgY3VycmVudEJyYW5jaD86IElEaWFncmFtRWxlbWVudEJyYW5jaDsgZWxlbWVudD86IElEaWFncmFtRWxlbWVudCB9IHtcbiAgICBjb25zdCBkYXRhOiB7IGN1cnJlbnRCcmFuY2g/OiBJRGlhZ3JhbUVsZW1lbnRCcmFuY2g7IGVsZW1lbnQ/OiBJRGlhZ3JhbUVsZW1lbnQgfSA9IHtcbiAgICAgIGN1cnJlbnRCcmFuY2g6IHVuZGVmaW5lZCxcbiAgICAgIGVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgICB9O1xuXG4gICAgaWYgKCFmbGF0RWxlbWVudHM/Lmxlbmd0aCB8fCAoIWN1cnJlbnRCcmFuY2ggJiYgIWN1cnJlbnRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFjdXJyZW50RWxlbWVudCkge1xuICAgICAgZGF0YS5jdXJyZW50QnJhbmNoID0gY3VycmVudEJyYW5jaDtcbiAgICAgIGRhdGEuZWxlbWVudCA9IGZsYXRFbGVtZW50cy5maW5kKChlbCkgPT4gISFlbC5icmFuY2hlcz8uZmluZCgoYnJhbmNoKSA9PiBicmFuY2ggPT09IGN1cnJlbnRCcmFuY2gpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzSGFzQnJhbmNoZXMgPSBmbGF0RWxlbWVudHMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmJyYW5jaGVzPy5sZW5ndGgpO1xuXG4gICAgaWYgKCFlbGVtZW50c0hhc0JyYW5jaGVzKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzSGFzQnJhbmNoZXMpIHtcbiAgICAgIGNvbnN0IGJyYW5jaGVzID0gZWxlbWVudC5icmFuY2hlcztcblxuICAgICAgaWYgKCFicmFuY2hlcykge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGJyYW5jaGVzKSB7XG4gICAgICAgIGlmICghYnJhbmNoLmVsZW1lbnRzPy5sZW5ndGgpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYnJhbmNoLmVsZW1lbnRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IGN1cnJlbnRFbGVtZW50LmlkKSkge1xuICAgICAgICAgIGRhdGEuY3VycmVudEJyYW5jaCA9IGJyYW5jaDtcbiAgICAgICAgICBkYXRhLmVsZW1lbnQgPSBlbGVtZW50O1xuXG4gICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHN0YXRpYyBmaW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIoY29udGFpbmVyRWxlbWVudDogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZWxlbWVudERlbGV0ZTogSURpYWdyYW1FbGVtZW50KTogYm9vbGVhbiB7XG4gICAgZm9yIChjb25zdCBpbmRleCBpbiBjb250YWluZXJFbGVtZW50KSB7XG4gICAgICBjb25zdCBlbGVtZW50T2ZJbmRleCA9IGNvbnRhaW5lckVsZW1lbnRbaW5kZXhdO1xuXG4gICAgICBpZiAoZWxlbWVudE9mSW5kZXguaWQgPT09IGVsZW1lbnREZWxldGUuaWQpIHtcbiAgICAgICAgY29udGFpbmVyRWxlbWVudC5zcGxpY2UoK2luZGV4LCAxKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICghZWxlbWVudE9mSW5kZXguYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgZWxlbWVudE9mSW5kZXguYnJhbmNoZXMpIHtcbiAgICAgICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEJyYW5jaE9mRWxlbWVudChlbGVtZW50SWQ6IHN0cmluZywgZmxhdEVsZW1lbnRzOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+LCBlbGVtZW50VHlwZVdvcmtmbG93OiBzdHJpbmcpIHtcbiAgICBjb25zdCBmbGF0RWxlbWVudEhhc0JyYW5jaCA9IGZsYXRFbGVtZW50cy5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0uZWxlbWVudF90eXBlID09PSBlbGVtZW50VHlwZVdvcmtmbG93KTtcblxuICAgIGlmICghZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZmxhdEVsZW1lbnRIYXNCcmFuY2gpIHtcbiAgICAgIGlmICghaXRlbS5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBicmFuY2ggb2YgaXRlbS5icmFuY2hlcykge1xuICAgICAgICBjb25zdCBpbmRleCA9IGJyYW5jaC5lbGVtZW50cy5maW5kSW5kZXgoKGVsKSA9PiBlbC5pZCA9PT0gZWxlbWVudElkKTtcblxuICAgICAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYnJhbmNoO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdENvbmZpZ0NvbnN0aXR1ZW50QnJhbmNoZXMgPSAoY29kZTogc3RyaW5nLCBkYXRhRGVmYXVsdDogSURpYWdyYW1FbGVtZW50KSA9PiB7XG4gIGRhdGFEZWZhdWx0LmJyYW5jaGVzID0gW1xuICAgIHtcbiAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIGVsZW1lbnRzOiBbXSxcbiAgICB9LFxuICBdO1xuXG4gIHJldHVybiBkYXRhRGVmYXVsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBmaW5kQW5kRGVsZXRlRWxlbWVudEZyb21Db250YWluZXIgPSAoY29udGFpbmVyRWxlbWVudDogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZWxlbWVudERlbGV0ZTogSURpYWdyYW1FbGVtZW50KTogYm9vbGVhbiA9PiB7XG4gIGZvciAoY29uc3QgaW5kZXggaW4gY29udGFpbmVyRWxlbWVudCkge1xuICAgIGNvbnN0IGVsZW1lbnRPZkluZGV4ID0gY29udGFpbmVyRWxlbWVudFtpbmRleF07XG5cbiAgICBpZiAoZWxlbWVudE9mSW5kZXguaWQgPT09IGVsZW1lbnREZWxldGUuaWQpIHtcbiAgICAgIGNvbnRhaW5lckVsZW1lbnQuc3BsaWNlKCtpbmRleCwgMSk7XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIWVsZW1lbnRPZkluZGV4LmJyYW5jaGVzPy5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgYnJhbmNoIG9mIGVsZW1lbnRPZkluZGV4LmJyYW5jaGVzKSB7XG4gICAgICBpZiAoIWJyYW5jaC5lbGVtZW50cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpbmRBbmREZWxldGVFbGVtZW50RnJvbUNvbnRhaW5lcihicmFuY2guZWxlbWVudHMsIGVsZW1lbnREZWxldGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn07XG4iXX0=
|
|
@@ -2,18 +2,18 @@ import { canvasConfigReadonly } from '../diagram-draw.service';
|
|
|
2
2
|
export const buildFlatElement = (elements, flatElementsContainer) => {
|
|
3
3
|
elements.forEach((element) => {
|
|
4
4
|
flatElementsContainer.push(element);
|
|
5
|
-
if (!element.branches
|
|
5
|
+
if (!element.branches?.length) {
|
|
6
6
|
return;
|
|
7
7
|
}
|
|
8
8
|
flatElementHasBranch(element, flatElementsContainer);
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
const flatElementHasBranch = (element, flatElementsContainer) => {
|
|
12
|
-
if (!element.branches
|
|
12
|
+
if (!element.branches?.length) {
|
|
13
13
|
return;
|
|
14
14
|
}
|
|
15
15
|
element.branches.forEach((branch) => {
|
|
16
|
-
if (!branch.elements
|
|
16
|
+
if (!branch.elements?.length) {
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
19
|
buildFlatElement(branch.elements, flatElementsContainer);
|
|
@@ -51,4 +51,4 @@ export const applyElementStyle = (el, element) => {
|
|
|
51
51
|
el.style.zIndex = '1';
|
|
52
52
|
el.style.willChange = 'transform';
|
|
53
53
|
};
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
54
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlhZ3JhbS51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9zZXJ2aWNlcy9kaWFncmFtLWRyYXcvc3JjL3V0aWxzL2RpYWdyYW0udXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUcvRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLFFBQWdDLEVBQUUscUJBQTZDLEVBQUUsRUFBRTtJQUNsSCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7UUFDM0IscUJBQXFCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQzlCLE9BQU87UUFDVCxDQUFDO1FBQ0Qsb0JBQW9CLENBQUMsT0FBTyxFQUFFLHFCQUFxQixDQUFDLENBQUM7SUFDdkQsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLG9CQUFvQixHQUFHLENBQUMsT0FBd0IsRUFBRSxxQkFBNkMsRUFBRSxFQUFFO0lBQ3ZHLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQzlCLE9BQU87SUFDVCxDQUFDO0lBQ0QsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM3QixPQUFPO1FBQ1QsQ0FBQztRQUNELGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQztBQUVGLDhEQUE4RDtBQUM5RCxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRyxDQUFDLFVBQXVDLEVBQUUsVUFBc0MsRUFBRSxpQkFBeUIsRUFBRSxLQUFjLEVBQUUsRUFBRTtJQUNySyxVQUFVLEVBQUUsWUFBWSxDQUFDLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBQ2pELFVBQVUsRUFBRSxZQUFZLENBQUMsUUFBUSxFQUFFLElBQUksS0FBSyxJQUFJLG9CQUFvQixFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO0lBQ25HLFVBQVUsRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLFVBQVUsRUFBRSxZQUFZLENBQUMsY0FBYyxFQUFFLG9CQUFvQixFQUFFLENBQUMsd0JBQXdCLENBQUMsQ0FBQztJQUMxRixVQUFVLEVBQUUsYUFBYSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUM7QUFFRiw4REFBOEQ7QUFDOUQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsQ0FBQyxVQUF1QyxFQUFFLEVBQUU7SUFDaEYsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU87SUFDVCxDQUFDO0lBQ0QsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBRWhFLDhEQUE4RDtJQUM5RCxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBVSxFQUFFLEVBQUU7UUFDOUIsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE9BQU87UUFDVCxDQUFDO1FBQ0QsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2pCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxFQUFlLEVBQUUsT0FBd0IsRUFBRSxFQUFFO0lBQzdFLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQztJQUMvQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO0lBQ3BCLEVBQUUsQ0FBQyxLQUFLLENBQUMsU0FBUyxHQUFHLGFBQWEsT0FBTyxDQUFDLFVBQVUsT0FBTyxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUM7SUFDbkYsRUFBRSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUM7SUFDL0MsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsZUFBZSxJQUFJLENBQUM7SUFDakQsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsR0FBRyxDQUFDO0lBQ3RCLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLFdBQVcsQ0FBQztBQUNwQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYW52YXNDb25maWdSZWFkb25seSB9IGZyb20gJy4uL2RpYWdyYW0tZHJhdy5zZXJ2aWNlJztcbmltcG9ydCB7IElEaWFncmFtRWxlbWVudCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZGlhZ3JhbS5pbnRlcmZhY2UnO1xuXG5leHBvcnQgY29uc3QgYnVpbGRGbGF0RWxlbWVudCA9IChlbGVtZW50czogQXJyYXk8SURpYWdyYW1FbGVtZW50PiwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSA9PiB7XG4gIGVsZW1lbnRzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICBmbGF0RWxlbWVudHNDb250YWluZXIucHVzaChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQuYnJhbmNoZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmbGF0RWxlbWVudEhhc0JyYW5jaChlbGVtZW50LCBmbGF0RWxlbWVudHNDb250YWluZXIpO1xuICB9KTtcbn07XG5cbmNvbnN0IGZsYXRFbGVtZW50SGFzQnJhbmNoID0gKGVsZW1lbnQ6IElEaWFncmFtRWxlbWVudCwgZmxhdEVsZW1lbnRzQ29udGFpbmVyOiBBcnJheTxJRGlhZ3JhbUVsZW1lbnQ+KSA9PiB7XG4gIGlmICghZWxlbWVudC5icmFuY2hlcz8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGVsZW1lbnQuYnJhbmNoZXMuZm9yRWFjaCgoYnJhbmNoKSA9PiB7XG4gICAgaWYgKCFicmFuY2guZWxlbWVudHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBidWlsZEZsYXRFbGVtZW50KGJyYW5jaC5lbGVtZW50cywgZmxhdEVsZW1lbnRzQ29udGFpbmVyKTtcbiAgfSk7XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZVN2Z0FuZEFwcGVuZCA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQsIGVsZW1lbnRTdmc6IFNWR1BhdGhFbGVtZW50IHwgdW5kZWZpbmVkLCBzdmdBdHRyaWJ1dGVQYXRoRDogc3RyaW5nLCBjb2xvcj86IHN0cmluZykgPT4ge1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2QnLCBzdmdBdHRyaWJ1dGVQYXRoRCk7XG4gIGVsZW1lbnRTdmc/LnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgYCMke2NvbG9yID8/IGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX0NPTE9SfWApO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCAnbm9uZScpO1xuICBlbGVtZW50U3ZnPy5zZXRBdHRyaWJ1dGUoJ3N0cm9rZS13aWR0aCcsIGNhbnZhc0NvbmZpZ1JlYWRvbmx5KCkuRUxFTUVOVF9TVkdfU1RST0tFX1dJRFRIKTtcbiAgc3ZnRWxlbWVudD8ubmF0aXZlRWxlbWVudC5hcHBlbmRDaGlsZChlbGVtZW50U3ZnKTtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgY29uc3QgY2FudmFzUmVtb3ZlQ2hpbGRJblN2ZyA9IChzdmdFbGVtZW50OiBFbGVtZW50UmVmPGFueT4gfCB1bmRlZmluZWQpID0+IHtcbiAgaWYgKCFzdmdFbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuID0gQXJyYXkuZnJvbShzdmdFbGVtZW50Py5uYXRpdmVFbGVtZW50LmNoaWxkcmVuKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogYW55KSA9PiB7XG4gICAgaWYgKGNoaWxkLnRhZ05hbWUgIT09ICdwYXRoJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjaGlsZC5yZW1vdmUoKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgYXBwbHlFbGVtZW50U3R5bGUgPSAoZWw6IEhUTUxFbGVtZW50LCBlbGVtZW50OiBJRGlhZ3JhbUVsZW1lbnQpID0+IHtcbiAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICBlbC5zdHlsZS50b3AgPSAnMCc7XG4gIGVsLnN0eWxlLmxlZnQgPSAnMCc7XG4gIGVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUoJHtlbGVtZW50LnRyYW5zbGF0ZVh9cHgsICR7ZWxlbWVudC50cmFuc2xhdGVZfXB4KWA7XG4gIGVsLnN0eWxlLndpZHRoID0gYCR7ZWxlbWVudC5zcGVjaWZpY193aWR0aH1weGA7XG4gIGVsLnN0eWxlLmhlaWdodCA9IGAke2VsZW1lbnQuc3BlY2lmaWNfaGVpZ2h0fXB4YDtcbiAgZWwuc3R5bGUuekluZGV4ID0gJzEnO1xuICBlbC5zdHlsZS53aWxsQ2hhbmdlID0gJ3RyYW5zZm9ybSc7XG59O1xuIl19
|