@libs-ui/components-draw-line 0.2.306-4 → 0.2.307-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/draw-line.directive.d.ts +4 -3
- package/draw-line.interface.d.ts +1 -1
- package/esm2022/draw-line.directive.mjs +107 -78
- package/esm2022/draw-line.interface.mjs +1 -1
- package/esm2022/util/calculator-branch.util.mjs +6 -6
- package/esm2022/util/calculator-diretion-element.until.mjs +46 -46
- package/esm2022/util/connect-navigation-new-element.util.mjs +45 -43
- package/esm2022/util/line-connect-bottom-left.until.mjs +25 -25
- package/fesm2022/libs-ui-components-draw-line.mjs +209 -178
- package/fesm2022/libs-ui-components-draw-line.mjs.map +1 -1
- package/package.json +2 -2
- package/util/calculator-branch.util.d.ts +5 -5
- package/util/calculator-diretion-element.until.d.ts +1 -1
- package/util/connect-navigation-new-element.util.d.ts +1 -1
- package/util/line-connect-bottom-left.until.d.ts +1 -1
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { range } from
|
|
2
|
-
import { MoCanvasCalculatorBranchUtil } from
|
|
3
|
-
import { MoCanvasConnectNavigationNewElementUtil } from
|
|
1
|
+
import { range } from '@libs-ui/utils';
|
|
2
|
+
import { MoCanvasCalculatorBranchUtil } from './calculator-branch.util';
|
|
3
|
+
import { MoCanvasConnectNavigationNewElementUtil } from './connect-navigation-new-element.util';
|
|
4
4
|
export class MoCanvasCalculatorDirectionElementUtil {
|
|
5
5
|
static checkUpDownLeftRight(firstPoint, endPoint, direction) {
|
|
6
|
-
const distance = (
|
|
6
|
+
const distance = (firstPoint ?? 0) - (endPoint ?? 0);
|
|
7
7
|
if (distance === 0) {
|
|
8
8
|
return 'center';
|
|
9
9
|
}
|
|
@@ -70,17 +70,16 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
70
70
|
}
|
|
71
71
|
/**Tránh khối phía bên phải */
|
|
72
72
|
static byPassElementOnRightSide(startX, startY, endY, lineCurve, elementBlockRoad, directionX, separatedPoints, key, coordLX) {
|
|
73
|
-
const topElementBlockRoad =
|
|
73
|
+
const topElementBlockRoad = elementBlockRoad.y ?? 0;
|
|
74
74
|
const bottomElementBlockRoad = (elementBlockRoad.y ?? 0) + (elementBlockRoad.height ?? 0);
|
|
75
75
|
const directionY = this.checkUpDownLeftRight(startY, endY, 'y');
|
|
76
76
|
const Q1 = this.drawLineQ({ x: startX, y: startY ?? 0 }, `${directionX}-${directionY === 'under' ? 'under' : 'above'}`, lineCurve, lineCurve);
|
|
77
77
|
const L1 = {
|
|
78
78
|
x: Q1.x ?? 0,
|
|
79
|
-
y:
|
|
79
|
+
y: directionY === 'under' ? bottomElementBlockRoad : topElementBlockRoad,
|
|
80
80
|
};
|
|
81
81
|
if (MoCanvasConnectNavigationNewElementUtil.START_MODE !== 'bottom-left') {
|
|
82
|
-
if ((directionY === 'under' && bottomElementBlockRoad - (Q1.y ?? 0) <= 0)
|
|
83
|
-
|| (directionY === 'above' && topElementBlockRoad - (Q1.y ?? 0) >= 0)) {
|
|
82
|
+
if ((directionY === 'under' && bottomElementBlockRoad - (Q1.y ?? 0) <= 0) || (directionY === 'above' && topElementBlockRoad - (Q1.y ?? 0) >= 0)) {
|
|
84
83
|
L1.y = Q1.y ?? 0;
|
|
85
84
|
}
|
|
86
85
|
if (Math.abs((L1.y ?? 0) - endY) <= 10) {
|
|
@@ -97,19 +96,19 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
97
96
|
pathByPassQ: `${pathQ1} ${pathQ2}`,
|
|
98
97
|
endPath: {
|
|
99
98
|
x: Q2.x ?? 0,
|
|
100
|
-
y: Q2.y ?? 0
|
|
101
|
-
}
|
|
99
|
+
y: Q2.y ?? 0,
|
|
100
|
+
},
|
|
102
101
|
};
|
|
103
102
|
}
|
|
104
103
|
/**Tránh khối phía bên trên */
|
|
105
104
|
static byPassElementOnTopBottomSide(startX, startY, endX, lineCurve, elementBlockRoad, directionY, separatedPoints, key) {
|
|
106
|
-
const leftElementBlockRoad =
|
|
105
|
+
const leftElementBlockRoad = elementBlockRoad.x ?? 0;
|
|
107
106
|
const rightElementBlockRoad = (elementBlockRoad.x ?? 0) + (elementBlockRoad.width ?? 0);
|
|
108
107
|
const directionX = this.checkUpDownLeftRight(startX, endX, 'x') === 'left' ? 'left' : 'right'; // xem nên tránh sang trái hay phải
|
|
109
108
|
const Q1 = this.drawLineQ({ x: startX, y: startY ?? 0 }, `${directionY}-${directionX}`, lineCurve, lineCurve);
|
|
110
109
|
const L1 = {
|
|
111
|
-
x:
|
|
112
|
-
y: Q1.y ?? 0
|
|
110
|
+
x: directionX === 'left' ? leftElementBlockRoad : rightElementBlockRoad,
|
|
111
|
+
y: Q1.y ?? 0,
|
|
113
112
|
};
|
|
114
113
|
if ((directionX === 'right' && rightElementBlockRoad - (Q1.x ?? 0) <= 0) || (directionX === 'left' && leftElementBlockRoad - (Q1.x ?? 0) >= 0)) {
|
|
115
114
|
L1.x = Q1.x ?? 0;
|
|
@@ -127,8 +126,8 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
127
126
|
pathByPassQ: `${pathQ1} ${pathQ2}`,
|
|
128
127
|
endPath: {
|
|
129
128
|
x: Q2.x ?? 0,
|
|
130
|
-
y: Q2.y ?? 0
|
|
131
|
-
}
|
|
129
|
+
y: Q2.y ?? 0,
|
|
130
|
+
},
|
|
132
131
|
};
|
|
133
132
|
}
|
|
134
133
|
// kiểm tra đường thẳng và khối có cắt nhau không
|
|
@@ -136,15 +135,15 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
136
135
|
const minimumDistanceFromBlock = 8;
|
|
137
136
|
start += minimumDistanceFromBlock + 1; // tránh khối xuất phát vào list
|
|
138
137
|
const listPointsOfLine = range(start, end + 1);
|
|
139
|
-
const elementBlockRoad = obstacleRect.filter(item => {
|
|
138
|
+
const elementBlockRoad = obstacleRect.filter((item) => {
|
|
140
139
|
const left = (item.x ?? 0) - minimumDistanceFromBlock;
|
|
141
140
|
const right = (item.x ?? 0) + (item.width ?? 0) + minimumDistanceFromBlock;
|
|
142
141
|
const top = (item.y ?? 0) - minimumDistanceFromBlock;
|
|
143
142
|
const bottom = (item.y ?? 0) + (item.height ?? 0) + minimumDistanceFromBlock;
|
|
144
|
-
if (direction === 'x' && listPointsOfLine.find(el =>
|
|
143
|
+
if (direction === 'x' && listPointsOfLine.find((el) => left <= el && el <= right) && top <= xOrYOfLine && xOrYOfLine <= bottom) {
|
|
145
144
|
return true;
|
|
146
145
|
}
|
|
147
|
-
if (direction === 'y' && listPointsOfLine.find(el =>
|
|
146
|
+
if (direction === 'y' && listPointsOfLine.find((el) => top <= el && el <= bottom) && left <= xOrYOfLine && xOrYOfLine <= right) {
|
|
148
147
|
return true;
|
|
149
148
|
}
|
|
150
149
|
return false;
|
|
@@ -156,9 +155,9 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
156
155
|
return elementBlockRoad;
|
|
157
156
|
}
|
|
158
157
|
if (direction === 'y') {
|
|
159
|
-
return elementBlockRoad.reduce((a, b) => (Math.abs((
|
|
158
|
+
return elementBlockRoad.reduce((a, b) => (Math.abs((a.y ?? 0) - start) < Math.abs((b.y ?? 0) - start) ? a : b));
|
|
160
159
|
}
|
|
161
|
-
return elementBlockRoad.reduce((a, b) => (Math.abs((
|
|
160
|
+
return elementBlockRoad.reduce((a, b) => (Math.abs((a.x ?? 0) - start) < Math.abs((b.x ?? 0) - start) ? a : b));
|
|
162
161
|
}
|
|
163
162
|
// kiểm tra hướng thẳng vẽ về điểm end xem có bị chắn bởi khối nào không, nếu có thì phải lùi lại điểm end nhé.
|
|
164
163
|
static checkBlocksElementStraightY(startX, startY, endPosition, obstacleRect) {
|
|
@@ -166,7 +165,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
166
165
|
if (!elementBlockRoad || !elementBlockRoad.length) {
|
|
167
166
|
return;
|
|
168
167
|
}
|
|
169
|
-
return elementBlockRoad.reduce((a, b) => (Math.abs(
|
|
168
|
+
return elementBlockRoad.reduce((a, b) => (Math.abs(a.x ?? 0 - startX) < Math.abs(b.x ?? 0 - startX) ? a : b));
|
|
170
169
|
}
|
|
171
170
|
// kiểm tra hướng ngang vẽ về điểm end xem có bị chắn bởi khối nào không, nếu có thì phải lùi lại điểm end nhé.
|
|
172
171
|
static checkBlocksElementX(startX, startY, endPosition, obstacleRect) {
|
|
@@ -174,7 +173,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
174
173
|
if (!elementBlockRoad || !elementBlockRoad.length) {
|
|
175
174
|
return;
|
|
176
175
|
}
|
|
177
|
-
return elementBlockRoad.reduce((a, b) => (Math.abs((
|
|
176
|
+
return elementBlockRoad.reduce((a, b) => (Math.abs((a.y ?? 0) - startY) < Math.abs((b.y ?? 0) - startY) ? a : b));
|
|
178
177
|
}
|
|
179
178
|
// kiểm tra hướng sang phải là tránh khối
|
|
180
179
|
static checkAndAvoidBlocksLeft(startX, startY, lineCurve, endPosition, obstacleRect, separatedPoints) {
|
|
@@ -185,10 +184,10 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
185
184
|
return coordLX;
|
|
186
185
|
}
|
|
187
186
|
const directionX = MoCanvasCalculatorDirectionElementUtil.checkUpDownLeftRight(startX, endPosition.x, 'x');
|
|
188
|
-
const specificXElement = directionX === 'right' ? (elementBlockRoad.x ?? 0) : (
|
|
189
|
-
coordLX.x = specificXElement +
|
|
187
|
+
const specificXElement = directionX === 'right' ? (elementBlockRoad.x ?? 0) : (elementBlockRoad.x ?? 0) + (elementBlockRoad.width ?? 0);
|
|
188
|
+
coordLX.x = specificXElement + MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT / 2 + lineCurve / 2;
|
|
190
189
|
if (directionX === 'right') {
|
|
191
|
-
coordLX.x = specificXElement -
|
|
190
|
+
coordLX.x = specificXElement - MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT / 2 - lineCurve / 2;
|
|
192
191
|
}
|
|
193
192
|
let startXBypassElement = coordLX.x;
|
|
194
193
|
if ((directionX === 'left' && startX - (coordLX.x ?? 0) <= 0) || (directionX === 'right' && startX - (coordLX.x ?? 0) >= 0)) {
|
|
@@ -197,7 +196,8 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
197
196
|
}
|
|
198
197
|
let lineByPassBlock = [];
|
|
199
198
|
let { endPath } = MoCanvasCalculatorDirectionElementUtil.byPassElementOnRightSide(startXBypassElement ?? 0, coordLX.y ?? 0, endPosition.y, lineCurve, elementBlockRoad, directionX, lineByPassBlock, undefined, coordLX.x);
|
|
200
|
-
if (MoCanvasConnectNavigationNewElementUtil.START_MODE === 'bottom-left' && elementBlockRoad.x +
|
|
199
|
+
if (MoCanvasConnectNavigationNewElementUtil.START_MODE === 'bottom-left' && elementBlockRoad.x + elementBlockRoad.width / 2 === endPosition.x && Math.abs(endPosition.y - elementBlockRoad.y) <= 20) {
|
|
200
|
+
// check xem khối chắn có phải là khối đích hay không?
|
|
201
201
|
lineByPassBlock = [];
|
|
202
202
|
const data = MoCanvasCalculatorDirectionElementUtil.byPassElementOnRightSideNewMode(startXBypassElement ?? 0, coordLX.y ?? 0, endPosition.y, lineByPassBlock, undefined, coordLX.x);
|
|
203
203
|
endPath = data.endPath;
|
|
@@ -214,20 +214,20 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
214
214
|
if (!elementBlockRoad) {
|
|
215
215
|
const elementBlockRoadStraightLineY = this.checkBlocksElementStraightY((coordLX.x ?? 0) + 10, coordLX.y ?? 0, endPosition, obstacleRect); // tính điểm end_x dự kiến theo trường hợp đẹp nhất xem nó có chắn bởi khối nào khi kéo xuống không
|
|
216
216
|
if (elementBlockRoadStraightLineY && (elementBlockRoadStraightLineY.x ?? 0) > startX) {
|
|
217
|
-
let toX = (elementBlockRoadStraightLineY.x ?? 0) -
|
|
218
|
-
if ((
|
|
219
|
-
toX = (elementBlockRoadStraightLineY.x ?? 0) - ((
|
|
217
|
+
let toX = (elementBlockRoadStraightLineY.x ?? 0) - MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT / 2 - lineCurve / 2;
|
|
218
|
+
if ((elementBlockRoadStraightLineY?.x ?? 0) - startX < MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT) {
|
|
219
|
+
toX = (elementBlockRoadStraightLineY.x ?? 0) - ((elementBlockRoadStraightLineY?.x ?? 0) - startX) / 2;
|
|
220
220
|
}
|
|
221
221
|
coordLX.x = toX;
|
|
222
222
|
}
|
|
223
223
|
separatedPoints.push({ start: { x: startX, y: startY }, end: coordLX, mode: 'horizontal', id: 'checkAndAvoidBlocks', name: 'end' });
|
|
224
224
|
return {
|
|
225
225
|
path: pathPre ? `${pathPre} L ${coordLX.x} ${coordLX.y}` : `L ${coordLX.x} ${coordLX.y}`,
|
|
226
|
-
endPath: coordLX
|
|
226
|
+
endPath: coordLX,
|
|
227
227
|
};
|
|
228
228
|
}
|
|
229
229
|
const directionX = MoCanvasCalculatorDirectionElementUtil.checkUpDownLeftRight(startX, endPosition.x, 'x');
|
|
230
|
-
coordLX.x = (elementBlockRoad.x ?? 0) -
|
|
230
|
+
coordLX.x = (elementBlockRoad.x ?? 0) - MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT / 2 - lineCurve / 2;
|
|
231
231
|
let separatedPointsByPassElementOnRightSide = [];
|
|
232
232
|
const { pathByPassQ, endPath } = MoCanvasCalculatorDirectionElementUtil.byPassElementOnRightSide(coordLX.x, coordLX.y ?? 0, endPosition.y, lineCurve, elementBlockRoad, directionX, separatedPointsByPassElementOnRightSide, 'checkAndAvoidBlocks', coordLX.x);
|
|
233
233
|
let line = pathPre ? `${pathPre} L ${coordLX.x} ${coordLX.y} ${pathByPassQ}` : `L ${coordLX.x} ${coordLX.y} ${pathByPassQ}`;
|
|
@@ -236,14 +236,14 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
236
236
|
if (!elementBlockRoadPre) {
|
|
237
237
|
const elementBlockRoadStraightLineY = this.checkBlocksElementStraightY((endPosition.x ?? 0) + 10, endPath.y ?? 0, endPosition, obstacleRect);
|
|
238
238
|
if (elementBlockRoadStraightLineY) {
|
|
239
|
-
const XNew = (elementBlockRoadStraightLineY.x ?? 0) -
|
|
239
|
+
const XNew = (elementBlockRoadStraightLineY.x ?? 0) - MoCanvasConnectNavigationNewElementUtil.ELEMENT_MARGIN_BETWEEN_BRANCH_DEFAULT / 2 - lineCurve / 2;
|
|
240
240
|
if (XNew < (endPath.x ?? 0)) {
|
|
241
241
|
separatedPointsByPassElementOnRightSide = [];
|
|
242
242
|
separatedPoints.push({ start: { x: startX, y: startY }, end: coordLX, mode: 'horizontal', id: 'checkAndAvoidBlocks', name: 'u' });
|
|
243
243
|
line = pathPre ? `${pathPre} L ${coordLX.x} ${coordLX.y}` : `L ${coordLX.x} ${coordLX.y}`;
|
|
244
244
|
return {
|
|
245
245
|
path: line,
|
|
246
|
-
endPath: coordLX
|
|
246
|
+
endPath: coordLX,
|
|
247
247
|
};
|
|
248
248
|
}
|
|
249
249
|
}
|
|
@@ -253,7 +253,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
253
253
|
const data = this.checkAndAvoidBlocks(endPath.x ?? 0, endPath.y ?? 0, lineCurve, endPosition, obstacleRect, separatedPoints, `${line}`);
|
|
254
254
|
return {
|
|
255
255
|
path: data.path,
|
|
256
|
-
endPath: data.endPath
|
|
256
|
+
endPath: data.endPath,
|
|
257
257
|
};
|
|
258
258
|
}
|
|
259
259
|
// kiểm tra hướng thẳng và tránh khối
|
|
@@ -264,14 +264,14 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
264
264
|
separatedPoints.push({ start: { x: startX, y: startY }, end: coordLX, mode: 'horizontal', id: 'k' });
|
|
265
265
|
return {
|
|
266
266
|
path: pathPre ?? '',
|
|
267
|
-
endPath: { x: startX, y: startY }
|
|
267
|
+
endPath: { x: startX, y: startY },
|
|
268
268
|
};
|
|
269
269
|
}
|
|
270
270
|
if (!elementBlockRoad) {
|
|
271
271
|
separatedPoints.push({ start: { x: startX, y: startY }, end: coordLX, mode: 'horizontal', id: 'r' });
|
|
272
272
|
return {
|
|
273
273
|
path: pathPre ? `${pathPre} L ${coordLX.x} ${coordLX.y}` : `L ${coordLX.x} ${coordLX.y}`,
|
|
274
|
-
endPath: coordLX
|
|
274
|
+
endPath: coordLX,
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
277
|
const y = directionY === 'above' ? (elementBlockRoad.y ?? 0) + (elementBlockRoad.height ?? 0) : (elementBlockRoad.y ?? 0);
|
|
@@ -283,7 +283,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
283
283
|
const data = this.checkAndAvoidBlocksY(endPath.x ?? 0, endPath.y ?? 0, lineCurve, endPosition, directionY, obstacleRect, separatedPoints, `${line}`);
|
|
284
284
|
return {
|
|
285
285
|
path: data.path,
|
|
286
|
-
endPath: data.endPath
|
|
286
|
+
endPath: data.endPath,
|
|
287
287
|
};
|
|
288
288
|
}
|
|
289
289
|
// kiểm tra hướng thẳng và tránh khối
|
|
@@ -292,11 +292,11 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
292
292
|
const coordLX = { x: startX, y: endPosition.y };
|
|
293
293
|
const elementBlockRoad = MoCanvasCalculatorDirectionElementUtil.checkLinePassBlockHorizontal(startY, endPosition.y, startX, 'y', obstacleRect);
|
|
294
294
|
if (!elementBlockRoad) {
|
|
295
|
-
const elementBlockRoadStraightLineX = MoCanvasCalculatorDirectionElementUtil.checkBlocksElementX(coordLX.x ?? 0,
|
|
295
|
+
const elementBlockRoadStraightLineX = MoCanvasCalculatorDirectionElementUtil.checkBlocksElementX(coordLX.x ?? 0, coordLX.y ?? 0, endPosition, obstacleRect);
|
|
296
296
|
if (elementBlockRoadStraightLineX) {
|
|
297
|
-
const topElementBlockRoad =
|
|
297
|
+
const topElementBlockRoad = elementBlockRoadStraightLineX.y ?? 0;
|
|
298
298
|
const bottomElementBlockRoad = (elementBlockRoadStraightLineX.y ?? 0) + (elementBlockRoadStraightLineX.height ?? 0);
|
|
299
|
-
let toY =
|
|
299
|
+
let toY = directionY === 'under' ? topElementBlockRoad : bottomElementBlockRoad;
|
|
300
300
|
toY = MoCanvasCalculatorBranchUtil.mathOperatorsCalculation(directionY, toY, lineCurve * 2);
|
|
301
301
|
if (toY > startY && MoCanvasConnectNavigationNewElementUtil.START_MODE !== 'bottom-left') {
|
|
302
302
|
coordLX.y = toY;
|
|
@@ -305,11 +305,11 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
305
305
|
separatedPoints.push({ start: { x: startX, y: startY }, end: coordLX, mode: 'horizontal', id: key, name: 'a' });
|
|
306
306
|
return {
|
|
307
307
|
path: pathPre ? `${pathPre} L ${coordLX.x} ${coordLX.y}` : `L ${coordLX.x} ${coordLX.y}`,
|
|
308
|
-
endPath: coordLX
|
|
308
|
+
endPath: coordLX,
|
|
309
309
|
};
|
|
310
310
|
}
|
|
311
311
|
const y = directionY === 'above' ? (elementBlockRoad.y ?? 0) + (elementBlockRoad.height ?? 0) : (elementBlockRoad.y ?? 0);
|
|
312
|
-
const elementBlockRoadStraightLineX = MoCanvasCalculatorDirectionElementUtil.checkBlocksElementX(coordLX.x ?? 0,
|
|
312
|
+
const elementBlockRoadStraightLineX = MoCanvasCalculatorDirectionElementUtil.checkBlocksElementX(coordLX.x ?? 0, coordLX.y ?? 0, endPosition, obstacleRect);
|
|
313
313
|
let ignoreBypassElement = false;
|
|
314
314
|
if (elementBlockRoadStraightLineX && elementBlockRoadStraightLineX.id === elementBlockRoad.id) {
|
|
315
315
|
ignoreBypassElement = true;
|
|
@@ -325,7 +325,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
325
325
|
separatedPoints.push({ start: coordLX, end, mode: 'horizontal', id: key, name: 'c' });
|
|
326
326
|
return {
|
|
327
327
|
path: line,
|
|
328
|
-
endPath: end
|
|
328
|
+
endPath: end,
|
|
329
329
|
};
|
|
330
330
|
}
|
|
331
331
|
end = endPath;
|
|
@@ -334,7 +334,7 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
334
334
|
const data = this.checkAndAvoidBlocksYLeft(end.x ?? 0, end.y ?? 0, lineCurve, endPosition, directionY, obstacleRect, separatedPoints, `${line}`);
|
|
335
335
|
return {
|
|
336
336
|
path: data.path,
|
|
337
|
-
endPath: data.endPath
|
|
337
|
+
endPath: data.endPath,
|
|
338
338
|
};
|
|
339
339
|
}
|
|
340
340
|
static byPassElementOnRightSideNewMode(startX, startY, endY, separatedPoints, key, coordLX) {
|
|
@@ -343,8 +343,8 @@ export class MoCanvasCalculatorDirectionElementUtil {
|
|
|
343
343
|
separatedPoints.push({ start: start, end: end, mode: 'horizontal', id: key, name: 'q2r' });
|
|
344
344
|
return {
|
|
345
345
|
pathByPassQ: ``,
|
|
346
|
-
endPath: end
|
|
346
|
+
endPath: end,
|
|
347
347
|
};
|
|
348
348
|
}
|
|
349
349
|
}
|
|
350
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1kaXJldGlvbi1lbGVtZW50LnVudGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RyYXctbGluZS9zcmMvdXRpbC9jYWxjdWxhdG9yLWRpcmV0aW9uLWVsZW1lbnQudW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBSWhHLE1BQU0sT0FBTyxzQ0FBc0M7SUFDakQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFVBQThCLEVBQUUsUUFBNEIsRUFBRSxTQUFvQjtRQUM1RyxNQUFNLFFBQVEsR0FBRyxDQUFDLENBQUMsVUFBVSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkIsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUNELElBQUksUUFBUSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2pCLE9BQU8sU0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7UUFDOUMsQ0FBQztRQUVELE9BQU8sU0FBUyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBK0IsRUFBRSxNQUFnQyxFQUFFLFVBQWtCLEVBQUUsVUFBa0I7UUFFeEgsTUFBTSxNQUFNLEdBQW9CLEVBQUUsQ0FBQztRQUVuQyxRQUFRLE1BQU0sRUFBRSxDQUFDO1lBQ2Ys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RyxLQUFLLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVyRCxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoSyxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6SSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx1QkFBdUIsRUFBRSxF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QUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXJELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHVCQUF1QixFQUFFLEVBQUUsRUFBRSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvSSxlQUFlLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZKLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksRUFBRSx5QkFBeUIsRUFBRSxFQUFFLEVBQUUsR0FB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QUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUUzRixPQUFPO1lBQ0wsV0FBVyxFQUFFLEVBQUU7WUFDZixPQUFPLEVBQUUsR0FBRztTQUNiLENBQUM7SUFDSixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5nZSB9IGZyb20gXCJAbGlicy11aS91dGlsc1wiO1xuaW1wb3J0IHsgSUNvb3JkaW5hdGVzU3ZnLCBJUG9pbnQsIElQb2ludHMsIElSZWN0IH0gZnJvbSBcIi4uL2RyYXctbGluZS5pbnRlcmZhY2VcIjtcbmltcG9ydCB7IE1vQ2FudmFzQ2FsY3VsYXRvckJyYW5jaFV0aWwgfSBmcm9tIFwiLi9jYWxjdWxhdG9yLWJyYW5jaC51dGlsXCI7XG5pbXBvcnQgeyBNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwgfSBmcm9tIFwiLi9jb25uZWN0LW5hdmlnYXRpb24tbmV3LWVsZW1lbnQudXRpbFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQb3NpdGlvblhZIHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfVxuZXhwb3J0IHR5cGUgQ29ybmVyRGlyZWN0aW9uID0gJ3JpZ2h0LXVuZGVyJyB8ICd1bmRlci1sZWZ0JyB8ICdsZWZ0LWFib3ZlJyB8ICdhYm92ZS1yaWdodCcgfCAndW5kZXItcmlnaHQnIHwgJ3JpZ2h0LWFib3ZlJyB8ICdhYm92ZS1sZWZ0JyB8ICdsZWZ0LXVuZGVyJzsgLy8gdGhlbyBjaGnhu4F1XG5leHBvcnQgY2xhc3MgTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwge1xuICBzdGF0aWMgY2hlY2tVcERvd25MZWZ0UmlnaHQoZmlyc3RQb2ludDogbnVtYmVyIHwgdW5kZWZpbmVkLCBlbmRQb2ludDogbnVtYmVyIHwgdW5kZWZpbmVkLCBkaXJlY3Rpb246ICd4JyB8ICd5Jyk6IHN0cmluZyB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSAoKGZpcnN0UG9pbnQgPz8gMCkgLSAoZW5kUG9pbnQgPz8gMCkpO1xuXG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICd4JyA/ICdsZWZ0JyA6ICdhYm92ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ3gnID8gJ3JpZ2h0JyA6ICd1bmRlcic7XG4gIH1cblxuICBzdGF0aWMgZHJhd0xpbmVRKHN0YXJ0OiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIGNvcm5lcjogQ29ybmVyRGlyZWN0aW9uIHwgc3RyaW5nLCBsaW5lQ3VydmVYOiBudW1iZXIsIGxpbmVDdXJ2ZVk6IG51bWJlcikge1xuXG4gICAgY29uc3QgY29vcmRROiBJQ29vcmRpbmF0ZXNTdmcgPSB7fTtcblxuICAgIHN3aXRjaCAoY29ybmVyKSB7XG4gICAgICBjYXNlICdyaWdodC11bmRlcic6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0LnggKyBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55O1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MTtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTEgKyBsaW5lQ3VydmVZO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAndW5kZXItbGVmdCc6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0Lng7XG4gICAgICAgIGNvb3JkUS55MSA9IHN0YXJ0LnkgKyBsaW5lQ3VydmVZO1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MSAtIGxpbmVDdXJ2ZVg7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdC1hYm92ZSc6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0LnggLSBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55O1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MTtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTEgLSBsaW5lQ3VydmVZO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWJvdmUtcmlnaHQnOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54O1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55IC0gbGluZUN1cnZlWTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDEgKyBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueSA9IGNvb3JkUS55MTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3VuZGVyLXJpZ2h0JzpcbiAgICAgICAgY29vcmRRLngxID0gc3RhcnQueDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueSArIGxpbmVDdXJ2ZVk7XG4gICAgICAgIGNvb3JkUS54ID0gY29vcmRRLngxICsgbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyaWdodC1hYm92ZSc6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0LnggKyBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55O1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MTtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTEgLSBsaW5lQ3VydmVZO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnYWJvdmUtbGVmdCc6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0Lng7XG4gICAgICAgIGNvb3JkUS55MSA9IHN0YXJ0LnkgLSBsaW5lQ3VydmVZO1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MSAtIGxpbmVDdXJ2ZVg7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbGVmdC11bmRlcic6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0LnggLSBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55O1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MTtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTEgKyBsaW5lQ3VydmVZO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvb3JkUTtcbiAgfVxuXG4gIC8qKlRyw6FuaCBraOG7kWkgcGjDrWEgYsOqbiBwaOG6o2kgKi9cbiAgc3RhdGljIGJ5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZShzdGFydFg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIGVuZFk6IG51bWJlciwgbGluZUN1cnZlOiBudW1iZXIsIGVsZW1lbnRCbG9ja1JvYWQ6IElSZWN0LCBkaXJlY3Rpb25YOiBzdHJpbmcsIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIGtleT86IHN0cmluZywgY29vcmRMWD86IG51bWJlcikge1xuICAgIGNvbnN0IHRvcEVsZW1lbnRCbG9ja1JvYWQgPSAoZWxlbWVudEJsb2NrUm9hZC55ID8/IDApO1xuICAgIGNvbnN0IGJvdHRvbUVsZW1lbnRCbG9ja1JvYWQgPSAoZWxlbWVudEJsb2NrUm9hZC55ID8/IDApICsgKGVsZW1lbnRCbG9ja1JvYWQuaGVpZ2h0ID8/IDApO1xuICAgIGNvbnN0IGRpcmVjdGlvblkgPSB0aGlzLmNoZWNrVXBEb3duTGVmdFJpZ2h0KHN0YXJ0WSwgZW5kWSwgJ3knKTtcbiAgICBjb25zdCBRMSA9IHRoaXMuZHJhd0xpbmVRKHsgeDogc3RhcnRYLCB5OiBzdGFydFkgPz8gMCB9LCBgJHtkaXJlY3Rpb25YfS0ke2RpcmVjdGlvblkgPT09ICd1bmRlcicgPyAndW5kZXInIDogJ2Fib3ZlJ31gLCBsaW5lQ3VydmUsIGxpbmVDdXJ2ZSk7XG4gICAgY29uc3QgTDEgPSB7XG4gICAgICB4OiBRMS54ID8/IDAsXG4gICAgICB5OiAoZGlyZWN0aW9uWSA9PT0gJ3VuZGVyJyA/IGJvdHRvbUVsZW1lbnRCbG9ja1JvYWQgOiB0b3BFbGVtZW50QmxvY2tSb2FkKVxuICAgIH07XG5cbiAgICBpZiAoTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLlNUQVJUX01PREUgIT09ICdib3R0b20tbGVmdCcpIHtcbiAgICAgIGlmICgoZGlyZWN0aW9uWSA9PT0gJ3VuZGVyJyAmJiBib3R0b21FbGVtZW50QmxvY2tSb2FkIC0gKFExLnkgPz8gMCkgPD0gMClcbiAgICAgICAgfHwgKGRpcmVjdGlvblkgPT09ICdhYm92ZScgJiYgdG9wRWxlbWVudEJsb2NrUm9hZCAtIChRMS55ID8/IDApID49IDApKSB7XG4gICAgICAgIEwxLnkgPSBRMS55ID8/IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicygoTDEueSA/PyAwKSAtIGVuZFkpIDw9IDEwKSB7XG4gICAgICAgIEwxLnkgPSBNb0NhbnZhc0NhbGN1bGF0b3JCcmFuY2hVdGlsLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb25YLCBMMS55LCBsaW5lQ3VydmUpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBRMiA9IHRoaXMuZHJhd0xpbmVRKHsgeDogTDEueCwgeTogTDEueSA/PyAwIH0sIGAke2RpcmVjdGlvblkgPT09ICd1bmRlcicgPyAndW5kZXInIDogJ2Fib3ZlJ30tJHtkaXJlY3Rpb25YfWAsIGxpbmVDdXJ2ZSwgbGluZUN1cnZlKTtcblxuICAgIGNvbnN0IHBhdGhRMSA9IGBRICR7UTEueDF9LCR7UTEueTF9ICR7UTEueH0sJHtRMS55fSBMICR7TDEueH0gJHtMMS55fWA7XG4gICAgY29uc3QgcGF0aFEyID0gYFEgJHtRMi54MX0sJHtRMi55MX0gJHtRMi54fSwke1EyLnl9YDtcblxuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogY29vcmRMWCA/PyBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IHsgeDogUTEueCA/PyAwLCB5OiBRMS55ID8/IDAgfSwgbW9kZTogJ2hvcml6b250YWwtc2luZ2xlLWN1cnZlJywgaWQ6IGtleSwgbmFtZTogJ3FyJyB9KTtcbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IFExLnggPz8gMCwgeTogUTEueSA/PyAwIH0sIGVuZDogeyB4OiBMMS54ID8/IDAsIHk6IEwxLnkgfSwgbW9kZTogJ2hvcml6b250YWwnLCBpZDoga2V5LCBuYW1lOiAnbHInIH0pO1xuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogTDEueCA/PyAwLCB5OiBMMS55IH0sIGVuZDogeyB4OiBRMi54ID8/IDAsIHk6IFEyLnkgPz8gMCB9LCBtb2RlOiAndmVydGljYWwtc2luZ2xlLWN1cnZlJywgaWQ6IGtleSwgbmFtZTogJ3EycicgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aEJ5UGFzc1E6IGAke3BhdGhRMX0gJHtwYXRoUTJ9YCxcbiAgICAgIGVuZFBhdGg6IHtcbiAgICAgICAgeDogUTIueCA/PyAwLFxuICAgICAgICB5OiBRMi55ID8/IDBcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqVHLDoW5oIGto4buRaSBwaMOtYSBiw6puIHRyw6puICovXG4gIHN0YXRpYyBieVBhc3NFbGVtZW50T25Ub3BCb3R0b21TaWRlKHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgZW5kWDogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZWxlbWVudEJsb2NrUm9hZDogSVJlY3QsIGRpcmVjdGlvblk6IHN0cmluZywgc2VwYXJhdGVkUG9pbnRzOiBBcnJheTxJUG9pbnRzPiwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgbGVmdEVsZW1lbnRCbG9ja1JvYWQgPSAoZWxlbWVudEJsb2NrUm9hZC54ID8/IDApO1xuICAgIGNvbnN0IHJpZ2h0RWxlbWVudEJsb2NrUm9hZCA9IChlbGVtZW50QmxvY2tSb2FkLnggPz8gMCkgKyAoZWxlbWVudEJsb2NrUm9hZC53aWR0aCA/PyAwKTtcbiAgICBjb25zdCBkaXJlY3Rpb25YID0gdGhpcy5jaGVja1VwRG93bkxlZnRSaWdodChzdGFydFgsIGVuZFgsICd4JykgPT09ICdsZWZ0JyA/ICdsZWZ0JyA6ICdyaWdodCc7IC8vIHhlbSBuw6puIHRyw6FuaCBzYW5nIHRyw6FpIGhheSBwaOG6o2lcblxuICAgIGNvbnN0IFExID0gdGhpcy5kcmF3TGluZVEoeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSA/PyAwIH0sIGAke2RpcmVjdGlvbll9LSR7ZGlyZWN0aW9uWH1gLCBsaW5lQ3VydmUsIGxpbmVDdXJ2ZSk7XG4gICAgY29uc3QgTDEgPSB7XG4gICAgICB4OiAoZGlyZWN0aW9uWCA9PT0gJ2xlZnQnID8gbGVmdEVsZW1lbnRCbG9ja1JvYWQgOiByaWdodEVsZW1lbnRCbG9ja1JvYWQpLFxuICAgICAgeTogUTEueSA/PyAwXG4gICAgfTtcblxuICAgIGlmICgoZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0JyAmJiByaWdodEVsZW1lbnRCbG9ja1JvYWQgLSAoUTEueCA/PyAwKSA8PSAwKSB8fCAoZGlyZWN0aW9uWCA9PT0gJ2xlZnQnICYmIGxlZnRFbGVtZW50QmxvY2tSb2FkIC0gKFExLnggPz8gMCkgPj0gMCkpIHtcbiAgICAgIEwxLnggPSBRMS54ID8/IDA7XG4gICAgfVxuICAgIGNvbnN0IFEyID0gdGhpcy5kcmF3TGluZVEoeyB4OiBMMS54LCB5OiBMMS55ID8/IDAgfSwgYCR7ZGlyZWN0aW9uWH0tJHtkaXJlY3Rpb25ZfWAsIGxpbmVDdXJ2ZSwgbGluZUN1cnZlKTtcblxuICAgIGlmIChNYXRoLmFicygoUTIueCA/PyAwKSAtIGxlZnRFbGVtZW50QmxvY2tSb2FkKSA8PSAxMCkge1xuICAgICAgUTIueCA9IE1vQ2FudmFzQ2FsY3VsYXRvckJyYW5jaFV0aWwubWF0aE9wZXJhdG9yc0NhbGN1bGF0aW9uKGRpcmVjdGlvblgsIFEyLngsIGxpbmVDdXJ2ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aFExID0gYFEgJHtRMS54MX0sJHtRMS55MX0gJHtRMS54fSwke1ExLnl9IEwgJHtMMS54fSAke0wxLnl9YDtcbiAgICBjb25zdCBwYXRoUTIgPSBgUSAke1EyLngxfSwke1EyLnkxfSAke1EyLnh9LCR7UTIueX1gO1xuXG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IHsgeDogUTEueCA/PyAwLCB5OiBRMS55ID8/IDAgfSwgbW9kZTogJ3ZlcnRpY2FsLXNpbmdsZS1jdXJ2ZScsIGlkOiBrZXkgPz8gJ3FiJyB9KTtcbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IFExLnggPz8gMCwgeTogUTEueSA/PyAwIH0sIGVuZDogeyB4OiBMMS54ID8/IDAsIHk6IEwxLnkgPz8gMCB9LCBtb2RlOiAnaG9yaXpvbnRhbC1zaW5nbGUtY3VydmUnLCBpZDoga2V5ID8/ICdsYicgfSk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBMMS54ID8/IDAsIHk6IEwxLnkgPz8gMCB9LCBlbmQ6IHsgeDogUTIueCA/PyAwLCB5OiBRMi55ID8/IDAgfSwgbW9kZTogJ2hvcml6b250YWwtc2luZ2xlLWN1cnZlJywgaWQ6IGtleSA/PyAncTJiJyB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoQnlQYXNzUTogYCR7cGF0aFExfSAke3BhdGhRMn1gLFxuICAgICAgZW5kUGF0aDoge1xuICAgICAgICB4OiBRMi54ID8/IDAsXG4gICAgICAgIHk6IFEyLnkgPz8gMFxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBraeG7g20gdHJhIMSRxrDhu51uZyB0aOG6s25nIHbDoCBraOG7kWkgY8OzIGPhuq90IG5oYXUga2jDtG5nXG4gIHN0YXRpYyBjaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCB4T3JZT2ZMaW5lOiBudW1iZXIsIGRpcmVjdGlvbjogJ3gnIHwgJ3knLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHJldHVybkFsbEVsZW1lbnRCbG9ja1JvYWQ/OiBib29sZWFuKSB7XG4gICAgY29uc3QgbWluaW11bURpc3RhbmNlRnJvbUJsb2NrID0gODtcblxuICAgIHN0YXJ0ICs9IG1pbmltdW1EaXN0YW5jZUZyb21CbG9jayArIDE7IC8vIHRyw6FuaCBraOG7kWkgeHXhuqV0IHBow6F0IHbDoG8gbGlzdFxuICAgIGNvbnN0IGxpc3RQb2ludHNPZkxpbmUgPSByYW5nZShzdGFydCwgZW5kICsgMSk7XG5cbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gb2JzdGFjbGVSZWN0LmZpbHRlcihpdGVtID0+IHtcbiAgICAgIGNvbnN0IGxlZnQgPSAoaXRlbS54ID8/IDApIC0gbWluaW11bURpc3RhbmNlRnJvbUJsb2NrO1xuICAgICAgY29uc3QgcmlnaHQgPSAoaXRlbS54ID8/IDApICsgKGl0ZW0ud2lkdGggPz8gMCkgKyBtaW5pbXVtRGlzdGFuY2VGcm9tQmxvY2s7XG4gICAgICBjb25zdCB0b3AgPSAoaXRlbS55ID8/IDApIC0gbWluaW11bURpc3RhbmNlRnJvbUJsb2NrO1xuICAgICAgY29uc3QgYm90dG9tID0gKGl0ZW0ueSA/PyAwKSArIChpdGVtLmhlaWdodCA/PyAwKSArIG1pbmltdW1EaXN0YW5jZUZyb21CbG9jaztcblxuICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3gnICYmIGxpc3RQb2ludHNPZkxpbmUuZmluZChlbCA9PiAobGVmdCA8PSBlbCAmJiBlbCA8PSByaWdodCkpICYmICh0b3AgPD0geE9yWU9mTGluZSAmJiB4T3JZT2ZMaW5lIDw9IGJvdHRvbSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoZGlyZWN0aW9uID09PSAneScgJiYgbGlzdFBvaW50c09mTGluZS5maW5kKGVsID0+ICh0b3AgPD0gZWwgJiYgZWwgPD0gYm90dG9tKSkgJiYgKGxlZnQgPD0geE9yWU9mTGluZSAmJiB4T3JZT2ZMaW5lIDw9IHJpZ2h0KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkIHx8ICFlbGVtZW50QmxvY2tSb2FkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAocmV0dXJuQWxsRWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRCbG9ja1JvYWQ7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3knKSB7XG4gICAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKCgoYS55ID8/IDApIC0gc3RhcnQpKSkgPCAoTWF0aC5hYnMoKChiLnkgPz8gMCkgLSBzdGFydCkpKSA/IGEgOiBiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKCgoYS54ID8/IDApIC0gc3RhcnQpKSkgPCAoTWF0aC5hYnMoKChiLnggPz8gMCkgLSBzdGFydCkpKSA/IGEgOiBiKTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB24bq9IHbhu4EgxJFp4buDbSBlbmQgeGVtIGPDsyBi4buLIGNo4bqvbiBi4bufaSBraOG7kWkgbsOgbyBraMO0bmcsIG7hur91IGPDsyB0aMOsIHBo4bqjaSBsw7lpIGzhuqFpIMSRaeG7g20gZW5kIG5ow6kuXG4gIHN0YXRpYyBjaGVja0Jsb2Nrc0VsZW1lbnRTdHJhaWdodFkoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBlbmRQb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0W10pIHtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0WSwgZW5kUG9zaXRpb24ueSwgc3RhcnRYLCAneScsIG9ic3RhY2xlUmVjdCwgdHJ1ZSkgYXMgSVJlY3RbXTtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCB8fCAhZWxlbWVudEJsb2NrUm9hZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKChhLnggPz8gMCAtIHN0YXJ0WCkpKSA8IChNYXRoLmFicygoYi54ID8/IDAgLSBzdGFydFgpKSkgPyBhIDogYik7XG4gIH1cblxuICAvLyBraeG7g20gdHJhIGjGsOG7m25nIG5nYW5nIHbhur0gduG7gSDEkWnhu4NtIGVuZCB4ZW0gY8OzIGLhu4sgY2jhuq9uIGLhu59pIGto4buRaSBuw6BvIGtow7RuZywgbuG6v3UgY8OzIHRow6wgcGjhuqNpIGzDuWkgbOG6oWkgxJFp4buDbSBlbmQgbmjDqS5cbiAgc3RhdGljIGNoZWNrQmxvY2tzRWxlbWVudFgoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBlbmRQb3NpdGlvbjogeyB4OiBudW1iZXIsIHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0W10pIHtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0WCwgZW5kUG9zaXRpb24ueCwgc3RhcnRZLCAneCcsIG9ic3RhY2xlUmVjdCwgdHJ1ZSkgYXMgSVJlY3RbXTtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCB8fCAhZWxlbWVudEJsb2NrUm9hZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKCgoYS55ID8/IDApIC0gc3RhcnRZKSkpIDwgKE1hdGguYWJzKCgoYi55ID8/IDApIC0gc3RhcnRZKSkpID8gYSA6IGIpO1xuICB9XG5cbiAgLy8ga2nhu4NtIHRyYSBoxrDhu5tuZyBzYW5nIHBo4bqjaSBsw6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc0xlZnQoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZW5kUG9zaXRpb246IElQb3NpdGlvblhZLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4pOiBJUG9pbnQge1xuICAgIGNvbnN0IGNvb3JkTFg6IElQb2ludCA9IHsgeDogZW5kUG9zaXRpb24ueCwgeTogc3RhcnRZIH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IHRoaXMuY2hlY2tMaW5lUGFzc0Jsb2NrSG9yaXpvbnRhbChzdGFydFgsIGVuZFBvc2l0aW9uLngsIHN0YXJ0WSwgJ3gnLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkKSB7XG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJzE0JyB9KTtcblxuICAgICAgcmV0dXJuIGNvb3JkTFg7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uWCA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmNoZWNrVXBEb3duTGVmdFJpZ2h0KHN0YXJ0WCwgZW5kUG9zaXRpb24ueCwgJ3gnKTtcbiAgICBjb25zdCBzcGVjaWZpY1hFbGVtZW50ID0gZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0JyA/IChlbGVtZW50QmxvY2tSb2FkLnggPz8gMCkgOiAoKGVsZW1lbnRCbG9ja1JvYWQueCA/PyAwKSArIChlbGVtZW50QmxvY2tSb2FkLndpZHRoID8/IDApKTtcblxuICAgIGNvb3JkTFgueCA9IHNwZWNpZmljWEVsZW1lbnQgKyAoTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyKSArIChsaW5lQ3VydmUgLyAyKTtcbiAgICBpZiAoZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29vcmRMWC54ID0gc3BlY2lmaWNYRWxlbWVudCAtIChNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDIpIC0gKGxpbmVDdXJ2ZSAvIDIpO1xuICAgIH1cblxuICAgIGxldCBzdGFydFhCeXBhc3NFbGVtZW50ID0gY29vcmRMWC54O1xuXG4gICAgaWYgKChkaXJlY3Rpb25YID09PSAnbGVmdCcgJiYgc3RhcnRYIC0gKGNvb3JkTFgueCA/PyAwKSA8PSAwKSB8fCAoZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0JyAmJiBzdGFydFggLSAoY29vcmRMWC54ID8/IDApID49IDApKSB7XG4gICAgICBjb29yZExYLnggPSBzdGFydFg7XG4gICAgICBzdGFydFhCeXBhc3NFbGVtZW50ID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWCwgY29vcmRMWC54LCBsaW5lQ3VydmUpO1xuICAgIH1cblxuICAgIGxldCBsaW5lQnlQYXNzQmxvY2s6IElQb2ludHNbXSA9IFtdO1xuICAgIGxldCB7IGVuZFBhdGggfSA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmJ5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZShzdGFydFhCeXBhc3NFbGVtZW50ID8/IDAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbi55LCBsaW5lQ3VydmUsIGVsZW1lbnRCbG9ja1JvYWQsIGRpcmVjdGlvblgsIGxpbmVCeVBhc3NCbG9jaywgdW5kZWZpbmVkLCBjb29yZExYLngpO1xuXG4gICAgaWYgKE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5TVEFSVF9NT0RFID09PSAnYm90dG9tLWxlZnQnICYmIGVsZW1lbnRCbG9ja1JvYWQueCArIChlbGVtZW50QmxvY2tSb2FkLndpZHRoKSAvIDIgPT09IGVuZFBvc2l0aW9uLnggJiYgTWF0aC5hYnMoZW5kUG9zaXRpb24ueSAtIGVsZW1lbnRCbG9ja1JvYWQueSkgPD0gMjApIHsgLy8gY2hlY2sgeGVtIGto4buRaSBjaOG6r24gY8OzIHBo4bqjaSBsw6Aga2jhu5FpIMSRw61jaCBoYXkga2jDtG5nP1xuICAgICAgbGluZUJ5UGFzc0Jsb2NrID0gW107XG4gICAgICBjb25zdCBkYXRhID0gTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwuYnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlTmV3TW9kZShzdGFydFhCeXBhc3NFbGVtZW50ID8/IDAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbi55LCBsaW5lQnlQYXNzQmxvY2ssIHVuZGVmaW5lZCwgY29vcmRMWC54KTtcblxuICAgICAgZW5kUGF0aCA9IGRhdGEuZW5kUGF0aDtcbiAgICB9XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goLi4ubGluZUJ5UGFzc0Jsb2NrKTtcbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJzE1JyB9KTtcbiAgICBjb25zdCBkYXRhRW5kUGF0aCA9IHRoaXMuY2hlY2tBbmRBdm9pZEJsb2Nrc0xlZnQoZW5kUGF0aC54ID8/IDAsIGVuZFBhdGgueSA/PyAwLCBsaW5lQ3VydmUsIGVuZFBvc2l0aW9uLCBvYnN0YWNsZVJlY3QsIHNlcGFyYXRlZFBvaW50cyk7XG5cbiAgICByZXR1cm4gZGF0YUVuZFBhdGg7XG4gIH1cblxuICAvLyBraeG7g20gdHJhIGjGsOG7m25nIHNhbmcgcGjhuqNpIGzDoCB0csOhbmgga2jhu5FpXG4gIHN0YXRpYyBjaGVja0FuZEF2b2lkQmxvY2tzKHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgbGluZUN1cnZlOiBudW1iZXIsIGVuZFBvc2l0aW9uOiB7IHg6IG51bWJlciwgeTogbnVtYmVyIH0sIG9ic3RhY2xlUmVjdDogSVJlY3RbXSwgc2VwYXJhdGVkUG9pbnRzOiBBcnJheTxJUG9pbnRzPiwgcGF0aFByZT86IHN0cmluZyk6IHsgcGF0aDogc3RyaW5nLCBlbmRQYXRoOiBJUG9pbnQgfSB7XG4gICAgY29uc3QgY29vcmRMWDogSVBvaW50ID0geyB4OiBlbmRQb3NpdGlvbi54IC0gMzAsIHk6IHN0YXJ0WSB9O1xuICAgIGNvbnN0IGVsZW1lbnRCbG9ja1JvYWQgPSB0aGlzLmNoZWNrTGluZVBhc3NCbG9ja0hvcml6b250YWwoc3RhcnRYLCBlbmRQb3NpdGlvbi54LCBzdGFydFksICd4Jywgb2JzdGFjbGVSZWN0KSBhcyBJUmVjdDtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkgPSB0aGlzLmNoZWNrQmxvY2tzRWxlbWVudFN0cmFpZ2h0WSgoY29vcmRMWC54ID8/IDApICsgMTAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0KTsgLy8gdMOtbmggxJFp4buDbSBlbmRfeCBk4buxIGtp4bq/biB0aGVvIHRyxrDhu51uZyBo4bujcCDEkeG6uXAgbmjhuqV0IHhlbSBuw7MgY8OzIGNo4bqvbiBi4bufaSBraOG7kWkgbsOgbyBraGkga8OpbyB4deG7kW5nIGtow7RuZ1xuXG4gICAgICBpZiAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkgJiYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZLnggPz8gMCkgPiBzdGFydFgpIHtcbiAgICAgICAgbGV0IHRvWCA9IChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWS54ID8/IDApIC0gKE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMikgLSAobGluZUN1cnZlIC8gMik7XG5cbiAgICAgICAgaWYgKCgoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVk/LnggPz8gMCkgLSBzdGFydFgpIDwgTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQpIHtcbiAgICAgICAgICB0b1ggPSAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkueCA/PyAwKSAtICgoKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZPy54ID8/IDApIC0gc3RhcnRYKSAvIDIpO1xuICAgICAgICB9XG4gICAgICAgIGNvb3JkTFgueCA9IHRvWDtcbiAgICAgIH1cblxuICAgICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICdjaGVja0FuZEF2b2lkQmxvY2tzJywgbmFtZTogJ2VuZCcgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHBhdGhQcmUgPyBgJHtwYXRoUHJlfSBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX1gIDogYEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAsXG4gICAgICAgIGVuZFBhdGg6IGNvb3JkTFhcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvblggPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5jaGVja1VwRG93bkxlZnRSaWdodChzdGFydFgsIGVuZFBvc2l0aW9uLngsICd4Jyk7XG5cbiAgICBjb29yZExYLnggPSAoZWxlbWVudEJsb2NrUm9hZC54ID8/IDApIC0gKE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMikgLSAobGluZUN1cnZlIC8gMik7XG5cbiAgICBsZXQgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlOiBBcnJheTxJUG9pbnRzPiA9IFtdO1xuXG4gICAgY29uc3QgeyBwYXRoQnlQYXNzUSwgZW5kUGF0aCB9ID0gTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwuYnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlKGNvb3JkTFgueCwgY29vcmRMWC55ID8/IDAsIGVuZFBvc2l0aW9uLnksIGxpbmVDdXJ2ZSwgZWxlbWVudEJsb2NrUm9hZCwgZGlyZWN0aW9uWCwgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlLCAnY2hlY2tBbmRBdm9pZEJsb2NrcycsIGNvb3JkTFgueCk7XG4gICAgbGV0IGxpbmUgPSBwYXRoUHJlID8gYCR7cGF0aFByZX0gTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9ICR7cGF0aEJ5UGFzc1F9YCA6IGBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX0gJHtwYXRoQnlQYXNzUX1gO1xuXG4gICAgLy8gdMOtbmggdHLGsOG7m2MgdHLGsOG7nW5nIGjhu6NwIHNhdSDEkeG7gyBsw7lpIGxpbmVcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkUHJlID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKGVuZFBhdGgueCA/PyAwLCBlbmRQb3NpdGlvbi54LCBlbmRQYXRoLnkgPz8gMCwgJ3gnLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkUHJlKSB7XG4gICAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWSA9IHRoaXMuY2hlY2tCbG9ja3NFbGVtZW50U3RyYWlnaHRZKChlbmRQb3NpdGlvbi54ID8/IDApICsgMTAsIGVuZFBhdGgueSA/PyAwLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0KTtcblxuICAgICAgaWYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZKSB7XG4gICAgICAgIGNvbnN0IFhOZXcgPSAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkueCA/PyAwKSAtIChNb0NhbnZhc0Nvbm5lY3ROYXZpZ2F0aW9uTmV3RWxlbWVudFV0aWwuRUxFTUVOVF9NQVJHSU5fQkVUV0VFTl9CUkFOQ0hfREVGQVVMVCAvIDIpIC0gKGxpbmVDdXJ2ZSAvIDIpO1xuXG4gICAgICAgIGlmIChYTmV3IDwgKGVuZFBhdGgueCA/PyAwKSkge1xuICAgICAgICAgIHNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZSA9IFtdO1xuICAgICAgICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiAnY2hlY2tBbmRBdm9pZEJsb2NrcycsIG5hbWU6ICd1JyB9KTtcblxuICAgICAgICAgIGxpbmUgPSBwYXRoUHJlID8gYCR7cGF0aFByZX0gTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YCA6IGBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX1gO1xuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHBhdGg6IGxpbmUsXG4gICAgICAgICAgICBlbmRQYXRoOiBjb29yZExYXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZXBhcmF0ZWRQb2ludHMuc3BsaWNlKHNlcGFyYXRlZFBvaW50cy5sZW5ndGgsIDAsIC4uLnNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZSk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICdjaGVja0FuZEF2b2lkQmxvY2tzJywgbmFtZTogJ3AnIH0pO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoZWNrQW5kQXZvaWRCbG9ja3MoZW5kUGF0aC54ID8/IDAsIGVuZFBhdGgueSA/PyAwLCBsaW5lQ3VydmUsIGVuZFBvc2l0aW9uLCBvYnN0YWNsZVJlY3QsIHNlcGFyYXRlZFBvaW50cywgYCR7bGluZX1gLCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZGF0YS5wYXRoLFxuICAgICAgZW5kUGF0aDogZGF0YS5lbmRQYXRoXG4gICAgfTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB2w6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc1koc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZW5kUG9zaXRpb246IHsgeDogbnVtYmVyLCB5OiBudW1iZXIgfSwgZGlyZWN0aW9uWTogc3RyaW5nLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIHBhdGhQcmU/OiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZywgZW5kUGF0aDogSVBvaW50IH0ge1xuICAgIGNvbnN0IGNvb3JkTFg6IElQb2ludCA9IHsgeDogc3RhcnRYLCB5OiBlbmRQb3NpdGlvbi55IH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IHRoaXMuY2hlY2tMaW5lUGFzc0Jsb2NrSG9yaXpvbnRhbChzdGFydFksIGVuZFBvc2l0aW9uLnksIHN0YXJ0WCwgJ3knLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKChkaXJlY3Rpb25ZID09PSAndW5kZXInICYmIHN0YXJ0WSA+IGVuZFBvc2l0aW9uLnkpIHx8IChkaXJlY3Rpb25ZID09PSAnYWJvdmUnICYmIHN0YXJ0WSA8IGVuZFBvc2l0aW9uLnkpKSB7XG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJ2snIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBwYXRoUHJlID8/ICcnLFxuICAgICAgICBlbmRQYXRoOiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH1cbiAgICAgIH07XG4gICAgfVxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICdyJyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogcGF0aFByZSA/IGAke3BhdGhQcmV9IEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAgOiBgTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YCxcbiAgICAgICAgZW5kUGF0aDogY29vcmRMWFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB5ID0gZGlyZWN0aW9uWSA9PT0gJ2Fib3ZlJyA/IChlbGVtZW50QmxvY2tSb2FkLnkgPz8gMCkgKyAoZWxlbWVudEJsb2NrUm9hZC5oZWlnaHQgPz8gMCkgOiAoZWxlbWVudEJsb2NrUm9hZC55ID8/IDApO1xuXG4gICAgY29vcmRMWC55ID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWSwgeSwgbGluZUN1cnZlICogMik7XG5cbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJ3JhJyB9KTtcbiAgICBjb25zdCB7IHBhdGhCeVBhc3NRLCBlbmRQYXRoIH0gPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5ieVBhc3NFbGVtZW50T25Ub3BCb3R0b21TaWRlKGNvb3JkTFgueCA/PyAwLCBjb29yZExYLnkgPz8gMCwgZW5kUG9zaXRpb24ueCwgbGluZUN1cnZlLCBlbGVtZW50QmxvY2tSb2FkLCBkaXJlY3Rpb25ZLCBzZXBhcmF0ZWRQb2ludHMpO1xuXG4gICAgLy8gc2F1IGtoaSDEkcOjIHRyw6FuaCB0aMOsIHRp4bq/cCB04bulYyBrw6lvIGTDoGkgY2hvIHThu51pIMSRaeG7g20gZW5kIHgsIGzhuqFpIGtp4buDbSB0cmEgeGVtIGPDsyBraOG7kWkgbsOgbyBjaOG6r24ga2jDtG5nP1xuICAgIGNvbnN0IGxpbmUgPSBwYXRoUHJlID8gYCR7cGF0aFByZX0gTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9ICR7cGF0aEJ5UGFzc1F9YCA6IGBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX0gJHtwYXRoQnlQYXNzUX1gO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoZWNrQW5kQXZvaWRCbG9ja3NZKGVuZFBhdGgueCA/PyAwLCBlbmRQYXRoLnkgPz8gMCwgbGluZUN1cnZlLCBlbmRQb3NpdGlvbiwgZGlyZWN0aW9uWSwgb2JzdGFjbGVSZWN0LCBzZXBhcmF0ZWRQb2ludHMsIGAke2xpbmV9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZGF0YS5wYXRoLFxuICAgICAgZW5kUGF0aDogZGF0YS5lbmRQYXRoXG4gICAgfTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB2w6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc1lMZWZ0KHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgbGluZUN1cnZlOiBudW1iZXIsIGVuZFBvc2l0aW9uOiBJUG9zaXRpb25YWSwgZGlyZWN0aW9uWTogc3RyaW5nLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIHBhdGhQcmU/OiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZywgZW5kUGF0aDogSVBvc2l0aW9uWFkgfSB7XG4gICAgY29uc3Qga2V5ID0gJ2NoZWNrQW5kQXZvaWRCbG9ja3NZTGVmdCc7XG5cbiAgICBjb25zdCBjb29yZExYOiBJUG9zaXRpb25YWSA9IHsgeDogc3RhcnRYLCB5OiBlbmRQb3NpdGlvbi55IH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmNoZWNrTGluZVBhc3NCbG9ja0hvcml6b250YWwoc3RhcnRZLCBlbmRQb3NpdGlvbi55LCBzdGFydFgsICd5Jywgb2JzdGFjbGVSZWN0KSBhcyBJUmVjdDtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVggPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5jaGVja0Jsb2Nrc0VsZW1lbnRYKGNvb3JkTFgueCA/PyAwLCAoY29vcmRMWC55ID8/IDApLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0KTtcblxuICAgICAgaWYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYKSB7XG4gICAgICAgIGNvbnN0IHRvcEVsZW1lbnRCbG9ja1JvYWQgPSAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVgueSA/PyAwKTtcbiAgICAgICAgY29uc3QgYm90dG9tRWxlbWVudEJsb2NrUm9hZCA9IChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWC55ID8/IDApICsgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYLmhlaWdodCA/PyAwKTtcblxuICAgICAgICBsZXQgdG9ZID0gKGRpcmVjdGlvblkgPT09ICd1bmRlcicgPyB0b3BFbGVtZW50QmxvY2tSb2FkIDogYm90dG9tRWxlbWVudEJsb2NrUm9hZCk7XG5cbiAgICAgICAgdG9ZID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWSwgdG9ZLCBsaW5lQ3VydmUgKiAyKTtcblxuICAgICAgICBpZiAodG9ZID4gc3RhcnRZICYmIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5TVEFSVF9NT0RFICE9PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgICAgICAgY29vcmRMWC55ID0gdG9ZO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiBrZXksIG5hbWU6ICdhJyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogcGF0aFByZSA/IGAke3BhdGhQcmV9IEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAgOiBgTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YCxcbiAgICAgICAgZW5kUGF0aDogY29vcmRMWFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCB5ID0gZGlyZWN0aW9uWSA9PT0gJ2Fib3ZlJyA/IChlbGVtZW50QmxvY2tSb2FkLnkgPz8gMCkgKyAoZWxlbWVudEJsb2NrUm9hZC5oZWlnaHQgPz8gMCkgOiAoZWxlbWVudEJsb2NrUm9hZC55ID8/IDApO1xuICAgIGNvbnN0IGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYID0gTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwuY2hlY2tCbG9ja3NFbGVtZW50WChjb29yZExYLnggPz8gMCwgKGNvb3JkTFgueSA/PyAwKSwgZW5kUG9zaXRpb24sIG9ic3RhY2xlUmVjdCk7XG4gICAgbGV0IGlnbm9yZUJ5cGFzc0VsZW1lbnQgPSBmYWxzZTtcblxuICAgIGlmIChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWCAmJiBlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWC5pZCA9PT0gZWxlbWVudEJsb2NrUm9hZC5pZCkge1xuICAgICAgaWdub3JlQnlwYXNzRWxlbWVudCA9IHRydWU7XG4gICAgfVxuICAgIGNvb3JkTFgueSA9IE1vQ2FudmFzQ2FsY3VsYXRvckJyYW5jaFV0aWwubWF0aE9wZXJhdG9yc0NhbGN1bGF0aW9uKGRpcmVjdGlvblksIHksIGxpbmVDdXJ2ZSAqIDIpO1xuXG4gICAgbGV0IHNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZTogQXJyYXk8SVBvaW50cz4gPSBbXTtcblxuICAgIGNvbnN0IHsgcGF0aEJ5UGFzc1EsIGVuZFBhdGggfSA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmJ5UGFzc0VsZW1lbnRPblRvcEJvdHRvbVNpZGUoY29vcmRMWC54ID8/IDAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbi54LCBsaW5lQ3VydmUsIGVsZW1lbnRCbG9ja1JvYWQsIGRpcmVjdGlvblksIHNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZSwga2V5KTtcbiAgICBsZXQgZW5kID0gY29vcmRMWDtcbiAgICBsZXQgbGluZSA9IHBhdGhQcmUgPyBgJHtwYXRoUHJlfSBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX1gIDogYEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWA7XG5cbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDoga2V5LCBuYW1lOiAnYicgfSk7XG5cbiAgICBpZiAoaWdub3JlQnlwYXNzRWxlbWVudCkge1xuICAgICAgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlID0gW107XG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiBjb29yZExYLCBlbmQsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6IGtleSwgbmFtZTogJ2MnIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBsaW5lLFxuICAgICAgICBlbmRQYXRoOiBlbmRcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZW5kID0gZW5kUGF0aDtcbiAgICBsaW5lICs9IGAgJHtwYXRoQnlQYXNzUX1gO1xuICAgIHNlcGFyYXRlZFBvaW50cy5zcGxpY2Uoc2VwYXJhdGVkUG9pbnRzLmxlbmd0aCwgMCwgLi4uc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaGVja0FuZEF2b2lkQmxvY2tzWUxlZnQoZW5kLnggPz8gMCwgZW5kLnkgPz8gMCwgbGluZUN1cnZlLCBlbmRQb3NpdGlvbiwgZGlyZWN0aW9uWSwgb2JzdGFjbGVSZWN0LCBzZXBhcmF0ZWRQb2ludHMsIGAke2xpbmV9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZGF0YS5wYXRoLFxuICAgICAgZW5kUGF0aDogZGF0YS5lbmRQYXRoXG4gICAgfTtcbiAgfVxuXG4gIHN0YXRpYyBieVBhc3NFbGVtZW50T25SaWdodFNpZGVOZXdNb2RlKHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgZW5kWTogbnVtYmVyLCBzZXBhcmF0ZWRQb2ludHM6IEFycmF5PElQb2ludHM+LCBrZXk/OiBzdHJpbmcsIGNvb3JkTFg/OiBudW1iZXIpIHtcbiAgICBjb25zdCBzdGFydCA9IHsgeDogY29vcmRMWCA/PyBzdGFydFgsIHk6IHN0YXJ0WSB9O1xuICAgIGNvbnN0IGVuZCA9IHsgeDogKHN0YXJ0LnggPz8gMCkgLSAyMCwgeTogZW5kWSB9O1xuXG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogc3RhcnQsIGVuZDogZW5kLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiBrZXksIG5hbWU6ICdxMnInIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhCeVBhc3NROiBgYCxcbiAgICAgIGVuZFBhdGg6IGVuZFxuICAgIH07XG4gIH1cbn0iXX0=
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRvci1kaXJldGlvbi1lbGVtZW50LnVudGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy11aS9jb21wb25lbnRzL2RyYXctbGluZS9zcmMvdXRpbC9jYWxjdWxhdG9yLWRpcmV0aW9uLWVsZW1lbnQudW50aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3hFLE9BQU8sRUFBRSx1Q0FBdUMsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBT2hHLE1BQU0sT0FBTyxzQ0FBc0M7SUFDakQsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFVBQThCLEVBQUUsUUFBNEIsRUFBRSxTQUFvQjtRQUM1RyxNQUFNLFFBQVEsR0FBRyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUVyRCxJQUFJLFFBQVEsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuQixPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQ0QsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakIsT0FBTyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztRQUM5QyxDQUFDO1FBRUQsT0FBTyxTQUFTLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUMvQyxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUErQixFQUFFLE1BQWdDLEVBQUUsVUFBa0IsRUFBRSxVQUFrQjtRQUN4SCxNQUFNLE1BQU0sR0FBb0IsRUFBRSxDQUFDO1FBRW5DLFFBQVEsTUFBTSxFQUFFLENBQUM7WUFDZixLQUFLLGFBQWE7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Q0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFckQsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLElBQUksTUFBTSxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLHlCQUF5QixFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEssZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekksZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsdUJBQXVCLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FB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QyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVqSixPQUFPO1lBQ0wsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO1lBQ2YsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1NBQ3RCLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLCtCQUErQixDQUFDLE1BQWMsRUFBRSxNQUFjLEVBQUUsSUFBWSxFQUFFLGVBQStCLEVBQUUsR0FBWSxFQUFFLE9BQWdCO1FBQ2xKLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxFQUFFLE9BQU8sSUFBSSxNQUFNLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ2xELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1FBRWhELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTNGLE9BQU87WUFDTCxXQUFXLEVBQUUsRUFBRTtZQUNmLE9BQU8sRUFBRSxHQUFHO1NBQ2IsQ0FBQztJQUNKLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhbmdlIH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IHsgSUNvb3JkaW5hdGVzU3ZnLCBJUG9pbnQsIElQb2ludHMsIElSZWN0IH0gZnJvbSAnLi4vZHJhdy1saW5lLmludGVyZmFjZSc7XG5pbXBvcnQgeyBNb0NhbnZhc0NhbGN1bGF0b3JCcmFuY2hVdGlsIH0gZnJvbSAnLi9jYWxjdWxhdG9yLWJyYW5jaC51dGlsJztcbmltcG9ydCB7IE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbCB9IGZyb20gJy4vY29ubmVjdC1uYXZpZ2F0aW9uLW5ldy1lbGVtZW50LnV0aWwnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElQb3NpdGlvblhZIHtcbiAgeDogbnVtYmVyO1xuICB5OiBudW1iZXI7XG59XG5leHBvcnQgdHlwZSBDb3JuZXJEaXJlY3Rpb24gPSAncmlnaHQtdW5kZXInIHwgJ3VuZGVyLWxlZnQnIHwgJ2xlZnQtYWJvdmUnIHwgJ2Fib3ZlLXJpZ2h0JyB8ICd1bmRlci1yaWdodCcgfCAncmlnaHQtYWJvdmUnIHwgJ2Fib3ZlLWxlZnQnIHwgJ2xlZnQtdW5kZXInOyAvLyB0aGVvIGNoaeG7gXVcbmV4cG9ydCBjbGFzcyBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbCB7XG4gIHN0YXRpYyBjaGVja1VwRG93bkxlZnRSaWdodChmaXJzdFBvaW50OiBudW1iZXIgfCB1bmRlZmluZWQsIGVuZFBvaW50OiBudW1iZXIgfCB1bmRlZmluZWQsIGRpcmVjdGlvbjogJ3gnIHwgJ3knKTogc3RyaW5nIHtcbiAgICBjb25zdCBkaXN0YW5jZSA9IChmaXJzdFBvaW50ID8/IDApIC0gKGVuZFBvaW50ID8/IDApO1xuXG4gICAgaWYgKGRpc3RhbmNlID09PSAwKSB7XG4gICAgICByZXR1cm4gJ2NlbnRlcic7XG4gICAgfVxuICAgIGlmIChkaXN0YW5jZSA+IDApIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09ICd4JyA/ICdsZWZ0JyA6ICdhYm92ZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gJ3gnID8gJ3JpZ2h0JyA6ICd1bmRlcic7XG4gIH1cblxuICBzdGF0aWMgZHJhd0xpbmVRKHN0YXJ0OiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0sIGNvcm5lcjogQ29ybmVyRGlyZWN0aW9uIHwgc3RyaW5nLCBsaW5lQ3VydmVYOiBudW1iZXIsIGxpbmVDdXJ2ZVk6IG51bWJlcikge1xuICAgIGNvbnN0IGNvb3JkUTogSUNvb3JkaW5hdGVzU3ZnID0ge307XG5cbiAgICBzd2l0Y2ggKGNvcm5lcikge1xuICAgICAgY2FzZSAncmlnaHQtdW5kZXInOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54ICsgbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDE7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxICsgbGluZUN1cnZlWTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3VuZGVyLWxlZnQnOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54O1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55ICsgbGluZUN1cnZlWTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDEgLSBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueSA9IGNvb3JkUS55MTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQtYWJvdmUnOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54IC0gbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDE7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxIC0gbGluZUN1cnZlWTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Fib3ZlLXJpZ2h0JzpcbiAgICAgICAgY29vcmRRLngxID0gc3RhcnQueDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueSAtIGxpbmVDdXJ2ZVk7XG4gICAgICAgIGNvb3JkUS54ID0gY29vcmRRLngxICsgbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkgPSBjb29yZFEueTE7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICd1bmRlci1yaWdodCc6XG4gICAgICAgIGNvb3JkUS54MSA9IHN0YXJ0Lng7XG4gICAgICAgIGNvb3JkUS55MSA9IHN0YXJ0LnkgKyBsaW5lQ3VydmVZO1xuICAgICAgICBjb29yZFEueCA9IGNvb3JkUS54MSArIGxpbmVDdXJ2ZVg7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmlnaHQtYWJvdmUnOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54ICsgbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDE7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxIC0gbGluZUN1cnZlWTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2Fib3ZlLWxlZnQnOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54O1xuICAgICAgICBjb29yZFEueTEgPSBzdGFydC55IC0gbGluZUN1cnZlWTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDEgLSBsaW5lQ3VydmVYO1xuICAgICAgICBjb29yZFEueSA9IGNvb3JkUS55MTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2xlZnQtdW5kZXInOlxuICAgICAgICBjb29yZFEueDEgPSBzdGFydC54IC0gbGluZUN1cnZlWDtcbiAgICAgICAgY29vcmRRLnkxID0gc3RhcnQueTtcbiAgICAgICAgY29vcmRRLnggPSBjb29yZFEueDE7XG4gICAgICAgIGNvb3JkUS55ID0gY29vcmRRLnkxICsgbGluZUN1cnZlWTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHJldHVybiBjb29yZFE7XG4gIH1cblxuICAvKipUcsOhbmgga2jhu5FpIHBow61hIGLDqm4gcGjhuqNpICovXG4gIHN0YXRpYyBieVBhc3NFbGVtZW50T25SaWdodFNpZGUoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBlbmRZOiBudW1iZXIsIGxpbmVDdXJ2ZTogbnVtYmVyLCBlbGVtZW50QmxvY2tSb2FkOiBJUmVjdCwgZGlyZWN0aW9uWDogc3RyaW5nLCBzZXBhcmF0ZWRQb2ludHM6IEFycmF5PElQb2ludHM+LCBrZXk/OiBzdHJpbmcsIGNvb3JkTFg/OiBudW1iZXIpIHtcbiAgICBjb25zdCB0b3BFbGVtZW50QmxvY2tSb2FkID0gZWxlbWVudEJsb2NrUm9hZC55ID8/IDA7XG4gICAgY29uc3QgYm90dG9tRWxlbWVudEJsb2NrUm9hZCA9IChlbGVtZW50QmxvY2tSb2FkLnkgPz8gMCkgKyAoZWxlbWVudEJsb2NrUm9hZC5oZWlnaHQgPz8gMCk7XG4gICAgY29uc3QgZGlyZWN0aW9uWSA9IHRoaXMuY2hlY2tVcERvd25MZWZ0UmlnaHQoc3RhcnRZLCBlbmRZLCAneScpO1xuICAgIGNvbnN0IFExID0gdGhpcy5kcmF3TGluZVEoeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSA/PyAwIH0sIGAke2RpcmVjdGlvblh9LSR7ZGlyZWN0aW9uWSA9PT0gJ3VuZGVyJyA/ICd1bmRlcicgOiAnYWJvdmUnfWAsIGxpbmVDdXJ2ZSwgbGluZUN1cnZlKTtcbiAgICBjb25zdCBMMSA9IHtcbiAgICAgIHg6IFExLnggPz8gMCxcbiAgICAgIHk6IGRpcmVjdGlvblkgPT09ICd1bmRlcicgPyBib3R0b21FbGVtZW50QmxvY2tSb2FkIDogdG9wRWxlbWVudEJsb2NrUm9hZCxcbiAgICB9O1xuXG4gICAgaWYgKE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5TVEFSVF9NT0RFICE9PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgICBpZiAoKGRpcmVjdGlvblkgPT09ICd1bmRlcicgJiYgYm90dG9tRWxlbWVudEJsb2NrUm9hZCAtIChRMS55ID8/IDApIDw9IDApIHx8IChkaXJlY3Rpb25ZID09PSAnYWJvdmUnICYmIHRvcEVsZW1lbnRCbG9ja1JvYWQgLSAoUTEueSA/PyAwKSA+PSAwKSkge1xuICAgICAgICBMMS55ID0gUTEueSA/PyAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoKEwxLnkgPz8gMCkgLSBlbmRZKSA8PSAxMCkge1xuICAgICAgICBMMS55ID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWCwgTDEueSwgbGluZUN1cnZlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUTIgPSB0aGlzLmRyYXdMaW5lUSh7IHg6IEwxLngsIHk6IEwxLnkgPz8gMCB9LCBgJHtkaXJlY3Rpb25ZID09PSAndW5kZXInID8gJ3VuZGVyJyA6ICdhYm92ZSd9LSR7ZGlyZWN0aW9uWH1gLCBsaW5lQ3VydmUsIGxpbmVDdXJ2ZSk7XG5cbiAgICBjb25zdCBwYXRoUTEgPSBgUSAke1ExLngxfSwke1ExLnkxfSAke1ExLnh9LCR7UTEueX0gTCAke0wxLnh9ICR7TDEueX1gO1xuICAgIGNvbnN0IHBhdGhRMiA9IGBRICR7UTIueDF9LCR7UTIueTF9ICR7UTIueH0sJHtRMi55fWA7XG5cbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IGNvb3JkTFggPz8gc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiB7IHg6IFExLnggPz8gMCwgeTogUTEueSA/PyAwIH0sIG1vZGU6ICdob3Jpem9udGFsLXNpbmdsZS1jdXJ2ZScsIGlkOiBrZXksIG5hbWU6ICdxcicgfSk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBRMS54ID8/IDAsIHk6IFExLnkgPz8gMCB9LCBlbmQ6IHsgeDogTDEueCA/PyAwLCB5OiBMMS55IH0sIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6IGtleSwgbmFtZTogJ2xyJyB9KTtcbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IEwxLnggPz8gMCwgeTogTDEueSB9LCBlbmQ6IHsgeDogUTIueCA/PyAwLCB5OiBRMi55ID8/IDAgfSwgbW9kZTogJ3ZlcnRpY2FsLXNpbmdsZS1jdXJ2ZScsIGlkOiBrZXksIG5hbWU6ICdxMnInIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhdGhCeVBhc3NROiBgJHtwYXRoUTF9ICR7cGF0aFEyfWAsXG4gICAgICBlbmRQYXRoOiB7XG4gICAgICAgIHg6IFEyLnggPz8gMCxcbiAgICAgICAgeTogUTIueSA/PyAwLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqVHLDoW5oIGto4buRaSBwaMOtYSBiw6puIHRyw6puICovXG4gIHN0YXRpYyBieVBhc3NFbGVtZW50T25Ub3BCb3R0b21TaWRlKHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgZW5kWDogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZWxlbWVudEJsb2NrUm9hZDogSVJlY3QsIGRpcmVjdGlvblk6IHN0cmluZywgc2VwYXJhdGVkUG9pbnRzOiBBcnJheTxJUG9pbnRzPiwga2V5Pzogc3RyaW5nKSB7XG4gICAgY29uc3QgbGVmdEVsZW1lbnRCbG9ja1JvYWQgPSBlbGVtZW50QmxvY2tSb2FkLnggPz8gMDtcbiAgICBjb25zdCByaWdodEVsZW1lbnRCbG9ja1JvYWQgPSAoZWxlbWVudEJsb2NrUm9hZC54ID8/IDApICsgKGVsZW1lbnRCbG9ja1JvYWQud2lkdGggPz8gMCk7XG4gICAgY29uc3QgZGlyZWN0aW9uWCA9IHRoaXMuY2hlY2tVcERvd25MZWZ0UmlnaHQoc3RhcnRYLCBlbmRYLCAneCcpID09PSAnbGVmdCcgPyAnbGVmdCcgOiAncmlnaHQnOyAvLyB4ZW0gbsOqbiB0csOhbmggc2FuZyB0csOhaSBoYXkgcGjhuqNpXG5cbiAgICBjb25zdCBRMSA9IHRoaXMuZHJhd0xpbmVRKHsgeDogc3RhcnRYLCB5OiBzdGFydFkgPz8gMCB9LCBgJHtkaXJlY3Rpb25ZfS0ke2RpcmVjdGlvblh9YCwgbGluZUN1cnZlLCBsaW5lQ3VydmUpO1xuICAgIGNvbnN0IEwxID0ge1xuICAgICAgeDogZGlyZWN0aW9uWCA9PT0gJ2xlZnQnID8gbGVmdEVsZW1lbnRCbG9ja1JvYWQgOiByaWdodEVsZW1lbnRCbG9ja1JvYWQsXG4gICAgICB5OiBRMS55ID8/IDAsXG4gICAgfTtcblxuICAgIGlmICgoZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0JyAmJiByaWdodEVsZW1lbnRCbG9ja1JvYWQgLSAoUTEueCA/PyAwKSA8PSAwKSB8fCAoZGlyZWN0aW9uWCA9PT0gJ2xlZnQnICYmIGxlZnRFbGVtZW50QmxvY2tSb2FkIC0gKFExLnggPz8gMCkgPj0gMCkpIHtcbiAgICAgIEwxLnggPSBRMS54ID8/IDA7XG4gICAgfVxuICAgIGNvbnN0IFEyID0gdGhpcy5kcmF3TGluZVEoeyB4OiBMMS54LCB5OiBMMS55ID8/IDAgfSwgYCR7ZGlyZWN0aW9uWH0tJHtkaXJlY3Rpb25ZfWAsIGxpbmVDdXJ2ZSwgbGluZUN1cnZlKTtcblxuICAgIGlmIChNYXRoLmFicygoUTIueCA/PyAwKSAtIGxlZnRFbGVtZW50QmxvY2tSb2FkKSA8PSAxMCkge1xuICAgICAgUTIueCA9IE1vQ2FudmFzQ2FsY3VsYXRvckJyYW5jaFV0aWwubWF0aE9wZXJhdG9yc0NhbGN1bGF0aW9uKGRpcmVjdGlvblgsIFEyLngsIGxpbmVDdXJ2ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgY29uc3QgcGF0aFExID0gYFEgJHtRMS54MX0sJHtRMS55MX0gJHtRMS54fSwke1ExLnl9IEwgJHtMMS54fSAke0wxLnl9YDtcbiAgICBjb25zdCBwYXRoUTIgPSBgUSAke1EyLngxfSwke1EyLnkxfSAke1EyLnh9LCR7UTIueX1gO1xuXG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IHsgeDogUTEueCA/PyAwLCB5OiBRMS55ID8/IDAgfSwgbW9kZTogJ3ZlcnRpY2FsLXNpbmdsZS1jdXJ2ZScsIGlkOiBrZXkgPz8gJ3FiJyB9KTtcbiAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IFExLnggPz8gMCwgeTogUTEueSA/PyAwIH0sIGVuZDogeyB4OiBMMS54ID8/IDAsIHk6IEwxLnkgPz8gMCB9LCBtb2RlOiAnaG9yaXpvbnRhbC1zaW5nbGUtY3VydmUnLCBpZDoga2V5ID8/ICdsYicgfSk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBMMS54ID8/IDAsIHk6IEwxLnkgPz8gMCB9LCBlbmQ6IHsgeDogUTIueCA/PyAwLCB5OiBRMi55ID8/IDAgfSwgbW9kZTogJ2hvcml6b250YWwtc2luZ2xlLWN1cnZlJywgaWQ6IGtleSA/PyAncTJiJyB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoQnlQYXNzUTogYCR7cGF0aFExfSAke3BhdGhRMn1gLFxuICAgICAgZW5kUGF0aDoge1xuICAgICAgICB4OiBRMi54ID8/IDAsXG4gICAgICAgIHk6IFEyLnkgPz8gMCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgxJHGsOG7nW5nIHRo4bqzbmcgdsOgIGto4buRaSBjw7MgY+G6r3QgbmhhdSBraMO0bmdcbiAgc3RhdGljIGNoZWNrTGluZVBhc3NCbG9ja0hvcml6b250YWwoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHhPcllPZkxpbmU6IG51bWJlciwgZGlyZWN0aW9uOiAneCcgfCAneScsIG9ic3RhY2xlUmVjdDogSVJlY3RbXSwgcmV0dXJuQWxsRWxlbWVudEJsb2NrUm9hZD86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBtaW5pbXVtRGlzdGFuY2VGcm9tQmxvY2sgPSA4O1xuXG4gICAgc3RhcnQgKz0gbWluaW11bURpc3RhbmNlRnJvbUJsb2NrICsgMTsgLy8gdHLDoW5oIGto4buRaSB4deG6pXQgcGjDoXQgdsOgbyBsaXN0XG4gICAgY29uc3QgbGlzdFBvaW50c09mTGluZSA9IHJhbmdlKHN0YXJ0LCBlbmQgKyAxKTtcblxuICAgIGNvbnN0IGVsZW1lbnRCbG9ja1JvYWQgPSBvYnN0YWNsZVJlY3QuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBsZWZ0ID0gKGl0ZW0ueCA/PyAwKSAtIG1pbmltdW1EaXN0YW5jZUZyb21CbG9jaztcbiAgICAgIGNvbnN0IHJpZ2h0ID0gKGl0ZW0ueCA/PyAwKSArIChpdGVtLndpZHRoID8/IDApICsgbWluaW11bURpc3RhbmNlRnJvbUJsb2NrO1xuICAgICAgY29uc3QgdG9wID0gKGl0ZW0ueSA/PyAwKSAtIG1pbmltdW1EaXN0YW5jZUZyb21CbG9jaztcbiAgICAgIGNvbnN0IGJvdHRvbSA9IChpdGVtLnkgPz8gMCkgKyAoaXRlbS5oZWlnaHQgPz8gMCkgKyBtaW5pbXVtRGlzdGFuY2VGcm9tQmxvY2s7XG5cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd4JyAmJiBsaXN0UG9pbnRzT2ZMaW5lLmZpbmQoKGVsKSA9PiBsZWZ0IDw9IGVsICYmIGVsIDw9IHJpZ2h0KSAmJiB0b3AgPD0geE9yWU9mTGluZSAmJiB4T3JZT2ZMaW5lIDw9IGJvdHRvbSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICd5JyAmJiBsaXN0UG9pbnRzT2ZMaW5lLmZpbmQoKGVsKSA9PiB0b3AgPD0gZWwgJiYgZWwgPD0gYm90dG9tKSAmJiBsZWZ0IDw9IHhPcllPZkxpbmUgJiYgeE9yWU9mTGluZSA8PSByaWdodCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkIHx8ICFlbGVtZW50QmxvY2tSb2FkLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAocmV0dXJuQWxsRWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRCbG9ja1JvYWQ7XG4gICAgfVxuXG4gICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3knKSB7XG4gICAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKChhLnkgPz8gMCkgLSBzdGFydCkgPCBNYXRoLmFicygoYi55ID8/IDApIC0gc3RhcnQpID8gYSA6IGIpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKChhLnggPz8gMCkgLSBzdGFydCkgPCBNYXRoLmFicygoYi54ID8/IDApIC0gc3RhcnQpID8gYSA6IGIpKTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB24bq9IHbhu4EgxJFp4buDbSBlbmQgeGVtIGPDsyBi4buLIGNo4bqvbiBi4bufaSBraOG7kWkgbsOgbyBraMO0bmcsIG7hur91IGPDsyB0aMOsIHBo4bqjaSBsw7lpIGzhuqFpIMSRaeG7g20gZW5kIG5ow6kuXG4gIHN0YXRpYyBjaGVja0Jsb2Nrc0VsZW1lbnRTdHJhaWdodFkoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBlbmRQb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0W10pIHtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0WSwgZW5kUG9zaXRpb24ueSwgc3RhcnRYLCAneScsIG9ic3RhY2xlUmVjdCwgdHJ1ZSkgYXMgSVJlY3RbXTtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCB8fCAhZWxlbWVudEJsb2NrUm9hZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKGEueCA/PyAwIC0gc3RhcnRYKSA8IE1hdGguYWJzKGIueCA/PyAwIC0gc3RhcnRYKSA/IGEgOiBiKSk7XG4gIH1cblxuICAvLyBraeG7g20gdHJhIGjGsOG7m25nIG5nYW5nIHbhur0gduG7gSDEkWnhu4NtIGVuZCB4ZW0gY8OzIGLhu4sgY2jhuq9uIGLhu59pIGto4buRaSBuw6BvIGtow7RuZywgbuG6v3UgY8OzIHRow6wgcGjhuqNpIGzDuWkgbOG6oWkgxJFp4buDbSBlbmQgbmjDqS5cbiAgc3RhdGljIGNoZWNrQmxvY2tzRWxlbWVudFgoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBlbmRQb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0W10pIHtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0WCwgZW5kUG9zaXRpb24ueCwgc3RhcnRZLCAneCcsIG9ic3RhY2xlUmVjdCwgdHJ1ZSkgYXMgSVJlY3RbXTtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCB8fCAhZWxlbWVudEJsb2NrUm9hZC5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gZWxlbWVudEJsb2NrUm9hZC5yZWR1Y2UoKGE6IElSZWN0LCBiOiBJUmVjdCkgPT4gKE1hdGguYWJzKChhLnkgPz8gMCkgLSBzdGFydFkpIDwgTWF0aC5hYnMoKGIueSA/PyAwKSAtIHN0YXJ0WSkgPyBhIDogYikpO1xuICB9XG5cbiAgLy8ga2nhu4NtIHRyYSBoxrDhu5tuZyBzYW5nIHBo4bqjaSBsw6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc0xlZnQoc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZW5kUG9zaXRpb246IElQb3NpdGlvblhZLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4pOiBJUG9pbnQge1xuICAgIGNvbnN0IGNvb3JkTFg6IElQb2ludCA9IHsgeDogZW5kUG9zaXRpb24ueCwgeTogc3RhcnRZIH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IHRoaXMuY2hlY2tMaW5lUGFzc0Jsb2NrSG9yaXpvbnRhbChzdGFydFgsIGVuZFBvc2l0aW9uLngsIHN0YXJ0WSwgJ3gnLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkKSB7XG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJzE0JyB9KTtcblxuICAgICAgcmV0dXJuIGNvb3JkTFg7XG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uWCA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmNoZWNrVXBEb3duTGVmdFJpZ2h0KHN0YXJ0WCwgZW5kUG9zaXRpb24ueCwgJ3gnKTtcbiAgICBjb25zdCBzcGVjaWZpY1hFbGVtZW50ID0gZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0JyA/IChlbGVtZW50QmxvY2tSb2FkLnggPz8gMCkgOiAoZWxlbWVudEJsb2NrUm9hZC54ID8/IDApICsgKGVsZW1lbnRCbG9ja1JvYWQud2lkdGggPz8gMCk7XG5cbiAgICBjb29yZExYLnggPSBzcGVjaWZpY1hFbGVtZW50ICsgTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyICsgbGluZUN1cnZlIC8gMjtcbiAgICBpZiAoZGlyZWN0aW9uWCA9PT0gJ3JpZ2h0Jykge1xuICAgICAgY29vcmRMWC54ID0gc3BlY2lmaWNYRWxlbWVudCAtIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMiAtIGxpbmVDdXJ2ZSAvIDI7XG4gICAgfVxuXG4gICAgbGV0IHN0YXJ0WEJ5cGFzc0VsZW1lbnQgPSBjb29yZExYLng7XG5cbiAgICBpZiAoKGRpcmVjdGlvblggPT09ICdsZWZ0JyAmJiBzdGFydFggLSAoY29vcmRMWC54ID8/IDApIDw9IDApIHx8IChkaXJlY3Rpb25YID09PSAncmlnaHQnICYmIHN0YXJ0WCAtIChjb29yZExYLnggPz8gMCkgPj0gMCkpIHtcbiAgICAgIGNvb3JkTFgueCA9IHN0YXJ0WDtcbiAgICAgIHN0YXJ0WEJ5cGFzc0VsZW1lbnQgPSBNb0NhbnZhc0NhbGN1bGF0b3JCcmFuY2hVdGlsLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb25YLCBjb29yZExYLngsIGxpbmVDdXJ2ZSk7XG4gICAgfVxuXG4gICAgbGV0IGxpbmVCeVBhc3NCbG9jazogSVBvaW50c1tdID0gW107XG4gICAgbGV0IHsgZW5kUGF0aCB9ID0gTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwuYnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlKHN0YXJ0WEJ5cGFzc0VsZW1lbnQgPz8gMCwgY29vcmRMWC55ID8/IDAsIGVuZFBvc2l0aW9uLnksIGxpbmVDdXJ2ZSwgZWxlbWVudEJsb2NrUm9hZCwgZGlyZWN0aW9uWCwgbGluZUJ5UGFzc0Jsb2NrLCB1bmRlZmluZWQsIGNvb3JkTFgueCk7XG5cbiAgICBpZiAoTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLlNUQVJUX01PREUgPT09ICdib3R0b20tbGVmdCcgJiYgZWxlbWVudEJsb2NrUm9hZC54ICsgZWxlbWVudEJsb2NrUm9hZC53aWR0aCAvIDIgPT09IGVuZFBvc2l0aW9uLnggJiYgTWF0aC5hYnMoZW5kUG9zaXRpb24ueSAtIGVsZW1lbnRCbG9ja1JvYWQueSkgPD0gMjApIHtcbiAgICAgIC8vIGNoZWNrIHhlbSBraOG7kWkgY2jhuq9uIGPDsyBwaOG6o2kgbMOgIGto4buRaSDEkcOtY2ggaGF5IGtow7RuZz9cbiAgICAgIGxpbmVCeVBhc3NCbG9jayA9IFtdO1xuICAgICAgY29uc3QgZGF0YSA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmJ5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZU5ld01vZGUoc3RhcnRYQnlwYXNzRWxlbWVudCA/PyAwLCBjb29yZExYLnkgPz8gMCwgZW5kUG9zaXRpb24ueSwgbGluZUJ5UGFzc0Jsb2NrLCB1bmRlZmluZWQsIGNvb3JkTFgueCk7XG5cbiAgICAgIGVuZFBhdGggPSBkYXRhLmVuZFBhdGg7XG4gICAgfVxuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKC4uLmxpbmVCeVBhc3NCbG9jayk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICcxNScgfSk7XG4gICAgY29uc3QgZGF0YUVuZFBhdGggPSB0aGlzLmNoZWNrQW5kQXZvaWRCbG9ja3NMZWZ0KGVuZFBhdGgueCA/PyAwLCBlbmRQYXRoLnkgPz8gMCwgbGluZUN1cnZlLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0LCBzZXBhcmF0ZWRQb2ludHMpO1xuXG4gICAgcmV0dXJuIGRhdGFFbmRQYXRoO1xuICB9XG5cbiAgLy8ga2nhu4NtIHRyYSBoxrDhu5tuZyBzYW5nIHBo4bqjaSBsw6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2NrcyhzdGFydFg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIGxpbmVDdXJ2ZTogbnVtYmVyLCBlbmRQb3NpdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9LCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIHBhdGhQcmU/OiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZzsgZW5kUGF0aDogSVBvaW50IH0ge1xuICAgIGNvbnN0IGNvb3JkTFg6IElQb2ludCA9IHsgeDogZW5kUG9zaXRpb24ueCAtIDMwLCB5OiBzdGFydFkgfTtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKHN0YXJ0WCwgZW5kUG9zaXRpb24ueCwgc3RhcnRZLCAneCcsIG9ic3RhY2xlUmVjdCkgYXMgSVJlY3Q7XG5cbiAgICBpZiAoIWVsZW1lbnRCbG9ja1JvYWQpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZID0gdGhpcy5jaGVja0Jsb2Nrc0VsZW1lbnRTdHJhaWdodFkoKGNvb3JkTFgueCA/PyAwKSArIDEwLCBjb29yZExYLnkgPz8gMCwgZW5kUG9zaXRpb24sIG9ic3RhY2xlUmVjdCk7IC8vIHTDrW5oIMSRaeG7g20gZW5kX3ggZOG7sSBraeG6v24gdGhlbyB0csaw4budbmcgaOG7o3AgxJHhurlwIG5o4bqldCB4ZW0gbsOzIGPDsyBjaOG6r24gYuG7n2kga2jhu5FpIG7DoG8ga2hpIGvDqW8geHXhu5FuZyBraMO0bmdcblxuICAgICAgaWYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZICYmIChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWS54ID8/IDApID4gc3RhcnRYKSB7XG4gICAgICAgIGxldCB0b1ggPSAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkueCA/PyAwKSAtIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMiAtIGxpbmVDdXJ2ZSAvIDI7XG5cbiAgICAgICAgaWYgKChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWT8ueCA/PyAwKSAtIHN0YXJ0WCA8IE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUKSB7XG4gICAgICAgICAgdG9YID0gKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZLnggPz8gMCkgLSAoKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZPy54ID8/IDApIC0gc3RhcnRYKSAvIDI7XG4gICAgICAgIH1cbiAgICAgICAgY29vcmRMWC54ID0gdG9YO1xuICAgICAgfVxuXG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJ2NoZWNrQW5kQXZvaWRCbG9ja3MnLCBuYW1lOiAnZW5kJyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogcGF0aFByZSA/IGAke3BhdGhQcmV9IEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAgOiBgTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YCxcbiAgICAgICAgZW5kUGF0aDogY29vcmRMWCxcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGRpcmVjdGlvblggPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5jaGVja1VwRG93bkxlZnRSaWdodChzdGFydFgsIGVuZFBvc2l0aW9uLngsICd4Jyk7XG5cbiAgICBjb29yZExYLnggPSAoZWxlbWVudEJsb2NrUm9hZC54ID8/IDApIC0gTW9DYW52YXNDb25uZWN0TmF2aWdhdGlvbk5ld0VsZW1lbnRVdGlsLkVMRU1FTlRfTUFSR0lOX0JFVFdFRU5fQlJBTkNIX0RFRkFVTFQgLyAyIC0gbGluZUN1cnZlIC8gMjtcblxuICAgIGxldCBzZXBhcmF0ZWRQb2ludHNCeVBhc3NFbGVtZW50T25SaWdodFNpZGU6IEFycmF5PElQb2ludHM+ID0gW107XG5cbiAgICBjb25zdCB7IHBhdGhCeVBhc3NRLCBlbmRQYXRoIH0gPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5ieVBhc3NFbGVtZW50T25SaWdodFNpZGUoXG4gICAgICBjb29yZExYLngsXG4gICAgICBjb29yZExYLnkgPz8gMCxcbiAgICAgIGVuZFBvc2l0aW9uLnksXG4gICAgICBsaW5lQ3VydmUsXG4gICAgICBlbGVtZW50QmxvY2tSb2FkLFxuICAgICAgZGlyZWN0aW9uWCxcbiAgICAgIHNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZSxcbiAgICAgICdjaGVja0FuZEF2b2lkQmxvY2tzJyxcbiAgICAgIGNvb3JkTFgueFxuICAgICk7XG4gICAgbGV0IGxpbmUgPSBwYXRoUHJlID8gYCR7cGF0aFByZX0gTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9ICR7cGF0aEJ5UGFzc1F9YCA6IGBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX0gJHtwYXRoQnlQYXNzUX1gO1xuXG4gICAgLy8gdMOtbmggdHLGsOG7m2MgdHLGsOG7nW5nIGjhu6NwIHNhdSDEkeG7gyBsw7lpIGxpbmVcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkUHJlID0gdGhpcy5jaGVja0xpbmVQYXNzQmxvY2tIb3Jpem9udGFsKGVuZFBhdGgueCA/PyAwLCBlbmRQb3NpdGlvbi54LCBlbmRQYXRoLnkgPz8gMCwgJ3gnLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKCFlbGVtZW50QmxvY2tSb2FkUHJlKSB7XG4gICAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWSA9IHRoaXMuY2hlY2tCbG9ja3NFbGVtZW50U3RyYWlnaHRZKChlbmRQb3NpdGlvbi54ID8/IDApICsgMTAsIGVuZFBhdGgueSA/PyAwLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0KTtcblxuICAgICAgaWYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVZKSB7XG4gICAgICAgIGNvbnN0IFhOZXcgPSAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVkueCA/PyAwKSAtIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5FTEVNRU5UX01BUkdJTl9CRVRXRUVOX0JSQU5DSF9ERUZBVUxUIC8gMiAtIGxpbmVDdXJ2ZSAvIDI7XG5cbiAgICAgICAgaWYgKFhOZXcgPCAoZW5kUGF0aC54ID8/IDApKSB7XG4gICAgICAgICAgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlID0gW107XG4gICAgICAgICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICdjaGVja0FuZEF2b2lkQmxvY2tzJywgbmFtZTogJ3UnIH0pO1xuXG4gICAgICAgICAgbGluZSA9IHBhdGhQcmUgPyBgJHtwYXRoUHJlfSBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX1gIDogYEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWA7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGF0aDogbGluZSxcbiAgICAgICAgICAgIGVuZFBhdGg6IGNvb3JkTFgsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBzZXBhcmF0ZWRQb2ludHMuc3BsaWNlKHNlcGFyYXRlZFBvaW50cy5sZW5ndGgsIDAsIC4uLnNlcGFyYXRlZFBvaW50c0J5UGFzc0VsZW1lbnRPblJpZ2h0U2lkZSk7XG4gICAgc2VwYXJhdGVkUG9pbnRzLnB1c2goeyBzdGFydDogeyB4OiBzdGFydFgsIHk6IHN0YXJ0WSB9LCBlbmQ6IGNvb3JkTFgsIG1vZGU6ICdob3Jpem9udGFsJywgaWQ6ICdjaGVja0FuZEF2b2lkQmxvY2tzJywgbmFtZTogJ3AnIH0pO1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLmNoZWNrQW5kQXZvaWRCbG9ja3MoZW5kUGF0aC54ID8/IDAsIGVuZFBhdGgueSA/PyAwLCBsaW5lQ3VydmUsIGVuZFBvc2l0aW9uLCBvYnN0YWNsZVJlY3QsIHNlcGFyYXRlZFBvaW50cywgYCR7bGluZX1gKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBkYXRhLnBhdGgsXG4gICAgICBlbmRQYXRoOiBkYXRhLmVuZFBhdGgsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB2w6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc1koc3RhcnRYOiBudW1iZXIsIHN0YXJ0WTogbnVtYmVyLCBsaW5lQ3VydmU6IG51bWJlciwgZW5kUG9zaXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSwgZGlyZWN0aW9uWTogc3RyaW5nLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIHBhdGhQcmU/OiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZzsgZW5kUGF0aDogSVBvaW50IH0ge1xuICAgIGNvbnN0IGNvb3JkTFg6IElQb2ludCA9IHsgeDogc3RhcnRYLCB5OiBlbmRQb3NpdGlvbi55IH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IHRoaXMuY2hlY2tMaW5lUGFzc0Jsb2NrSG9yaXpvbnRhbChzdGFydFksIGVuZFBvc2l0aW9uLnksIHN0YXJ0WCwgJ3knLCBvYnN0YWNsZVJlY3QpIGFzIElSZWN0O1xuXG4gICAgaWYgKChkaXJlY3Rpb25ZID09PSAndW5kZXInICYmIHN0YXJ0WSA+IGVuZFBvc2l0aW9uLnkpIHx8IChkaXJlY3Rpb25ZID09PSAnYWJvdmUnICYmIHN0YXJ0WSA8IGVuZFBvc2l0aW9uLnkpKSB7XG4gICAgICBzZXBhcmF0ZWRQb2ludHMucHVzaCh7IHN0YXJ0OiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sIGVuZDogY29vcmRMWCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDogJ2snIH0pO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXRoOiBwYXRoUHJlID8/ICcnLFxuICAgICAgICBlbmRQYXRoOiB7IHg6IHN0YXJ0WCwgeTogc3RhcnRZIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIWVsZW1lbnRCbG9ja1JvYWQpIHtcbiAgICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiAncicgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IHBhdGhQcmUgPyBgJHtwYXRoUHJlfSBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX1gIDogYEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAsXG4gICAgICAgIGVuZFBhdGg6IGNvb3JkTFgsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHkgPSBkaXJlY3Rpb25ZID09PSAnYWJvdmUnID8gKGVsZW1lbnRCbG9ja1JvYWQueSA/PyAwKSArIChlbGVtZW50QmxvY2tSb2FkLmhlaWdodCA/PyAwKSA6IChlbGVtZW50QmxvY2tSb2FkLnkgPz8gMCk7XG5cbiAgICBjb29yZExYLnkgPSBNb0NhbnZhc0NhbGN1bGF0b3JCcmFuY2hVdGlsLm1hdGhPcGVyYXRvcnNDYWxjdWxhdGlvbihkaXJlY3Rpb25ZLCB5LCBsaW5lQ3VydmUgKiAyKTtcblxuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiAncmEnIH0pO1xuICAgIGNvbnN0IHsgcGF0aEJ5UGFzc1EsIGVuZFBhdGggfSA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmJ5UGFzc0VsZW1lbnRPblRvcEJvdHRvbVNpZGUoY29vcmRMWC54ID8/IDAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbi54LCBsaW5lQ3VydmUsIGVsZW1lbnRCbG9ja1JvYWQsIGRpcmVjdGlvblksIHNlcGFyYXRlZFBvaW50cyk7XG5cbiAgICAvLyBzYXUga2hpIMSRw6MgdHLDoW5oIHRow6wgdGnhur9wIHThu6VjIGvDqW8gZMOgaSBjaG8gdOG7nWkgxJFp4buDbSBlbmQgeCwgbOG6oWkga2nhu4NtIHRyYSB4ZW0gY8OzIGto4buRaSBuw6BvIGNo4bqvbiBraMO0bmc/XG4gICAgY29uc3QgbGluZSA9IHBhdGhQcmUgPyBgJHtwYXRoUHJlfSBMICR7Y29vcmRMWC54fSAke2Nvb3JkTFgueX0gJHtwYXRoQnlQYXNzUX1gIDogYEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fSAke3BhdGhCeVBhc3NRfWA7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuY2hlY2tBbmRBdm9pZEJsb2Nrc1koZW5kUGF0aC54ID8/IDAsIGVuZFBhdGgueSA/PyAwLCBsaW5lQ3VydmUsIGVuZFBvc2l0aW9uLCBkaXJlY3Rpb25ZLCBvYnN0YWNsZVJlY3QsIHNlcGFyYXRlZFBvaW50cywgYCR7bGluZX1gKTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoOiBkYXRhLnBhdGgsXG4gICAgICBlbmRQYXRoOiBkYXRhLmVuZFBhdGgsXG4gICAgfTtcbiAgfVxuXG4gIC8vIGtp4buDbSB0cmEgaMaw4bubbmcgdGjhurNuZyB2w6AgdHLDoW5oIGto4buRaVxuICBzdGF0aWMgY2hlY2tBbmRBdm9pZEJsb2Nrc1lMZWZ0KHN0YXJ0WDogbnVtYmVyLCBzdGFydFk6IG51bWJlciwgbGluZUN1cnZlOiBudW1iZXIsIGVuZFBvc2l0aW9uOiBJUG9zaXRpb25YWSwgZGlyZWN0aW9uWTogc3RyaW5nLCBvYnN0YWNsZVJlY3Q6IElSZWN0W10sIHNlcGFyYXRlZFBvaW50czogQXJyYXk8SVBvaW50cz4sIHBhdGhQcmU/OiBzdHJpbmcpOiB7IHBhdGg6IHN0cmluZzsgZW5kUGF0aDogSVBvc2l0aW9uWFkgfSB7XG4gICAgY29uc3Qga2V5ID0gJ2NoZWNrQW5kQXZvaWRCbG9ja3NZTGVmdCc7XG5cbiAgICBjb25zdCBjb29yZExYOiBJUG9zaXRpb25YWSA9IHsgeDogc3RhcnRYLCB5OiBlbmRQb3NpdGlvbi55IH07XG4gICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZCA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmNoZWNrTGluZVBhc3NCbG9ja0hvcml6b250YWwoc3RhcnRZLCBlbmRQb3NpdGlvbi55LCBzdGFydFgsICd5Jywgb2JzdGFjbGVSZWN0KSBhcyBJUmVjdDtcblxuICAgIGlmICghZWxlbWVudEJsb2NrUm9hZCkge1xuICAgICAgY29uc3QgZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVggPSBNb0NhbnZhc0NhbGN1bGF0b3JEaXJlY3Rpb25FbGVtZW50VXRpbC5jaGVja0Jsb2Nrc0VsZW1lbnRYKGNvb3JkTFgueCA/PyAwLCBjb29yZExYLnkgPz8gMCwgZW5kUG9zaXRpb24sIG9ic3RhY2xlUmVjdCk7XG5cbiAgICAgIGlmIChlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWCkge1xuICAgICAgICBjb25zdCB0b3BFbGVtZW50QmxvY2tSb2FkID0gZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVgueSA/PyAwO1xuICAgICAgICBjb25zdCBib3R0b21FbGVtZW50QmxvY2tSb2FkID0gKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYLnkgPz8gMCkgKyAoZWxlbWVudEJsb2NrUm9hZFN0cmFpZ2h0TGluZVguaGVpZ2h0ID8/IDApO1xuXG4gICAgICAgIGxldCB0b1kgPSBkaXJlY3Rpb25ZID09PSAndW5kZXInID8gdG9wRWxlbWVudEJsb2NrUm9hZCA6IGJvdHRvbUVsZW1lbnRCbG9ja1JvYWQ7XG5cbiAgICAgICAgdG9ZID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWSwgdG9ZLCBsaW5lQ3VydmUgKiAyKTtcblxuICAgICAgICBpZiAodG9ZID4gc3RhcnRZICYmIE1vQ2FudmFzQ29ubmVjdE5hdmlnYXRpb25OZXdFbGVtZW50VXRpbC5TVEFSVF9NT0RFICE9PSAnYm90dG9tLWxlZnQnKSB7XG4gICAgICAgICAgY29vcmRMWC55ID0gdG9ZO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiBrZXksIG5hbWU6ICdhJyB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGF0aDogcGF0aFByZSA/IGAke3BhdGhQcmV9IEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAgOiBgTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YCxcbiAgICAgICAgZW5kUGF0aDogY29vcmRMWCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgeSA9IGRpcmVjdGlvblkgPT09ICdhYm92ZScgPyAoZWxlbWVudEJsb2NrUm9hZC55ID8/IDApICsgKGVsZW1lbnRCbG9ja1JvYWQuaGVpZ2h0ID8/IDApIDogKGVsZW1lbnRCbG9ja1JvYWQueSA/PyAwKTtcbiAgICBjb25zdCBlbGVtZW50QmxvY2tSb2FkU3RyYWlnaHRMaW5lWCA9IE1vQ2FudmFzQ2FsY3VsYXRvckRpcmVjdGlvbkVsZW1lbnRVdGlsLmNoZWNrQmxvY2tzRWxlbWVudFgoY29vcmRMWC54ID8/IDAsIGNvb3JkTFgueSA/PyAwLCBlbmRQb3NpdGlvbiwgb2JzdGFjbGVSZWN0KTtcbiAgICBsZXQgaWdub3JlQnlwYXNzRWxlbWVudCA9IGZhbHNlO1xuXG4gICAgaWYgKGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYICYmIGVsZW1lbnRCbG9ja1JvYWRTdHJhaWdodExpbmVYLmlkID09PSBlbGVtZW50QmxvY2tSb2FkLmlkKSB7XG4gICAgICBpZ25vcmVCeXBhc3NFbGVtZW50ID0gdHJ1ZTtcbiAgICB9XG4gICAgY29vcmRMWC55ID0gTW9DYW52YXNDYWxjdWxhdG9yQnJhbmNoVXRpbC5tYXRoT3BlcmF0b3JzQ2FsY3VsYXRpb24oZGlyZWN0aW9uWSwgeSwgbGluZUN1cnZlICogMik7XG5cbiAgICBsZXQgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlOiBBcnJheTxJUG9pbnRzPiA9IFtdO1xuXG4gICAgY29uc3QgeyBwYXRoQnlQYXNzUSwgZW5kUGF0aCB9ID0gTW9DYW52YXNDYWxjdWxhdG9yRGlyZWN0aW9uRWxlbWVudFV0aWwuYnlQYXNzRWxlbWVudE9uVG9wQm90dG9tU2lkZShjb29yZExYLnggPz8gMCwgY29vcmRMWC55ID8/IDAsIGVuZFBvc2l0aW9uLngsIGxpbmVDdXJ2ZSwgZWxlbWVudEJsb2NrUm9hZCwgZGlyZWN0aW9uWSwgc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlLCBrZXkpO1xuICAgIGxldCBlbmQgPSBjb29yZExYO1xuICAgIGxldCBsaW5lID0gcGF0aFByZSA/IGAke3BhdGhQcmV9IEwgJHtjb29yZExYLnh9ICR7Y29vcmRMWC55fWAgOiBgTCAke2Nvb3JkTFgueH0gJHtjb29yZExYLnl9YDtcblxuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHsgeDogc3RhcnRYLCB5OiBzdGFydFkgfSwgZW5kOiBjb29yZExYLCBtb2RlOiAnaG9yaXpvbnRhbCcsIGlkOiBrZXksIG5hbWU6ICdiJyB9KTtcblxuICAgIGlmIChpZ25vcmVCeXBhc3NFbGVtZW50KSB7XG4gICAgICBzZXBhcmF0ZWRQb2ludHNCeVBhc3NFbGVtZW50T25SaWdodFNpZGUgPSBbXTtcbiAgICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IGNvb3JkTFgsIGVuZCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDoga2V5LCBuYW1lOiAnYycgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHBhdGg6IGxpbmUsXG4gICAgICAgIGVuZFBhdGg6IGVuZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZW5kID0gZW5kUGF0aDtcbiAgICBsaW5lICs9IGAgJHtwYXRoQnlQYXNzUX1gO1xuICAgIHNlcGFyYXRlZFBvaW50cy5zcGxpY2Uoc2VwYXJhdGVkUG9pbnRzLmxlbmd0aCwgMCwgLi4uc2VwYXJhdGVkUG9pbnRzQnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlKTtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5jaGVja0FuZEF2b2lkQmxvY2tzWUxlZnQoZW5kLnggPz8gMCwgZW5kLnkgPz8gMCwgbGluZUN1cnZlLCBlbmRQb3NpdGlvbiwgZGlyZWN0aW9uWSwgb2JzdGFjbGVSZWN0LCBzZXBhcmF0ZWRQb2ludHMsIGAke2xpbmV9YCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGF0aDogZGF0YS5wYXRoLFxuICAgICAgZW5kUGF0aDogZGF0YS5lbmRQYXRoLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYnlQYXNzRWxlbWVudE9uUmlnaHRTaWRlTmV3TW9kZShzdGFydFg6IG51bWJlciwgc3RhcnRZOiBudW1iZXIsIGVuZFk6IG51bWJlciwgc2VwYXJhdGVkUG9pbnRzOiBBcnJheTxJUG9pbnRzPiwga2V5Pzogc3RyaW5nLCBjb29yZExYPzogbnVtYmVyKSB7XG4gICAgY29uc3Qgc3RhcnQgPSB7IHg6IGNvb3JkTFggPz8gc3RhcnRYLCB5OiBzdGFydFkgfTtcbiAgICBjb25zdCBlbmQgPSB7IHg6IChzdGFydC54ID8/IDApIC0gMjAsIHk6IGVuZFkgfTtcblxuICAgIHNlcGFyYXRlZFBvaW50cy5wdXNoKHsgc3RhcnQ6IHN0YXJ0LCBlbmQ6IGVuZCwgbW9kZTogJ2hvcml6b250YWwnLCBpZDoga2V5LCBuYW1lOiAncTJyJyB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICBwYXRoQnlQYXNzUTogYGAsXG4gICAgICBlbmRQYXRoOiBlbmQsXG4gICAgfTtcbiAgfVxufVxuIl19
|